/hooks-authoring - Hook Authoring Workflow
Purpose: create or review AgentOps runtime hooks with portable behavior, clear matchers, deterministic tests, and CI-compatible validation.
Execute this workflow. Do not only describe it.
Route
Use this skill when work touches hooks/hooks.json, hooks/*.sh,
lib/hook-helpers.sh, hook schemas, or tests that exercise runtime hooks.
Workflow
- Locate the hook surface.
- Runtime manifest:
hooks/hooks.json - Hook scripts:
hooks/*.sh - Shared helpers:
lib/hook-helpers.sh - Schema:
schemas/hooks-manifest.v1.schema.json - Tests and parity checks:
tests/,scripts/validate-hooks-doc-parity.sh
- Runtime manifest:
- Select the lifecycle event and matcher.
- For event behavior, read references/event-taxonomy.md.
- For matcher shape, read references/matcher-patterns.md.
- Define the contract before editing.
- Inputs consumed from hook JSON.
- Output schema and exit-code behavior.
- Fail-open vs fail-closed decision.
- Kill switch, timeout, and portability constraints.
- Implement narrowly.
- Use
set -euo pipefailin shell hooks. - Resolve paths from the manifest/plugin root rather than the caller CWD.
- Avoid
eval, backticks, unquoted variables, and implicit globbing. - Keep hook output to the portable subset validated by
scripts/test-hooks-output.sh.
- Use
- Wire the manifest.
- Use the narrowest matcher that covers the target tool or lifecycle.
- Add explicit timeout values.
- Preserve existing ordering unless the behavior depends on ordering.
- Test directly and through repo gates.
- For fixture patterns, read references/test-harness.md.
- Run the hook with representative JSON fixtures.
- Run
bash scripts/validate-hooks-doc-parity.sh. - Run
bash scripts/test-hooks-output.shwhen output changes. - Run ShellCheck for touched shell files.
- Sync embedded artifacts when required.
- If
hooks/,lib/hook-helpers.sh, orskills/standards/references/changed, runcd cli && make sync-hooks.
- If
- Record evidence.
- Note touched files, fixture commands, gate output, and any intentional fail-open/fail-closed choices.
Guardrails
- Do not broaden a matcher to hide a missing case; add a second hook entry.
- Do not rely on hook output fields that Codex ignores.
- Do not store session secrets, transcripts, or local runtime state in tracked hook fixtures.
- Keep hook authoring documentation separate from active guard behavior. For
edit-scope enforcement, use
/scope.
References
- references/event-taxonomy.md
- references/matcher-patterns.md
- references/test-harness.md