# 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 | **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 --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). 3. **Wave 3 (minimal C):** settings-overlay aliases only; full C1/C2 wrapper deferred until the friction is felt. 4. **Deferred:** A1/A2 pending the interactive `/context` check; D dropped (pointer kept).