AI CODING ANALYTICS

A Slack standup bot
that writes itself.

Zest writes each engineer's standup from that day's coding-agent sessions and pull requests, and posts it to your team's Slack channel at 6pm in their time zone. Nobody types an update, unlike check-in bots such as Geekbot, where each person answers questions.

Get started for free ↗

Free for 3 seats · No credit card

Zest lemon in its mech suit

03Celebrate what ships

Winding / People Sep 4, 2026

Adrian Cardoso

Team ZestEng
Shipping momentum
32 AI tasks11h 23m AI time13 agents ran
32
AI Tasks▲ 8
11h 23m
AI Time▼ 1.2h
13
Agents Ran▲ 3
6.2h
Build Hours▲ 1.1h
3.8h
Bug Hours▼ 0.9h
1.4h
Process Hours▼ 0.4h
🧠 AI Standup Summary
Built with:Claude CodeClaude Opus 5
  • 🚀 Shipped deep-linkable session URLs.

    Added stable links and workspace-aware navigation for AI sessions.

  • 🔎 Investigated a production dispatch spike.

    Traced the timeout path and created a tracking task with the findings.

  • 🤖 Kept the review → fix → verify loop moving.

    A review loop worth sharing.

AI stack worth sharing
pr-watch28

A review loop worth sharing.

Adrian uses pr-watch to keep reviews moving. Turn that repeatable workflow into a team habit.

About this sample

Example standup · Illustrative daily trends. Kudos stay in this preview. *Model-estimated activity, including overlapping automation; not engineer working hours.

USED BY ENGINEERING TEAMS AT

FlypsCharmWildfiresGeoforgeMisaLabs

How a Slack standup bot works

A standup bot is a Slack app installed through OAuth, posting with a bot token. What differs is where the update comes from:

  • Check-in bots message each person at a set time and collect the answers. Opening a DM takes conversations.open with the im:write scope; reading the replies takes the message.im event, which needs im:history.
  • Bots that read the work skip the questions: they pull the day's activity from GitHub or other tools, write the update, and post it with chat.postMessage (chat:write, plus chat:write.public for public channels the bot hasn't joined).
  • Local time: users.info (users:read) returns each member's tz, so the bot can post at 6pm wherever each person is, or queue the post ahead with chat.scheduleMessage, up to 120 days out.
  • Slack's limits: about one message per second per channel, at most 30 scheduled messages per channel in any 5 minutes, and 50 blocks per message.
Post one standup with Block Kit (Slack Web API)
curl -s https://slack.com/api/chat.postMessage \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -H "Content-Type: application/json; charset=utf-8" \
  -d '{
    "channel": "C0123456789",
    "text": "Standup: Ana, October 5",
    "blocks": [
      { "type": "header", "text": { "type": "plain_text", "text": "Ana, October 5" } },
      { "type": "section", "text": { "type": "mrkdwn",
        "text": "*Shipped* <https://github.com/acme/api/pull/412|#412> retry queue for webhooks" } },
      { "type": "section", "text": { "type": "mrkdwn", "text": "*Next* load-test the queue" } }
    ]
  }'

What goes in a Zest standup

Each engineer's standup is written from that day's work. A pull request counts as theirs only if they authored it; their reviews count as support:

  • Coding-agent sessions from Claude Code, Cursor, Codex, GitHub Copilot Chat, Grok Build or Hermes.
  • GitHub activity from the Zest GitHub App: pull requests opened, merged and closed, reviews, review comments, comments and issues.
  • Sent at 6pm in the engineer's time zone (each person can move the hour), to your team's Slack channel, and by email to anyone who turns email on.
Zest's daily standup email: the day's metrics against the prior seven days, estimated task time by type and the written standup
Zest's daily standup email

The Slack app's permissions

Zest installs through OAuth v2 and posts with chat.postMessage and Block Kit from a bot token. It asks for bot scopes only, no user scopes. Each team can pick its own channel, or use the workspace default:

The bot scopes Zest's Slack app requests, and what each is for.
ScopeWhat Zest uses it for
chat:writePost standups and reports
chat:write.publicPost in a public channel without being invited
chat:write.customizePost each standup under the engineer's name and avatar, as “Name (Zest)”
channels:read, groups:readList channels so you can pick one
users:read, users:read.emailMatch Slack members to Zest users by email, for names and avatars
app_mentions:read, im:historyAnswer questions put to Zest in a mention or a DM

Once a week: the Team Standup

On Fridays at 17:00 in the team's time zone by default, the Team Standup rolls the week up in three parts: the AI stack worth sharing (the skills and practices that spread), three wins with their owner and pull request, and up to three moves to ship more. It goes to the timeline and the workspace owners' email, and to Slack when the workspace is connected.

TRY IT ON YOUR TEAM

See what your team ships with AI.

Starter is free (3 seats, no credit card). Pro is $49 a month with 5 seats and Max is $149 a month with 10 seats — priced per workspace, not per engineer, with extra seats at $19 a month.

A FEW THINGS TO KNOW

Questions

Is Zest a Geekbot or Dailybot alternative?+

For an engineering team's async standup, yes: Geekbot and Dailybot run check-ins where people answer questions (Dailybot also adds activity from tools and agents), while Zest writes each standup from that day's coding-agent sessions and pull requests. It doesn't run custom check-ins, polls, forms or surveys.

What Slack permissions does a standup bot need?+

To post, a bot token with chat:write, plus chat:write.public for public channels it hasn't joined. To DM people and read their answers, as check-in bots do, it also needs im:write and the message.im event, which takes im:history.

Can a Slack bot post at each person's local time?+

Yes. Read each member's tz with users.info and post at that local hour, or queue the message with chat.scheduleMessage up to 120 days ahead.

Does Zest send standups as Slack DMs?+

No. Each standup goes to your team's channel under the engineer's name, and by email to anyone who turns email on.