> ## Documentation Index
> Fetch the complete documentation index at: https://hub.hcompany.ai/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> H Platform has three products: the Agents API (managed computer-use agents, base URL https://agp.eu.hcompany.ai/api/v2 or https://agp.hcompany.ai/api/v2 for the US), the Models API (OpenAI-compatible Holo vision-language models at https://api.hcompany.ai/v1), and HoloTab (a free no-code Chrome extension that runs Holo in the user's browser, with recordable routines and schedules). The `holo` CLI (`pip install "hai-agents[cli]"`) runs Agents API agents from a terminal, drives the user's own desktop with `-a h/holo-desktop`, and serves coding agents through `holo mcp`.
> Authenticate with a bearer API key from the HAI_API_KEY environment variable. SDKs: `pip install hai-agents` (Python, `from hai_agents import Client`) and `npm install hai-agents` (TypeScript, `import { HaiAgentsClient } from "hai-agents"`). CLI: `holo`.
> Agents do work in a browser or on a desktop; describe the task as an imperative instruction. To run a task quickly, prefer the pre-built agent `h/web-surfer-flash`. Read results from the session's `latest_answer` after it reaches a terminal status.
> Sessions are the unit of work; wait for a terminal status (completed, failed, timed_out, interrupted) before reading the answer. Use webhooks or the `changes` long-poll endpoint to follow progress.

# Find and fix a UI bug with Claude Code

> Use the holo desktop agent through MCP from Claude Code to test a running app, fix the source, and verify the UI.

Claude Code edits your code but cannot use a running app like a user, so it hands UI testing to the `h/holo-desktop` agent through `holo mcp`.

[HoloDesktop: QA-testing an app with Claude Code](https://www.youtube-nocookie.com/embed/O2NYO_Awosw?rel=0\&modestbranding=1)

Claude Code ships a UI change, the desktop agent catches the regression, Claude Code fixes it and verifies again.

Nimbus Desk is a small support dashboard in the [`holo-desktop-cli`](https://github.com/hcompai/holo-desktop-cli) repository. Its spec says that setting `Status` to `Open` on the Tickets page shows exactly `#2042`, `#2040`, and `#2036`. The app ships a plausible-looking bug: the filter compares each ticket's `status` object to the selected string.

### 1. Start Nimbus

```bash theme={"system"}
git clone https://github.com/hcompai/holo-desktop-cli
cd holo-desktop-cli/examples/software_qa
npm install
npm run dev
```

The app runs at `http://localhost:5173`. Credentials are on the login page: `demo@nimbus.test` / `holo-qa-1`.

### 2. Wire holo into Claude Code

With [`holo` installed](https://hub.hcompany.ai/agents-api/cli#install), sign in and install from another terminal, then open Claude Code from the Nimbus folder:

```bash theme={"system"}
cd holo-desktop-cli/examples/software_qa
holo login
holo mcp install claude-code
claude
```

Claude Code loads the project's `.claude/skills/holo-qa/SKILL.md` skill. It picks a spec from `qa/`, writes a self-contained task, and calls `run_agent(task, agent="h/holo-desktop")`.

### 3. Ask for a change, plus QA

```text theme={"system"}
Add a Priority dropdown beside the Status dropdown on the Tickets page, with
options All, High, Medium, and Low.

After the change, use the local holo QA workflow to run the relevant behavioral
spec for the Tickets page. If it reports a failure, inspect the source, make
the minimal fix, and rerun the same spec once to verify the UI.

Do not stop after reporting the bug unless you cannot identify a safe fix.
```

Claude Code makes the change, then runs the `tickets-filter` spec through `run_agent` as a black-box tester. The agent reports `VERDICT: FAILED`: with `Open` selected, the table is empty.

![Nimbus Tickets page with Status set to Open and no visible ticket rows](https://mintcdn.com/hcompany/obp8xDMJm6JlRkcE/images/holo-desktop/examples/claude-code-nimbus-failed-filter.png?fit=max\&auto=format\&n=obp8xDMJm6JlRkcE\&q=85\&s=0552ac9bd3c8974e30e1fc80ffe6b9d9)

The failing state the desktop agent reports: Status is Open, but no ticket rows.

### 4. Claude Code fixes the source

From that evidence, Claude Code finds the bug in `examples/software_qa/src/pages/Tickets.jsx`:

```diff theme={"system"}
- visible = TICKETS.filter((ticket) => ticket.status === statusFilter);
+ visible = TICKETS.filter((ticket) => ticket.status.key === statusFilter);
```

With the Priority dropdown added, the final code applies both filters. The QA spec must not change to make the test pass.

### 5. The desktop agent verifies

Claude Code reruns the same spec:

```text theme={"system"}
VERDICT: PASSED

Observed:
- Status dropdown is set to Open.
- The table shows exactly #2042, #2040, and #2036.
- No Closed or Reopened tickets are visible.
- No error message appears.
```

![Nimbus Tickets page after filtering is fixed, showing three open tickets](https://mintcdn.com/hcompany/obp8xDMJm6JlRkcE/images/holo-desktop/examples/claude-code-nimbus-after.png?fit=max\&auto=format\&n=obp8xDMJm6JlRkcE\&q=85\&s=37f6701791949445e13fed683e146316)

After the fix: exactly the three open tickets.

## Check a flow that works

The desktop agent also produces evidence that a working flow still works. Nimbus ships a passing spec, `examples/software_qa/qa/chat-widget.md`: from a signed-out session, the agent signs in, opens the chat widget, asks `How do refunds work?`, and checks that the reply mentions refunds processed within 5 business days. Ask Claude Code to run it without changing source.

For CI or release checks: keep the Markdown spec stable, run the desktop agent against the built app, and store the final report plus screenshots as artifacts.

## Troubleshooting

| Symptom | Try |
| - | - |
| The app is unreachable | Confirm `npm run dev` is running and `http://localhost:5173` returns `200` |
| The agent reports a failure twice | Stop and inspect both reports. The second failure is usually a different bug or an incomplete fix |

For setup and permission errors, see [Troubleshoot](https://hub.hcompany.ai/agents-api/cli.md#troubleshoot).

## Use the pattern in your project

Write a small Markdown QA spec for one user-visible behavior, wire `holo` into Claude Code, ask for a product change, and require Claude Code to verify the affected flow with `run_agent`: fix once, verify again. It fits authenticated flows, visual regressions, settings screens, local web apps, and native apps, anywhere source code alone is not enough evidence.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.