loop
Skill1 starsChanged 2 months agoApache-2.0View on GitHub
Run a visual, human-gated gauntlet loop on the Helix Loop board — a lead splits work against a ratified quality bar, builders and critics iterate via the Workflow engine, and the human ratifies the bar and resolves budget gates on the board. Use when the user says "/helix-loop", "run a gauntlet", "start a loop", or wants iterative multi-agent building with a visible quality bar. Sibling of helix-canvas (different app, different server).
55 other projects use a version of this.
Adopted by
Most recently taken up by
- Eclipter/agentstheir own version, first seen Nov 8, 2026
- SethGammon/Citadeltheir own version, first seen Nov 4, 2026
- drevendev/HungryCrabtheir own version, first seen Nov 1, 2026
- Railly/skillstheir own version, first seen Nov 1, 2026
- HeshamFS/swarmweavertheir own version, first seen Nov 1, 2026
- jtaroreh/agystacktheir own version, first seen Oct 29, 2026
Used with
Projects with it also use review-bugbot, origin and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
0mlkrizzz655335vSkillreview-bugbot
缺陷导向代码审查。用 Bugbot 子代理找 bug。
Also in 4 projects that use this
0mlkrizzz655335vSkillorigin
origin CLI 管理。安装、登录、更新、修复 origin.cursor.com 的 CLI。"disabled-environments:
Also in 3 projects that use this
PandelisZSkillupdate-cli-config
View and modify Cursor CLI configuration settings in ~/.cursor/cli-config.json. Use when the user wants to change CLI settings, configure permissions, switch approval mode, enable vim mode, toggle display options, configure sandbox, or manage any CLI preferences.
Also in 4 projects that use this
32103210Skillmigrate-to-skills
Convert 'Applied intelligently' Cursor rules (.cursor/rules/*.mdc) and slash commands (.cursor/commands/*.md) to Agent Skills format (.cursor/skills/). Use when you want to migrate rules or commands to skills, convert .mdc rules to SKILL.md format, or consolidate commands into the skills directory.
Also in 4 projects that use this
32103210Skillupdate-cursor-settings
Modify Cursor/VSCode user settings in settings.json. Use when you want to change editor settings, preferences, configuration, themes, font size, tab size, format on save, auto save, keybindings, or any settings.json values.
Also in 4 projects that use this
MicrosoftSkillautomate
Propose an automation from a completed task or a new idea, then create it after approval. Use when the user asks to create an automation or wants scheduled local or cloud agent work.
Also in 4 projects that use this
- +3 more from 0mlkrizzz655335v
- +1 more from 32103210
Other versions55 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 55
- SethGammon/Citadel★ 927same name
- breezewish/CodexPotter★ 629same name
- jtaroreh/agystack★ 128same name
- dannys-code-corner/incan★ 73same name
- ww-w-ai/bkit-gemini★ 66same name
- IsuruMaduranga/one-code★ 50same name
- unclejobs-ai/second-claude-code★ 41same name
- BULDEE/ai-craftsman-superpowers★ 35same name
- Hassaan146/claude-skills★ 18same name
- woxiangyangzhimao/skills★ 14same name
45 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
Show its rules and text
We split this skill into the rules it gives an agent
15 rules. 0 are common, 6 are distinctive, and 9 are very specific to this project.
0
Common
Most of the 50 edited versions we read keep these.
6
Distinctive
This author's own choices. Worth a look.
9
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 11
If HELIX_ORCHESTRATOR_RUN_ID or HELIX_SKILL_CREDENTIAL_FILE is set, this skill runs in Helix Console.
- Very specific: line 13
Use the normal helix <surface> up, push, state, and wait commands.
- Very specific: line 14
Do not start local servers or Fleet, open a browser, curl localhost, use --local, log in, or change profiles/projects.
- Distinctive: line 61
Before proposing anything, read the rails that bind this project on this surface:
- Very specific: line 73
Every event on stdin is {"type": "<name>", "payload": {…}} — one object or an array of them.
- Very specific: line 92
Only loop.init, agent.status, metrics and budget.spent land before.
- Distinctive: line 155
Never silently re-grade history, and never keep judging against a superseded revision.
- Distinctive: line 190
Critique can be a panel: When a piece's criteria span distinct concerns (performance trace vs accessibility vs responsive vs visual craft), …
- Very specific: line 209
keep agent.status truthful.
- Very specific: line 224
Finish: all pieces passed → assemble the final artifact, push a final agent.status, summarize in the terminal, update memory (loop slug, …
- Very specific: line 244
Wait from the cursor of your last drain or a fresh /api/state fetch — and before waiting on something specific (a ratification, a gate), …
- Very specific: line 249
When you wait for a person — plan.ratified, gate.resolved — always pass --wake-on user:
- Distinctive: line 271
Never ratify, resolve, or simulate a user action yourself — user events come only from the board.
- Distinctive: line 273
Never report a verdict the critic didn't produce, or a pass without every criterion cited.
- Distinctive: line 275
If the loop cannot meet the bar within budget, that is a finding, not a failure to hide: raise the gate and say so.
“Common” is measured: kept by at least 6 in 10 of the 50 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Helix Loop
Orchestrator cloud context (check before setup)
If HELIX_ORCHESTRATOR_RUN_ID or HELIX_SKILL_CREDENTIAL_FILE is set, this skill runs in Helix Console. This section takes precedence over local setup and browser instructions below.
- First call the plugin's
bin/helix orchestrator-protocol(Windows:bin/helix.cmd orchestrator-protocol). It must print1. Otherwise stop with an actionable request to update the Helix plugin/CLI; never run an older binary's setup commands. - Use the normal
helix <surface> up, push, state, and wait commands. The CLI selects cloud transport and the assigned project automatically. Keep the same slug within this task. - Do not start local servers or Fleet, open a browser, curl localhost, use
--local, log in, or change profiles/projects. Do not read or print the credential file. Do not remove the injected environment variables. upreturns the Console session URL. Use that URL wherever the local instructions request Board/Fleet links. Events go to Console; human responses and gate approvals still come from the person through the normal wait protocol.- On cloud or compatibility errors, report the error. Never fall back to local mode. Outside this context, follow the local behavior below unchanged.
A gauntlet loop the human can see and steer. You orchestrate; the board shows every piece live; the bar and the budget belong to the human. The loop event log is the record. "You are the brake" is architecture here — never bypass a gate.
Setup
# start server + board; auto-restarts stale servers on the same port
${CLAUDE_PLUGIN_ROOT}/bin/helix loop up --loop <slug> --agent <name> --model <model-id> [--dir <projectDir>] [--no-open]
# --agent: your product name, lowercase (claude, codex, …)
# --model: your exact model id (e.g. claude-fable-5) — Fleet shows and filters by these
# the bar: plan JSON {changed, reason, sections} on stdin -> a revision awaiting Ratify
${CLAUDE_PLUGIN_ROOT}/bin/helix loop plan --loop <slug>
# loop EVENT JSON (single or array) on stdin; exit 6 = the bar is not ratified yet
${CLAUDE_PLUGIN_ROOT}/bin/helix loop push --loop <slug>
# blocks for events; exit 3 timeout, 4 no-viewer, 5 down
# --wake-on user holds through your own pushes and viewer churn and returns on a human act
${CLAUDE_PLUGIN_ROOT}/bin/helix loop wait --loop <slug> --since <cursor> [--timeout <s>] [--wake-on user]On Windows, ${CLAUDE_PLUGIN_ROOT}\bin\helix.cmd in place of bin/helix; the
rest of the command is the same.
upopens the browser itself, from inside the binary.--no-openis for headless or scripted runs — never a way around a permission prompt. If a prompt is declined, hand the user! open <url>and carry on.upalso brings up Fleet (mission control) when it is down, and returnsfleet: {url, started}. Hand the user both links in one line —Board: <url> · Fleet: <fleet.url>— so they know the overview is there.upnever opens Fleet in the browser; the user follows the link.
Data: ~/.helix/loop/<project>/<slug>/ (event log + server.json) — one home
for the whole machine, never inside a repo. The board
is NOT a canvas — it is Helix Loop's own UI: bar pinned top, a lane per
piece (click for attempt history), budget meter, gate banners, agent row.
Rails first
Before proposing anything, read the rails that bind this project on this surface:
${CLAUDE_PLUGIN_ROOT}/bin/helix rails for --surface loopWhat comes back is not advice — it is the standard the work is held to. Cite
rail ids when you act on them; full text with helix rails get <id>. Details
in the helix-rails skill.
Event vocabulary (what you push)
Every event on stdin is {"type": "<name>", "payload": {…}} — one object
or an array of them. The fields listed below are the payload.
loop.init {name, budget:{maxAttemptsPerPiece, maxTokens}} # defaults only; the plan's budget section is what counts
audit {agent, pieceId?, kind:"text"|"code"|"screenshot", text?, code?, language?, path?, label?}
metrics {agent?, pieceId?, model?, tokens?, toolCalls?, durationS?} # cumulative deltas; feeds the Stats tab
piece.created {pieceId, title, deps?:[pieceId]} # re-push merges (updates title/deps, keeps attempts)
attempt.started {pieceId, n, agent}
attempt.finished {pieceId, n, agent, summary?}
verdict.added {pieceId, n, agent, criteria:{<id>:"pass"|"fail"}, notes?}
piece.passed {pieceId}
budget.spent {tokens} # cumulative deltas, best honest estimate
gate.raised {gateId, kind:"budget", detail}
agent.status {agent, text, pieceId?} # include pieceId whenever the work is piece-scoped — it feeds the piece drawer's activityThe server refuses every work event until the bar is ratified — pieces,
attempts, verdicts, gates, evidence all come back 409 not-ratified (exit 6).
Only loop.init, agent.status, metrics and budget.spent land before.
The bar is the plan
The bar goes through helix loop plan, never through push. It is the same
plan every Helix run carries (Arena and Swarm use it too), in three sections:
criteria {items:[{id, label, detail?, checks?:[string], evidence?}]} # required
budget {maxTokens, maxAttemptsPerPiece} # defaults apply if absent, and the board says so
models {roles:{lead, builder, critic}, available?:[…]} # every role inherits the session model if absentprintf '%s' '{"changed":["criteria","budget","models"],
"reason":"pre-flight",
"sections":{"criteria":{"items":[…]},"budget":{"maxTokens":500000,"maxAttemptsPerPiece":5},"models":{"roles":{…}}}}' \
| ${CLAUDE_PLUGIN_ROOT}/bin/helix loop plan --loop <slug>The person can edit every section on the board before ratifying — add,
reword, reorder or remove criteria, change the budget, swap models. An edit
supersedes your proposal and becomes the next revision, awaiting its own
Ratify. So always run from the ratified revision's sections (/api/state
.plan.sections), never from what you proposed.
User actions arrive in your wait delta with origin:"user":
plan.ratified {revision}, plan.declined {revision, why}, a user-origin
plan.proposed (an edit — keep waiting), gate.resolved {action:"continue"|"stop"|"adjust"},
note.added {text, pieceId?, critId?, bar?} — critId targets one
criterion, bar: true targets the whole bar. Bar notes are revision
requests: answer them with the next plan revision (never edit a ratified
bar in place); a note arriving mid-run steers the next attempt.
The loop, step by step
- Open:
up, thenloop.initwith the budget (defaults ratified: 5 attempts/piece, 500k tokens/run — honor user overrides). - Propose the bar: decompose the user's quality target into criteria
with short ids, each fully defined:
detail(what this criterion means for THIS loop),checks(concrete, verifiable definition-of-pass items — the things a critic can actually test), andevidence(what the critic must produce to claim a verdict). This matters most on heavy loops (app builds, code conversion, legacy modernization — where criteria carry non-functional requirements); only a trivial quick loop may start label-only. The board lists the criteria, marks undefined ones, and warns next to Ratify — ratification means the human approved the definitions, so proposing an under-defined bar on a serious loop is pushing the human to sign a blank check. Propose withhelix loop plan— criteria, budget and models in one revision. Do not start work; the server will not let you anyway. - Wait for
plan.ratifiedwithwait … --wake-on user(see Cursor discipline), then read the ratified revision's sections and run from those — the person may have edited them. Onplan.declined, read the why, revise, propose the next revision. The bar NEVER changes without a ratified new revision — this is the anti-drift gate; there is no emergency exception. Mid-run re-ratification (the user asked for a revision after work started): the moment the new revision is ratified, all future verdicts and the final integration judge against it. Pieces that already passed keep their pass — it is recorded against the revision they cleared — but the lead must review them against the changed criteria and explicitly reopen (new attempt) any piece a new or tightened criterion invalidates, saying so inagent.status. Never silently re-grade history, and never keep judging against a superseded revision. - Split:
piece.createdper independently judgeable piece — as a DAG: declaredepswhere one piece genuinely cannot be built or judged before another exists (design tokens before components, schema before migration). Deps are judgeability constraints, never preferences: every edge is wall-clock serialization, so justify each one in the piece's creation status. The board derives awaitingstate for unmet deps and draws the dependency rail; no deps = flat parallel gauntlet, which stays the default. - Iterate — this is where the Workflow engine does the fan-out
(the user opted into multi-agent by invoking this skill):
- MAXIMUM CONCURRENCY WITHIN THE DAG — this is a law, not a
preference. Every piece launches the moment its deps have passed;
nothing ever waits on a piece it does not depend on. The first
proving run serialized pieces and turned ~90 minutes of work into
6+ hours of wall clock. The clean Workflow shape is a memoized
promise per piece:
The only global serial points are the ratified bar (before everything) and final integration (after everything).const done = {}; const run = (p) => done[p.id] ??= (async () => { await Promise.all((p.deps ?? []).map((d) => run(byId[d]))); // build → judge → retry loop for this piece, pushing events as it goes })(); await Promise.all(pieces.map(run)); - per piece:
attempt.started→ builder agent produces the real artifact in the repo →attempt.finished→ critic agent (fresh context, sees only artifact + bar) →verdict.addedciting every criterion id → all pass →piece.passed; any fail → next attempt with the critic's notes. - critics judge the REAL output (render it, screenshot it, read it) — never the builder's description of it.
- Critique can be a panel. When a piece's criteria span distinct
concerns (performance trace vs accessibility vs responsive vs visual
craft), split the critique across parallel single-concern critics:
each gets only the artifact plus its criteria subset with their
checksandevidencedefinitions, runs concurrently, and pushes its ownverdict.addedciting only the criteria it judged. The board merges the union; the piece passes only when every criterion is covered and passing. Keep one whole-piece coherence check (a generalist critic or the integration pass) — specialists can each pass their lane while the piece is incoherent as a whole. - Subagents report for themselves, frequently. Give every builder
and critic the CLI line and require, via Bash, at each step:
agent.statuson start, after each major step, and on finish; plusauditevents for evidence — the builder pushes a screenshot (kind:"screenshot", absolutepath) after rendering and ONE key code block (≤40 lines); the critic pushes the screenshot(s) it judged and onetextaudit per verdict (≤300 chars). Not a running commentary — one entry per step, evidence over narration. The board's Audit tab and per-piece drawer render these. - keep
agent.statustruthful; reportbudget.spentdeltas as each agent completes (workflow token telemetry or honest estimates). - Telemetry: each builder/critic pushes ONE
metricsevent per attempt on finish —{agent, pieceId, model, tokens, toolCalls, durationS}(deltas; honest estimates when exact numbers are unavailable, model = the actual model id it ran on). The lead pushes loop-level metrics for its own work. This feeds the board's Stats tab (overall tiles + per-agent and per-piece tables);budget.spentremains the authoritative ledger for the gate.
- MAXIMUM CONCURRENCY WITHIN THE DAG — this is a law, not a
preference. Every piece launches the moment its deps have passed;
nothing ever waits on a piece it does not depend on. The first
proving run serialized pieces and turned ~90 minutes of work into
6+ hours of wall clock. The clean Workflow shape is a memoized
promise per piece:
- Gates: crossing max attempts on a piece or the token budget →
gate.raised+ pause that work +waitforgate.resolved.continueresumes;stopends the run cleanly (report state);adjustmeans read the detail/notes for new limits. - Drain continuously: user
note.addedduring the run is steering — acknowledge it inagent.statusand apply it to the next attempt. - Finish: all pieces passed → assemble the final artifact, push a
final
agent.status, summarize in the terminal, update memory (loop slug, port, plan revision, budget spent, outcome). A finished loop's plan is a record: the board stops offering edits once every piece has passed.
Server operations
- A stale server restarts on the same port when you run
${CLAUDE_PLUGIN_ROOT}/bin/helix loop upagain; open tabs reconnect. - Kill by pid, never by name.
pkill -f "helix loop serve"matches every loop server on the machine — other projects, other people's sessions, runs in the middle of their work. It looks local and is not. Read the pid instead:kill "$(sed -n 's/.*"pid": *\([0-9]*\).*/\1/p' ~/.helix/loop/<project>/<slug>/server.json)". - The event log survives restarts; state is never in memory only. A server killed
under a live session is survivable — the session sees exit 5 and
upbrings it back — but the work stops until someone notices.
Cursor discipline (same law as helix-canvas)
Wait from the cursor of your last drain or a fresh /api/state fetch —
and before waiting on something specific (a ratification, a gate), check
/api/state first: the answer may already be in the log. Waiting-for-the-
past and skipping-the-past are both real failure modes.
When you wait for a person — plan.ratified, gate.resolved — always
pass --wake-on user:
${CLAUDE_PLUGIN_ROOT}/bin/helix loop wait --loop <slug> --since <cursor> --timeout 600 --wake-on userWithout it the first delta of any origin returns — your own piece.created,
a viewer opening the tab — and a lead that reads "not ratified yet" from
such a delta and stops waiting has missed the ratification that comes next.
Exit 3 means nothing yet: wait again from the returned cursor. Exit 5 means
the server is down: up, then wait again. When draining steering between
attempts, a short plain wait (60–120s) is right; it should return on
anything.
PORT=$(sed -n 's/.*"port": *\([0-9]*\).*/\1/p' ~/.helix/loop/<project>/<slug>/server.json)
curl -s "http://127.0.0.1:$PORT/api/state" # .plan.status, .ready, .gates, .notes — check before you waitHonesty rules
- Never ratify, resolve, or simulate a user action yourself — user events come only from the board.
- Never report a verdict the critic didn't produce, or a pass without every criterion cited.
- If the loop cannot meet the bar within budget, that is a finding, not a failure to hide: raise the gate and say so.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

