One control surface — aios — and one web Control Room that install, configure, wire, run, test,
and debug five independent AI agents as a single system, from one command and one config.
opencode · hermes · openclaw · CrewAI · LifeOS (+ AIOS Hub · openclaw-os · OpenUI)
- opencode — the coding-agent engine (headless server on :4096)
- hermes — autonomous agent + web dashboard (:9119), memory, cron, learning loop
- openclaw — multi-channel messaging gateway (:18789) and plugin host
- CrewAI — multi-agent orchestration (role-based crews) on :4788, with a tool to call other agents
- LifeOS — shared skills/identity mounted into the agents
Glued together by:
- AIOS Hub — the Control Room at :8787: talk to everything, broadcast, live status, and the
interconnect bus that lets agents call each other. (
aios_hub.py, stdlib.) - openclaw-os — openclaw's generative-UI dashboard (a plugin), embedded in the Control Room
- OpenUI — generative-UI standard (https://www.openui.com), mounted into every agent
"One file" in practice = one control script (
aios) + one dashboard (the Hub) + one config (aios.config.yaml) + one secrets file (.env). You can't merge multiple runtimes into a single file; this is the faithful version — one command + one Control Room that make all five work together.
cd "C:\Users\Zayn\Desktop\The AI OS"
.\aios.ps1 setup # install toolchains + deps, create .env, render config, build, wire
# → the wizard asks for your model provider + API key
.\aios.ps1 start # bring up all services
.\aios.ps1 url # print the dashboard URL, then open it in your browserPOSIX / macOS / Linux / WSL / Git Bash:
./aios setup && ./aios start && ./aios urlcmd.exe: use aios setup, aios start, … (the aios.cmd shim).
When something is off, run aios doctor first — it names the problem and the exact fix.
┌──────────────────────────────────────────────────┐
│ 💬 AIOS Hub — the Control Room :8787 │ talk to everything
│ chat · broadcast · live status · interconnect │
└──┬─────────────┬─────────────┬───────────────┬─────┘
┌───────────┘ ┌───────┘ ┌─────┘ ┌─────┘
┌─────▼──────┐ ┌───────▼──────┐ ┌─────▼──────┐ ┌─────▼───────┐
│ opencode │ │ hermes :9119 │ │ openclaw │ │ CrewAI :4788│
│ :4096 │ │ autonomous │ │ :18789 │ │ crews + │
│ coding │ │ memory·cron │ │ (hosts │ │ ask_peer │
└────────────┘ └──────────────┘ │ openclaw-os)│ └─────────────┘
agents call each other via the Hub└─────┬──────┘
┌──────▼───────────────┐
│ openclaw-os (OpenUI) │ dashboard
└───────────────────────┘
┌──────────────────────────────────────────────────────────────────┐
│ LifeOS skills + OpenUI context — mounted into every agent │
└──────────────────────────────────────────────────────────────────┘
Single source of truth: aios.config.yaml + .env → rendered into each project's native config
Single control surface: ./aios <command> → state kept under .aios/
The Control Room: http://127.0.0.1:8787/ → aios_hub.py (stdlib)
Model config flows one way: you set the provider + key once in .env
(AIOS_LLM_PROVIDER, AIOS_LLM_API_KEY). aios setup maps it to each project's own variable
(OPENROUTER_API_KEY / ANTHROPIC_API_KEY / OPENAI_API_KEY) and injects it at start — and the Hub +
CrewAI also get the raw AIOS_LLM_* — so all five agents share one key. Change it in one place, re-run
aios setup, done.
The interconnect: every service is started with each peer's URL (AIOS_OPENCODE_URL, AIOS_HERMES_URL,
AIOS_OPENCLAW_URL, AIOS_CREWAI_URL, AIOS_HUB_URL), so agents can reach each other through the Hub.
CrewAI ships an ask_peer tool; the Hub exposes POST /api/relay for the rest.
hermes and openclaw overlap (both are gateways). By design they run as separate services
on separate ports, each toggleable in aios.config.yaml. Default division of labor:
openclaw = channels + dashboard, hermes = autonomous jobs + memory + cron, opencode = coding engine.
| Command | What it does |
|---|---|
aios setup |
Install toolchains + deps, run the secrets wizard, render native config, build openclaw + the dashboard, mount LifeOS skills, wire the dashboard plugin. Idempotent. |
aios setup --force |
Re-run the secrets wizard (backs up the old .env). |
aios setup --skip-install |
Fast config-only setup (no dependency install/build). |
aios setup --non-interactive |
No prompts; reads AIOS_* from the environment. |
aios start [svc|all] |
Start service(s), wait on health checks, keep unified logs. |
aios stop [svc|all] |
Stop service(s); kills the whole process tree (no orphans). |
aios status |
Table of each service: running/stopped/foreign, port, pid, health. |
aios doctor |
Diagnose tools, projects, config, deps, ports — with exact fixes. Non-zero on failure. |
aios test [svc|all] |
Run each project's real test suite; aggregated summary. |
aios test --smoke |
Health-based end-to-end check across running services. |
aios debug [svc] |
Dump resolved config, masked secrets, provider mapping, service state, logs. |
aios logs [svc] [-n N] |
Tail a service log from .aios/logs/. |
aios wire |
(Re)install the openclaw-os dashboard plugin into openclaw. |
aios update |
Reinstall deps + re-render config + re-mount skills after project updates. |
aios url |
Print the dashboard + service URLs. |
Services: opencode, hermes, openclaw (and hermes-gateway if enabled). openclaw-os runs
as a plugin inside openclaw, so it has no separate process.
| Key | Meaning |
|---|---|
AIOS_LLM_PROVIDER |
openrouter | anthropic | openai | gemini |
AIOS_LLM_API_KEY |
the key for that provider — powers all four agents |
AIOS_DEFAULT_MODEL |
default model id (e.g. anthropic/claude-opus-4.6) |
OPENCODE_SERVER_PASSWORD |
optional auth for the opencode server |
OPENCLAW_GATEWAY_TOKEN |
optional; blank = openclaw auto-generates on start |
TELEGRAM_BOT_TOKEN / DISCORD_BOT_TOKEN / SLACK_BOT_TOKEN / SLACK_APP_TOKEN |
channels (optional) |
Toggle services, change ports, set model routing, LifeOS mounting, and health URLs. Uses a small
YAML subset — 2-space indentation, simple key: value maps. See aios.config.example.yaml.
After editing, run aios setup (or aios update) to re-render.
State lives under .aios/: logs/, pids/, backups/, rendered/, openclaw/ (isolated
openclaw state dir), plugins/openclaw-os/ (staged dashboard plugin), skills/lifeos/.
| Symptom | Fix |
|---|---|
bun MISSING |
`powershell -c "irm bun.sh/install.ps1 |
uv MISSING |
`powershell -c "irm https://astral.sh/uv/install.ps1 |
.env missing / no model key |
aios setup (or aios setup --force) and enter your key |
<svc> not healthy within Ns |
aios logs <svc> — the tail shows the real error |
opencode: node-gyp / tree-sitter-powershell fails |
expected on Windows; aios installs opencode with --ignore-scripts (the server doesn't need those native modules) |
openclaw: missing dist/entry.(m)js |
openclaw needs a build; aios setup runs it. Needs ~12 GB free RAM (heap auto-sized). |
openclaw build: JS heap out of memory |
low RAM — close apps, or set NODE_OPTIONS=--max-old-space-size=<MB> and rerun pnpm build in the openclaw root |
openclaw: Invalid config … additional properties |
aios uses an isolated state dir (.aios/openclaw); your own ~/.openclaw is never touched |
openclaw: Missing config … gateway.mode=local |
aios writes .aios/openclaw/openclaw.json with gateway.mode=local during render |
plugin install: code safety scan failed … node_modules symlink |
aios installs the dashboard from a staged copy without node_modules (.aios/plugins/openclaw-os) |
port :PORT in use by a foreign process |
free it, or change the port in aios.config.yaml |
pnpm run build fails on 'rm' is not recognized |
Windows shell has no rm; aios calls esbuild directly instead of the plugin's script |
- opencode is installed with
--ignore-scripts— the server (what aios runs) works without the native TUI/LSP modules. If you want the full opencode TUI/desktop, install VS Build Tools and runbun installinopencode-dev/opencode-devyourself. - openclaw's optional
@matrix-org/matrix-sdk-cryptonative postinstall is skipped (needs a specific Node under a version manager). The core gateway, dashboard, and other channels work.
- Windows 11 (primary) or macOS/Linux/WSL. Python 3.9+ (for
aiositself — zero extra deps). - Toolchains (auto-installed by
aios setupwhere possible): bun, pnpm, uv, Node ≥20, git. - ~12 GB free RAM for the one-time openclaw build; a few GB of disk for all dependencies.