_ _
| |__ ___| |_ __ ___
| '_ \ / _ \ | '_ ` _ \
| | | | __/ | | | | | |
|_| |_|\___|_|_| |_| |_|
A provider-agnostic Agent Skill that turns your coding-agent session into an advisor-orchestrated build loop: the strongest model you have plans, reviews, and decides when the work is done, while cheaper models do the actual implementation. Works with any model family (Anthropic, OpenAI, xAI/Grok, GLM, Gemini, local) and any harness that can spawn scoped subagents; first-class in Claude Code.
Why
Two reasons to run this way:
- Cost-shaped quality. Frontier models are at their best planning, decomposing, and reviewing. Most implementation chunks don't need that horsepower. Helm keeps the expensive tokens on judgment and spends cheap tokens on typing.
- Testing new SOTA models as orchestrators. When a new top model ships (a new GPT, Grok, GLM, Gemini, or Claude), the interesting question is rarely "can it write a React component" but "can it run a team." Put the new model at the helm, hold the implementation tier constant, and the loop's state file gives you a per-chunk scorecard: how many attempts each chunk took, how often it had to escalate, whether its completion condition held up. Swap the advisor, re-run, compare.
The data
Anthropic's @ClaudeDevs published SWE-bench Pro results (curated subset, 482 problems, July 2026) for exactly this pattern via their advisor tool: Sonnet 5 executors steered by a Fable 5 advisor called about once per task:
| Setup | Accuracy (Wilson 95% CI) | Cost per task (notional) |
|---|---|---|
| Sonnet 5 solo | ~0.75 | ~$0.75 |
| Sonnet 5 + Fable 5 advisor | ~0.84 | ~$1.45 |
| Fable 5 solo | ~0.91 | ~$2.25 |
That's ~92% of Fable 5's score at ~63% of the price, and roughly 9 points over Sonnet solo for about double its cost. Helm leans into the same structure and goes further on the advisor side: it doesn't just steer once per task, it reviews every chunk's diff and owns a verifiable exit condition, spending a bit more advisor time to close part of that remaining 8% gap.
The loop is goal-driven, not vibe-driven: before any work starts, the advisor must derive a verifiable completion condition (a command that passes, an observable behavior, or an enumerable checklist). If it can't, it interviews you until one is pinned. No "looks done to me" exits.
Relation to Anthropic's advisor tool
Anthropic ships this pattern natively at the API layer: the advisor tool (advisor_20260301, beta) lets an executor model consult a stronger advisor mid-generation, server-side, inside a single request. It's the same bet as helm with the topology inverted:
| Advisor tool (API) | Helm (session) | |
|---|---|---|
| Who owns the task | the cheap executor; it decides when to ask for advice | the strong advisor; it decides what gets delegated |
| Advice granularity | a plan or course-correction, ~1-3 calls per task | full plan up front, plus a diff review of every chunk |
| Verification | none built in; executor self-assesses | verifiable completion condition + gate, owned by the advisor |
| Where it runs | any Claude API integration (add one tool to tools) |
any agent harness that can spawn subagents |
They compose rather than compete: helm's advisor holds the goal, the chunking, and the exit condition, things a mid-generation advice call can't own, while an implementer that supports the advisor tool can get its own mid-chunk steering. If your harness passes API tools through to subagents, giving mid-tier implementers an advisor (per the compatibility table, e.g. Sonnet executor + Opus or Fable advisor) is a cheap way to cut failed attempts before helm's escalation ladder kicks in.
The loop's discipline is the part the API can't give you: goal-driven exits, independent review of diffs, and the per-chunk scorecard.
How it works

you: /helm add rate limiting to all public API routes
advisor (session model):
?. ask: auto or custom models? auto = advisor picks tiers; custom = you pick top/mid/low
0. derive completion condition e.g. "all 12 routes in app/api/public/*
(interview you if it can't) return 429 after N req/min; verify gate green"
1. plan + split into delegable chunks, write state file
2. loop per chunk:
dispatch -> implementer subagent (mid-tier model)
review -> advisor reads the real git diff, not the agent's summary
iterate -> follow-ups to the same agent; escalate to the strong tier after 2 failures
gate -> project verify/test gate must be green
record -> one log line per attempt in the state file
3. exit only when the completion check passes, or a real blocker needs you
Everything runs inside the current session. No cron, no scheduled wakeups, no background daemons. State lives in .helm/<task-slug>.md at the repo root so the loop survives context compaction and long sessions.
Install
Global (available in every project):
git clone https://github.com/Jacknelson6/helm ~/.claude/skills/helm
Per-project (checked into the repo, shared with your team):
git clone https://github.com/Jacknelson6/helm .claude/skills/helm
rm -rf .claude/skills/helm/.git
Then in Claude Code:
/helm <your task>
or just describe it: "run the advisor loop on X", "you plan, delegate the build".
Other agents (Codex CLI, Gemini CLI, opencode, Cursor, or anything AGENTS.md-driven): the skill is plain markdown with no Claude-only requirements. Either:
- clone it anywhere in the repo (e.g.
docs/helm/) and add one line to yourAGENTS.md: "When asked to 'helm' a task or run the advisor loop, follow docs/helm/SKILL.md", or - register
SKILL.mdas a custom command/prompt in your harness.
The only hard requirement is a harness that can spawn scoped subagents, ideally with a selectable model per subagent. If model selection isn't available, helm still runs: implementers become fresh same-model workers and you keep the chunking, independent review, and verifiable exit.
Routing and choosing models
Every run starts by ROUTING: the session model picks the cheapest loop shape
that holds quality (solo / dispatch / helm-lite / helm, see
references/routing.md). On the helm-lite route a strong-tier subagent runs
the whole advisor loop and the session model only sets the completion
condition and verifies the exit, so the priciest model in the loop is spent
only where frontier judgment is needed.
For anything beyond a trivial solo edit, the run then confirms the plan in one question:
Helm plan: . advising, building, on escalation, for mechanical work. OK?
- Auto (recommended): run as proposed
- Custom: you pick the route and/or the tiers yourself
The advisor is always whatever model your session runs on. Tiers are roles, not model names; map them to whatever your provider offers (mixing providers is fine if your harness supports it):
| Tier | Used for | Anthropic | OpenAI | xAI | GLM | Gemini |
|---|---|---|---|---|---|---|
| Advisor | planning, review, escalation decisions, the completion check | session model | session model | session model | session model | session model |
| Implementer (mid) | standard chunks | Sonnet | standard | standard | Air | Flash |
| Escalation (strong) | chunks the mid tier failed twice | Opus | frontier / reasoning | frontier | frontier | Pro |
| Mechanical (small) | renames, codemods, bulk edits | Haiku | mini / nano | mini | flash | Flash-Lite |
You can also name models inline; helm treats that as Custom with your choices prefilled:
/helm migrate the settings pages to the new form kit, implement with the small tier, escalate to mid
To evaluate a new SOTA model as the orchestrator, start your session on that model (in Claude Code: /model), keep the implementation tier fixed, and compare the ## Log sections of the state files across runs.
Recommended stack (July 2026)
Our current picks if your harness can mix providers; revisit as models ship:
| Tier | Recommendation |
|---|---|
| Orchestrator / advisor | Claude Fable 5 |
| Builder (mid) | GPT 5.6 Terra |
| Escalation (strong) | GPT 5.6 Sol or Claude Opus 4.8 |
| Mechanical (small) | Claude Haiku or GPT 5.6 Luna |
Single-provider? Use your provider's column from the tier table above.
Auto-update
If you installed by git clone (the global install above), helm keeps itself current: on every invocation it quietly runs git pull --ff-only on its own folder before starting, and re-reads itself if anything changed. Offline or diverged clones just run the version they have; it never blocks or prompts.
Prefer updating at session start instead of invocation time? Claude Code users can add a SessionStart hook to ~/.claude/settings.json:
{
"hooks": {
"SessionStart": [
{ "hooks": [ { "type": "command", "command": "git -C ~/.claude/skills/helm pull --ff-only --quiet 2>/dev/null || true" } ] }
]
}
}
To pin a version instead, remove the .git folder (the per-project install above does this already) or check out a tag; helm skips self-update when it isn't a git clone.
The state file
Each run writes .helm/<slug>.md:
# Helm: rate-limit public routes
Goal: every public API route enforces per-IP rate limiting
Completion check: `npm test rate-limit` green AND all 12 routes return 429 in the harness
Out of scope: admin routes, auth endpoints
Models: advisor=opus-4-8 implementer=sonnet escalation=opus
## Chunks
- [x] 1. middleware + config — acceptance: unit tests pass
- [x] 2. wire 12 routes — acceptance: grep shows all 12 wrapped
- [ ] 3. e2e harness — acceptance: 429 observed on each route
## Log
- chunk 1: sonnet, 1 attempt, accepted
- chunk 2: sonnet, 3 attempts (escalated to opus), accepted
Gitignore .helm/ if you don't want run logs in your repo; keep them if you're benchmarking.
What's in the repo
SKILL.md— the skill itselfreferences/success-criteria.md— what success looks like: worked completion conditions by task type (feature, bug fix, refactor, UI, performance), the invalid conditions helm must reject, and a gold-standard state filereferences/dispatch-and-review.md— the dispatch prompt template, the advisor's per-chunk review checklist, and the log-line format that doubles as the model scorecard
The references load on demand (progressive disclosure), so the skill stays cheap in context until a run actually starts.
Design notes
- The advisor never implements. Small one-line unblock fixes only. If the top model writes the feature itself, you've measured nothing and spent everything.
- Diffs over self-reports. The advisor reviews
git diff, not the subagent's summary of what it did. - 3-strikes escalation. Default tier fails once → sharper retry. Twice → fresh dispatch on the escalation tier. Escalation tier fails on the same root cause → stop and ask the human. That's a real blocker; type errors and red tests are not.
- Interview, don't guess. An unverifiable goal is the loop's only unrecoverable input, so it's the one thing the skill is required to push back on.
License
MIT
No comments yet
Be the first to share your take.