Installing Open Run
Open Run runs on your machine and drives coding-agent CLIs you already have installed and logged in. There is no account to create and no API key to paste. Sign in to the optional control plane is separate and not required.
Requirements
| Node | 22.6 or newer (node -v) |
| pnpm | 10 or newer (corepack enable pnpm) |
| git | on your PATH |
| OS | macOS, Linux, or Windows via WSL2 |
| At least one agent CLI | claude, codex, grok, gemini, or agy, logged in |
gh (GitHub CLI), logged in, is needed for Create pull request. Without
it the button stays disabled and says why on hover.
Windows: run Open Run inside WSL2, not native Windows.
PATHresolution, process spawning, and the file modes that protect stored secrets assume a POSIX environment. Native Windows is not tested.
Install
git clone https://github.com/dennisadriaans/openrun.git
cd openrun
pnpm install
pnpm devOpen http://localhost:3000.
pnpm install builds better-sqlite3 from source if there is no prebuilt
binary, which needs a C++ toolchain (xcode-select --install on macOS;
build-essential and python3 on Debian/Ubuntu). There is no npm lockfile —
use pnpm. pnpm-workspace.yaml allows the better-sqlite3 build script, which
pnpm otherwise blocks.
First run
- Add a project. From Automations, open Projects and point at a local git repository, or clone one. Automations need a workspace; without a project, New automation sends you here instead of a form that cannot save.
- Automations → New automation. Pick the project — Open Run auto-selects a ready workspace and an installed runtime. Write the prompt under Agent Instructions. Create stays disabled until there is one.
- Run now. Open the run to watch stdout stream in.
Start with something read-only ("summarise what changed this week") before you arm a schedule. See the security model.
Where things live
| Path | What | Safe to delete? |
|---|---|---|
data/openrun.db |
All state: projects, automations, runs, transcripts, settings | Yes — resets everything |
~/.openrun/ |
Managed clones, worktrees, and the access token | Yes, if no run is active |
~/.openrun/access-token |
Access token, if you generated one | Yes — regenerate with pnpm token:print |
Override the home directory with OPENRUN_HOME. An existing ~/.agentops or
data/agentops.db is still used if the Open Run path is not there yet. Both
locations are git-ignored and created on first use.
Configuration
Every setting has a working default; Open Run runs with no .env at all. Copy
.env.example to .env to change anything.
Open Run binds 127.0.0.1 and refuses to start on a public interface without
an access token, because a reachable Open Run is arbitrary command execution
as you. Details: the bind address.
Production
pnpm build
pnpm startpnpm start resolves the bind address, refuses an unsafe one, then serves the
build. Set PORT to change the port.
Scripts
pnpm dev # dev server on :3000 (loopback)
pnpm build # production build into dist/
pnpm start # serve the build, with the bind guard
pnpm token:print # print/create the access token + browser sign-in URL
pnpm typecheck # tsc --noEmit
pnpm test # unit tests (node:test)Troubleshooting
"Runtime not on PATH" — Open Run looks up the binary in your login shell's
PATH, not the one the dev server inherited. If which claude works in your
terminal but Open Run disagrees, restart it from that same shell. Check the
resolved name under Runtimes.
Nothing happens when a schedule fires — the automation must be enabled, have a valid cron expression (5- or 6-field), a ready workspace, an installed runtime, and a non-empty prompt. Hover the disabled control for the reason.
Native resume picker is empty — listing is keyed off the workspace
folder, not the git remote. Point the project at the same cwd you ran the
CLI in. Worktrees under ~/.openrun will not see chats started in your main
checkout. Claude, Codex, Grok, and Antigravity (agy) chats are listed;
Gemini CLI chats are not.
A "once at 03:01" automation did not fire — Open Run has to be running (laptop awake) at that time. This is local; the hosted Worker does not run your CLIs.
better-sqlite3 fails to build — install a C++ toolchain (above), then
rm -rf node_modules && pnpm install. Confirm node -v is 22.6+.
Runs stuck "running" after a crash — Open Run reaps orphans on boot. Restart it.
A 401 on every request — an access token is configured (OPENRUN_ACCESS_TOKEN
or ~/.openrun/access-token) and this browser has not been signed in. Run
pnpm token:print and open the URL it prints
(http://127.0.0.1:3000/?openrun_token=…) once. A loopback-only install does
not need a token: delete the file or unset the env var.
Still stuck? Open a Discussion.