websiteURL should be present for marketplace readiness.
mutagate
Mutation-testing hook for Claude Code, Codex, OpenCode, and Pi that mutates the code under each agent-written test and blocks completion until the tests kill at least 80% of the mutants
keyboardsamurai/mutagate · v0.9.0 · source 4927d40 · Development & Workflow
Trust Score
62
Security
59
Surfaces
1
What is mutagate?
mutagate is a published development & workflow plugin for AI coding agents in the codex ecosystem, developed by keyboardsamurai and distributed through the HOL AI plugin registry. Mutation-testing hook for Claude Code, Codex, OpenCode, and Pi that mutates the code under each agent-written test and blocks completion until the tests kill at least 80% of the mutants
- Canonical slug
- keyboardsamurai/mutagate
- Version
- v0.9.0 · source 4927d40 · updated Oct 8, 2026
- Open data
- entity.json (JSON-LD)
Trust & Reputation
Factor Analysis
Per-metric points (0–100 each) combined via a weighted average into the overall score.
Registry Snapshot
- Canonical profile
- https://hol.org/registry/plugins/keyboardsamurai%2Fmutagate
- Publisher verification
- No
- Marketplace source
- Unknown
- Scanner
- Broker fallback
- Safety label
- caution
- Digest verified
- Yes
Trust & reputation
Trust & Reputation
Factor Analysis
Per-metric points (0–100 each) combined via a weighted average into the overall score.
Provenance
- Plugin root
- .
- Source repo
- https://github.com/keyboardsamurai/mutagate
- Source commit
- 4927d400fd10…
- Publisher verified
- No
- Owner verified
- Not owner verified
Continuous scanner CI not detected
This plugin remains listed. Its overall trust score is reduced by 10% because security checks are not maintained in the source repository's CI.
Optional: maintain the scanner in the source repository's CI to receive the full trust score. Listing does not require that change.
Verified badge not detected
Add the HOL verified badge to the repository README to score +2% trust. Plugin owners can open that pull request from Guard Plugins.
Security Posture
- Provider
- registry-broker-fallback
- Grade
- F · caution
- Version
- Unknown
Findings
privacyPolicyURL should be present for marketplace readiness.
termsOfServiceURL should be present for marketplace readiness.
Repository snapshot does not include a lockfile.
Script permission declarations are required for scripts/: scripts/adapters/pi.ts, scripts/adapters/opencode.js, scripts/hooks.json, scripts/dotnet.cjs, scripts/doctor.cjs, scripts/glob.cjs, scripts/cache-jars.mjs, scripts/errors.cjs, scripts/inputs.cjs, scripts/kotlin-source.cjs, scripts/mutagate.mjs, scripts/install.cjs, scripts/mutmut-bridge.cjs, scripts/mutagate-hook.cjs
mutagate — Frequently asked questions
- What is mutagate?
- mutagate is an AI plugin in the HOL registry. Mutation-testing hook for Claude Code, Codex, OpenCode, and Pi that mutates the code under each agent-written test and blocks completion until the tests kill at least 80% of the mutants
- How do I install mutagate?
- Install mutagate in your harness: Source — https://github.com/keyboardsamurai/mutagate/releases; OpenCode — npx skills add keyboardsamurai/mutagate; Any agent — npx skills add keyboardsamurai/mutagate. Full step-by-step guidance is on the HOL plugin page.
- How do I install mutagate in Source?
- To install mutagate in Source, start with https://github.com/keyboardsamurai/mutagate/releases. The complete step-by-step install guide for Source is on the HOL plugin page.
- How do I install mutagate in OpenCode?
- To install mutagate in OpenCode, start with npx skills add keyboardsamurai/mutagate. The complete step-by-step install guide for OpenCode is on the HOL plugin page.
- Is mutagate free?
- Pricing for mutagate is published on its HOL plugin page when the maker schedules a launch.
- Who publishes mutagate?
- mutagate is published by keyboardsamurai and listed on HOL.
- Is mutagate available now?
- mutagate availability is listed on its HOL plugin page.
Install Guidance
Install in Source
Install from a native release archive or the assessed source revision.
- 1
Download the release archive
Use a published GitHub release archive. The catalog version is the package version at the assessed commit.
shell - 2
Follow the publisher install guide
https://github.com/keyboardsamurai/mutagate/blob/4927d400fd10055dadb56326d44f6ab9153d5fac/docs/INSTALL.md
Plugin Manifest
{
"name": "mutagate",
"version": "0.9.0",
"description": "Mutation-testing hook for Claude Code, Codex, OpenCode, and Pi that mutates the code under each agent-written test and blocks completion until the tests kill at least 80% of the mutants",
"repository": "https://github.com/keyboardsamurai/mutagate",
"homepage": "https://github.com/keyboardsamurai/mutagate",
"interface": {
"displayName": "mutagate",
"developerName": "keyboardsamurai",
"category": "Development & Workflow"
},
"skills": "./",
"holManifestOrigin": "synthesized",
"registryIndexVersion": 5
}Skills
1 SKILL.md file ship with this plugin. Preview, copy, or download each one, then install them with the Skills CLI.
mutagate
SKILL.md
Use mutation testing for test quality, inspect surviving mutants after writing tests, and check mutation scores before finishing tests.
File Inventory
.codex-plugin/plugin.json
plugin-manifest
537 bytes
b2868413077cde13…
.github/dependabot.yml
file
112 bytes
eada67e1b7f73d16…
.github/ISSUE_TEMPLATE/bug.yml
file
1,567 bytes
d779aab8a5bee7e1…
.github/ISSUE_TEMPLATE/config.yml
file
333 bytes
4cf36f8d89ed97d8…
.github/ISSUE_TEMPLATE/false-block.yml
file
1,280 bytes
ecd50a57bdc900ed…
.github/ISSUE_TEMPLATE/runner-request.yml
file
736 bytes
b7d63ce006697aea…
.github/PULL_REQUEST_TEMPLATE.md
file
744 bytes
729dc3c8706893bb…
.github/workflows/ci.yml
file
3,205 bytes
fc953b6cd32f9d22…
.github/workflows/nightly.yml
file
931 bytes
12c9392297a74f27…
.github/workflows/release.yml
file
4,273 bytes
be9299af1291051f…
AGENTS.md
file
11,291 bytes
00d75513f7217f27…
CHANGELOG.md
file
2,624 bytes
b55dc377529b9b10…
CLAUDE.md
file
11 bytes
336cc4fbf19beaad…
CODE_OF_CONDUCT.md
file
599 bytes
409fa0a8e0f734d8…
CONTEXT.md
file
6,468 bytes
5b8c7cb39b074e03…
CONTRIBUTING.md
file
3,710 bytes
66a6447670bf6009…
docs/adr/0001-stryker-net-scratch-copy.md
file
968 bytes
c9ed1fe5b319cadb…
docs/adr/0002-agent-caused-errors-block-once.md
file
1,422 bytes
c820b3e8ada7f21b…
docs/adr/0003-error-results-retried-once.md
file
1,049 bytes
444d01b97c836713…
docs/adr/0004-pending-and-final-unscored.md
file
1,399 bytes
d0bdfd64cc2f0b7a…
docs/adr/0005-gate-deadline-and-recovery-advice.md
file
1,417 bytes
1639cc37689755df…
docs/adr/0006-pytest-collected-no-tests.md
file
1,025 bytes
bc29cb75a43ad94c…
docs/adr/0007-waive-apply-refused-in-agent-sessions.md
file
898 bytes
7a7f97ab6ec64844…
docs/adr/0008-usage-errors-exit-2.md
file
911 bytes
110c8c0a9e77ef8c…
docs/adr/0009-session-id-precedence.md
file
1,087 bytes
eddd574ce5cafb2a…
docs/adr/0010-out-of-scope-boundaries.md
file
783 bytes
883e7178b9b69f11…
docs/adr/0011-live-eval-local-two-runs-per-cell.md
file
1,119 bytes
3baeb975019af438…
docs/adr/0012-uncovered-python-target-is-agent-caused.md
file
699 bytes
700e1b1709a1e9a9…
docs/adr/0013-project-hooks-use-repo-relative-paths.md
file
2,568 bytes
e253bf45cb26f3d6…
docs/adr/0014-skill-branch-distribution.md
file
1,374 bytes
3aa45529a025625c…
docs/adr/README.md
file
1,569 bytes
4b4e2d1178a36fce…
docs/eval_suite_spec.md
file
36,772 bytes
b87d49d752663f99…
docs/eval_suite.md
file
20,674 bytes
3a89c7b642a35ae3…
docs/go_csharp_runners.md
file
48,716 bytes
fa260c4d130cff48…
docs/prd.md
file
65,541 bytes
488564801f5f1640…
docs/releasing.md
file
9,009 bytes
4f58f5be2857de10…
docs/validation.md
file
10,720 bytes
bae1cb7747c15e58…
package.json
file
1,192 bytes
996ec48393a7561e…
README.md
file
19,158 bytes
ed306782ad86ce6a…
README.md
file
19,158 bytes
ed306782ad86ce6a…
references/jars.json
file
2,022 bytes
f8eefb19af00f450…
references/kotlin-junk.yaml
file
1,507 bytes
837d1213fb98e55a…
references/result-schema.json
file
2,773 bytes
f517093148448595…
references/survivor-playbook.md
file
2,483 bytes
4a19144ebd4e378b…
references/versions.json
file
949 bytes
b79596e5b762ce8b…
scripts/adapters/opencode.js
file
3,888 bytes
9b321c2a7c6bae5f…
scripts/adapters/pi.ts
file
3,029 bytes
d6e1baf9583c00ec…
scripts/cache-jars.mjs
file
2,011 bytes
872604c41c1fbbba…
scripts/doctor.cjs
file
1,816 bytes
8af25e41bf9d9b2f…
scripts/dotnet.cjs
file
3,716 bytes
907114baf5c0d297…
scripts/errors.cjs
file
2,680 bytes
09f9f4df71149817…
scripts/glob.cjs
file
729 bytes
f4ea655a15770847…
scripts/hooks.json
file
1,477 bytes
235aded43965a09b…
scripts/inputs.cjs
file
6,588 bytes
d6d564cb396aa7cc…
scripts/install.cjs
file
5,431 bytes
7ebb051befba839f…
scripts/kotlin-source.cjs
file
5,635 bytes
a7c4099d152efd70…
scripts/mutagate-hook.cjs
file
92,345 bytes
70af7504c88f8867…
scripts/mutagate.mjs
file
92,648 bytes
970ff43bb47de917…
scripts/mutmut-bridge.cjs
file
4,347 bytes
e96d77b6c5c79c55…
SECURITY.md
file
4,312 bytes
7c107f3cb421fa30…
SKILL.md
skill
2,471 bytes
58652c6cf66d5b72…
test/adapters/adapters.test.mjs
file
8,704 bytes
6c2205db5ad6aec0…
test/clipped.mjs
file
2,639 bytes
fccf1ea896ea1784…
test/core.test.mjs
file
97,767 bytes
40409ea44e6e7749…
test/corpus/coroutine-bytecode.txt
file
9,982 bytes
405ed4e59c2abf8c…
test/corpus/generate.mjs
file
3,182 bytes
4f7f0613c448f98a…
test/corpus/README.md
file
1,977 bytes
5bf2dd186d7490f3…
test/doctor.test.mjs
file
5,039 bytes
be2f637963c1a8b2…
test/drift.mjs
file
1,218 bytes
6277332211d465ea…
test/driver.mjs
file
1,949 bytes
7424fa6d3c37060e…
test/drivers.mjs
file
413 bytes
ef8af7015de9149d…
test/eval-run.test.mjs
file
11,603 bytes
b245ae7dffe74c3b…
test/eval.test.mjs
file
40,879 bytes
f1bc6076b978b733…
test/eval/checks.mjs
file
25,545 bytes
acac72eae206e918…
test/eval/config.json
file
229 bytes
daa531c6847b8382…
test/eval/harnesses.mjs
file
17,494 bytes
bbf3b569666b52a6…
test/eval/run.mjs
file
16,763 bytes
5acd702a8198cb0d…
test/eval/tasks/csharp/expected.json
file
2,673 bytes
98c45f64377e627c…
test/eval/tasks/csharp/prompt.natural.md
file
918 bytes
bc9f0e86e6793cce…
test/eval/tasks/go/cmd/matrixd/main.go
file
1,524 bytes
e0092cd1e5b9a0e4…
test/eval/tasks/go/expected.json
file
2,819 bytes
295069bd2fe52db1…
test/eval/tasks/go/internal/api/controller.go
file
2,604 bytes
5dfad2d841890b3e…
test/eval/tasks/go/internal/api/page.go
file
944 bytes
7bc4d2671d288e2a…
test/eval/tasks/go/internal/matrix/service.go
file
2,370 bytes
6effaf3f81f56b94…
test/eval/tasks/go/prompt.natural.md
file
922 bytes
9f2a8542052b2951…
test/eval/tasks/go/reference/cmd/matrixd/main_test.go
file
2,954 bytes
e6da1c9be8bfcdd8…
test/eval/tasks/go/reference/internal/api/controller_test.go
file
3,463 bytes
f5664752c35eba12…
test/eval/tasks/go/reference/internal/api/page_test.go
file
1,086 bytes
38be096d2316a141…
test/eval/tasks/go/reference/internal/matrix/service_test.go
file
3,682 bytes
9cae07af7447b6b6…
test/eval/tasks/greenfield/csharp.md
file
1,923 bytes
0ce35d7cf79ec3f7…
test/eval/tasks/greenfield/forced.md
file
1,317 bytes
4f45f622cfd6099f…
test/eval/tasks/greenfield/go.md
file
1,632 bytes
374b2dd834eeefdc…
test/eval/tasks/greenfield/java.md
file
1,545 bytes
7c64bc86c1c0d84a…
test/eval/tasks/greenfield/kotlin.md
file
1,808 bytes
91f0a629f1d047b2…
test/eval/tasks/greenfield/python.md
file
1,719 bytes
a47f9a3c859b5da9…
test/eval/tasks/greenfield/typescript.md
file
1,756 bytes
4de6f822e517dcbd…
test/eval/tasks/java/expected.json
file
2,195 bytes
5020dbe74a08d22b…
test/eval/tasks/java/prompt.natural.md
file
830 bytes
c7fdcf6d7d81b4f8…
test/eval/tasks/kotlin/expected.json
file
3,003 bytes
f78257209f40597e…
test/eval/tasks/kotlin/prompt.natural.md
file
881 bytes
5bffcdfc5cb2be76…