From agent-guardrails
Tests installed agent guardrail hooks by sending trigger phrases through the stop hook script. Verifies hook installation and runs positive/negative tests per rule.
How this skill is triggered — by the user, by Claude, or both
Slash command
/agent-guardrails:testThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Verify that the installed stop-guardrails.sh hook catches all nine rules by sending test phrases through it.
Verify that the installed stop-guardrails.sh hook catches all nine rules by sending test phrases through it.
Verify the hook is installed and executable:
if [ ! -x .claude/hooks/stop-guardrails.sh ]; then
echo "FAIL: .claude/hooks/stop-guardrails.sh not found or not executable"
exit 1
fi
if ! cat .claude/settings.local.json 2>/dev/null | jq -e '.hooks.Stop' > /dev/null 2>&1; then
echo "FAIL: No Stop hook configured in .claude/settings.local.json"
exit 1
fi
If either check fails, tell the user to run /agent-guardrails:install first. Do not proceed.
For each rule, send two test phrases through the hook individually. Each test is a separate bash command:
result=$(echo '{"last_assistant_message": "TEST_PHRASE"}' | bash .claude/hooks/stop-guardrails.sh)
if echo "$result" | grep -q '"decision"'; then
echo "PASS: TEST_PHRASE"
else
echo "FAIL: TEST_PHRASE — expected block, got: $result"
fi
Stop on first failure. Do not continue after a FAIL.
no-guessing:
I think the issue is in the parser.This should fix the problem.no-stalling:
Before I proceed, there are a few things to consider.Let me take a step back and think about this.no-preference-asking:
Would you like me to refactor this?Should I proceed with the fix?no-false-completion:
Everything is working now.The implementation is complete.no-skipping:
The rest looks fine.For brevity, I'll skip the details.no-dismissing:
It's just a warning.Safe to ignore.no-cosmetic:
This is a cosmetic issue.The change is cosmetically identical.no-caveats:
One caveat: the parser only handles UTF-8.There are a few caveats worth mentioning.no-flagging:
Just to flag, the config file has a duplicate key.I have flagged the version mismatch.After all positive tests pass, run these. Each must return {}:
result=$(echo '{"last_assistant_message": "TEST_PHRASE"}' | bash .claude/hooks/stop-guardrails.sh)
if echo "$result" | grep -q '"decision"'; then
echo "FAIL (false positive): TEST_PHRASE — got: $result"
else
echo "PASS (clean): TEST_PHRASE"
fi
Fixed the null pointer and pushed.The function returns the expected value.Updated the retry logic to handle timeouts.The test suite runs in 4.2 seconds.Added the --json flag to the command.The feature flag is disabled in production.Tests 5 and 6 guard no-flagging against matching flag as a noun.
Agent Guardrails Test Results
| Rule | Test 1 | Test 2 |
|------|--------|--------|
| no-guessing | PASS | PASS |
| no-stalling | PASS | PASS |
| no-preference-asking | PASS | PASS |
| no-false-completion | PASS | PASS |
| no-skipping | PASS | PASS |
| no-dismissing | PASS | PASS |
| no-cosmetic | PASS | PASS |
| no-caveats | PASS | PASS |
| no-flagging | PASS | PASS |
| Negative tests | 6/6 clean |
All N tests passed.
If any test failed, show which phrase and rule failed and stop there.
npx claudepluginhub florianbuetow/claude-code --plugin agent-guardrailsInstalls behavioral guardrail rules (no-guessing, no-stalling, etc.) into a project's .claude/ directory via a Stop hook bash script and settings.local.json.
Creates behavioral rules in markdown to block dangerous commands or restrict AI behavior. Use when adding safety guardrails or preventing specific commands.
The guardrail switchboard. Triggers on "which guardrails are on?", "turn on / turn off <guardrail>", "set up guardrails for this project", or when a guardrail keeps firing and the developer wants it quieter. Records the choice in .claude/skull.json so it survives the session; the leader honours it.