subsy/ralph-tuiPublic

AI summary: A terminal UI for orchestrating AI coding agents autonomously.

Stars
2.4K
+2 today
Forks
234
Watchers
13
Open issues
36
Open PRs
8
Contributors
~33
Commits
1.4K
Branches
68

TypeScriptMITCreated Jan 11, 2026Last push 2mo agoLatest release v0.12.0+7 stars this week+7 this month

Star history

since Jan 11, 2026
01K2KJan 2026Mar 2026May 2026Aug 2026
2.4K stars as of Aug 6, 2026, tracked back to Jan 11, 2026. Historical curve reconstructed from public GitHub event archives, calibrated to the current total.

Contribution activity

commits per day, last 52 weeks
AugSepOctNovDecJanFebMarAprMayJunJulMonWedFri2025-08-02: 0 commits2025-08-03: 0 commits2025-08-04: 0 commits2025-08-05: 0 commits2025-08-06: 0 commits2025-08-07: 0 commits2025-08-08: 0 commits2025-08-09: 0 commits2025-08-10: 0 commits2025-08-11: 0 commits2025-08-12: 0 commits2025-08-13: 0 commits2025-08-14: 0 commits2025-08-15: 0 commits2025-08-16: 0 commits2025-08-17: 0 commits2025-08-18: 0 commits2025-08-19: 0 commits2025-08-20: 0 commits2025-08-21: 0 commits2025-08-22: 0 commits2025-08-23: 0 commits2025-08-24: 0 commits2025-08-25: 0 commits2025-08-26: 0 commits2025-08-27: 0 commits2025-08-28: 0 commits2025-08-29: 0 commits2025-08-30: 0 commits2025-08-31: 0 commits2025-09-01: 0 commits2025-09-02: 0 commits2025-09-03: 0 commits2025-09-04: 0 commits2025-09-05: 0 commits2025-09-06: 0 commits2025-09-07: 0 commits2025-09-08: 0 commits2025-09-09: 0 commits2025-09-10: 0 commits2025-09-11: 0 commits2025-09-12: 0 commits2025-09-13: 0 commits2025-09-14: 0 commits2025-09-15: 0 commits2025-09-16: 0 commits2025-09-17: 0 commits2025-09-18: 0 commits2025-09-19: 0 commits2025-09-20: 0 commits2025-09-21: 0 commits2025-09-22: 0 commits2025-09-23: 0 commits2025-09-24: 0 commits2025-09-25: 0 commits2025-09-26: 0 commits2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 137 commits2026-01-12: 179 commits2026-01-13: 37 commits2026-01-14: 59 commits2026-01-15: 54 commits2026-01-16: 77 commits2026-01-17: 54 commits2026-01-18: 32 commits2026-01-19: 28 commits2026-01-20: 19 commits2026-01-21: 24 commits2026-01-22: 44 commits2026-01-23: 29 commits2026-01-24: 1 commit2026-01-25: 0 commits2026-01-26: 13 commits2026-01-27: 19 commits2026-01-28: 6 commits2026-01-29: 32 commits2026-01-30: 15 commits2026-01-31: 6 commits2026-02-01: 1 commit2026-02-02: 21 commits2026-02-03: 43 commits2026-02-04: 18 commits2026-02-05: 8 commits2026-02-06: 0 commits2026-02-07: 6 commits2026-02-08: 1 commit2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 1 commit2026-02-12: 2 commits2026-02-13: 12 commits2026-02-14: 7 commits2026-02-15: 3 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 14 commits2026-02-19: 1 commit2026-02-20: 21 commits2026-02-21: 0 commits2026-02-22: 2 commits2026-02-23: 15 commits2026-02-24: 8 commits2026-02-25: 6 commits2026-02-26: 2 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 1 commit2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 2 commits2026-03-10: 0 commits2026-03-11: 2 commits2026-03-12: 0 commits2026-03-13: 14 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 5 commits2026-03-17: 1 commit2026-03-18: 0 commits2026-03-19: 1 commit2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 2 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 1 commit2026-04-04: 0 commits2026-04-05: 5 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 2 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 12 commits2026-04-22: 3 commits2026-04-23: 3 commits2026-04-24: 2 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 10 commits2026-05-12: 1 commit2026-05-13: 9 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 0 commits2026-06-17: 0 commits2026-06-18: 0 commits2026-06-19: 0 commits2026-06-20: 0 commits2026-06-21: 0 commits2026-06-22: 0 commits2026-06-23: 0 commits2026-06-24: 0 commits2026-06-25: 0 commits2026-06-26: 0 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 0 commits2026-07-01: 0 commits2026-07-02: 0 commits2026-07-03: 0 commits2026-07-04: 0 commits2026-07-05: 0 commits2026-07-06: 0 commits2026-07-07: 0 commits2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 0 commits2026-07-11: 0 commits2026-07-12: 0 commits2026-07-13: 0 commits2026-07-14: 0 commits2026-07-15: 0 commits2026-07-16: 0 commits2026-07-17: 0 commits2026-07-18: 0 commits2026-07-19: 0 commits2026-07-20: 0 commits2026-07-21: 0 commits2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 0 commits2026-07-25: 0 commits2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits
1,133 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Permissive license

    MIT

  • Continuous integration

    Automated checks passing

What ralph-tui does

Ralph TUI acts as an orchestrator that connects AI coding assistants to your task tracker. It runs these agents in an autonomous loop, allowing them to complete tasks one-by-one. The terminal interface provides full visibility into the agent process, including intelligent task selection and error handling. It bridges the gap between raw AI capabilities and structured project management workflows.

Software engineers and engineering managers who are heavily utilizing AI coding assistants. It helps streamline the workflow for those managing complex, multi-step tasks with AI.

  • Agent orchestration: Manages the lifecycle of AI coding assistants like Claude Code or Cursor CLI.
  • Task queue management: Integrates with task trackers to automatically feed work to the AI.
  • Terminal interface: Provides a rich, interactive TUI for monitoring agent progress and logs.
  • Autonomous looping: Allows agents to work continuously through a backlog without manual intervention.
  • Error recovery: Automatically handles and logs errors encountered by the AI agents.

Where teams use it

Automated bug fixing

Point the orchestrator at an issue tracker to have agents resolve bugs autonomously.

Project scaffolding

Use the PRD creation feature to plan and generate boilerplate code continuously.

Continuous refactoring

Set up agents to work through a backlog of technical debt and code quality improvements.

Agent monitoring

Gain observability into how AI assistants are interacting with your codebase.

Getting started: bun install -g ralph-tui

README

main branch

Ralph TUI

npm version CI codecov License: MIT Built with Bun

AI Agent Loop Orchestrator - A terminal UI for orchestrating AI coding agents to work through task lists autonomously.

Ralph TUI connects your AI coding assistant (Claude Code, OpenCode, Factory Droid, Cursor CLI, Gemini CLI, Codex, Kiro CLI) to your task tracker and runs them in an autonomous loop, completing tasks one-by-one with intelligent selection, error handling, and full visibility.

Ralph TUI Screenshot

Quick Start

# Install
bun install -g ralph-tui

# Setup your project
cd your-project
ralph-tui setup

# Create a PRD with AI assistance
ralph-tui create-prd --chat

# Run Ralph!
ralph-tui run --prd ./prd.json

That's it! Ralph will work through your tasks autonomously.

Documentation

ralph-tui.com - Full documentation, guides, and examples.

Quick Links

How It Works

┌─────────────────────────────────────────────────────────────────┐
│                                                                 │
│   ┌──────────────┐     ┌──────────────┐     ┌──────────────┐   │
│   │  1. SELECT   │────▶│  2. BUILD    │────▶│  3. EXECUTE  │   │
│   │    TASK      │     │    PROMPT    │     │    AGENT     │   │
│   └──────────────┘     └──────────────┘     └──────────────┘   │
│          ▲                                         │            │
│          │                                         ▼            │
│   ┌──────────────┐                         ┌──────────────┐    │
│   │  5. NEXT     │◀────────────────────────│  4. DETECT   │    │
│   │    TASK      │                         │  COMPLETION  │    │
│   └──────────────┘                         └──────────────┘    │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

Ralph selects the highest-priority task, builds a prompt, executes your AI agent, detects completion, and repeats until all tasks are done.

Features

  • Task Trackers: prd.json (simple), Beads (git-backed with dependencies)
  • AI Agents: Claude Code, OpenCode, Factory Droid, Cursor CLI, Gemini CLI, Codex, Kiro CLI
  • Session Persistence: Pause anytime, resume later, survive crashes
  • Real-time TUI: Watch agent output, control execution with keyboard shortcuts
  • Subagent Tracing: See nested agent calls in real-time
  • Cross-iteration Context: Automatic progress tracking between tasks
  • Flexible Skills: Use PRD/task skills directly in your agent or via the TUI
  • Remote Instances: Monitor and control ralph-tui running on multiple machines from a single TUI

CLI Commands

Command Description
ralph-tui Launch the interactive TUI
ralph-tui run [options] Start Ralph execution
ralph-tui resume Resume an interrupted session
ralph-tui status Check session status
ralph-tui logs View iteration output logs
ralph-tui setup Run interactive project setup
ralph-tui create-prd Create a new PRD interactively
ralph-tui convert Convert PRD to tracker format
ralph-tui config show Display merged configuration
ralph-tui template show Display current prompt template
ralph-tui plugins agents List available agent plugins
ralph-tui plugins trackers List available tracker plugins
ralph-tui run --listen Run with remote listener enabled
ralph-tui remote <cmd> Manage remote server connections

Common Options

# Run with a PRD file
ralph-tui run --prd ./prd.json

# Run with a Beads epic
ralph-tui run --epic my-epic-id

# Run one parallel session across multiple Beads epics
ralph-tui run --parallel --epic ui-epic --epic backend-epic
ralph-tui run --parallel --epics ui-epic,backend-epic

# Override agent or model
ralph-tui run --agent claude --model sonnet
ralph-tui run --agent opencode --model anthropic/claude-3-5-sonnet

# Limit iterations
ralph-tui run --iterations 5

# Run headless (no TUI)
ralph-tui run --headless

# Run agent in isolated sandbox (bwrap on Linux, sandbox-exec on macOS)
# Requires bwrap to be installed and on PATH (Linux) or uses built-in sandbox-exec (macOS)
ralph-tui run --sandbox

# Use a bundled color theme by name
ralph-tui run --theme dracula

Create PRD Options

# Create a PRD with AI assistance (default chat mode)
ralph-tui create-prd
ralph-tui prime  # Alias

# Use a custom PRD skill from skills_dir
ralph-tui create-prd --prd-skill my-custom-skill

# Override agent
ralph-tui create-prd --agent claude

# Output to custom directory
ralph-tui create-prd --output ./docs

TUI Keyboard Shortcuts

Key Action
s Start execution
p Pause/Resume
d Toggle dashboard
g Cycle scope filter in multi-epic sessions
G Reset scope filter to All
T Toggle subagent tree panel (Shift+T)
t Cycle subagent detail level
o Cycle right panel views
a Open agent/model picker (local tab only)
, Open settings (local tab only)
C Open read-only config viewer (Shift+C, works on local and remote tabs)
q Quit
? Show help
1-9 Switch to tab 1-9 (remote instances)
[ / ] Previous/Next tab
A Add new remote instance
e Edit current remote (when viewing remote tab)
x Delete current remote (when viewing remote tab)

Multi-epic sessions: Repeated --epic and comma-separated --epics create one Ralph session across all selected hierarchy-tracker epics. Ralph uses one scheduler, one repo lock, one session branch, one merge queue, and task-scoped worktrees. The TUI scope filter (g/G) is only a local view filter over that session.

Dashboard (d key): Toggle a status panel showing:

  • Current execution status and active task
  • Agent name and model (e.g., claude-code, anthropic/claude-sonnet)
  • Tracker source (e.g., prd, beads)
  • Git branch with dirty indicator (repo:branch*)
  • Sandbox status (🔒 enabled, 🔓 disabled) with mode
  • Auto-commit setting (✓ auto, ✗ manual)
  • Remote connection info (when viewing remote tabs)

See the full CLI reference for all options.

Custom Themes

Ralph TUI supports custom color themes via the --theme option:

# Use a bundled theme by name
ralph-tui run --theme dracula

# Or use a custom theme file
ralph-tui run --theme ./my-custom-theme.json

Custom Theme Example

Bundled themes: bright, catppuccin, dracula, high-contrast, solarized-light

See the Themes documentation for the full theme schema and creating custom themes.

Using Skills Directly in Your Agent

Install ralph-tui skills to your agent using add-skill:

# Install all skills to all detected agents globally
bunx add-skill subsy/ralph-tui --all

# Install to a specific agent
bunx add-skill subsy/ralph-tui -a claude-code -g -y
bunx add-skill subsy/ralph-tui -a kiro-cli -g -y

# Or use the ralph-tui wrapper (maps agent IDs automatically)
ralph-tui skills install
ralph-tui skills install --agent claude
ralph-tui skills install --agent kiro
# If symlinked installs are problematic, copy files instead:
ralph-tui skills install --copy

Use these slash commands in your agent:

/ralph-tui-prd           # Create a PRD interactively
/ralph-tui-create-json   # Convert PRD to prd.json
/ralph-tui-create-beads  # Convert PRD to Beads issues

This lets you create PRDs while referencing source files (@filename) and using your full conversation context—then use ralph-tui run for autonomous execution.

Custom Skills Directory

You can configure a custom skills_dir in your config file to use custom PRD skills:

# In .ralph-tui/config.toml or ~/.config/ralph-tui/config.toml
skills_dir = "/path/to/my-skills"

# Then use custom skills
ralph-tui create-prd --prd-skill my-custom-skill

Skills must be folders inside skills_dir containing a SKILL.md file.

Remote Instance Management

Control multiple ralph-tui instances running on different machines (VPS servers, CI/CD environments, development boxes) from a single TUI.

┌─────────────────────────────────────────────────────────────────┐
│  LOCAL [1]│ ● prod [2]│ ◐ staging [3]│ ○ dev [4]│      +       │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   Your local TUI can connect to and control remote instances    │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

Quick Start: Remote Control

On the remote machine (server):

# Start ralph with remote listener enabled
ralph-tui run --listen --prd ./prd.json

# First run generates a secure token - save it!
# ═══════════════════════════════════════════════════════════════
#                    Remote Listener Enabled
# ═══════════════════════════════════════════════════════════════
#   Port: 7890
#   New server token generated:
#   OGQwNTcxMjM0NTY3ODkwYWJjZGVmMDEyMzQ1Njc4OQ
#   ⚠️  Save this token securely - it won't be shown again!
# ═══════════════════════════════════════════════════════════════

On your local machine (client):

# Add the remote server
ralph-tui remote add prod server.example.com:7890 --token OGQwNTcxMjM0NTY3...

# Test the connection
ralph-tui remote test prod

# Launch TUI - you'll see tabs for local + remote instances
ralph-tui

Remote Listener Commands

Recommended: Use run --listen (runs engine with remote access):

# Start with remote listener on default port (7890)
ralph-tui run --listen --prd ./prd.json

# Start with custom port
ralph-tui run --listen --listen-port 8080 --epic my-epic

Token management:

# Rotate authentication token (invalidates old token immediately)
ralph-tui run --listen --rotate-token --prd ./prd.json

# View remote listener options
ralph-tui run --help

Remote Configuration Commands

# Add a remote server
ralph-tui remote add <alias> <host:port> --token <token>

# List all remotes with connection status
ralph-tui remote list

# Test connectivity to a specific remote
ralph-tui remote test <alias>

# Remove a remote
ralph-tui remote remove <alias>

# Push config to a remote (propagate your local settings)
ralph-tui remote push-config <alias>
ralph-tui remote push-config --all  # Push to all remotes

Push Configuration to Remotes

When managing multiple ralph-tui instances, you typically want them all to use the same configuration. The push-config command lets you propagate your local config to remote instances:

# Push config to a specific remote
ralph-tui remote push-config prod

# Preview what would be pushed (without applying)
ralph-tui remote push-config prod --preview

# Push to all configured remotes
ralph-tui remote push-config --all

# Force overwrite existing config without confirmation
ralph-tui remote push-config prod --force

# Push specific scope (global or project config)
ralph-tui remote push-config prod --scope global
ralph-tui remote push-config prod --scope project

How it works:

  1. Reads your local config (~/.config/ralph-tui/config.toml or .ralph-tui/config.toml)
  2. Connects to the remote instance
  3. Checks what config exists on the remote
  4. Creates a backup if overwriting (e.g., config.toml.backup.2026-01-19T12-30-00-000Z)
  5. Writes the new config
  6. Triggers auto-migration to install skills/templates

Scope selection:

  • --scope global: Push to ~/.config/ralph-tui/config.toml on remote
  • --scope project: Push to .ralph-tui/config.toml in remote's working directory
  • Without --scope: Auto-detects based on what exists locally and remotely

Security Model

Ralph uses a two-tier token system for secure remote access:

Token Type Lifetime Purpose
Server Token 90 days Initial authentication, stored on disk
Connection Token 24 hours Session authentication, auto-refreshed

Security features:

  • Without a token configured, the listener binds only to localhost (127.0.0.1)
  • With a token configured, the listener binds to all interfaces (0.0.0.0)
  • All connections require authentication
  • All remote actions are logged to ~/.config/ralph-tui/audit.log
  • Tokens are shown only once at generation time

Connection Resilience

Remote connections automatically handle network interruptions:

  • Auto-reconnect: Exponential backoff from 1s to 30s (max 10 retries)
  • Silent retries: First 3 retries are silent, then toast notifications appear
  • Status indicators: connected, connecting, reconnecting, disconnected
  • Metrics display: Latency (ms) and connection duration shown in tab bar

Tab Navigation

When connected to remote instances, a tab bar appears at the top of the TUI:

Key Action
1-9 Jump directly to tab 1-9
[ Previous tab
] Next tab
Ctrl+Tab Next tab
Ctrl+Shift+Tab Previous tab

The first tab is always "Local" (your current machine). Remote tabs show the alias you configured with connection status.

Managing Remotes from the TUI

You can add, edit, and delete remote servers directly from the TUI without leaving the interface:

Add Remote (A key): Opens a form dialog to configure a new remote:

  • Alias: A short name for the remote (e.g., "prod", "dev-server")
  • Host: The server address (e.g., "192.168.1.100", "server.example.com")
  • Port: The listener port (default: 7890)
  • Token: The server token (displayed on the remote when you start with --listen)

Use Tab/Shift+Tab to move between fields, Enter to save, Esc to cancel.

Edit Remote (e key): When viewing a remote tab, press e to edit its configuration. The form pre-fills with current values. You can change any field, including the alias.

Delete Remote (x key): When viewing a remote tab, press x to delete it. A confirmation dialog shows the remote details before deletion.

Full Remote Control

When connected to a remote instance, you have full control:

  • View: Agent output, logs, progress, task list
  • Control: Pause, resume, cancel execution
  • Modify: Add/remove iterations, refresh tasks
  • Start: Begin new task execution

All operations work identically to local control with <100ms perceived latency.

Configuration Files

File Purpose
~/.config/ralph-tui/remote.json Server token storage
~/.config/ralph-tui/remotes.toml Remote server configurations
~/.config/ralph-tui/audit.log Audit log of all remote actions
~/.config/ralph-tui/listen.pid Daemon PID file

Contributing

Development Setup

git clone https://github.com/subsy/ralph-tui.git
cd ralph-tui
bun install
bun run dev

Build & Test

bun run build       # Build the project
bun run typecheck   # Type check (no emit)
bun run lint        # Run linter
bun run lint:fix    # Auto-fix lint issues

Testing

bun test            # Run all tests
bun test --watch    # Run tests in watch mode
bun test --coverage # Run tests with coverage

See CONTRIBUTING.md for detailed testing documentation including:

  • Test file naming conventions
  • Using factories and mocks
  • Writing new tests
  • Coverage requirements

Pull Request Requirements

PRs must meet these requirements before being merged:

  • >50% test coverage on new/changed lines (enforced by Codecov)
  • Documentation updates for any new or changed features
  • All CI checks passing (typecheck, lint, tests)

See CONTRIBUTING.md for full PR guidelines.

Project Structure

ralph-tui/
├── src/
│   ├── cli.tsx           # CLI entry point
│   ├── commands/         # CLI commands (run, resume, status, logs, listen, remote, etc.)
│   ├── config/           # Configuration loading and validation (Zod schemas)
│   ├── engine/           # Execution engine (iteration loop, events)
│   ├── interruption/     # Signal handling and graceful shutdown
│   ├── logs/             # Iteration log persistence
│   ├── plugins/
│   │   ├── agents/       # Agent plugins (claude, opencode)
│   │   │   └── tracing/  # Subagent tracing parser
│   │   └── trackers/     # Tracker plugins (beads, beads-bv, json)
│   ├── remote/           # Remote instance management
│   │   ├── server.ts     # WebSocket server for remote control
│   │   ├── client.ts     # WebSocket client with auto-reconnect
│   │   ├── token.ts      # Two-tier token management
│   │   ├── config.ts     # Remote server configuration (TOML)
│   │   ├── audit.ts      # JSONL audit logging
│   │   └── types.ts      # Type definitions
│   ├── session/          # Session persistence and lock management
│   ├── setup/            # Interactive setup wizard
│   ├── templates/        # Handlebars prompt templates
│   ├── chat/             # AI chat mode for PRD creation
│   ├── prd/              # PRD generation and parsing
│   └── tui/              # Terminal UI components (OpenTUI/React)
│       └── components/   # React components (TabBar, Toast, etc.)
├── skills/               # Bundled skills for PRD/task creation
│   ├── ralph-tui-prd/
│   ├── ralph-tui-create-json/
│   └── ralph-tui-create-beads/
├── website/              # Documentation website (Next.js)
└── docs/                 # Images and static assets

Key Technologies

See CLAUDE.md for detailed development guidelines.

Credits

Thanks to Geoffrey Huntley for the original Ralph Wiggum loop concept.

License

MIT License - see LICENSE for details.

View on GitHub

Recent activity

commits and pull requests

Recent open issues

view all

Releases and announcements

17 total
  1. v0.12.0v0.12.0May 13, 2026

    ## What's Changed * chore: bump version to 0.11.0 by @subsy in https://github.com/subsy/ralph-tui/pull/341 * Add dynamic vertical landing pages for brand use cases by @subsy in https://github.com/subsy/ralph-tui/pull/356 * Revert "Merge pull request #356 from subsy/claude/fix-vertical-pages-error-8GxJY" by @subsy in https://github.com/subsy/ralph-tui/pull/357 * feat(tracker): Support for Beads-Rust-BV plugin by @cachemoney in https://github.com/subsy/ralph-tui/pull/342 * feat: add Pi Coding Agent plugin by @oneilltomhq in https://github.com/subsy/ralph-tui/pull/344 * feat: Linear Task Tracker by @omer9564 in https://github.com/subsy/ralph-tui/pull/343 * fix(skills): use kiro-cli agent mapping and support --copy installs by @medhatgalal in https://github.com/subsy/ralph-tui/pull/349 * Auto-refresh TUI task list after task completion by @mwarger in https://github.com/subsy/ralph-tui/pull/361 * Investigate GitHub issue 351 by @subsy in https://github.com/subsy/ralph-tui/pull/359 * Fix incorrect cursor cli command by @TimLevert in https://github.com/subsy/ralph-tui/pull/374 * fix: show fallback description for [read] and [apply_patch] tool lines by @thunter009 in https://github.com/sub

  2. v0.11.0v0.11.0Feb 25, 2026

    ## What's Changed * Allow runtime updates to autoCommit setting via TUI by @subsy in https://github.com/subsy/ralph-tui/pull/333 * Enforce minimum Bun version 1.3.6 at runtime by @subsy in https://github.com/subsy/ralph-tui/pull/334 * fix: parallel workflow reliability and recovery (#328) by @subsy in https://github.com/subsy/ralph-tui/pull/335 * fix: use --robot-next for task selection to prevent picking blocked tasks by @mwarger in https://github.com/subsy/ralph-tui/pull/329 * Stabilize dotted child task ordering across beads trackers by @subsy in https://github.com/subsy/ralph-tui/pull/337 * fix: resolve Gemini CLI command name with legacy fallback by @medhatgalal in https://github.com/subsy/ralph-tui/pull/338 * fix: clamp status progress bar inputs by @buihongduc132 in https://github.com/subsy/ralph-tui/pull/340 ## New Contributors * @mwarger made their first contribution in https://github.com/subsy/ralph-tui/pull/329 * @buihongduc132 made their first contribution in https://github.com/subsy/ralph-tui/pull/340 **Full Changelog**: https://github.com/subsy/ralph-tui/compare/v0.10.0...v0.11.0

  3. v0.10.0v0.10.0Feb 20, 2026

    ## What's Changed * Update Beads-BV tracker documentation with correct repository link by @subsy in https://github.com/subsy/ralph-tui/pull/322 * fix(beads-rust): enrich getTasks with dependency IDs for parallel execution by @thunter009 in https://github.com/subsy/ralph-tui/pull/321 * fix(beads): enrich dependency IDs for parallel graph analysis by @subsy in https://github.com/subsy/ralph-tui/pull/323 * fix: support symlinked skill discovery and robust install agent counting by @subsy in https://github.com/subsy/ralph-tui/pull/325 * Add live task usage/context telemetry and aggregate usage metrics by @subsy in https://github.com/subsy/ralph-tui/pull/326 * chore: bump version to 0.10.0 by @subsy in https://github.com/subsy/ralph-tui/pull/324 **Full Changelog**: https://github.com/subsy/ralph-tui/compare/v0.9.0...v0.10.0

  4. v0.9.0v0.9.0Feb 18, 2026

    ## What's Changed * fix(beads-rust): use dependency_type instead of type in br show --json by @thunter009 in https://github.com/subsy/ralph-tui/pull/308 * Fix Beads sync to use --flush-only flag to prevent data loss by @subsy in https://github.com/subsy/ralph-tui/pull/316 * Mark @opentui packages as external in build configuration by @subsy in https://github.com/subsy/ralph-tui/pull/315 * feat: add Kimi CLI agent plugin by @27mfp in https://github.com/subsy/ralph-tui/pull/306 * fix(parallel): stabilize execution state and worktree lifecycle by @subsy in https://github.com/subsy/ralph-tui/pull/317 * chore: release v0.9.0 by @subsy in https://github.com/subsy/ralph-tui/pull/318 ## New Contributors * @27mfp made their first contribution in https://github.com/subsy/ralph-tui/pull/306 **Full Changelog**: https://github.com/subsy/ralph-tui/compare/v0.8.0...v0.9.0

  5. v0.8.0v0.8.0Feb 14, 2026

    ## What's Changed * feat: wire up AI conflict resolution for parallel execution by @subsy in https://github.com/subsy/ralph-tui/pull/283 * feat(images): Add image attachment support for create-prd by @jesse-merhi in https://github.com/subsy/ralph-tui/pull/195 * fix(oom): cap output buffers to stop 96GB memory blowups by @dyxushuai in https://github.com/subsy/ralph-tui/pull/288 * fix: filter tombstoned issues from beads-rust tracker by @thunter009 in https://github.com/subsy/ralph-tui/pull/297 * Fix beads-rust epic filtering and parallel config loading by @dvic in https://github.com/subsy/ralph-tui/pull/300 * fix(agents): resolve explicit command paths during detection by @subsy in https://github.com/subsy/ralph-tui/pull/302 * fix: handle parallel disk space fallback and expose startup failures by @subsy in https://github.com/subsy/ralph-tui/pull/303 * Fix custom agents missing in settings (issue 287) by @subsy in https://github.com/subsy/ralph-tui/pull/304 * feat: added github copilot agent plugin by @cachemoney in https://github.com/subsy/ralph-tui/pull/286 * chore: bump version to 0.8.0 and update next-mdx-remote by @subsy in https://github.com/subsy/ralph-tui/pull/305 ## New Co

Commits per week

last 52 weeks
5970Week of 2025-08-02: 0 commitsWeek of 2025-08-09: 0 commitsWeek of 2025-08-16: 0 commitsWeek of 2025-08-23: 0 commitsWeek of 2025-08-30: 0 commitsWeek of 2025-09-06: 0 commitsWeek of 2025-09-13: 0 commitsWeek of 2025-09-20: 0 commitsWeek of 2025-09-27: 0 commitsWeek of 2025-10-04: 0 commitsWeek of 2025-10-11: 0 commitsWeek of 2025-10-18: 0 commitsWeek of 2025-10-25: 0 commitsWeek of 2025-11-01: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 597 commitsWeek of 2026-01-18: 177 commitsWeek of 2026-01-25: 91 commitsWeek of 2026-02-01: 97 commitsWeek of 2026-02-08: 23 commitsWeek of 2026-02-15: 39 commitsWeek of 2026-02-22: 33 commitsWeek of 2026-03-01: 1 commitsWeek of 2026-03-08: 18 commitsWeek of 2026-03-15: 7 commitsWeek of 2026-03-22: 2 commitsWeek of 2026-03-29: 1 commitsWeek of 2026-04-05: 7 commitsWeek of 2026-04-12: 0 commitsWeek of 2026-04-19: 20 commitsWeek of 2026-04-26: 0 commitsWeek of 2026-05-03: 0 commitsWeek of 2026-05-10: 20 commitsWeek of 2026-05-17: 0 commitsWeek of 2026-05-24: 0 commitsWeek of 2026-05-31: 0 commitsWeek of 2026-06-07: 0 commitsWeek of 2026-06-14: 0 commitsWeek of 2026-06-21: 0 commitsWeek of 2026-06-28: 0 commitsWeek of 2026-07-05: 0 commitsWeek of 2026-07-12: 0 commitsWeek of 2026-07-19: 0 commitsWeek of 2026-07-26: 0 commitsAug 2, 2025Jul 26, 2026
1.1K commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 0 commitsSun 1:00 — 1 commitsSun 2:00 — 2 commitsSun 3:00 — 0 commitsSun 4:00 — 1 commitsSun 5:00 — 0 commitsSun 6:00 — 0 commitsSun 7:00 — 0 commitsSun 8:00 — 0 commitsSun 9:00 — 5 commitsSun 10:00 — 6 commitsSun 11:00 — 11 commitsSun 12:00 — 17 commitsSun 13:00 — 15 commitsSun 14:00 — 16 commitsSun 15:00 — 10 commitsSun 16:00 — 9 commitsSun 17:00 — 0 commitsSun 18:00 — 0 commitsSun 19:00 — 3 commitsSun 20:00 — 32 commitsSun 21:00 — 6 commitsSun 22:00 — 35 commitsSun 23:00 — 14 commitsMon 0:00 — 0 commitsMon 1:00 — 6 commitsMon 2:00 — 0 commitsMon 3:00 — 0 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 0 commitsMon 7:00 — 0 commitsMon 8:00 — 5 commitsMon 9:00 — 33 commitsMon 10:00 — 6 commitsMon 11:00 — 1 commitsMon 12:00 — 7 commitsMon 13:00 — 22 commitsMon 14:00 — 50 commitsMon 15:00 — 19 commitsMon 16:00 — 18 commitsMon 17:00 — 27 commitsMon 18:00 — 12 commitsMon 19:00 — 12 commitsMon 20:00 — 13 commitsMon 21:00 — 12 commitsMon 22:00 — 9 commitsMon 23:00 — 22 commitsTue 0:00 — 11 commitsTue 1:00 — 0 commitsTue 2:00 — 0 commitsTue 3:00 — 0 commitsTue 4:00 — 0 commitsTue 5:00 — 0 commitsTue 6:00 — 0 commitsTue 7:00 — 0 commitsTue 8:00 — 6 commitsTue 9:00 — 6 commitsTue 10:00 — 5 commitsTue 11:00 — 7 commitsTue 12:00 — 14 commitsTue 13:00 — 4 commitsTue 14:00 — 10 commitsTue 15:00 — 10 commitsTue 16:00 — 4 commitsTue 17:00 — 9 commitsTue 18:00 — 6 commitsTue 19:00 — 3 commitsTue 20:00 — 18 commitsTue 21:00 — 15 commitsTue 22:00 — 6 commitsTue 23:00 — 6 commitsWed 0:00 — 5 commitsWed 1:00 — 5 commitsWed 2:00 — 0 commitsWed 3:00 — 0 commitsWed 4:00 — 0 commitsWed 5:00 — 1 commitsWed 6:00 — 0 commitsWed 7:00 — 3 commitsWed 8:00 — 10 commitsWed 9:00 — 4 commitsWed 10:00 — 12 commitsWed 11:00 — 0 commitsWed 12:00 — 4 commitsWed 13:00 — 5 commitsWed 14:00 — 5 commitsWed 15:00 — 3 commitsWed 16:00 — 11 commitsWed 17:00 — 24 commitsWed 18:00 — 10 commitsWed 19:00 — 5 commitsWed 20:00 — 6 commitsWed 21:00 — 9 commitsWed 22:00 — 8 commitsWed 23:00 — 13 commitsThu 0:00 — 5 commitsThu 1:00 — 4 commitsThu 2:00 — 0 commitsThu 3:00 — 1 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 0 commitsThu 8:00 — 3 commitsThu 9:00 — 6 commitsThu 10:00 — 10 commitsThu 11:00 — 19 commitsThu 12:00 — 6 commitsThu 13:00 — 17 commitsThu 14:00 — 6 commitsThu 15:00 — 17 commitsThu 16:00 — 7 commitsThu 17:00 — 7 commitsThu 18:00 — 0 commitsThu 19:00 — 0 commitsThu 20:00 — 7 commitsThu 21:00 — 10 commitsThu 22:00 — 11 commitsThu 23:00 — 13 commitsFri 0:00 — 10 commitsFri 1:00 — 0 commitsFri 2:00 — 1 commitsFri 3:00 — 0 commitsFri 4:00 — 0 commitsFri 5:00 — 1 commitsFri 6:00 — 0 commitsFri 7:00 — 0 commitsFri 8:00 — 2 commitsFri 9:00 — 5 commitsFri 10:00 — 7 commitsFri 11:00 — 13 commitsFri 12:00 — 6 commitsFri 13:00 — 5 commitsFri 14:00 — 24 commitsFri 15:00 — 13 commitsFri 16:00 — 21 commitsFri 17:00 — 15 commitsFri 18:00 — 13 commitsFri 19:00 — 11 commitsFri 20:00 — 7 commitsFri 21:00 — 7 commitsFri 22:00 — 5 commitsFri 23:00 — 6 commitsSat 0:00 — 5 commitsSat 1:00 — 1 commitsSat 2:00 — 0 commitsSat 3:00 — 0 commitsSat 4:00 — 1 commitsSat 5:00 — 0 commitsSat 6:00 — 1 commitsSat 7:00 — 1 commitsSat 8:00 — 8 commitsSat 9:00 — 8 commitsSat 10:00 — 6 commitsSat 11:00 — 0 commitsSat 12:00 — 5 commitsSat 13:00 — 3 commitsSat 14:00 — 5 commitsSat 15:00 — 1 commitsSat 16:00 — 8 commitsSat 17:00 — 8 commitsSat 18:00 — 2 commitsSat 19:00 — 8 commitsSat 20:00 — 0 commitsSat 21:00 — 3 commitsSat 22:00 — 0 commitsSat 23:00 — 0 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits855 (60%)
Community commits572 (40%)

1,427 commits in total over the last year.

DateListRankStars gained
Jan 13, 2026daily#25+123
  • freeCodeCamp/freeCodeCamp

    freeCodeCamp.org's open-source codebase and curriculum. Learn math, programming, and computer science for free.

    453.6K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    385.5K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • anomalyco/opencode

    The open source coding agent.

    194.7K stars · TypeScript