What this teaches
The Claude Code example shows HoloDesktop CLI inside an agent host. This example removes the host and shows the CLI as a standalone desktop operator:- the CLI starts the run;
- the harness prepares the desktop state;
- HoloDesktop CLI observes receipts and controls apps visually;
- verifiers decide whether the run actually worked;
- run artifacts explain what happened step by step.
Before you run it
This is a real desktop automation run, not a tiny hello world. It may take several minutes. On a first run, macOS or the apps may show permission and onboarding dialogs. During the run:- do not use the machine for other work;
- expect Finder, LibreOffice, Preview or QuickLook, and Mail to come to the foreground;
- allow app permissions if macOS asks for access to Desktop files;
- do not click Send in Mail if you take over manually.
--dry-run first.
Prerequisites
From theholo-desktop checkout, install the workspace:
- LibreOffice installed at
/Applications/LibreOffice.app; - Mail available locally;
- HoloDesktop CLI configured for hosted mode or local model mode;
- the managed
hai-agent-runtimeinstalled, or available onPATH.
--base-url and --model to the demo command.
Install the demo skill
The demo includes a small HoloDesktop CLI skill that gives the agent task-specific guidance for expense-report work. Install it once:--force to overwrite the installed copy.
Pin the fixtures
The receipts and spreadsheet template come from OSWorld fixtures hosted on Hugging Face. The manifest pins every downloaded file bysha256, so the verifier checks known inputs rather than a drifting dataset.

Dry-run first
Run a dry-run to see the app launch plan, focus target, prompt, and runtime options without letting HoloDesktop CLI control the desktop:Run the demo
Start the real run:What HoloDesktop CLI does
Before HoloDesktop CLI starts acting, the harness copies files into predictable Desktop locations:
- inspect each receipt or invoice using QuickLook or Preview;
- identify what was bought and the grand total;
- append a row with Description, Category, Type, and Amount;
- record expenses as negative amounts;
- save the spreadsheet;
- create a new Mail draft to
expenses@example.com; - set the subject to
Expenses; - attach the saved spreadsheet;
- leave the message in Drafts.

| Description | Category | Type | Amount |
|---|---|---|---|
| Grocery | Food | Expense | -186.93 |
| Cash Out | Other | Expense | -3670.00 |
| Soup | Food | Expense | -5.70 |


How verification works
The example does not rely on a human watching the desktop and deciding whether it looked right. After the run, deterministic verifiers inspect the artifacts. Theledger_rows verifier opens the spreadsheet with openpyxl and checks:
- exactly one new row exists per staged receipt;
- the new amount values match the pinned receipt totals;
- amounts are compared sign-insensitively with a one-cent tolerance.
mail_draft verifier uses AppleScript to check:
- there is a draft addressed to
expenses@example.com; - the subject is
Expenses; - the draft has at least one attachment.
Run artifacts
Each run writes a timestamped directory under:| File | What it is for |
|---|---|
events.jsonl | One runtime event per line: observations, model reasoning, tool calls, and step timing. |
task.json | The task prompt, result, status, verification results, and run metadata. |
runs/summary-demos.csv | One summary row per demo run, including verification status. |
events.jsonl still records what HoloDesktop CLI saw and did.
After verification, staged Desktop files are moved into:
Troubleshooting
If the run gets distracted by another app, stop it and rerun from a quiet desktop session. HoloDesktop CLI controls the visible desktop, so foreground apps matter. If LibreOffice shows a welcome or file-access dialog, allow it and let the run continue. These first-run dialogs are normal on a fresh machine. If Mail shows a privacy or onboarding dialog, complete the prompt before expecting the Mail verifier to pass. If fixture download fails, rerun:events.jsonl to see whether HoloDesktop CLI read the receipt incorrectly, typed into the wrong cell, or was interrupted before saving.
Adapt the pattern
The reusable pattern is:- Stage known inputs in predictable locations.
- Launch the apps the task needs.
- Focus the app where HoloDesktop CLI should begin.
- Give HoloDesktop CLI a concrete desktop task.
- Verify the output with code.
- Keep the run artifacts for debugging and evaluation.
