create-hook — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited create-hook (Agent Skill) and scored it 87/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 3 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 3 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Follow the create-hook skill workflow to design and generate a hook configuration.
$ARGUMENTS — optional hook event type (e.g. PreToolUse, Stop, PermissionRequest)or a use-case description (e.g. "block dangerous bash commands"). Omit for discovery.
$ARGUMENTS names an event or use case, use it to seed Phase 1 questions(command / prompt / agent), design the matcher and logic, then write the hook entry
validate_hook_schema.py and test with test_hook.pyhooks.json vs skill-scoped frontmatter) and next stepshooks.json entry or SKILL.md frontmatter block with complete hook configuration (event, matcher, handler type, command/prompt body, output schema).
When generating a Python hook script, always apply these two rules:
Cross-platform python command — use python3 ... || python ... in hooks.json so the hook works on both macOS/Linux (python3) and Windows (python):
{ "type": "command", "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hooks/script.py || python ${CLAUDE_PLUGIN_ROOT}/hooks/script.py" }Project-type guard — hooks run in every project, not just ones that have initialized this plugin. Add an early-exit guard at the top of main() so the script skips silently in projects that lack the required context:
def main():
project_root = Path(os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd()))
if not (project_root / "context").exists():
return # Not an initialized project — skip silently
...Adapt the guard to whatever directory/file your hook requires (e.g. .agent/, context/os-state.json).
$ARGUMENTS is empty: begin with the event selection question in Phase 1generate frontmatter syntax instead of a global hooks.json entry
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.