AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證透過手機控制一組即時運行的 Claude Code 窗格——附加至現有的 iTerm2 工作階段,檢視狀態、回覆提示,並透過以通行碼保護的 PWA 於 Tailscale 上操控窗格。
AI 翻譯
Phone control for a fleet of live Claude Code panes — attach to existing iTerm2 sessions, view status, answer prompts, drive panes from a passkey-gated PWA over Tailscale.
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Phone control for a fleet of live agent panes.
CC Dispatch reads and drives your existing iTerm2 agent sessions — Claude Code,
Codex and Grok — from your phone, each with its own critter on the yard so you can
tell them apart. See every pane's status at a glance, read what each one is doing,
answer permission prompts, send follow-ups, and get a push notification the
moment a session finishes or needs input — all from a passkey-protected PWA
served over your Tailnet.檢視完整 README ↗Phone control for a fleet of live agent panes.
CC Dispatch reads and drives your existing iTerm2 agent sessions — Claude Code, Codex and Grok — from your phone, each with its own critter on the yard so you can tell them apart. See every pane's status at a glance, read what each one is doing, answer permission prompts, send follow-ups, and get a push notification the moment a session finishes or needs input — all from a passkey-protected PWA served over your Tailnet.
Nothing is restarted. The server attaches to sessions that are already running (via the iTerm2 Python API) and only ever writes in response to an authenticated request from the UI. Kill the server and your fleet is exactly as it was.
Website · Docs · Contributing · Security
iTerm2 panes ──► iTerm2 Python API ──► server.py ──► PWA (static/index.html)
(Claude/Codex/Grok) │ ▲
│ │ passkey / WebAuthn
~/.claude/statusline.sh ─► /tmp/cc-status│ │ web-push
~/.claude/cc-active.sh ─► │ │
(fleet status .json) ───────────────┘ your phone, over Tailscale
server.py — aiohttp server. Polls iTerm2 for pane contents, reads each
session's transcript (Claude's .jsonl, Codex's rollout, Grok's chat log),
exposes the fleet over HTTP/WebSocket, and sends keystrokes back to panes that
are confirmed to be running one of those agents. Permission mode, effort and
model are Claude-only controls and are hidden for the others.auth.py — WebAuthn/passkey login. The bootstrap token in the QR is
single-use to register the first passkey; after that, only passkeys get in.vault.py + dispatch-auth — the credential broker. An agent in a pane
runs dispatch-auth request <service>; you approve it on your phone; the
secret is released just-in-time and never touches disk in plaintext.static/ — the installable PWA (service worker + web-push).127.0.0.1) by default. Reachability is Tailscale's
job: tailscale serve terminates TLS and proxies to the local port, so there
is no listener on any network interface for a stranger to find..integrations.vault); the
Fernet key is stored in the macOS login keychain via the security CLI.All per-install secrets and state are git-ignored — see .gitignore. This
repo contains code only. Full writeup: docs/SECURITY-MODEL.md.
brew install whisper-cpp) + a local model — see below.CC_FLEET_DIR
(default /tmp/cc-status). Ready-to-use hooks that do this ship in
examples/ — see Wire up the fleet-status hooks below. Panes
without a status file are still driveable when iTerm2 reports Claude as the
foreground job; the hooks just make the fleet view complete.git clone https://github.com/charlie-818/claude-dispatch.git
cd claude-dispatch
# make
make venv
# raw
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
make venv also installs requirements-dev.txt (pytest, ruff) so make check
works right away.
So every Claude Code pane shows up in the fleet, install the two helper scripts and point Claude Code at them:
# make
make hooks
# raw
cp examples/statusline.sh examples/cc-state.sh ~/.claude/
chmod +x ~/.claude/statusline.sh ~/.claude/cc-state.sh
Then merge the keys from examples/settings.snippet.json
into ~/.claude/settings.json. They:
statusLine to statusline.sh, which writes each pane's status JSON
(tagged with its iTerm2 session id) into CC_FLEET_DIR, andUserPromptSubmit / Stop / Notification hooks that call
cc-state.sh to record whether the pane is working or idle.New panes appear in the app within a couple of seconds of their first repaint.
# In one terminal: expose the port over your Tailnet with TLS
tailscale serve --bg 8788
# In another: start the server (attaches to your live iTerm2 fleet)
# make
make run
# raw
.venv/bin/python server.py
On startup the server prints a QR code and a URL with the bootstrap token baked in. Scan it with your phone, register a passkey, and add the PWA to your home screen. That's it — subsequent visits are passkey-only.
The /api/whisper endpoint transcribes recorded audio locally — nothing leaves
the machine. Install the CLI and fetch a model once:
brew install whisper-cpp
mkdir -p models
curl -L -o models/ggml-base.en.bin \
https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en.bin
Override the binary/model with WHISPER_BIN / WHISPER_MODEL if they live
elsewhere.
| Env var | Default | Purpose |
|---|---|---|
DISPATCH_PORT | 8788 | Server port. |
DISPATCH_BIND | 127.0.0.1 | Bind address. Leave on loopback. |
CC_FLEET_DIR | /tmp/cc-status | Where pane status .json files are read. |
VAPID_SUB | mailto:[email protected] | Contact mailto: for web-push. |
WHISPER_BIN | whisper-cli | whisper.cpp binary. |
WHISPER_MODEL | models/ggml-base.en.bin | Local transcription model. |
FFMPEG_BIN | ffmpeg | ffmpeg binary, used for audio conversion. |
DISPATCH_GITHUB_CLIENT_ID | (empty) | GitHub OAuth device-flow client id for the integrations page; empty disables it. |
Details: docs/DEPLOYMENT.md. In short:
deploy/install-launchd.sh ensure installs the recommended reboot watchdog —
the server should survive a reboot without you re-running anything by hand.server / deploy / all modes install the other launchd
templates in deploy/launchd/ (run-on-login, auto-deploy-on-push).tailscale serve in front of the loopback port — the
watchdog doesn't change the security model above.make venv # venv + requirements.txt + requirements-dev.txt
make check # ruff + pytest
The tests/ suite is 153 unit tests against the pure parsers and write gates
(pane detection, auth helpers, vault helpers, sweep auth) — no live iTerm2
needed, so it runs in CI on ubuntu and macOS. What it can't cover: anything
that requires a real iTerm2 session or a live agent pane — exercise those by
hand against a real fleet, as described in CONTRIBUTING.md.
Contributions welcome — see CONTRIBUTING.md.
Please don't open a public issue for a vulnerability — see SECURITY.md for how to report one privately.