Triage, scoring & usage
Area labels for issues people file by hand, each task's run outcome beside the lint warnings its PRD drew, and the AI usage behind the repository.
Carol v0.1.22
Three commands look beyond a single initiative. triage sorts the issues people file by hand. score looks back over every Zurdo run in the repository. usage adds up the AI usage spent on it. All three follow printed, mechanical rules. None asks a model.
carol triage
carol triage [--apply] [--format json]
triage labels open issues that Carol didn't create (issues with no marker). It works from what the reporter wrote and from the area table in .carol/config.toml:
[triage.area_globs]
api = ["src/api/**", "openapi/**"]
billing = ["src/billing/**"]
docs = ["docs/**", "*.md"]
For each eligible issue:
- Skip it if a human has already decided. That means the issue carries
ready-for-human,ready-for-agent,needs-info, orwontfix. - Find its areas. If it has no
area:*label yet, each path in the body (a word containing/, with backticks, quotes, trailing punctuation, and any:line:colsuffix removed) is matched against the globs. Every area that matches adds anarea:<name>label. - Route it. An issue with a work type (
bug,enhancement, ordocumentation) and an area moves toready-for-human, andneeds-triageis removed. Anything else getsneeds-triageand waits for a person.
Labels that don't exist yet are created in the same plan. Like every write command, triage only prints the plan until you add --apply. Without a [triage.area_globs] table it stops with exit 2.
Note
Triage never promotes an issue into a ticket file or a PRD task, and never assigns priority. Turning a bug report into planned work is still a scoping decision, made in scope.md or a PRD.
carol score --report
carol score --report [--format json]
For every run zurdo knows about (zurdo state list), score lists each task's outcome beside the lint warnings that task's text drew when the PRD was written. It reads the warnings from zurdo validate --authoring-state and the authored text from git. It's read-only and offline.
$ carol score --report
docs/billing/prds/prd-01-invoices.md task-01: passed after 1 attempt(s); warnings: none
docs/billing/prds/prd-01-invoices.md task-02: passed after 3 attempt(s); warnings: doc-echo=1
docs/billing/prds/prd-01-invoices.md task-03: failed after 5 attempt(s); warnings: grep-tautology=2
first attempt: 1 task(s); mean warnings: doc-echo=0.00 grep-tautology=0.00
retried or failed: 2 task(s); mean warnings: doc-echo=0.50 grep-tautology=1.00
unvalidated: 0 task(s)
The summary compares the average warnings per task for tasks that passed on the first attempt against tasks that were retried or failed. score reports the numbers and draws no conclusion: interpreting them is your job at phase review, step 6 of the PRD loop. If one lint family keeps showing up on tasks that struggle, take that as a reason to tighten your hints. A task whose PRD Zurdo couldn't validate shows unvalidated. Validated tasks that fit neither group, such as tasks still pending review, are counted on an excluded line by reason, so every task is accounted for. With no zurdo report to read, score exits 6.
carol usage
carol usage [--format json] [--apply]
usage reports the AI usage spent on this repository, per machine, harness (Claude Code, Codex, Copilot CLI) and model. It reads each harness's local store on this machine, and only the usage metadata, never conversation content. A store it can't read is skipped with a notice.
- Tokens, not dollars. Each harness keeps its own token kinds, and Copilot adds its AI units. There is no dollar cost.
- Implementation apart. Zurdo's executor runs are shown as implementation, by phase and PRD, and taken out of the harness totals. The rest splits into interactive, headless and subagent use.
- Unattributed. A machine-wide line covers sessions that ran in no repository.
- Slow on purpose. A full scan reads every store each time, about 25 seconds on a large history.
With --apply, usage writes a pinned AI usage issue on your tracker, creating and pinning it the first time. It rewrites only this machine's section (named by $CAROL_HOST, or else the host name), so several machines add up in one issue. carol scope links the issue from the Projects board's README.
Next: Agent skills