fix-github-issue
Skill8 starsChanged 4 months agoMITView on GitHub
Turn one known GitHub issue into a merged pull request, headless: a coder and then a prover in the issue's own git worktree, a pull request carrying the proof, an isolated second-engine reviewer, and a serial pull master that checks import-closure staleness against the base before it merges. Use when the task is "fix issue N unattended", "run the fix pipeline on that issue", or when another loop needs a fix seat it can call. Requires a per-repository config at the target repo's root (the pipeline refuses to start without one), the prove-work-on-github skill, and the codex and claude CLIs for the default seats. Skip for an issue you are already fixing interactively, and for issues that are product decisions rather than code.
5 other projects use a version of this.
Adopted by
Most recently taken up by
- fxmartin/claude-code-configtheir own version, first seen Oct 31, 2026
- drvoss/everything-copilot-clitheir own version, first seen Oct 26, 2026
- open-guji/luatex-cntheir own version, first seen Oct 9, 2026
- Shopify/flash-listtheir own version, first seen Mar 24, 2026
- AgnosticUI/agnosticuitheir own version, first seen Mar 2, 2026
Other versions5 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 5
- Shopify/flash-list★ 7.2ksame name
- AgnosticUI/agnosticui★ 833same name
- open-guji/luatex-cn★ 127same name
- drvoss/everything-copilot-cli★ 48same name
- fxmartin/claude-code-config★ 2same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository23 other files it gives its agents.
- skills/asset-optimization/AGENTS.mdAGENTS.md
- android-emulator-harnessSkill
- android-emulator-mask-testingSkill
- appraise-github-issuesSkill
- asset-optimizationSkill
- burn-down-github-issuesSkill
- carve-github-issueSkill
- code-github-issueSkill
- emoji-readoutSkill
- expo-developer-toolsSkill
- expo-ios-simulatorSkill
- how-to-planSkill
- ios-simulator-flow-evidenceSkill
- ios-simulatorSkill
- ios-simulator-triageSkill
- mobile-accessibilitySkill
- playwright-camera-mask-testingSkill
- playwright-gif-captureSkill
- playwright-harnessSkill
- playwright-storybook-flowsSkill
- prove-github-issueSkill
- prove-work-on-githubSkill
- zone-composerSkill
The file
We split this skill into the rules it gives an agent
1 rule. 0 are common, 1 is distinctive, and 0 are very specific to this project.
0
Common
Most of the 4 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 32
Every stage takes an explicit context rather than reading module state, so one process can run two pipelines against two configurations …
“Common” is measured: kept by at least 6 in 10 of the 4 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.
Files
Fix GitHub Issue
One issue in, one outcome out: merged, parked, handed-off, closed, dlq, or failed
when it ran, and left-alone, busy, not-run, stopped, or lease-lost when it did not
settle the issue (references/pipeline.md says what each means). Internally it is a coder
(code-github-issue), then a prover on a fresh context (prove-github-issue), then a review, then
a landing, revising until the issue's review budget is spent. Each seat ends at a fact on the
remote, and the driver moves the card between them: the coder at a pushed commit it announces on
the issue, the prover at a ready pull request whose head is the proven commit.
Invoked by burn-down-github-issues, once per Ready card and once per floor incident, through
fixIssue.
The pipeline is shared; the repository is config. Nothing here is copied into a repository. Everything true of a repository (remotes, branches, commands, path aliases, invalidation paths) lives in a config file at that repository's root, and the pipeline refuses to start without one, naming the missing file and the fields it lacks.
Every stage takes an explicit context rather than reading module state, so one process can run two
pipelines against two configurations without either seeing the other's queue, seats (the roles an
agent fills: worker, reviewer, confirmer), or run directory. That is what makes fixIssue
callable as the fix seat of a larger loop.
When to use it
- One issue you already believe is real and small enough, to be fixed unattended.
- As the fix stage of another driver: import
lib/pipeline.tsand callfixIssue(ctx, issue, { maxPoints }), building the context withlib/context.ts.
Skip it for an issue you are working interactively, for anything blocked on a product decision, and for work whose remedy is a judgement call rather than a change.
Run it
From inside the target repository (any directory of it, including a worktree):
bun run <this-skill-dir>/fix.ts --issue <n>
bun run <this-skill-dir>/fix.ts --issue <n> --dry-run
bun run <this-skill-dir>/fix.ts --issue <n> --max-points 8 # raise the size ceiling for this issue only
bun run <this-skill-dir>/fix.ts --issue <n> --worker codex:gpt-5.6-sol --reviewer claude:claude-opus-5
bun run <this-skill-dir>/fix.ts --issue <n> --confirmer claude:claude-opus-5 # the seat that re-checks a close the worker proposes
bun run <this-skill-dir>/fix.ts --issue <n> --redrive # lift a park or a dead letter and continue the issue's pull request
bun run <this-skill-dir>/fix.ts --issue <n> --land # a person's go-ahead past the merge boundary for an approved pull request
bun run <this-skill-dir>/fix.ts --issue <n> --resume-pr <pr> # continue that open pull request rather than open another<this-skill-dir> is the filesystem path of this directory wherever the collection is checked out
or installed; it is a path, not a skill name. --worker, --reviewer, and --confirmer take
engine[:model] specs resolved against the engine registry in lib/engines.ts, and a flag beats
the config for the run it is given on. Without --confirmer the confirmer is the config's, else the config's reviewer
(--reviewer does not change it), and it must be a different engine from the worker. --redrive
removes loop/parked and every loop/dlq: <phase> label, clears the review and attempt counters,
counts the redrive as loop/redrives: N, and continues the newest open pull request that
references the issue; --resume-pr names that pull request instead. --land is a person's
go-ahead past the merge boundary for a pull request it parked: it lifts only that park, and the pull
request is re-proved, re-reviewed, and landed with every other gate in force; it refuses a dead
letter or any other park (references/pipeline.md, "The merge boundary"). The command exits
non-zero when the fix failed.
The config it reads
fix-github-issue.config.ts at the invoking checkout's root when there is one, and the sibling
burndown skill's burn-down-github-issues.config.ts otherwise, reading only the fields it needs.
A repository that already adopted the burndown gets this command without writing a second file.
The project block is the repository vocabulary the prompts are rendered with, plus the path
aliases and invalidation paths the staleness walk reads. The knobs this pipeline enforces are
PipelineKnobs in lib/config.ts, with their defaults in PIPELINE_DEFAULTS beside it; this
command adds maxPoints. The template and the fields that actually bite are in the burndown
skill's
references/adopting.md.
Read next
| Need | Read |
| The verdict-file contract, the review budget, the merge boundary, staleness, and the resume windows | references/pipeline.md |
| Adopting a repository: the config template and the two fields that bite | ../burn-down-github-issues/references/adopting.md |
Hard dependencies
- The
prove-work-on-githubskill, loaded by name in the worker and reviewer prompts; the pull master's staleness rule implements itsreferences/freshness-and-reproof.md. - Bun, which runs
fix.ts. ghauthenticated with push and merge rights on the target repository.- The CLIs the seats name (by default
codexandclaude), onPATH. Keep worker and reviewer on different engines; a reviewer built from the same model as the author shares its blind spots by construction.
The ceiling, named
The pipeline executes the tracker, not your intent: an internally coherent issue pointing the wrong
way is implemented competently in the wrong direction, and the only guard is the convention docs
the config names. Issue bodies and comments are an untrusted instruction channel read by agents
running with their approval gates bypassed; the worktree confinement is a prompt contract, not a
sandbox, so run this only on trackers whose authors you trust as far as the credentials it holds.
The merge boundary computes migration and ci from the diff's paths, but data and
stored-string are runtime effects a path cannot reveal; for those it holds two independent
self-reports and parks rather than trusts. The reviewer runs as the same forge account (the code
host's account, GitHub here) as the worker, so its independence is model-level, not
identity-level. And of the five dead-letter queues only the review queue has been exercised end
to end, by a redrive that continued a parked pull request to a merge; the others are written, not
proven.
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
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.

