Note
HoloDesktop CLI is now part of the Agents API. Since 1.0.0, holo is a thin shell over the hai-agents-python SDK's local mode: the same desktop agent, runnable from Python, from the hai CLI, or from the cloud. Keep using holo for your terminal and MCP hosts; reach for the SDK to build on it.
Tell your computer what to do. Holo gets it done. holo-desktop-cli puts H Company's Holo desktop agent on your machine, as a CLI and an MCP server. Use the hosted models, or run everything on your own hardware for full privacy.
Docs: hub.hcompany.ai/holo-desktop-cli has the setup guides, examples, troubleshooting, host integrations, and the full CLI reference.
curl -fsSL https://install.hcompany.ai/install.sh | bash # Windows: irm https://install.hcompany.ai/install.ps1 | iex
holo login
holo run "Open Calculator and compute 2+2"On first run, the hai-agent-runtime binary downloads itself to ~/.hai/agent-runtime/ (sha256-verified), and macOS asks you to grant your terminal Accessibility and Screen Recording. See holo run --help or the CLI reference for all flags.
Once the agent is driving the screen it is hard to take back control, so Holo has an out-of-band panic stop: press Esc twice quickly, or run holo stop from any terminal. holo run arms the Esc listener itself; for holo mcp, which has no terminal, holo install registers the always-on holo guard with the OS. The listener inspects Esc timing only, never keystroke content. Wayland has no global key listener; bind holo stop to a compositor hotkey.
Point --base-url at any OpenAI-compatible server and name the model it serves with --model. No holo login needed, and no screenshots, keystrokes, or app content leave your machine.
holo run --base-url http://localhost:8000/v1 --model holo4-35b-a3b "Open Safari and go to hcompany.ai"Serving configs are in docs/self-hosting.md.
Holo runs as a sub-agent of Claude Code, Cursor, Codex, and other MCP hosts: when your main agent needs to read a screen or click through an app, it delegates to Holo and gets the answer back.
holo install # every host detected on this machine
holo install cursor # one host
holo install list # see what's availableEach host gets the MCP server in its config, plus a Skill where supported, which teaches the parent when to delegate to Holo.
| id | host | skill auto-load |
|---|---|---|
antigravity |
Antigravity (Google) | — |
claude-code |
Claude Code | ~/.claude/skills/ |
claude-desktop |
Claude Desktop | — |
codex |
Codex | ~/.agents/skills/ |
copilot |
GitHub Copilot CLI | — |
cursor |
Cursor | — |
grok-build |
Grok Build (xAI) | ~/.grok/skills/ |
hermes |
Hermes | — |
openclaw |
OpenClaw | ~/.openclaw/skills/ |
opencode |
OpenCode | ~/.config/opencode/skills/ |
Holo drives one desktop: parallel MCP calls queue, and a second holo run exits while another task is driving. Stopping the turn in the host does not abort a run already executing on your machine; use the kill switch.
holo is a thin shell over the hai-agents SDK, so you can drive the same agent directly:
from hai_agents import Client
with Client.local() as client:
result = client.run_session(
agent={
"name": "holo",
"description": "Desktop agent",
"environments": [{"id": "desktop", "kind": "desktop", "host": "user_device"}],
},
messages="Tell me how many unread emails I have",
)
print(result.answer)The same agent runs in the cloud, alongside browsers and workstations, through the Agents API.
git clone https://github.com/hcompai/holo-desktop-cli && cd holo-desktop-cli
make setup
uv run holo run "Open Calculator and compute 2+2"
make check # ruff + mypy + pytestmake install-dev installs the checkout as a global holo command. See CONTRIBUTING.md.
This client is Apache-2.0-licensed. The hai-agents SDK it builds on is open source. The hai-agent-runtime binary the SDK downloads, which hosts the agent, is closed-source and distributed under H Company's own terms.
- Models: Holo on Hugging Face
- Docs: HoloDesktop CLI · Agents API · Models API
- H Company