A Claude Code PreToolUse hook that prevents Claude from reading files that match patterns in .claudeignore files, similar to how .gitignore works.
- Hierarchical .claudeignore support: Automatically discovers and applies
.claudeignorefiles from the current directory up to the root - Supports standard gitignore-style patterns
- Works as a Claude Code PreToolUse hook
- Exits with code 2 when a path is ignored, preventing Claude from reading the file
- Filters out comments (lines starting with #) and empty lines
- Flexible project configuration with multiple ignore levels
Install globally to use across all projects:
npm install -g claudeignoreTo update to the latest version:
npm update -g claudeignoreRun the init command in your project directory:
claude-ignore initThis will:
- Create a
.claudeignorefile if it doesn't exist - Set up
.claude/settings.jsonwith the necessary hook configuration - If
.claude/settings.jsonalready exists, it will show you the template configuration for manual merging
- Create a
.claudeignorefile in your project root with patterns to ignore:
.env
*.secret
- Configure Claude Code to use this as a PreToolUse hook by adding to
.claude/settings.json:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Read",
"hooks": [
{
"type": "command",
"command": "claude-ignore"
}
]
}
]
}
}Initializes claude-ignore configuration in your project:
- Creates
.claudeignorefile from template if it doesn't exist - Creates
.claude/settings.jsonwith hook configuration if it doesn't exist - Shows template configuration for manual merging if
.claude/settings.jsonalready exists
Checks if a file should be ignored based on .claudeignore patterns. This is used internally by Claude Code as a PreToolUse hook.
When Claude tries to read a file, this hook:
- Discovers all
.claudeignorefiles: Starting from the current directory, it searches upward through parent directories to find all.claudeignorefiles - Loads ignore patterns hierarchically: Patterns from all discovered files are combined, with files closer to the root being processed first
- Checks if the file path matches any ignore patterns from any level
- If matched, exits with code 2 to block the read operation
- If not matched, allows Claude to proceed with reading the file
This hierarchical approach allows for flexible project configuration where you can have:
- Global ignore patterns at the project root
- Specific ignore patterns in subdirectories
- Different ignore rules for different parts of your project
- Install dependencies:
npm install- Build the library:
npm run build- Watch mode for development:
npm run dev- Type checking:
npm run typecheck