Companion agent
Companion Hub ships with a first-party AI agent ecosystem. The Choose your AI agent step of the onboarding wizard lets you pick OpenClaw (an open-source agent for coding and computer use) or Hermes (an advanced reasoning assistant for your tools, memory, and notifications), and configures models, remote access, and tool integration automatically. You can skip the step and add an agent later from the App Store.


OpenClaw
OpenClawΒ is a self-hosted personal AI assistant with:
- Web-based chat interface
- Headless browser automation
- Tool and MCP integration with Hub
Install it from the App Store as OpenClaw WebCLI (ci-openclaw). Hub gives it the chat model, embedding model, and context size it resolved for your hardware, along with any cloud provider keys you saved in Settings β AI. OpenClaw supports OpenAI, Anthropic, Google Gemini, and other providers.
On a Hub install, ci-openclaw automatically receives Hub MCP credentials and loads the bundled ci-hub plugin on startup β no manual MCP configuration required. The agent can call Hub tools such as hub_list_installed_apps as soon as the container starts.
Hermes
Hermes is a messaging AI assistant available as a first-party marketplace app (ci-hermes). It ships a web terminal and dashboard, plus a messaging gateway for platform integrations (Slack, Discord, and more). Select it during the Onboarding wizard if you prefer its interaction model, or install it later from the App store.
On a Hub install, ci-hermes automatically registers mcp_servers.hub in its config against the Streamable HTTP endpoint (β¦/api/mcp) with Bearer auth, exposing all Hub hub_* tools alongside any optional Companion Memory MCP. The block carries no transport: key β the agentβs default Streamable HTTP client is correct, and a stale transport: sse line from an older install is removed on the next configuration pass.
OpenClaw and Hermes side by side
What this page documents for each agent. A blank cell means the page does not cover that point, not that the agent lacks it.
| Capability | OpenClaw | Hermes |
|---|---|---|
| Recommended for | Coding and computer-use tasks | Advanced reasoning |
| Marketplace app | OpenClaw WebCLI (ci-openclaw) | ci-hermes |
| Interface | Web-based chat | Web terminal and dashboard |
| Headless browser automation | β | |
| Messaging gateway (Slack, Discord, and more) | β | |
| Hub MCP wiring on install | Automatic: receives Hub MCP credentials and loads the bundled ci-hub plugin at startup | Automatic: registers mcp_servers.hub against β¦/api/mcp with Bearer auth |
| LLM provider key entered in its own setup UI | OpenAI, Anthropic, Google Gemini, and others | |
| Selectable in the onboarding wizard | β | β |
Companion Memory has its own chat
You do not need a separate agent app to talk to your memory.
Companion Memory ships a Chat
surface of its own, enabled by default, which runs against a local model and can call the same intent
tools it publishes over MCP β so it answers from your own graph rather than from a general modelβs
guesses. Its default chat model is gemma4:e4b; you can point it at a different served model, or at
an OpenAI-compatible endpoint instead of Ollama, from Settings β Model on the memory server.
OpenClaw and Hermes are for the jobs that chat is not: coding, computer use, messaging gateways, and running unattended.
Local vs cloud models
Agents can use:
- Local models through the engine you chose in Settings β AI: Ollama, vLLM, oMLX, or Lemonade
- Cloud providers (OpenAI, Anthropic, Google, GitHub Copilot)
Hub detects hardware and recommends models during setup. See AI and inference for Ollama installation, GPU setup, and standardized inference variables.
Remote access for agents
During onboarding, choose how to reach your agent remotely:
- Private VPN β reach your Hub from your other devices over Tailscale
- Web β a private link you can open in any browser, through the Cloudflare Gateway (requires CI Account pairing)
MCP server
Hub exposes an MCP (Model Context Protocol) server at /api/mcp that agents can connect to. It speaks Streamable HTTP and offers about 80 hub_* tools for installing, configuring, backing up, and monitoring apps. MCP is enabled by default β the server loads automatically unless you explicitly set MCP_ENABLED=false.
No API key is created for you. Credentials are minted explicitly from Settings β Security, and the key is shown once at creation β enabling MCP and holding a working credential are separate steps. Each key also has a capability: Read-only, Read & write, or Read, write & delete, which decides what its tools may change.
The Settings β MCP tab shows whether the server is enabled, its endpoint, how many tools it offers, and how many sessions are connected. It also lists your keys, lets you browse the tool catalog, and lists the MCP server apps you have installed. You can run a tool from the catalog with JSON arguments to see what it does. Destructive tools ask you to confirm first.
Connecting an agent you already run β your own OpenClaw, Hermes, or Claude Code β is covered in Connect an existing agent, including choosing a keyβs capability.
The server stays on unless MCP_ENABLED is false. cihub mcp setup, cihub mcp shutdown, and cihub mcp config set or print that variable in the env file of the current folder (.env.local by default), so they apply to a source checkout. On an installed Hub they donβt read or change the Hubβs own env file. Check status in Settings β MCP, and list your keys with cihub api-key list.
Agent apps with hub_integration.mcp_client: true in their manifest automatically receive these in their environment:
| Variable | Value |
|---|---|
HUB_URL | Internal Hub base URL β http://ci-hub:5002 on an appliance; append /api/β¦ to reach the API |
HUB_MCP_URL | Streamable HTTP MCP endpoint, path included β http://ci-hub:5002/api/mcp |
HUB_MCP_API_KEY | Bearer token for authenticating to the MCP server. Hub creates it for this app and revokes it on uninstall |
HUB_WAKE_SECRET | Secret used for app wake / heartbeat signaling |
An app with hub_integration.mcp_client: true publishes its host port on 127.0.0.1 only, because it holds a key that can drive your Hub. To reach an agentβs web interface from another device, use Private VPN or Public Web.
How those pieces fit together once the agent container is running:
flowchart LR
A["Agent app<br/>ci-openclaw or ci-hermes"] -->|"HUB_MCP_URL<br/>Bearer HUB_MCP_API_KEY"| M["Hub MCP endpoint<br/>ci-hub:5002/api/mcp"]
M --> T["hub_* tools<br/>e.g. hub_list_installed_apps"]
A -.->|"optional"| CM["Companion Memory MCP"]
A -->|"local models"| O["Ollama<br/>Settings β AI"]
A -->|"cloud providers"| P["OpenAI, Anthropic,<br/>Google, GitHub Copilot"]Never run one before? Run your first agent goes from install to a working task in about 20 minutes.
Building agent apps
To publish an agent to the marketplace:
- Build a container (see Static Container Builder)
- Set
hub_integration.mcp_client: trueand optionalhub_integration.inferenceinconfig.json - Submit via ci.computer/store-submitΒ