From great_cto
Reusable reporting contract for any agent that hands work back to the pipeline. Forces ONE of two terminal statuses (DONE or BLOCKED) with a specific evidence shape. Stops vague "probably finished" and "kind of stuck" verdicts.
npx claudepluginhub avelikiy/great_ctoThis skill is limited to using the following tools:
Terminal status is exactly two states, and BLOCKED requires specific evidence — not vague obstruction reports.
Verifies tests pass on completed feature branch, presents options to merge locally, create GitHub PR, keep as-is or discard; executes choice and cleans up worktree.
Guides root cause investigation for bugs, test failures, unexpected behavior, performance issues, and build failures before proposing fixes.
Writes implementation plans from specs for multi-step tasks, mapping files and breaking into TDD bite-sized steps before coding.
Terminal status is exactly two states, and BLOCKED requires specific evidence — not vague obstruction reports.
Every agent's final handoff line is one of:
DONE: <one-sentence summary of what shipped>
artifact: <path to report/PR/commit>
next: <who picks this up — pipeline stage, gate, or "pipeline continues">
BLOCKED: <one-sentence summary of the obstacle>
tried: <what was attempted — file paths, commands, error signatures>
failed_because: <concrete reason — not "unclear", not "complex">
need: <specific unblock — file access, missing config, CTO decision, another agent>
No third state. "Mostly done", "done with caveats", "almost there" → choose. If caveats exist, the caveat itself decides:
BLOCKED requires three fields. tried + failed_because + need. Missing any field → the verdict is rejected and the agent must re-report. No exceptions for "obvious" cases.
Silence is not DONE. If the agent stops producing output without a terminal line, the parent / next stage treats it as BLOCKED with failed_because: silent — no terminal verdict written.
failed_because must be concrete. These are rejected:
need names a specific unblock. These are rejected:
Every agent writes the verdict to two places:
.great_cto/verdicts/<agent>-<YYYY-MM-DD-HHMMSS>.log — append-only audit trail.mkdir -p .great_cto/verdicts
VERDICT_FILE=".great_cto/verdicts/<agent>-$(date -u +%Y-%m-%d-%H%M%S).log"
printf '%s\n' "$VERDICT_LINE" > "$VERDICT_FILE"
Good — DONE:
DONE: CSO audit passed — 0 P0, 2 P1 findings filed as Beads tasks.
artifact: docs/security/CSO-2026-04-19.md
next: gate:ship ready for CTO approval
Good — BLOCKED:
BLOCKED: senior-dev cannot claim task BD-42 — circular dependency with BD-38.
tried: bd ready → BD-42 did not appear; bd dep tree BD-42 → shows BD-38 blocks BD-42, BD-42 blocks BD-38
failed_because: both tasks depend on each other transitively (BD-42 → BD-38 → BD-39 → BD-42)
need: architect to split BD-39 into two tasks so the cycle breaks
Rejected — vague BLOCKED:
BLOCKED: couldn't finish QA — environment problems.
tried: ran tests
failed_because: stuff broken
need: help
Why rejected: tried lacks command/path; failed_because is tautological; need is not actionable.
.great_cto/verdicts/*.log is machine-readable. Weekly digest can compute:
DONE:BLOCKED ratio per agent — too many BLOCKED from one agent = that role is under-resourced or prompt is unclearfailed_because clustering — if the same reason appears 3+ times, that's a recurring obstruction worth a meta-fix (tooling, doc, skill).great_cto/verdicts/. The audit trail is what makes the contract measurable.