The user asks for the right outcome.
The wording differs from your description, so the agent never loads the skill. Nothing crashes. The user gets a generic answer.
behavioral tests for SKILL.md
A skill can look valid and still miss the prompts it was built for. Tripwire runs real agent sessions, records what activates, and fails CI when that behavior changes.
$ tripwire test ./skills/code-review Running 4 committed scenarios... ✓ "review this pull request" activated ✗ "audit this auth middleware" missed ✓ "write release notes" stayed quiet ✓ "fix this CSS bug" stayed quiet 1 activation regression. CI failed.
the failure your linter cannot see
The agent reads a skill’s name and description before deciding whether to load it. A clean file proves the syntax works. It does not prove the agent will choose the skill.
Tripwire does not ask an LLM whether your description “looks good.” The Claude adapter reads
the structured Skill tool event from a real session and matches the skill that
fired. Gemini and Codex adapters are available as experimental checks.
The wording differs from your description, so the agent never loads the skill. Nothing crashes. The user gets a generic answer.
An unrelated prompt matches the description. The agent loads the wrong instructions and interferes with work it should have ignored.
try it now
No install needed for the static check. When you're ready, copy three commands and probe a real prompt.
This checks file structure and authoring rules. The activation test runs from the CLI because it needs a real agent session.
$ npm install -g tripwire-skills
$ tripwire lint ./skills/my-skill
$ tripwire test ./skills/my-skill --prompt "your real user prompt" --expect activate
The one-prompt check does not need a Tripwire account or a separate generation key. Once activation works, analyze generates a scenario matrix you commit and replay in CI. See the full workflow in the README.
a review signal your team can enforce
The Action lints changed skills, replays committed activation scenarios, annotates the diff, and posts one sticky PR summary. Missing credentials skip the paid probe and leave static lint running.
# .github/workflows/tripwire.yml name: Tripwire on: pull_request jobs: skills: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 with: { fetch-depth: 0 } - uses: bharath31/tripwire@v1 with: probe: true anthropic-api-key: ${{ secrets.ANTHROPIC_API_KEY }}
production questions
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.
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.
ship the behavior you intended