Checklist
| Check | Command or location | Success looks like |
|---|---|---|
| CLI is available | uv run holo --help | Help prints without an import or command error |
| Hosted mode is ready | uv run holo whoami | Your signed-in identity prints |
| Local mode is ready | --base-url http://localhost:8000/v1 | The CLI reaches your local OpenAI-compatible server and does not require login |
| Runtime is available | ~/.holo/runtime/ or hai-agent-runtime on PATH | First run downloads or resolves the runtime |
| Run logs are written | ~/.holo/runs/ | Per-run event logs appear after a task |
| Runtime logs are written | ~/.holo/logs/ | Runtime startup/failure logs appear when needed |
| macOS Screen Recording is granted | System Settings | The CLI can observe the screen |
| macOS Accessibility is granted | System Settings | The CLI can click and type |
| Stop works | Double-Esc or uv run holo stop | The active run stops or reports interrupted |
| App is on the primary display | Display settings / desktop layout | The CLI can see and control the app it needs |
Check the CLI
From the checkout:uv sync again from the repo root.
Check model mode
For hosted mode:--base-url to holo run instead of signing in.
For MCP or ACP local mode, make sure the host process can read:
Check the runtime
HoloDesktop CLI resolves the runtime in this order:hai-agent-runtimeonPATH- managed install under
~/.holo/runtime/ - download-on-first-run
hai-agent-runtime executable or wrapper on PATH.
Check macOS permissions
HoloDesktop CLI needs both:- Screen Recording, to observe the desktop;
- Accessibility, to click and type.
Check display layout
HoloDesktop CLI currently observes and controls the primary display. If you use multiple monitors, move the target app to the primary screen before starting a run. For important or repeatable tests, disconnect or mirror secondary displays. Multi-screen support is planned.Check stop control
During an interactive CLI run, pressEsc twice quickly to request stop. From another terminal, use:
--force kills the runtime process and should be reserved for stuck runs.