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.
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.
Start Nimbus
http://localhost:5173. Credentials are on the login page: demo@nimbus.test / holo-qa-1.Wire holo into Claude Code
With Claude Code loads the project’s
holo installed, sign in and install from another terminal, then open Claude Code from the Nimbus folder:.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").Ask for a change, plus QA
tickets-filter spec through run_agent as a black-box tester. The agent reports VERDICT: FAILED: with Open selected, the table is empty.
The failing state the desktop agent reports: Status is Open, but no ticket rows.
Claude Code fixes the source
From that evidence, Claude Code finds the bug in With the Priority dropdown added, the final code applies both filters. The QA spec must not change to make the test pass.
examples/software_qa/src/pages/Tickets.jsx: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, wireholo 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.