Examples / Daily engineering digest
Daily engineering digest
Every weekday at 9am, gather open pull requests and newly reported bugs, reshape them with a JavaScript step, and post a crisp summary to Slack.
GitHubSlackJavaScriptYour AI models
What you tell the assistant
Why it works
- A sandboxed JavaScript step groups and counts results — no model tokens spent on arithmetic.
- Schedules run in your timezone.
- The fast model writes the summary, keeping the run cheap.
What it builds
Trigger
Schedule
0 9 * * 1-5 · America/Toronto
tool
Open pull requests
github.list_pull_requests
tool
New bugs
github.search_issues
javascript
Group and count
→ waiting, drafts, bug_count
llm
Write the digest
fast
tool
Post to #engineering
slack.post_message
View the definition
trigger:
kind: schedule
cron: "0 9 * * 1-5"
timezone: America/Toronto
steps:
- key: prs
name: Open pull requests
kind: tool
tool: github.list_pull_requests
args: { repo: northwind/api, state: open, limit: 50 }
- key: bugs
name: New bugs
kind: tool
tool: github.search_issues
args: { query: "repo:northwind/api is:issue is:open label:bug created:>={{ run.started_at }}", limit: 50 }
- key: shape
name: Group and count
kind: javascript
inputs: { prs: "{{ steps.prs.output }}", bugs: "{{ steps.bugs.output }}" }
outputs: { waiting: array, drafts: integer, bug_count: integer }
code: |
function main({ prs, bugs }) {
const waiting = prs.filter(pr => !pr.draft).map(pr => `#${pr.number} ${pr.title} (@${pr.author})`)
console.log(`${waiting.length} ready for review, ${bugs.length} new bugs`)
return { waiting, drafts: prs.length - waiting.length, bug_count: bugs.length }
}
- key: write
name: Write the digest
kind: llm
model: fast
prompt: |
Write a short, friendly Slack digest for the engineering team.
Ready for review: {{ steps.shape.output.waiting }}
Drafts: {{ steps.shape.output.drafts }}. New bugs: {{ steps.bugs.output }}
- key: post
name: "Post to #engineering"
kind: tool
tool: slack.post_message
args: { channel: C01ENGINEER, text: "{{ steps.write.output.text }}" }
A sample run
What each step produces
Open pull requests tool
succeeded
Open pull requests tool
Calling github.list_pull_requests
[
{
"number": 1482,
"title": "Backfill invoice currency",
"author": "sokafor",
"draft": false
},
{
"number": 1479,
"title": "Cache plan lookups",
"author": "pramen",
"draft": false
},
{
"number": 1476,
"title": "Experiment: new pricing page",
"author": "lmartins",
"draft": true
}
]
New bugs tool
succeeded
New bugs tool
Calling github.search_issues
[
{
"number": 1485,
"title": "CSV export times out for large accounts",
"author": "mchen"
},
{
"number": 1484,
"title": "Webhook retries duplicate invoices",
"author": "sokafor"
}
]
Group and count javascript
succeeded
Group and count javascript
2 ready for review, 2 new bugs
{
"waiting": [
"#1482 Backfill invoice currency (@sokafor)",
"#1479 Cache plan lookups (@pramen)"
],
"drafts": 1,
"bug_count": 2
}
Write the digest llm
succeeded
Write the digest llm
Using model fast (Claude Haiku 4.5, Murmurator AI)
{
"text": "Good morning! :sunny: *2 PRs are ready for review*: #1482 Backfill invoice currency, #1479 Cache plan lookups. 1 draft in progress. *2 new bugs* came in — the CSV export timeout looks customer-facing."
}
Post to #engineering tool
succeeded
Post to #engineering tool
Calling slack.post_message
{
"channel": "C01ENGINEER",
"ts": "1758632400.000200"
}
Trigger payload
{
"scheduled_at": "2026-09-23T13:00:00Z"
}
More examples
Your next automation is one sentence away.
14-day free trial with $5 of built-in AI included. Cancel anytime.