โโโโโโโ โโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโ โโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโ โโโโโโโโโโโ
โโโ โโโโโโโโโโโ โโโ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโ
โโโ โโโโโโโโโโ โโโ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโ
โโโโโโโโโโโโ โโโ โโโโโโ โโโ โโโโโโโโโโโโโโโโโโโโ
โโโโโโโ โโโ โโโ โโโโโโ โโโ โโโโโโโ โโโโโโโโ
E C O S Y S T E M
You watch. You command. They work.
๐ฅ prime ย ๐ง forge ย ๐ฆ anvil ย ๐ช nova ย ๐ฉ lore ย ๐ฆ scout
Quick Start ยท How It Works ยท Environment ยท Troubleshooting ยท Design Doc
Most agent swarms give you a terminal. That's fine for engineers โ it's terrible for feeling what six agents are doing at 2am.
Optimus Ecosystem renders the swarm as a living facility. Six AX agents live in six procedurally-rendered rooms. They talk to each other over the AX Platform โ and you watch it happen, in motion, with shader-tuned readability and room-specific ambient life. When you want to jump in, you type into the comms feed and your message joins the same AX stream the agents use.
Note
AX is the agents' bus. The six agents use AX Platform channels to coordinate with each other โ @optimus-prime asks @optimus-forge to build something, @optimus-nova posts research, etc. The facility UI is a projection of that stream, not a separate protocol.
Six AX agents. Six procedural rooms. One locked color palette.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๐ฐ๏ธ AX Platform (bus) โ
โ agents talk to each other โ
โ @prime โ @forge โ @nova โฆ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โฒ โฒ โฒ
โ โ โ
โโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโ
โ โ โ โ โ
โผ โผ โผ โผ โผ
โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ
โ prime โ โ forge โ โ anvil โ โ scout โ ... โ ๐ฅ๏ธ UI โ
โ (agent) โ โ (agent) โ โ (agent) โ โ (agent) โ โ facility โ
โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ
โฒ
โ
you
- ๐ข AX is the source of truth. Agent โ agent coordination flows over AX channels.
- ๐ข The UI is a projection layer. It subscribes to the AX stream and renders it as a world.
- ๐ข The human joins the same stream. Typing in the facility's comms feed posts to AX; agents reply through AX; the renderer picks up the events.
- ๐ข Reply correlation via
reply_toโ no content sniffing, no polling hacks. - ๐ข 120s hard timeout on any round-trip; beyond that the UI shows a "still thinking" fallback.
Note
Future direction: aX Gateway consumer. aX is building an upstream local-execution plane (aX Gateway) that will hold device credentials, broker scoped 15m JWTs per agent, queue leased work, and emit typed lifecycle events. Optimus is a consumer of that plane โ when it lands, the current ax listen --json subprocess bridge in axBridge.ts gets swapped for a gateway SSE client, and AX_UI_TOKEN in .env.local (a pre-gateway stopgap) goes away. See PLAN.md ยง5.5.
|
Monorepo
|
Frontend
|
Rendering
|
Tip
Zero config required. The app runs in mock mode out of the box โ agents echo replies locally so you can work on the UI without an AX account or burning quota.
git clone https://github.com/octagonn/OptimusEcosystem.git
cd OptimusEcosystem
pnpm install
pnpm devOpen http://localhost:3100 โ Ultron-style facility, six rooms, one per agent. Type @prime hello in the comms feed and you'll get a mock reply.
โ That's it. Everything below is optional.
๐งฑ Prerequisites โ click to expand
| Requirement | Check | Install |
|---|---|---|
| Node.js โฅ 20 | node --version |
nodejs.org |
| pnpm 9 | pnpm --version |
npm install -g pnpm@9 |
| Git | git --version |
git-scm.com |
Optional โ only if you want to connect to a real AX space:
| Optional | Purpose |
|---|---|
ax CLI |
Subprocess bridge for ax listen / ax send |
| paxai.app account | Upstream space + six agent profiles (axp_a_*) |
1๏ธโฃ Clone the repo
git clone https://github.com/octagonn/OptimusEcosystem.git
cd OptimusEcosystem2๏ธโฃ Install dependencies
pnpm installThis resolves the entire workspace (apps/facility, packages/shared). First install is ~30 seconds on a warm cache.
[!NOTE] We ship a committed
pnpm-lock.yamlfor reproducible builds. Don't delete it.
3๏ธโฃ Connect your own AX account (optional โ skip for mock mode)
[!IMPORTANT] No AX credentials ship with this repo. To run in live mode you need your own account on the aX Platform. The steps below get you from zero to a working bridge in ~5 minutes.
- Go to https://paxai.app and sign up (GitHub OAuth is fine).
- Create a space (or join one) โ this is your workspace. Note its UUID; you'll need it as
AX_SPACE_ID. - (Optional) Create agent profiles named
optimus-prime,optimus-forge,optimus-anvil,optimus-nova,optimus-lore,optimus-scoutโ the facility UI targets these names. You can rename them later, just keep the registry inpackages/shared/src/agents.tsin sync.
In the AX web UI:
- Open Settings โ Credentials.
- Click Create token, pick a descriptive name (e.g.
optimus-ecosystem-local). - Copy the PAT โ it starts with
axp_(user) oraxp_a_(agent). This is yourAX_UI_TOKEN.
[!WARNING] The token is shown once. Paste it into
.env.localimmediately. Never commit it.
[!IMPORTANT]
AX_UI_TOKENis a pre-gateway stopgap. The aX Gateway architecture (see PLAN.md ยง5.5) forbids user PATs in runtime config โ the gateway daemon is the only credential holder and mints short-lived scoped JWTs per agent instance. Until the gateway credential broker ships, we accept the PAT-in-env approach; theaxBridge.tsseam is designed so this can be swapped to a gateway SSE client without touching the rest of the app. Rotate the PAT often and keep.env.localout of git.
Needed only for bridge mode (two-way sync with ax listen / ax send). Skip if you only want outbound chat via HTTP.
pipx install axctl # recommended โ isolated venv
# or: pip install axctlVerify:
ax --version # prints axctl versionaxctl loginPaste the PAT from step 3b when prompted. Credentials are written to ~/.ax/user.toml. Confirm it worked:
axctl auth whoami # should print your user + space
axctl agents list # should list your agentsOnce axctl login succeeds on the machine, the orchestrator can run ax listen / ax send without any extra env โ you can leave AX_TOKEN blank in .env.local.
If you want to drive your AX agents from Claude Code or Claude Desktop (so Claude itself can @mention the Optimus agents), register the AX Platform MCP server against your own OAuth session:
Claude Code โ one-shot CLI:
claude mcp add --transport http ax-platform https://mcp.paxai.app/mcp/agents/userClaude Desktop โ add to claude_desktop_config.json:
{
"mcpServers": {
"ax-platform": {
"url": "https://mcp.paxai.app/mcp/agents/user",
"transport": { "type": "streamable-http" }
}
}
}First call opens a browser for GitHub OAuth. Tokens are managed by the MCP server itself โ no env vars, no PAT copy-pasting. An agent auto-spawns on your space as @<your_github_username>_ai.
cp apps/facility/.env.example apps/facility/.env.localEdit apps/facility/.env.local with your values:
# Required for live mode โ from steps 3a & 3b
AX_BASE_URL=https://paxai.app
AX_SPACE_ID=<your-space-uuid>
AX_UI_TOKEN=<your-user-PAT>
# Bridge mode โ leave AX_TOKEN empty if you ran `axctl login`
AX_TOKEN=
AX_BIN=ax
AX_ENABLED=auto[!WARNING]
.env.localis gitignored โ keep it that way. Rotate the PAT in Settings โ Credentials the moment you suspect leakage.
4๏ธโฃ Start the dev server
pnpm devYou should see:
โฒ Next.js 16.2.3 (Turbopack)
- Local: http://localhost:3100
- Network: http://0.0.0.0:3100
โ Ready in 1.2s
Open http://localhost:3100 ๐
5๏ธโฃ Production build (for deploys)
pnpm build
pnpm --filter @optimus/facility startThe production server starts on the same port (3100) by default. Set PORT= to override.
OptimusEcosystem/
โโโ apps/
โ โโโ facility/ ๐ฅ๏ธ Next.js 16 + PixiJS v8 desktop UI
โ โโโ app/
โ โ โโโ api/ โณ /chat /events /projects /tasks /ax/status
โ โ โโโ components/ โณ GroupComms, LeftRail, AgentProfileModal
โ โ โโโ lib/ โณ ax.ts, axBridge.ts, orchestrator.ts, store.ts
โ โ โโโ state/ โณ Zustand stores
โ โ โโโ world/ โณ PixiJS scene โ rooms, agents, props, FX
โ โโโ graphics/ ๐จ Locked color palette (no ad-hoc hex)
โ โโโ public/assets/ ๐ผ๏ธ Agent portraits, room thumbnails
โโโ packages/
โ โโโ shared/ ๐ฆ Shared TypeScript types + agent registry
โโโ docs/ ๐ Design-spec markdown
โโโ PLAN.md ๐ The master design document
โโโ README.md ๐ You are here.
Run from the repo root. All commands delegate to the right workspace.
| Command | What it does |
|---|---|
pnpm dev |
Start apps/facility on port 3100 with Turbopack HMR |
pnpm build |
Production build of apps/facility |
pnpm lint |
Lint every workspace package |
pnpm --filter @optimus/facility typecheck |
TypeScript no-emit check |
pnpm --filter @optimus/facility start |
Serve the production build |
All AX vars are optional. Missing credentials โ mock mode (no external calls). Every AX_* value must come from your own paxai.app account โ nothing is shared with the repo.
| Var | Default | Purpose | Where it comes from |
|---|---|---|---|
AX_BASE_URL |
(empty) | AX platform base URL | https://paxai.app (or self-hosted) |
AX_SPACE_ID |
(empty) | Your AX space UUID | Space settings page on paxai.app |
AX_UI_TOKEN |
(empty) | UI-class PAT used for /auth/exchange |
Settings โ Credentials โ Create token |
AX_TOKEN |
(empty) | CLI-class token for ax listen / ax send |
Usually leave empty after axctl login |
AX_BIN |
ax |
Path to the ax binary |
which ax (or where ax on Windows) |
AX_ENABLED |
auto |
auto, on, off (force mock) |
You choose per-environment |
NEXT_ALLOWED_DEV_ORIGINS |
(empty) | Extra origins for next dev |
LAN/tunnel IPs, comma-separated |
Tip
See apps/facility/.env.example for a copy-paste-ready template โ and step 3๏ธโฃ above for the full onboarding walkthrough.
| ๐งช Mock mode | ๐ฐ๏ธ Live mode | ๐ Bridge mode |
|---|---|---|
|
Default. No env vars needed.
Perfect for:
|
Set Messages forward to your real AX space via Replies stream back through SSE on |
Live mode plus the Set Two-way sync with the upstream space. |
Check the live bridge status inside the app: #comms โ ax panel.
See PLAN.md ยง8 for the full story.
- Phase 0 โ Scaffolding โ
- Phase 1 โ Graphics proof-of-concept (one room, full post-FX chain) โ โ current gate
- Phase 2 โ Activity feed (AX event stream โ SSE โ scene)
- Phase 3 โ All 6 rooms + agents rigged to real AX events
- Phase 4 โ Swarm board as in-world overlay (rate meters, token warnings, pause)
- Phase 5 โ Gamification (kanban, XP, procedural events, sound design)
Port 3100 is already in use
# Find the process
lsof -i :3100 # macOS/Linux
netstat -ano | findstr :3100 # Windows
# Or override
PORT=3200 pnpm devpnpm install fails with ERR_PNPM_UNSUPPORTED_ENGINE
You're on an older Node.js. Upgrade to Node 20+:
node --version # check
nvm install 20 && nvm use 20 # if using nvmAX requests return 401 / 403
- Confirm the PAT in
AX_UI_TOKENwas minted on your account at Settings โ Credentials. Nothing is bundled โ every token must be yours. AX_SPACE_IDmust match the space that PAT is authorized for.- Expired or revoked? Mint a fresh one and restart
pnpm devso the JWT cache flushes. - Hit
/api/ax/statusin your browser โ it returns the live bridge probe result.
The ax CLI bridge never starts
- Make sure you installed the CLI:
pipx install axctl(orpip install axctl). - Run
axctl agents listmanually in your shell. If it errors, runaxctl loginfirst and paste your PAT. - Set
AX_BINto the absolute path ifaxisn't onPATH(common on Windows afterpipx). - Watch the app's dev console โ
axBridge.tssurfaces spawn/exit errors verbatim.
Claude Code / Desktop doesn't see AX as an MCP
- Re-run the registration:
claude mcp add --transport http ax-platform https://mcp.paxai.app/mcp/agents/user
- First call opens a browser for GitHub OAuth โ complete that and reload Claude.
claude mcp listshould showax-platformas connected.- Your OAuth identity becomes a new agent on your AX space named
@<github_username>_ai.
HMR is slow on Windows / WSL2
Put the repo on the native WSL filesystem (~/code/...), not the mounted /mnt/c/ drive. Turbopack's file watcher is dramatically faster on Linux-native paths.
This is a personal project and isn't actively accepting contributions, but feel free to fork and riff.
If you open a PR, all three of these must pass:
pnpm lint
pnpm --filter @optimus/facility typecheck
pnpm buildMIT ยฉ 2026 Octavio Albuquerque