One terminal over every project and every agent you have running — and one manager you task in prose. It plans, spawns coders, testers and reviewers, reopens what fails, and reports READY with the PRs and the evidence. It never merges. That part stays yours.
payments-api · live
Six real Claude Code sessions, one window. Click one and every key you type goes to the session itself. Close the UI and all six keep running.
Sessions start oriented instead of cold.
A fleet on one board, working one problem.
Every session becomes a Run you can read.
the problem
Coding agents got good enough to run several at once. Nothing got good enough to govern several at once — so the human became the scheduler, the courier and the only memory in the system.
You re-explain the codebase, the conventions, and the thing you already said last week. The agent greps its way back to what it knew yesterday, and you pay for that twice — in tokens, and in the corrections you have to type again.
One agent per terminal. Five agents means five mental models and a human copy-pasting findings between them. Two coders quietly edit the same file. A tester verifies a branch nobody told it about.
When an agent does something you did not want, you cannot read back what it was shown, what it decided, or what it cost. So the same misunderstanding arrives again next sprint, and nobody can point at where it came from.
what we are actually selling
Not more agents. A place to put them where the coordination is the ambient state of a shared board rather than something a person carries between windows — and where the work stops at a gate a human owns.
getting there
The installer works out what the machine already has and installs only the gaps — uv, a private Python for the CLI alone, tmux, git, gh, Node, Claude Code — registers the repo you ran it in, wires the hooks, and offers to open the UI. Run it again and it installs nothing.
--dry-run prints every command and runs none. Or install by hand with uv tool install; that stays fully supported.
Refuses to run as root outside a container, uses sudo only for system packages and one command at a time, and never edits your shell profile beyond what uv does itself.
A PowerShell one-liner sets up WSL2 and runs the same script inside it — the fleet gives each agent a real tmux pane, and Windows has no tmux.
shellcheck, shfmt, dash and ash, across five containers, with one cell run as a normal user under sudo — the primary case, not the root shortcut.
Exit codes mean something: 0 installed, 1 a fatal step failed, 2 installed but a health check came back unexpectedly amber.
the product
Press Start manager, then talk to it exactly as you would to any Claude session. It reads the orientation aisquare handed it, turns your intent into tasks that carry an objective, a why, acceptance criteria and boundaries, and spawns the agents the work needs.
the thing most tools get wrong
Every agent is a Claude Code process running as a window on a tmux server that is ours alone — your own tmux sessions, config and prefix key are never touched. Click an agent and you are in the session: the same rendering, the same keys, the same permission prompts.
The UI is a view over that tmux server and the board. Reopen asq and it re-attaches to whatever it finds; fleet attach shows the same session from any terminal at full fidelity.
Claude Code's own bindings must not be swallowed, so the UI drops Textual's defaults that would steal them and moves its palette to F1. F12 is the one key a pane never forwards — it hands focus back to the sidebar.
Parallel coders never edit the same tree. The reviewer runs --restricted in a worktree of its own: read-only by construction, not by instruction.
▶ working, ⏸ waiting, 🔔 needs you, 💤 exited — from the same lifecycle hooks the board uses. An agent launched without them says no hooks rather than guessing.
the mechanism
A single race-tested UPDATE: exactly one winner. Leases renew from the session's hooks, so a dead session hands its work straight back to the pool.
task next hands out only work whose dependencies are done — a rollback rehearsal cannot start before the migration it rehearses.
and you can watch all of it
Each successful write prints a receipt — ✓ … seq N — and the pull side is yours any time. team verify 42 asks the board whether that sequence number is really there and exits 0 or 1; a receipt that lives on a different board is an honest not-found that names the board holding it.
the half that needs no orchestration at all
Connecting Claude Code writes five lifecycle hooks into its settings, merged carefully and never clobbering yours. From then on every session opens on a directive pointing at a structure-only skeleton of the repo, the context entries in scope, and what you have asked for in this project before.
aisquare remember "prefer pytest over unittest"Sticks everywhere, in every project.
aisquare context add "run make check" --projectSticks in this repo only.
aisquare whyWhat the last session was shown, and why.
aisquare recall "what did we decide about auth?"Across sessions and weeks, from the distilled brain.
user follows you everywhere; project is scoped to one repo. Both full-text searchable, exportable, and injected consistently.
Identity comes from the git common dir, so feature branches checked out side by side share one context pool, one snapshot and one board. Set the conventions up once.
model policy, not model roulette
claude --model silently substitutes the default when a model is not available to an account. So the harness probes, verifies the reply before trusting a rung, and caches that verdict per account for a day.
Captured from the shipping CLI. The base effort is inherited from the session you spawn the fleet from, so raising yours raises theirs with nothing to configure.
A genuine substitution walks down the ladder. An outage, an expired login or an unrecognised reply keeps your pick and labels it [unverified] — rather than quietly downgrading your manager. Nothing here ever blocks a launch.
The validator carries a +1 effort offset for one reason: a flat override that dropped everything to low would leave the gate weaker than the coder it reviews, which is not a gate.
It never executes the current repo's hooks or MCP servers, and never joins the board. A capability check should not have side effects.
Sessions report their model back and the board marks any that is off its role's ladder. Advisory by design: a missing chip means not reported, never wrong.
rate limits, and what happens at the ceiling
Sessions are per terminal, not per account — a single install runs the whole team. Connect each config directory once and bind each seat to the environment it launches with; several accounts simply mean several rate-limit pools driving one board.
The config directory alone gives a session the right credentials and the default scratch directory, silently shared — which looks correctly isolated right up until two parallel sessions collide in temp. The CLI says so, and doctor reports every connected directory separately.
A binary, a set of environment variables and extra arguments, carried through verbatim, with ~ and $VAR expanded at launch — so one binding follows you across machines with different homes.
governance · opt-in, and it never blocks a launch
Point your sessions at an AISquare Explainability workspace and each one becomes a record: what was asked, what the model answered, every tool call, the tokens and the cost — alongside your own prompts and the board events that framed the work. Two independent lanes, configured together, keyed on one session id.
Carries
How it travelsModel traffic — prompts, responses, tool calls, tokens, cost. Claude Code emits no telemetry of its own, so something has to sit in the request path, record the exchange and forward it upstream.
agent → proxy → gatewayYour prompts, board notes, task claims and session events — the human half of the record, which no proxy can see.
CLI → local spool → ship → gatewayWhich is what turns “an agent did something odd on Tuesday” into a specific transcript, at a specific sequence number, with the prompt that caused it.
If anything in the path is down, the session starts untraced and says so. Observability that can stop your developers working is not observability.
They are separate paths. Knowing which is which turns most confusion into a one-line answer.
The proxy is hosted for you by default, and self-hosting is documented for teams that would rather it were not.
what this is for
Two audiences, one record. An engineer reads a Run to find out why an agent did something. A lead reads the same Runs to answer what the fleet cost this week, which roles burn the most, and whether the instructions you keep repeating are actually reaching the sessions that need them.
Off unless you ask for it. Nothing on this slide runs for a default install.
collective intelligence · experimental, off by default
The hypothesis is narrow and testable: an agent that starts better informed explores less. So when a prompt is submitted, aisquare can ask a Collective Intelligence server whether this workspace already knows something relevant, and hand it over before the agent starts looking around.
The prompt, scrubbed at your configured redaction level; a project selector; and a git object id of the working tree, so a turn can be replayed. Nothing about scope. No credentials. Untracked files are not in it.
With the switch off there is no request, no connection and no measurable latency — and any unrecognised value of the switch is off.
what we will not claim yet
Token counts are not recorded yet — hook payloads do not carry them — so the metrics command says plainly that token savings cannot be read from it. The server is live against staging, it measures nothing, and it is a connectivity instrument. When that changes, we will show you the numbers rather than the hypothesis.
This is also where connectors land: meeting notes, tickets and design docs feeding the same knowledge base, so an agent stops assuming what “the usual way” means.
the part your engineers will ask about first
Every action the UI takes is a plain CLI command, and every one takes --json. In a pipe or under TERM=dumb you get the help page and exit 2, byte for byte, so no script ever meets a full-screen app.
Unfinished commands are hidden from --help and exit 70 saying plainly that they are not implemented — rather than half-working. What the help lists, works.
The CI server's seven JSON Schemas and their fixtures are vendored byte for byte, and every request this build can emit is validated against the server's own schema in the suite — never against our reading of it.
The store is concurrency-tested against racing parallel sessions; claims are race-tested for exactly one winner; the suite passes with every aisquare environment knob set adversarially.
A thin Typer CLI over a service layer over one SQLite store. Your team can read the whole thing, and fork it if we disappear.
Context exports to Markdown or JSON and imports from either. The board is a table in a file you own.
where this goes
The discipline in the product is the discipline in this list: nothing is claimed as shipping unless you can run it today, and nothing on the roadmap is dressed up as almost-done.
These are registered commands today: hidden from help, and honest about not being finished.
Collective Intelligence is the seam all three land on. It is live against staging, off by default, and measuring nothing yet.
Follow it in the open: issues on github.com/AISquare-Studio/aisquare-cli. The changelog says what shipped, what was wrong, and what a review found — which is the fastest way to judge whether we are the kind of team you want inside your repository.
the ask
Pick a repo with real parallel work in it. We install, register it, and run the loop on a live goal with your team in the room — then hand back the transcript, the board and the Runs, and you decide whether the fleet earned its afternoon.
A Claude Code login your developers already have, tmux 3.2+, git and gh. Nothing to deploy and no account to create.
No daemon, no server, no cloud dependency, and no traffic leaving the machine unless you switch that on deliberately.
how to judge it afterwards
Count the times a human had to carry a finding from one agent to another. The target is zero, and the board is where you check.
Look for a reopen with a reason a reviewer would have written — and then whether the next claim actually acted on it.
Open a fresh agent on the same repo and read aisquare why. It should already know what you spent the afternoon explaining.
pypi.org/project/aisquare-cli
github.com/AISquare-Studio/aisquare-cli
MIT · screens captured from the shipping UI at v0.6.0
01 / 15 · Fleet control for coding agents