Configures mutation testing campaigns, analyzes surviving mutants, and identifies bugs exposed by testing gaps.
- GitHub stars
- 8,136
- Files
- 12
- Last commit
- Nov 11, 2026
- License
- CC-BY-SA-4.0
- Allowed tools
- 4
What does the mutation-testing skill do?
mutation-testing configures mutation testing campaigns, analyzes surviving mutants, and identifies bugs exposed by testing gaps.
Summary generated from the skill's SKILL.md.
About the mutation-testing skill
Improving test suite effectiveness by identifying gaps through mutation testing is what this skill enables. Developers use it to configure and manage mutation campaigns using mewt or muton, allowing them to analyze how well their tests detect intentional code changes. The skill routes users to specific workflows for setting up campaigns, hunting for bugs in untested code, or generating formal analysis reports based on kill rates and surviving mutants.
When an agent loads this skill, it can utilize tools like Bash, Grep, Read, and Write to interact with the command line. It helps users distinguish between genuine testing gaps and equivalent mutants by providing access to specialized references. It supports various languages including Rust, JavaScript, and Move, and can even handle specific blockchain patterns for Solidity or Solana Rust. The skill provides structured guidance for interpreting mutation severities, such as Error Replacement or Negation Removal, to help prioritize which code areas require better assertions.
What an agent can do with it
- 1Configure a mutation campaignSet up a new mutation testing project and optimize the campaign speed.
- 2Analyze surviving mutantsReview uncaught mutations to determine if they represent testing gaps or equivalent code.
- 3Find bugs in source codeUse the results of a completed mutation run to locate bugs in the codebase.
- 4Generate formal analysis reportsTransform mutation testing outcomes into a structured report with severity classifications.
Written from the skill's SKILL.md. Every use case is checked against a quote from it.
How to install the mutation-testing skill
Each command copies the skill folder into the client's skills directory. Restart the client or start a new session to load it.Install the mutation-testing skill in Plugin
/plugin marketplace add trailofbits/skills /plugin install mutation-testing@trailofbits
Install the mutation-testing skill in Claude Code
~/.claude/skills/mutation-testing/SKILL.md
$ npx degit trailofbits/skills/plugins/mutation-testing/skills/mutation-testing ~/.claude/skills/mutation-testingInstall the mutation-testing skill in Claude Code (project)
.claude/skills/mutation-testing/SKILL.md
$ npx degit trailofbits/skills/plugins/mutation-testing/skills/mutation-testing .claude/skills/mutation-testingInstall the mutation-testing skill in Codex
~/.agents/skills/mutation-testing/SKILL.md
$ npx degit trailofbits/skills/plugins/mutation-testing/skills/mutation-testing ~/.agents/skills/mutation-testingInstall the mutation-testing skill in Gemini CLI
~/.gemini/skills/mutation-testing/SKILL.md
$ npx degit trailofbits/skills/plugins/mutation-testing/skills/mutation-testing ~/.gemini/skills/mutation-testingInstall the mutation-testing skill in Claude.ai
npx degit trailofbits/skills/plugins/mutation-testing/skills/mutation-testing mutation-testing && zip -r mutation-testing.zip mutation-testing # claude.ai → Customize → Skills → + → Create skill → Upload a skill → mutation-testing.zip
Automated checks
Ran Nov 13, 2026Full report →Passed our automated checks. That is not a security audit: read the scripts before you let an agent run them. How checks work
- Source repository linked and reachabletrailofbits/skills/plugins/mutation-testing/skills/mutation-testing is public and reachablegithub.com/trailofbits/skills/tree/HEAD/plugins/mutation-tes ↗Pass
- Open source license (OSI)CC-BY-SA-4.0 is not OSI-approvedspdx.org/licenses/CC-BY-SA-4.0.html ↗Finding
- Commit or release in the last yearLast commit 2026-11-11github.com/trailofbits/skills/commits ↗Pass
- No download-and-run or credential theft in scriptsNo scripts in the skill folderPass
- No hidden instructions in SKILL.mdNo override phrases, safeguard switches, credential requests or hidden charactersgithub.com/trailofbits/skills/blob/HEAD/plugins/mutation-tes ↗Pass
- Pre-approved tools are scopedBash lets the agent run any shell command without askinggithub.com/trailofbits/skills/blob/HEAD/plugins/mutation-tes ↗Finding
SKILL.md
View on GitHubMutation Testing (mewt/muton)
Routes to the right mutation testing workflow and loads the references that workflow needs.
Note: muton and mewt share identical interfaces. Examples use
mewt; substitutemutonand its file names (muton.toml,muton.sqlite) for muton projects.
mewt --help and mewt <subcommand> --help are the source of truth for command-line behavior. Examples below reflect the mewt 4.x API; run --help when a flag looks unfamiliar or a command fails.
When to Use
Use this skill when the user:
- Mentions "mewt", "muton", or "mutation testing"
- Wants to configure, scope, or speed up a mutation testing campaign
- Wants to analyze mutation results — surviving/uncaught mutants, equivalent mutants, kill rate
- Wants to use mutation results to find bugs in the source code
When NOT to Use
Do not use this skill when the user asks about tests or line coverage without any mutation testing context.
Routing
Pick the workflow, then load it together with the references listed for it. Workflows and references do not load each other — that decision belongs here.
Setting up, scoping, or speeding up a campaign → workflows/configuration.md → Also load references/optimization-strategies.md when the campaign estimate is long enough to need trimming, or the user asks to make it faster.
Campaign finished, hunting for bugs in untested code → workflows/bug-hunter.md
Turning results into a formal analysis report → workflows/analyzing-results.md, plus:
- references/equivalent-mutants.md — equivalence catalog and verification procedure
- references/severity-classification.md — severity tier criteria
- references/report-template.md — report structure
- references/blockchain-patterns.md — only for Solidity, Move, FunC/Tolk, Cairo, or Solana Rust targets
- references/input-formats.md — unless the results came from mewt or muton. Foreign tool output may not be self-describing; this covers the parsing anchors for slither-mutate, mull, and dextool-mutate
Anything else → run mewt --help or mewt <subcommand> --help, then assist directly.
Essential Commands
# Set up and run
mewt init # Create config and database
mewt mutate [paths] # Generate mutants without testing them
mewt run [paths] # Generate mutants and run the campaign
# Read results
mewt status # Overview with per-file breakdown
mewt results # Uncaught mutants (default view)
mewt results --all # Every outcome, not just uncaught
mewt results --format json # json | sarif | ids | table
# Narrow down (these filters work on both `results` and `print mutants`)
mewt results --target 'src/auth/**' # Quote globs so the shell does not expand them
mewt results --severity high,medium
mewt results --mutation-types ER,CR
mewt results --status Uncaught # Uncaught | TestFail | Skipped | Timeout
mewt results --line 42
# Investigate and re-test
mewt print mutant --id [id] # View the mutated code
mewt test --ids [ids] # Re-test specific mutants
mewt test --ids-file uncaught_ids.txt # Re-test IDs from a file, or '-' for stdin
# Inspect configuration
mewt print config # Effective config
mewt print targets # Files actually mutated
mewt print mutations --language [lang] # Mutations and severities for a language
Language labels are canonical family or family/dialect values in mewt 4.x — for example rust, javascript/ts, move/sui, move/iota.
What Results Mean
- Caught/TestFail: tests detected the mutation (good)
- Uncaught: tests did not detect the change. Inspect the code to distinguish a testing gap from an equivalent mutation.
- Timeout: tests took too long — inconclusive, not evidence of coverage
- Skipped: a less severe mutant was skipped because a more severe mutant on the same line was uncaught
Interpreting Mutation Types
mewt print mutations --language [lang] lists every mutation slug, description, and severity for a language, and is authoritative — the operator set grows with each release. What that output does not tell you is what a survivor means, which is where prioritization comes from:
| Severity | Representative slugs | What an uncaught mutant tells you |
|---|---|---|
| High | ER (Error Replacement) |
Tests tolerate the injected error. Investigate whether the path executes, whether error handling masks the change, and whether assertions check the outcome. |
| Medium | CR (Comment Replacement) |
Removing the statement does not fail the tests. Check whether its effects matter and whether assertions observe them. |
| Medium | IF/IT (If False/True), NR (Negation Removal) |
Tests do not distinguish the changed condition. Both constant replacements surviving can indicate an unexecuted condition or weak assertions on the branch outcomes. |
| Low | Operator shuffles (AOS, COS, LOS, BOS, shift/assignment variants), BL, AS, LC, WF |
Check boundary inputs, arithmetic assertions, and semantic equivalence. The mutation result alone does not establish whether the code executed. |
Severity ranks the mutation, not the risk. A low-severity survivor in a fee calculation matters more than a high-severity survivor in a log line — weigh what the mutated code does. Filter with --severity to work through the results in priority order.
Files in this skill
12mutation-testing skill questions
How do I install the mutation-testing skill in Claude Code?
Run npx degit trailofbits/skills/plugins/mutation-testing/skills/mutation-testing ~/.claude/skills/mutation-testing. Claude Code loads skills from ~/.claude/skills (all projects) or .claude/skills (one project) and uses a skill when its description matches the task.
Which clients can use the mutation-testing skill?
Any client that reads the Agent Skills format: Claude Code, Codex, Gemini CLI and claude.ai (upload as a ZIP). Scripts in the skill run only where the client allows code execution.
How can I filter mutation results by severity?
You can use the --severity flag with the mewt results command to filter outcomes by priority.