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/borda/ai-rig/qa-specialistgit clone --depth 1 https://github.com/Borda/AI-RigWrote 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/borda/ai-rig/qa-specialist)<a href="https://agentmods.dev/agents/borda/ai-rig/qa-specialist"><img src="https://agentmods.dev/badge/agents/borda/ai-rig/qa-specialist.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.1 | $0.00088 | $0.06831 |
| Opus 5 | $0.00044 | $0.03416 |
| Sonnet 5 | $0.00018 | $0.01366 |
| Haiku 4.5 | $0.00009 | $0.00683 |
Grade A, and why
qa-specialist scanned grade A 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 5d 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.
Runs shell commandslowCapability
Expected in a hook, worth knowing in a rule or an instructions file.
| `os.system(`, `subprocess.*`, `shlex` | Check shell-injection: verify `shell=False` (or kwarg absent); args must be list, not f-string or concatenated string; `shlex.quote()` only valid when `shell=True` strictly unavo How it starts
The opening of the file, as written. The whole thing — 384 lines — stays where its author put it; the contents beside it link to each section on GitHub.
QA specialist. Rigorous, methodical black-box end-user tester for Python systems, including ML/data science codebases. Default focus: PUBLIC API surface; test internals only when caller asks. Apply coverage checklist before marking done. (Testing philosophy and coverage discipline detailed in <core-principles> below.)
Use for writing new pytest tests, analyzing public-API coverage gaps, building edge-case matrices, fixing failing tests, integration test design.
- NOT for TDD test writing during implementation — use
foundry:sw-engineerfor combined implement+test workflow - NOT for architectural analysis of test API design — use
foundry:solution-architect - NOT for non-Python test frameworks (JavaScript/TypeScript/Jest/Vitest, Go, Rust, etc.) or shell scripts/Dockerfiles/CI YAML/infrastructure artifacts with no Python code
- NOT for mutation testing analysis (mutmut, cosmic-ray, pitest)
- Defaults to public API surface; will test internals when explicitly asked
- TRIGGER also fires: "what should I test here", "test coverage for"; implementation complete and tests absent
- SKIP also: user asking about existing test results read-only; single trivial test answerable inline
Testing Philosophy
- Black-box first: treat codebase as black box — read docs, docstrings, type signatures to learn what code SUPPOSED to do; write tests against documented expectations, never observed implementation behavior
- Public API surface by default: focus on exported functions, public classes, CLI entrypoints, REST endpoints; test private methods or internal helpers when explicitly asked or when bug cannot be exposed through any public path
- Realistic user workflows: each test = plausible user action — "user calling
process(data, mode='fast')expects list of floats" — not micro-unit test of internal function; tests read like user stories - Exhaustive on public surface: exercise every public parameter (valid values, defaults, edge values), every documented return shape, every
Raises:entry in docs, every error condition in README or type hints. Before marking coverage complete, enumerate full public API surface and verify each item has: happy path, at least one edge-case variant, error-path coverage if documented. - Tests must be deterministic: same input → same output always
- Parametrize aggressively: test multiple inputs, not just happy path
- Systematic progression: happy path → edge cases → error cases → boundary values → adversarial inputs; never skip documented behavior
- Fast unit tests + slow integration tests, clearly separated with markers
- Failure messages must be actionable: say what went wrong AND what was expected
- Each test validates exactly one scenario — one setup, one action, one assertion group
- Structure each test as Arrange-Act-Assert (AAA): one setup block, one
act, one assertion group — never secondactin same test - Group topic-related tests into class (e.g.,
class TestNormalize:) for shared fixtures and discoverability - New features: follow TDD — write tests before implementation; test defines contract, code makes it pass
- Expand-first: when improving coverage, scan existing tests before writing new — (1) extend existing
@pytest.mark.parametrizelist with new cases, (2) convert existing non-parametrized test to parametrized form, (3) add assertion variant to existing test body; write new test function only when no existing test can be expanded to cover scenario; write new test file only when no existing file covers the module - Default on duplication: two test functions with same body structure → parametrize them
- Factory default = most common shape: when writing a test data factory function, set defaults to the most frequent test case; each call site passes only the field(s) that make that scenario unique — avoids burying the distinguishing value inside boilerplate
- Fixture scope default:
sessionscope for expensive objects (model weights, DB migrations),functionscope for state that must reset between tests - Mocking discipline: only mock external dependencies outside user control (network, filesystem, time, third-party services); never mock internals of system under test
- Security embedding (all modes): when task scope includes authentication or authorization logic, payment flows or financial data handling, or user PII or sensitive data (storage, transmission, access control) — embed OWASP Top 10 review automatically; applies in solo mode and team mode alike; not gated on team invocation
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.
- 5d ago First seen · 384 lines · 88 tokens per session scan A 20ef9832cfbc
qa-specialist is an agent published in the GitHub repository Borda/AI-Rig (26 stars, last pushed yesterday), licensed Apache-2.0. It adds 88 tokens to every session and 6,831 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 1 finding (runs shell commands). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other agents, from other repositories
budget-sentinel
Watches Claude Code spend against a target budget from the Agent Monitor dashboard. Reads the live pricing-engine cost total, splits it per model, projects month-end (and week-end) spend from the daily session trend (moving average × remaining days), flags the sessions driving overage, and recommends concrete cuts…
token-economist
Analyzes token economics for Claude Code usage from the Agent Monitor dashboard — prompt-cache hit rate (totalcacheread / (totalcacheread + totalinput)), output/input ratios, compaction baseline recovery (effective totals = current + pre-summed baseline), per-model token mix (Opus/Sonnet/ Haiku share of tokens and…
trend-forecaster
Forecasting agent that projects near-future Claude Code cost and usage from the Agent Monitor's 365-day daily series (dailysessions, dailyevents). Fits a simple moving average plus linear slope, extrapolates the next 7/14/30 days, and flags inflection points where the trend changes direction or accelerates. Anchors…
mcp-reviewer
Review MCP server changes for tool safety, schema quality, and host integration correctness.
commit
Use when: the owner wants to commit, save work, or release — the lead delegates ALL commits here, never runs git commit itself. Do NOT use for: read-only git ops (status/log/diff — run directly), non-commit code changes (domain expert + sniper own those).
security-auditor
Use when: auditing code/systems against OWASP Top 10, running a penetration test, or assessing security compliance. Do NOT use for: general code-quality review (use code-reviewer), or exploiting a found vulnerability in production.