workflow-inspect
Appends the cost half to a workflow-retro record: parses the feature session's Claude Code transcripts with a bundled read-only script (tokens per agent, wall-clock, handoff tax) and writes the result
Files2
View on GitHubSKILL.mdplugins/ai-workflow/skills/workflow-inspect/SKILL.md
GitHub/workflow-inspect
Fill a /workflow-retro record's pending ## Cost section with numbers
computed from the raw session transcripts: tokens and wall-clock per
sub-agent, sub-agents' share of the total, and the handoff tax (files the
planner read that the main agent re-read). Run after /workflow-retro, within
the transcript retention window.
Input
.workflow-log/records whose## Costispendingorpending re-inspectionpython3;inspect.pyin this skill's directory (read-only: parses transcripts, prints markdown to stdout)
Ground rules
- Numbers come from the script, verbatim. Never estimate, adjust, or add
a figure the script didn't print. Script fails or its output carries
warnings → surface them to the user as-is (
AGENTS.mdRule 2 applies) - The only mutation is the log file: replacing the
## Costsection of the chosen record(s), after the user confirms. The one other edit allowed is adding session IDs to the record'sSessions:line (step 4), also after the user confirms. Never commit anything;.workflow-log/stays local
Steps
Step 1 — Pick the record(s)
- Log directory, as in
/workflow-retro:.workflow-log/under the main worktree (parent ofgit rev-parse --path-format=absolute --git-common-dir) - List records whose
## Costis stillpendingor is markedpending re-inspection(sessions were added after the last inspect; Step 5 replaces the whole section, marker included)- One → proceed with it
- Several → ask which (offer "all"; each is one script run)
- None → report that every record is already inspected, and stop
Step 2 — Gather the session IDs
- Read the record's
Sessions:line unknown, or Step 3 finds no transcript for any listed ID → cost is unrecoverable once transcripts are pruned. With the user's confirmation, close the section withunavailable — transcripts pruned or session IDs unknowninstead of leavingpendingforever
Step 3 — Run the inspector
One command, from the repository root:
python3 ${CLAUDE_SKILL_DIR}/inspect.py <session-id> [<session-id> …]
The script:
- Locates each session's transcript by global search of
~/.claude/projects/(transcripts are filed under the session's launch directory, not necessarily the worktree; never derive the directory from a path) - Resolves every sub-agent transcript via its spawn
toolUseId - Deduplicates records shared by resumed sessions
- Prints a complete
## Costsection - Fails soft: what it can't parse or find becomes a warning line in the output, and the numbers are then lower bounds
Step 4 — Reconcile
Before writing, act on the output:
- Warning that sub-agent transcripts belong to sessions not listed in the
record → the feature spanned more sessions than the retro knew. Offer to
add those IDs to the record's
Sessions:line and re-run the script once with the full list - Cost data contradicts the record's outcome half (e.g. more sub-agent runs than the Steps table's review rounds) → point out the discrepancy to the user. The outcome sections are theirs to amend; never edit them yourself
Step 5 — Confirm and write
- Show the user the script's output
- Confirmed → replace the record's entire
## Costsection (heading included) with it, leave every other section untouched, report the file path - Declined → leave the record as it was
Output
- The record's
## Costsection replaced (or closed asunavailable)