arena
Several subagents build the same artifact from one brief in isolation, a read-only judge scores them, and you pick a base and graft in the best parts of the rest. Use for "arena this", "competing attempts", "second opinion on this approach".
- License 许可
- Apache-2.0
- 最近更新
- 2026-11-14
- Stars
- ★ 1.6k
- Forks
- 491
01 前言 Front Matter
- name
- arena
- description
- Several subagents build the same artifact from one brief in isolation, a read-only judge scores them, and you pick a base and graft in the best parts of the rest. Use for "arena this", "competing attempts", "second opinion on this approach".
03 SKILL.md 正文
arena
Run several independent attempts at one brief, judge them, and merge. Use it when a single attempt risks committing to the first structure that comes to mind: a design, an API, a hard function, a prompt, a document. The architect skill calls it to produce design sketches.
If the job should be split into slices, or raced for the first success with one combined report, use the swarm skill instead. Arena gives every runner the same brief and merges what comes back. Swarm divides or races and reports.
Track a todo list with six items: frame, launch, judge, pick, graft, verify.
1. Frame
Every runner receives identical instructions, so the instructions are the job. Get them right before launching.
- Name the artifact. Say exactly what each runner produces and in what form: "a module with these three public functions and tests", not "an implementation".
- Write the rubric. Three to six criteria specific to this task, each something you can grade on its own. "Handles a partial write without corrupting the index" is gradable. "Good quality" is not. Runners never see the rubric. You and the judge use it. If the artifact touches a trust boundary, include a criterion for it, such as "untrusted input is parsed once, at the edge".
- Choose runners. Read the
arena-runnerskey from the EndoStack model config (.endostack/models.tomlwins over~/.endostack/models.toml). One entry is one runner. With no config, use two:strongandfast. A caller such as architect may pass its own list, which replaces this one.inherit(orauto) means the runner uses the session model, so pass no model. Add runners when you want more design directions explored. Repeat one model in every slot when the work needs volume more than judgment. - Isolate. Give every runner its own place to write: a separate git worktree if the agent supports it, otherwise a per-runner folder under a temp directory for this arena. Runners writing to shared files would overwrite each other and see each other's work, which destroys their independence (
principle-separate-before-serializing-shared-state).
Model names that fail. If the agent rejects a configured name, run that slot on its default tier and tell the user in one line. If a tier itself cannot be resolved, take the closest model the agent's error lists. Never block the arena on a model-name problem.
One model only. If the agent cannot choose a model per subagent, say so in one line ("Single-model arena: runners differ by brief, not model."). Keep the shared brief identical and append to each runner one distinct starting constraint, for example "optimise for the smallest public API", "optimise for the simplest data model", "assume this will need to scale to ten times the load". Without that, same-model runners tend to converge on one answer and the arena adds cost without adding options.
2. Launch
Spawn every runner in one message, in the background when the agent supports it, with write access limited to its own isolated location. If the agent cannot run subagents in parallel, run the briefs one after another yourself, starting each from a clean state, and do not reread an earlier candidate before writing the next.
Each runner gets:
- The task and the artifact definition.
- The grounding material, by path.
- Its private output path.
- The caller's runner brief, if one was passed.
- An instruction to produce the artifact plus a short rationale listing the alternatives it considered and rejected.
A runner that returns nothing is dropped. Record that and continue with the rest.
3. Judge
Wait until every runner has finished. Never start the judge while a runner is still writing, since it would grade a partial candidate.
Read the arena-judges key (default ["strong", "fast"]). Pick one model from it, preferring one from a different family than the session's, because a judge from the same family tends to favour output that resembles its own. On a single-model agent, give the judge a brief that tells it to argue against the candidate it initially prefers before settling.
Spawn one read-only judge with the rubric and every candidate's path. It grades each criterion for each candidate, with a short reason per grade, and recommends a base with its reasoning. It runs while you do step 4.
4. Pick
Read every candidate in full. Grade each against each rubric criterion separately. An overall impression is how anchoring creeps back in.
Compare your grades with the judge's. If you both chose the same base, that confirms it. If you differ, one of you is biased or a criterion was ambiguous. Read both sets of reasons before choosing, and tighten the criterion's wording in your notes.
Prefer the base that a future maintainer could extend most safely without breaking its invariants. On a tie, pick the one with the clearer boundary or the smaller API (principle-laziness-protocol).
5. Graft
Go back through each losing candidate once more, looking for parts worth taking. Expect one or two per candidate, not large sections. Integrate each by hand so the result reads as one design (principle-redesign-from-first-principles). Do not paste.
If every candidate reached the same structure, record strong agreement and ship the base with no grafts. If the candidates differ wildly, the framing was too loose: rewrite the brief and rerun. Averaging very different designs produces something none of them would defend.
6. Verify
Verify the merged artifact the way you would verify any deliverable (principle-prove-it-works): run it, test it, or read it back against the rubric with evidence. If verification finds something the arena missed, decide which happened:
- The framing missed it. Reframe and rerun.
- A candidate caught it and you skipped the graft. Go back to step 5.
Report the problem either way. Never hide it.
Output
The merged artifact, plus a short synthesis note:
- The chosen base and why.
- The judge's recommendation, and whether it matched yours.
- Each graft and the candidate it came from.
- What you turned down and why.
- Whether runners converged, and any that dropped out.
- The verification result.
Inside architect, this note becomes the rationale's synthesis section.
Done when
The merged artifact passes verification and the synthesis note is complete. Wild divergence, or a framing error found in verification, sends you back to step 1.
Related
- The
tarique-modeskill carries the general guidance on subagent effort and speed. - The
setup-endostackskill writesarena-runnersandarena-judges.
04 同仓库更多 Skills
migrate-to-e2e
Moves an existing Playwright, Cypress, Selenium, Appium, Detox, Maestro, or TesterArmy suite to e2e one slice at a time, with the old suite running beside the new one until each ported test is proven. Keeps a MIGRATION.md progress file so any later session resumes where the last stopped. Optionally plants a defect to show both suites catch it. Use for /migrate-to-e2e, "migrate our tests to e2e", "port these Maestro flows", "move our TesterArmy tests", or when a project has an e2e config and an older suite still running.
e2e
Writes, runs, and debugs end-to-end tests for web and mobile apps with e2e, the agentic test runner, which mixes agent.act goals with exact locator assertions on a Playwright browser or an iOS or Android device. Also drives a project's running app live over the e2e MCP server to look at a screen, check a UI change, take a screenshot or record a video, and try a locator; and runs bug bashes, parallel e2e explore runs with each bug proven by a repro test. Use when a project depends on e2e or has an e2e.config.ts, when asked for end-to-end, browser, mobile, or agentic UI tests, to check a change in the running app, to QA or bug bash an app or branch, or when an e2e run fails.
create-verification-skill
Generate a project-local verify-<app> skill on top of e2e, so any coding agent can launch the app, check it is worth driving, exercise a feature the way a user does, keep evidence, and bug bash it. Writes the skill, a feature map with one explore charter per feature, and proves it once. Use for /create-verification-skill, "make a verification skill for this repo", or when a project has no scripted way to prove UI behavior.
deja-search
deja-vu memory — search the user's past AI coding sessions with the deja CLI. Holds what they already settled and never wrote into the repo (naming rules, banned or already-tried tools, required checks before merge, preferred values, who owns what). Use before your first edit in a task, before you call a change done or ready to merge, before you recommend a tool, library, design or reviewer, before re-debugging an error that may already be solved, when they say 'didn't we fix this before', 'what did we decide about X' or 'I already have that', and before telling them something on this machine does not exist.
deja-reflect
End-of-session reflection and memory curation with deja-vu. Review what was decided, what commands broke and what repaired them, and record durable project rules or decisions with deja remember so the next session starts with them.
revid
Make, edit, export and post AI videos with Revid (revid.ai) through the Revid MCP server. Use whenever the user wants a short-form or long-form video made (from an idea, a script, a URL, an article, a PDF, a tweet, a product page, their own clips, or a song), wants to find what is going viral on TikTok, YouTube, Instagram or X before making something, wants to edit or re-export an existing Revid project, generate a standalone AI image or clip, make a series episode, or publish and schedule a finished video to connected social accounts. Covers setup (hosted MCP with OAuth, or an API key), the 36 tools, credits, polling and the rules for publishing. Routes to the more specific revid-* skills when one fits.