server-desktop-01/docs/orchestration-audit-prd.md

98 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PRD — Deeper orchestration audit
**Status:** ready to run (new session) · **Created:** 2026-06-30
**Predecessor:** `docs/cc-tool-audit.md` (§ Addendum — orchestration audit)
**Note:** No issue tracker/remote on this repo, so this PRD lives as a doc. The
`/to-prd` "publish + `ready-for-agent` label" step was adapted to a file.
---
## Problem Statement
Sessions feel slow and over-spend on model cost. A prior audit
(`docs/cc-tool-audit.md`) traced this less to loaded tools/skills/hooks (all small)
and more to the **orchestrator-subagent delegation pattern**. A first-pass audit of
1,962 subagent transcripts found that **27% of subagents run on Opus**, the majority
of them doing mechanical file-edit/shell work that Haiku/Sonnet would handle faster
and cheaper. The CLAUDE.md "Session Orchestration" routing table is **advisory**
when an `Agent` spawn omits `model`, the subagent inherits the parent (Opus). The
rule also mandates delegation with **no minimum complexity threshold**, so trivial
one-line edits pay a full subagent prefill + sequential wait.
An interim fix is already applied (`CLAUDE_CODE_SUBAGENT_MODEL=haiku` in global
settings). What's missing is the **quantified evidence** needed to safely revise the
orchestration *instructions* across many CLAUDE.md files — not just the default model.
## Solution
A deeper, repeatable audit of the existing session transcripts that produces the
numbers to ground a **pilot** revision of the Session Orchestration rules on one
project, before any broad rollout. The audit answers: how often is the wrong model
chosen, is delegation itself wasteful for small tasks, and is work being decomposed
well before hand-off. Output is a short findings report + a proposed pilot rule diff.
## User Stories
1. As the operator, I want the subagent model distribution broken down per project, so that I can see which repos leak Opus most.
2. As the operator, I want the "file-edit/shell" subagent bucket split into *trivial* (12 calls, single file) vs *substantial* (multi-file, many calls), so that I can tell genuine Sonnet/Opus work from Haiku-appropriate work instead of relying on a coarse bucket.
3. As the operator, I want each subagent's spawn traced to whether its model was **explicitly passed** by the orchestrator or **inherited** from the parent, so that I can measure the routing-leak rate directly.
4. As the operator, I want a count of subagents that did near-zero work (01 tool calls, or returned trivially), so that I can quantify wasted delegations caused by the "no threshold" rule.
5. As the operator, I want to see how many orchestrator turns spawned a single subagent for a single small op (delegation that a direct op would beat on latency), so that I can justify a complexity threshold.
6. As the operator, I want parallelism measured — how often independent subagents were batched concurrently vs. spawned sequentially — so that I can see if decomposition exploits the parallel-batch guidance.
7. As the operator, I want examples of good and bad decomposition (a clean parallel batch vs. a needless single-op delegation), so that the pilot rule change is illustrated, not just asserted.
8. As the operator, I want the audit limited to delegation-heavy projects (cc-os, llf-schema, proxmox, philly-seo, ovh-prod), so that it runs on the relevant sample, not every repo.
9. As the operator, I want the interim `CLAUDE_CODE_SUBAGENT_MODEL=haiku` effect measurable in future sessions (a before/after marker), so that I can confirm the env var actually shifted the distribution.
10. As the operator, I want a proposed pilot diff to one project's "Session Orchestration" section (threshold + enforced routing + allow orienting reads), so that I can try it on a single repo and measure wall-clock/cost before rolling out.
11. As the operator, I want the audit scripted/repeatable (saved under the repo), so that I can re-run it after the pilot to compare.
## Implementation Decisions
- **Data source:** existing JSONL transcripts in `~/.claude/projects/*/` (main) and
`~/.claude/projects/*/<session-id>/subagents/agent-*.jsonl` (subagents). Model is in
each subagent message's `model` field; tool calls are `type:"tool_use"` blocks
(walk recursively). Project dir names start with `-` — use python `glob`, never
shell `find`/`ls`.
- **Trivial vs substantial classifier:** trivial = ≤2 tool calls and ≤1 distinct file
touched; substantial = otherwise. Tune threshold against spot-checked examples.
- **Inherited vs explicit model trace:** match parent `Agent` tool_use input (does it
carry a `model`/`subagent_type`?) to the child transcript via agent id, then compare
requested vs actual model. Where the parent omitted model and child==parent model,
classify as "inherited (leak)."
- **Parallelism metric:** within a main session, detect `Agent` tool_use blocks issued
in the same assistant turn (concurrent) vs separate turns (sequential).
- **Scope:** the 5 delegation-heavy projects above; report per-project and pooled.
- **Output:** append a "Deep audit" section to `docs/cc-tool-audit.md` (or a sibling
doc) with tables + 35 examples, plus a proposed pilot rule diff for ONE project.
- **No production change** beyond the already-applied env var until the pilot is
reviewed.
## Testing Decisions
- This is an analysis task, not a shipped feature — "tests" = sanity checks on the
parser: total subagent count matches the prior audit (~1,962 with a model), model
totals reconcile, and the trivial/substantial split sums to the file-edit bucket.
- Spot-verify the classifier on 5 hand-read transcripts (one per project) before
trusting the aggregate.
- Re-run the same script post-pilot to confirm the distribution shifted (regression
baseline = today's numbers).
## Out of Scope
- Editing every CLAUDE.md (this is assessment → single-project pilot only).
- Changing tool/skill/hook config (prior audit showed negligible payoff).
- Building any new tooling, MCP, or harness changes.
- Touching the live orchestration behavior beyond the env var already set.
## Further Notes
- Interim change already live: `env.CLAUDE_CODE_SUBAGENT_MODEL=haiku` in
`~/.claude/settings.json` (applies to sessions launched after 2026-06-30).
- Prior-audit baseline to beat: Opus 26.6% / Sonnet 36.7% / Haiku 36.5% of subagents;
Opus subagents 53% file-edit/shell.
- Reusable scratch scripts from the first pass:
`/tmp/claude-1000/.../scratchpad/{full,cat,orch}.py` (ephemeral — recreate or
promote into the repo when running the deep audit).
- Open instruction-design questions for the pilot: where to set the complexity
threshold; whether to allow N orienting reads before delegating; how to phrase
"always pass model on spawn" given the env var now provides a cheap default.