Back to docsCore concepts

Automations

Triggers that run a workflow on its own — schedules, email, GitHub, calendar, Notion, and webhooks.

Last updated July 31, 2026 · 8 min read

An automation is a trigger attached to a workflow. The workflow says what to do; the automation says when. Together they're how a request you once typed by hand becomes work that happens without you.

Calendar reminders ask you to do work. Automations do the work, then tell you it's done.

Every automation names three things:

  1. The workflow to run
  2. The agent that runs it — which decides the voice, the model, and the connectors in play
  3. The trigger — a schedule, an event in one of your tools, or an inbound webhook

What runs each time

Each firing starts a fresh chat. The chat re-reads the latest context from your tools, calls the connectors it needs, and produces the result.

This matters for two reasons:

  • No accumulated state. Last Monday's run doesn't leak into this Monday's. The procedure is the same; the data is fresh.
  • Each run is replayable. Open the automation's run history to see exactly what the last run did, where it spent credits, and what it produced.

If a run fails — network blip, expired token, ambiguous input — Zero records the failure with the reason and notifies you instead of silently dropping it.

Trigger types

Schedules

The most common family: the automation runs on a cadence — daily, weekly, hourly, on a custom cron expression, on a fixed interval, or once at a set moment.

TriggerFires
cronOn a cron expression, in the time zone you name — 0 8 * * 1-5
onceA single time, at a date and time you set
loopOn a fixed interval — every 15m, 1h, 90s

Four ways to say when. You don't have to write cron:

  • Plain English. "Every weekday at 8 a.m. Los Angeles time" — Zero parses this for you. Time zones, working days, "first of the month," "every other Friday" all work. This is what most teams reach for.
  • Cron expression. 0 8 * * 1-5, for precise control. Set the IANA time zone alongside it (Asia/Shanghai, America/Los_Angeles).
  • Interval. Every 15m, 1h, 90s — a loop, for health checks and pollers where wall-clock alignment doesn't matter.
  • One-off. A single firing at a date and time you set — a once. Useful for a reminder tied to a launch, an embargo, or a deadline.

A schedule with no time zone runs in UTC, which is rarely what "9 a.m." means to the reader. Name the zone.

Almost any recurring "I should..." that lives in your head is a candidate: a morning brief at 8 a.m. every weekday, a weekly metrics digest every Monday, an inbox cleanup every evening, a production health check every 30 minutes, an end-of-quarter board prep on the 25th of the third month.

If the work should start from an event rather than a clock — mail arrives, a PR is approved, a page is published — one of the triggers below is the better fit and won't waste runs polling.

Email

TriggerFires
gmail-new-messageWhen a new message arrives
gmail-label-appliedWhen a named label is applied to a message

Both narrow with text rules on the From, To, Cc, Subject, and body — each available as contains and does not contain. With no rules, a Gmail automation matches every inbound message, so start narrow.

Triage support mail without watching the inbox: gmail-new-message filtered to from-contains: @customer-domain.com, running a customer-reply-draft workflow that prepares a draft for you to review.

GitHub

TriggerFires
github-label-appliedA label lands on an issue or PR — filter by label, repository, issues/PRs/both, and whether the actor is you or anyone
github-workflow-run-completedAn Actions run finishes — filter by repository, workflow, conclusion, branch, triggering event, actor
github-workflow-job-completedA single job finishes — additionally filter by job name, runner label, runner group
github-pull-request-review-submittedA review is submitted — filter by review state (approved, changes requested, commented), base and head branch, trusted authors
github-deployment-status-createdA deployment changes state — filter by environment, state, ref, creator, app, and production-only
github-issue-comment-createdA comment appears — filter by repository, issues/PRs/both, actor, and required comment prefix

GitHub triggers need the GitHub App installed in your workspace. Filters accept comma-separated values; omit one to match anything.

Close the CI loop: github-workflow-run-completed on conclusion: failure for main, running a workflow that reads the logs, identifies the failing step, and posts a diagnosis to Slack.

Calendar

TriggerFires
google-calendar-event-createdA new event appears
google-calendar-event-updatedAn event changes
google-calendar-event-cancelledAn event is cancelled

Each watches one calendar — your primary calendar by default.

Never walk into a meeting cold: google-calendar-event-created running a workflow that researches external attendees and their companies, then sends you a pre-meeting brief.

Notion

TriggerFires
notion-child-page-createdA page is added under a parent page you name
notion-database-item-createdA row is added to a database you name
notion-page-content-updatedA page's content changes, watched by page or by database

CMS

TriggerFires
strapi-entry-publishedAn entry is published — optionally narrowed to one content type and locale

Webhook and chat

TriggerFires
webhookAny external system calls a signed webhook URL. The signing secret is shown once, at creation — copy it then. Available on Team and Enterprise.
chat-run-finishedA run finishes in a chat thread you name — optionally filtered by finish status (completed, failed, cancelled) and a wildcard pattern matched against the run's final message

chat-run-finished is how you chain work: one automation's output becomes another's starting gun.

Creating an automation

From a chat that works. Run the task as a one-off first. When it produces what you want, say:

"Run this every weekday at 8 a.m. Los Angeles time and DM me the result."

Zero confirms the workflow, the cadence, and the destination, saves the workflow if it doesn't exist yet, and attaches the automation.

Explicitly. Open a workflow in your workspace and add an automation to it, choosing the trigger type and its filters. Useful when you know the shape ahead of time and don't want a dry run.

Automations can be enabled and disabled individually without deleting them — the right move before a vacation, or while you debug a noisy trigger.

Destinations

An automation needs to know where the result goes. State it in the workflow instruction:

  • Slack channel or DM — most common; lands in the channel as a message or thread
  • Feishu or Microsoft Teams — same idea for teams that live there
  • Telegram or text message — for personal, mobile-first alerts
  • A Notion page or database — for things that should be archived rather than broadcast
  • A Google Doc or Sheet — appended or overwritten
  • A GitHub issue or PR comment — for engineering workflows
  • A Gmail draft — prepared in your account for you to review and send
  • A hosted page — see Hosted sites
  • A workspace file — when the artifact is a video, image, or downloadable asset

"Post to #engineering" or "DM me" is clearer than "send it somewhere."

Operating tips

These come from running automations in production:

  • Watch the first three runs. Automations are easy to set up; they're easier to refine once you see what Zero actually produces in your environment.
  • Keep each task small. Long, multi-step automations are more brittle. If a single one has to update five systems, consider splitting it in two.
  • Pin the destination. Channels get renamed and people leave. Name the destination explicitly in the workflow instruction; Zero will warn if it can't find it next run.
  • Time-bound long-running queries. If the prompt asks for "the last 30 days," restate that on every run so the window stays fresh.
  • Mind the time zone. A schedule with no time zone runs in UTC.
  • Pause before vacations. Especially for automations that DM you — coming back to 14 brief DMs isn't useful. Disable the automation and re-enable it when you're back; the workflow stays intact.

Costs

Each run consumes credits, and every run is attributed to the agent that ran it. The run history shows the credit cost per run, so you can spot the expensive ones. A morning brief is usually cheap — a few hundred credits. A weekly multi-tool content bundle might be one or two thousand. See Credits & billing for how this maps to dollars.

Short loop intervals multiply quickly: every 15 minutes is 96 runs a day.

Event triggers can be surprisingly chatty. A Gmail automation with no filters, or a GitHub automation across a busy monorepo, will fire far more often than you expect. Narrow the filter first, then widen it.

What's next

  • See Workflows for the procedure an automation runs.
  • See Chat for what happens inside each run.
  • See Example workflows for five complete workflow-plus-automation combinations.