Your own team of AI bots, in a chat app.
Every bot in the sidebar is a real agent — Claude or Codex running locally under the hood — with its own personality, its own model, its own cloud computer, and its own connected apps. Talk to them like contacts. Watch them work. Approve what matters.
Apple silicon · signed & notarized · all releases
One assistant in one box is the wrong shape for agents. OpenMausBot treats AI as a messaging app: a roster of bots you chat with — each with its own personality, memory of its thread, model, computer, and apps — built on the agents you already have:
- Bring your own agents. Bots run on the
claudeandcodexCLIs installed on your Mac — your existing logins and subscriptions, no new accounts, no proxy in the middle. - Local first. One small harness server on
127.0.0.1owns every agent process. Transcripts, keys, and events live in~/.openmausbot, not a cloud. - Agents with hands. Each bot can get a real computer — a cloud Linux desktop it drives while you watch live, or your own Mac — plus 500+ apps through Composio Connect.
Also in the box: streaming replies with tool-run activity chips · native macOS dictation from the composer mic (on-device Apple speech recognition — desktop app) · SupaMaus cursor mascots with role-aware expressions · screenshots of the bot's work folded into the transcript.
Two processes. The app holds no transports of its own — it sends typed commands over HTTP and folds one SSE event stream into state. The harness server owns every agent process and normalizes each provider's native protocol into one canonical runtime event stream (logged per-thread as NDJSON).
flowchart LR
subgraph app ["App — React + Tailwind (5199)"]
UI[Chat UI · model picker · computer panel]
end
subgraph server ["Harness server (127.0.0.1:8799)"]
REG[Driver registry] --> BUS[Event bus → SSE]
BROKER[Permission broker]
end
subgraph agents ["Agents on your Mac"]
CL[claude CLI]
CX[codex CLI]
end
UI -- "HTTP commands" --> server
BUS -- "one SSE stream" --> UI
REG --> CL & CX
CL & CX -- "MCP" --> BROKER
server -- "Box API" --> BOX[("Cloud computer<br/>box.ascii.dev")]
server -- "Composio Connect" --> APPS[("Gmail · Slack · GitHub · …")]
| Layer | Where | What it does |
|---|---|---|
| Drivers | server/drivers/ |
One per provider: Claude and Codex over their local CLIs (stream-JSON / JSON-RPC), plus a cloud-computer agent. Unknown drivers degrade to "unavailable", never crash the fleet. |
| Harness | server/harness/ |
Registry (configs → live instances) and the fan-in event bus every client folds. |
| API | server/index.ts |
Bots, turns, approvals, model catalog, computer lifecycle, connectors, config — HTTP + SSE. |
| App | src/ |
The chat shell. Server-backed store, one reducer, zero client-side transports. |
| Desktop | electron/ |
macOS shell: dictation helper (SFSpeechRecognizer), local screen capture, CUA bridge. |
Easiest: download the latest .dmg, drag it to Applications, open it. The harness server is embedded — no setup.
From source:
git clone https://github.com/milind-soni/OpenMausBot && cd OpenMausBot
pnpm install
pnpm dev:server # harness server → 127.0.0.1:8799
pnpm dev # app → http://127.0.0.1:5199
pnpm dev:desktop # or the Electron shellRequirements: macOS, Node 24+, pnpm, and at least one agent CLI — claude
or codex — installed and logged in. They appear in the model picker
automatically.
Optional, pasted once in App Settings (gear in the sidebar footer):
| Key | Unlocks |
|---|---|
Composio Connect key (ck_…) |
The connected-apps marketplace |
Composio API key (ak_…) |
The full 500+ app catalog with official logos |
| Box token (box.ascii.dev) | Cloud computers for your bots |
pnpm typecheck # app + server
pnpm build # typecheck + production buildEarly but real — the loop works end to end: message → agent → streamed reply → tools → approvals → computer use. Rough edges to expect: routines (scheduled tasks) are a placeholder, sidebar sections aren't built yet, and Windows/Linux shells haven't been attempted (the harness itself is portable Node).
Contributions welcome — the driver SPI in server/contracts.ts is deliberately
small; adding a provider is one file in server/drivers/ plus a one-line registration.





