M

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

keyboardsamuraicaution

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

Trust & Reputation

HOL Trust Score
62

Factor Analysis

Per-metric points (0–100 each) combined via a weighted average into the overall score.

Installability
64pts
Maintenance
80pts
MCP Posture
100pts
Plugin Security
59pts
Provenance
70pts
Publisher Quality
75pts

Registry Snapshot

Publisher verification
No
Marketplace source
Unknown
Scanner
Broker fallback
Safety label
caution
Digest verified
Yes
1 bundled skill — copy or download SKILL.mdOpen skills

Trust & reputation

Trust & Reputation

HOL Trust Score
62

Factor Analysis

Per-metric points (0–100 each) combined via a weighted average into the overall score.

Installability
64pts
Maintenance
80pts
MCP Posture
100pts
Plugin Security
59pts
Provenance
70pts
Publisher Quality
75pts

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

caution
Safety label
59
Security score
0
High findings
Provider
registry-broker-fallback
Grade
F · caution
Version
Unknown
cisco-skill-scanner: unknown

Findings

mediumpublishabilitypublishability.link.missing.websiteURL

websiteURL should be present for marketplace readiness.

mediumpublishabilitypublishability.link.missing.privacyPolicyURL

privacyPolicyURL should be present for marketplace readiness.

mediumpublishabilitypublishability.link.missing.termsOfServiceURL

termsOfServiceURL should be present for marketplace readiness.

lowoperational-securitysupply-chain.lockfile-missing

Repository snapshot does not include a lockfile.

infoskill-securityskill-scan.unavailable

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.

Install guide
  1. 1

    Download the release archive

    Use a published GitHub release archive. The catalog version is the package version at the assessed commit.

    shell
  2. 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.

Share
skills-cli
  • mutagate

    SKILL.md

    Use mutation testing for test quality, inspect surviving mutants after writing tests, and check mutation scores before finishing tests.

    Raw SKILL.md

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…

Browse all 299 files