Testing Reviewer
Reviews test code for Elixir best practices - ExUnit patterns, Mox usage, LiveView testing, factory patterns. Use proactively after writing tests or during code review.
- Type
- Subagent
- Repository
- oliver-kriska/claude-elixir-phoenix
- GitHub stars
- 556
- License
- MIT
- Repo last updated
- Sep 25, 2026
- Model
- sonnet
What Testing Reviewer is
Testing Reviewer is a subagent published in the oliver-kriska/claude-elixir-phoenix repository on GitHub, which has about 556 stars. The repository describes itself as: “Claude Code plugin for Elixir/Phoenix/LiveView — 26 specialist agents, Iron Laws enforcement, and Tidewave MCP integration. Plan features with parallel research agents, execute with automatic verification, review with 4-agent parallel audits, and capture learnings as reusable knowledge.”
A subagent is a specialist assistant that Claude can hand part of a task to. It is a markdown file whose frontmatter sets a name, a description that tells Claude when to delegate, and optionally the tools and model it may use; the body becomes the subagent's own system prompt.
Because a subagent works in its own context, it keeps the main conversation focused: Claude can send a narrow job, such as a review or a specialised analysis, to Testing Reviewer and get back a compact result.
It is set up to use these tools: Read, Grep, Glob, Write. Limiting tools is a good sign: the subagent can only do what those tools allow.
How to install Testing Reviewer
Claude Code
- Download testing-reviewer.md from the repository.
- Save it to ~/.claude/agents/ to use it in every project, or to .claude/agents/ inside one project to share it through version control.
- Claude Code watches these folders, so the subagent is usually available right away. Ask Claude to use it by name, or @-mention it to make sure it runs.
Claude Cowork
- Cowork loads subagents through plugins. If the repository is packaged as a plugin marketplace, add it under Customize → Plugins → Add marketplace and install the plugin that contains this subagent.
- Otherwise, bundle the file into your own plugin's agents/ folder and upload it from Customize → Plugins.
New to extending Cowork? Our plugins guide and Customize guide explain how skills, plugins, and connectors fit together.
Inside the source file
An excerpt from plugins/elixir-phoenix/agents/testing-reviewer.md, shared under the repository's MIT license. Read the full file on GitHub.
You review Elixir test code for best practices, catching common mistakes and anti-patterns.
CRITICAL: Save Findings File First
Your orchestrator reads findings from the exact file path given in the prompt (e.g., .claude/plans/{slug}/reviews/testing.md). The file IS the real output — your chat response body should be ≤300 words.
Turn budget rules:
- First ~10 turns: Read/Grep analysis
- By turn ~12: call Write with whatever findings you have — do NOT wait until the end. A partial file is better than no file when turns run out.
- Remaining turns: continue analysis and Write again to overwrite with the complete version.
- If the prompt does NOT include an output path, default to .claude/reviews/testing.md.
You have Write for your own report ONLY. Edit and NotebookEdit are disallowed — you cannot modify source code, which upholds Review Iron Law #1.
Iron Laws — Flag Violations Immediately
- ASYNC BY DEFAULT — async: true unless tests modify global state
- SANDBOX ISOLATION — All database tests use Ecto.Adapters.SQL.Sandbox
- MOCK ONLY AT BOUNDARIES — Never mock database, internal modules, or stdlib
- BEHAVIOURS AS CONTRACTS — All mocks must implement a defined @callback behaviour
- BUILD BY DEFAULT — Use build/2 in factories; insert/2 only when DB needed
- NO PROCESS.SLEEP — Use assert_receive with timeout for async operations
- VERIFY_ON_EXIT! — Always call in Mox tests setup
Severity Escalation for Review Integration
When spawned as part of /phx:review, escalate these to Critical (not Warning):
- New public context functions with zero test coverage
- Removed tests without replacement coverage
- New handle_event callbacks without tests
- New Oban workers without perform/1 tests
- New LiveView routes without mount/render tests
These trigger the REQUIRES CHANGES review verdict.
Review Checklist
Test Structure
- async: true present unless global state modified
- describe blocks group related tests
- Setup chain uses named functions for reuse
- Tests have descriptive names starting with "test"
Assertions
- Pattern matching used over equality checks where appropriate
- assert_receive used instead of Process.sleep
- assert_raise includes message pattern when verifying exceptions
- Negative assertions use refute not assert !
Mox Usage
- verify_on_exit! in setup
- Mock defined with behaviour (for: MyBehaviour)
- Only external boundaries mocked (APIs, email, file storage)
- expect used for verified calls, stub for defaults
- async: false when using set_mox_global()
Factory Patterns
- Factories use build() not insert() in definitions
- sequence/2 for unique fields
- Traits as composable functions
- Associations use build() in factory, insert() when needed
LiveView Testing
- render_async/1 called for assign_async operations
- Forms tested with both render_change and render_submit
- assert_redirect or assert_patch for navigation
- File uploads use file_input and render_upload
Oban Testing
- testing: :manual in test config
- use Oban.Testing, repo: Repo in test module
- assert_enqueued with worker and args
- perform_job for unit testing workers
- drain_queue for integration tests
Red Flags
# ❌ Missing async: true
use MyApp.DataCase # Should be: use MyApp.DataCase, async: true
# ❌ Process.sleep for timing
test "processes message" do
send_message()
Process.sleep(100) # FLAKY! Use assert_receive
assert processed?()
end
# ❌ insert() in factory definition
def post_factory do
%Post{author: insert(:user)} # Creates DB record even on build()!
end
# ❌ Missing verify_on_exit!
setup do
# Missing: verify_on_exit!()
…Output Format
Write review to .claude/plans/{slug}/reviews/testing-review.md (path provided by orchestrator):
# Test Review: {file_path}
## Summary
{Brief assessment}
## Iron Law Violations
{List any violations of the iron laws}
## Issues Found
### Critical
- [ ] {Issue with line number and fix}
### Warnings
- [ ] {Issue with line number and fix}
### Suggestions
- [ ] {Improvement suggestion} Before you install
- Read the whole file first. Skills, commands, and subagents are instructions Claude will follow, so make sure they match what you want.
- Check which tools, scripts, or MCP servers it uses. Local servers and scripts run with your permissions.
- Try it in a test project or a copy of your files before pointing it at real work.
- Pin the version you tested, and review changes before updating.
- Watch for instructions that fetch web content or run shell commands; those are where prompt injection risks start. See our prompt injection guide.
FAQ
What is Testing Reviewer?
Testing Reviewer is a subagent for Claude Code and Claude Cowork from the oliver-kriska/claude-elixir-phoenix repository on GitHub. Reviews test code for Elixir best practices - ExUnit patterns, Mox usage, LiveView testing, factory patterns. Use proactively after writing tests or during code review.
How do I install Testing Reviewer in Claude Code?
Download testing-reviewer.md from the repository. Save it to ~/.claude/agents/ to use it in every project, or to .claude/agents/ inside one project to share it through version control. Claude Code watches these folders, so the subagent is usually available right away. Ask Claude to use it by name, or @-mention it to make sure it runs.
Can I use Testing Reviewer in Claude Cowork?
Cowork loads subagents through plugins. If the repository is packaged as a plugin marketplace, add it under Customize → Plugins → Add marketplace and install the plugin that contains this subagent. Otherwise, bundle the file into your own plugin's agents/ folder and upload it from Customize → Plugins.
Is Testing Reviewer safe to install?
It is a third-party community resource, not reviewed by Anthropic or this site. Read the source file first, check which tools and connectors it uses, and install only from sources you trust.
Similar resources
- Skill Effectiveness Analyzer Analyzes skill effectiveness data to identify failure patterns and recommend improvements. Use after /skill-monitor flags underperforming skills. Subagent · oliver-kriska/claude-elixir-phoenix
- Security Analyzer Security audit specialist for Elixir/Phoenix - authentication, authorization, input validation, OWASP vulnerabilities. Use proactively when implementing auth or handling user input. Subagent · oliver-kriska/claude-elixir-phoenix
- Techdebt Find and report technical debt in the codebase Slash Command · oliver-kriska/claude-elixir-phoenix
- Psql Query Run ad-hoc PostgreSQL analytics queries against dev/test database Slash Command · oliver-kriska/claude-elixir-phoenix
- Verification Runner Run project-aware verification loop. Reads mix.exs to discover tools (credo, dialyzer, sobelow, ex_check), test commands, and custom aliases. Use proactively after code changes. Subagent · oliver-kriska/claude-elixir-phoenix
- Web Researcher Fetches and extracts information from web sources efficiently. Optimized for ElixirForum, HexDocs, and GitHub. Spawned by /phx:research or planning-orchestrator with pre-searched URLs or focused queries. Subagent · oliver-kriska/claude-elixir-phoenix
- Workflow Orchestrator Orchestrates the full agentic workflow cycle (plan → work → review). Internal use by /phx:full command. Subagent · oliver-kriska/claude-elixir-phoenix
- Requirements Verifier Cross-check implementation against task requirements (Linear issue, GitHub issue, plan, spec). Use proactively during /phx:review when a task ID or plan file is detected. Subagent · oliver-kriska/claude-elixir-phoenix