Shipping with the Allternit Factory build. The terminal binding, team.yaml and the gizzi agents commands are the approved design and are not live yet. Hosted and Vendor bots are live today.
gizzi agents is the crew: which agents exist, which harness each one runs on, and which machine it’s on. Every agent in the Factory is a Bot: one record with a stable id. The Factory doesn’t add a second kind of agent. Bots differ in two separate ways: how a bot runs (its execution binding) and how people reach it (its channels).

Three ways a bot runs

Vendor bots carry a lane (official, channel, ui_bridge or local) and a guarantee (exact, best_effort or read_only), and they’re directed by another bot. The guarantee decides what “delivered” means for that bot. See delivery states.

Reach is separate from running

Telegram, Slack, SMS, phone calls, email and push are how people talk to a bot. They’re not a way for the bot to run. A Hosted bot can be on Telegram. A Terminal bot’s Telegram messages arrive as turns in its pane. A Vendor bot stays inside its directing bot’s phone. Channels belong to orchestration.

A Terminal bot is a full Bot

Everything that comes with a bot comes with a Terminal bot. Server-side pieces work the same for every binding. Pieces that have to live inside the harness are delivered by the engine when the pane starts, and again on re-entry (after compaction or a restart). Each one is labeled with what actually happens. Each field reports one of delivered, guidance, partial or unavailable, so a screen never claims more than the harness actually got.

team.yaml

A team is a file. gizzi agents up <team> reads it, spawns a pane for each Terminal bot, binds the Hosted and Vendor bots, and registers everyone. Teams can mix all three bindings.
Each bot is addressed as bot@team (for example builder@product-build). The pane, the thread and the node all point at the same bot id.

Presets

A preset swaps which harness or binding fills a role, without editing the team. For example, one preset can run the build role on Terminal Claude Code and another on Vendor ChatGPT.
--dry-run prints the plan: one step per bot (spawn, bind, skip or stop), with the harness, machine and reason. Run it again without --dry-run to do exactly that.

Changing a bot’s model

gizzi agents model <bot@team> <model> changes a Terminal bot’s model. The change is saved in overrides.json next to team.yaml, so your hand-written team.yaml and its comments are never rewritten. It applies the next time the bot starts. A running bot keeps its current model until then.
--restart stops the bot’s pane and relaunches it with its harness’s resume, the same way gizzi agents recover does. Hosted and vendor bots keep their model on your account; change it in the app or with gizzi agents bot.

Handing a seat to a fresh session

When a Terminal bot’s context is full, or it’s stuck, gizzi agents handoff <bot@team> gives its seat to a fresh session without losing track of the work:
  1. It saves the old pane’s last screen (and your --note) to .allternit/factory/handoffs/<bot>-<team>-<time>.md.
  2. It stops the old session. That session is marked finished, so gizzi agents recover won’t bring it back.
  3. It starts the bot fresh, in the same folder, and its first message tells it to read the handoff file.
A hosted bot’s thread hands off in the app, which opens a new window seeded with a checkpoint.

--on <computer>

--on (or a bot’s machine: in team.yaml) names one of your paired computers: a Mac, a Linux box or a VPS you paired with allternit computer pair <code>, one your organization paired, or your Allternit cloud computer. The engine checks the name against your paired computers, by name (any case) or id:
  • A name that isn’t paired is refused (exit 2), and the message lists your paired computers.
  • A computer that hasn’t joined the mesh yet is refused (exit 1).
  • Checking needs allternit-api. Without it, the step fails as transport.
How it runs. Each computer runs its own Factory engine, and your engine asks the other computer’s engine to run the bot:
  1. Your engine sends the team folder (team.yaml, CULTURE.md, bots/…) and the bots placed there.
  2. When your workspace is a git repo with an https or ssh origin, it also sends the commit you’re on.
  3. The other computer clones the repo at that commit into a workspace of its own for you and that team (~/.allternit/factory/remote-work/<you>/<team>/repo), and the bots work there. The bots push their work there as a branch, so the other computer needs its own git access to the repo.
  4. Without a repo, the bots work in a plain folder there.
From then on the bot is yours like any other:
  • gizzi agents ps shows it with that computer as its machine. Your engine asks that computer which of your bots are live.
  • orchestration send and orchestration capture reach it, and agents down <bot@team> or agents down <team> stop it there.
  • Its pane is live wherever local panes are. gizzi agents attach <bot@team> mirrors it in your terminal: you see its screen as it changes and your keystrokes go to it (ctrl+] leaves; the bot keeps running). gizzi agents wall <team> gives each of the team’s remote bots a pane on the wall that mirrors it, and closes those panes when you close the wall.
  • The app’s Factory screens show it the same way, with its terminal tile live and labeled with the computer it runs on (Desktop, ai.allternit.com and the phone layout).
Things to know:
  • The mirror redraws the other computer’s screen at its own size, about five times a second at most. Typing over the mesh is a little slower than in a local pane.
  • Bots the other computer runs aren’t registered with allternit-api from there, so they appear under your account through your engine.
  • A paired computer’s engine takes peer calls on port 3019. Desktop starts it with --peer-port 3019 when the Mac is paired, and allternit computers serve forwards that port over the mesh beside VNC. An engine started before the computer was paired starts taking peer calls within 30 seconds of the pairing.
  • Your cloud computer pairs itself, with nothing to run: it’s listed as Cloud computer (gizzi agents up product-build --on "Cloud computer"). It puts only the peer port on the mesh, never its screen (cloud computers as paired computers). If --on says it isn’t paired, open Computers once in the app so the paired list syncs.
  • Peer calls need a peer ticket from cloud-api, which goes only to the computer’s owner or a member of its organization (peer tickets). Your allternit-api asks for it and carries the call (/api/v1/computers/:id/factory-peer/*).
  • On the other computer you can only reach the bots you started there, and only in your own workspace.
The same path lets Gizzi on Windows run a team on another computer, because the pane engine is Unix-only.

Bot templates

gizzi agents templates browses Gizzi’s specialist bot templates (engineer, reviewer, DevOps, QA, product and others). list [category] [--json] prints them, create <template> makes an agent from one, and export / import move an agent between machines as a file. The templates live in Gizzi, so the engine’s own allternit-factory agents templates points you to Gizzi (exit 64). This replaces gizzi agent-hub.

Harnesses

gizzi agents harness list shows the agent CLIs on a machine (Claude Code, Codex, Kimi, Grok, Antigravity, Gizzi and others): whether each is installed, and whether Allternit’s skills, MCP server and rules are synced into it. gizzi agents harness sync brings them up to date. Discovery is local; no network calls are made. This replaces gizzi runtime.

Watching and attaching

  • gizzi agents ps lists every bot with its binding, state, current node and proof count. Running sessions are checked against the live panes on every ps, so a dead process shows as dead, never as running.
  • gizzi agents wall opens the live wall of terminals in the engine’s pane view. ctrl+b q returns you to Gizzi.
  • gizzi agents wall <team> opens the same wall with its Agents panel narrowed to that team’s running bots (the panel is titled team <name>) and focused on the first one. The narrowed view goes away when you close the wall. With none of the team’s bots running it says so (exit 2) and suggests gizzi agents up <team>. The view belongs to the shared wall session, so anyone attached to the wall at the same time sees it too.
  • gizzi agents attach <bot@team> depends on the binding. A Terminal bot opens its pane (a bot on another computer opens a live mirror of it; see --on). A Hosted bot opens its session right in Gizzi’s TUI. A Vendor bot shows its thread and ticket status, because it has no terminal.
  • gizzi agents recover shows what it would restart after a crash. --apply does it. A session qualifies when its pane is gone, it isn’t finished, and its notes sentinel (if it has one) doesn’t say status: done. Only the lead that started it can restart it (--lead <id>, else $ALLTERNIT_FACTORY_LEAD or your user name), unless you pass --as-human. The restart goes through the same spawn gate as any spawn, with the bot’s identity and WIH kept, and uses the harness’s own resume when the original launch named a session (claude --resume, codex resume, kimi --session, agy --conversation, grok --resume).
  • gizzi agents down <bot@team> stops one bot’s pane; gizzi agents down <team> stops the team’s.
On Desktop, Code mode’s terminal wall shows the same panes as xterm tiles, so a keystroke in either shows up in both.