Skip to content
Husain Bootwala
04Live

Hexstate

A whole AI engineering team that runs on the Claude Code or Codex plan you already pay for

Video · One request in chat becomes a ticket, a spec, a build, a review and a ship, with you approving in between (waits sped up and labelled)
Channel
04
Period
2026 —
Domain
Software
Role
Sole developer: product, architecture, the desktop app and its interface, the orchestration, and the agent team that now builds it

Stack

  • TypeScript
  • Claude Code CLI
  • Codex CLI
  • Electron
  • React 19
  • Hono
  • SQLite
  • Vite
  • Tailwind CSS 4
  • TanStack Query + Router
  • node-pty
  • Vitest
  • Playwright
Automated tests
118 unit files · 35 end-to-end specs

Run against a stand-in Claude CLI, so the whole pipeline is tested without spending a token

Network calls by default
Your AI CLI only

Everything else (GitHub, integrations) is opt-in, and the server binds to localhost

  1. You at a shop counter on the phone, while a laptop across the room holds four idle project foldersCountercalls · clientsNo hoursShop siteMobile appClient jobSide toolIdle
    BeforeYour projects need building. Your hours go to everything else.
  2. Seven agent hexagons work three tickets on the laptop while an approval request reaches you on your phoneZPHDATHHEX-15PRDHEX-14BuildHEX-12ReviewApprove?You, elsewhere
    AfterAn AI team builds them. You approve from wherever you are.
AI teammates built in
7
Sign-offs on every change
2
Watchdog sweep
1.5 min
Permission modes
3

A team, not a chatbot

  1. Seven agent hexagons labelled by role, inside a box marked your machine, powered by your Claude Code or Codex loginYour machineZManagerPPMHEngineerDFrontendABackendTReviewerHAssistantYour loginClaude CodeCodex
    FixSeven AI colleagues, on the Claude Code or Codex plan you already have.
  2. Two chat channels. In general you ask the manager for dark mode; in engineering the manager, engineer and reviewer work it in a thread#general#engineering@zeus add dark modeZOn it. Ticketed.HWhich shade?Z@hephaestus HEX-12HBuilt. To reviewTApprovedLater→ thread
    talkTalk to them like employees. They talk to each other the same way.
  3. A ticket pipeline in three rows: ticket, PRD, you approve; build, review, you approve; ship to mainTicketZeusPRDPrometheusApproveYouBuildHephaestusReviewThemisApproveYouShipZeus → mainNo agent approvesits own work.
    shipEvery change is a ticket: spec, build, review, and two sign-offs from you.

Manage it like a team

Ask for an update, make a suggestion, approve a spec, move the project along. The agents plan, build and review on their own, and stop wherever only you should decide.

The night shift

  1. Three agents work from night to morning; a usage limit pauses them, then they resume on their own at the resetNightMorningLimitheld,not lostZHTAuto-resumeWatchdog
    overnightThey keep working overnight, and resume on their own after a usage limit.
  2. An inbox card with three items waiting on you: approve a PRD, review a finished ticket, allow a commandInboxWaiting · 3PRDApprove HEX-14 specApproveReviewHEX-12 dark modeRun itApproveAllownpm install sharpAllowDeny
    ResultYou wake up to decisions, not to-dos.

Your plan, your machine

Each agent is a Claude Code or Codex process using the login you already have. Everything runs on your computer, with no account and no telemetry.

Hexstate is live, and it is used every day to build its own repo.

Read the engineering detail

A team, not a chatbot

Seven built-in roles: Zeus the manager, Prometheus the product manager, Hephaestus, Daedalus and Atlas as engineers (general, frontend, backend), Themis the reviewer and Hermes the personal assistant. You can hire more by describing the role, and Hexstate drafts the agent.

Talk to them like a team

You post in #general. The manager asks what it needs to know, then takes the work to the team channel and reports back. Agents talk to each other in threads, one clear handoff at a time. When one needs you, its question appears in your channel with a link to the thread.

Every change is a ticket

The manager tickets it, the PM writes the spec, an engineer builds it in its own git worktree, and the reviewer checks it and merges it to a sandbox branch. You approve the spec and the result, and only then does the manager promote it to main.

The night shift

When a usage limit hits, the work is held, not dropped. At the reset the held agents are woken one by one, the interrupted turn is sent again, and #general gets a note that the window reopened. If the app was closed through the reset, it asks you on the next launch instead of resuming on its own.

Nothing ships without you

Agents ask before they run risky commands, and they can’t approve their own work. Three permission modes set how much they do unasked: ask for everything, auto-allow safe work, or allow everything (only while you watch).

How it works underneath

One process per agent. Each agent is a long-lived headless claude process (or codex, per turn) with its own workspace, persona, skills and memory. An idle agent costs nothing: tokens are spent only while a turn runs.

Routing that doesn’t explode. A message wakes exactly one agent, the first one tagged. Status updates and “done” messages wake nobody, and messages that arrive mid-turn are batched, up to five per turn. That keeps a seven-agent team from talking itself into a token bill.

Hooks as the control channel. Claude Code’s own hooks call back to the local server. Risky tool calls wait for your answer in the app, an agent that ends a turn without replying is told to reply, and a resumed session is reseeded with its ticket and memory.

A watchdog that thinks only when it must. Deterministic checks run every 1.5 minutes while the chat is active and back off to 3, 6 and 15 minutes when it goes quiet. An LLM turn runs only for chat findings like an unanswered question. In a scripted stall scenario that took the watchdog from 7 LLM turns to none.

Shared ticket context. Agents on the same ticket share a working log, so a handoff doesn’t restate everything in chat.

Local by default. The server binds to 127.0.0.1. The only outbound traffic is the AI CLI you already use, plus integrations you choose to turn on. Analytics and hosted login were removed.

Stack. A Node 22 and Hono server on SQLite with 28 route groups. A React 19, Vite and Tailwind 4 interface on TanStack Query and Router. An Electron shell that forks the server and ships as a Windows installer.

Tested without tokens. A fake Claude CLI streams scripted replies, so 118 unit-test files and 35 Playwright end-to-end specs exercise the full pipeline for free.

Media

Overview diagram. On the left, the seven built-in agents as hexagons with their roles. In the middle, an engineering-channel thread in which the manager assigns a ticket, the engineer reports it built and the reviewer approves it. On the right, the ticket pipeline from ticket to ship, with the two steps that wait for your approval highlighted.
Diagram · The team, the conversation and the pipeline on one screen
The ticket drawer for HEX-13, "Saved addresses at checkout", marked Your review. The review box offers Request changes and Approve, shows the change running locally with a link to open it, and a run log of the dev server starting. Below are the assignee (Daedalus, frontend), priority, the approved PRD and the description. The Agents panel on the right lists Zeus, Prometheus, Hephaestus, Daedalus, Atlas, Themis and Hermes with their status and model.
Screen capture · A ticket waiting for your review, running from the sandbox branch, with Approve and Request changes
The #engineering channel with the HEX-12 ticket thread open on the right. Zeus acknowledges the request and asks Prometheus for a PRD, Prometheus posts it, the system records its approval, Zeus assigns it to Daedalus, Daedalus reports it ready for review, and Themis reviews it and merges it to the sandbox branch.
Screen capture · #engineering: the manager, the product manager, an engineer and the reviewer working one ticket in a thread
The Inbox, headed "waiting on you". It lists a permission request from Atlas to run an inventory-sync dry run, a ticket ready for your review, and three new mentions from Zeus. The live permission prompt for the same request sits at the bottom, with Deny, Always allow for Atlas and Allow.
Screen capture · The Inbox, everything waiting on you in one place
A "Permission needed" prompt over #general: Atlas, the backend engineer, wants to use Bash to run the checkout end-to-end tests ten times, with a countdown and Deny, Always allow for Atlas and Allow buttons. In the Agents panel Atlas shows "Awaiting permission".
Screen capture · A permission prompt, where an agent asks before it runs a command
The #general channel. The user asks Zeus for a dark mode toggle, and Zeus's reply, posted in #engineering, appears as a mirrored card with Go to thread and Reply here. Below it are the PRD approval for HEX-12, the user asking for an update, Zeus's progress reply and the notice that HEX-12 is ready for human review.
Screen capture · #general, where a teammate's reply from #engineering is mirrored to you with a link to its thread
The Usage page for the last seven days on sample data: no plan limits hit, a stacked daily bar chart of input, output, cache-write and cache-read tokens with totals and an estimated cost, and tables of turns, tokens and cost by agent and by model.
Screen capture · Usage, tokens per agent and per model, against your plan limits

How this was built

The spec sheet above lists the stack. This section covers how the work was run, which a screenshot cannot show you.

Where AI did the work

  • Built by an agent team working in parallel lanes. Each lane got a written brief before it started and worked in its own git worktree, and one integrator session merged the results.
  • Hexstate now builds itself. Its own manager, engineers and reviewer pick up tickets on this repo and take them through the same pipeline a user's project gets.
  • A fake Claude CLI that streams scripted replies lets the whole pipeline (chat, tickets, review, promotion) run in tests without spending a token.

The discipline around it

  • Three status words, never blurred: Code Complete (it compiles and passes tests), Verified (a fresh user with no seed data walked through it), Done (verified and documented).
  • Every backend route and realtime event maps to a screen in a coverage table, or carries a written reason it is agent-only. A backend change that skips the table is incomplete.
  • The agents are treated as a second user. Every feature plan answers whether the agents need to know about it, and updates their personas and skills if so.
  • Every feature has a plan, a flow test and a completion record. One tracker holds every task by ID.
  • Outbound network calls are audited into an allowlist, and analytics and hosted login were removed outright.

What stayed human

  • Architectural and product decisions are Husain's. Agents bring the options and a recommendation, and open questions wait for him in a decisions table rather than being decided.
  • The build hard-stops at each milestone for his review before the next wave starts.
  • Git stays local until he says otherwise. No agent pushes.
  • In the product itself the same rule holds. You approve every PRD, every merge to main and every risky command, and agents cannot approve their own work.

Process artifacts in the repo

CLAUDE.md
Working rules every agent reads, including the completion, coverage and agent-awareness gates
docs/TASK_BREAKDOWN.md
The single tracker, with one row per task and finding, by ID
docs/features/web-ui/COVERAGE.md
Every route and event mapped to a screen, or justified
docs/lanes/
The brief for each parallel lane, written before it launched
docs/reference/NETWORK.md
Outbound-network audit and allowlist
scripts/qa/fake-claude.mjs
Zero-token stand-in for the Claude CLI, used by the smoke and end-to-end suites