Installation
Prerequisites
Section titled “Prerequisites”-
Node.js 22+: the runtime OpenLoop runs on (Bun 1.x also works).
-
Bun (optional): only the interactive TUI needs it. When you launch the TUI on a Node-only machine, the CLI re-executes itself under Bun; without Bun installed it prints a clear message and suggests
openloop watch, a no-Bun live dashboard. -
git: OpenLoop is git-native (branches, optional worktrees, PR creation).
-
A coding-agent CLI on
PATH: Pi is the default provider. Alternatives (Claude Code, Aider, Codex, OpenCode) are optional; check what OpenLoop can find:Terminal window openloop config list-providers -
git worktreesupport, only if you enableruntime.useWorktree(opt-in isolation).runtime.worktreeSetupCommandcan provision worktree-local build state (e.g.npm install).
API keys are not managed by OpenLoop. Each agent tool keeps its own credentials in its own config; OpenLoop only spawns the binary.
Install from npm (recommended)
Section titled “Install from npm (recommended)”npm install -g openloopVerify:
openloop --versionopenloop doctor # checks prerequisites, providers, and daemon healthInstall from source
Section titled “Install from source”To run the latest unreleased code:
git clone https://github.com/jaltez/openloop.gitcd openloopnpm installnpm run buildnpm link # puts `openloop` on your PATHThe build targets Node, so the published CLI runs on plain Node 22+; Bun works too.
Development setup
Section titled “Development setup”If you want to hack on OpenLoop itself:
npm run check # type-checknpm test # vitest unit + integration suitesnpm run build # build dist/What gets installed where
Section titled “What gets installed where”OpenLoop keeps global state under ~/.openloop/:
~/.openloop/├── config.json # global configuration├── projects.json # registry of linked projects└── run/ # daemon runtime state ├── daemon.pid ├── daemon-state.json ├── daemon.log └── events.jsonlSet the OPENLOOP_HOME environment variable to relocate all of it (see environment variables).
Uninstall
Section titled “Uninstall”openloop service stopnpm rm -g openloop # or: in the cloned repo, `npm unlink`rm -rf ~/.openloop # optional: global statePer-repository .openloop/ directories are left untouched; remove them manually if you want.