Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Claude Code
Claude Code prosi o zgodę mimo reguły allow - dlaczego nie działa
allow na jakieś polecenie, a Claude Code i tak przy nim pyta o zgodę, jakby reguły nie było.deny albo ask, która ma pierwszeństwo, źle zapisany wzorzec, albo polecenie złożone, które nie pasuje do prostej reguły.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.
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.
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ń.
/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ć.Bash(git log *). Pamiętaj, że tekst przed pierwszą gwiazdką jest dopasowywany dosłownie.allow z wieloznacznikiem przed resztą polecenia, jak Bash(git * main) - taka reguła nie zadziała tak, jak myślisz.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.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.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.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 -->
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 CodeTo szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.
★★★★★Średnia ocena naszych szkoleń w Google: 5/5
Komentarze (0)
Brak komentarzy...