/best-of-both

Issues to shipped code

Compares two agents' builds of the same spec section by section, picks a base, and writes one brief that folds the other build's best ideas into it.

The reason it exists: picking a winner throws away what the loser got right. On a paid-placement leaderboard the GPT build was the better page, but the Claude build handled empty categories far better, and on launch day every category was empty. It forces a check of the empty, first-use and error states, counts over-building as a cost, and replaces "can you improve your version?" with a named keep / adopt / drop list.

Install

curl -o ~/.claude/commands/best-of-both.md \
  https://raw.githubusercontent.com/bryancollins99/agent-skills/main/skills/best-of-both.md

Then run /best-of-both in Claude Code. For any other agent, paste the procedure below as its instruction. View on GitHub.

The procedure

Compare two AI agents' builds of the same spec, name what each did better, and write one brief that folds the loser's best ideas into the winner's branch. Args: the spec path plus two preview URLs or branch names.

Purpose

When you run the same spec through two coding agents, the natural move is to pick a winner and delete the other branch. That throws away whatever the losing build got right.

It happened on a paid-placement leaderboard: the GPT build was the better page overall, but the Claude build handled empty categories far better, filling them with existing site content so the page never looked dead. Picking GPT outright would have shipped empty pages for every category with no paying vendor yet, which on launch day was all of them.

This skill makes the comparison explicit and turns it into a single, specific improvement brief instead of a vague "can you improve your version?".

When to use

  • You built the same feature twice, with two agents or two models, from one spec.
  • Both builds are viewable: a preview deploy, a local branch, or screenshots.
  • You prefer one overall but keep noticing things the other did better.

Not for choosing between two specs. Settle the spec first; this compares implementations of the same one.

Steps

1. Load the spec and both builds

  • Read the spec in full. Its sections (reader experience, states, money, boundaries, metrics) become the comparison rows.
  • For each build, get something you can actually look at: a preview URL, or git diff main...<branch> --stat plus the rendered page. If a build only exists as code, run it locally before judging it. Do not compare from diffs alone.

2. Compare section by section

Write a table, one row per spec section:

Spec sectionBuild ABuild BBetterWhy (one line)

Rules:

  • Judge against the spec, not against each other's style.
  • Call out anything a build added that the spec never asked for (extra states, extra pages, extra settings). Over-building is a cost, not a feature, especially from high-effort runs.
  • Check the empty, first-use and error cases explicitly. That is where builds differ most and where the losing build often wins.

3. Pick the base

Pick the build that wins on the most important rows as the base branch. Say why in one sentence. Everything else is a donor.

4. Write the merge brief

One brief for the agent that owns the base branch:

  • Keep: the base build's winning sections, named, so it does not regress them.
  • Adopt: each donor idea, described concretely (what it does, where on the page), with the donor's preview URL and a screenshot of that exact part.
  • Drop: anything over-built that the spec did not ask for.
  • Do not: copy code across branches. The donor build is a reference for behaviour, not a source to paste from; the base agent re-implements in its own structure.

Print the brief. Do not send it or run it.

5. After the merge

Re-open the merged preview and re-check every row the donor won. A donor idea that did not survive the merge is the most common failure here.

Failure modes

  • "Improve your version" with no specifics. The agent polishes what it already built and ignores the other build. Name each idea to adopt.
  • Judging from code instead of the rendered page. Two builds can look equivalent in a diff and very different on screen, especially empty and error states.
  • Rewarding volume. The build with more states, toggles and pages looks more complete. Check each extra against the spec before counting it as a win.
  • Cherry-picking commits between agents' branches. Different file layouts and naming make this a conflict mess. Re-implement from the description instead.

More skills