Feature: Add git context fields to hook input (branch_name, is_worktree, worktree_root)

Resolved 💬 3 comments Opened Feb 7, 2026 by shuhei0866 Closed Feb 7, 2026

Summary

Add git context (branch name, worktree information) as standard fields in hook input JSON.

Background

Many guardrail hooks (PreToolUse, Stop, etc.) make decisions based on the current branch and worktree state. However, the current hook input does not include this information, requiring hooks to execute git commands internally.

Current Workaround

# Execute git commands in every hook
BRANCH=$(git branch --show-current 2>/dev/null)
GIT_COMMON_DIR=$(git rev-parse --git-common-dir 2>/dev/null)
GIT_DIR=$(git rev-parse --git-dir 2>/dev/null)
IS_WORKTREE=$( [ "$GIT_DIR" != "$GIT_COMMON_DIR" ] && echo "true" || echo "false" )

Proposal

Add the following fields to hook input:

{
  "tool_name": "Write",
  "tool_input": { "file_path": "..." },
  "git_context": {
    "branch_name": "release/my-feature",
    "is_worktree": true,
    "worktree_root": "/path/to/.worktrees/my-feature",
    "main_worktree_root": "/path/to/project",
    "has_uncommitted_changes": true
  }
}

Benefits

  1. Dramatically simplifies hook implementation
  2. Eliminates git command execution overhead
  3. Provides branch information even in environments where git is unavailable
  4. Unifies git context retrieval across all hooks

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗