/digest
Friday review — what shipped, what broke, what it cost; add `cost`, `slo`, `gov` or `sessions` for the detail. Weekly engineering digest (velocity, incident trend, tech debt, ADR decisions, open gates, CTO recommendation); add `board` for board-report format.
> /plugin marketplace add avelikiy/great_cto> /plugin install great_cto@great-cto
Command definition
digest.mddescription: "Friday review — what shipped, what broke, what it cost; add `cost`, `slo`, `gov` or `sessions` for the detail. Weekly engineering digest (velocity, incident trend, tech debt, ADR decisions, open gates, CTO recommendation); add `board` for board-report format."
argument-hint: "[days] [board] | cost [days | feature <slug> | agent <name> | sessions [days]] | sessions [days] | slo [service] | gov [--since 30d] [--json] — e.g. '30 board', 'cost 7', 'sessions 30', 'slo api', 'gov --since 30d'"
user-invocable: true
disable-model-invocation: true
allowed-tools: Read, Write, Bash, Glob, Grep, advisor_20260301
model: haiku
advisor-model: claude-sonnet-5
advisor-max-uses: 1
beta: advisor-tool-2026-03-01
You are the great_cto **Digest** command — every report in one place. The default is the weekly engineering digest for the CTO (Steps 1–4); keep that response **under 60 lines**. The first word picks a detail mode instead:
| Invocation | Mode | What you get | |---|---|---| | `/digest [days] [board]` | digest (default) | weekly delivery, reliability, cost, team — or a board report | | `/digest cost [days \| feature <slug> \| agent <name> \| sessions [days]]` | cost | cost & capacity: router savings, run-rate, ROI per feature, per-agent cost (was `/cost`) | | `/digest sessions [days]` | cost → sessions | how your own sessions spend (same as `/digest cost sessions`) | | `/digest slo [service]` | slo | SLO burn rate across 24h / 7d / 30d windows (was `/burn`) | | `/digest gov [--since 30d] [--json]` | gov | do the gates actually gate — block / override / false-block rates (was `/gov-metrics`) |
`/inbox` stays separate: it is the daily "what needs you now".
Step 0 — Dispatch by mode
set -- ${ARGUMENTS:-}
case "${1:-}" in
cost) MODE=cost; shift ;; # → "Mode: cost" — $1.. are the words after `cost`
sessions) MODE=cost ;; # /digest sessions [days] == /digest cost sessions [days]
slo) MODE=slo; shift ;; # → "Mode: slo" — $1 is the optional service
gov) MODE=gov; shift ;; # → "Mode: gov" — "$@" goes to gov-metrics.mjs
*) MODE=digest ;; # default weekly digest: Steps 1–4 below
esac`MODE=digest` → continue with Step 1. Any other mode → jump to its section below and skip Steps 1–4.
Step 1 — Run helper, write to file (no inline expansion)
ARGS="${ARGUMENTS:-}"
DAYS=7; BOARD=0
for arg in $ARGS; do
case "$arg" in
board) BOARD=1 ;;
[0-9]*) DAYS="$arg" ;;
Q[1-4]) DAYS=90 ;;
esac
done
PLUGIN_DIR=${CLAUDE_PLUGIN_ROOT:-$(ls -d ~/.claude/plugins/cache/*/great_cto/*/ 2>/dev/null | awk -F'/plugins/cache/' '{split($NF,p,"/"); print p[3], $0}' | sort -V | tail -1 | cut -d' ' -f2- | sed 's|/$||')}
HELPER="${PLUGIN_DIR}/scripts/cmd-data/digest-data.sh"
[ -f "$HELPER" ] || HELPER="$(pwd)/scripts/cmd-data/digest-data.sh"
OUT_DIR=".great_cto/cache"; mkdir -p "$OUT_DIR"
OUT="${OUT_DIR}/digest-out.txt"
DAYS="$DAYS" bash "$HELPER" > "$OUT" 2>&1
SIZE=$(wc -c < "$OUT" 2>/dev/null || echo 0)
LINES=$(wc -l < "$OUT" 2>/dev/null || echo 0)
echo "DIGEST_READY days=$DAYS board=$BOARD out=$OUT size=${SIZE}B lines=${LINES}"**Don't** pipe helper output to stdout — that re-expands it into your prompt and risks `Prompt is too long` in heavy-context sessions.
Step 2 — Read the file
Use the `Read` tool on the path printed as `out=`. Default to reading the first 300 lines; only read more if the helper truncated. Sections emitted (only when relevant): `## DORA`, `## RELIABILITY`, `## DELIVERY`, `## TEAM`, `## COST`, `## OPS`, `## AGENTS`.
Step 3 — Render
If `BOARD=0` (default), format as engineering digest:
# Weekly digest · last <DAYS>d · <YYYY-MM-DD>
## Delivery
- <N> features shipped (<delta vs prior week>)
- <N> hotfixes · <N> rework
## Reliability
- DORA: deploys/wk <X> · lead-time <X>h · MTTR <X>m · CFR <X>%
- SLO burn: <service> <Xx> over budget on <metric>
- p95 latency: <X>ms (<delta>)
## Cost
- $<X>/day avg · projected month $<X> (<X>% of $<budget> budget)
- Top mover: <agent> +<X>% MoM
## Team & ops
- On-call: <name> (<days remaining>)
- Open RFCs: <N> (<oldest age>)
- Ownership gaps: <N> services without owner
## Insights
- <2-3 derived observations — patterns, anomalies, things worth attention>
→ Run /digest slo for SLO drill-down, /digest cost for capacity, /inbox for action items.
If `BOARD=1` — board-report format (briefer, pure narrative):
- 2 sentences: what shipped + what almost broke
- 4 bullets max per section: Delivery, Reliability, Cost, Risk
- One forward-looking paragraph: top decision the board should weigh
- Save artifact to `docs/board-reports/BOARD-<YYYY-MM-DD>.md`
Step 4 — CTO recommendation (optional)
If meaningful patterns surface (CFR spike, cost overrun, gate drift, ownership gap), call `advisor_20260301` **once** for a senior CTO take. Surface at end of "Insights" prefixed `→ CTO take:`. Skip if healthy.
Empty / partial
- Section missing in helper output → omit it. Don't fabricate.
- Helper file `size=0` or `MISSING_HELPER` printed → output exactly:
`Digest unavailable: run /start to bootstrap, then come back after a week of activity.`
Conventions
- **Never** dump raw helper output. Agent must format.
- Cost uses non-breaking thin space (U+202F): `$1 234` not `$1,234`.
- Cache: helper itself caches expensive queries 1h.
Use cases
/digest # last 7d
/digest 14 # last 14d
/digest 30 board # 30d board-report
/digest Q2 board # 90d board-report
/digest cost # cost & capacity, last 30d
/digest cost feature stripe-subscriptions
/digest sessions 30 # session shape, last 30d
/digest slo api # SLO burn for one service
/digest gov --since 30d
---
Mode: cost
In this mode you are the Cost & Capacity aggregator. Positional arguments below (`$1`, `$2`) are the words after `cost` (for `/digest sessions [days]`, `$1` is `sessions`). Sub-modes:
1. **`/digest cost [days]` — Aggregate hea
Read more
description: "Friday review — what shipped, what broke, what it cost; add `cost`, `slo`, `gov` or `sessions` for the detail. Weekly engineering digest (velocity, incident trend, tech debt, ADR decisions, open gates, CTO recommendation); add `board` for board-report format." argument-hint: "[days] [board] | cost [days | feature <slug> | agent <name> | sessions [days]] | sessions [days] | slo [service] | gov [--since 30d] [--json] — e.g. '30 board', 'cost 7', 'sessions 30', 'slo api', 'gov --since 30d'" user-invocable: true disable-model-invocation: true allowed-tools: Read, Write, Bash, Glob, Grep, advisor_20260301 model: haiku advisor-model: claude-sonnet-5 advisor-max-uses: 1 beta: advisor-tool-2026-03-01
You are the great_cto **Digest** command — every report in one place. The default is the weekly engineering digest for the CTO (Steps 1–4); keep that response **under 60 lines**. The first word picks a detail mode instead:
| Invocation | Mode | What you get | |---|---|---| | `/digest [days] [board]` | digest (default) | weekly delivery, reliability, cost, team — or a board report | | `/digest cost [days \| feature <slug> \| agent <name> \| sessions [days]]` | cost | cost & capacity: router savings, run-rate, ROI per feature, per-agent cost (was `/cost`) | | `/digest sessions [days]` | cost → sessions | how your own sessions spend (same as `/digest cost sessions`) | | `/digest slo [service]` | slo | SLO burn rate across 24h / 7d / 30d windows (was `/burn`) | | `/digest gov [--since 30d] [--json]` | gov | do the gates actually gate — block / override / false-block rates (was `/gov-metrics`) |
`/inbox` stays separate: it is the daily "what needs you now".
Step 0 — Dispatch by mode
set -- ${ARGUMENTS:-}
case "${1:-}" in
cost) MODE=cost; shift ;; # → "Mode: cost" — $1.. are the words after `cost`
sessions) MODE=cost ;; # /digest sessions [days] == /digest cost sessions [days]
slo) MODE=slo; shift ;; # → "Mode: slo" — $1 is the optional service
gov) MODE=gov; shift ;; # → "Mode: gov" — "$@" goes to gov-metrics.mjs
*) MODE=digest ;; # default weekly digest: Steps 1–4 below
esac`MODE=digest` → continue with Step 1. Any other mode → jump to its section below and skip Steps 1–4.
Step 1 — Run helper, write to file (no inline expansion)
ARGS="${ARGUMENTS:-}"
DAYS=7; BOARD=0
for arg in $ARGS; do
case "$arg" in
board) BOARD=1 ;;
[0-9]*) DAYS="$arg" ;;
Q[1-4]) DAYS=90 ;;
esac
done
PLUGIN_DIR=${CLAUDE_PLUGIN_ROOT:-$(ls -d ~/.claude/plugins/cache/*/great_cto/*/ 2>/dev/null | awk -F'/plugins/cache/' '{split($NF,p,"/"); print p[3], $0}' | sort -V | tail -1 | cut -d' ' -f2- | sed 's|/$||')}
HELPER="${PLUGIN_DIR}/scripts/cmd-data/digest-data.sh"
[ -f "$HELPER" ] || HELPER="$(pwd)/scripts/cmd-data/digest-data.sh"
OUT_DIR=".great_cto/cache"; mkdir -p "$OUT_DIR"
OUT="${OUT_DIR}/digest-out.txt"
DAYS="$DAYS" bash "$HELPER" > "$OUT" 2>&1
SIZE=$(wc -c < "$OUT" 2>/dev/null || echo 0)
LINES=$(wc -l < "$OUT" 2>/dev/null || echo 0)
echo "DIGEST_READY days=$DAYS board=$BOARD out=$OUT size=${SIZE}B lines=${LINES}"**Don't** pipe helper output to stdout — that re-expands it into your prompt and risks `Prompt is too long` in heavy-context sessions.
Step 2 — Read the file
Use the `Read` tool on the path printed as `out=`. Default to reading the first 300 lines; only read more if the helper truncated. Sections emitted (only when relevant): `## DORA`, `## RELIABILITY`, `## DELIVERY`, `## TEAM`, `## COST`, `## OPS`, `## AGENTS`.
Step 3 — Render
If `BOARD=0` (default), format as engineering digest:
# Weekly digest · last <DAYS>d · <YYYY-MM-DD> ## Delivery - <N> features shipped (<delta vs prior week>) - <N> hotfixes · <N> rework ## Reliability - DORA: deploys/wk <X> · lead-time <X>h · MTTR <X>m · CFR <X>% - SLO burn: <service> <Xx> over budget on <metric> - p95 latency: <X>ms (<delta>) ## Cost - $<X>/day avg · projected month $<X> (<X>% of $<budget> budget) - Top mover: <agent> +<X>% MoM ## Team & ops - On-call: <name> (<days remaining>) - Open RFCs: <N> (<oldest age>) - Ownership gaps: <N> services without owner ## Insights - <2-3 derived observations — patterns, anomalies, things worth attention> → Run /digest slo for SLO drill-down, /digest cost for capacity, /inbox for action items.
If `BOARD=1` — board-report format (briefer, pure narrative):
- 2 sentences: what shipped + what almost broke
- 4 bullets max per section: Delivery, Reliability, Cost, Risk
- One forward-looking paragraph: top decision the board should weigh
- Save artifact to `docs/board-reports/BOARD-<YYYY-MM-DD>.md`
Step 4 — CTO recommendation (optional)
If meaningful patterns surface (CFR spike, cost overrun, gate drift, ownership gap), call `advisor_20260301` **once** for a senior CTO take. Surface at end of "Insights" prefixed `→ CTO take:`. Skip if healthy.
Empty / partial
- Section missing in helper output → omit it. Don't fabricate.
- Helper file `size=0` or `MISSING_HELPER` printed → output exactly:
`Digest unavailable: run /start to bootstrap, then come back after a week of activity.`
Conventions
- **Never** dump raw helper output. Agent must format.
- Cost uses non-breaking thin space (U+202F): `$1 234` not `$1,234`.
- Cache: helper itself caches expensive queries 1h.
Use cases
/digest # last 7d /digest 14 # last 14d /digest 30 board # 30d board-report /digest Q2 board # 90d board-report /digest cost # cost & capacity, last 30d /digest cost feature stripe-subscriptions /digest sessions 30 # session shape, last 30d /digest slo api # SLO burn for one service /digest gov --since 30d
---
Mode: cost
In this mode you are the Cost & Capacity aggregator. Positional arguments below (`$1`, `$2`) are the words after `cost` (for `/digest sessions [days]`, `$1` is `sessions`). Sub-modes:
1. **`/digest cost [days]` — Aggregate hea
You already have the agent. This is everything around it. great_cto runs Claude Code as a pipeline of 70 specialist agents — an independent model checks each stage before the next builds on it, spending caps refuse rather than warn, and three decisions stay yours: what gets built, how, and whether it ships.
Other commands on great-cto.
More commands from other plugins.
build
CommandImplement tasks incrementally — build, test, verify, commit. Add "auto" to run the whole plan in one approved pass.

