CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

eval-hooks

Audit Claude Code and Codex hooks for validity, safety, and correctness across settings.json, hooks.json, config.toml, plugin, and skill or agent frontmatter hooks. Resolves each command, checks event names, handler types, matchers, exit-code and JSON decision strategy, and timeouts against each host's documented rules, then reviews hooks one by one. Use when setting up hooks, debugging a hook that never fires, never blocks, or hangs the agent, or doing a periodic hooks hygiene pass. Not for writing a new hook from scratch.

Quality

92%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

Quality

Content

85%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

The body is an unusually rigorous, fully executable audit procedure with excellent per-step validation checkpoints and host-specific knowledge Claude cannot reconstruct from memory. Its one structural weakness is that all reference material lives inline in a ~500-line SKILL.md rather than being split into one-level-deep reference files, and version-pinned observations are not isolated into a dedicated section.

Suggestions

Move the stable reference tables (Claude Code 33-event table, handler types/fields, matcher rules, timeout defaults; Codex events, handlers, and trust rules) into references/ files such as claude-hooks-reference.md and codex-hooks-reference.md, keeping SKILL.md as the workflow overview with clearly signaled links.

Relocate version-pinned observations (Codex 0.159.2 dual-JSON failure, rtk 0.50.0 directory-dependent output, v2.1.195+ hyphen matchers) into a dedicated 'Observed version behaviors' or deprecation-notes section so stale version numbers are cheap to update and do not dilute the operational steps.

Trim the edge-case list and Step 3-4 flag lists to the highest-frequency cases and fold the remainder into the per-host reference files, reducing the always-loaded body to the workflow, scoring criteria, and interactive review script.

DimensionReasoningScore

Conciseness

The body is dense with host-specific semantics Claude cannot reliably recall (exit-code effects per event, timeout budgets, matcher evaluation rules, trust model), so nearly every table earns its tokens rather than re-teaching known concepts. It falls short of the top anchor because version-pinned observations ("Observed on Codex 0.159.2", "with rtk 0.50.0", "hyphens need v2.1.195+") sit inline in operational sections instead of a dedicated observations/deprecated section, and the 33-event table plus dual-host matcher tables could be trimmed of rarely-audited rows.

4 / 5

Actionability

Guidance is fully executable: a copy-paste Python shell-word resolver for command strings, exact discovery commands (`ls ~/.claude/settings.json ...`, `type codex; which -a codex`), a 10-point scoring rubric with per-criterion point splits, and concrete canary procedures (sample payload on stdin, scratch-repository comparison). Claude can execute every step without inventing commands.

5 / 5

Workflow Clarity

Seven sequenced steps each end in an explicit "Done when:" checkpoint, and validation is built in throughout: behavior canaries when static checks pass, re-validation after fixes, live canaries in a disposable git repository, and a hard guard requiring explicit user confirmation before any hook deletion. This is the anchor case for clear sequence with explicit validation and error-recovery feedback loops.

5 / 5

Progressive Disclosure

Section headers and the Claude/Codex split give the body real structure, but ~300 lines of reference-grade material (the 33-event table, handler-field and matcher tables for two hosts, timeout defaults) are inlined in SKILL.md with no references/ directory or any external files to offload detail to. This matches the anchor for 'content that should be separate is inline'; it is above level 2 because headers and organization are genuinely good, and below level 4 because there are no well-signaled reference files at all — the whole knowledge base loads on every invocation.

3 / 5

Total

17

/

20

Passed

Description

100%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

An excellent description: it enumerates concrete audit actions and target file locations, provides explicit and varied use-when triggers with a negative boundary, and stays in third person with no padding. Every dimension sits comfortably at the top anchor.

DimensionReasoningScore

Specificity

The description lists multiple concrete actions — "Resolves each command, checks event names, handler types, matchers, exit-code and JSON decision strategy, and timeouts against each host's documented rules, then reviews hooks one by one" — with comprehensive coverage and named target files (settings.json, hooks.json, config.toml, plugin, skill or agent frontmatter). It matches the anchor for multiple specific concrete actions; the level-4 anchor ('minor gaps in coverage') fits worse since every audit activity is enumerated.

5 / 5

Completeness

It explicitly answers both questions: the 'what' is a full audit pipeline (validity, safety, correctness; command resolution; event/handler/matcher/timeout checks) and the 'when' is a concrete "Use when setting up hooks, debugging a hook... or doing a periodic hooks hygiene pass" clause with specific trigger phrases, matching the top anchor exactly.

5 / 5

Trigger Term Quality

It covers natural phrases users would actually say: "setting up hooks", "debugging a hook that never fires, never blocks, or hangs the agent", and "a periodic hooks hygiene pass", plus an explicit negative boundary ("Not for writing a new hook from scratch"). Trigger coverage is comprehensive with synonymous failure modes; the level-4 anchor ('a few natural terms missing') is too weak a fit.

5 / 5

Distinctiveness Conflict Risk

The niche is auditing hooks across Claude Code and Codex with hook-specific triggers (never fires, never blocks, hangs the agent), and the closing "Not for writing a new hook from scratch" boundary further reduces wrong-skill triggering. Mentions of settings.json/config.toml create only negligible overlap with generic config-editing skills; the clear niche with distinct triggers matches the top anchor.

5 / 5

Total

20

/

20

Passed

Validation

87%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 14 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

skill_md_line_count

SKILL.md is long (513 lines); consider splitting into references/ and linking

Warning

frontmatter_unknown_keys

Unknown frontmatter key(s) found; consider removing or moving to metadata

Warning

Total

14

/

16

Passed

Repository

FlorianBruniaux/claude-code-ultimate-guide

Path

examples/skills/eval-hooks/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.