npx claudepluginhub timgranlundmarsden/claude-agent-flowDefined in hooks/hooks.json
Bashjq -r '.tool_input.command // empty' | { read -r cmd; case "$cmd" in backlog\ *|backlog) BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null); if [[ -n "$BRANCH" && "$BRANCH" != "HEAD" ]]; then git add backlog/ && git commit -m "Backlog auto-sync [skip ci]" 2>/dev/null; attempt=0; while [[ $attempt -le 4 ]]; do git push -u origin "$BRANCH" 2>&1 && break; attempt=$((attempt+1)); [[ $attempt -le 4 ]] && { echo "backlog-sync: push failed, retrying in $((2**attempt))s..." >&2; sleep $((2**attempt)); }; done; fi;; esac; } || trueSkilljq -r '.tool_input.skill // empty' | grep -qiF backlog && { BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null); if [[ -n "$BRANCH" && "$BRANCH" != "HEAD" ]]; then git add backlog/ && git commit -m "Backlog auto-sync [skip ci]" 2>/dev/null; attempt=0; while [[ $attempt -le 4 ]]; do git push -u origin "$BRANCH" 2>&1 && break; attempt=$((attempt+1)); [[ $attempt -le 4 ]] && { echo "backlog-sync: push failed, retrying in $((2**attempt))s..." >&2; sleep $((2**attempt)); }; done; fi; } || truemcp__*backlog*BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null); if [[ -n "$BRANCH" && "$BRANCH" != "HEAD" ]]; then git add backlog/ && git commit -m "Backlog auto-sync [skip ci]" 2>/dev/null; attempt=0; while [[ $attempt -le 4 ]]; do git push -u origin "$BRANCH" 2>&1 && break; attempt=$((attempt+1)); [[ $attempt -le 4 ]] && { echo "backlog-sync: push failed, retrying in $((2**attempt))s..." >&2; sleep $((2**attempt)); }; done; fi || true${CLAUDE_PLUGIN_ROOT}/.claude-agent-flow/scripts/session-start.shRuns hydrate.py on session start to restore state and compact.py after Bash tool uses to manage session data. Executes Python scripts, touches bash, no file writes.
Share bugs, ideas, or general feedback.