A skill that turns any goal into one short, paste-ready prompt. That prompt makes the agent pick a real quality bar, split the work, run a builder and a separate harsh critic on each piece, compare blind against the bar, and keep looping until it wins.
This repo is the marketplace for five harnesses. Each one gets its own spawn and loop primitives — Claude Code uses /loop and ultracode; the others do not.
Adapted from robonuggets/gauntlet-loop. The technique is Matt Shumer's.
A Grok-only fork lives at aaronwJordan/gauntlet-loop-grok. This repo is the portable one.
This repository is the marketplace. Add aaronwJordan/gauntlet-loop, then install the gauntlet-loop plugin.
| Harness | Add marketplace | Install |
|---|---|---|
| Claude Code | /plugin marketplace add aaronwJordan/gauntlet-loop |
/plugin install gauntlet-loop@gauntlet-loop |
| Codex CLI | codex plugin marketplace add aaronwJordan/gauntlet-loop |
codex plugin add gauntlet-loop@gauntlet-loop |
| Copilot CLI | copilot plugin marketplace add aaronwJordan/gauntlet-loop |
copilot plugin install gauntlet-loop@gauntlet-loop |
| Grok Build | grok plugin marketplace add aaronwJordan/gauntlet-loop |
grok plugin install gauntlet-loop@gauntlet-loop --trust |
| OpenCode | clone, then point skills at this repo's skills/ directory |
see below |
Grok requires --trust to install, and grok plugin marketplace update gauntlet-loop before an install picks up a new release. Installing the repo
URL directly instead of through the marketplace also works, but Grok then
names the plugin after the URL, so its agents come out as
<hash>:gauntlet-builder rather than the gauntlet-loop: prefix the skill's
run files assume.
Then:
/gauntlet-loop build me a pricing page for my SaaS
It offers 2 or 3 bars, you pick one, it writes one prompt. One line under that: it can run the loop here.
git clone https://github.com/aaronwJordan/gauntlet-loop.git ~/.config/opencode/vendor/gauntlet-loop{
"$schema": "https://opencode.ai/config.json",
"skills": ["~/.config/opencode/vendor/gauntlet-loop/skills"]
}Cloning this repo as the project cwd also loads .opencode/skills and .opencode/agent/.
| Claude Code | Grok Build | Codex CLI | Copilot CLI | OpenCode | |
|---|---|---|---|---|---|
| Keep going | /loop |
lead loop or gauntlet workflow |
lead loop | lead loop | lead loop |
| Fan-out | ultracode + Agent |
spawn_subagent (depth 1) |
spawn_agent / wait_agent |
task / /fleet |
task |
| Resume builder | Agent agentId / SendMessage |
resume_from |
resume_agent |
resume task or new task with gap | new task with gap |
| Fresh critic | new Agent |
new spawn_subagent |
new spawn_agent |
new task |
new task |
Shared (all harnesses): named fetchable bar, blind binary critic, no round-count exit, gauntlet-progress.md.
/loop and ultracode appear only in the Claude skill and references/run-claude.md. Grok, Codex, Copilot, and OpenCode prompts tell the lead to keep looping with that harness's spawn tools instead.
skills/gauntlet-loop/ dispatcher skill (plugin install)
references/loop.md bar, flow, voice
references/builder.md
references/critic.md
references/run-claude.md /loop + ultracode + Agent
references/run-grok.md spawn_subagent + workflow
references/run-codex.md spawn_agent
references/run-copilot.md task + /fleet
references/run-opencode.md task
workflows/gauntlet.rhai Grok Build loop
harnesses/<name>/SKILL.md pre-bound skill for clone-as-project
.claude/skills/ Claude discovery
.agents/skills/ Codex discovery
.github/skills/ Copilot discovery
.opencode/skills/ OpenCode discovery
.grok/skills/ Grok discovery
plugins/gauntlet-loop/ installable plugin
agents/<name>.md Claude + Grok agent definitions
agents/<name>.agent.md Copilot CLI agent definitions
.codex/agents/<name>.toml Codex agent definitions
scripts/check.py cross-harness correctness checks
Both agent flavours share plugins/gauntlet-loop/agents/ because Copilot CLI
discovers *.agent.md there. Claude Code globs *.md, which swallows
*.agent.md too, so the two files collide on their name: field — and the
Copilot flavour, whose tools: names Claude cannot resolve, wins and leaves
the agent with no tools. .claude-plugin/plugin.json therefore lists the two
.md files explicitly instead of letting Claude scan the directory. Keep that
list in sync if you add an agent, and run python3 scripts/check.py.
- You give a goal.
- It offers 2 or 3 bars. Named, fetchable by this session, comparable.
- You pick one. It writes ~150 words and stops.
- You paste it, or say run it. Builder/critic pairs until the critic picks ours.
The critic is a separate agent with fresh context. It opens the actual output, puts it next to the bar with the labels stripped, and picks one. Not a score.
- A vague bar.
- The builder judging its own work.
- A soft critic (scores instead of a pick).
- A fixed round count.
- Telling a non-Claude session to
/looporultracode.
Technique: Matt Shumer / Claude of Duty.
Reusable skill this adapts: Jay E / RoboNuggets.