Skip to main content
Use this guide when holo run, holo mcp, or holo acp starts but does not finish the desktop task.

Quick checklist

Run through these first. Most first-run failures are one of them.

Start with doctor

holo doctor is read-only. It checks the runtime binary, hosted or local model credentials, the agent API port, and the ~/.holo directory. Fix the first failing check before moving on.

Reproduce with the CLI

If the failure happened from MCP or ACP, reproduce the smallest version from a terminal first:
For local mode, include the same base URL and model that the host uses:
If the CLI works but the host does not, check host configuration, environment inheritance, and workspace scope.

Stop a bad run first

If HoloDesktop CLI is acting in the wrong app, typing in the wrong place, or looping, cancel the active run before debugging. The fastest stop is pressing Esc twice quickly, a global kill switch that works even while Holo holds focus. You can also press Ctrl+C in the launching terminal, or run holo stop from any terminal (holo stop --force also kills the runtime). For MCP or ACP runs, run holo stop or cancel the request from the host. To bound runs ahead of time, pass --max-steps or --max-time-s.

Check model mode

For hosted mode:
If this fails, run:
For local mode, confirm the OpenAI-compatible endpoint is reachable:
Then retry HoloDesktop CLI with --base-url. Local mode does not require holo login.

Check host environment

MCP and ACP hosts launch HoloDesktop CLI non-interactively. Hosted mode needs HAI_API_KEY available to that process, usually from ~/.holo/.env after holo login. Local mode needs:
and sometimes:
Terminal-launched hosts inherit shell exports. GUI apps launched from the Dock or Finder usually need these values in the host’s MCP or ACP environment settings. For Claude Code, also confirm you installed HoloDesktop CLI from the workspace where you are using Claude Code:
Claude Code’s MCP CLI uses local scope by default, so the MCP server registration is associated with the workspace where the command ran.

Check runtime resolution

HoloDesktop CLI resolves hai-agent-runtime in this order:
  1. hai-agent-runtime on PATH
  2. managed install under ~/.holo/runtime/
  3. download-on-first-run
Run:
The binary row shows which runtime path HoloDesktop CLI will use. If you are testing a local runtime build, put a deliberate hai-agent-runtime wrapper on PATH. Otherwise, let the CLI use the managed runtime.

Check logs

Runtime startup logs live under:
Per-run event logs live under:
To isolate one run, choose a temporary run directory:
For timing output, add:
Use runtime logs for startup, model, port, permission, and binary-resolution failures. Use run logs when the runtime started but the task failed, timed out, or acted in the wrong place.

Understand run logs

Each run writes a JSONL event log under:
For a normal holo run, the run directory usually contains events.jsonl. Observation events inside that file can include the raw screenshot HoloDesktop CLI saw as a base64 JPEG, plus metadata such as viewport size, cursor position, and sometimes accessibility data. Treat run logs as sensitive: they may contain screenshots, task text, app content, and model reasoning.
Do not post events.jsonl, ~/.holo/runs/, or screenshots from a run publicly without review. They can include what the model saw on screen, including account names, local paths, messages, documents, and secrets.
Each line is one timestamped runtime event. The exact JSON shape is diagnostic and may change, so do not build production integrations against it. Use the sequence to find where a failed run got stuck. Example event lines:
Here is a shortened real log sketch for a run whose prompt was Open Calculator and compute 2+2:
This run reached answer_event, but the event sequence shows the runtime never clicked =. That distinction matters: the runtime completed from the agent’s perspective, but the task was not fully done. Use the sequence to localize the failure: For timing summaries, prefer:
--profile reads the event log and prints per-step observe, model, tool, and total timings.

Check desktop permissions

A runtime that starts but cannot observe the screen or click is almost always a permissions problem. Grant permissions to the process that launches HoloDesktop CLI: for CLI runs that is usually your terminal; for MCP or ACP it may be the host app. The requirements are per-platform (macOS needs Screen Recording and Accessibility; Windows needs none; Linux needs an X11 session). See Desktop permissions for the full matrix. After granting on macOS, restart the launching process; grants do not apply to an already-running runtime.

Common fixes

What’s next

Use MCP if the failure only happens inside an agent host.