Qwen Code E2E Testing
QwenLM/qwen-code
Guides end-to-end testing of the Qwen Code CLI in headless mode with real model calls, MCP test servers and inspection of raw API traffic.
Run bot acceptance tests to validate MCP tools work correctly from a real AI agent's perspective.
$ npx skills add homeassistant-ai/ha-mcp --skill bat-adhoc -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install homeassistant-ai/ha-mcp bat-adhoc --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/homeassistant-ai/ha-mcp.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/bat-adhoc .claude/skills/bat-adhoc && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "bat-adhoc" agent skill from https://github.com/homeassistant-ai/ha-mcp/tree/master/.claude/skills/bat-adhoc into .claude/skills/bat-adhoc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bat-adhoc", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/homeassistant-ai/ha-mcp/tree/master/.claude/skills/bat-adhocType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add homeassistant-ai/ha-mcp --skill bat-adhoc -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install homeassistant-ai/ha-mcp bat-adhoc --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/homeassistant-ai/ha-mcp.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/bat-adhoc .agents/skills/bat-adhoc && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "bat-adhoc" agent skill from https://github.com/homeassistant-ai/ha-mcp/tree/master/.claude/skills/bat-adhoc into .agents/skills/bat-adhoc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bat-adhoc", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add homeassistant-ai/ha-mcp --skill bat-adhoc -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install homeassistant-ai/ha-mcp bat-adhoc --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/homeassistant-ai/ha-mcp.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/bat-adhoc .cursor/skills/bat-adhoc && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "bat-adhoc" agent skill from https://github.com/homeassistant-ai/ha-mcp/tree/master/.claude/skills/bat-adhoc into .cursor/skills/bat-adhoc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bat-adhoc", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/homeassistant-ai/ha-mcp.git --path .claude/skills/bat-adhoc--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add homeassistant-ai/ha-mcp --skill bat-adhoc -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install homeassistant-ai/ha-mcp bat-adhoc --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/homeassistant-ai/ha-mcp.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/bat-adhoc .gemini/skills/bat-adhoc && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "bat-adhoc" agent skill from https://github.com/homeassistant-ai/ha-mcp/tree/master/.claude/skills/bat-adhoc into .gemini/skills/bat-adhoc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bat-adhoc", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install homeassistant-ai/ha-mcp bat-adhocInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add homeassistant-ai/ha-mcp --skill bat-adhoc -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/homeassistant-ai/ha-mcp.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/bat-adhoc .github/skills/bat-adhoc && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "bat-adhoc" agent skill from https://github.com/homeassistant-ai/ha-mcp/tree/master/.claude/skills/bat-adhoc into .github/skills/bat-adhoc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bat-adhoc", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add homeassistant-ai/ha-mcp --skill bat-adhoc -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install homeassistant-ai/ha-mcp bat-adhoc --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/homeassistant-ai/ha-mcp.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/bat-adhoc .opencode/skills/bat-adhoc && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "bat-adhoc" agent skill from https://github.com/homeassistant-ai/ha-mcp/tree/master/.claude/skills/bat-adhoc into .opencode/skills/bat-adhoc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bat-adhoc", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
bat-adhocRun bot acceptance tests to validate MCP tools work correctly from a real AI agent's perspective.
Bat Adhoc is an agent skill from homeassistant-ai/ha-mcp. Run bot acceptance tests to validate MCP tools work correctly from a real AI agent's perspective. Use when testing PRs, detecting regressions, or verifying tool changes end-to-end with Claude/Gemini CLIs.
Its SKILL.md is about 1.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA, covering End-to-end testing and MCP servers. The repository describes itself as: The Unofficial and Awesome Home Assistant MCP Server. The licence is MIT.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit b274a93. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
BashReadWriteFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
uvFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use uv, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Bat Adhoc loads about 1.4k tokens when it runs. Until then it costs about 54 tokens; SKILL.md has 506 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Bash, Read, WriteAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from homeassistant-ai/ha-mcp at commit b274a93, republished under its MIT licence (© homeassistant-ai). 506 words, ~1,382 tokens.
.claude/skills/bat-adhoc/SKILL.md (or your agent's skills folder).Bot acceptance testing validates that MCP tools work correctly from a real AI agent's perspective. You design test scenarios dynamically, run them via tests/uat/run_uat.py, and evaluate results.
uv run python tests/uat/run_uat.pyall_passed per agent. If true, you're done.results_file for full output, stderr, raw JSON--branch master to compareThe runner returns a concise summary to stdout (saves context when all passes):
{
"results_file": "/tmp/bat_results_abc123.json",
"agents": {
"gemini": {
"all_passed": true,
"test": {
"completed": true,
"duration_ms": 8100,
"exit_code": 0,
"num_turns": 5,
"tool_stats": { "totalCalls": 4, "totalSuccess": 4, "totalFail": 0 }
},
"aggregate": {
"total_duration_ms": 15300,
"total_turns": 12,
"total_tool_calls": 9,
"total_tool_success": 9,
"total_tool_fail": 0
}
}
}
}num_turns, tool_stats (per phase) for fine-grained comparisonoutput (plus tool_trace when tool calls were logged); a failed phase also includes stderr when it is not emptyresults_filecat <<'EOF' | uv run python tests/uat/run_uat.py --agents gemini
{
"setup_prompt": "Create a test automation called 'bat_error_test' with a time trigger at 23:59 and action to turn on light.bed_light.",
"test_prompt": "Try to get automation 'automation.nonexistent_xyz'. Report if the tool signaled an error or returned a normal response. Then get automation 'automation.bat_error_test' and report its structure.",
"teardown_prompt": "Delete automation 'bat_error_test' if it exists."
}
EOFRun the same scenario twice from the branch checkout and compare stats. --branch master installs ha-mcp from master on GitHub; omitting --branch runs the local code, which also covers unpushed commits:
# Baseline: master
uv run python tests/uat/run_uat.py --scenario-file <scenario.json> --branch master --agents gemini
# Target: local code
uv run python tests/uat/run_uat.py --scenario-file <scenario.json> --agents geminiTo compare a pushed branch that is not checked out, pass --branch <branch> for the target run too.
Compare these metrics:
Primary (decide pass/fail on these):
aggregate.total_tool_calls vs total_tool_failSecondary (report but don't decide on these alone):
aggregate.total_tool_calls, aggregate.total_turns — directional signal, not conclusive (agent exploration varies between runs)aggregate.total_duration_ms — noisy due to network, cache misses, server load. Only flag large (>2x) regressions.Robustness tip: Ask the same task in different ways (variation testing) to check if results are consistent across phrasings.
Each scenario invocation costs API credits (one per agent per phase). Design scenarios efficiently:
When /bat-adhoc is invoked with arguments:
If arguments contain a scenario description, generate the JSON scenario and run it:
/bat-adhoc test automation create with sunrise trigger then modify to sunset→ Generate appropriate scenario JSON and execute
If --help or no arguments, show this help text.
Otherwise, treat $ARGUMENTS as instructions for what to test and design+run the scenario accordingly.
For complete CLI reference and output format, see tests/uat/README.md.
© homeassistant-ai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/bat-adhoc of homeassistant-ai/ha-mcp.
Open the folder on GitHubat commit b274a93
Bat Adhoc next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Bat Adhoc this skillhomeassistant-ai/ha-mcp | 5k | — | ~1.4k | Automated safety check: Notes | MIT | |
| Qwen Code E2E TestingQwenLM/qwen-code | 28k | — | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| Glance TestDebugBase/glance | 156 | — | ~827 | Automated safety check: Pass | MIT | |
| Edt MCP Build TestDitriXNew/EDT-MCP | 296 | — | ~1.4k | Automated safety check: Pass | AGPL-3.0 | |
| Tauri Dev MCP Bridgejerrywu001/cc-sessions-viewer | 396 | — | ~1.4k | Automated safety check: Warn | MIT | |
| Edt MCP E2E TestingDitriXNew/EDT-MCP | 296 | — | ~1.3k | Automated safety check: Pass | AGPL-3.0 |
QwenLM/qwen-code
Guides end-to-end testing of the Qwen Code CLI in headless mode with real model calls, MCP test servers and inspection of raw API traffic.
DebugBase/glance
Run E2E browser tests on any web application using Glance MCP.
DitriXNew/EDT-MCP
How to build the EDT-MCP Eclipse plugin (Tycho/Maven) and run its unit and e2e tests, plus the test conventions for this repo.
jerrywu001/cc-sessions-viewer
Launches a Tauri app's dev build with the MCP bridge compiled in, so an agent can take screenshots, read the live DOM, click real buttons and call real backend commands.
DitriXNew/EDT-MCP
How to write/run the AUTOMATED black-box e2e suite (tests/e2e/) that covers every EDT-MCP tool (62 today) against a live server with git-fixture isolation, happy + negative + error-quality coverage…
PostHog/wizard
Drive the PostHog wizard headlessly against a throwaway app through wizard-ci MCP tools, inspect decisions, and capture the real TUI.
homeassistant-ai/ha-mcp
Review a contribution PR for safety, quality, and readiness.
homeassistant-ai/ha-mcp
Deep analysis of a single GitHub issue with codebase exploration, implementation planning, and architectural assessment.
homeassistant-ai/ha-mcp
Implement a GitHub issue end-to-end — create a worktree branch, implement the feature with tests, create a draft PR, then iteratively resolve all CI failures and review comments until the PR is clean.
homeassistant-ai/ha-mcp
Manage your own GitHub pull requests — check CI status, inline review comments, PR-level comments, resolve review threads, fix issues, and iterate until all checks pass and threads are resolved.
homeassistant-ai/ha-mcp
Compare MCP tool behavior between target and baseline versions using pre-built and custom stories with diff-based triage.
homeassistant-ai/ha-mcp
Find merged PR authors missing from README and update the contributors list after approval
Categories
Run bot acceptance tests to validate MCP tools work correctly from a real AI agent's perspective. Bat Adhoc is an agent skill from homeassistant-ai/ha-mcp. Run bot acceptance tests to validate MCP tools work correctly from a real AI agent's perspective.
Bat Adhoc fits situations like: detecting regressions; verifying tool changes end-to-end with Claude/Gemini CLIs.
Run `npx skills add homeassistant-ai/ha-mcp --skill bat-adhoc -a claude-code`. Or copy the skill folder (.claude/skills/bat-adhoc in homeassistant-ai/ha-mcp) into .claude/skills/bat-adhoc in your project. Claude Code loads it when a task matches its description.
Run `npx skills add homeassistant-ai/ha-mcp --skill bat-adhoc -a codex`. Or copy the skill folder (.claude/skills/bat-adhoc in homeassistant-ai/ha-mcp) into .agents/skills/bat-adhoc in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add homeassistant-ai/ha-mcp --skill bat-adhoc -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/bat-adhoc, .gemini/skills/bat-adhoc, .github/skills/bat-adhoc and .opencode/skills/bat-adhoc in your project.
Going by SKILL.md and its folder, Bat Adhoc needs the command-line tools its instructions call (uv). Our summary lists: Python 3. Its frontmatter pre-approves these tools: Bash, Read, Write.
SKILL.md contains no URLs. Its commands use uv, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Bat Adhoc is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.4k tokens (SKILL.md is roughly 5.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Bat Adhoc: Qwen Code E2E Testing (QwenLM/qwen-code, 28k stars), Glance Test (DebugBase/glance, 156 stars), Edt MCP Build Test (DitriXNew/EDT-MCP, 296 stars) and Tauri Dev MCP Bridge (jerrywu001/cc-sessions-viewer, 396 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
homeassistant-ai (a GitHub organization) maintains it in homeassistant-ai/ha-mcp, which has 5,015 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 11, 2026.
Source: homeassistant-ai/ha-mcp on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.