.automation file closes the loop: it’s a server-side workflow, itself stored as a file in the workspace, that runs when something happens — no servers, no cron host, no webhook plumbing of your own.
.automation files are arg’s native visual workflows (n8n-style) — a JSON document describing a graph of nodes: one trigger node, then any number of action nodes wired together.
The four triggers
The triggering event — file path, revision, operation, or the webhook body — is exposed to every downstream node.
The nodes — what an automation can do between trigger and finish
Nodes pass data by templating:
{{Node Label.output}} or {{Node Label.output.a.b}} resolves an upstream node’s output into any string field of a downstream node.
Recipe gallery — what to wire to a trigger
Reporting (the worked example) is one instance. The same trigger → nodes shape covers a lot more — here are eleven:
Schedule- and webhook-triggered variants of the same idea:
- Nightly competitor crawl (
schedule, daily cron) —crawlthe competitor’s site,run-llmdiffs it against yesterday’s snapshot,write-filea/intel/changes-<date>.mdx. No local cron, no scraper on your laptop. - Inbound form → CRM (
webhook) — a form provider POSTs a submission; acodenode validates it and appends a row to/crm/leads.csv. - Index new docs for search (
file-changeon**/docs/**) —vectorizeeach new document and append it to a search index file.
Worked sub-example — voice dubbing on video generation
Recipe 1 in full, because it shows media nodes and control flow together. Trigger: a file lands in**/videos/*.mp4 (whether a person uploaded it or an upstream generate-video automation produced it).
- File Change fires on the new
.mp4; its path flows downstream. - Transcribe (
transcribe-audio) pulls the source captions with timings. - Run LLM translates the transcript into each target language, preserving timing cues.
- Loop runs the next two nodes once per language: Generate Speech synthesizes the translated track (use Change Voice instead to keep the original speaker’s timbre).
- Edit Video muxes each new audio track onto the source video.
- Write File saves
/videos/dubbed/<name>-<lang>.mp4.
/videos/dubbed/ could publish each dub onward, and the worked example reporting recipe could announce them in Slack. Automations compose by watching each other’s output folders.
Deploying
Saving an.automation file does not arm its triggers - deploying does. Deploy from the in-product automation editor, with the deploy_automation tool over MCP, or over the API:
manual trigger kind needs no deployment; it only runs when you invoke it by hand.
Deploying requires a user session or a user-owned API key. Service-account keys
get
403 on the automation endpoints, so deploy once as yourself and let the
trigger do the running - see Unattended runs.Why this matters for local-to-cloud
A local job — a script, a cron task, an agent — produces a file in the workspace. This pattern means the moment that file lands, the workspace itself reacts — building a briefing, dubbing a video, enriching a lead — with zero infrastructure on your side:schedule trigger, even the local job disappears for anything the sandbox can do itself — the whole loop runs inside arg.