Status report
A fast, honest snapshot of where the task pipeline stands, answerable while work is still in flight. It reads the tracking state the task skill already writes — no new bookkeeping, no long analysis, no waiting.
Default behavior: important, interrupt-grade
A status request is IMPORTANT by default. Handle it at the first natural boundary — the end of the current command, nothing more. Nobody asking "where are we?" wants to wait twenty minutes for the task to end; answering late is answering wrong.
- Do not defer it to task end, queue it behind subagents, or fold it into the running task's plan. Answer now.
- Do not delegate the report anywhere. One script run, then answer in your own words.
- An explicit
!importance marker (status!:or any!-marker) overrides everything else — preempt immediately per the prompt-markers contract. - If you genuinely cannot answer for seconds (a command is mid-flight), say so and answer the moment it returns.
Procedure
Run the script from the project root:
python3 .ai-badger/skills/status-report/scripts/status_report.pyAdd
--target <project-root>to report on another checkout;--jsonfor the machine form. It exits 0 on every reporting path — missing or corrupt tracking files render their section's placeholder ("(no task in progress)", "(no plan file)", "(not found)", "(no live lanes)") instead of failing the report.Answer with the four sections, in this order, using the script's output as the source of truth: Current task (plus any other open tasks), Progress checklist (plan packages and checkbox counts), What's next (quote
state.json'snextfield verbatim), Sub-agents & delegation (recorded subagent entries, live lane worktrees, untracked worktrees, live sessions with STALE marking).Label inference as inference. The script prints the loop's step order (prepare > analyze > plan > … > merge) as a reference line; locating "we are at step X" from signals — branch exists, plan exists, subagents recorded, PR state — is YOUR inference, so phrase it as one ("plan exists and P1 is delegated — you're in implementation"). Never present a guessed phase as recorded fact.
Add one line of live truth the files cannot hold: what THIS session is doing right now (current phase, delegations in flight, what you are about to do next). Keep it visually apart from the script-derived sections — records say what happened, you say what is happening.
Nothing in progress: say so, show the last finished task and the
nextfield, and offer to start the next task — nothing more. Exception: untracked worktrees listed means real work exists with no tracker row — lead with that and offerstart/reattachfor it instead of the next queue item.
Where each section draws from
| Section | Source |
|---|---|
| Current task | latest open row (state STARTED or IN_PROGRESS) in the tasks table of .ai-badger/task-tracking/tracking.db — STARTED is registered work awaiting its first Stop-hook promotion (or a harness with no Stop hook), still open |
| Progress checklist | task-tracking/plans/*.md — package headings + - [x] counts |
| What's next | state.json next field, verbatim |
| Sub-agents | token_usage subagent records + worktrees/ lanes for open tasks + worktrees matching no tracker row (untracked — work without tracking) + the sessions table (dead pids marked STALE) |
Gotchas
- An empty recorded-subagent list does NOT mean no delegation is running — records land only
on completion (
task_tracker.py subagent), so mid-flight delegations are invisible there. Live evidence is lane worktrees, thesessionstable, and your own session context. - Stale open entries from dead sessions show up as current (latest-started wins). Report them honestly — do not silently pick "the one that looks active" and do not start finishing or parking them unprompted. Sessions whose pid is dead are marked STALE by the script (the table prunes dead pids only on write); treat a STALE mark as tracker hygiene to offer, not as a live lane.
- A worktree matching no tracker row in any state is reported as an untracked worktree —
work without tracking (the task was never
started, orstartfailed and the agent proceeded anyway). Offerstart/reattach; do not silently adopt it as the current task. - When no plan filename carries the task id, the report falls back to the newest plan and says so — verify it is actually this task's plan before quoting its checklist as progress.
- The checklist counts only
- [ ]/- [x]checkbox lines. Plans written without checkboxes report "no checkbox items — read the plan file"; that is a plan-format gap, not zero progress. - The script reads only files under the target root; run it with
--targetwhen your cwd is elsewhere, or every section reads as "(not found)".
Red flags — STOP
- Do not turn a status request into work: no new task, no delegation, no refactoring of the tracking files it read.
- Do not poll or wait on running subagents to "complete the picture" — report what is known now and what is in flight.
- Do not fix what the report surfaces (stale tasks, missing plans) unless asked; offer it.
- Do not fabricate progress. "(not found)" is a valid answer; a plausible guess is not.
Verification Checklist
- Script ran once, exited 0, output carried all four section headers
- Current task named by id; other open tasks listed, not hidden
- Any loop-step positioning phrased as inference, not recorded fact
-
nextquoted verbatim, not paraphrased - One live-session line added from this session's own context, kept apart from records
Files
SKILL.md— this filescripts/status_report.py— the snapshot script (stdlib-only, exit 0 on reporting paths)