Skip to content
paulocorcinoPublic

About

Works your GitHub issue backlog overnight with Claude Code: plans, codes, commits, and closes issues, then hands you a branch to review in the morning. Never pushes, never opens a PR. Runs on your Claude subscription quota.

Topics

Resources

Security policy

Stars

6 stars

Watchers

0 watching

Forks

Latest commit

Β 

History

3,692 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Ralphy πŸŒ™

Built with Rust Platform: Windows | Linux | macOS License: GPL v3

Your coding agents, your repos, your machine β€” in a browser tab you can open from anywhere.

The Ralphy workbench

Ralphy is one small binary that turns the computer where your code lives into a workspace you can reach from any other screen. It runs a resident daemon on your box and serves a workbench: projects, a file explorer with a real editor, your git changes, your issue board, live runs, spend β€” and real agent terminals (Claude, Codex, OpenCode, Copilot, Cursor, Gemini, Kimi) side by side in one tab.

The terminals belong to the daemon, not to the browser. Close the laptop, pick up the tablet, open the same URL: the sessions are still running, with their scrollback, and your window layout comes back with them.

And when you're done for the day, the same binary can work your backlog while you sleep.

     🏠 your machine                      🌍 any screen you happen to have
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  ralphy daemon            β”‚          β”‚ desktop  β”‚ β”‚ notebook β”‚ β”‚  tablet  β”‚
β”‚  Β· your repos             β”‚  ◀────▢  β”‚          β”‚ β”‚          β”‚ β”‚  / phone β”‚
β”‚  Β· your agent sessions    β”‚          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚  Β· your gh login          β”‚             one workbench, same sessions,
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                 same layout, no upload

Three things worth knowing up front:

  • πŸ”’ No cloud of ours. The daemon runs on your box, binds to loopback by default, and reads the same repos and the same gh login you already use. Your code goes only to the agent you chose, and issue data only to GitHub.
  • πŸ’³ No API key, no per-token bill. Ralphy drives the agent CLIs you're already signed into, on the subscription you already pay for.
  • πŸ’» Windows, Linux, and macOS, one binary, no runtime to install.

πŸš€ Get it running

πŸ“¦ 1 β€” Get the ralphy binary

One line installs it for your user. On Linux and macOS:

curl -fsSL https://raw.githubusercontent.com/paulocorcino/ralphy/main/assets/install/install.sh | sh

On Windows, in PowerShell:

irm https://raw.githubusercontent.com/paulocorcino/ralphy/main/assets/install/install.ps1 | iex

The script downloads the newest release for your computer, checks its SHA-256, puts ralphy on your PATH, and ends with ralphy doctor. It needs no root and no administrator, and asks before it goes on as either. To also start the daemon at sign-in, end the Linux and macOS line with | RALPHY_DAEMON=1 sh, or on Windows run $env:RALPHY_DAEMON = '1' first. To read the script before it runs, download it, read it, then run the file. Run it again to repair an install.

Prefer to do it by hand? Grab the archive for your platform from the Releases page β€” Windows, Linux (x64 and ARM64), or macOS (Intel & Apple Silicon) β€” unzip it anywhere, then let it put itself on your PATH:

./ralphy install

It links ralphy into ~/.cargo/bin when you have one, otherwise ~/.local/bin. When that folder is not on your PATH, it adds it: to your shell start-up files on Linux and macOS, or to your user Path on Windows. Then open a new terminal. --no-modify-path leaves your PATH alone.

Already have it? ralphy update takes the newest release: it checks the published checksum, replaces the binary in place, and restarts the daemon if one is running. ralphy update --check just tells you what is new.

(Prefer to build from source? See docs/BUILDING.md.)

βœ… 2 β€” The basics you'll need

  • πŸ€– At least one coding-agent CLI, signed in. That's the brain behind the terminals and the runs. Claude Code is the default; Codex, OpenCode, Copilot, Cursor, Gemini and Kimi work too. β†’ which agents, and how to pick one
  • πŸ™ The gh CLI, logged in β€” needed for the issue board and the overnight run. Check with gh auth status. (Not using GitHub? The consoles, explorer, notes and changes work without it.)

No API keys anywhere. Git and Python must be installed too. ralphy doctor checks all of this and prints the version of each tool it finds.

πŸ–₯️ 3 β€” Start the workbench

ralphy daemon setup     # baptize it: pick a name and an avatar, mint an access token
ralphy daemon add .     # register the repo you're standing in (repeat per project)
ralphy daemon           # run it β€” then open http://127.0.0.1:7257

Open the page, pick your project in the sidebar, and open an agent from the Consoles menu. That's it: an agent is working on your machine, and you are watching it from a browser.

Want it up whenever you log in? ralphy daemon install registers it with your OS (Task Scheduler on Windows, a systemd user unit on Linux/WSL, a launchd agent on macOS), and ralphy daemon uninstall takes it back out. β†’ docs/daemon.md

🧹 Uninstall

ralphy uninstall           # stop the daemon, remove ralphy, and take it off your PATH
ralphy uninstall --purge   # also delete ~/.ralphy (settings, token, peers, logs), after it asks

It keeps ~/.ralphy unless you add --purge, and it never changes a project's .ralphy/ folder or its GitHub labels.


🧰 What you can do in the workbench

πŸ–₯️ Work with many agents at once

Three consoles as columns: Claude and Codex on the same project, and a second Claude in its own worktree

Claude and Codex side by side on one project, and a second Claude in its own worktree.

  • Consoles β€” actual agent CLIs running as terminals on a large stage you can pan. Group them into fences, or pop a fence out into its own window for a second monitor. Maximize one console and put others beside it as columns. Each console has a short name, such as myrepo #1, so you can tell them apart.
  • Any command, not only agents β€” Run… opens a console with a command you type, such as htop or lazygit.
  • One copy of the project per agent β€” create a git worktree from the branch picker or from a console's title bar. The agent works in its own folder, on its own branch, and never touches the files of another agent. Files, Changes and the diff follow the copy you pick. A new copy can take your .env and share node_modules. β†’ worktrees
  • See who needs you β€” a dot on each console and project shows whether the agent is working, waiting for your answer, or done. (Claude consoles today.)

πŸ“ Read and ship the work

  • πŸ—‚οΈ Projects β€” every repo you registered, in one list: branch, uncommitted changes, and whether it has a GitHub remote.
  • πŸ“ Explorer β€” the real file tree, with a real editor (Monaco): open, read, edit, save. Search file names or file contents. Open two files side by side. Images render inline, and files in any text encoding open and save correctly.
  • 🌿 Changes β€” the working tree of the project or of a worktree: read the diff, stage, commit, fast-forward pull, and push when you say so.

πŸ“ Keep your notes next to the agents

  • Notes β€” markdown cards on the same stage as your consoles: task lists, tables, and diagrams (Mermaid). Each note is a file saved in your project. A note can stay on top of a maximized console while you work.

A fence with a Kimi console and a PowerShell console from two projects, and a note beside them

A fence groups consoles by task, even from different projects. The note is a file in the project, shown in its footer.

πŸ“Š Follow the work and the cost

The Board with an issue labeled ready-for-agent open beside the backlog

The Board: read an issue without leaving the workbench. The ready-for-agent label is the one that puts an issue in the queue of the overnight run.

  • 🧩 Board β€” your AFK/HITL backlog as a kanban. Open an issue, read it, and send it to a run without leaving the page.
  • ▢️ Runs β€” the loop, live: which issue is being worked, which phase it's in (planning, executing, verifying), and what it cost.
  • πŸ“Š Spend β€” the token ledger and a dollar estimate, per run, per model, per project, and per worktree.
  • πŸ›°οΈ Fleet β€” two daemons, one workbench: a WSL box (or a second machine) shows up as a peer, with its repos and its consoles.

Two consoles of the same repo on two screens is the point: you drive one agent by hand while Ralphy's run works the queue in the other.


πŸ“± From any screen

Open the workbench on another device and you get the same sessions and the same layout. The consoles are made for touch too:

  • On a phone, a maximized console uses the whole screen.
  • A key bar gives you the keys a phone keyboard does not have: Esc, Tab, Shift, Enter, Ctrl and the arrows.
  • Paste text or a screenshot straight into an agent.
  • Lock a console or a fence, so a finger cannot move it by mistake.

OpenCode in a console on a phone, with the key bar at the bottom Β  Claude Code on a phone, working in a worktree, with the key bar at the bottom

OpenCode and Claude Code on a phone, through a tunnel, with the key bar at the bottom.

How to reach it

The workbench is a web app on your own machine, so anything that can reach that machine can open it. Ralphy has no cloud service in the middle: you choose how your machine is reached. Two ways, in order of least surprise:

  • On your own network β€” bind it to a LAN address: ralphy daemon --bind 0.0.0.0. A non-loopback bind requires the access token minted by ralphy daemon setup, or the daemon refuses to start.
  • From anywhere β€” put a tunnel in front of it (dev tunnels, ngrok, Cloudflare Tunnel). Tunnels that preserve the original hostname need you to declare it: ralphy daemon --allowed-host my-tunnel.example.dev. Declare the exact name, never a wildcard. This stops other websites from reaching your daemon through your browser (DNS rebinding).

Once it's reachable beyond loopback, turn on require-login: a password plus a code from an authenticator app (TOTP), enrolled from the Security panel with a QR you scan once. It's opt-in on purpose β€” Ralphy never decides for you how reachable your machine should be. β†’ docs/daemon.md


πŸŒ™ The overnight run

The other half of Ralphy: point it at your GitHub issues and let it work them while you're asleep. For each issue it plans the work, lets an agent write the code, commits, re-runs the tests itself, and closes the issue if they pass. In the morning you skim the branch and merge what you like.

That's Geoffrey Huntley's "Ralph" loop β€” plan β†’ execute β†’ commit β†’ verify β†’ repeat β€” as a batteries-included implementation over your real issues, with guardrails so it's safe to leave running.

🏷️ Two labels decide everything

  • 🟒 AFK (or ready-for-agent) β€” "away from keyboard, agent go." It joins the queue.
  • πŸ”΄ HITL (or ready-for-human) β€” "human in the loop." Ralphy never touches it.

Unlabeled issues are ignored. A few more labels fine-tune things (triage, staged plans, "stop before this one"), but those two are the daily driver. The full label rules β†’

▢️ Build trust one step at a time

ralphy init                              # guided setup: environment check, labels, repo prep

ralphy run --only-issue 13 --dry-run     # 1️⃣  plan one issue β€” no code, no commits
ralphy run --only-issue 13               # 2️⃣  actually do that one
ralphy run --deadline-hours 8            # 3️⃣  the whole queue, overnight

Once you trust it, this is the everyday shape of a run:

ralphy run --agent <agent> --branch-mode <current|new>
  • πŸ€– --agent β€” who writes the code. Same issues, different brain. You can also plan with one agent and write the code with another. β†’ see all agents
  • 🌿 --branch-mode β€” where the commits land. new (default) cuts a fresh afk/run-<stamp> branch so the branch you're on stays untouched; current commits right onto the branch you're already on. Either way Ralphy refuses to start on a dirty repo.

πŸ“– Every other flag β€” deadlines, planning models, stopping before an issue β€” lives in the run options reference, and ralphy run --help prints the same list. ⏰ Want it on a timer? β†’ docs/scheduling.md

πŸ’‘ Turning an idea into a backlog

Ralphy works issues, so first you need some. Inside your agent, go from fuzzy to ready in three moves: grill-with-docs (co-author a short doc so the agent really understands what you want) β†’ to-prd (shape it into a spec) β†’ to-issues (split it into small, independent, labeled issues). ralphy init can install those skills for you.

πŸŒ… The morning after

Open the Changes panel in the workbench and read the diff. Or use the shell:

git log --oneline origin/main..afk/run-<stamp>     # see what landed
git diff origin/main..afk/run-<stamp>

# πŸ‘ Happy? Merge it.        # πŸ‘Ž Not happy? Delete the branch β€”
git checkout main            #     your main was never touched.
git merge afk/run-<stamp>    git branch -D afk/run-<stamp>

πŸ›‘οΈ Why it's safe to leave running

  • 🧹 Won't start on a dirty repo β€” your uncommitted work is never at risk.
  • 🚫 The run never pushes and never opens a PR β€” it commits locally. Pushing is a deliberate act you take, from the workbench or the shell.
  • ⏱️ Time budgets β€” a hung issue can't run forever.
  • πŸ›‘ Stops at the first failure β€” one stuck issue ends the run instead of burning the whole night, and hands you the branch as-is.
  • βœ… Runner-enforced tests β€” an issue closes only when Ralphy itself watched the tests pass. β†’ docs/verify-gate.md
  • 🧯 Command guardrails β€” Claude Code sessions block git push, pull request writes, reset --hard and other destructive commands mid-run. Codex, OpenCode and Copilot sessions block pushes and pull request writes. Kimi, Cursor and Gemini rely on their own vendor's controls. β†’ SECURITY.md
  • πŸ—£οΈ Only your team talks to the agent β€” issue comments from people who are not collaborators on the repo never reach it.

πŸ”’ What stays on your machine

  • Your code, your sessions and your logins. Ralphy has no account, no cloud service of its own, and no telemetry.
  • What does leave, and where it goes. Your prompts and the code the agent reads go to that agent's vendor, under your own login. Issue reads, comments and labels go to GitHub through gh. ralphy usage downloads model prices from models.dev. Telegram, the event sink and remote images in the workbench send data only after you turn them on.
  • The files git and Ralphy own. The workbench cannot write into .git or .ralphy.
  • Checking for updates is anonymous. The daemon asks GitHub for new releases every six hours, with nothing that identifies you. You can turn it off. β†’ release watch
  • You can check what you download. ralphy update refuses a file whose checksum does not match. To confirm a release archive was built by this repository: gh attestation verify <archive> --repo paulocorcino/ralphy.

πŸ“² Keep an eye on it from your phone (optional)

Ralphy can post a live status card to a Telegram chat and keep it updated the whole way through a run β€” planning, coding, and the final summary. It also tells you when an agent in a console is waiting for your answer. It's read-only; the bot just tells you how things are going.

ralphy telegram setup    # store your bot token, then send /start to link your chat
ralphy telegram test     # send a ping to confirm it works

More on the Telegram monitor β†’


πŸ“š More you can do

Documentation index: user guides, development rules, research and validation evidence.

Feature What it's for Start here
πŸ–₯️ The daemon & fleet autostart, worktrees, WSL peers, reaching it remotely docs/daemon.md
πŸ€– Choose your agent seven vendors β€” even plan with one and code with another docs/agents.md
πŸ” The verify gate why "green" means the tests actually passed, not the agent said so docs/verify-gate.md
πŸ“Š Cost reporting tokens per run, with a $ estimate docs/usage-and-cost.md
βš™οΈ Persistent settings stop retyping the same flags every run docs/configuration.md
⏰ Scheduled runs drain the queue nightly on a timer docs/scheduling.md
πŸ“‘ Event streaming POST every run event to a dashboard or webhook docs/events.md
🧠 Knowledge cache Ralphy remembers hard-won setup facts across runs ralphy consolidate --help
πŸ—οΈ Architecture ports & adapters β€” the decisions, and why docs/adr/

πŸ™ Credits

πŸ“„ License

GPLv3 β€” see LICENSE. Copyright (C) 2026 Paulo Corcino.

About

Works your GitHub issue backlog overnight with Claude Code: plans, codes, commits, and closes issues, then hands you a branch to review in the morning. Never pushes, never opens a PR. Runs on your Claude subscription quota.

Topics

Resources

Security policy

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages