The pattern
Cron triggers turn an agent into a scheduled worker. It fires on the cron, runs to completion, posts the result, exits. No always-on process, no separate scheduler, no manual deploy step. The schedule lives next to the agent that uses it.
What good looks like
- Reliable execution at the configured time
- Idempotent output, two runs in a row do not duplicate
- Clean exit after the job, no orphan processes
- Logs structured enough to debug a missed run
Common pitfalls
- Forgetting timezone settings, runs at midnight UTC instead of local
- Letting the agent loop forever if the data source is empty
- No retry on transient failures
- Posting to the wrong channel during a permission rotation
The minimum YAML to ship this
app.yaml
1modules:2 web: {}3 channels:4 config:5 slack: { bot_token: { credential: slack_bot } }67triggers:8 - id: weekly9 kind: cron10 schedule: "0 9 * * MON"11 target: { agent: reporter, message: "Generate the Monday digest." }1213agents:14 - id: reporter15 modules: [{web: [search, fetch]}, {channels: [slack_post]}]16 brain: { model: claude-haiku-4-5 }Ship in 5 minutes
Install Digitorn and deploy this agent
# 1. install runtime
curl -sSL https://digitorn.ai/install | sh
# 2. save the YAML above to ~/.digitorn/apps/my-cron-reporter/app.yaml
mkdir -p ~/.digitorn/apps/my-cron-reporter
# paste the YAML into app.yaml
# 3. deploy
digitorn deploy my-cron-reporterNewsletter
Get the next post in your inbox.
Engineering notes from the Digitorn team. No marketing, no launch announcements, no "10 prompts that will change your life". Just the things we write that we'd want to read.
Other things you can build
communicationSlack copilot/use-cases/slack-botdeveloperAutomated code reviewer/use-cases/code-reviewknowledgeResearch agent with citations/use-cases/research-agentdeveloperDocumentation generator/use-cases/documentation-generatorcommunicationVoice assistant/use-cases/voice-assistantdeveloperPR triager/use-cases/pr-triagerknowledgeMeeting note-taker/use-cases/meeting-notesopsEmail triager/use-cases/email-triagecreativeLive React app builder/use-cases/react-builder