尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
A control room for your Claude Code agents. Every session on one screen, approvals in one click. macOS and Windows.
翻译准备中
正在加载完整 README。
查看完整 README ↗A control room for your Claude Code agents.
You run Claude Code in five terminals. One is waiting for a yes, one hit a hook error twenty minutes ago, three are fine, and the one that needs you is the one you are not looking at. airoom puts all of them on one screen: every project is a room, every session is a desk, and the monitor on the desk says who is working, who is waiting on you and who is stuck. Click a desk to read what that agent is doing and answer it without leaving the app.
Everything stays on your machine. airoom reads the transcripts Claude Code
already writes to ~/.claude/projects, drives agents through the Claude Agent
SDK with your own login, and binds to 127.0.0.1 only. It sends no telemetry.
Apart from Claude's own traffic to Anthropic, its only outbound request is a
version check against airoom.dev/release.json.
| macOS on Apple Silicon | airoom.dev/download, signed and notarised |
| Windows 11 x64, beta | airoom.dev/download?os=windows, not yet code-signed, so SmartScreen warns once per build |
| From source | below |
Every installer is also on the Releases page.
airoom needs Claude Code installed and logged
in. It drives the claude on your machine, on your account and your limits.
~/.airoom/.Node 20 or newer (CI uses 22), and Claude Code logged in.
npm run install:all # server, web and desktop dependencies
npm run dev # server on :8787 and the Vite UI on :5173
npm run app # the desktop shell against a fresh web build
npm run dist:unsigned packages a macOS app for your own machine. The signed
release path is in PACKAGING.md, the Windows build in
WINDOWS.md and the route to a signed Windows installer in
WINDOWS-SIGNING.md.
┌──────────────┐ DataSource ┌──────────────┐ WS / JSON ┌──────────────┐
│ ~/.claude/ │ (interface) │ server │ protocol │ web │
│ projects/ │◀──LocalClaude────│ parse→model │◀────────────▶│ pixel office │
└──────────────┘ DataSource │ broadcast │ │ (canvas) │
└──────────────┘ └──────────────┘
The server tails each session's JSONL transcript and flattens it into the model
in shared/types.ts, which is also the WebSocket protocol the web client
speaks. Two seams keep the local-only design swappable: DataSource (read:
where sessions come from) and AgentController (write: how an agent is
driven). Both have local implementations today; a hub for several machines
would be remote implementations of the same two interfaces, with the protocol
and the client unchanged.
The engine is the Claude Agent SDK, driven in streaming-input mode from the
server (server/src/agent/SdkClaudeController.ts). Every send resumes the
clicked desk's session in its room's working directory, which is what gives
airoom interrupts, per-tool approvals and message-level streaming without
process cold starts. The SDK still writes the transcript to
~/.claude/projects, so the file watcher animates the desk exactly as it does
for a session started in a terminal. AIROOM_ENGINE=cli falls back to spawning
the CLI per message, with no interrupts and no interactive approvals.
Things worth knowing:
--resume <id> keeps the session id and appends to the same transcript, so a
desk's identity is stable across airoom messages./compact can rewrite a session file in place; the parser keys its cache on
size and mtime and never assumes append-only.<project>/<sessionId>/subagents/ and are not
desks.claude elsewhere; two processes on one session conflict.以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗