{"slug": "running-codex-claude-code-and-grok-side-by-side-without-babysitting-them", "title": "Running Codex, Claude Code and Grok side by side without babysitting them", "summary": "A developer built Pilothouse, a CLI tool that installs hooks into Claude Code, Codex CLI, OpenCode and Grok Build so multiple coding agents can run in parallel from a single inbox, with approval requests routed to a phone over Tailscale. The tool adds a policy layer that blocks destructive commands while letting routine repo work run, plus per-agent git worktrees and cross-machine session sharing introduced in version 0.4.", "body_md": "*Originally published at [pilothouse.dev/blog/codex-claude-code-grok-side-by-side](https://pilothouse.dev/blog/codex-claude-code-grok-side-by-side).*\n\nThe pattern everyone running more than one agent knows: you start three sessions, go make lunch, and come back to find two of them stuck on a permission prompt since minute four. Or you switch everything to \"approve all\" to avoid that, and one of them does something you'd never have allowed.\n\nHere's how I run Claude Code, Codex CLI and Grok Build in parallel without either problem. (I build Pilothouse, the tool doing most of the work below.)\n\n```\nbrew install sabr-software/tap/pilothouse\npilothouse setup\n```\n\n`setup` installs hooks into each agent it finds and shows you the exact diff before writing anything:\n\n| Agent | What Pilothouse installs | \n|---|---|\n| Claude Code | hooks in `~/.claude/settings.json` | \n| Codex CLI | `~/.codex/hooks.json` , plus the trust entries Codex needs in`~/.codex/config.toml` | \n| OpenCode | a plugin at `~/.config/opencode/plugins/pilothouse.js` | \n| Grok Build | `~/.grok/hooks/pilothouse.json` (trust each project once with`/hooks-trust` ) | \n\nIt merges with hooks you already have and writes a backup first. After that, every session on the machine shows up in one place, in any terminal, sorted by what needs you:\n\n```\npilothouse            # the inbox: y allow · a allow for session · n deny · r reply\npilothouse ls         # sessions and waiting requests\npilothouse explain s_3fq9   # why is this session \"blocked\"? shows the evidence\n```\n\nYou can keep starting agents the way you do now, and the hooks still apply. Starting them through Pilothouse adds two things: replies from your phone get typed straight into the agent's terminal, and the agent keeps running if you close that terminal.\n\n```\npilothouse run claude\npilothouse run -n review -d -- codex \"review the diff on this branch\"\npilothouse run grok\npilothouse attach s_3fq9      # reattach from any terminal; ctrl+\\ detaches\n```\n\nOr give each agent its own git worktree, so they never touch each other's files:\n\n```\npilothouse task new \"add a --json flag to the export command\"\npilothouse task new --agent codex --base main \"fix the flaky login test\"\npilothouse task diff t_8d1x\npilothouse task done t_8d1x --pr     # push and open a PR with gh\n```\n\nIf you use [herdr](https://herdr.dev), tap **Open in herdr** on a task in the Pilothouse app and that agent appears in a herdr tab on the computer.\n\nThe reason you babysit agents is that their prompts don't tell safe from dangerous. A rule check before every tool call does:\n\n```\npilothouse policy preset guarded-autopilot on   # routine repo work runs; destructive stuff is blocked; pushes, deploys, secrets and sudo ask\npilothouse policy preset protect-main on        # pushes to main need you; force-pushes are blocked\n```\n\nWhen you approve the same thing over and over, the approval card offers to turn it into a rule (\"Always allow `npm test` in api-server\") with one tap.\n\n```\npilothouse remote tailscale   # your phone reaches your machine over your tailnet; nothing public\npilothouse pair\n```\n\nAt the desk, each agent's own prompt appears as usual. When you're away (keyboard idle, or `pilothouse away`), approval requests from Claude Code and Codex are held and pushed to your phone. Each one shows the command, a diff for edits, risk labels like *Force-pushes to main* or *Reads .env*, and the agent's last words before it asked. You hold to allow or tap Deny. Answer it anywhere and the other places close.\n\nMy desktop runs the long jobs and my laptop runs whatever I'm doing on the couch. Since Pilothouse 0.4 they share one inbox:\n\n```\npilothouse remote tailscale          # on every machine\npilothouse link add                  # on the hub (the machine your phone is paired with)\npilothouse link join https://studio.tailnet.ts.net XXXX-XXXX-XXXX   # on each other machine, with the printed code\n```\n\nThe join command shows the hub's paired devices with a fingerprint for each key; you confirm the ones you recognise. After that, Today shows every machine's sessions, labelled by machine. Approvals, replies and the live terminal go to the machine running the agent, and **that machine checks your phone's signature itself**, so the hub can't approve anything on your behalf. Revoke a device on the hub and it's revoked everywhere.\n\nRules, tasks and budgets live on each machine, so add rules on the machine that needs them.\n\nI stopped checking terminals. Agents that are doing routine work keep going, the dangerous stuff gets blocked before it runs, and when Claude Code or Codex needs me, it shows up on my phone with enough context to decide in a few seconds. Grok Build sits behind the same deny rules and shows up in the same inbox.\n\nSetup guide: [pilothouse.dev/docs](https://pilothouse.dev/docs). Multi-machine: [pilothouse.dev/docs/machines](https://pilothouse.dev/docs/machines). Source: [github.com/sabr-software/pilothouse](https://github.com/sabr-software/pilothouse).", "url": "https://wpnews.pro/news/running-codex-claude-code-and-grok-side-by-side-without-babysitting-them", "canonical_source": "https://dev.to/pilothousedev/running-codex-claude-code-and-grok-side-by-side-without-babysitting-them-4i44", "published_at": "2026-11-03 21:42:55+00:00", "updated_at": "2026-11-03 21:53:36.216808+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "ai-safety"], "entities": ["Pilothouse", "Claude Code", "Codex CLI", "Grok Build", "OpenCode", "Tailscale", "herdr"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/running-codex-claude-code-and-grok-side-by-side-without-babysitting-them", "markdown": "https://wpnews.pro/news/running-codex-claude-code-and-grok-side-by-side-without-babysitting-them.md", "text": "https://wpnews.pro/news/running-codex-claude-code-and-grok-side-by-side-without-babysitting-them.txt", "jsonld": "https://wpnews.pro/news/running-codex-claude-code-and-grok-side-by-side-without-babysitting-them.jsonld"}}