From tac
Configures ADW hooks for observability including PreToolUse and PostToolUse, with settings.json setup and Python scripts for event logging and workflow monitoring.
How this skill is triggered — by the user, by Claude, or both
Slash command
/tac:configure-hooksThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Configure hook-based event handling for AI Developer Workflow observability.
Configure hook-based event handling for AI Developer Workflow observability.
$ARGUMENTS: <hook-type> [configuration]
hook-type: Type of hook (PreToolUse, PostToolUse, Notification, Stop)configuration: Optional JSON configuration or descriptionDocumentation Verification: Hook event types are Claude Code internal types that may change between releases. For authoritative current event types, verify via
hook-managementskill →docs-management.
| Hook | Trigger | Use Case |
|---|---|---|
PreToolUse | Before tool execution | Capture intent, validate |
PostToolUse | After tool execution | Capture result, summarize |
Notification | Workflow events | Alert, log, broadcast |
Stop | Error conditions | Halt execution |
Determine what events need capturing:
Common Scenarios:
Create hook configuration in settings.json format:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Write|Edit|Bash",
"hooks": [
{
"type": "command",
"command": "python /path/to/pre_tool_hook.py"
}
]
}
],
"PostToolUse": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "python /path/to/post_tool_hook.py"
}
]
}
]
}
}
Generate hook script based on type:
PreToolUse Script:
#!/usr/bin/env python3
"""PreToolUse hook for ADW observability."""
import json
import sys
import os
def main():
# Read hook input from stdin
input_data = json.load(sys.stdin)
tool_name = input_data.get("tool_name", "unknown")
tool_input = input_data.get("tool_input", {})
adw_id = os.environ.get("ADW_ID", "no-adw")
# Log event
event = {
"type": "PreToolUse",
"adw_id": adw_id,
"tool": tool_name,
"input_preview": str(tool_input)[:100]
}
# Write to log or broadcast
with open(f"agents/{adw_id}/events.jsonl", "a") as f:
f.write(json.dumps(event) + "\n")
# Return decision (continue or block)
print(json.dumps({"decision": "continue"}))
if __name__ == "__main__":
main()
PostToolUse Script:
#!/usr/bin/env python3
"""PostToolUse hook for ADW observability."""
import json
import sys
import os
def main():
# Read hook input from stdin
input_data = json.load(sys.stdin)
tool_name = input_data.get("tool_name", "unknown")
tool_result = input_data.get("tool_result", "")
adw_id = os.environ.get("ADW_ID", "no-adw")
# Log event
event = {
"type": "PostToolUse",
"adw_id": adw_id,
"tool": tool_name,
"result_preview": str(tool_result)[:200]
}
# Write to log or broadcast
with open(f"agents/{adw_id}/events.jsonl", "a") as f:
f.write(json.dumps(event) + "\n")
if __name__ == "__main__":
main()
Define ADW context variables:
export ADW_ID="a1b2c3d4"
export ADW_STEP="build"
export ADW_WORKFLOW="plan_build_review"
export ADW_OUTPUT_DIR="agents/${ADW_ID}"
Ensure event output location exists:
mkdir -p agents/${ADW_ID}
## Hook Configuration Report
**Hook Type:** {hook_type}
**Configuration:** {config}
### Generated Files
| File | Purpose |
| --- | --- |
| `hooks/pre_tool_hook.py` | PreToolUse event capture |
| `hooks/post_tool_hook.py` | PostToolUse event capture |
### Settings Configuration
```json
{settings snippet}
| Variable | Value | Purpose |
|---|---|---|
| ADW_ID | {id} | Workflow correlation |
| ADW_STEP | {step} | Current step context |
| ADW_OUTPUT_DIR | {path} | Event output location |
Run test command to verify hook fires:
# In Claude Code session with hooks configured
echo "Test hook" > /dev/null
# Check agents/{adw_id}/events.jsonl for captured events
/broadcast-event){
"tool_name": "Write",
"tool_input": {
"file_path": "/path/to/file.py",
"content": "..."
}
}
{
"tool_name": "Write",
"tool_input": {...},
"tool_result": "File written successfully"
}
hook-event-architecture skill - Event system designevent-broadcaster agent - Broadcasting designnpx claudepluginhub melodic-software/claude-code-plugins --plugin tacDesigns hook-based event systems for ADW observability, capturing agent events like PreToolUse and broadcasting via hooks and WebSockets for real-time monitoring.
Guides creating, configuring, and debugging Claude Code hooks for event-driven automation, command validation, workflow customization, and notifications on events like PreToolUse and UserPromptSubmit.
Scaffolds Claude Code hooks with templates, validation, and conflict analysis. Analyzes existing hooks, prevents conflicts, and generates boilerplate code automatically.