# System-prompt profiles: task breakdown for subagent implementation

_Last updated: 2026-07-08 · Source plan: [system-prompt-profiles-assessment.md](system-prompt-profiles-assessment.md)_

Groups are ordered by dependency, not priority. Group A is read-only and can start
immediately, in parallel. Group B is the biggest win but is **gated**. Groups C and D are
sequential follow-ons.

**Slimmed scope (2026-07-08, user-approved):** execute quick/high-value wins only —
B1 → B3 ∥ C3 → B2, then a minimal C (settings-overlay aliases, no auto-detection).
A1/A2 are deferred until a live interactive `/context` check shows tool schemas still
dominate despite ToolSearch deferred loading (one user-assisted check replaces Group A;
A3's headless matrix is already substantially in the assessment doc). D is dropped from
the plan — revisit only if CC economics change; max upside ~6.3k with fork-maintenance
downside.

**Gate G0 — CLEARED (2026-07-08):** user confirmed the os-orchestration (WS4) and os-vault
(WS2) eval loops are complete; no eval runs remain in flight. Group B is unblocked.

---

## Group A — Bottom-up audit (read-only, start anytime, parallelizable)

| ID | Task | Depends on | Suggested agent |
|---|---|---|---|
| A1 | **Logging proxy.** One-file `ANTHROPIC_BASE_URL` pass-through that forwards to `api.anthropic.com` and dumps the `system` and `tools` arrays of each request to a local file. Ruby preferred (Sandi Metz style not required for a one-file tool). No response mutation, streaming must pass through untouched. Deliverable: `bin/` or `tools/` script + 3-line usage note. | — | sonnet |
| A2 | **Live prompt capture + audit.** Run one headless and (user-assisted) one interactive session through the A1 proxy from cc-os and from an empty dir; save the dumped `system`/`tools` arrays; produce an audit doc: token cost per system-prompt section, per tool schema, and a "safely droppable per profile" table. Expect savings in `--tools` lists (~18k), not prompt text (~6.3k). | A1 | sonnet |
| A3 | **Phase 0 measurement.** Script the headless baseline matrix (already partially done in the plan: 4 configs measured) and extend to 3–4 representative session types (cc-os design, client dev, brainstorm) via `--output-format json` usage fields; record one interactive `/context` check (user-assisted) to validate the headless numbers against a Fable session. Deliverable: a measurements table appended to the assessment doc. | — | haiku (scripted runs) + user for the interactive check |

A1 and A3 run in parallel; A2 follows A1.

## Group B — Top-down diet (**gated on G0**, sequential)

| ID | Task | Depends on | Suggested agent |
|---|---|---|---|
| B1 | **Split cc-os CLAUDE.md.** ~11k tokens → ~2–3k orientation file + `docs/implementation-status.md` (the append-only changelog moved out, linked not `@`-imported so it loads on demand). Follow `~/servers/proxmox-hermes/docs/claude-md-maintenance.md`: keep it short, pointers over copies, never auto-append. Must preserve: the "keep this file current" contract (redirected to the new doc), plugin naming rule, ADR discipline, OpenSpec workflow. Verify a fresh session still orients correctly. | G0 | sonnet (judgment about what is orientation vs changelog); main-loop review before commit |
| B2 ✅ (2026-07-08, see [b2-profile-overlays.md](b2-profile-overlays.md) — deep-merge confirmed, 3 overlays shipped to `~/.claude/profiles/`, measured savings marginal: −32 to −632 tokens) | **Per-profile plugin enablement.** Design + create settings overlay files (one per profile: e.g. `cc-os-design`, `client-dev`, `brainstorm`) listing `enabledPlugins`; a brainstorm profile drops rails-ui-component / api-wrapper / invoice-ninja / creative-team etc. Resolve where overlays live so they don't fight `bin/refresh-plugins` (open question #3). | B1 (so measured savings are attributable) | sonnet |
| B3 | **memsearch injection review.** Measure the SessionStart recall injection size across a week of sessions (~13 KB observed once); review memsearch plugin config options for capping/trimming it; recommend (not apply) a setting. | — (parallel with B1/B2 once G0 clears) | haiku |

## Group C — `cyolo` profile wrapper (Phase 2, after B)

| ID | Task | Depends on | Suggested agent |
|---|---|---|---|
| C1 | **Profile prompt components.** Create `~/.claude/profiles/` with `dev.md`, `ruby.md`, `planning.md`, `brainstorm.md`. Objective profiles state the session endpoint explicitly ("this session ends when the plan is written…"). Small files, ~0.5k tokens each. | B2 (profiles reference the settings overlays) | sonnet |
| C2 | **Wrapper script.** `cyolo` shell wrapper: resolve profile from flag (`--dev`, `--planning`) + project detection (pwd, Gemfile…), compose append-file, launch `claude --append-system-prompt-file <composed> --settings <profile-settings> [--tools …]`. | C1 | sonnet |
| C3 | **Open-question spikes** (can run before/parallel with C1): (a) does `--setting-sources` interact cleanly with symlinked local plugins + absolute-path hooks? (b) confirmed overlay location from B2 survives `bin/refresh-plugins`. Small experiments, written up as findings notes. | — | haiku |

## Group D — Eval-gated replacement experiment (optional, last)

| ID | Task | Depends on | Suggested agent |
|---|---|---|---|
| D1 | **Eval design.** Read `~/Documents/SecondBrain/howto/running-autoresearch-skill-evals.md` FIRST (standing rule). Design the grid: scenario set × {default, dieted stack, profile stack, full-replacement lean prompt} × model tiers; score task success + tokens/turn + wrong-tool proxies. Design only — do not run without user sign-off. | C2 (profile stack must exist to be a grid column) | sonnet |
| D2 | **Run + verdict.** Execute the grid headless-only; promote full replacement only if it wins on *outcome*, not just token count. | D1 | per playbook |

## Out of scope (captured, do not implement)

- CLAUDE.md budget linter plugin — vault note [[claude-md-budget-linter-plugin-concept]];
  overlaps os-doc-hygiene/os-status, resolve at build time.
- Per-model profile variants — deferred by user decision; revisit after profiles exist.

## Suggested execution waves

Superseded by the slimmed scope above. Current order:

1. **Wave 1 (parallel):** B1 (main-loop), B3 + C3 (subagents).
2. **Wave 2:** B2 (needs C3's overlay-location answer). ✅ Done 2026-07-08 —
   overlays shipped; measured token savings marginal (plugin listings are cheap
   post-ToolSearch), so profiles' value is focus, not context cost.
3. **Wave 3 (minimal C):** settings-overlay aliases only; full C1/C2 wrapper deferred
   until the friction is felt. B2's marginal-savings result lowers this further —
   do only when friction is actually felt.
4. **Deferred:** A1/A2 pending the interactive `/context` check; D dropped (pointer kept).
