From agent-guardrails
Tests Claude Code agent guardrail hooks by piping trigger phrases to stop-guardrails.sh. Verifies installation via bash/jq, runs 2 positive tests per 6 rules plus 4 negative tests, reports table. Use to confirm hooks block unsafe responses.
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 six rules by sending test phrases through it.
Verify that the installed stop-guardrails.sh hook catches all six 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-speculative-language:
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.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.Agent Guardrails Test Results
| Rule | Test 1 | Test 2 |
|------|--------|--------|
| no-speculative-language | PASS | PASS |
| no-stalling | PASS | PASS |
| no-preference-asking | PASS | PASS |
| no-false-completion | PASS | PASS |
| no-skipping | PASS | PASS |
| no-dismissing | PASS | PASS |
| Negative tests | 4/4 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-guardrailsWrites and runs tests for Claude Code harness components (hooks, skills, settings, CLAUDE.md) using vigilestiers — starts at the cheapest tier that can answer the question.
Guides authoring Hookify rules to monitor bash commands, file edits, prompts with regex patterns and conditions; covers syntax, events, actions, examples.
Guides writing Claude Code hooks: event selection, hook types (command/prompt/agent), matcher patterns, blocking vs advisory, and portable paths. Use when creating hooks for quality gates, automation, or policy enforcement.