How the Augment Hook in GitNexus Works with Claude Code PreToolUse
The augment hook in GitNexus intercepts Claude Code PreToolUse events—such as grep, glob, or bash commands containing ripgrep—to inject knowledge-graph context from the repository index, enriching the AI's understanding before the tool executes.
The augment hook bridges Claude Code's tool invocation system with GitNexus's semantic code knowledge graph. When developers use search tools within Claude Code, the hook automatically enhances queries with relevant context extracted from the repository's indexed structure.
Hook Invocation and Event Parsing
Claude Code triggers the augment hook by spawning gitnexus/hooks/claude/gitnexus-hook.cjs and feeding the hook event JSON via stdin. The readInput function parses this payload to extract critical metadata required for augmentation.
The hook expects the hook_event_name field to equal "PreToolUse" and captures three essential components:
- tool_name: Identifies the tool type (
Grep,Glob, orBash) - tool_input: Contains the raw search parameters or command string
- cwd: The current working directory for repository resolution
Pattern Extraction and Normalization
The extractPattern function transforms diverse tool inputs into a standardized search term that the augmentation engine can process. Each tool type requires specific parsing logic:
Grep tools extract the pattern field directly from tool_input.
Glob tools parse the path pattern and isolate the first meaningful path segment, ignoring wildcards and file extensions to focus on directory structure.
Bash commands parse rg or grep invocations using argument tokenization. The function skips command flags (arguments starting with -) and returns the first non-flag argument containing three or more characters, ensuring meaningful search terms rather than single-letter options.
Repository Detection and CLI Resolution
Before executing augmentation, the hook must locate the GitNexus index and resolve the CLI binary.
Finding the .gitnexus Directory
The findGitNexusDir function walks up the directory tree from the current working directory, searching for a .gitnexus folder that contains the knowledge graph database. If no repository index is found, the hook aborts silently to prevent disrupting the user's workflow.
Resolving the CLI Path
The resolveCliPath function employs a three-tier resolution strategy to locate the gitnexus executable:
- Bundled path: Checks
dist/cli/index.jsrelative to the hook location - Global resolution: Uses
require.resolve('gitnexus/dist/cli/index.js')for globally installed packages - npx fallback: Returns an empty string to trigger
npx gitnexusexecution when no local binary exists
Executing the Augment Command
The runGitNexusCli function executes the augmentation synchronously with a strict seven-second timeout to maintain responsiveness. The hook constructs and runs the command:
gitnexus augment -- <pattern>
Critical implementation detail: The augmentation CLI writes results to stderr rather than stdout because stdout is captured by the KuzuDB native module. The hook specifically captures child.stderr to retrieve the enriched context.
If the CLI execution fails, times out, or returns empty results, the hook handles these cases gracefully without throwing errors that could interrupt Claude Code's operation.
Returning Context to Claude Code
When the augmentation produces results, the hook formats a JSON payload and prints it to stdout:
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"additionalContext": "<augmented text from knowledge graph>"
}
}
Claude Code receives this payload and injects the additionalContext into the conversation flow, effectively prepending relevant code relationships, function definitions, and architectural context to the user's original search query.
Installation and Setup
The hook integrates with Claude Code through the setup command implemented in gitnexus/src/cli/setup.ts. Running gitnexus setup executes the installClaudeCodeHooks function, which:
- Copies
gitnexus-hook.cjsto the appropriate hooks directory - Merges PreToolUse and PostToolUse entries into
~/.claude/settings.json - Configures the hook to trigger on relevant tool invocations
Once installed, any grep, rg, glob, or bash command containing search patterns automatically receives knowledge graph augmentation without requiring manual intervention.
Summary
- The augment hook intercepts Claude Code PreToolUse events via
gitnexus/hooks/claude/gitnexus-hook.cjsto enrich search queries with repository context. - Pattern extraction handles Grep, Glob, and Bash tools differently, normalizing inputs to extract meaningful search terms while filtering flags and wildcards.
- Repository detection requires a
.gitnexusdirectory containing the knowledge graph index; the hook aborts silently if none exists. - The CLI resolution strategy tries bundled paths, global npm installs, and falls back to
npxto ensure thegitnexus augmentcommand is always available. - Results are captured from stderr (due to KuzuDB stdout capture) and returned to Claude Code as
additionalContextin a JSON payload, seamlessly enriching the AI's understanding of the codebase.
Frequently Asked Questions
How does the augment hook handle different search tools like grep and glob?
The hook uses the extractPattern function to normalize inputs based on tool type. For Grep tools, it extracts the pattern field directly. For Glob tools, it isolates the first meaningful path segment while ignoring wildcards. For Bash commands, it tokenizes the command line, skips flag arguments starting with -, and returns the first substantive search term that is three or more characters long.
What happens if the GitNexus repository index is not found?
If the findGitNexusDir function cannot locate a .gitnexus directory when walking up from the current working directory, the hook aborts silently. This design ensures that Claude Code continues operating normally without errors, even when working in repositories that have not been indexed by GitNexus.
Why does the augment command write results to stderr instead of stdout?
The augmentation CLI writes to stderr because stdout is captured by the KuzuDB native module during execution. To ensure reliable communication between the CLI and the hook, the implementation deliberately uses stderr as the channel for returning augmented context. The runGitNexusCli function specifically captures child.stderr to retrieve these results.
How is the augment hook installed into Claude Code?
Installation occurs through the gitnexus setup command, which executes the installClaudeCodeHooks function in gitnexus/src/cli/setup.ts. This process copies the gitnexus-hook.cjs script to the appropriate location and merges PreToolUse and PostToolUse configuration entries into the user's ~/.claude/settings.json file, enabling automatic hook invocation on relevant tool uses.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →