New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

openralph

Package Overview
Dependencies
Maintainers
1
Versions
25
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

openralph

Ralph Driven Development using OpenCode SDK and OpenTUI

latest
Source
npmnpm
Version
2.1.0
Version published
Maintainers
1
Created
Source

OpenRalph

npm version npm downloads License: MIT Bun TypeScript

AI agent loop for autonomous task execution.

Reads a PRD, picks one task, completes it, commits, repeats.

Quick StartFeaturesUsageConfigDocs

Ralph TUI - Task view with PRD items

Ralph TUI - Output view showing agent activity

Ralph with openralph terminal side-by-side

Quick Start

# Install stable release
bun install -g openralph

# Or install dev snapshot (latest from dev branch)
bun install -g openralph@dev

# Initialize PRD, progress log, and prompt
ralph init

# Run in any project directory
ralph

Install from Source

git clone https://github.com/shuv1337/openralph.git
cd openralph
bun install
bun run build:single  # compiles for current platform

Features

  • Autonomous Task Execution — AI agent reads your PRD, picks tasks, and completes them one by one
  • Context-Aware Loop — Re-reads full context every iteration, eliminating context drift
  • Beautiful TUI — Real-time progress dashboard with task tracking and agent activity logs
  • Multiple Adapters — Works with OpenCode server, opencode-run, or Codex CLI
  • Headless Mode — CI-friendly output with JSON/JSONL/text formats
  • Session Safety — Lock files prevent multiple instances; graceful shutdown with state persistence
  • Smart Resume — Automatically resumes from where it left off after interruption
  • PRD Conversion — Convert markdown plans to structured PRD JSON with ralph init --from

What is Ralph?

Ralph-driven development forces an AI agent to re-read full context every iteration, eliminating context drift. Each loop:

  • Read prd.json
  • Pick ONE task
  • Complete it
  • Commit (updating the PRD in the same commit)
  • Repeat until done

The agent never pushes—only commits—so you maintain review control.

Why it works:

  • Deterministic failures are debuggable. When Ralph fails, fix the prompt.
  • AGENTS.md accumulates wisdom so future iterations don't rediscover fire.
  • Human review checkpoint before anything goes live.

Learn more:

For LLM Agents

When tasked by a user to set up or run Ralph:

  • Run ralph init to create required files (prd.json, .ralph-prompt.md, AGENTS.md)
  • Populate prd.json with tasks from the user's plan or requirements
  • Add project-specific notes to AGENTS.md (build commands, pitfalls, conventions)
  • Run ralph — the loop handles the rest

Do NOT manually edit .ralph-state.json or .ralph-lock. Never git push — only commit.

Usage

ralph                              # uses prd.json in current directory
ralph --plan BACKLOG.json          # different PRD file
ralph --progress progress.txt      # custom progress log
ralph --model anthropic/claude-opus-4  # different model
ralph --reset                      # remove generated files and state, then exit
ralph --verbose                    # enable debug logging to file
ralph init --from plan.md          # convert unstructured plan to PRD JSON

CLI Options

OptionDefaultDescription
--plan, -pprd.jsonPRD file path
--progressprogress.txtProgress log path
--model, -mopencode/claude-opus-4-5Model (provider/model format)
--adapteropencode-serverAdapter (opencode-server, opencode-run, codex)
--promptsee belowCustom prompt ({plan} and {progress} placeholders)
--prompt-file.ralph-prompt.mdPrompt file path
--reset, -rfalseRemove generated files and state, then exit
--headless, -HfalseCI-friendly output
--formattextHeadless output format (text, jsonl, json)
--timestampsfalseInclude timestamps in headless output
--max-iterations(none)Cap iterations (headless)
--max-time(none)Cap runtime seconds (headless)
--server, -s(none)OpenCode server URL
--server-timeout5000Health check timeout in ms
--agent, -a(none)Agent name (e.g., build/plan/general)
--debug, -dfalseManual session creation
--yesfalseAuto-confirm prompts
--auto-resettrueAuto-reset when no TTY prompt
--force, -ffalseForce acquire session lock
--verbose, -VfalseEnable verbose debug logging to file
--fallback-agent(none)Fallback agent mapping (format: primary:fallback)

Init Subcommand

ralph init                    # create template PRD, prompt, plugin, and AGENTS.md
ralph init --from plan.md     # convert markdown plan to PRD JSON
ralph init --force            # overwrite existing files

Creates these files:

  • prd.json — PRD plan file (wrapped format with metadata)
  • progress.txt — Progress log
  • .ralph-prompt.md — Prompt template
  • .opencode/plugin/ralph-write-guardrail.ts — Write guardrail plugin
  • AGENTS.md — Project configuration for AI agents (never overwritten)
  • .gitignore entries — Adds Ralph runtime files to .gitignore
OptionDescription
--fromSource plan or notes to convert into PRD JSON
--forceOverwrite existing files (except AGENTS.md)
Default Prompt Template
READ all of {plan} and {progress}. Pick ONE task with passes=false (prefer highest-risk/highest-impact). Keep changes small: one logical change per commit. Update {plan} by setting passes=true and adding notes or steps as needed. Append a brief entry to {progress} with what changed and why. Run feedback loops before committing: bun run typecheck, bun test, bun run lint (if missing, note it in {progress} and continue). Commit change (update {plan} in the same commit). ONLY do one task unless GLARINGLY OBVIOUS steps should run together. Quality bar: production code, maintainable, tests when appropriate. If you learn a critical operational detail, update AGENTS.md. When ALL tasks complete, create .ralph-done and output <promise>COMPLETE</promise>. NEVER GIT PUSH. ONLY COMMIT.

Converting Plans to PRDs

When running ralph init --from plan.md, OpenRalph intelligently converts your markdown notes into a structured prd.json.

Best Practice plan.md Format:

To get the most out of the conversion, use this format in your markdown plans:

# My Project Plan

- [x] [setup] Initialize repository and project structure
- [x] [ui] Design the landing page hero section
- [ ] [feat] Implement user authentication logic
- [ ] [feat] Add database persistence for tasks
- [ ] Plain list items are also picked up
* Asterisk lists work too
1. Numbered lists are also supported

Why this works:

  • Status Syncing: Ralph detects [x] as completed (passes: true) and [ ] as pending (passes: false).
  • Category Tags: Placing a bracketed tag like [ui] or [feat] at the start of a task automatically sets the category field in the generated PRD.
  • Deduplication: Ralph automatically removes duplicate tasks during the conversion process.
  • Universal Support: Works across Windows, macOS, and Linux with any standard terminal.

Configuration

Ralph reads configuration from ~/.config/ralph/config.json:

{
  "model": "opencode/claude-opus-4-5",
  "plan": "prd.json",
  "progress": "progress.txt",
  "adapter": "opencode-server",
  "server": "http://localhost:4190",
  "serverTimeout": 5000
}

CLI arguments override config file values.

Environment Variables

VariableDescription
RALPH_MODELOverride model
RALPH_ADAPTEROverride adapter
RALPH_PLANOverride plan file path
RALPH_PROGRESSOverride progress log path
RALPH_SERVEROverride OpenCode server URL
RALPH_LOG_DIROverride debug log directory

Safety & Reliability

  • Session Locking — Prevents multiple Ralph instances from running in the same directory
  • Error Backoff — Retries failed agent iterations with exponential backoff
  • Graceful Shutdown — Double Ctrl+C for force quit, single for confirmed exit

Adapters

AdapterDescription
opencode-serverDefault. Connects to OpenCode server via SDK
opencode-runSpawns opencode run as PTY subprocess
codexSpawns OpenAI Codex CLI as PTY subprocess

Writing PRDs

PRD JSON uses passes flags so Ralph can track scope and progress. Two formats supported:

Plain array (user-created) or wrapped format (generated by ralph init with metadata).

Task Item Fields

FieldRequiredDescription
descriptionTask description
passesWhether complete
idCustom ID (e.g., "1.1.1")
categoryCategory (e.g., functional, setup)
stepsVerification steps
statuspending / actionable / active / done / blocked / error
effortXS / S / M / L / XL
riskL / M / H

See prd.example.json for a complete example with all fields.

Tips

  • Small, isolated tasks — one commit each
  • Explicit verification steps
  • Use effort and risk for prioritization (high-risk first)
  • Legacy markdown checkboxes work, but ralph init --from plan.md is the upgrade path

Workflow Files

FilePurpose
prd.jsonPRD plan items with passes state
progress.txtProgress log appended each iteration
.ralph-prompt.mdPrompt template used for loop runs
.ralph-state.jsonPersisted state for resume after Ctrl+C
.ralph-lockPrevents multiple instances
.ralph-doneAgent creates this when all tasks complete
.ralph-pauseCreated by p key to pause loop
.opencode/plugin/ralph-write-guardrail.tsProtects files from AI modification
AGENTS.mdProject configuration for AI agents
~/.local/state/ralph/logs/*.logDebug and memory logs (when --verbose is enabled)

Add to .gitignore:

.ralph-*

Progress Log Example

## Iteration 3 - 2025-01-10T12:34:56Z
- Task: Wire up API client
- Checks: typecheck, test
- Commit: abc123
- Notes: Added retry logic for timeouts

AGENTS.md

Ralph writes operational learnings here. Future iterations read it.

# AGENTS.md

## Build
- Run `bun install` before `bun run dev`

## Pitfalls
- Never import from `solid-js`, use `@opentui/solid`

Keybindings

KeyAction
q / Ctrl+CQuit (shows confirmation)
Ctrl+C (double)Force quit
pPause/Resume loop
cOpen command palette
:Steering mode (send message to agent)
tLaunch terminal with attach command
Shift+TToggle tasks panel
oToggle Details/Output view
dToggle progress dashboard
xToggle task status (staged)
?Show help overlay
/ kNavigate up (in tasks panel)
/ jNavigate down (in tasks panel)
nNew session (debug mode only)
EscapeClose overlay/panel

Architecture

src/
├── index.ts          # CLI entry, wires TUI to loop
├── loop.ts           # Main agent loop (prompt → events → commit)
├── app.tsx           # Solid.js TUI root component
├── state.ts          # State types and persistence
├── plan.ts           # PRD + markdown plan parser
├── git.ts            # Git operations (hash, diff, commits)
├── prompt.ts         # User confirmation prompts
├── adapters/         # Adapter implementations (opencode, codex)
├── components/       # TUI components (header, log, footer, panels)
├── context/          # React-style contexts (theme, dialog, toast)
├── hooks/            # Custom hooks (keyboard, loop state, stats)
├── lib/              # Core utilities (config, logging, theming, time)
├── pty/              # PTY subprocess management
├── templates/        # Init templates (agents, plugins)
├── types/            # TypeScript type definitions
└── ui/               # Dialog components

Data flow: index.ts starts the TUI (app.tsx) and the loop (loop.ts) in parallel. The loop sends callbacks to update TUI state. State persists to .ralph-state.json for resume capability.

Testing

bun test              # run all tests
bun test --watch      # watch mode
bun test --coverage   # with coverage
tests/
├── unit/         # Module isolation tests
├── integration/  # Full workflow tests
├── fixtures/     # Test plans and PRD JSON
└── helpers/      # Mock factories, temp file utils

Requirements

  • Bun v1.0+
  • OpenCode CLI running (or alternative adapter)

Contributing

Contributions are welcome! Feel free to submit a Pull Request.

  • Fork the repo
  • Create your feature branch (git checkout -b feature/cool-stuff)
  • Commit your changes (git commit -m 'Add cool stuff')
  • Push to the branch (git push origin feature/cool-stuff)
  • Open a Pull Request

Credits

License

MIT License - see LICENSE for details.

Made by the ralph development community

Keywords

cli

FAQs

Package last updated on 21 Jan 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts