Automations
Create scheduled agents that run on a cron schedule, at a heartbeat interval, or in response to webhooks — with delivery to your favorite messaging platforms.
Automations let you run agent tasks on a schedule without any manual intervention. Set up a recurring check, a daily report, or a webhook-triggered workflow — and have the results delivered to Telegram, Discord, Slack, Lark, or your desktop.
Creating an Automation
- Navigate to Automations in the sidebar (or type
/automation) - Click + New Automation (or choose a template from the gallery)
- Fill in the creation form:
- Name — A short label for the automation (e.g., "Morning News Brief")
- Description — Optional context about what it does
- Prompt — The task you want the agent to perform each time it runs
- Choose a trigger type (see below)
- Configure agent settings and delivery options
- Click Create
Trigger Types
Scheduled (Cron)
Run your automation at specific times — daily, weekly, or on a custom schedule.
Three scheduling modes are available:
| Mode | Example | Best For |
|---|---|---|
| One-time | March 30, 2026 at 9:00 AM | Run-once tasks with a specific deadline |
| Recurring interval | Every 15 minutes | Frequent polling or monitoring |
| Cron expression | 0 9 * * 1-5 (weekdays at 9 AM) | Precise, calendar-aware schedules |
The visual schedule builder lets you pick a frequency (hourly, daily, weekly, monthly) without writing cron syntax. It shows a preview of the next three run times so you can verify the schedule before saving.
Cron expression examples:
| Expression | Meaning |
|---|---|
0 8 * * * | Every day at 8:00 AM |
0 */4 * * * | Every 4 hours |
0 9 * * 1 | Every Monday at 9:00 AM |
30 18 * * 1-5 | Weekdays at 6:30 PM |
0 0 1 * * | First day of each month at midnight |
All cron times respect the timezone set in your system preferences.
Heartbeat
Run your automation at a fixed interval — for example, every 30 minutes. Heartbeats are ideal for continuous monitoring.
- Interval — How often to run (in minutes). Default: 30 minutes
- Active hours (optional) — Restrict execution to a time window, e.g.,
09:00-17:00. Outside this window, the heartbeat sleeps - Queue pickup mode — Instead of running a prompt, the heartbeat can pick up tasks from an agent profile's queue. Select a profile and choose between full context or minimal context mode
Heartbeats use a cost-efficient model (Haiku) by default for frequent checks under one hour, keeping costs low for routine monitoring.
Webhook
Run your automation when an external service sends an HTTP request.
When you create a webhook automation, the app generates:
- A unique URL (e.g.,
https://your-app/automation/webhook/abc123) - A bearer token for authentication
Share these with the external service. The webhook accepts POST requests with a JSON body (up to 1 MB). The payload data is passed to the agent as context.
Payload templates let you extract specific fields from the incoming webhook body:
{{payload.issue.title}}— Extract a nested JSON value{{headers.x-github-event}}— Capture a request header{{meta.timestamp}}— Insert the current timestamp
Manual
The automation only runs when you click Run Now — useful for tasks you want pre-configured but triggered on demand.
Agent Settings
Each automation has its own agent configuration:
| Setting | Description | Default |
|---|---|---|
| Planning mode | Enable the two-phase plan-then-execute workflow | Off |
| Auto-approve plans | Skip manual plan approval (only with planning mode) | Off |
| Timeout | Maximum execution time per run | 10 minutes |
| Working directory | Where the agent operates on your file system | Your default workspace |
| MCP servers | Enable specific tool servers for this automation | None |
| Skills | Enable specific skills for this automation | None |
Timeout options: 5 minutes, 10 minutes, 30 minutes, or 1 hour.
Delivery
Choose where automation results are sent after each run.
Platforms
| Platform | What You Need |
|---|---|
| Desktop | Nothing — notifications appear as toast popups in the app |
| Telegram | A connected Telegram bot (set up in Settings > Channels) and a chat ID |
| Discord | A connected Discord bot and a channel ID |
| Slack | A connected Slack bot and a channel ID |
| Lark / Feishu | A connected Lark app and a chat ID |
Delivery Options
- Suppress empty results — If the agent finds nothing to report, skip the notification entirely. This prevents noise from heartbeats that check for changes but find none
- Only send on failure — Deliver notifications only when a run fails (available for legacy Slack/webhook modes)
Cost Controls
Automations can accumulate costs over time, especially with frequent schedules. Several safeguards are available:
| Control | Description |
|---|---|
| Cost budget | Set a maximum total spend (e.g., $5.00). The automation is automatically disabled when the budget is exhausted |
| Max runs | Set a maximum number of executions. The automation stops after this many runs |
| Expiry date | Set a date after which the automation is automatically disabled |
| Global limits | System-wide daily ($10) and monthly ($100) budgets apply across all automations |
When any limit is reached, you receive a notification and the automation is paused. You can adjust the limits and re-enable it at any time.
Condition Evaluation
For monitoring-style automations, you can add a condition — a natural-language description of when to notify you.
Example: An automation checks your CI/CD status every 2 hours. You set the condition to: "Notify me only if a build failure is detected." The agent evaluates whether the run result satisfies this condition. If nothing noteworthy is found, the delivery is skipped — saving you from unnecessary messages.
The evaluation uses a three-layer approach:
- Hash check — If the result is identical to the last run, skip delivery
- Keyword heuristics — Quick pattern matching for common signals
- AI judge — A lightweight AI model evaluates the condition against the result
Monitoring Your Automations
Automation List
The main Automations page shows a card grid of all your automations. Each card displays:
- Name and description
- Trigger type and schedule
- Status (active or inactive)
- Run count and total cost
- Delivery platform
Filter tabs let you view All, Active, Scheduled (Cron), Webhook, or Heartbeat automations.
Run History
Click any automation to see its detail view with a full run history table:
- Status — Completed, Failed, Timed Out, Cancelled, or in-progress states
- Duration — How long each run took
- Cost — Per-run cost
- Result / Error — Click a row to expand and read the full output
Notifications
Real-time toast notifications appear in the bottom-right corner of the app when:
- A run completes or fails
- An automation is disabled (budget exhausted, max runs reached, or repeated failures)
- An automation expires
Click a notification to open the detail dialog with run history and quick actions (pause, resume, or delete).
Managing Automations
| Action | How |
|---|---|
| Pause | Click the power toggle on the automation card or detail view |
| Resume | Click the power toggle again to re-enable |
| Edit | Click the pencil icon to modify any setting |
| Run now | Click the play button to trigger an immediate run |
| Delete | Click the trash icon and confirm |
| Cancel a run | In the run detail view, click Cancel for an in-progress run |
Advanced Settings
Overlap Policy
Controls what happens when an automation fires while a previous run is still executing:
| Policy | Behavior |
|---|---|
| Skip (default) | Ignore the new trigger — wait for the current run to finish |
| Queue | Add the new run to a queue — it starts after the current run completes |
| Cancel previous | Stop the current run and start the new one |
Missed-Fire Policy
Controls what happens when the app was shut down during a scheduled run:
| Policy | Behavior |
|---|---|
| Fire immediately | Execute all missed runs when the app restarts |
| Skip | Discard missed runs |
| Fire once | Execute one catch-up run when the app restarts |
Templates
The template gallery provides pre-configured automations for common use cases:
| Template | Schedule | Budget |
|---|---|---|
| Daily News Brief | Daily at 8 AM | $5 |
| Price Monitor | Every 4 hours | $5 |
| CI/CD Status | Every 2 hours (weekdays) | $3 |
| Weekly Digest | Sundays at 6 PM | $2 |
| PR Review Reminder | Weekdays at 10 AM | $3 |
| Dependency Audit | Mondays at 9 AM | $3 |
| Daily Standup | Weekdays at 6 PM | $5 |
| Email Digest | Weekdays at 7 AM | $5 |
Each template pre-fills the name, prompt, schedule, and suggested budget. Customize any field before creating.
Limits
| Limit | Value |
|---|---|
| Maximum automations | 50 |
| Concurrent runs | 3 |
| Stored run history per automation | 100 runs |
| Run history retention | 7 days |
| Maximum run timeout | 1 hour |
| Webhook payload size | 1 MB |
| Maximum tags per automation | 20 |