Recipes · DevOps

A cron-driven agent that ships its reply to Slack.

Every weekday morning, a standup-bot summarises yesterday across the team and the scheduler posts the markdown to #engineering.

Chihab · · Beginner · 5 min read

v0.26 added `deliver` + `deliver_format` on the schedule block. The agent never has to call Slack itself — it returns the markdown summary as its final reply, and the scheduler dispatches it through `@tuttiai/slack`'s shared token-keyed client. Delivery failures emit `schedule:delivery_failed` and never crash the timer; success fires `schedule:delivered`.

Score file
import { defineScore, AnthropicProvider } from '@tuttiai/core'
import { GitHubVoice } from '@tuttiai/github'
import { SlackVoice } from '@tuttiai/slack'

export default defineScore({
  provider: new AnthropicProvider(),
  entry: 'standup-bot',
  agents: {
    'standup-bot': {
      name: 'Standup Bot',
      model: 'claude-sonnet-4-6',
      permissions: ['network'],
      voices: [new GitHubVoice(), new SlackVoice()],
      budget: { max_cost_usd: 0.10 },
      schedule: {
        cron: '0 9 * * 1-5',
        input: "Summarise yesterday's PRs and issues across the team.",
        deliver: { platform: 'slack', channel: '#engineering' },
        deliver_format: 'markdown',
      },
      system_prompt:
        'Read-only summary of yesterday across the team. Markdown out, under 1500 chars. Do NOT post directly — the scheduler delivers.',
    },
  },
})
How to run it
  1. 01 Scaffold a project: npx tutti-ai init my-scheduled-standup-to-slack
  2. 02 Install voices: npm i @tuttiai/github @tuttiai/slack
  3. 03 Drop the score above into tutti.score.ts, set the env vars in .env, and run tutti-ai run.
Why this is safe
  • budget: { max_cost_usd: 0.10 } per run
  • permissions: ["network"]
Related

More like this.

Start conducting.

One install. Your first agent running in 60 seconds. No signup. No telemetry.