Closes#116.
`config/models.yaml` declared a default chain and six per-skill chains. The
issue filed against it said the deployed service does not read the file. That
was true and understated: **nothing reads it at all**, and the loader written to
read it is dead too.
The whole chain goes:
- `config/models.yaml` — data with no consumer
- `internal/config/models.go` — `LoadModels` and `ModelFor`, whose only callers
are in `models_test.go`
- `internal/config/config.go` — the `ModelsFile` field, assigned from
`SUPERVISOR_MODELS_FILE` and never read
- `.env.example` — the variable that configures the path to the file nobody opens
Deleting the YAML alone would have left a loader pointing at a missing file:
one decoy replaced by another.
This subsystem had THREE PASSING TESTS. That is what kept it invisible. Green
assertions proving a function nobody calls works correctly are worse than no
tests, because coverage is exactly the signal someone would use to decide the
code is alive. The repo's own
`docs/superpowers/specs/2026-04-20-model-orchestration-design.md` said so in
April — "the model routing config exists but is dead weight" — and it survived
five more months anyway.
Two of the six models it named no longer exist (`iguana/qwen3-coder-next`,
retired in infra#416, and `koala/qwen3-coder-30b`, gone earlier). Nobody noticed
because the file being unread is the only reason it never failed.
Live routing is env, on the deployed `ingestion` service: `INGEST_LLM_MODEL`,
`BRAIN_LLM_PRIMARY_MODEL`, and four more. Not one name from the deleted file
appears there. Env is the real configuration surface; this file read as though
it were, which is why editing it to change routing would have changed nothing,
silently.
`go build ./...` clean, `task check` EXIT=0.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Local models (phi4-mini, qwen3-coder-30b) ignore soft instructions
and revert to JSON from their training. Move the prohibition to the
very top with bold caps before any other content.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove JSON output contracts from all skill files (debug, review, spec,
tdd, retrospective, trainer-reader, trainer-writer). Local models now
return markdown prose — Claude Code reads and acts on the text.
Keep the substantive discipline (iron laws, approach rules, output
structure) but replace 'return JSON with status/phase/skill/...' with
clear markdown format instructions.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remove JSON output contract, verification rules, escalation, and scope
limits that applied to the old Claude subprocess workers. Local models
are now consultants returning markdown prose, not JSON executors.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace ollama/ prefix with iguana/ and koala/ prefixes to match
actual model IDs exposed by LiteLLM on this cluster.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Drop the three-layer Claude subprocess orchestration (local model →
Claude verifier → cloud escalation). Skills now call LiteLLM directly
and return plain text to Claude Code, which decides what to do with it.
- Delete executor, orchestrator, verifier, result, attempts packages
- Simplify LiteLLMExecutor: Run(Request)→Result becomes Complete(model,sys,user)→(string,int64,error)
- Replace ExecutorFn with CompleteFunc in all 6 skill configs
- Rewrite all skill handlers to call Complete and return {"text","model","duration_ms"}
- Simplify config/models: remove Verifier/LlamaSwapURL, add ModelFor
- Bump version to v0.5.0
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements escalation chains per skill with three-layer priority:
1. Caller override (model param) — no escalation
2. Per-skill chain from models.yaml
3. default_chain fallback
New APIs:
- Verifier() — fixed verifier for output validation
- LlamaSwapURL() — base URL for warm-state probing
- ChainFor(skill, override) — ordered model list for escalation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Reader agent scans session logs for SFT/DPO candidates; writer receives
reader output and formats+writes training pairs to brain/training-data/.
Adds trainer-reader.md and trainer-writer.md discipline prompts.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds the spec skill that generates structured implementation specs from
requirements and writes them to a configurable output path in the project.
Follows the same pattern as review/debug skills with session history injection.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements the debug skill following the same pattern as review. The skill
accepts project_root + error (+ optional context/model/session_id), prepends
session history, and calls the executor to produce 3-5 ordered hypotheses —
diagnosis only, no fixes.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements the review skill following the same pattern as retrospective/tdd.
Validates project_root and files args, prepends session history when a
session_id is provided, and delegates to the executor with Read,Bash tools.
Iron-law discipline prompt enforces CRITICAL/WARNING/SUGGESTION output format.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>