Dash0 Raises $110M Series B at $1B Valuation

Last updated: July 5, 2026

Write Prompts

Create effective instructions for Agent0 using the User Prompt field and variables.

Write prompts to instruct Agent0 what to do when your automation runs. The prompt is your instruction to Agent0, with variables filled in from the triggering event.

Prompt editor showing user prompt field with variable syntax

The User Prompt Field

The User Prompt field contains the instruction text sent to Agent0. Write it as if you're instructing a capable colleague who has access to your observability data but needs clear direction.

When an automation triggers:

  1. Variables like {{slack.channel.name}} are replaced with actual values from the event
  2. The resolved prompt is sent to Agent0
  3. Agent0 analyzes the instruction, queries data, and takes actions
  4. Results are recorded in the run history

Write Clear Instructions

Agent0 performs best with specific, actionable instructions.

Be Specific

Vague:

1
Check the service.

Specific:

1
Query the error rate for the checkout service over the last hour. If it exceeds 5%, post a summary to #incidents with the top 3 error messages.

The specific version tells Agent0:

  • Which service (checkout)
  • Which metric (error rate)
  • Time range (last hour)
  • When to act (exceeds 5%)
  • Where to post (#incidents)
  • What to include (top 3 error messages)

Include Context

Explain why the task matters to help Agent0 make better decisions.

Without context:

1
Query metrics for {{check.name}}.

With context:

1
Check {{check.name}} failed in production. This check monitors our payment gateway. Query error rate, latency, and recent log errors over the last 30 minutes to help the on-call engineer diagnose the issue.

Context clarifies this is a production incident requiring urgency and focuses on payment-critical metrics.

Set Expectations

If you want specific output format, ask explicitly:

1
Query the top 5 services by error rate in the last 24 hours. Format as a bulleted list with service name, error count, and p99 latency. Post to #daily-reports.

Agent0 will structure output to match your expectations.

Use Variables

Variables are placeholders that get replaced with real values when the automation runs.

Variable Syntax

Reference variables with double curly braces: {{variableName}}

Example:

1
A user mentioned {{slack.message.text}} in {{slack.channel.name}}. Investigate this issue.

At runtime, if a message says "checkout service is down" in #incidents, the prompt becomes:

1
A user mentioned checkout service is down in incidents. Investigate this issue.

Essential Variables

Most prompts use these variables:

Time:

  • {{now}} — Current timestamp (e.g., 2026-06-13T14:30:00Z)
  • {{today}} — Current date (e.g., 2026-06-13)

Slack triggers:

  • {{slack.channel.name}} — Channel name
  • {{slack.message.text}} — Message content
  • {{slack.user.handle}} — Who posted the message

Check triggers:

  • {{check.name}} — Failed check name
  • {{label.service}} — Service from check labels

GitHub triggers:

  • {{github.repository}} — Repository name (e.g., dash0hq/dash0)
  • {{github.action}} — What happened (e.g., opened)
Tip

Start typing {{ in the prompt editor to see autocomplete suggestions for available variables.

When to Use Constants

Constants are custom values you define once and reuse. Use them for:

Environment names:

12
Define: environment = "production"
Use: Check failed in {{environment}} environment.

Default channels:

12
Define: alert_channel = "incidents"
Use: Post findings to #{{alert_channel}}.

Team identifiers:

12
Define: team = "platform-team"
Use: Alert the {{team}} about this issue.

Common timeframes:

12
Define: analysis_window = "1h"
Use: Query error rate over the last {{analysis_window}}.

Define constants in the automation's Constants section, then reference them like any other variable.

Example Prompts

Real-world examples demonstrate effective patterns.

Incident Triage

Trigger: Failed check

Prompt:

1234567891011
Check "{{check.name}}" failed for service {{label.service}}.
Query the following for the last 30 minutes:
- Error rate and top 5 error messages
- p99 latency trend
- Recent log errors (limit 10)
Summarize your findings and post to #incidents with:
1. What happened
2. Which service is affected
3. Recommended next steps for the on-call engineer

Slack-Driven Investigation

Trigger: Slack message containing "investigate"

Prompt:

12345678910
{{slack.user.handle}} asked to investigate something in {{slack.channel.name}}.
Message: "{{slack.message.text}}"
Parse the message for service names. For each service mentioned:
1. Query error rate over the last hour
2. Check for active check failures
3. Look for latency spikes
Respond in thread with your findings. If no issues found, confirm the service is healthy.

Scheduled Reporting

Trigger: Cron 0 9 * * MON-FRI (9am weekdays)

Prompt:

123456789101112
Morning service health report for {{today}}.
Query all services and identify the top 5 by error count in the last 24 hours.
For each service include:
- Service name
- Total error count
- Error rate percentage
- p99 latency
- Active check failures (if any)
Format as a bulleted list and post to #daily-reports.

PR Review

Trigger: GitHub pull request opened

Prompt:

12345678910111213
Pull request opened in {{github.repository}}.
Review the PR for services that might be affected by the changes. For each identified service:
1. Query error rate and latency over the last 7 days
2. Check if there are any active alerts or check failures
3. Note any historical performance issues
If you find concerning patterns (error rate trending up, latency spikes, active alerts), post a comment with:
- Which services are at risk
- What the current health metrics show
- Recommendations for extra testing
If all services are healthy, do not comment.

SLO Monitoring

Trigger: Schedule @hourly

Prompt:

1234567891011121314
Hourly SLO compliance check for {{today}} at {{now}}.
Query SLO burn rate for the payment service over the last hour. If the burn rate suggests we'll exhaust the error budget before the end of the month:
1. Calculate remaining budget percentage
2. Identify top contributing error types
3. Check if recent deployments correlate with the increase
4. Post an alert to #slo-alerts with:
- Current burn rate
- Projected budget exhaustion date
- Top errors contributing to the burn
- Recent deployment times (if any)
If burn rate is within acceptable limits, take no action.

Common Pitfalls

Avoid these mistakes that lead to unexpected behavior.

Missing output destination:

If you don't say where to post results, Agent0 may only write a summary without taking action.

Solution: Always specify: "Post to #incidents", "Post summary to Slack".

Vague instructions:

Prompts like "check the service" give Agent0 too much freedom, leading to inconsistent results.

Solution: Be specific about metrics, time ranges, and output format.

Using variables from the wrong trigger:

Referencing {{slack.channel.name}} in a schedule-triggered automation shows literal {{...}} text.

Solution: Only use variables available for your trigger type, or branch on {{dash0.trigger.kind}}.

Assuming Agent0 has context it doesn't:

Agent0 doesn't remember previous runs or have implicit knowledge beyond what's in Dash0.

Solution: Include relevant context in the prompt: what the service does, why the check matters, expected behavior.

Best Practices

Follow these guidelines for reliable results:

  • One task per prompt: Don't cram multiple unrelated tasks into one automation. Split complex workflows into separate automations.
  • Test with manual runs: Click Run Now to test prompts before enabling. Manual runs let you verify the prompt works as expected.
  • Start simple, iterate: Begin with a basic prompt and refine based on run results. Review past runs to see what Agent0 did.
  • Use required tool calls: If your automation's value depends on posting to Slack or querying a metric, add that tool to Required Tool Calls in guardrails.
  • Reference variables correctly: Double-check variable names. A typo like {{slack.chanel.name}} leaves the placeholder unresolved.
  • Avoid prompt injection risks: Don't let untrusted input control critical parts. Use Tool Parameter Overrides in guardrails to pin channel IDs instead of relying on {{slack.message.text}}.

Advanced Patterns

Advanced techniques enable more sophisticated automation behaviors.

Conditional Logic

Instruct Agent0 to make decisions based on query results:

1234567
Query the error rate for the checkout service over the last hour.
If the error rate is below 1%, take no action.
If between 1% and 5%, post a warning to #alerts with the current rate and trend.
If exceeds 5%, post an urgent alert to #incidents with priority "High" and tag the on-call team.

Multi-Step Workflows

Break complex tasks into numbered steps:

12345
1. Query the error rate for service {{label.service}} over the last 30 minutes.
2. If errors exist, query the top 5 error messages with counts.
3. Search logs for the most common error message to find stack traces.
4. Summarize your findings: what's failing, how often, and the likely cause.
5. Post your summary to #incidents with a recommendation for the on-call engineer.

Dynamic Service Lists

Use query results to drive subsequent actions:

12345678
Query all services with error rate > 2% in the last hour.
For each service:
1. Get the top 3 error messages
2. Check for active alerts
3. Query recent deployments (last 24 hours)
Compile a report listing each service with its error rate, top errors, active alerts, and recent deployments. Post to #health-check.

Handling Multiple Trigger Types

If your automation has different trigger types, handle each case:

123
If this is a Slack message, respond in thread in #{{slack.channel.name}}.
If this is a scheduled run, post the daily report to #daily-reports.

Alternatively, create separate automations for each trigger type to keep prompts simpler.

Further Reading