Blog JSystems - uwalniamy wiedzę!

Szukaj

Claude Code

Claude Code prosi o zgodę mimo reguły allow - dlaczego nie działa

W skrócie

  • Dodałeś regułę allow na jakieś polecenie, a Claude Code i tak przy nim pyta o zgodę, jakby reguły nie było.
  • Najczęstsze powody to reguła deny albo ask, która ma pierwszeństwo, źle zapisany wzorzec, albo polecenie złożone, które nie pasuje do prostej reguły.
  • Sprawdź kolejność reguł, dopracuj składnię wzorca i pamiętaj, że każdy człon polecenia złożonego musi pasować z osobna.

Wydawało się proste: dopisujesz polecenie do listy allow, żeby Claude Code przestał o nie pytać, a mimo to przy każdym uruchomieniu znów prosi o zgodę. To jedna z częstszych zagadek przy konfiguracji uprawnień i prawie zawsze ma konkretne wyjaśnienie. Rozłóżmy ją na części i naprawmy.

Jak to wygląda w praktyce

Masz w settings.json regułę w rodzaju Bash(npm run *), a Claude Code i tak zatrzymuje się przy npm run build i czeka na potwierdzenie. Albo dopisałeś Bash(git log *), a on pyta o git log bez argumentów. Reguła wygląda poprawnie, plik jest zapisany, a efektu brak. Zanim uznasz, że coś jest zepsute, warto wiedzieć, że dopasowywanie reguł ma swoje ścisłe zasady - i to zwykle w nich leży przyczyna, a nie w błędzie narzędzia.

Dlaczego Claude Code tak działa

Powodów bywa kilka, wszystkie wynikają z tego, jak Claude Code dopasowuje reguły. Po pierwsze, hierarchia: deny bije ask, a ask bije allow. Jeśli pasująca reguła ask obejmuje to samo polecenie, dostaniesz pytanie mimo bardziej szczegółowej reguły allow. Po drugie, składnia wzorca. Gwiazdka na końcu ze spacją przed nią dopasowuje też samo polecenie: Bash(ls *) obejmuje ls, a ta sama reguła bez spacji, Bash(ls*), dopasuje również lsof. Wszystko przed pierwszą gwiazdką musi się zgadzać dosłownie, więc Bash(git log *) pozwala tylko na git log, a Bash(git *) na dowolne polecenie git. Po trzecie, polecenia złożone. Claude Code rozpoznaje operatory powłoki (&&, ||, ;, | i inne), więc reguła musi pasować do każdego członu z osobna - Bash(safe-cmd *) nie przepuści safe-cmd && other-cmd. Po czwarte, reguły allow z wieloznacznikiem w pozycji nazwy narzędzia muszą być zakotwiczone: nieokreślona reguła jak "*" jest pomijana z ostrzeżeniem i niczego nie zatwierdza. Dotyczy to też narzędzi MCP - regułę allow z nawiasami przy prefiksie mcp__ Claude Code pomija przy wczytywaniu ustawień.

Jak to rozwiązać krok po kroku

  1. Otwórz /permissions i sprawdź, czy nie masz reguły deny lub ask, która pasuje do tego samego polecenia. Jeśli tak - to ona wygrywa i to ją trzeba zdjąć albo zawęzić.
  2. Dopracuj składnię wzorca. Chcesz objąć też samo polecenie bez argumentów? Zostaw spację przed gwiazdką, jak w Bash(git log *). Pamiętaj, że tekst przed pierwszą gwiazdką jest dopasowywany dosłownie.
  3. Nie stawiaj gwiazdki przed podpoleceniem. Claude Code ostrzega przy starcie o regule allow z wieloznacznikiem przed resztą polecenia, jak Bash(git * main) - taka reguła nie zadziała tak, jak myślisz.
  4. Przy poleceniach złożonych dodaj regułę allow na każdy człon, który wymaga zgody. Przy zatwierdzaniu takiej komendy Claude Code i tak zapisuje osobną regułę dla każdego podpolecenia.
  5. Reguły allow na narzędzia MCP pisz bez nawiasów, po literalnym prefiksie serwera - na przykład mcp__github__get_* obejmuje narzędzia get_ z serwera github.
  6. Po zmianie sprawdź claude doctor - wypisze błędy i ostrzeżenia z plików ustawień, w tym pominięte reguły, dzięki czemu wyłapiesz literówki.

Jak sprawdzić, że zadziałało

Najpierw upewnij się, że reguła w ogóle została wczytana bez ostrzeżeń - pokaże to claude doctor, a listę aktywnych reguł zobaczysz w /permissions. Potem zrób próbę: uruchom dokładnie to polecenie, które chciałeś przepuścić, i sprawdź, czy Claude Code wykonuje je już bez pytania. Jeśli chodziło o polecenie złożone, przetestuj całą komendę z operatorem, a nie tylko pojedynczy człon. Gdy pytanie znika dla właściwego polecenia, a wraca dla tych, których nie objąłeś regułą, wiesz, że wzorzec działa dokładnie tak, jak chciałeś.

Wróć do listy: 100 najczęstszych problemów z Claude Code

Szkolenie Claude Code - od zera do zespołu agentów AI, prowadzi Łukasz Matuszewski (JSystems)

Szkolenie Claude Code - od zera do zespołu agentów AI -->

Szkolenie Claude Code - od zera do zespołu agentów AI

Tryb planowania, tryby uprawnień, komendy, MCP, hooki i systemy multi-agent - wszystko na żywym kodzie podczas trzydniowego szkolenia. Prowadzi Łukasz Matuszewski. Szkolenie ma terminy gwarantowane - odbędzie się niezależnie od liczby zgłoszeń.

Sprawdź szkolenie Claude Code

To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.

★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Najczęściej zadawane pytania

Dlaczego reguła allow nie działa i Claude Code nadal pyta?
Najczęstsze powody to pasująca reguła deny lub ask, która ma pierwszeństwo, źle zapisany wzorzec, albo polecenie złożone, które nie pasuje do prostej reguły. Zacznij od sprawdzenia w /permissions, czy nie masz blokady lub wymuszonego pytania na to samo polecenie.
Jak poprawnie zapisać wzorzec z gwiazdką w regule allow?
Tekst przed pierwszą gwiazdką jest dopasowywany dosłownie, a gwiazdka na końcu ze spacją przed nią obejmuje też samo polecenie: Bash(git log *) dopasuje również git log. Bez spacji wzorzec Bash(ls*) dopasuje także lsof. Nie stawiaj gwiazdki przed podpoleceniem.
Czemu reguła allow nie obejmuje polecenia złożonego?
Claude Code rozpoznaje operatory powłoki, takie jak podwójny ampersand, potok czy średnik, i wymaga, żeby reguła pasowała do każdego członu z osobna. Dlatego dla polecenia złożonego dodaj regułę allow na każde podpolecenie, które wymaga zgody, a nie jedną regułę na całość.
Jak wygląda reguła allow dla narzędzia MCP?
Reguły allow dla narzędzi MCP pisz bez nawiasów, po literalnym prefiksie serwera, na przykład mcp__github__get_* obejmuje narzędzia zaczynające się od get_ z serwera github. Regułę allow z nawiasami przy prefiksie mcp__ Claude Code pomija przy wczytywaniu ustawień.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...