{
  "markdown": "# Bridge Commander\n\n<p align=\"center\">\n  <a href=\"https://youtu.be/lewm5_2LiNs\">\n    <img src=\"https://github.com/user-attachments/assets/048b00c1-bae8-4a49-aa7c-4ae8f0d8656c\" width=\"420\" alt=\"Watch the video\">\n  </a>\n</p>\n\nAs you work with AI, your **attention gets fragmented** — driving multiple planning tasks while\noverseeing multiple implementation tasks. Chat quickly becomes the wrong UX for piloting a fleet\nof agents.\n\nThis skill lets you use Claude Code / Codex as multiple chiefs of staff (**lieutenants**). You\nget a web UI where you work together, as work items get done by independent agent sessions on a\nkanban board.\n\n![the board](docs/img/board.png)\n\n## Install\n\nOne skill:\n\n```sh\nnpx skills add tonylampada/bridge-commander -g -y\n```\n\nThat's it. The rest happens in the terminal you already have.\n\n## Start\n\n- Make an empty folder (e.g. `myfleet`) and start `claude` in it\n- (Recommended) Set permissions mode to auto\n- `/bridge-commander`\n- Open the board URL it prints (default `http://localhost:4780/`)\n\n**Bridget** is already there with a message waiting. She's your first lieutenant, and she does the\nrest of the setup with you.\n\nYou need `tmux` and `git` on the machine (Bridget will offer to install if missing). \nYou never have to use tmux yourself, but you can if you want.\n\n## Configuration\n\nPer-workspace config lives in `.bridge-commander/config.json`:\n\n| Key | Default | Meaning |\n|---|---|---|\n| `port` | `4780` | server port (also `--port N` on `init`/`open`) |\n| `host` | `127.0.0.1` | bind address — see network exposure below |\n| `harness` | `claude` | default agent harness (`claude` \\| `codex`) |\n| `voices` | — | UI text-to-speech voice filter |\n| `tts` | — | speak agent messages through an external TTS engine: `{\"url\": \"http://127.0.0.1:8883\", \"lang\": \"pt\", \"voice\": null, \"params\": {}}` (voxbench API). Absent = the board stays silent. The **server** reaches the engine: the browser talks to `/api/tts/*` on the board's own origin and the url only has to be reachable from the machine running the server (no CORS, no tailnet on the phone) |\n\nEnv knobs (set on the server process):\n\n| Variable | Default | Meaning |\n|---|---|---|\n| `BC_SUPERVISE_INTERVAL_MS` | `30000` | supervision tick (lieutenant respawn, dead-worker detection); `0` disables |\n| `BC_PRWATCH_INTERVAL_MS` | `120000` | PR watch tick; `0` disables |\n| `BC_UPLOAD_MAX_BYTES` | `10485760` | per-file chat upload cap |\n| `BC_WORKER_TTL_SECS` | `600` | card status lease TTL — `working`/`needs-you` decays to `idle` past it |\n| `BC_WORKTREE_TOOL` | auto | `treehouse` \\| `git` — worker worktree provisioning |\n| `BC_HARNESS_STATE` | `~/.bridge-commander/harness` | harness state dir (prompts, session ids, turn-end logs) |\n| `BC_GH_CMD` | `gh` | gh binary used by the PR watch and by the packaged `gh-watch` hook |\n| `BC_SCHEDULE_INTERVAL_MS` | `15000` | schedule tick — how often the clock looks for due windows; `0` disables |\n| `BC_TURNEND_URL` | — | default callback URL baked into installed turn-end hooks |\n| `BC_SEND_RETRIES` / `BC_SEND_SLEEP_MS` | `3` / `400` | verified-submit tuning for `harness.send` |\n| `BC_HOOK_TIMEOUT_MS` | `120000` | per-script timeout for workspace hooks, lifecycle and named alike |\n| `BC_TEARDOWN_TIMEOUT_MS` | `300000` / `60000` | timeout for a playbook's `teardown` command — 5 min at the handoff and archive (un-awaited), 60s at a rework restart (awaited inside `card start`); set, it overrides both |\n| `BC_TTS_IDLE_MS` | `20000` | how long the TTS passthrough waits for the next byte from the engine before hanging up — a gap between bytes, not a cap on the request |\n| `BC_SYSLOAD_MS` | `2000` | monitoring panel (⚙️ → machine load) sample interval; the sampler runs only while the panel is open |\n\n### Network exposure\n\nThe board has **no application-level auth** — whoever reaches the bind address fully controls\nthe board, including starting workers (running code):\n\n- **Default (recommended): loopback only** (`127.0.0.1`).\n- Private mesh (e.g. Tailscale): set `host` to that interface's address; a loopback listener is\n  kept alongside. The mesh is your only auth boundary.\n- **Never bind `0.0.0.0`.**\n\nHow it works inside: [ARCHITECTURE.md](ARCHITECTURE.md). The conceptual API\n([docs/api/overview.md](docs/api/overview.md)) is the spec the implementation follows.\n",
  "bytes": 4320,
  "sha": "0f076d860591595ec98a4b6a5bcfbf333f5d64bebe55f1fd69597f6b6eae83fd",
  "repo_slug": "tonylampada/bridge-commander",
  "fonte": "repo",
  "truncated": false,
  "api": "https://api.agentalog.com/api/listings/skl_tonylampada_bridge_commander_bridge_comm_4e3202e8/readme"
}