Automation
Triggers, schedules, and watched conditions — work that starts without you.
Automation is the layer that removes the human from the loop where the human adds nothing. It connects three kinds of starters to the workflows and agents you already trust. Schedules: cron-precise, timezone-aware, with calendar awareness so 'first business day of the month' means what you think it means in your region. Event triggers: webhooks in from your other systems, mapped through typed transforms so a Stripe event or a CRM update arrives as structured workflow input rather than raw payload. And watched conditions: standing queries over the context graph — invoice overdue 30 days, contract within 60 days of renewal, inbox thread unanswered for 48 hours — that fire when reality changes, which is the kind of trigger no external system can give you. The reliability story is explicit because automation that silently stops is worse than no automation. Every trigger has a delivery guarantee (at-least-once, with idempotent invocation making that safe), a dead-letter queue you can inspect and replay, and a heartbeat: a schedule that should have fired and did not raises an alert rather than failing silently. Every automated invocation is an ordinary run with an ordinary trace, marked with its trigger, so the 3 a.m. work is as auditable as the 3 p.m. work. Budgets cap each automation per period; runaway triggers exhaust their allowance and page you instead of your card.
[ 01 ]Key features
Three starter types
Schedules, inbound events, and watched graph conditions — including triggers on your own data that no external system can offer.
At-least-once with idempotency
Delivery is guaranteed and invocation is idempotent, so the guarantee is safe; dead-letters are inspectable and replayable.
Heartbeat alerting
A schedule that should have fired and did not raises an alert — silent failure is treated as failure.
Per-automation budgets
Step and spend caps per period; a runaway trigger stops at its allowance and pages a human.
[ 02 ][ automation ]
{
"name": "renewal-radar",
"trigger": {
"watch": "contract.renewal_within_days <= 60"
},
"invoke": { "workflow": "wf_renewal_brief" },
"budget": { "runs": 50, "period": "month" },
"on_failure": "dead_letter + alert"
}