{"slug": "my-vibe-coding-stack-in-2026-where-pilothouse-fits", "title": "My vibe-coding stack in 2026: where Pilothouse fits", "summary": "A developer who builds Pilothouse, an open-source Go-based permission daemon, outlined a 2026 vibe-coding stack that routes every tool call from Claude Code, Codex CLI, OpenCode and Grok Build through a policy.yaml allow/ask/deny check, with approvals pushed to a phone over Tailscale when away. The setup pairs Pilothouse with herdr, a terminal workspace that keeps agent panes running in a background server and flags each agent as working, blocked, done or idle. The developer said running three to six agents now feels like managing a small team, and that the hard part is oversight rather than prompting.", "body_md": "*Originally published at [pilothouse.dev/blog/vibe-coding-stack-2026](https://pilothouse.dev/blog/vibe-coding-stack-2026).*\n\nI don't write most of my code by hand anymore. On a normal day I have three to six agents going: Claude Code on the main feature, Codex reviewing a diff, OpenCode or Grok Build poking at something on the side. That stopped feeling like magic months ago. Now it feels like running a small team, and the hard part isn't the prompting. It's everything around it: where the agents live, how I know which one is stuck, and what they're allowed to do when I'm not looking.\n\nThis is the stack I've settled on and what each piece is for. Full disclosure: I build one of these tools (Pilothouse).\n\n| Layer | What I use | Job | \n|---|---|---|\n| Agents | Claude Code, Codex CLI, OpenCode, Grok Build | Do the work | \n| Where they live | [herdr](https://herdr.dev) | Terminals that keep running when I close the window, one sidebar for every agent | \n| Editor | Whatever I'm reviewing in | Read diffs, fix the last 10% | \n| Network | Tailscale | My laptop, desktop and phone on one private network | \n| Rules and approvals | [Pilothouse](https://pilothouse.dev) | A rule check before every tool call, and approvals that reach my phone when I'm away | \n\n```\n Desk machine (in herdr)                                  Laptop (linked)\n â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”        â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”\n â”‚ Claude Code â”€hooksâ”€â”                         â”‚        â”‚ Claude Code â”€hooksâ”€â” â”‚\n â”‚ Codex CLI  â”€hooksâ”€â”€â”¤                         â”‚        â”‚                    â–¼ â”‚\n â”‚ OpenCode   â”€pluginâ”€â”¼â”€â–¶ Pilothouse daemon â”€â”€â–¶ policy.yaml (allow/ask/deny)   â”‚\n â”‚ Grok Build â”€hooksâ”€â”€â”˜          â–²              â”‚        â”‚   Pilothouse daemon  â”‚\n â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¼â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜        â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”¬â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜\n                                 â””â”€â”€â”€â”€ pilothouse link (Tailscale) â”€â”˜\n          away? the request is pushed to your phone â”€â–¶ hold to Allow / Deny\n```\n\nEach agent is good at different things, and using two of them on the same problem catches mistakes. My split right now:\n\nThe downside of using several agents is that each one has its own permission prompts, its own settings file and its own idea of what's safe.\n\n[herdr](https://herdr.dev) is a terminal workspace built for coding agents. Your agents run in real terminal panes inside a background server, so closing the client (or losing SSH) doesn't kill them. It sorts panes into workspaces and tabs, and it marks every agent as working, blocked, done or idle so you can see which one needs you. It also recognizes Claude Code, Codex, OpenCode, Grok and a long list of other CLIs, and it can add remote machines over SSH to the same sidebar.\n\n```\ncurl -fsSL https://herdr.dev/install.sh | sh   # or: brew install herdr\nherdr                                          # start or attach in your project folder\n```\n\nherdr answers the question \"which of my agents needs me?\" It doesn't try to decide what an agent is allowed to do, and it isn't built around answering a permission prompt from your phone with your own rules behind it. That's the gap Pilothouse fills, so the two fit together well.\n\nPilothouse is a single open-source Go binary. It installs the agents' official hooks (a small plugin for OpenCode) and runs a local daemon. Every tool call an agent is about to make goes past your rules first, and every session shows up in one inbox.\n\n```\nbrew install sabr-software/tap/pilothouse   # or: curl -fsSL https://pilothouse.dev/install.sh | sh\npilothouse demo        # optional: try the phone app with pretend agents\npilothouse setup       # shows the hook diff first, starts the daemon, pairs your phone\n```\n\nThree things it adds to the stack:\n\n```\n   # ~/.pilothouse/policy.yaml\n   version: 1\n   rules:\n     - name: no-force-push\n       match: { kind: shell, command: \"git push*\" }\n       when: 'command.matches(\"(--force|-f)\\\\b\")'\n       action: deny\n       message: Force-push is blocked. Open a PR instead.\n\n     - name: ask-before-pushing-main\n       match: { kind: shell, command: \"git push*{main,master}*\" }\n       action: ask\n\n     - name: no-secrets\n       match: { path: \"**/.env*\" }\n       action: deny\n```\n\nAny `deny` wins. If you don't want to write YAML, the presets cover the common cases: `pilothouse policy preset guarded-autopilot on` lets routine work in a repo run without prompts, blocks destructive commands and asks before pushes, deploys, secrets and sudo.\n\n**Approvals that follow you.** At the desk, the agent's own prompt shows up as usual. When the keyboard goes idle, approval requests from Claude Code, Codex and OpenCode are held and pushed to your paired phone with the command, a diff for edits and risk labels. Allowing takes a one-second press and hold, so a stray tap can't approve anything.\n\n**One inbox for every machine.** Since 0.4, `pilothouse link` lets one machine (the hub) show every machine's sessions in the same app, labelled by machine.\n\n`pilothouse task new \"fix the flaky checkout test\"` starts an agent in its own git worktree. Tap \n\n```\n  # ~/.pilothouse/config.yaml\n  desktop:\n    open: auto          # a herdr tab when herdr is running, else a Terminal window on macOS\n    open_tasks: true\n```\n\nPilothouse has no account and no cloud relay. Your phone reaches the web app your own machine serves, over your tailnet:\n\n```\npilothouse remote tailscale   # HTTPS on your tailnet via Tailscale Serve, nothing public\npilothouse pair               # scan the code; on iOS add it to the Home Screen first\n```\n\nNo Tailscale? `pilothouse notify telegram` lets you answer from a Telegram bot you create, and `pilothouse notify ntfy` works too.\n\n```\n# 1. Agents: Claude Code, Codex, OpenCode, Grok Build (install from each vendor)\n# 2. herdr\ncurl -fsSL https://herdr.dev/install.sh | sh\n# 3. Pilothouse\nbrew install sabr-software/tap/pilothouse\npilothouse setup\npilothouse policy preset guarded-autopilot on\npilothouse policy preset no-secrets on\n# 4. Phone\npilothouse remote tailscale && pilothouse pair\n# 5. Work\nherdr          # then, in a pane:\nclaude         # hooks apply either way\n# or, for replies and a live terminal from your phone:\npilothouse run claude\n```\n\nIf you want to see how I run Codex, Claude Code and Grok side by side, that's the [next post](https://pilothouse.dev/blog/codex-claude-code-grok-side-by-side). The rules I actually use are in [Guardrails for vibe coders](https://pilothouse.dev/blog/guardrails-for-vibe-coders).\n\nPilothouse is Apache-2.0 on [GitHub](https://github.com/sabr-software/pilothouse). Issues and \"this broke my setup\" reports are very welcome.", "url": "https://wpnews.pro/news/my-vibe-coding-stack-in-2026-where-pilothouse-fits", "canonical_source": "https://dev.to/pilothousedev/my-vibe-coding-stack-in-2026-where-pilothouse-fits-1ga7", "published_at": "2026-11-03 21:42:46+00:00", "updated_at": "2026-11-03 21:53:39.732570+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "ai-safety"], "entities": ["Pilothouse", "herdr", "Claude Code", "Codex CLI", "OpenCode", "Grok Build", "Tailscale"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/my-vibe-coding-stack-in-2026-where-pilothouse-fits", "markdown": "https://wpnews.pro/news/my-vibe-coding-stack-in-2026-where-pilothouse-fits.md", "text": "https://wpnews.pro/news/my-vibe-coding-stack-in-2026-where-pilothouse-fits.txt", "jsonld": "https://wpnews.pro/news/my-vibe-coding-stack-in-2026-where-pilothouse-fits.jsonld"}}