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

precc-hook-binääri on PRECCin ydin. Se sijaitsee Claude Coden ja kuoren välissä käsitellen jokaisen bash-komennon alle 5 millisekunnissa.

Miten Claude Code kutsuu hookia

Claude Code tukee PreToolUse hookeja – ulkoisia ohjelmia, jotka voivat tarkastella ja muokata työkalujen syötteitä ennen suoritusta. Kun Claude aikoo suorittaa bash-komennon, se lähettää JSONin precc-hook:lle stdiniin ja lukee vastauksen stdoutista.

Pipeline-vaiheet

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

Esimerkki: JSON-syöte ja -tuloste

Syöte (Claude Codelta)

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

PRECC havaitsee, ettei nykyisessä hakemistossa ole Cargo.toml-tiedostoa, mutta ./myapp/Cargo.toml löytyy.

Tuloste (Claude Codelle)

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

Jos muutosta ei tarvita, updatedInput.command on tyhjä ja Claude Code käyttää alkuperäistä komentoa.

Vaiheiden yksityiskohdat

Vaihe 1: JSON-jäsennys

Lukee täyden JSON-objektin stdinistä. Poimii tool_input.command. Jos jäsennys epäonnistuu, hook poistuu välittömästi ja Claude Code käyttää alkuperäistä komentoa (fail-open-suunnittelu).

Vaihe 2: Taitojen sovitus

Kyselee SQLite-heuristiikkatietokantaa taidoista, joiden laukaisumalli vastaa komentoa. Taidot tarkistetaan prioriteettijärjestyksessä. Sekä sisäänrakennetut TOML-taidot että opitut taidot arvioidaan.

Vaihe 3: Hakemistokorjaus

Koontikomennoille (cargo, go, make, npm, python jne.) tarkistaa, onko odotettu projektitiedosto nykyisessä hakemistossa. Jos ei, skannaa lähihakemistoja lähimmän vastaavuuden löytämiseksi ja lisää cd <dir> && eteen.

Hakemistoskannaus käyttää välimuistiin tallennettua tiedostojärjestelmäindeksiä 5 sekunnin TTL:llä nopeuden säilyttämiseksi.

Vaihe 4: GDB-tarkistus

Jos komento todennäköisesti aiheuttaa kaatumisen (esim. debug-binäärin ajaminen), PRECC voi ehdottaa tai syöttää GDB-käärejä strukturoidun debug-tulosteen kaappaamiseksi raakojen kaatumislokien sijaan.

Vaihe 5: RTK-uudelleenkirjoitus

Soveltaa RTK (Rewrite Toolkit) -sääntöjä, jotka lyhentävät monisanaisia komentoja, vaimentavat kohinaista tulostetta tai uudelleenjärjestävät komentoja tokenitehokkuuden saavuttamiseksi.

Vaihe 6: JSON-tuloste

Serialisoi muokatun komennon takaisin JSONiksi ja kirjoittaa sen stdoutiin. Jos muutoksia ei tehty, tuloste signaloi Claude Codelle käyttää alkuperäistä komentoa.

Suorituskyky

Koko pipeline valmistuu alle 5 millisekunnissa (p99). Keskeiset optimoinnit:

  • SQLite WAL-tilassa lukitusvapaita samanaikaisia lukuja varten
  • Esikäännetyt regex-mallit taitojen sovitukseen
  • Välimuistiin tallennetut tiedostojärjestelmän skannaukset (5 sekunnin TTL)
  • Ei verkkokutsuja kriittisellä polulla
  • Fail-open: mikä tahansa virhe putoaa alkuperäiseen komentoon

Hookin manuaalinen testaus

Voit kutsua hookia suoraan:

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