Agent Orchestration
Hook
Hooks
What evanflow runs automatically, and when. A hook is a command Claude Code fires at a fixed moment, without you asking for it.
Install
> /plugin marketplace add evanklem/evanflow > /plugin install evanflow@evanflow
Ships with evanflow. Installing the plugin gets these hooks.
What fires, and when
PreToolUse
- Matches
Bash${CLAUDE_PLUGIN_ROOT}/hooks/block-dangerous-git.sh
Where it lives
- hooks/block-dangerous-git.shRunsGitHub
Read the script
#!/bin/bash # Fail-closed: if jq is unavailable, block the command rather than allowing it. if ! command -v jq &>/dev/null; then echo "BLOCKED: jq is not installed — cannot verify command safety. Install jq or remove this hook." >&2 exit 2 fi INPUT=$(cat) COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command') DANGEROUS_PATTERNS=( "git push" "git reset --hard" "git clean -f" "git branch -D" "git checkout \." "git checkout -- \." "git restore \." "git restore -- \." "push --force" "reset --hard" ) for pattern in "${DANGEROUS_PATTERNS[@]}"; do if echo "$COMMAND" | grep -qE "$pattern"; then echo "BLOCKED: '$COMMAND' matches dangerous pattern '$pattern'. The user has prevented you from doing this." >&2 exit 2 fi done exit 0
Read the script before you install anything that runs on your machine. This is the one part of a plugin that acts without being asked.
Ships withevanflow
A TDD-driven iterative feedback loop for software development with Claude Code. 16 cohesive skills + 2 custom subagents walk an idea from brainstorm through implementation, with checkpoints throughout where you stay in control.
Get the whole plugin

