A hub on your own machine where coding agents work together as one team. Claude Code, Codex, Kimi Code, Pi and a hub-owned local worker (plus Qwen Code, Jcode and Antigravity if you want them) share a message bus, a task board and a memory, each connected through its own native interface.
Status: 0.36.0, control protocol 17 (accepts 16). Bun + TypeScript, one loopback daemon per project. Site: agent-hub.staix.net.
Inspect bounded task and attempt metadata with ahub lineage show; admit external
references through the current task role with ahub lineage link. References remain
declared and never cause an external fetch. See execution lineage.
You need Bun 1.4.2 or later on PATH.
bun add -g @staix/agent-hub && ahub setup
cd <your project> && ahub init && ahub up # daemon, claude and codex, then the operator consoleahub up opens the default agents (claude and codex; choose them at ahub setup,
skip them with --no-agents) through terminal.open or Orca. Where it cannot, it
names the command; run the agents you use by hand, one terminal each, and talk to them:
ahub claude # Claude Code with the hub channel
ahub codex # Codex TUI, attached through the hub
ahub say "Each of you: reply with your name."
ahub ui # the web dashboardIf a verified daemon child is still starting after 12 seconds, ahub up reports
its PID and keeps waiting for readiness. Completed starts write phase timings to
hub.log; startup diagnostics explains
the 120-second outer bound and the next step for unconfirmed readiness.
ahub setup also registers agent-hub as a plugin of the family console
(agent-console, acon ui): the same dashboard
appears as a panel for every registered project, and pending approvals, reviews assigned
to you, questions agents ask you and, where acon supports them, unread results reach the
console inbox. The plugin is @staix/agent-hub/ui-plugin; it uses the dashboard manager's
own listing and forwarding, and an answer, a result receipt or a review comment sent from
acon goes through a manager port of its own that needs acon's verified person.
The plugin also feeds the console's Space view (Flat, Room and 3D): agents become actors
at their desks, the task board's columns become zones, and task links and recent messages
become links. The scene carries labels and states only, never message bodies or details.
ahub init --dry-run --json shows what init would write. On a new project at a
terminal, ahub init asks each main setting with its default before writing; flags
such as --agents, --sdlc or --no-specs set them directly, and --yes takes the
defaults. The
Quickstart walks through a first session and a working day,
including a new project with SDLC advise or enforce.
- Bounded visual explanations. Ordinary local peers can post a diagram,
comparison, table or before/after view with
hub_visual. acon renders the screened record; the standalone dashboard shows text/source, and peers receive only a stub. Limits and privacy. - Peers, not a pipeline. Any agent can message the others. Messages are batched into digests, priorities decide what interrupts a turn, and delivery survives restarts.
- Optional decision routing. Hub-owned routes can consult a loopback adec policy in shadow mode while keeping the existing model choice unchanged. Stage routes use bounded numeric evidence and a deterministic fallback; whole-wire sizing conservatively counts UTF-8 JSON bytes, including Unicode. See the stage contract and configuration and privacy limits.
- Live model selection. A person can set a supported peer's next-turn model
with
ahub model set, without restart or reload. Headless Kimi 2.5.2 has an exact-version ACP setter receipt; other ACP kinds remain unsupported. Active turns stay unchanged; status distinguishes pending and unsupported selection. - A shared task board. Work is proposed, accepted, done and reviewed through hub
tools. Roles split planning, implementation and review (up to eight planners,
each task bound to one),
routing.tomlpicks owners by task class, and owners of overlapping work are told what changed. A peer that accepted or finished a task never reviews it, a review request lists the task's acceptance criteria by id, and a done report can name deliverable files that the hub hashes itself, so an approval binds the bytes reviewed, andahub deliverableslists them. Extra Claude Code instances can implement in their own worktree, in a terminal or headless with one session per task.ahub sdlc metricsreads lead times, rework and stalls from board history, and optional control bands turn a breach into a backlog card. Work that belongs to another project running agent-hub on this machine goes onto that project's board withahub task handoff(agents:hub_task_handoff), and its state changes come back as task messages. For a PR already merged outside the hub, merged PR adoption verifies its recorded head and releases dependents:ahub sdlc adopt-merge <task> --pr <n>. An explicitly superseding task may carry existing spec consent for the same repository and issue when the host verifies an unchanged body. Fresh Kimi reviews run periodic isolation checks off the hub event loop; verdict and task-tool authority still require the complete synchronous fence (measurements and limits). - Research campaigns.
ahub studykeeps a multi-unit study contract as a draft (a planner drafts it withhub_study_draft); only the person approves it, which creates one task per unit, andahub study showreads coverage per unit and source. A unit is covered by its owner'shub_study_handoffwith evidence, not by a done task. Experiment attempts are recorded withhub_experiment_recordand read withahub study experiments, each value naming where it came from. Covered by source and fixture tests only so far: no real campaign has run on this repository (dogfood). - Design specs. Markdown specs with
idandtypefrontmatter name the paths they govern.ahub specs checkvalidates their links and reports specs that are stale against their covered sources, the hub names the specs covering a task, and agents read them withhub_specs. Only a person stamps a spec as reviewed (ahub specs stamp). Fixture-tested only so far: this repository's own specs indocs/design/are unstamped drafts (dogfood). The guidance variant contract defines immutable advisory role proposals and private task-local lifecycle storage.ahub guidance create|list|show|withdrawand the MCP tools share task authority and public projections; the producer console's Guidance panel is read-only. Section diffs remain advisory, without activation, permissions or probes. - Shared memory. Decisions, contracts, fails and findings are kept through the
first-party
@staix/agent-memlibrary, in process with no claude-mem worker (short- and long-term tiers, a typed graph, git sync between machines). Agents get it as a recall preface, as briefs on a task, and through bounded search tools. Managed headless peers can save compactamem:records from final answers; the hub follows amem'srecordspolicy and removes record lines from shared replies (details). - Local and on-prem models. Pi and the local worker can run on DGX or local MLX through an authenticated relay. Tasks marked as PII stay on the on-prem worker.
- Guard rails. The local worker and Pi run in a sandbox, and their writes and
shell commands wait for your approval unless you choose a looser permission mode.
Publish, external-write, destroy and install calls ask a person in every mode for
Claude Code, the local worker, Pi, hub-owned ACP peers such as Kimi and the
approval requests Codex sends, wherever the hub sees the call before it runs;
ahub statusnames each peer where it cannot. The opt-in floor (action_policy.floor, whichahub autonomy onsets) lets a push of a non-default branch tooriginandgh pr create|comment|review|mergein the project's own repository run without asking; force, default-branch and tag pushes and releases still ask. Every message records its sender's origin, and a session that is not the project's own peer appears as<peer>~<origin>with none of that peer's roles: sessions are distinguishable, which is provenance, not authentication. Budgets pause an agent before it runs out of quota (at 99% of a window by default, thebudget.gatesetting), and recovery never replays an effect whose outcome is unknown. - Operations. A terminal console and a local dashboard, one hub per repository or
worktree with a machine-wide view, live settings reload, machine-local schedules
that propose tasks by interval or by a
cronexpression in a time zone (ahub schedule list), a one-confirmation autonomy preset (ahub autonomy on|off|status), a worktree shelf that lists live and settled worktrees and removes the safe ones only on your confirmation (ahub worktrees), questions an agent asks you withhub_ask(answered withahub answer, the console'sAor the acon inbox), the results of runs you started (ahub results), a person-requested handover of a peer to a waiting standby session (ahub peer takeover), structural config (instances, review, lifecycle) edited with a validated diff and a backup from the console or a dashboard settings session, token usage and quota history (ahub usageand the dashboard's Usage view), andahub upgrade, which carries running sessions across versions.
Run ahub upgrade in a project while its hub is running (--project selects
another); other projects keep their version. Update the global CLI
(bun add -g @staix/agent-hub@<version>) and run ahub setup for the plugin
yourself; ahub upgrade names that step when either is older than the daemon it
installed. Read the notes for your version in
the Quickstart ("Upgrading to ...") and the
Changelog first: some releases need a one-time step, such as
refreshing an agent's MCP entry.
Agent CLIs update themselves. ahub agents shows which installed versions the hub
accepts, ahub agents trust <id> <version> accepts an untested one on this
machine, and the hub tells the planner when an installed version is not verified.
Qwen Code dual-output 0.27.0 and 0.27.1 are qualified by source and account-free macOS arm64 checks (0.27.0, 0.27.1) (supported from 0.36.0 once a hub is upgraded); real-model turns and live TUI use here remain unverified. A hub deny keeps later input fenced until a new personal turn completes or a verified fresh generation starts; see Qwen TUI operations.
Before you migrate a memory home with amem, read
memory profiles and rollout. Every hub that
uses the home must run a version that understands the new layout.
Machine sync uses amem's public writer attestation; status and the dashboard
show an unverified writer's cause and the person-run next step.
- Curated memory (#412): compression, removal, correction and failure-driven management, each shipped only after its contract and a measurement.
- Every agent able to do its share (#418).
- Measured, not assumed. Add-ons and memory are kept or dropped by controlled comparisons (#248, #258).
Live checks that still need a real account or a person are listed in the release verification report and the smoke checklist.
| Read | For |
|---|---|
| Quickstart | install, the first session, a working day, upgrade notes |
| Operations guide | console, task flow, Pi and models, dashboard, projects, upgrade and recovery |
| Hub memory | how memory is stored, shared and recalled |
| Security notes | what the hub defends and what it does not |
| Design spec | how it is built and why |
| Smoke checklist | what has been verified against real agents |
| Changelog, Contributing | releases and how to contribute |
Coding agents that work on this repository follow AGENTS.md and
docs/agent-notes/.
The first idea came from agent-bridge, which lets Claude Code and Codex talk to each other. agent-hub has since grown into a different system with its own goals and shares no code with it.
MIT