{"slug": "show-hn-one-roof-mission-control-for-many-coding-agents-you-stay-in-charge", "title": "Show HN: One Roof – mission control for many coding agents. You stay in charge", "summary": "Developer Gaurav8936 released One Roof 2.0.3, a free, MIT-licensed macOS app that runs multiple coding-agent sessions — Claude Code, Codex, Gemini CLI, Kimi and Antigravity — side by side in real terminals and funnels every agent question into a single Inbox. One Roof adds a Home morning page showing overnight failures and next steps, per-session memory and CPU monitoring with a guard that stops runaway sessions, and per-agent permissions that start in Manual mode on a new Mac. The app requires macOS 14 or later on Apple silicon, is signed and notarized, and its Evals feature is still marked as a draft.", "body_md": "One Roof is for chorus coding: several sessions of Claude Code, Codex, Gemini CLI, Kimi and Antigravity working together on the same job. Every session is a real terminal. Everything they ask you lands in one Inbox. In the morning, Home tells you what ran overnight, what went wrong and what to do next. Free and open source.\n\n[**⬇ Download for Mac (.zip)**](https://github.com/gaurav8936/oneroof/releases/latest) ·\n  [Website](https://gaurav8936.github.io/oneroof/) ·\n  [Chorus coding](https://console.zibajoon.com/blog/chorus-coding) (the idea behind it) ·\n  [Getting started](https://github.com/gaurav8936/oneroof/blob/main/docs/help/00_getting-started.md) ·\n  [Setup guide](https://github.com/gaurav8936/oneroof/blob/main/docs/help/00_setup-guide.md) ·\n  [Contribute](https://github.com/gaurav8936/oneroof/blob/main/CONTRIBUTING.md)\n\n<sub>Free · open source · MIT · signed and notarized · needs macOS 14 or later on Apple silicon</sub>\n\n**Status: version 2.0.3.** Free and open source under the MIT licence. Tested on Apple-silicon Macs only.\nEvals is still a draft, and is marked as one in the app. Please\n[open an issue](https://github.com/gaurav8936/oneroof/issues) with anything that breaks or reads badly; see\n[CONTRIBUTING.md](https://github.com/gaurav8936/oneroof/blob/main/CONTRIBUTING.md).\n\n**Works with:** Claude Code · Codex · Gemini CLI · Kimi · Antigravity · plain shells\n\nOne Roof finds the agent command-line tools on your Mac and the accounts you are signed in to. It does not replace them: each session runs the real tool in a real terminal, and you can always type straight into it. Optional: OpenCode and Goose on a hosted model with your own API key and a spending cap.\n\nI call it chorus coding: several coding agents on the same piece of work, each doing the part it does best, one checking another. One plans, one builds, one reviews. A loop re-runs the tests every night.\n\nThe agents are not the bottleneck any more. You are. Five terminals look the same. A question waits in a tab you are not looking at. Something failed at 3 AM and nobody told you. The Mac slows down and you do not know which session is to blame.\n\nOne Roof is the app I built to keep up with that, and to stay the one who decides.\nMore in the post: [Chorus coding](https://console.zibajoon.com/blog/chorus-coding).\n\nEach one is easy with one session. Each one adds up with five.\n\n| What goes wrong | What One Roof does | \n|---|---|\n| **Questions get lost.** An agent stops to ask something in a tab you are not watching, and waits for an hour. | **Inbox:** every ask from every session in one place, the urgent ones first, answered in place. | \n| **You miss what happened overnight.** Loops and long sessions ran while you slept. Which ones failed, and what now? | **Home:** a morning front page with what went wrong, what to do next and what ran fine. | \n| **Nobody reads the whole stream.** Reading every agent's output is a full-time job. | **History:** the important moments of each session, as short cards, with what you answered. | \n| **Every terminal looks the same.** You end up typing WIP: in front of tab names to tell them apart. | **Sessions:** each one labelled with its state, agent, account and folder, and its own colour. | \n| **The Mac slows down.** One session's processes quietly grow to several gigabytes. | **Resources:** memory and CPU per session and per app, with a guard that stops a runaway session. | \n| **Agents act before you look.** An agent edits files or runs commands you did not expect. | **Permissions per agent.** On a new Mac every agent starts in Manual and asks first. | \n\nThe window has a rail of places, each with one job.\n\nBuilt from your own sessions and loops. The lead story is the thing that matters most. **Decide now** lists what\nwaits on you, one button each. The overnight timeline shows every run since midnight as a dot, and under it:\n**What went wrong** (each failure once), **What to do next** (up to three steps) and **Ran fine** (repeats folded,\nsuch as \"Cost watch ×12\").\n\nOne block per session that needs you, with the prompt's own options as buttons (or press 1–9). When an agent is\nblocked until you act, its block gets a red border and goes to the top. A finished turn waits here too, with a reply\nbox; paste a screenshot and the agent reads it. Nothing is approved for you, and you can always answer in the\nterminal instead. **Decided** keeps what you answered, newest first.\n\nEvery agent session and plain shell, grouped by state: Needs you, Active, Next, Planned, Exited. Each row shows the\nagent, the account, the folder and a live one-line status. Show one terminal, a grid or a wall. Sessions run inside\n**roofd**, a small background service, so they keep going when you close the app, and come back with their screens\nwhen you open it again.\n\nA read-only record of each session's important moments: steps, findings, errors, what the agent asked and what you answered, hand-offs between sessions. Each session's run of moments is one card, in its own colour. Search it, or filter by session, agent, kind and date. Kept for 30 days.\n\nA loop gives an agent a goal and a check, such as \"until the tests pass\" or \"every night at 3\". One Roof runs the check, starts another round when it fails, and stops at a limit. The agent works in the loop's own copy of the repo, never in yours. What a loop produces waits in the Inbox for your approval.\n\n1. **Check first.** If it already passes, no agent is started.\n2. **One round.** The agent works on a separate branch.\n3. **Check again.** Done, or another round, up to a limit.\n4. **You decide.** A loop never pushes, merges or deploys on its own.\n\nThe built-in loops are off until you turn one on.\n\nMemory and CPU for each session, for One Roof itself and for every app on the Mac, with 10-minute charts. A browser shows its windows and tabs, and you can close a tab or a window from here. roofd warns when a session grows past 1 GB and ends it at 2 GB, before it can freeze the Mac.\n\nStill a draft, and marked as one in the app. Run public benchmarks or build a question set from your own repo's fixed bugs, then compare agents and models on it. Every score comes with its range and a plain explanation of what it means. The cost shows before anything starts.\n\n- **Projects:** your Linear teams, projects and tickets, with each project's roadmap. Only if you connect Linear with\nyour own API key; without it, Projects shows a single Connect Linear card.\n- **Learn:** a course on agentic engineering. The narrated Agentic Engineering deck and a timeline of papers that\nshaped coding agents. The narration is an AI-generated voice, and says so.\n\nOne Roof never decides for you. These are the defaults on a new Mac.\n\n- **Manual first.** Each agent has one permission mode: Manual, Plan, Auto or Full. On a new Mac every agent starts\nin Manual and asks before it edits a file or runs a command. Change it per agent in Settings › Permissions.\n- **Nothing is approved for you.** The Inbox shows the agent's own options. You press one, or answer in the terminal.\nLoops stage their results for your approval and never merge on their own.\n- **Your folders, not your home folder.** Setup asks for the folder that holds your code, or offers to create`~/Projects` . One Roof never scans your home folder, so macOS does not ask about Desktop, Documents or Downloads.\n- **Sessions survive the app.** roofd keeps your sessions running when One Roof is closed or updated. A crash in one\nsession ends only that session.\n- **No keys in the app.** The app ships no keys, no tokens and no datasets. Linear, hosted models and gated\nbenchmarks use your own accounts, only if you add them.\n- **Signed and open.** Signed with an Apple Developer ID and notarized by Apple. The full source is here, under the\nMIT licence.\n\nAgents differ in what they are good at, which model they bring and how much room is left on each subscription. Each vendor's own app keeps you inside that vendor's agent. One Roof is no vendor's: Claude Code, Codex, Gemini CLI, Kimi and Antigravity run side by side. The bar at the foot of the window shows how much of each subscription is used, so you can pick the agent with room left.\n\n**What you need**\n\n|  | What | How | \n|---|---|---|\n| Required | A Mac with Apple silicon, macOS 14 or later |  | \n| Required | git | `xcode-select --install` (Xcode Command Line Tools) | \n| Required | At least one agent CLI, installed and signed in: `claude` ,`codex` ,`gemini` ,`kimi` or`agy` | each agent's own installer (Gemini CLI needs a Gemini API key; Antigravity signs in with a Google account) | \n| Optional | OpenCode or Goose on a hosted model | OpenCode 1.19.5 or Goose 1.57.0, Python 3.11+ with PyYAML, and an API key for Together AI, OpenRouter or Fireworks (see [hosted agents](https://github.com/gaurav8936/oneroof/blob/main/docs/help/hosted-agents.md) ) | \n| Optional | On-device model for captions and reasons | `brew install llama.cpp` , then**Get the model** in Settings (Qwen3 1.7B, Apache-2.0, 1.1 GB; it runs on your Mac) | \n| Optional | Projects (Linear) | your own Linear API key, in Settings › Linear | \n\n1. **Download**`One-Roof-<version>.zip` from[Releases](https://github.com/gaurav8936/oneroof/releases/latest) ,\nunzip it and drag**One Roof** to Applications. It is signed and notarized by Apple, so it opens like any other app.\n2. **Run the setup.** The first launch finds the agents you are signed in to, asks for the folder that holds your\ncode, and lets you pick a look. macOS asks once to allow roofd, the background item that keeps sessions running.\nEvery answer can be changed later in Settings (⌘,); the[setup guide](https://github.com/gaurav8936/oneroof/blob/main/docs/help/00_setup-guide.md) explains each one.\n3. **Start your first session.** Press ⌘N, say what should happen, pick the agent and the repo, and launch (⌘↩).\nWhen it asks you something, it shows up in the Inbox.\n\n**Build from source** instead: see [app/README.md](https://github.com/gaurav8936/oneroof/blob/main/app/README.md) (Swift 6, Xcode 26, zig 0.15 and a one-time\nlibghostty build).\n\n| Part | Folder | What it is | \n|---|---|---|\n| **One Roof app** | [`app/`](https://github.com/gaurav8936/oneroof/blob/main/app) | The app (Swift, libghostty terminals) and roofd, the session service | \n| **Agentic engineering linking** | [`agentic_engineering/`](https://github.com/gaurav8936/oneroof/blob/main/agentic_engineering) | The script that links the bundled deck's skills into every agent; the deck itself is packaged from its own repository when the app is built | \n| **The kit (`roof`)** | `bin/ guard/ shell/ lib/ templates/ tools/` | One launch folder, one memory and one rulebook for every agent. Works with or without the app | \n| **Help** | [`docs/help/`](https://github.com/gaurav8936/oneroof/blob/main/docs/help) | The help pages the app shows | \n| **Website** | [`site/`](https://github.com/gaurav8936/oneroof/blob/main/site) | The page at [gaurav8936.github.io/oneroof](https://gaurav8936.github.io/oneroof/) | \n\nAgents only stay consistent if they start in the same folder and read the same rules and notes. They usually don't:\n\n- **Claude Code keys its memory on the launch folder.** Start a session in`~` instead of`~/Projects` and it reads\nand writes a*different* memory. Nothing warns you. I lost 26 notes to a hidden second memory over five weeks.\n- **Every agent finds its instructions from the launch folder** (`CLAUDE.md` ,`AGENTS.md` ,`GEMINI.md` ). Start in the\nwrong place and an agent works without your rules.\n- **Codex and Kimi have no hooks** , so the usual \"block it in a hook\" fix doesn't reach them.\n\nThe kit fixes this with simple controls, layered so a mistake has to get past all of them. `roof install` puts them\nin place; `roof doctor` checks every layer.\n\n| # | Layer | What it does | \n|---|---|---|\n| 1 | Shell default | a new terminal that opens in `~` moves to your workspace | \n| 2 | Agent wrappers | typing `claude` ,`codex` or`kimi` anywhere else moves you there first | \n| 2b | PATH stand-ins | agents without hooks **refuse to start** outside the workspace (exit 64), even via`command codex` | \n| 3 | Claude hook | **blocks every prompt** while a Claude session is outside the workspace | \n| 4 | Home notes | `~/CLAUDE.md` and`~/AGENTS.md` say \"wrong folder, stop\" (optionally made immutable) | \n| 5 | Memory pin | `autoMemoryDirectory` : one Claude memory, whichever folder you launch from | \n\nIt also sets up:\n\n- **A shared rulebook** (`_common/AGENTS.md` , with`CLAUDE.md` linked to it) that every agent's entry file points at,\nand a short`READ-FIRST.md` must-read list.`roof doors` puts a small door file at every project and repo level.\n- **One skills folder for every agent** :`roof sync-skills` links each skill into Claude's, Codex's, Gemini's and\nHermes's skills homes.\n- **Bounded parallel agents** :`roof swarm run spec.json` runs tasks in separate git worktrees with non-overlapping\nfile claims, a parallel ceiling, timeouts, capped retries and a disk check;`merge` and`clean` land and tidy the run.\n\nThe story behind it: [One workspace: five coding agents, one set of rules](https://gabblegrid.ai/blog/one-workspace).\n\n```\ngit clone https://github.com/gaurav8936/oneroof ~/oneroof\n~/oneroof/bin/roof install                      # workspace ~/Projects, shared folder ~/Projects/_common\n# or: roof install --workspace ~/code --agents \"claude codex kimi gemini agy\"\n# open a new terminal, then:\nroof doctor                                     # checks every layer, live\n```\n\nAdd `~/oneroof/bin` to your `PATH` to type `roof`. `roof install --dry-run` shows what it would do. Install is\nidempotent and **never overwrites** an existing file: your `~/CLAUDE.md`, your rulebook and your settings keys are\nleft alone (Claude's settings are merged, with a timestamped backup).\n\nOn macOS, `roof lock` prints the `sudo chflags` commands that make the home notes immutable. The kit never runs\n`sudo` itself.\n\n| Command | Does | \n|---|---|\n| `roof install [--workspace DIR] [--shared DIR] [--agents \"…\"] [--no-shell] [--no-home-notes] [--dry-run]` | set up every layer | \n| `roof doctor` | check every layer live (blocks a fake session in `~` , starts a stand-in in`~` ); exit 1 on any problem | \n| `roof status` | show workspace, shared folder, agents, memory folder | \n| `roof doors [--check]` | put a door ( `AGENTS.md` + READ-FIRST link) at every project and repo level | \n| `roof sync-skills <dir>` | link one skills folder into every agent's skills home | \n| `roof swarm run spec.json [--dry-run]` | run tasks in parallel, one git worktree and branch each ( `roof swarm --help` ) | \n| `roof swarm merge <run-dir>` | merge each green task branch into the current branch ( `--no-ff` ), stopping at the first conflict | \n| `roof swarm clean <run-dir> [--force]` | remove the run's worktrees and its merged branches ( `--force` : all its branches) | \n| `roof eval <command>` | the engine behind Evals, from the command line ( `roof eval help` ) | \n| `roof lock` | print the commands that lock the home notes (macOS) | \n| `roof uninstall` | remove what install added; your docs and memory stay | \n\nOne-off exception: `ROOF_ALLOW_OUTSIDE=1 claude`.\n\n```\n~/Projects/                     your workspace (any path)\n  CLAUDE.md                     imports _common/AGENTS.md\n  AGENTS.md                     points Codex, Kimi and the others at _common/AGENTS.md\n  _common/                      the shared layer (the underscore sorts it first everywhere)\n    AGENTS.md  CLAUDE.md → AGENTS.md\n    docs/READ-FIRST.md  docs/standards/  decisions/  architecture/  runbooks/  references/  gotchas/  next-session-handoff/\n~/CLAUDE.md  ~/AGENTS.md        conditional \"wrong folder\" notes\n~/READ-FIRST.md                 link to the shared READ-FIRST\n~/.claude/settings.json         + autoMemoryDirectory + two hooks (merged)\n~/.config/oneroof/              config + bin/ stand-ins for codex, kimi, …\n~/.zshrc / ~/.bashrc            + one line sourcing shell/oneroof.sh\n```\n\n[docs/architecture/oneroof-kit.md](https://github.com/gaurav8936/oneroof/blob/main/docs/architecture/oneroof-kit.md) explains the guarantees, the four context layers\n(shared truth → entry files → private memory → session bridge) and why each exists.\n[docs/runbooks/adding-an-agent.md](https://github.com/gaurav8936/oneroof/blob/main/docs/runbooks/adding-an-agent.md) covers adding another agent.\n\n```\nbash tests/run.sh      # 74 checks in a throwaway HOME with fake agents: no real settings, shells or tokens touched\n```\n\nCI (Woodpecker) runs them on Linux and macOS.\n\nMIT. See [LICENSE](https://github.com/gaurav8936/oneroof/blob/main/LICENSE).", "url": "https://wpnews.pro/news/show-hn-one-roof-mission-control-for-many-coding-agents-you-stay-in-charge", "canonical_source": "https://github.com/gaurav8936/oneroof", "published_at": "2026-11-02 18:49:38+00:00", "updated_at": "2026-11-02 19:21:52.299583+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "ai-products"], "entities": ["One Roof", "Gaurav8936", "Claude Code", "Codex", "Gemini CLI", "Kimi", "Antigravity", "OpenCode"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-one-roof-mission-control-for-many-coding-agents-you-stay-in-charge", "markdown": "https://wpnews.pro/news/show-hn-one-roof-mission-control-for-many-coding-agents-you-stay-in-charge.md", "text": "https://wpnews.pro/news/show-hn-one-roof-mission-control-for-many-coding-agents-you-stay-in-charge.txt", "jsonld": "https://wpnews.pro/news/show-hn-one-roof-mission-control-for-many-coding-agents-you-stay-in-charge.jsonld"}}