From tac
Configures ADW hooks for observability including PreToolUse and PostToolUse, with settings.json setup and Python scripts for event logging and workflow monitoring.
npx claudepluginhub melodic-software/claude-code-plugins --plugin tacThis skill is limited to using the following tools:
Configure hook-based event handling for AI Developer Workflow observability.
Designs 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.
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
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 design