Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Neutral third-party resolution of agent merge conflicts.
.claude/skills/nousresearch-merge-reconciler/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-21 | ✗→✓ | ▲ Improved | 1% | 0% |
| case-12 | ✓→✗ | ▼ Worse | 8% | 0% |
| case-18 | ✓→✗ | ▼ Worse | 126% | 0% |
| case-19 | ✓→✗ | ▼ Worse | 521% | 0% |
| case-07 | ✓→✓ | = Same ✓ | 19% | 0% |
Resolve a git merge conflict between two AGENTS' branches as an impartial third party. Agents resolving conflicts against a peer's work reliably either overwrite the peer or abandon their own change — they lack the peer's context and are biased toward their own side. This skill is the fix: a neutral reconciler that receives both diffs plus both sides' stated intents and produces a merged result, like a merge-queue arbiter.
engineering pipeline, parallel-PR wave, multi-worktree refactor).
git merge or git rebase halts on conflicts between two agents' work andneither original agent should self-adjudicate.
lockfile/generated-file conflicts (regenerate those instead).
permission to run the merge yourself.
terminal runninghermes kanban show <task-id>), PR bodies, or at minimum each branch's commit messages.
Standalone — a human (or agent) invokes this skill inside the conflicted repo: load the skill, then follow the Procedure top to bottom.
Spawned neutral agent — the preferred shape in multi-agent campaigns:
delegate_task: spawn a subagent whose task message contains the repo path,both branch names, and both sides' intent summaries verbatim, plus an instruction to follow this skill.
(not either worker's profile) with BOTH conflicted cards linked as parents — kanban_create(title="reconcile branch-a x branch-b", assignee="reconciler", parents=["t_a", "t_b"]). The parent links carry both sides' completion summaries into the reconciler's context automatically; the card body should name the repo path and the two branches.
| Hunk class | Definition | Resolution | |---|---|---| | disjoint-intent | The two changes serve different goals and can coexist | Combine both | | same-question-different-answer | Both sides answered one design question differently | Pick ONE per stated intents; surface the decision | | superseded | One side's premise no longer holds after the other's change | Keep the surviving side; note why |
Impartiality contract: never favor the side that spawned you; touch ONLY conflicted regions (no drive-by edits); every design-question pick must appear explicitly in the hand-back summary.
terminal: git status (confirm the conflicted state and listconflicted files), git merge-base <A> <B>, then for each side git log --oneline <base>..<side> and git diff <base>..<side> -- <file> for every conflicted file. In a halted merge, HEAD is one side and MERGE_HEAD is the other.
hermes kanban show <task-id> for completionsummaries/metadata, or the PR body, or the commit messages from the log above. Write down one sentence of intent per side before touching any file.
for every conflicted file.
read_file and locate each<<<<<<</=======/>>>>>>> block.
by the stated intents — not by which change looks nicer.
that combines cleanly PLUS a styling/rounding choice both sides answered differently), decompose it into sub-decisions and classify each one.
a neighboring hunk is disjoint. Classify per hunk, not per file.
patch (or write_file for whole-file rewrites):STATED intents (e.g., an intent of "strict validation" beats "quick default" if the task required correctness). Never split the difference into a hybrid neither side asked for.
(block the kanban card / report back) rather than guess.
opportunistic fixes.
git add each resolved file via terminal.search_files finds no <<<<<<< markers in the repo and everyresolved file is staged.
terminal; at minimum import/execute thetouched modules. Both intents must be observable in the merged behavior (e.g., side A's new semantics AND side B's disjoint addition both present).
git commit (the default merge message plus a bodylisting hunk decisions is fine).
file:lines — class — which side(s) kept — rationale. For every same-question-different-answer hunk, state the design question and the answer you picked so a human can veto it — never bury a design call.
kanban_complete(summary=...). Standalone: print the summary.you are structurally biased — state this and weigh the other side's intent deliberately. Prefer the third-profile shape so this never arises.
designed; pick one answer and surface it.
whole file as one class silently drops a disjoint change.
original agents.
completion summaries or PR bodies. If neither side's intent is recoverable, escalate instead of guessing.
a hotspot signal, not routine reconciliation work — flag it (e.g. a hotspot: <path> — <reason> kanban comment) so the orchestrator decomposes that file, rather than serially reconciling every new collision on it.
git status shows a clean tree on the target branch with a merge commit.search_files pattern <<<<<<<).dropped one is explicitly named in the summary.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 14,940 | 15,449 | +3% | 1 | 1 | 0% | 250 | 2,181 | +772% | 0 | 0 | — |
case-07 | pass→pass | 17,757 | 10,369 | -42% | 1 | 1 | 0% | 2,278 | 2,713 | +19% | 0 | 0 | — |
case-02 | fail→fail | 17,283 | 20,478 | +18% | 1 | 1 | 0% | 402 | 2,432 | +505% | 0 | 0 | — |
case-03 | fail→fail | 17,808 | 17,246 | -3% | 1 | 1 | 0% | 255 | 2,358 | +825% | 0 | 0 | — |
case-04 | pass→pass | 15,279 | 10,960 | -28% | 1 | 1 | 0% | 1,827 | 2,877 | +57% | 0 | 0 | — |
case-05 | pass→pass | 16,172 | 10,540 | -35% | 1 | 1 | 0% | 1,750 | 2,689 | +54% | 0 | 0 | — |
case-06 | pass→pass | 16,196 | 9,856 | -39% | 1 | 1 | 0% | 1,782 | 2,573 | +44% | 0 | 0 | — |
case-08 | pass→pass | 18,994 | 14,232 | -25% | 1 | 1 | 0% | 2,341 | 3,350 | +43% | 0 | 0 | — |
case-09 | pass→pass | 16,298 | 10,021 | -39% | 1 | 1 | 0% | 1,650 | 2,592 | +57% | 0 | 0 | — |
case-10 | pass→pass | 14,939 | 9,381 | -37% | 1 | 1 | 0% | 1,530 | 2,471 | +62% | 0 | 0 | — |
case-11 | pass→pass | 13,867 | 9,842 | -29% | 1 | 1 | 0% | 1,497 | 2,773 | +85% | 0 | 0 | — |
case-12 | pass→fail | 18,831 | 9,637 | -49% | 1 | 1 | 0% | 2,282 | 2,466 | +8% | 0 | 0 | — |
case-13 | pass→pass | 15,750 | 12,490 | -21% | 1 | 1 | 0% | 1,811 | 3,053 | +69% | 0 | 0 | — |
case-14 | pass→pass | 15,719 | 10,348 | -34% | 1 | 1 | 0% | 1,652 | 2,715 | +64% | 0 | 0 | — |
case-15 | pass→pass | 8,480 | 8,441 | -0% | 1 | 1 | 0% | 477 | 2,397 | +403% | 0 | 0 | — |
case-16 | pass→pass | 14,672 | 13,688 | -7% | 1 | 1 | 0% | 1,892 | 3,249 | +72% | 0 | 0 | — |
case-17 | pass→pass | 15,964 | 8,483 | -47% | 1 | 1 | 0% | 2,034 | 2,431 | +20% | 0 | 0 | — |
case-18 | pass→fail | 10,464 | 7,187 | -31% | 1 | 1 | 0% | 942 | 2,128 | +126% | 0 | 0 | — |
case-19 | pass→fail | 7,376 | 7,421 | +1% | 1 | 1 | 0% | 338 | 2,099 | +521% | 0 | 0 | — |
case-20 | pass→pass | 14,870 | 10,865 | -27% | 1 | 1 | 0% | 1,557 | 2,811 | +81% | 0 | 0 | — |
case-21 | fail→pass | 19,493 | 8,608 | -56% | 1 | 1 | 0% | 2,412 | 2,431 | +1% | 0 | 0 | — |
case-22 | pass→pass | 11,520 | 7,470 | -35% | 1 | 1 | 0% | 1,034 | 2,134 | +106% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of -50 percentage points is the difference between those two pass rates over the 19 comparable cases. 3 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.