{"slug": "wolfpack-private-control-room-for-coding-agents", "title": "Wolfpack – Private control room for coding agents", "summary": "Wolfpack, a self-hosted browser terminal dashboard for AI coding agents including Claude Code, Codex, and Gemini, has been released. It runs on macOS/Linux machines and provides a PWA command center for persistent agent terminal sessions across a Tailscale tailnet, with sessions managed by a Rust PTY broker to survive server restarts. The tool is agent-agnostic, supports multi-machine views, and is available via a curl installer or package runners like bunx and npx.", "body_md": "Wolfpack is a self-hosted browser terminal dashboard for AI coding agents: Claude Code, Codex, Gemini, shell commands, and custom agent wrappers. It runs on your own macOS/Linux machine — laptop, workstation, or cloud VM — and gives you a PWA command center for long-running agent terminal sessions across your Tailscale tailnet.\n\nSessions live in a Rust PTY broker, not the web server, so server restarts and redeploys do not kill your agents.\nThere is no Wolfpack-hosted relay or account; remote access is normally handled by [Tailscale](https://tailscale.com/).\n\n**Try the workflow:** install Wolfpack on two machines, connect them to the same Tailscale tailnet, then open the phone QR from either host to control persistent agent sessions remotely. Start with the [Quickstart](#quickstart) and [First five minutes](#first-five-minutes).\n\n```\ncurl -fsSL https://raw.githubusercontent.com/almogdepaz/wolfpack/main/install.sh | bash\nwolfpack\n```\n\nThe installer downloads the right pre-built binaries for your platform, runs setup, and can install Wolfpack as a login service. Wolfpack's phone and remote-control workflow uses Tailscale; setup can install it, waits for sign-in, then verifies its private HTTPS route before it prints a phone QR code. The bundled `wolfpack-broker`\n\nincludes its Ghostty VT engine; release installs do not need Zig, Ghostty, or extra system libraries.\nSupported: macOS arm64/x64 and Linux x64/arm64.\n\nWant a package runner instead? Pin `@latest`\n\nso Bun/npm does not reuse an older cached release:\n\n```\nbunx wolfpack-bridge@latest\n# or\nnpx --yes wolfpack-bridge@latest\n```\n\nBoth package-runner commands resolve the same matching prebuilt `wolfpack`\n\nand `wolfpack-broker`\n\npair as the curl installer, then run the same setup wizard. Unlike curl, they do not add `wolfpack`\n\nto your shell `PATH`\n\n; use curl when you want a persistent CLI installation.\n\nIf setup gets weird, run:\n\n```\nwolfpack doctor\n```\n\nUninstall is explicit:\n\n```\nwolfpack uninstall --yes\n```\n\n- Run the installer.\n- Choose your projects directory and port. On a fresh install, setup enables\n`shell`\n\nplus supported providers detected on`PATH`\n\n; existing agent settings are never overwritten. - Sign in to Tailscale when setup opens it (macOS) or prompts for\n`sudo tailscale up`\n\n(Linux). Setup keeps the same run open for retry. - Setup configures and verifies\n`tailscale serve`\n\nbefore it prints the private Tailnet HTTPS QR code. - Install the service when prompted if you want Wolfpack and its agents reachable after login/reboots.\n- Scan the QR code, open Wolfpack on your phone, then\n**Add to Home Screen**. - Create a session and pick an agent command.\n\nA local browser can still open Wolfpack on the host machine. It is not phone access: only a verified Tailnet HTTPS QR code opens Wolfpack from another device.\n\nUse Wolfpack when you want a self-hosted alternative to juggling tmux panes, SSH windows, and cloud workspaces for AI agent sessions. It is an AI agent terminal orchestrator for developers who need persistent browser/mobile access to coding agents running on machines they control.\n\n**Phone-first agent control**— respond to Claude/Codex/Gemini while away from your desk.** Multi-machine view**— manage sessions from every machine in your tailnet, including cloud VMs.** Persistent PTYs**— the Rust broker owns sessions, so server restarts do not kill agents.** Session triage**— cards show running/idle/needs-input state and live output previews.** Desktop grid**— view up to 6 terminals side by side.** PWA UX**— install on your home screen, reconnect on drops, receive notifications when sessions need attention.** Agent-agnostic**— use built-in commands or add your own shell command in Settings → Agents.** Provider readiness**— First-run setup enables detected supported CLIs; Settings → Agents shows path/version and login guidance and lets you add providers installed later.**Pi integration**— optionally install Pi packages for Wolfpack session control and durable subagent task delegation; see[Pi integration and agent skills](#pi-integration-and-agent-skills).\n\nWolfpack starts sessions by running a command in the selected project directory.\nConfigure commands in **Settings → Agents**.\n\n| Agent | Command |\n|---|---|\n| Shell | `shell` |\n| Claude Code | `claude` |\n| Codex | `codex` |\n| Gemini | `gemini` |\n| Cursor | `cursor` |\n| Pi | `pi` |\n| Custom wrapper | any command on `PATH` , for example `opencode` or `my-agent --flag` |\n\n`cmd`\n\nvalidation intentionally rejects shell metacharacters for session commands. If you need complex setup, put it in a wrapper script on `PATH`\n\nand add that command.\n\n```\nwolfpack                 Start the server (runs setup on first launch)\nwolfpack setup           Re-run the setup wizard\nwolfpack list [--json]   List active broker sessions\nwolfpack session create  Create a top-level project session\nwolfpack agent spawn     Spawn a same-harness child agent\nwolfpack session ...     Status/read/send/wait/prompt helpers for agent automation\nwolfpack attach [name]   Attach the local terminal to an existing session\nwolfpack kill <name|id>  Kill a session\nwolfpack --version       Print the installed version\nwolfpack doctor          Diagnose broker, binaries, JWT, Tailscale\nwolfpack service ...     install / start / stop / restart / status / uninstall (add --broker to include broker)\nwolfpack uninstall --yes Remove everything\n```\n\nCreate a top-level project session with its initial instruction delivered at launch:\n\n```\nwolfpack session create branchout --harness pi --plan .plans/000-task.md --json\n```\n\nSpawn a same-harness child from an existing Wolfpack agent:\n\n```\nwolfpack agent spawn wolfpack --plan .plans/000-review.md --notify-parent --json\n```\n\nEach command makes one server-owned request and returns the stable broker `sessionId`\n\n. The server validates the project, allocates the name, persists identity, and passes startup instructions directly to the harness instead of racing terminal readiness. `--plan`\n\ngenerates a compact plan handoff without copying plan contents; `--prompt-file`\n\navoids shell heredoc/quoting failures for bespoke long prompts. Child spawning derives the parent harness and structured hierarchy without inheriting its transcript or context. `wolfpack session open`\n\nremains a deprecated child-spawn alias.\n\nDirect terminal attach: [docs/cli-attach.md](/almogdepaz/wolfpack/blob/main/docs/cli-attach.md). Scriptable session control: [docs/session-control.md](/almogdepaz/wolfpack/blob/main/docs/session-control.md).\n\nTroubleshooting: [docs/troubleshooting.md](/almogdepaz/wolfpack/blob/main/docs/troubleshooting.md).\n\nWolfpack is self-hosted software for machines you control. Those machines can be local laptops, workstations, or cloud VMs.\n\n- Browser/PWA talks to the Wolfpack server over HTTP/WebSocket.\n- Remote access is normally private HTTPS through Tailscale.\n- The server talks to the broker over a per-user Unix socket.\n- The broker owns the PTYs and runs your selected commands locally on that machine.\n- Optional JWT auth can be layered on top of Tailscale.\n- Session control follows the ordinary global API auth policy when configured and adds no inter-session authorization layer. Tailnet/global Wolfpack access remains the trust boundary; sessions can list and communicate with other sessions.\n- Wolfpack does not provide a hosted relay, managed account, or prompt upload service.\n\nRunning coding agents is intentionally powerful: those commands execute with your local user permissions in the chosen project directory. Treat Wolfpack access like shell access to that machine.\n\n```\n┌─────────────┐    ┌───────────┐    ┌──────────────────────────────────────────┐\n│   Phone /   │    │ Tailscale │    │       Your machine / cloud VM            │\n│   Browser   │◄──►│  (HTTPS)  │◄──►│                                          │\n│   (PWA)     │    │  mesh VPN │    │  ┌──────────┐  unix   ┌──────────────┐  │\n└─────────────┘    └───────────┘    │  │ wolfpack │ socket  │  wolfpack-   │  │\n                                    │  │  server  │◄───────►│   broker     │  │\n                                    │  │ (Bun)    │         │  (Rust, PTY) │  │\n                                    │  │ HTTP/WS  │         │  owns agents │  │\n                                    │  └──────────┘         └──────────────┘  │\n                                    └──────────────────────────────────────────┘\n```\n\n**PWA**— vanilla JS, no framework. ghostty-web renders the terminal.** Server**— Bun HTTP + WebSocket. Pure broker client; owns no PTYs.** Broker**—`wolfpack-broker`\n\n, Rust daemon. Owns every PTY, keeps per-session output rings, and uses a statically linked Ghostty VT engine for authoritative terminal state/snapshots. One Unix-domain socket per host (`$XDG_RUNTIME_DIR/wolfpack-broker.sock`\n\n, fallback`~/.wolfpack/broker.sock`\n\n). Wire protocol in[docs/broker-protocol.md](/almogdepaz/wolfpack/blob/main/docs/broker-protocol.md).\n\nTailscale already gates who can reach the server. If you want an extra auth layer on top — useful if you share your tailnet with others, or for defense-in-depth — set a JWT secret:\n\n```\nexport WOLFPACK_JWT_SECRET=\"$(openssl rand -base64 48)\"\n```\n\nTokens are HS256; the server validates, it does not issue — sign them with any JWT library using the same secret.\n\nOptional: `WOLFPACK_JWT_AUDIENCE`\n\n, `WOLFPACK_JWT_ISSUER`\n\n, `WOLFPACK_JWT_CLOCK_TOLERANCE_SEC`\n\n(default 30s).\n\n`~/.wolfpack/config.json`\n\n(mode 0600):\n\n```\n{\n  \"devDir\": \"/Users/you/Dev\",\n  \"port\": 18790,\n  \"tailscaleHostname\": \"your-machine.tailnet-name.ts.net\"\n}\n```\n\nPer-server agent settings live in `~/.wolfpack/bridge-settings.json`\n\n.\n\nWolfpack exposes one repository-local agent skill in `skills/`\n\n:\n\n`wolfpack-tailnet-control`\n\n— discover, inspect, and control Wolfpack terminal sessions across Tailscale hosts.\n\nWhen setup detects `pi`\n\non `PATH`\n\n, it offers this default-no, opt-in installation. You can also install the packages directly from their npm pages:\n\n— Wolfpack's Pi-installable skills, including`wolfpack-bridge`\n\n`wolfpack-tailnet-control`\n\n.— the Pi Tasks extension and`@sgtbeatdown/pi-tasks`\n\n`wolfpack-pi-task-delegation`\n\nskill.\n\nInstall both with Pi's package manager:\n\n```\npi install npm:wolfpack-bridge\npi install npm:@sgtbeatdown/pi-tasks\n```\n\nThe pieces have separate jobs:\n\n| Owner | Resource | Responsibility |\n|---|---|---|\n| Wolfpack | `wolfpack-tailnet-control` |\nCreates, selects, inspects, and closes visible Wolfpack sessions. |\n| Pi Tasks extension | `agent_task_*` |\nSends assignments and records durable structured status/results; it does not create sessions. |\n| Pi Tasks skill | `wolfpack-pi-task-delegation` |\nTeaches Pi to combine Wolfpack session control with the task tools and completion protocol. |\n\nThe first package exposes Wolfpack's bundled skills to Pi. The second package contains both the Pi Tasks extension and its matching delegation skill. Every participating Pi session needs Pi Tasks loaded; its default filesystem store also requires parent and child sessions to use the same project directory. Declining the setup prompt changes nothing. Non-interactive setup never installs Pi packages and prints the commands instead.\n\nSkills and extensions can execute commands with your user permissions. Review\nthe packages before accepting. Start a fresh Pi session afterward, or run\n`/reload`\n\nin an existing session.\n\nSkills are executable agent instructions, so install only the ones you have audited. Clone or update `https://github.com/almogdepaz/wolfpack`\n\n, review the requested file (for example `skills/wolfpack-tailnet-control/SKILL.md`\n\n), then symlink that skill directory into one supported root:\n\n- Pi global:\n`~/.pi/agent/skills/`\n\n- shared Agent Skills root supported by Pi:\n`~/.agents/skills/`\n\n- Claude global where used:\n`~/.claude/skills/`\n\nPrefer symlinks so a reviewed `git pull --ff-only`\n\nupdates the source. Refuse installation when the destination already exists; copying is also supported but must be refreshed manually. Start a fresh agent context afterward so skill descriptions are rescanned. Full fail-safe commands: [docs/agent-skills.md](/almogdepaz/wolfpack/blob/main/docs/agent-skills.md).\n\nFor a top-level session or a same-harness child, invoke:\n\n```\nwolfpack session create <project> --harness pi --plan .plans/000-task.md --json\nwolfpack agent spawn <project> --plan .plans/000-task.md --notify-parent --json\n```\n\nPlatform binaries do not contain skills. The setup wizard only asks Pi's package manager to install them after explicit opt-in; the cloned repository remains the auditable source for manual installation.\n\nSee [CONTRIBUTING.md](/almogdepaz/wolfpack/blob/main/CONTRIBUTING.md) for dev setup, the asset pipeline, and PR conventions.\n\nBugs and feature requests: [GitHub Issues](https://github.com/almogdepaz/wolfpack/issues). Questions and ideas: [Discussions](https://github.com/almogdepaz/wolfpack/discussions).\n\nMIT", "url": "https://wpnews.pro/news/wolfpack-private-control-room-for-coding-agents", "canonical_source": "https://github.com/almogdepaz/wolfpack", "published_at": "2026-08-03 11:38:44+00:00", "updated_at": "2026-08-03 11:54:23.174365+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools", "ai-agents"], "entities": ["Wolfpack", "Claude Code", "Codex", "Gemini", "Tailscale", "Rust", "Ghostty", "Bun"], "alternates": {"html": "https://wpnews.pro/news/wolfpack-private-control-room-for-coding-agents", "markdown": "https://wpnews.pro/news/wolfpack-private-control-room-for-coding-agents.md", "text": "https://wpnews.pro/news/wolfpack-private-control-room-for-coding-agents.txt", "jsonld": "https://wpnews.pro/news/wolfpack-private-control-room-for-coding-agents.jsonld"}}