Preskoči na sadržaj

Claude Stop Hooks

Dva stop hooka za Claude Code koji na kraju svakog turna automatski provjere rad prije nego što sesija stane — jedan gleda šta si uradio (git diff), drugi šta si rekao (tvrdnje vs stvarni razgovor + kod). Oba koriste codex CLI (preko LiteLLM gatewaya), rade u svakom projektu, i uključuju se po projektu.

Prvo podesi Codex

Ovi hookovi pretpostavljaju da je codex CLI već vezan na LiteLLM gateway. Ako nije — prvo prođi kroz Codex setup, pa se vrati ovdje.

Preuzmi ZIP (sve fajlove)


Šta rade

Hook Provjerava Kako
codex_stop_review.py šta si URADIO — kvalitet git diff-a agentic codex exec (read-only) nad repom
claim_review.py šta si REKAO — da li tvrdnje drže vodu agentic codex exec čita cijeli session transcript + repo

Oba vraćaju ALLOW (pusti stop) ili BLOCK (2–3 rečenice zašto + šta popraviti).

Globalni hook, per-projekat config

Hook skripte žive globalno u ~/.claude/, pa rade svuda. Ali odluka (da li je upaljen, koji model) je isključivo per-projekat — nema globalnog config fajla. Gate je OFF po defaultu; pali se tek kad u projektu pokreneš --enable.


Preduvjeti

  • Python 3.9+ (python3 na PATH-u)
  • codex CLI — instaliran i konfigurisan za LiteLLM gateway (codex login status ne mora biti "logged in" ako se koristi LITELLM_API_KEY). Setup: Codex preko LiteLLM
  • Modeli gpt-5.3-codex-spark (codex gate) i gpt-5.5 (claim gate) dostupni u tvom Codex/LiteLLM setupu (default-i; mogu se promijeniti po projektu)

Instalacija

  1. Preuzmi i raspakuj ZIP.
  2. Pokreni installer:

    cd claude-stop-hooks
    bash install.sh
    

Skripta kopira hookove + komande u ~/.claude/ i idempotentno registruje oba Stop hooka u ~/.claude/settings.json (ne duplira ako već postoje, ne dira ostatak fajla).

Raspakuj ZIP, pa:

  1. Hookovi~/.claude/hooks/ (pa chmod +x):

    mkdir -p ~/.claude/hooks
    cp hooks/codex_stop_review.py hooks/claim_review.py ~/.claude/hooks/
    chmod +x ~/.claude/hooks/codex_stop_review.py ~/.claude/hooks/claim_review.py
    
  2. Slash komande~/.claude/commands/:

    mkdir -p ~/.claude/commands/codex-review ~/.claude/commands/claim-review
    cp commands/codex-review/setup.md      ~/.claude/commands/codex-review/
    cp commands/claim-review/setup.md   ~/.claude/commands/claim-review/
    
  3. Registruj Stop hookovespoji (merge) sadržaj settings.snippet.json u hooks.Stop niz tvog ~/.claude/settings.json. Ne prepisuj cijeli fajl — samo dodaj ova dva unosa u hooksStop:

    "Stop": [
      { "hooks": [ { "type": "command", "command": "python3 \"$HOME/.claude/hooks/codex_stop_review.py\"", "timeout": 900 } ] },
      { "hooks": [ { "type": "command", "command": "python3 \"$HOME/.claude/hooks/claim_review.py\"", "timeout": 900 } ] }
    ]
    

Ne prepisuj settings.json

Tvoj ~/.claude/settings.json već ima druge postavke (permissions, ostali hookovi, plugins…). Dodaj samo dva Stop unosa u postojeći hooks blok. Installer to radi automatski i sigurno; ručno — pazi da samo proširiš hooks.Stop.

Gdje šta ide (sažeto)

Iz ZIP-a Odredište
hooks/codex_stop_review.py ~/.claude/hooks/codex_stop_review.py
hooks/claim_review.py ~/.claude/hooks/claim_review.py
commands/codex-review/setup.md ~/.claude/commands/codex-review/setup.md
commands/claim-review/setup.md ~/.claude/commands/claim-review/setup.md
settings.snippet.json merge u ~/.claude/settings.jsonhooks.Stop

Uključivanje po projektu

Oba gate-a su OFF dok ih ne upališ u tom projektu. Iz Claude sesije otvorene u repou koji želiš da čuvaš:

/codex-review:setup --enable        # upali diff-review gate ovdje
/claim-review:setup --enable     # upali claim-verification gate ovdje

Ovo upiše {"enabled": true} u <repo>/.claude/<hook>.json. Provjera:

/codex-review:setup --status
/claim-review:setup --status

Commit ili lično

<repo>/.claude/codex-review.json / claim-review.json možeš commit-ovati (gate radi za svakog ko klonira repo) ili dodati u .gitignore (lično tvoje).


Komande (reference)

Iste zastavice za oba gate-a (/codex-review:setup i /claim-review:setup):

Komanda Efekat
--enable upali gate za ovaj projekat
--disable ugasi gate za ovaj projekat
--model <ime> postavi model za ovaj projekat (npr. gpt-5.5)
--clear-model vrati na default (gpt-5.3-codex-spark za codex, gpt-5.5 za claim)
--status prikaži efektivni config (ništa ne upisuje)

Kako se ponaša

  • OFF po defaultu — registrovan globalno, ali no-op dok projekat ne postavi enabled: true. Ne troši ništa u projektima gdje nije upaljen.
  • Fail-open — ako codex fali, timeout-uje ili pukne, hook upiše grešku na stderr i pusti stop. Slomljen gate nikad ne zaglavi sesiju.
  • claim_review čeka flush — prije čitanja, sačeka da Claude Code završi upis transkripta tog turna, da codex vidi i zadnje tool pozive/rezultate (ne samo rani dio).
  • Nezavisni — pale/gase se odvojeno; možeš imati samo jedan, oba, ili nijedan po projektu.

Troubleshooting

Komanda javlja No such file or directory /.claude/...

Slash komanda se vrti iz root-a projekta; ako vidiš /.claude/... (prazan $CLAUDE_PROJECT_DIR), provjeri da je komanda u ~/.claude/commands/.../setup.md ispravno kopirana (koristi $HOME, ne hard-kodiranu putanju).

Gate se ne pali iako sam pokrenuo --enable

Pokreni --enable iz sesije otvorene u TOM projektu (piše u config tog repa). Provjeri sa --status da effective.enabled bude true.

codex CLI not found on PATH

Hook fail-open-uje (pusti stop) i piše to na stderr. Instaliraj/konfiguriši codex CLI; gate počinje da radi čim je dostupan.

Lažni BLOCK na nečemu što je tačno

claim_review čeka flush transkripta baš zbog toga. Ako se i dalje dešava na skorom tool-rezultatu — to je nepouzdanost transkripta, ne kod; prijavi.