Files
troupe-standup/wizard-work/quill/standup-bot-brief.md
T

1.9 KiB

Project Brief: CLI Daily Standup Bot

Status: Draft v1
Author: Quill (Draft lane)
Date: 2026-10-29

Problem

Team members send async standup updates across chat threads, email, and tickets. Context gets buried, and syncs waste time restating status.

Goal

A single CLI command that collects, formats, and routes a daily standup update from a local text file to one or more destinations (email, Slack webhook, file).

Non-Goals

  • Real-time chat integration (MVP is async file-based).
  • Natural-language parsing beyond simple markdown sections.
  • Mobile UI.

Input Contract

A markdown file at ./standup.md with exactly three sections:

## Yesterday
- ...

## Today
- ...

## Blockers
- ...

Output Contract

  1. A formatted plaintext/markdown summary printed to stdout.
  2. An email sent via SMTP if SMTP_HOST, SMTP_USER, SMTP_PASS, and STANDUP_TO are set.
  3. A file written to ./standup-output/YYYY-MM-DD.md.

Acceptance Criteria

ID Criterion Verification
AC-1 Reads ./standup.md and fails with exit code 2 if missing or malformed. rm standup.md && standup; echo $? → 2
AC-2 Produces valid markdown summary on stdout with date header. `standup
AC-3 Writes dated output file under ./standup-output/. ls ./standup-output/$(date +%F).md exists.
AC-4 Skips email when SMTP env vars are absent. env -u SMTP_HOST standup does not error.
AC-5 CLI flag --to overrides STANDUP_TO for a single run. `STANDUP_TO=a@x.com standup --to b@x.com

Dependencies

  • Python 3.11+ (stdlib only; no pip packages for MVP).
  • Optional: msmtp or equivalent for SMTP relay if host SMTP is blocked.

Open Questions

  1. Should the tool merge multiple contributor files into one team digest? (defer to v2)
  2. Should it read from stdin when ./standup.md is absent? (defer; keep AC-1 strict)