implement-issue
Skill0 starsChanged 7 months agoMITView on GitHub
Implement a single GitHub issue end-to-end using TDD, then close it. Discovers the project's feedback loop automatically from ralph.sh, CLAUDE.md, Makefile, or package.json. Use when user says "implement issue #N", "do issue #N", "run ralph on #N", "work on issue", or wants to execute a single queued task.
- Commits and pushes
30 other projects use a version of this.
Adopted by
Most recently taken up by
- kbourzayq/arch-guardtheir own version, first seen Nov 8, 2026
- normalled/apijacktheir own version, first seen Nov 8, 2026
- solo-ist/prosetheir own version, first seen Nov 8, 2026
- gymcoach-app/gymcoachtheir own version, first seen Oct 26, 2026
- Julien-Au/gymcoachtheir own version, first seen Oct 26, 2026
- dativo-io/talontheir own version, first seen Oct 25, 2026
Used with
Projects with it also use review-issue, create-issue and 4 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.
ravihammondSkillreview-issue
Review and repair one GitHub issue implementation in the current checkout.
Also in 4 projects that use this
sahinSkillcreate-issue
Also in 6 projects that use this
TermiX-officialSkillmerge-pr
Merge a GitHub PR via squash after /preparepr. Use when asked to merge a ready PR. Do not push to main or modify code. Ensure the PR ends in MERGED state and clean up worktrees after success.
Also in 3 projects that use this
SentrySkillcreate-pr
Create pull requests following Sentry conventions. Use when opening PRs, writing PR descriptions, or preparing changes for review. Follows Sentry's code review guidelines.
Also in 5 projects that use this
OpenAISkillwriting-skills
Use when creating new skills, editing existing skills, or verifying skills work before deployment
Also in 3 projects that use this
Google CloudSkilltriage
Gather context on a change or bug and plan the implementation.
Also in 3 projects that use this
Other versions30 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 30
- dlt-hub/dlt★ 6.1ksame name
- google/site-kit-wp★ 1.4ksame name
- luainkernel/lunatik★ 611same name
- warpdotdev/oz-for-oss★ 313same name
- codemonkey85/PKMDS-Blazor★ 240same name
- gymcoach-app/gymcoach★ 182same name
- Julien-Au/gymcoach★ 182same name
- aaddrick/claude-pipeline★ 128same name
- dativo-io/talon★ 18same name
- alexjbarnes/cockpit★ 16same name
20 more not listed
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 repository28 other files it gives its agents.
- bootstrapSkill
- build-alignmentSkill
- decompose-issueSkill
- deploySkill
- design-an-interfaceSkill
- draft-a-godot-frontend-sceneSkill
- edit-articleSkill
- explore-realitySkill
- git-guardrails-claude-codeSkill
- grill-meSkill
- improve-codebase-architectureSkill
- insightSkill
- integrate-godot-frontend-sceneSkill
- learn-itSkill
- migrate-to-shoehornSkill
- new-plasmoidSkill
- obsidian-vaultSkill
- prd-to-godot-frontendSkill
- prd-to-issuesSkill
- prd-to-planSkill
- request-refactor-planSkill
- scaffold-exercisesSkill
- setup-pre-commitSkill
- tddSkill
- triage-issueSkill
- ubiquitous-languageSkill
- write-a-prdSkill
- write-a-skillSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
30 rules. 0 are common, 20 are distinctive, and 10 are very specific to this project.
0
Common
Most of the 29 edited versions we read keep these.
20
Distinctive
This author's own choices. Worth a look.
10
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 14
Ensure dev is up to date and check it out:
- Very specific: line 24
All implementation work happens directly on dev.
- Very specific: line 28
If progress.txt exists in the project root, read it first.
- Very specific: line 30
If the user gave an issue number, use it.
- Distinctive: line 36
Read the full issue body:
- Distinctive: line 44
Read only the issue title and body.
- Distinctive: line 48
No list of multiple distinct features or behaviours
- Very specific: line 49
No language like "and also", "additionally", "phase 1/2/3"
- Distinctive: line 51
If it smells too big, stop immediately:
- Distinctive: line 55
Wait for confirmation before continuing.
- Distinctive: line 59
Check these locations in order and use the first match:
- Distinctive: line 65
Ask the user: if none found
- Very specific: line 78
Godot class registry (TowerDefenseSequel-specific): When a new class_name script is created headlessly, Godot's class registry …
- Distinctive: line 95
Read source-of-truth documents before touching any code.
- Distinctive: line 104
Follow strict red-green-refactor.
- Distinctive: line 107
Never write multiple tests before implementing
- Distinctive: line 108
Never implement without a failing test first
- Distinctive: line 112
All GDScript strictly typed — every variable, param, return type declared
- Very specific: line 114
No bare Array or Dictionary
- Distinctive: line 120
Run both commands. If either fails:
- Distinctive: line 121
Read the error carefully
- Very specific: line 124
Do not use @warning_ignore or skip checks
- Distinctive: line 143
Check off the completed item in the parent's task list:
- Distinctive: line 162
If the count is 0 (no unchecked boxes remain), close the parent automatically:
- Distinctive: line 167
If any remain open, leave the parent open.
- Very specific: line 169
If you cannot complete: leave the issue open, note what's blocking in progress.txt, and explain to the user.
- Very specific: line 173
Write (or overwrite) progress.txt in the project root.
- Distinctive: line 202
Look at open issues and identify the best next unit of work — smallest vertical slice that builds on what was just done:
- Distinctive: line 210
Scoreboard: If the just-completed issue has a parent PRD, count total sub-issues (open + closed) and how many are closed.
- Distinctive: line 219
If no parent exists, skip the scoreboard line.
“Common” is measured: kept by at least 6 in 10 of the 29 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
Implement Issue
One issue. One Claude Code session. Full handoff.
Implement exactly one GitHub issue with TDD, run the project's feedback loop, commit directly to dev, close the issue, update the local handoff file, then tell the user to end the session. The user watches and steers — this is not an autonomous loop.
Step 0 — Branch setup
Ensure dev is up to date and check it out:
git fetch origin
git checkout dev 2>/dev/null || git checkout -b dev origin/main 2>/dev/null || git checkout -b dev
# Pull latest dev
git pull origin dev --ff-only 2>/dev/null || trueAll implementation work happens directly on dev. Never commit to main.
Step 1 — Read progress.txt and resolve the issue
If progress.txt exists in the project root, read it first. It contains handoff notes from the previous session — what was done, decisions made, suggested next issue. Use it to skip re-exploration.
If the user gave an issue number, use it. Otherwise pick from the suggested next issue in progress.txt, or:
gh issue list --label ralph --state open --json number,title --limit 1Read the full issue body:
gh issue view <NUMBER> --json title,bodyStep 1b — Gate 1: smell check on issue text (before touching the codebase)
Read only the issue title and body. Flag obvious epics before spending any tokens on file reads.
A well-sized ralph issue has:
- One clear acceptance condition — "done" is unambiguous
- No list of multiple distinct features or behaviours
- No language like "and also", "additionally", "phase 1/2/3"
If it smells too big, stop immediately:
"Gate 1: This issue looks oversized — it describes [X, Y, Z]. I'd recommend
/decompose-issue #Nfirst. Proceed anyway?"
Wait for confirmation before continuing. If confirmed, note the concern and move on.
Step 2 — Discover the feedback loop
Check these locations in order and use the first match:
ralph.sh— read thefeedback_loop()function and theDONE CONDITIONblock in the claude promptCLAUDE.md— look for a "feedback loop" or "done condition" sectionMakefile— look fortest,check, orverifytargetspackage.json— look fortestorlintscripts- Ask the user if none found
For this project (TowerDefenseSequel), the feedback loop is:
# Godot is flatpak on this machine — use full invocation, not the `godot` alias
flatpak run org.godotengine.Godot --headless --path . \
--check-only --script res://autoloads/event_bus.gd # type check — must exit 0
flatpak run org.godotengine.Godot --headless --path . \
-s addons/gut/gut_cmdln.gd -gdir=res://tests/ -gexit # test suite — must exit 0Note: --check-only requires --script (checks one file). -gexit is the correct GUT flag — -gexit_on_failure does not exist.
Godot class registry (TowerDefenseSequel-specific): When a new class_name script is created headlessly, Godot's class registry (.godot/global_script_class_cache.cfg) is not automatically updated. If the test runner reports Could not find base class "Foo" or Could not find type "Foo", add the entry manually:
# In .godot/global_script_class_cache.cfg, add to the list array:
{
"base": &"RefCounted",
"class": &"Foo",
"icon": "",
"is_abstract": false,
"is_tool": false,
"language": &"GDScript",
"path": "res://core/foo.gd"
}Alternatively, tell the user to open the Godot editor and save the project (Ctrl+S) — the editor auto-populates the registry. Do this at the start of a session if new scripts were added in a prior session without an editor save.
Step 3 — Load project context
Read source-of-truth documents before touching any code. For this project:
GDD.md— game design decisionsTAD.md— technical architecture decisionscore_plan.md— implementation plan and GDScript rules
For other projects: look for README.md, ARCHITECTURE.md, CLAUDE.md, or equivalent.
Step 4 — Implement with TDD
Follow strict red-green-refactor. Non-negotiable:
- One behaviour → one failing test → minimal code to pass → repeat
- Never write multiple tests before implementing
- Never implement without a failing test first
- Tests verify observable behaviour through the public interface only
For this project, additionally:
- All GDScript strictly typed — every variable, param, return type declared
class_nameon every script- No bare
ArrayorDictionary - No
@warning_ignore— fix the code - Signals named in past tense, no
Variantin signal params
Step 5 — Run the feedback loop
Run both commands. If either fails:
- Read the error carefully
- Fix the root cause
- Re-run until both pass
- Do not use
@warning_ignoreor skip checks
Step 6 — Commit, push to dev, close issue, and update parent if applicable
git add <specific implementation files only — not progress.txt>
git commit -m "<what and why — one atomic commit>"
git push origin devOne commit per issue. Do not include progress.txt in the commit — it is a local session file, not repo history.
Close the issue directly:
gh issue close <NUMBER> --comment "Implemented in commit $(git rev-parse --short HEAD) on dev. ✓"If this issue is a sub-issue, check its body for a > Sub-issue of #PARENT line. If found, do both:
- Check off the completed item in the parent's task list:
# Fetch current parent body
gh issue view <PARENT> --json body --jq '.body'
# Edit parent — replace "- [ ] #NUMBER" with "- [x] #NUMBER"
gh issue edit <PARENT> --body "<updated body with - [x] #NUMBER checked>"- Comment on the parent for the activity log:
gh issue comment <PARENT> --body "Closed sub-issue #<NUMBER> — <title> ✓"Then check if all children are done:
gh issue view <PARENT> --json body --jq '.body' | grep -c '\- \[ \]'If the count is 0 (no unchecked boxes remain), close the parent automatically:
gh issue close <PARENT> --comment "All sub-issues complete. Closing. ✓"If any remain open, leave the parent open.
If you cannot complete: leave the issue open, note what's blocking in progress.txt, and explain to the user.
Step 7 — Update progress.txt
Write (or overwrite) progress.txt in the project root. This is a local file only — never committed, never git-ignored. Delete it when the sprint is done. Keep entries concise; sacrifice grammar for brevity.
Issue: #<NUMBER> — <title>
Commit: <short SHA> — <commit message>
Date: <YYYY-MM-DD>
Done this session:
- <bullet per meaningful change>
Files changed:
- <path> — <why>
Decisions made:
- <non-obvious choice and reason>
Deferred / out of scope:
- <anything intentionally skipped or left partial>
Tests passing: yes / no (if no, explain)
Suggested next issue:
- #<NUMBER> — <title> (or list open issues if unclear)
Progress: <done>/<total> issues closed under parent PRD #<PARENT> (<remaining> remaining)Step 8 — Suggest the next issue
Look at open issues and identify the best next unit of work — smallest vertical slice that builds on what was just done:
gh issue list --label ralph --state open --json number,titleRecord the suggestion in progress.txt under "Suggested next issue". Do not create issues on behalf of the user — that is a human decision.
Scoreboard: If the just-completed issue has a parent PRD, count total sub-issues (open + closed) and how many are closed. Add a Progress: line at the bottom of progress.txt showing <done>/<total> issues closed under parent PRD #<PARENT> (<remaining> remaining). Use:
# Count closed sub-issues that reference the parent
gh issue list --state closed --search "Sub-issue of #<PARENT>" --json number --jq 'length'
# Count open sub-issues that reference the parent
gh issue list --state open --search "Sub-issue of #<PARENT>" --json number --jq 'length'If no parent exists, skip the scoreboard line.
Step 9 — Hand off to the user
Tell the user:
Committed and pushed to
dev. Issue #N closed.progress.txtupdated.Suggested next issue: #M — "
<title>"Godot (TowerDefenseSequel only): Open the Godot editor and hit Ctrl+S to save — this registers any new
class_namescripts added this session so the next session's headless tests can find them.End this session and start a fresh Claude Code instance with:
Read progress.txt then /implement-issueWhen you're ready to ship to main:
git checkout main && git merge dev && git push origin main
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.

