No-Skip Mode
When activated, blocks any write that adds test-skipping patterns to test files.
What It Does
Prevents these patterns from being written to test files:
.skip()— skips individual tests.only()— runs only one test (excludes all others)xit(/xdescribe(— Jasmine skip syntaxtest.todo(— unimplemented test placeholders@Skip/@Disabled— JUnit skip annotations
Activation
/no-skip
Hook Configuration
{
"hooks": {
"PreToolUse": [
{
"matcher": "Write|Edit",
"hook": ".claude/skills/no-skip/scripts/check-skips.sh",
"condition": "file matches **/*.test.{ts,js,tsx,jsx} OR **/*.spec.{ts,js}"
}
]
}
}
Enforcement Logic
#!/bin/bash
# check-skips.sh
CONTENT="$1"
SKIP_PATTERNS=(
'\.skip\s*\('
'\.only\s*\('
'\bxit\s*\('
'\bxdescribe\s*\('
'\bxcontext\s*\('
'test\.todo\s*\('
'@Skip'
'@Disabled'
'@Ignore'
)
for pattern in "${SKIP_PATTERNS[@]}"; do
if echo "$CONTENT" | grep -qP "$pattern"; then
echo "BLOCKED: Found skip pattern '$pattern'"
echo "Remove the skip and either fix the test or delete it."
exit 1
fi
done
Gotchas
- This catches NEW skips being written, not existing ones — run
grep -r '.skip(' tests/to find existing skips .only()is sometimes used intentionally during debugging — deactivate with/no-skip offif needed- Some frameworks use
pending()instead of.skip()— add to patterns if using Jasmine