the quality gate for Agent Skills

Does your skill fire
on the right prompts?

A skill's description is the only signal an agent uses to decide whether to invoke it — routing logic, not documentation. Tripwire lints your SKILL.md, probes activation with real agent sessions, and gates every PR.

npm install -g tripwire-skills
tripwire analyze ./skills/brainstorming/ session
$ tripwire analyze ./skills/brainstorming/
probing activation coverage · 29 prompts · 4 zones
core triggers 7/8 88%
adjacent / edge 3/8 38% ⚠ gap
negative false fires 0/8 0%
keyword variants 4/5 80%
✗ "what's the best way to approach X?"  adjacent miss
✗ "brainstorm ideas for Y"  variant miss
2 gaps found → add "brainstorm", "approach" to the description
200 public skills scanned
96% fail a best-practice lint
93% lack a description starting "Use when…"

from a scan of real published SKILL.md files · methodology ↗

no install needed

Try the lint check, right here

The real lint engine, bundled to your browser — nothing leaves this page. Full activation probing runs from the CLI and the Action.

Load an example:
SKILL.md
result

three commands

Lint, probe, gate.

Static checks are instant and free. Activation probing runs real agent sessions. Committed scenarios make both a regression gate.

tripwire lint

Best-practice lint

Instant, offline checks: description starts with "Use when", stays under 1024 chars, avoids workflow summaries; name is kebab-case; the body has real examples and isn't a stub.

tripwire analyze

Real activation coverage

Generates a prompt matrix across four zones and runs real agent sessions to map what fires, what silently misses, and what false-triggers — the check a linter can't do.

tripwire test

CI-ready regression gate

Commit the generated scenarios and rerun them deterministically — in CI or locally — to catch activation regressions before they ship.

the part a linter can't catch

Activation coverage, measured against real runs

Every generated prompt lands in one of four zones. The report tells you exactly where your skill over- or under-fires — and what to change.

should fire ✓ Core triggers the skill's own stated use cases
should fire ✓ Adjacent / edge related intents you didn't think to test
should stay quiet ✗ Negative off-topic prompts — catches false positives
should fire ✓ Keyword variants paraphrases — exposes description blind spots
coverage report — brainstorming
─ GAPS ────────────────────────────
✗ "what's the best way to approach X?"  [adjacent — miss]
✗ "brainstorm ideas for Y"  [variant — miss]
─ SUGGESTIONS ─────────────────────
1. add "brainstorm", "think through" to the description
2. cover "approach" questions — add "planning how to approach"

runs on every pull request

The same checks,
as a GitHub Action

Gate skill changes the way you gate lint and tests. One workflow file — your API key stays on your runner.

  • Lints every changed SKILL.md
  • Probes activation coverage with your key, on your runner
  • Annotates the exact lines on the diff
  • Posts one sticky summary comment per PR

Fork PR without a key? The probe skips with a notice — lint still gates the PR.

.github/workflows/tripwire.yml
# gate skill changes like you gate tests
name: Tripwire
on: pull_request
jobs:
  skills:
    runs-on: ubuntu-latest
    permissions: { contents: read, pull-requests: write }
    steps:
      - uses: actions/checkout@v5
        with: { fetch-depth: 0 }
      - uses: bharath31/tripwire@v1
        with:
          probe: true
          anthropic-api-key: ${{ secrets.ANTHROPIC_API_KEY }}

as your skills grow

More than lint, more than one skill at a time

tripwire conflicts

Skill-set conflict detection

Two skills that each lint clean can still fight at runtime. Scan a whole directory for name collisions and description overlap — skills shadowing each other.

tripwire eval

Outcome evals

Did the skill actually do the right thing, not just fire? Author assertions plus an optional LLM-judge rubric per case.

tripwire test-all <dir>

Model-drift detection

A scenarios file that passed in March can silently regress in June. Re-probe on a schedule and fail loudly when activation behavior drifts.

--agent claude · gemini · codex

Cross-agent probing

Claude Code is verified; experimental Gemini CLI and Codex adapters let you compare activation behavior from the same SKILL.md.

tripwire.yaml

Pluggable rules

extends: tripwire:recommended, ESLint-style. Turn rules off, change severity, or add org-specific checks as plain JS — applied everywhere, including the Action.

badges · --fix

Badges & auto-fix

A live README coverage badge, plus one-command fixes for mechanically-safe lint issues. Tripwire also ships as a skill and an early VS Code extension.

production questions

What skill developers need to know

How is Tripwire different from a SKILL.md linter?

A linter checks file structure and authoring rules. Tripwire also runs the skill through a real agent and observes whether it activates. That behavioral check catches valid-looking descriptions that miss intended prompts or trigger for unrelated requests.

Does Tripwire upload my skill or prompts?

Tripwire does not send skill files, prompts, file paths, repository names, model output, usernames, or credentials to its servers. Probes run locally or on your GitHub runner through your configured agent provider. Anonymous behavioral telemetry can be disabled with TRIPWIRE_TELEMETRY=0.

Gate your skills
before your users do.

npm install -g tripwire-skills