Ralph
A minimal, file‑based agent loop for autonomous coding.
Install / Use
/learn @iannuttall/RalphREADME
Ralph

Ralph is a minimal, file‑based agent loop for autonomous coding. Each iteration starts fresh, reads the same on‑disk state, and commits work for one story at a time.
How it works
Ralph treats files and git as memory, not the model context:
- PRD (JSON) defines stories, gates, and status
- Loop executes one story per iteration
- State persists in
.ralph/
Global CLI (recommended)
Install and run Ralph from anywhere:
npm i -g @iannuttall/ralph
ralph prd # launches an interactive prompt
ralph build 1 # one Ralph run
Template hierarchy
Ralph will look for templates in this order:
.agents/ralph/in the current project (if present)- Bundled defaults shipped with this repo
State and logs always go to .ralph/ in the project.
Install templates into a project (optional overrides)
ralph install
This creates .agents/ralph/ in the current repo so you can customize prompts and loop behavior. During install, you’ll be asked if you want to add the required skills.
Install required skills (optional)
ralph install --skills
You’ll be prompted for agent (codex/claude/droid/opencode) and local vs global install. Skills installed: commit, dev-browser, prd.
If you skipped skills during ralph install, you can run ralph install --skills anytime.
Quick start (project)
- Create your PRD (JSON) or generate one:
ralph prd
Requires the prd skill (install via ralph install --skills).
Example prompt text:
A lightweight uptime monitor (Hono app), deployed on Cloudflare, with email alerts via AWS SES
Default output (agent chooses a short filename in .agents/tasks/):
.agents/tasks/prd-<short>.json
- Run one build iteration:
ralph build 1 # one Ralph run
No‑commit dry run:
ralph build 1 --no-commit # one Ralph run
Override PRD output for ralph prd:
ralph prd --out .agents/tasks/prd-api.json
Optional human overview (generated from JSON):
ralph overview
This writes a tiny overview alongside the PRD: prd-<slug>.overview.md.
PRD story status fields are updated automatically by the loop:
open→ selectablein_progress→ locked by a running loop (withstartedAt)done→ completed (withcompletedAt)
If a loop crashes and a story stays in_progress, you can set STALE_SECONDS in .agents/ralph/config.sh to allow Ralph to automatically reopen stalled stories.
Override PRD paths
You can point Ralph at a different PRD JSON file via CLI flags:
ralph build 1 --prd .agents/tasks/prd-api.json # one Ralph run
Optional progress override:
ralph build 1 --progress .ralph/progress-api.md # one Ralph run
If multiple PRD JSON files exist in .agents/tasks/ and you omit --prd, Ralph will prompt you to choose.
Optional config file (if you installed templates):
.agents/ralph/config.sh
Choose the agent runner
Set AGENT_CMD in .agents/ralph/config.sh to switch agents:
AGENT_CMD="codex exec --yolo -"
AGENT_CMD="claude -p --dangerously-skip-permissions \"\$(cat {prompt})\""
AGENT_CMD="droid exec --skip-permissions-unsafe -f {prompt}"
AGENT_CMD="opencode run \"$(cat {prompt})\""
Or override per run:
ralph prd --agent=codex
ralph build 1 --agent=codex # one Ralph run
ralph build 1 --agent=claude # one Ralph run
ralph build 1 --agent=droid # one Ralph run
ralph build 1 --agent=opencode # one Ralph run
If the CLI isn’t installed, Ralph prints install hints:
codex -> npm i -g @openai/codex
claude -> curl -fsSL https://claude.ai/install.sh | bash
droid -> curl -fsSL https://app.factory.ai/cli | sh
opencode -> curl -fsSL https://opencode.ai/install.sh | bash
State files (.ralph/)
progress.md— append‑only progress logguardrails.md— “Signs” (lessons learned)activity.log— activity + timing logerrors.log— repeated failures and notesruns/— raw run logs + summaries
Notes
.agents/ralphis portable and can be copied between repos..ralphis per‑project state.- Use
{prompt}inAGENT_CMDwhen agent needs a file path instead of stdin. - Examples: see
examples/commands.md. - OpenCode server mode: For faster performance with OpenCode, run
opencode servein a separate terminal and uncomment theAGENT_OPENCODE_CMDlines in.agents/ralph/agents.shto use--attach http://localhost:4096. This avoids cold boot on every run.
Tests
Dry-run smoke tests (no agent required):
npm test
Fast agent health check (real agent call, minimal output):
npm run test:ping
Optional integration test (requires agents installed):
RALPH_INTEGRATION=1 npm test
Full real-agent loop test:
npm run test:real
Related Skills
node-connect
340.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
340.5kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.2kCommit, push, and open a PR
