Preskočiť na obsah

Claude Code permissions: kedy je skip permissions bezpečné?

Pre CTO a vývojárovHarness a kontroly · Aktualizované

Filip Papraneczakladateľ Digitaliko

Vypnite otázky, nie brzdy. Ilustrácia: terminál s príkazom claude --dangerously-skip-permissions, vedľa súbor nastavení so zoznamami deny, ask a allow a hook, ktorý zablokuje push na main.Vypnite otázky, nie brzdy. Ilustrácia: terminál s príkazom claude --dangerously-skip-permissions, vedľa súbor nastavení so zoznamami deny, ask a allow a hook, ktorý zablokuje push na main.

Claude Code permissions sa dajú vypnúť jedným prepínačom: --dangerously-skip-permissions zruší všetky otázky na povolenie pre celú session. Je to to isté ako --permission-mode bypassPermissions a dokumentácia Anthropicu hovorí, že patrí len do kontajnerov alebo VM, kde Claude Code nemôže nič poškodiť. Držíme sa toho doslova: na notebooku vývojára pracuje agent pod pravidlami allow, ask a deny a pod hookmi. Plný bypass beží len v izolovanom stroji s vlastnými účtami.

Krátka odpoveď pre CTO: prepínač nezakazujte, rozhodnite, kde je povolený. Pravidlá pre notebook, hooky na to, čo pravidlá nevidia, a izolácia pre všetko, čo beží bez dozoru.

Čo presne --dangerously-skip-permissions vypne?

Claude Code má šesť režimov oprávnení. Prepínač vyberie posledný:

RežimČo beží bez pýtaniaKde ho používame
defaultLen čítanieKontroly len na čítanie v našej agentovej slučke
acceptEditsČítanie, úpravy súborov, základné príkazy so súbormiInteraktívna práca, pri ktorej sa pozeráte
planČítanie, potom plán, ktorý schválitePrieskum pred zmenou
autoVšetko, akcie kontroluje klasifikátorV produkcii zatiaľ nie
dontAskLen vopred povolené nástroje, ostatné zamietneUzamknuté CI a skripty
bypassPermissionsVšetkoLen izolované stroje

„Všetko“ má výnimky a tie sú dôležité. Podľa dokumentácie režimov žiadny režim automaticky nepovolí nástroje, na ktoré sedí explicitné ask pravidlo, rozpoznané rm mazanie kritických ciest ani nástroje, ktoré potrebujú človeka, napríklad AskUserQuestion. Hooky bežia ďalej. Bypass naopak zruší otázku pred zápisom do chránených ciest ako .git a .claude, ktorú si ostatné režimy nechávajú.

Bypass teda neznamená „žiadne pravidlá“. Znamená „žiadny človek v slučke“. Otázka je, či je v slučke niečo iné.

Ako rozhodujú pravidlá allow, ask a deny?

Pravidlá sú v settings.json ako tri zoznamy. Toto je skrátená verzia z nášho verejného Claude Code production starteru:

{
  "permissions": {
    "allow": ["Bash(pnpm check)", "Bash(pnpm test:*)", "Bash(bash scripts/gate.sh:*)"],
    "ask": ["Bash(git push:*)", "Bash(gh pr merge:*)", "Bash(vercel --prod:*)", "Bash(wrangler deploy:*)"],
    "deny": ["Read(**/.env)", "Read(**/*.pem)", "Bash(git push --force:*)", "Bash(git reset --hard:*)", "Bash(psql:*)"]
  }
}

Už samotný tvar je politika. Allow pre to, čo agent potrebuje na kontrolu vlastnej práce. Ask pre všetko, čo opúšťa stroj: push, merge, nasadenie. Deny pre tajné súbory, prepisovanie histórie a priamy prístup do databázy.

Claude Code vyhodnocuje najprv deny, potom ask, potom allow a vyhráva prvá zhoda. Deny sa nedá otvoriť užším allow. Platí to aj naprieč súbormi: deny v repozitári prebije allow v niečích osobných nastaveniach. Preto tímové pravidlá patria do .claude/settings.json v repozitári a osobné skratky do ~/.claude/settings.json.

Permission rules are enforced by Claude Code, not by the model. Instructions in your prompt or CLAUDE.md shape what Claude tries to do, but they don't change what Claude Code allows.

Claude Code docs
Configure permissions, Anthropic

Táto veta je dôvod, prečo treba každé „nikdy nerob X“ presunúť z CLAUDE.md do pravidla alebo hooku.

Čo pravidlo oprávnenia nevidí?

Pravidlo porovnáva text príkazu. Tri veci mu ujdú:

  • Ktorá vetva. Bash(git push:*) nerozlíši git push origin feat/x od git push origin main. Keď sa pýta pri každom pushi, ľudia začnú klikať áno bez čítania.
  • Nepriamy prístup. Dokumentácia to hovorí priamo: Read deny pravidlá nepokryjú Python ani Node skript, ktorý si súbor otvorí sám, a Bash deny nesedí na ten istý program vnútri sh -c.
  • Kontext. Pravidlo nevie, kto session spustil ani v akom repozitári beží.

Tu si PreToolUse hook zaslúži svoje miesto. Dostane celé volanie nástroja ako JSON, môže spustiť ľubovoľnú logiku a exit 2 volanie zablokuje ešte pred vyhodnotením pravidiel. Jadro nášho push gate, skrátené:

CMD=$(jq -r '.tool_input.command // empty')
[[ "$CMD" != *"git push"* ]] && exit 0
BRANCH=$(git -C "${CLAUDE_PROJECT_DIR:-.}" branch --show-current 2>/dev/null)
if [[ "$CMD" =~ [[:space:]:](main|master)([[:space:]]|$) || "$BRANCH" == "main" ]]; then
  echo "Pushing to main is not allowed. Push a branch and open a PR." >&2
  exit 2
fi

Verzia v našom firemnom plugine ide ďalej: prečíta úroveň repozitára, takže v repozitároch s kódom blokuje push do každej chránenej vetvy pre všetkých, kým v repozitároch s dokumentáciou môže pushovať zakladateľ. To pravidlo nevyjadrí.

Tri vrstvy oprávnení v Claude Code. Vrstva 1, pravidlá v settings.json: deny pre tajné súbory a force push, ask pred pushom, allow pre testy. Vrstva 2, PreToolUse hooky: prečítajú celý príkaz a push na main zablokujú cez exit 2. Vrstva 3, izolácia: bypassPermissions len v samostatnej VM s vlastným GitHub účtom a vypínačom.Tri vrstvy oprávnení v Claude Code. Vrstva 1, pravidlá v settings.json: deny pre tajné súbory a force push, ask pred pushom, allow pre testy. Vrstva 2, PreToolUse hooky: prečítajú celý príkaz a push na main zablokujú cez exit 2. Vrstva 3, izolácia: bypassPermissions len v samostatnej VM s vlastným GitHub účtom a vypínačom.

Hook potrebuje vlastný test, inak môže stíchnuť. Presne na tom sme stratili týždeň, rozpisujeme to v článku Claude Code hooks: prečo naše hooky nerobili nič.

Kedy je vypnutie oprávnení naozaj bezpečné?

Keď je hranicou samotný stroj. Behy bez dozoru spúšťame s --permission-mode bypassPermissions a --disallowedTools AskUserQuestion ExitPlanMode, lebo nikto nie je pri tom, aby na otázku odpovedal. Prijateľné to nerobí prepínač, ale to, čo je okolo neho. Pre AI agenta, ktorý u nás stále beží a rieši issues, to vyzerá takto:

  1. Samostatná macOS VM

    Agent žije vo vlastnom virtuálnom stroji. Jeho sieť vidí internet, ale nie našu kancelársku sieť ani služby na hostiteľovi.

  2. Vlastný GitHub účet

    Strojový používateľ s právom zápisu len do repozitárov, ktoré dostane. Žiadny admin, žiadne obchádzanie ochrany vetvy main.

  3. Tie isté hooky ako ľudia

    Hooky z pluginu bežia v každej session: push gate aj blok AI podpisu. Bypass preskočí otázky, nie hooky.

  4. Vypínač

    Jeden príkaz zastaví VM. Postup potom zruší jeho GitHub token a odhlási jeho Claude session.

Aj v bypasse ostáva merge na človeku. Agent otvorí pull request, ochrana vetvy vyžaduje schválenie a to schválenie nikdy nie je agentovo.

Opačný extrém je reviewer v CI. Tiež beží bez dozoru, ale namiesto bypassu dostane presný zoznam nástrojov:

claude_args: --allowed-tools "Read,Glob,Grep,Bash(git diff:*),Bash(git log:*),Bash(gh pr diff:*),Bash(gh pr view:*)"

Diff si prečíta a okomentuje. Nemôže upravovať, pushovať ani mergovať, takže nie je čo obchádzať.

A čo vstavaný sandbox?

Claude Code má sandbox na úrovni operačného systému, ktorý obmedzí, čo shell príkazy a ich podprocesy môžu čítať, zapisovať a kam sa môžu pripojiť. Je to správna odpoveď na druhé slepé miesto vyššie, lebo nezávisí od textu príkazu.

Pred zavedením stojí za to poznať jedno nastavenie. permissions.disableBypassPermissionsMode: "disable" v managed settings zoberie bypass všetkým. Používateľ si ho môže nastaviť aj sám sebe.

Ako nastaviť oprávnenia v Claude Code pre tím?

Prejdite si, čo vaše repozitáre už majú:

Poradie je dôležité. Deny pravidlá nestoja nič a najhoršie prípady zastavia hneď prvý deň. Hook príde na rad potom. Izoláciu potrebujete, až keď niečo beží bez človeka.

Ako tieto pravidlá sedia vedľa CLAUDE.md a tímových konvencií, rozoberáme v článku Pravidlá pre AI kód v tíme. Ako slučka bez dozoru dovedie issue až do pull requestu, je v článku Harness engineering v praxi.

Chcete agentov, ktorí sú rýchli a aj tak nerozbijú produkciu?

Pravidlá oprávnení, hooky, izoláciu aj CI nastavujeme priamo v repozitároch tímu v službe AI-native SDLC pre vývojové tímy. AI dnes píše všetok náš kód a za výsledok ručí senior. Od roku 2023 sme dodali 15+ produkčných projektov.

Ozveme sa do dvoch pracovných dní a spolu vyberieme, čo vyriešime ako prvé.

Ak sa chcete najprv porozprávať, dohodnite si meeting na 15 minút s Filipom.

Kam by sa váš agent dnes dostal, keby nikto neodpovedal ani na jednu otázku?

V skratke

  • --dangerously-skip-permissions je bypassPermissions: žiadne otázky, ale ask pravidlá, kritické mazania a hooky platia ďalej.
  • Pravidlá sa vyhodnocujú v poradí deny, ask, allow. Tímové pravidlá patria do settings.json v repozitári.
  • Pravidlo vidí len text príkazu. PreToolUse hook vidí vetvu, repozitár aj kontext.
  • Plný bypass len v izolovanom stroji s vlastnými účtami, vypínačom a človekom, ktorý schvaľuje každý merge.

Časté otázky

Čo robí --dangerously-skip-permissions v Claude Code?

Spustí session v režime bypassPermissions, rovnako ako --permission-mode bypassPermissions. Claude Code sa prestane pýtať pred príkazmi, úpravami súborov aj sťahovaním webov. Explicitné ask pravidlá, niekoľko kritických mazaní a nástroje, ktoré potrebujú človeka, sa stále pýtajú a hooky bežia ďalej.

Je YOLO režim v Claude Code bezpečný?

Len v izolovanom prostredí. Anthropic odporúča bypassPermissions iba v kontajneroch alebo VM, kde Claude Code nemôže nič poškodiť. Na notebooku vývojára so skutočnými prístupmi použite radšej pravidlá a hooky.

V akom poradí sa vyhodnocujú pravidlá allow, ask a deny?

Najprv deny, potom ask, potom allow. Vyhráva prvá zhoda v tomto poradí, takže allow pravidlo nikdy neurobí výnimku z deny a ask sa spýta, aj keď zároveň sedí užšie allow pravidlo.

Kde sú uložené nastavenia oprávnení v Claude Code?

V súboroch settings.json: managed settings pre celú organizáciu, ~/.claude/settings.json pre jedného človeka, .claude/settings.json v repozitári pre tím a .claude/settings.local.json pre lokálne úpravy. Managed settings majú prednosť a deny z ktorejkoľvek úrovne prebije allow z inej.

Ako zakázať vývojárom bypass režim?

Nastavte permissions.disableBypassPermissionsMode na "disable", ideálne v managed settings, kde ho nikto neprepíše.

Opýtajte sa AI na tento článok

AI pri odpovedi využije aj naše ďalšie články a skúsenosti z reálnych projektov.

ChatGPTClaudePerplexity
Engineering

Ostatné články

Harness a kontroly

Playwright MCP: AI agent overí zmenu v prehliadači

Playwright MCP dáva AI agentovi skutočný prehliadač. Ako ho používame, aby agent overil svoju zmenu v bežiacej aplikácii a vrátil PASS alebo FAIL so screenshotmi, čo tým chytíme oproti unit testom a kedy sú lepšie obyčajné Playwright skripty.

Harness a kontroly

LLM as a judge: AI recenzent, ktorý sa snaží prácu vyvrátiť

LLM as a judge znamená, že jazykový model hodnotí prácu iného modelu podľa spísaných kritérií. Ako ho používame na každom pull requeste nášho AI agenta: najprv strojové kontroly, potom čerstvá session len na čítanie, ktorá má prácu vyvrátiť, typovaný verdikt a pravidlá, ktoré pribudli po jeho chybách.

Harness a kontroly

AI code review s Claude Code v CI: čo AI prehliadne

Ako robíme AI code review s Claude Code na každom pull requeste jednou zdieľanou GitHub Action: čo má AI recenzent hľadať, ako bolo zelené a mlčalo, čo prehliadne a prečo schvaľuje len človek.

Čas prestať plánovať a začať riešiť.

Kontakt

  • Digitaliko s.r.o.
    Šípková 377/17
    958 03 Malé Uherce, Slovensko
  • Ozvite sa nám
    info@digitaliko.com
    +421 950 595 506
    WhatsApp