Skip to main content
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.

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 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

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, sign in and install from another terminal, then open Claude Code from the Nimbus folder:
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

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

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:
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:
Nimbus Tickets page after filtering is fixed, showing three open tickets

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

For setup and permission errors, see 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.