Skills better-ralph
Run one Better Ralph iteration: PRD-driven autonomous coding. Read prd.json, pick next story, implement it, run checks, commit, mark story passed, append progress. Uses only standard OpenClaw tools (read, write, exec, git). Triggers on: run better ralph, better ralph iteration, do one ralph story, next prd story, ralph loop.
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/austindixson/better-ralph" ~/.claude/skills/openclaw-skills-better-ralph && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/austindixson/better-ralph" ~/.openclaw/skills/openclaw-skills-better-ralph && rm -rf "$T"
skills/austindixson/better-ralph/SKILL.mdBetter Ralph – One Iteration (OpenClaw)
Execute one iteration of the Better Ralph workflow: pick the next PRD story, implement it, run quality checks, commit, update the PRD, and append progress. Uses only standard tools (read_file, write_file, edit, exec, git). No external runner or Aether-Claw required.
When to Use
- User says: "run better ralph", "do one better ralph iteration", "next prd story", "ralph loop", "implement next story from prd".
- Project has a
in the workspace root (see Output Format below for schema).prd.json
One-Iteration Workflow
Do these steps in order. Use only your standard file, exec, and git tools.
1. Read state
- Read
(workspace root). Parse the JSON.prd.json - Read
if it exists. If it has a sectionprogress.txt
near the top (up to the next## Codebase Patterns
or end of file), use that as context for implementation patterns. Otherwise proceed without it.##
2. Pick the next story
- From
, find all withprd.json.userStories
.passes === false - Sort by
ascending (lower number = higher priority).priority - Take the first (highest priority incomplete story).
- If every story has
, reply: "All PRD stories are complete. Nothing left to do." and stop.passes === true
3. Ensure git branch
- Check current git branch (e.g. run
or use your git tool).git branch --show-current - If
has aprd.json
and it differs from the current branch, checkout or create that branch (e.g.branchName
orgit checkout -b <branchName>
).git checkout <branchName>
4. Implement the story
- Story = the one you picked. It has:
,id
,title
,description
,acceptanceCriteria
,priority
.passes - Implement the story: write or edit code so that every item in
is satisfied.acceptanceCriteria - Work on this story only. Do not start the next story.
5. Run quality checks
- Run the project’s quality commands (e.g.
,npm test
,npm run lint
, or whatever the project uses).npm run typecheck - If any check fails, do not commit. Tell the user what failed and stop. Do not update
orprd.json
for a failed story.progress.txt
6. Commit (only if checks passed)
- Stage all changes (e.g.
or your git tool’s equivalent).git add -A - Commit with message exactly:
feat: [Story ID] - [Story Title]
Example:feat: US-002 - Display priority on task cards
7. Mark story passed in prd.json
- Read
again (in case it changed).prd.json - Find the user story with the same
you just completed. Set itsid
topasses
.true - Write the full updated
back (preserve structure and other fields; only change that story’sprd.json
).passes
8. Append progress to progress.txt
- Append (do not overwrite) a new block to
with this format:progress.txt
## [Current date/time] - [Story ID] - What was implemented (1–2 sentences) - Files changed (list paths) - **Learnings for future iterations:** - Patterns or gotchas (e.g. "this codebase uses X for Y", "remember to update Z when changing W") ---
- If
does not exist, create it with a first line likeprogress.txt
then the block above.# Better Ralph Progress
9. Report to user
- Say which story you completed (ID and title) and that you updated the PRD and progress.
- If there are still stories with
, say: "Run another iteration to do the next story." If all are complete, say: "All PRD stories are complete."passes === false
prd.json format
If the user wants to create a new
prd.json (no file yet), create it with this shape:
{ "project": "ProjectName", "branchName": "ralph/feature-kebab-case", "description": "Short feature description", "userStories": [ { "id": "US-001", "title": "Short title", "description": "As a [role], I want [thing] so that [benefit].", "acceptanceCriteria": [ "Verifiable criterion 1", "Verifiable criterion 2", "Typecheck passes" ], "priority": 1, "passes": false, "notes": "" } ] }
- priority: Lower number = higher priority. Order by dependency (e.g. schema before UI).
- passes: Start as
; set tofalse
only after the story is implemented and committed.true - acceptanceCriteria: Each item must be checkable (e.g. "Typecheck passes", "Tests pass").
Codebase Patterns (progress.txt)
Optionally keep a Codebase Patterns section at the top of
progress.txt so future iterations (or you in the next run) see it first:
# Better Ralph Progress ## Codebase Patterns - Use X for Y in this codebase - Always run Z after changing W - Tests require PORT=3000 ---
When you read
progress.txt at the start of an iteration, use this section as context. When you discover a reusable pattern, add it here (edit the top of the file and keep the rest intact). Do not put story-specific details in Codebase Patterns.
Rules
- One story per invocation. Do not implement multiple stories in one go.
- Do not commit failing code. Only commit after quality checks pass.
- Do not mark a story as passed if you did not commit (e.g. checks failed).
- Append to progress.txt; never replace the whole file (except when creating it for the first time).
- Keep changes minimal and focused on the current story’s acceptance criteria.
Checklist (one iteration)
- Read prd.json and progress.txt (and Codebase Patterns if present)
- Picked next story (passes=false, lowest priority number)
- Git branch matches prd.json.branchName
- Implemented story and satisfied all acceptance criteria
- Quality checks passed (test/lint/typecheck)
- Committed with message
feat: [ID] - [Title] - Set that story’s passes to true in prd.json
- Appended progress block to progress.txt