Agent Hub Beta

A desktop and terminal control plane that keeps five AI coding agents, projects, documents and conversations in one place, with shared notes that survive when a conversation resets.

I run several agents from different companies on the same project, and for a while it felt broken. They lost context, paused mid-task, and reported work as done too early. Agent Hub is what I built so they could share one project without losing work when a conversation ends or resets. The log that changed my design, my typing overruling the system 393 times out of 441, is written up in Agents need direction more than anything. Two small pieces are public on GitHub: receipt-checker and compaction-guard. The drawings below show the rest, from the shared tool server to the checks that decide what lands.

(a) One shared server

(a) One shared serverAgents from five companies each run as their maker's own program in their own terminal. They share one tool server, which has 82 tools so far, including 11 browser tools.Claude Code · Codex CLI · Grok · Muse Code · AntigravityOne tool server: sessions, messaging, work orders, goals,scheduled tasks, settings; 11 browser tools(a) One shared serverAgents from five companies each run as their maker's own program in their own terminal. They share one tool server, which has 82 tools so far, including 11 browser tools.Claude Code · Codex CLI · Grok ·Muse Code · AntigravityOne tool server: sessions,messaging, work orders, goals,scheduled tasks, settings; 11browser tools
Figure 1. Agents from five companies each run as their maker's own program in their own terminal, and they all share one tool server. It has 82 tools so far, 11 of them for the browser.

Numbers

8,738
tests, 0 failing

8,728 passed, 0 failed and 10 skipped across 659 test files, in the full check on the main branch that gated a landing.

82
tools in one shared server

Counted by loading the server's tool list, which includes 11 browser tools. The count goes up as tools are added.

5
companies’ coding agents

Claude Code, Codex CLI, Grok and Muse Code are built in, and Antigravity is recognised by its command. Gemini CLI runs as a plain preset, and the tests use screens captured from all five.

1
runtime dependency

The app's package list has one runtime dependency, the terminal library. The interface libraries are bundled at build time.

System diagram

(b) Work and receipts

(b) Work and receiptsAn order gives why, done-when checks and bounds. The mailbox refuses incomplete receipts and any PASS with a failed test. A lead re-runs the declared check at the receipt’s commit; a failing re-run reopens the job.Order → worker → receiptMailbox checks status, commit, testcounts and uncertaintyLead re-runs the check at the receipt’scommit(b) Work and receiptsAn order gives why, done-when checks and bounds. The mailbox refuses incomplete receipts and any PASS with a failed test. A lead re-runs the declared check at the receipt’s commit; a failing re-run reopens the job.Order → worker → receiptMailbox checks status, commit, testcounts and uncertaintyLead re-runs the check at thereceipt’s commit

An order carries the reason, the done-when checks and the bounds. If a lead's re-run of the declared check fails at the receipt's commit, the job reopens.

(c) Checked landing

(c) Checked landingThe full check runs on the exact commit. Main moves fast-forward only and refuses if the commit or main moved during the check; the push guard refuses rewrites, deletions and tags.Full check on exact commitFast-forward landing; refuse a movedcommit or mainPush guard refuses rewrites, deletionsand tags(c) Checked landingThe full check runs on the exact commit. Main moves fast-forward only and refuses if the commit or main moved during the check; the push guard refuses rewrites, deletions and tags.Full check on exact commitFast-forward landing; refuse amoved commit or mainPush guard refuses rewrites,deletions and tags

The full check runs on the exact commit, and main moves fast-forward only. A landing is refused if the commit or main moved during the check, and the push guard refuses rewrites, deletions, tags and commits from outside the checked copy.

(d) A record that shows edits

(d) A record that shows editsAuthorization records for pushes, app updates, delivery reviews and board decisions are SHA-256 hash-chained. An edit shows; the chain is tamper-evident, not tamper-proof.Authorization recordSHA-256 hash chainAn edit shows; it is not prevented(d) A record that shows editsAuthorization records for pushes, app updates, delivery reviews and board decisions are SHA-256 hash-chained. An edit shows; the chain is tamper-evident, not tamper-proof.Authorization recordSHA-256 hash chainAn edit shows; it is not prevented

Authorization records for pushes, app updates, delivery reviews and board decisions are SHA-256 hash-chained, so an edit shows. That makes them tamper-evident, not tamper-proof.

(e) Goals survive a restart

(e) Goals survive a restartEach goal change is appended and saved before it counts. Restart replays the log. A damaged line halts all goal changes instead of guessing.Append and save goal changeRestart replays the logDamaged line halts changes(e) Goals survive a restartEach goal change is appended and saved before it counts. Restart replays the log. A damaged line halts all goal changes instead of guessing.Append and save goal changeRestart replays the logDamaged line halts changes

Each goal change is appended to a log and saved before it counts. A restart replays the log, and a damaged line halts all goal changes instead of guessing.

(f) Prompts stay with the person

(f) Prompts stay with the personSign-in, trust and approval prompts stay with the person, and private projects are walled at the tool server.Sign-in, trust and approvalpromptsStay with the personPrivate projects walled at the toolserver(f) Prompts stay with the personSign-in, trust and approval prompts stay with the person, and private projects are walled at the tool server.Sign-in, trust and approvalpromptsStay with the personPrivate projects walled at the toolserver

Sign-in, trust and approval prompts stay with the person, and private projects are walled at the tool server.

(g) Browser and Agent Hub

(g) Browser and Agent HubBrowser and Agent Hub use a paired link on the same computer, not through a server.BrowserPaired local link ↔Agent Hub(g) Browser and Agent HubBrowser and Agent Hub use a paired link on the same computer, not through a server.BrowserPaired local link ↔Agent Hub

Browser and Agent Hub talk over a paired link on the same computer, not through a server.

Figure 2. The rest of the system, from receipts to the paired link with Browser.

How it's built

Every tool on the shared server takes typed inputs. The tool list is built into the server script, so an agent that starts while the app is closed still gets the full list.

I wanted receipts that can't fake a pass. The mailbox refuses a receipt without a status, a commit, test counts and a note of what's still uncertain, and it refuses a PASS that reports a failed test. A lead can then re-run the check at the receipt's commit.

Messages use an 8-state delivery queue (`queued` through `replied`) that holds incoming agent messages in a preview queue while a person is typing in the terminal, so an agent never overwrites an unsent human draft. Alongside the desktop app, I built Agent OS (`agent-hub` and `agent-terminal`, 450 commits and 188 test files in zero-dependency Node 24 TypeScript) so the same five providers can be steered from any terminal or browser with an independent terminal session server that survives HTTP restarts.

Goals hold lines of intent in 10 states, from idea to landed, and a goal's record can be rebuilt from its log alone. By default up to 16 agents are awake, and a group runs at most 4. A start past the cap is refused, and the refusal names finished agents that could make room.

Limits

The counts on this page come from one Linux run in October 2026, so they say nothing about speed or about macOS and Windows. The hash chain shows an edit; it does not prevent one.