Daily Standup
The standup is Scraut's core daily ceremony. Instead of a synchronous meeting, each team member writes a short Markdown file. The bot reads all files, generates a unified summary, and posts it to Slack — all automatically.
The standup file
Each standup file follows a consistent template. It's created automatically each morning by the template-reset workflow (runs at 1:55 AM UTC on weekdays, before your team starts work). You never need to create the file manually.
The file lives at:
workspace/sprint/NN/standup/YYYY-MM-DD/[your-github-login].md
Template:
# Standup — Alice Smith
<!--
Sprint: sprint-01
Date: 2026-05-24
Author: alice
...navigation links...
-->
## Yesterday
<!-- What did you complete? Reference issues/PRs where applicable. -->
## Today
<!-- What will you work on today? Reference issues if possible. -->
## Blockers
<!-- Anything blocking your progress? Write "None" if no blockers. -->
None
## Notes
<!-- Optional: OOO, reduced availability, context for the team -->
Filling in your standup
Replace the placeholder comments with your actual update:
# Standup — Alice Smith
## Yesterday
- Finished password reset flow (#14) — PR open for review
- Fixed the email validation regex (#17, merged)
## Today
- Start on the OAuth integration (#21)
- Review Bob's PR #18 (auth middleware refactor)
## Blockers
- Waiting on design mockups for the profile page (#23)
— @designer can you share the Figma link?
## Notes
- OOO Friday afternoon
Tips:
- Reference issue numbers with
#NN— Scraut links them in summaries - Use specific details, not vague updates ("Worked on auth" → "Completed login form validation, tests pass")
- If blocked, name the person or dependency — Scraut escalates blockers to the SM
Submitting your standup
Once you've filled in the file, commit and push:
git add workspace/sprint/001/standup/
git commit -m "standup: 2026-05-24 [skip ci]"
git push
The [skip ci] in the commit message prevents the standup summary from triggering again mid-day.
scraut standup opens the file directly in GitHub's web editor — no local clone needed.
What happens after you push
Trigger: push to workspace/sprint/NN/standup/**
Workflow: daily-standup.yml (also runs on cron at 9:00 AM)
push detected
→ generate_summary.py reads all standup files for today
→ collects: alice.md, bob.md, charlie.md
→ LLM prompt: "Summarise these standups. Highlight blockers and cross-dependencies."
→ LLM generates structured summary
→ atomic_write → .scraut/sprint/001/standup/summary/2026-05-24.md
→ git commit "[skip ci]"
→ post_to_slack → #scraut-bot
The summary output
The summary posted to Slack looks like:
📋 Sprint 01 Standup Summary — May 24, 2026
👤 Alice — Working on OAuth integration (#21). Blocked: needs design mockups for #23.
👤 Bob — Finished auth middleware (#18), starting on API rate limiting (#25).
👤 Charlie — Reviewing sprint metrics, updating capacity.md.
🚧 Blockers (1)
• Alice: Waiting on design mockups for profile page (#23)
→ Flagged to SM for follow-up
📈 Sprint health: 18 of 34 sp completed (53%) — on track.
And the full file .scraut/sprint/001/standup/summary/2026-05-24.md has more detail.
Scenario: Alice is blocked, escalation happens
Characters: Alice (developer), Bob (scrum master)
Steps:
- Alice opens her standup file (
scraut standupor Slack DM link) - Alice writes in
## Blockers:Waiting for API credentials from the platform team — blocked on #28 for 2 days - Alice commits and pushes
- Scraut detects the word pattern
blockedin the Blockers section - Scraut generates the summary and marks the blocker with a
🚧flag - Scraut posts to
#scraut-botwith the blocker highlighted - Bob (SM) sees the alert in Slack
- Bob contacts the platform team directly and resolves it
- Next day, Alice writes
Nonein her Blockers section — blocker resolved
Total time for escalation: ~2 minutes. No meeting needed.
What if you miss a day?
If you don't submit a standup by the time the cron fires (9:00 AM), your file simply won't be in that day's summary. The system won't error — it just summarises whoever submitted.
The template is created fresh each morning, so tomorrow you start clean.
Standup Coach (optional)
When standup_coach.enabled: true in scraut.yml, Scraut checks each team member's Today section after the summary runs. If it's short and doesn't reference any sprint issues, the person receives a private Slack DM (never posted to the team channel) with personalised task recommendations based on their open issues, the sprint goal, and OKRs.
🤖 Scraut (private DM to Alice)
Looks like today is wide open! Given the sprint goal of shipping the
OAuth integration, #21 (OAuth: Google provider) would be the highest-impact
thing to push forward — it's the biggest blocker for the v1.0 milestone.
If that's blocked, #15 (rate limiting) is self-contained and ready to go.
Adding issue numbers in tomorrow's standup helps the team spot dependencies early.
The SM can optionally receive a daily summary of who was coached via notify_sm: true. See Standup Coach configuration →.
Standup for AI agents
When Agent Mode is enabled, AI agents also submit standups in the same format, in the same directory:
workspace/sprint/001/standup/2026-05-24/agent-backend.md
This means the team always has full visibility into what both humans and agents are working on, in one place.