agentleFS
mdsmithaustinmdsmithaustin/pstack/skills/arena/SKILL.md

arena

Skill9 starsChanged 37 days agoMITView on GitHub

Spawn N parallel candidates at the same task, pick a base, graft the strongest parts of the losers into it. Use for /arena, 'arena this', 'throw it in the arena', or when one attempt at a non-trivial artifact would lock in the wrong shape.

91 other projects use a version of this, 60 of them edited.

Adopted by

Most recently taken up by

Used with

Projects with it also use addskill, apply-firmware 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.
  • ryanportfolioSkill

    addskill

    Create, import, update, or install repo or personal skills: runtime ownership, resources, discovery checks.

    Also in 6 projects that use this

  • ryanportfolioSkill

    apply-firmware

    Bring current folder (plain folder, existing repo, old or partial firmware copy) up to full Harness Firmware in place. Mirror external repo → adopt-repo.

    Also in 6 projects that use this

  • +10 more from ryanportfolio

The file

We split this skill into the rules it gives an agent

8 rules. 0 are common, 7 are distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 88 edited versions we read keep these.

  • 7

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Every candidate gets the same prompt, so the prompt is the contract.

    line 12
  2. Distinctive:

    When the project has no commit, make each plain directory a clone of a snapshot repository.

    line 20
  3. Distinctive:

    Keep the rubric outside every directory a candidate can read, and give it to the cross-judge in its prompt.

    line 22
  4. Very specific:

    After all Phase B candidates complete, choose one arm of the arena cross-judge pool role.

    line 34
  5. Distinctive:

    If no entry runs on another model, skip the judge, pick the base alone in Phase D, and say so.

    line 37
  6. Distinctive:

    If you do not know the parent's model, try the pool's entries in pool order and say that the model check did not run.

    line 38
  7. Distinctive:

    Start no graft, and spawn no implementation of the result, before you pick the base.

    line 51
  8. Distinctive:

    If the candidates converge on one shape, note the convergence subject to Phase D's actual-model disclosure and one-model limitation.

    line 57

“Common” is measured: kept by at least 6 in 10 of the 88 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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Arena

Open a worklist with one entry per phase (Frame, Fan out, Cross-judge, Pick, Graft, Verify) before launching anything.

Phase A: Frame

Every candidate gets the same prompt, so the prompt is the contract.

  1. State the artifact each candidate is producing.
  2. Derive the rubric, 3-6 concrete gradeable criteria for what success looks like on this task. For subjective criteria, use Eval's criterion and calibration guidance. It is the picker's tool in Phase D. Candidates only see the task.
  3. Pick the runners. Use the arena runners role, one arm per entry. Its default is one each on fable, opus, sonnet. A rejected entry also follows the required-arm rule below. Spawn more runners when the arena covers multiple design directions. Call the Skill tool with pstack-harness, then follow its Spawn a role section. On "comparison": "skip", follow its same-model rule: a design comparison skips Phases B through E, and a review still runs them.
  4. Give each candidate its own output location (a git worktree where possible, otherwise candidate-<n>/ inside a fresh mktemp -d "${TMPDIR:-/tmp}/arena-<slug>.XXXXXX" made for this run). Call the Skill tool with principle-separate-before-serializing-shared-state. Never reuse an earlier run's directory.
    • A native isolation option counts only when it makes a git worktree, where git -C <its path> rev-parse --path-format=absolute --git-common-dir prints the project's. Grok Build's isolation: worktree can make a standalone clone, so spawn there with isolation: none. If you omit the field, a Grok role or persona default can still turn isolation on.
    • Make every other candidate worktree yourself, one at a time, with git worktree add --detach <run dir>/candidate-<n>, where <run dir> is that fresh mktemp -d, and name the path in the candidate's brief. If an add fails, remove the worktrees already made and give every candidate a plain directory there instead, so all candidates start alike.
    • When the project has no commit, make each plain directory a clone of a snapshot repository. The fallback in the delegation procedure says how to make the snapshot and how to seed and brief each plain directory.
    • Clean up the run when it ends, after saving its outputs per Outputs, and before a re-frame and re-run starts, whether Phase E or Phase F sent you back. To clean up, remove each candidate worktree with git worktree remove --force <path>, delete any branch made for it with git branch -D, and delete the scratch directory. Going back to Phase E to graft keeps them.
    • Keep the rubric outside every directory a candidate can read, and give it to the cross-judge in its prompt.

Phase B: Fan out

Spawn all N subagents in one message, in the background, each with the task, the path to the shared grounding, its own output path, and instructions to produce the artifact and a short rationale naming the alternatives it considered and what it rejected. Send a running runner or judge only a correction to the source or scope or a stop order, never your tests, reading, or pick. If the question changes, reframe and re-run.

Required arms

An arm or exact model requested for this task remains an obligation. If it cannot return a result, retain useful outputs but report the requested comparison as incomplete. Disclose substitutions and the models that actually ran. A replacement does not fulfill an exact model request. Configured defaults and role aliases resolve through the harness as usual. A default or discretionary candidate may drop out with a recorded limitation.

Phase C: Cross-judge

After all Phase B candidates complete, choose one arm of the arena cross-judge pool role. Call the Skill tool with pstack-harness, then follow its Spawn a role section to resolve it. Its default pool is fable, opus, sonnet.

  • Spawn one read-only judge subagent. The judge never runs on the parent's model.
  • Try the pool's entries in pool order, first those from a model family other than the parent's, then those on a different capability tier of the parent's family. An auto or inherit-parent entry is the parent model, so it never judges. An arm that Spawn a role moves onto the session model after a rejection is the parent model too, so move to the next entry.
  • If no entry runs on another model, skip the judge, pick the base alone in Phase D, and say so.
  • If you do not know the parent's model, try the pool's entries in pool order and say that the model check did not run.
  • The judge sees the rubric and the candidates by path label, scores each criterion, and recommends a base with rationale. It runs in parallel with your reading in Phase D.

Phase D: Pick a base

Read every candidate's rationale end to end before picking. Read a candidate's full artifact only when it is the base, or where you and the cross-judge disagree on a criterion. The cross-judge reads every artifact in full. When Phase C skipped the judge, read every candidate's full artifact.

Score each candidate against the rubric criterion by criterion, not on holistic feel, from its rationale and the cross-judge's evidence for that criterion. Where those cannot settle a criterion, read that part of the artifact.

  • Compare against the cross-judge when Phase C ran one. Wait for its verdict before you pick. If it recommends a base other than the one it scored highest, treat the verdict as unresolved: send it back once to explain the gap, and read that explanation before you pick. Your own explanation does not replace the judge's. Agreement on the base confirms the pick.
  • Name the models you, the runners, and the cross-judge ran on before you call any agreement or convergence confirmation, because arms on one model are one opinion. Disagreement means one of you is biased or the rubric was ambiguous. Read both rationales before deciding. If you still pick a different base, record the criterion that decided it.

Pick the base a future maintainer can extend most easily without breaking invariants. When two feel tied, prefer the cleaner boundary or smaller API, per the Laziness Protocol. A larger diff for behavior-preserving restructuring of the extended unit is not a penalty. Judge the resulting structure and its demonstrated maintenance cost.

Start no graft, and spawn no implementation of the result, before you pick the base.

Phase E: Graft

Walk each losing candidate's rationale and the cross-judge's scores once more for what is worth porting into the base, usually one or two things per candidate, not most of it. Read only the parts of a losing artifact you will graft. Fold each graft in by hand, so the result stays coherent under one mental model. Call the Skill tool with principle-redesign-from-first-principles. Don't paste mechanically.

If the candidates converge on one shape, note the convergence subject to Phase D's actual-model disclosure and one-model limitation. Ship the consensus shape. No graft is needed. If they wildly diverge, Phase A was under-specified. Reframe and re-run rather than averaging the divergence.

Phase F: Verify

Verify the synthesized artifact like any other output. Call the Skill tool with principle-prove-it-works. If verification finds a problem the arena missed, either Phase A was wrong (re-frame and re-run) or a candidate caught it and you missed the graft (go back to Phase E). Don't paper over it. Before a re-frame and re-run, remove this run's candidate worktrees and their branches and delete its scratch directory. Going back to Phase E keeps them. Once verification passes, save the outputs, then clean up the same way.

Outputs

One synthesized artifact, saved where the calling task says. Code the calling task ships goes onto the branch it works on. A sketch awaiting the caller's sign-off is not yet code the task ships, so it stays outside the project until sign-off. Any other artifact whose task names no place goes in a fresh mktemp -d outside the project. Give a short synthesis note in your reply rather than as a file, naming the base and why, the cross-judge's verdict and the criterion that decided any pick against it, or that Phase C skipped the judge, each graft with its source candidate, what was rejected and why, any convergence or dropouts, and the verification result.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.