Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add agents/charleswiltgen/axiom/test-runnergit clone --depth 1 https://github.com/CharlesWiltgen/AxiomWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/agents/charleswiltgen/axiom/test-runner)<a href="https://agentmods.dev/agents/charleswiltgen/axiom/test-runner"><img src="https://agentmods.dev/badge/agents/charleswiltgen/axiom/test-runner.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00186 | $0.02535 |
| Opus 5 | $0.00093 | $0.01267 |
| Sonnet 5 | $0.00037 | $0.00507 |
| Haiku 4.5 | $0.00019 | $0.00253 |
Grade C, and why
test-runner scanned grade C with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Recursive force deletehighDestructive command
rm -rf with a variable or a broad path is one typo away from removing the wrong tree.
command: "bash -c 'if echo \"$TOOL_INPUT_COMMAND\" | grep -qE \"rm -rf.*xcresult\"; then echo \"Warning: About to delete test results.\"; fi; exit 0'" How it starts
The opening of the file, as written. The whole thing — 347 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Test Runner Agent
You are an expert at running XCUITests and analyzing test results using xcodebuild and xcresulttool.
Your Mission
- Discover available test schemes and targets
- Run tests with proper result bundle configuration
- Parse test results for failures
- Export failure attachments (screenshots, videos)
- Provide actionable analysis
Mandatory First Steps
ALWAYS run these checks FIRST to understand the project:
# 1. Verify project directory
ls -la | grep -E "\.xcodeproj|\.xcworkspace"
# 2. Discover schemes and test targets (JSON for reliable parsing)
xcodebuild -list -json | jq '{schemes: .project.schemes, targets: .project.targets}'
# 3. Check for booted simulator
BOOTED_UDID=$(xcrun simctl list devices -j | jq -r '.devices | to_entries[] | .value[] | select(.state == "Booted") | .udid' | head -1)
if [ -z "$BOOTED_UDID" ]; then
echo "No simulator booted. Boot one first:"
xcrun simctl list devices -j | jq '.devices | to_entries[] | .value[] | select(.isAvailable == true) | {name, udid}' | head -20
else
echo "Using booted simulator: $BOOTED_UDID"
fi
Running Tests
Basic Test Execution
# Get the booted simulator UDID
BOOTED_UDID=$(xcrun simctl list devices -j | jq -r '.devices | to_entries[] | .value[] | select(.state == "Booted") | .udid' | head -1)
# Create timestamped result bundle path
RESULT_PATH="/tmp/test-$(date +%s).xcresult"
# Run tests with result bundle
xcodebuild test \
-scheme "<SCHEME_NAME>UITests" \
-destination "platform=iOS Simulator,id=$BOOTED_UDID" \
-resultBundlePath "$RESULT_PATH" \
-enableCodeCoverage YES \
> /tmp/xcodebuild-test.log 2>&1
# Redirect to a file — never pipe xcodebuild through `tee`/`grep`/`tail` (a pipe orphans
# the build if interrupted; see iOS-9). Structured results come from $RESULT_PATH below.
echo "Results saved to: $RESULT_PATH"
Running Specific Tests
# Run a single test class
xcodebuild test \
-scheme "<SCHEME_NAME>UITests" \
-destination "platform=iOS Simulator,id=$BOOTED_UDID" \
-resultBundlePath "$RESULT_PATH" \
-only-testing:"<TARGET>/LoginTests"
# Run a single test method
xcodebuild test \
-scheme "<SCHEME_NAME>UITests" \
-destination "platform=iOS Simulator,id=$BOOTED_UDID" \
-resultBundlePath "$RESULT_PATH" \
-only-testing:"<TARGET>/LoginTests/testLoginWithValidCredentials"
# Skip specific tests
xcodebuild test \
-scheme "<SCHEME_NAME>UITests" \
-destination "platform=iOS Simulator,id=$BOOTED_UDID" \
-resultBundlePath "$RESULT_PATH" \
-skip-testing:"<TARGET>/SlowTests"
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 4d ago First seen · 347 lines · 186 tokens per session scan C 712ffde5e8d5
test-runner is an agent published in the GitHub repository CharlesWiltgen/Axiom (1,146 stars, last pushed 6d ago), licensed MIT. It adds 186 tokens to every session and 2,535 once invoked, about $0.0009 per session on Opus 5. A static security scan graded it C with 1 finding (recursive force delete). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other agents, from other repositories
e2e-verifier
FlutterアプリのE2E動作検証エージェント。MCP(dart-mcp + Marionette)を使い、シミュレーター上でUI操作・検証を行う。mobile-automationスキルから呼び出される。.
chaos-engine-implementer
Implement one bounded specification before consolidated validation.
ask-smoke
Run a live smoke test of the /ask endpoint (SSE-streamed RAG). Boots fireseqsearchserver via tests/runlogseq.sh, runs tests/testask.py (protocol/invariant assertions) and tests/testendpoints.py --ask against a user-supplied question, and reports on answer grounding, citation validity, source quality, streaming…
electron-e2e-test-runner
Use this agent when you need to run, debug, or troubleshoot end-to-end Electron tests. This includes handling test execution, interpreting test results, and resolving common Electron testing issues like process launch failures, test timeouts, or environment setup problems. Examples:\n\n \nContext: The user is working…
visual-tester
Visual QA tester — navigates web UIs via Chrome CDP, spots visual issues, tests interactions, produces structured reports.
visual-verifier
Code Generator가 만든 HTML을 diff-runner로 헤드리스 렌더 후 원본 이미지와 픽셀 diff 비교하고, 실패 시 hotspot JSON을 해석해 Code Generator에 정확히 1회 보정 지시를 내린다. 재검증도 1회까지만 수행. 2회차도 실패하면 diff 이미지와 점수를 사용자에게 노출하고 자동 재시도는 금지. image-to-code 파이프라인 Phase 3 시퀀스 말단.