gaia: Hook for Claude Code

.claude/settings.json

PreToolUse is a hook for Claude Code from gaia-react/gaia. Its token cost is not measured, scanned B, original, MIT.

A set of checks that run before an agent uses selected tools, such as editing files, running commands, or reading project data.

In plain words
What is it for?
Use it to enforce project rules before tool calls, block unsafe file changes, check translation strings and stories, and prevent broken specification-to-plan workflows.
Why use it?
It can stop risky or disallowed changes before they happen, including edits to secrets, lockfiles, configuration, or required project files.

Hook for Claude Code

Written for Claude Code: ${CLAUDE_PROJECT_DIR variable.

This is gaia-react/gaia's own configuration. It tells Claude Code how to work on gaia itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything gaia configures →

One of 7 entries in settings.json upstream. Installing this one merges just its entry into your config; the other 6 are separate, each on its own page.

Reuse

Borrowing it

Nothing to install: this file belongs to gaia-react/gaia. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/gaia-react/gaia/main/.claude/settings.json
Clone the repo
git clone --depth 1 https://github.com/gaia-react/gaia

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for PreToolUse

README.md
[![agentmods](https://agentmods.dev/badge/hooks/gaia-react/gaia/pre-tool-use/github.svg)](https://agentmods.dev/hooks/gaia-react/gaia/pre-tool-use)
Your own site
<a href="https://agentmods.dev/hooks/gaia-react/gaia/pre-tool-use"><img src="https://agentmods.dev/badge/hooks/gaia-react/gaia/pre-tool-use/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for PreToolUse

Your own site · 80×15
<a href="https://agentmods.dev/hooks/gaia-react/gaia/pre-tool-use"><img src="https://agentmods.dev/badge/hooks/gaia-react/gaia/pre-tool-use.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session not measured What this adds to a session before it is invoked.
When invoked not measured Not applicable: nothing here is loaded into a session.
Security scan B 1 finding. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Security

Grade B, and why

PreToolUse scanned grade B with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 8d ago.

A static scan of the commands this hook runs, not an audit. A hook is shell that executes on your machine at the event it names, which is why every command in it is printed with what was found.

Recursive force deletemediumDestructive command

rm -rf with a variable or a broad path is one typo away from removing the wrong tree.

"statusMessage": "Checking rm -rf safety…"

Downgraded: this mod is about security review, or the phrase is quoted, so it is likely naming the pattern rather than instructing it.

.claude/settings.json · 139 lines

How it starts

The opening of the file, as written. The whole thing — 139 lines — stays where its author put it; the contents beside it link to each section on GitHub.

{
  "PreToolUse": [
    {
      "matcher": "Edit|Write|MultiEdit",
      "hooks": [
        {
          "type": "command",
          "command": "\"$(git rev-parse --show-toplevel 2>/dev/null || printf %s \"${CLAUDE_PROJECT_DIR:-.}\")/.claude/hooks/block-eslint-config-edit.sh\""
        },
        {
          "type": "command",
          "command": "\"$(git rev-parse --show-toplevel 2>/dev/null || printf %s \"${CLAUDE_PROJECT_DIR:-.}\")/.claude/hooks/block-secrets-write.sh\""
        },
        {
          "type": "command",
          "command": "\"$(git rev-parse --show-toplevel 2>/dev/null || printf %s \"${CLAUDE_PROJECT_DIR:-.}\")/.claude/hooks/block-manifest-write.sh\""
        },
        {
          "type": "command",
          "command": "\"$(git rev-parse --show-toplevel 2>/dev/null || printf %s \"${CLAUDE_PROJECT_DIR:-.}\")/.claude/hooks/block-worktree-path-mismatch.sh\""
        },
        {
          "type": "command",
          "command": "\"$(git rev-parse --show-toplevel 2>/dev/null || printf %s \"${CLAUDE_PROJECT_DIR:-.}\")/.claude/hooks/block-audit-loop-write.sh\""
        }
      ]
    },
    {
      "matcher": "Bash|Monitor",
      "hooks": [
        {
          "type": "command",
          "command": "\"$(git rev-parse --show-toplevel 2>/dev/null || printf %s \"${CLAUDE_PROJECT_DIR:-.}\")/.claude/hooks/block-handrolled-pr-poll.sh\""
        },
        {
          "type": "command",
          "command": "\"$(git rev-parse --show-toplevel 2>/dev/null || printf %s \"${CLAUDE_PROJECT_DIR:-.}\")/.claude/hooks/block-main-destructive-git.sh\"",
          "statusMessage": "Checking main-branch protection…"
        },
        {
          "type": "command",
          "command": "\"$(git rev-parse --show-toplevel 2>/dev/null || printf %s \"${CLAUDE_PROJECT_DIR:-.}\")/.claude/hooks/block-no-verify.sh\"",
          "statusMessage": "Checking commit-floor bypass…"
        },
        {
          "type": "command",
          "command": "\"$(git rev-parse --show-top

Read the full file on GitHub · 139 lines

Same file

What else settings.json configures

This page is one entry in a file that holds 7. Installing the file brings all of them; each is measured and scanned on its own page.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 8d ago Changed · -1 lines 758e96cbf7ba
  2. 9d ago Changed · -16 lines 60eaeaef685a
  3. 10d ago Changed · +5 lines d1182acd5134
  4. 16d ago Changed · +15 lines scan C → B 6d60da02df05
  5. 20d ago Changed · -25 lines 840b6a252a1b
  6. 22d ago Changed · -28 lines 2c29b6cfb217
  7. 23d ago Changed · -35 lines 39b73b5cdbe5
  8. 24d ago Changed · -5 lines c54faf85e490
  9. 25d ago Changed · -4 lines 73d4cc3d1c10
  10. 26d ago First seen · 233 lines scan C eed40787f82e

Subscribe to this mod's changes

PreToolUse is a hook published in the GitHub repository gaia-react/gaia (23 stars, last pushed today), licensed MIT. Its token cost is not measured: a hook is shell that never enters the context. A static security scan graded it B with 1 finding (recursive force delete). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.