README.md

September 7, 2026 · View on GitHub

xBot xBot

Your own AI coworkers, on your own Mac.

Create agents, give them a computer, watch them work, and take the wheel when you want to. Bring any model — OpenAI, Anthropic, Google, xAI, or a model running locally through Ollama. Your agents, their files, and their browsers stay on this Mac.

In v1 your conversation history is the exception: it is stored by CopilotKit, the service xBot's engine is built on. ADR-0007 says why, and onboarding says so before you type a key.


What it is

xBot is a native macOS app. You download a .dmg, drag it to Applications, and open it. It walks you through everything else.

Behind the app, a full agent platform runs in containers on your Mac: each agent gets its own computer with its own browser, its own files, and only the tools you grant it. Every action an agent takes is decided against a policy before it happens and recorded after.

You never open a terminal. You never edit a configuration file. You never read a log.

Why it exists

Two good things existed separately.

OpenBot is a serious, well-built, self-hosted agent platform — per-agent isolation, an action gateway, a real audit trail. It is also a developer template: you clone a repository, copy an .env, fill in credentials, and run a shell script.

Grok Bot showed what the consumer shape of this looks like — a chat app with a rail of agents, a live view of what each one is doing, and settings you can actually find.

xBot is the fusion: OpenBot's engine, a native Mac experience, and no lock-in to any single model vendor.

Status

In development. The native Mac client ships rail, conversation, composer, panel, command palette, onboarding (five steps), in-window settings (General, Models, Agents, Computer, Usage, Updates, Advanced), agent settings (model picker, plugins reach, handoff grants), plugins admin webview — all wired to RuntimeController and HTTPEngineClient when the engine is running. The app pulls a pinned ghcr engine digest from manifests/engine-stable.json on start. M2's model router has been driven live against a real vendor — per-run selection, a deployment fallback, an openai-compatible endpoint in the same process, and a bogus model name rejected by the vendor rather than silently substituted — and the hop the product actually uses, through copilot.ts and the AG-UI client, is covered by a test that asserts on the posted body. A second live vendor, M6 VM validation, and M7 signing/notarization remain open.

Start at docs/README.md. The current milestone table is in docs/12-roadmap.md.

Run the Mac app locally

cd apps/mac && swift run          # debug: stub engine, full UI, no Docker
cd apps/mac && XBOT_USE_RUNTIME=1 swift run   # debug: real runtime path — Start in the UI
cd apps/mac && swift test         # 235 unit tests (SwiftPM)
scripts/build-engine-image.sh     # dev: build xbot/engine:1 for the runtime path
scripts/check-engine-health.sh    # dev: read-only /health check once the engine is up
scripts/generate-app-icon.sh      # compile xBot.icon → Assets.car + xBot.icns
scripts/bundle-mac-app.sh          # wrap release binary in XBot.app (after swift build -c release)

Release builds always use the runtime path. On start the app fetches the pinned engine manifest (manifests/engine-stable.json) and pulls ghcr.io/masteryoav/xbot-engine@sha256:…. For local development, build xbot/engine:1 with scripts/build-engine-image.sh or set XBOT_ENGINE_IMAGE=xbot/engine:1. Bearer token and encryption key are generated on first run and held in the Keychain. First Start can take up to ~2 minutes while Postgres initializes. If a start fails mid-boot, docker rm -f xbot-engine clears the container for a clean retry (volumes are kept).

Documentation

VisionWhat we are building, for whom, and what we are not building
ArchitectureServices, ports, data flow
The OpenBot forkWhat we inherit and what we have to change
Model providersPer-agent model selection across every vendor
The Mac appSwift target layout and module boundaries
OnboardingThe first-run flow, screen by screen
Container runtimeDriving containers without the user knowing
Design systemTokens, type, motion, materials
UI specificationEvery screen
SecurityKeys, secrets, isolation, what never gets written down
PackagingSigning, notarization, updates
RoadmapMilestones
Launch checklistWhat is left between here and a download, in order
Engine environment mappingApp settings → container env vars
DecisionsADRs — read these before disagreeing with anything above

Built on OpenBot

xBot's engine is a fork of OpenBot by CopilotKit, used under the MIT licence. Copyright © 2026 CopilotKit. See NOTICE.

Licence

MIT.