devrooms is a local-first cockpit for multi-agent software work.
It gives each project durable room-style workspaces: full repo clones with a terminal, git status/diff controls, and attachable agent/subprocess terminals.
devrooms currently ships as a daemon + web UI, plus an Electron shell:
- project registry
- room registry with a direct
mainroom for a local repo and clone rooms for parallel work - room creation via async full
git clone - remote PTY terminal streamed into the browser with xterm.js
- git branch/status/diff/stage/unstage/commit/fetch/pull/push controls
- subagent/process launcher with presets for Hermes, Codex, Claude Code, and OpenCode
- Electron desktop entrypoint that starts/attaches to the local daemon
- live development scripts for coding devrooms inside devrooms itself
- smoke coverage for local main rooms, project creation, room cloning, git operations, process launch, and websocket terminal attachment
See:
pnpm install
pnpm test
pnpm startOpen:
http://127.0.0.1:4317
Daemon metadata:
http://127.0.0.1:4317/api/meta
Dev mode:
pnpm devIn dev mode the daemon gets DEVROOMS_PROJECT_PATH=$PWD, so devrooms auto-registers the current git checkout as the default project and creates a main room that points directly at the repo instead of cloning it.
Live desktop dev mode, with Vite HMR for the UI and tsx watch for the daemon:
pnpm run dev:desktopThis opens Electron against the Vite dev server so you can use devrooms to work on devrooms itself.
Desktop shell:
pnpm run desktopBuild and install a local macOS .app bundle:
pnpm run install:macThe app is copied to:
/Applications/devrooms.app
For CI or local verification without touching /Applications:
pnpm run package:mac
pnpm run smoke:package
pnpm run smoke:installThe packaged app starts its own local daemon on 127.0.0.1:4317 unless DEVROOMS_SERVER_URL points at an already-running daemon.
Use:
- Open
devrooms.app. - Create a project with either:
- a local repo path, which creates a direct
mainroom; or - a git repo URL/path, which can be cloned into separate rooms.
- a local repo path, which creates a direct
- Use the default
mainroom for direct work on the source checkout, or clone extra rooms for isolated branches. Room creation is async; clone rooms showcreating, thenidleorerror. - Use the tabs:
terminalfor an interactive shell in the selected room.gitfor status, diffs, stage/unstage, commit, branch, fetch/pull/push.subagentsto launch and attach agent/process PTYs.
Uninstall:
rm -rf /Applications/devrooms.app ~/.devrooms ~/devrooms~/.devrooms stores the registry state. ~/devrooms stores the actual room clones.
Claude design critique pass, when Claude Code is installed/logged in:
pnpm run design:reviewReview output is written under docs/design-reviews/.
The daemon stores state at:
~/.devrooms/state.json
Rooms default to:
~/devrooms/<project>/<room>
Override with:
DEVROOMS_HOME=/path/to/state DEVROOMS_ROOMS_ROOT=/path/to/rooms pnpm startThe daemon binds to 127.0.0.1 only. Do not expose it on a network interface until auth exists; it can run arbitrary commands inside room clones through terminals and agent launchers.
