Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Hook Pipeline

Het precc-hook binary is de kern van PRECC. Het zit tussen Claude Code en de shell en verwerkt elk bash-commando in minder dan 5 milliseconden.

Hoe Claude Code de Hook aanroept

Claude Code ondersteunt PreToolUse hooks – externe programma’s die tool-invoer kunnen inspecteren en wijzigen vóór uitvoering. Wanneer Claude een bash-commando gaat uitvoeren, stuurt het JSON naar precc-hook op stdin en leest het antwoord van stdout.

Pipeline Stappen

Claude Code
    |
    v
+---------------------------+
| 1. Parse JSON stdin       |  Read the command from Claude Code
+---------------------------+
    |
    v
+---------------------------+
| 2. Skill matching         |  Query heuristics.db for matching skills (Pillar 4)
+---------------------------+
    |
    v
+---------------------------+
| 3. Directory correction   |  Resolve correct working directory (Pillar 1)
+---------------------------+
    |
    v
+---------------------------+
| 4. GDB check              |  Detect debug opportunities (Pillar 2)
+---------------------------+
    |
    v
+---------------------------+
| 5. RTK rewriting          |  Apply command rewrites for token savings
+---------------------------+
    |
    v
+---------------------------+
| 6. Emit JSON stdout       |  Return modified command to Claude Code
+---------------------------+
    |
    v
  Shell executes corrected command

Voorbeeld: JSON invoer en uitvoer

Invoer (van Claude Code)

{
  "tool_input": {
    "command": "cargo build"
  }
}

PRECC detecteert dat de huidige map geen Cargo.toml heeft, maar ./myapp/Cargo.toml wel bestaat.

Uitvoer (naar Claude Code)

{
  "hookSpecificOutput": {
    "updatedInput": {
      "command": "cd /home/user/projects/myapp && cargo build"
    }
  }
}

Als er geen wijziging nodig is, is updatedInput.command leeg en gebruikt Claude Code het oorspronkelijke commando.

Stap Details

Stap 1: JSON Parsen

Leest het volledige JSON-object van stdin. Extraheert tool_input.command. Als het parsen mislukt, stopt de hook onmiddellijk en gebruikt Claude Code het oorspronkelijke commando (fail-open ontwerp).

Stap 2: Skill Matching

Bevraagt de SQLite heuristics-database voor skills waarvan het triggerpatroon overeenkomt met het commando. Skills worden in prioriteitsvolgorde gecontroleerd. Zowel ingebouwde TOML-skills als geminde skills worden geëvalueerd.

Stap 3: Directory Correctie

Voor build-commando’s (cargo, go, make, npm, python, enz.) controleert of het verwachte projectbestand bestaat in de huidige map. Zo niet, scant nabijgelegen mappen voor de dichtstbijzijnde match en voegt cd <dir> && toe aan het begin.

De directoryscan gebruikt een gecachte bestandssysteemindex met een 5 seconden TTL om snel te blijven.

Stap 4: GDB Controle

Als het commando waarschijnlijk een crash veroorzaakt (bijv. het uitvoeren van een debug binary), kan PRECC GDB-wrappers voorstellen of injecteren om gestructureerde debug-uitvoer vast te leggen in plaats van ruwe crash-logs.

Stap 5: RTK Herschrijving

Past RTK (Rewrite Toolkit) regels toe die uitgebreide commando’s verkorten, ruis in uitvoer onderdrukken of commando’s herstructureren voor token-efficiëntie.

Stap 6: JSON Uitvoer

Serialiseert het gewijzigde commando terug naar JSON en schrijft het naar stdout. Als er geen wijzigingen zijn aangebracht, signaleert de uitvoer Claude Code om het oorspronkelijke commando te gebruiken.

Prestaties

De volledige pipeline wordt voltooid in minder dan 5 milliseconden (p99). Belangrijke optimalisaties:

  • SQLite in WAL-modus voor lockvrije gelijktijdige leesbewerkingen
  • Voorgecompileerde regex-patronen voor skill matching
  • Gecachte bestandssysteemscans (5 seconden TTL)
  • Geen netwerkoproepen in het hot path
  • Fail-open: elke fout valt terug op het oorspronkelijke commando

De Hook handmatig testen

U kunt de hook direct aanroepen:

$ echo '{"tool_input":{"command":"cargo build"}}' | precc-hook
{"hookSpecificOutput":{"updatedInput":{"command":"cd /home/user/myapp && cargo build"}}}