Claude Code에서 나오는 모든 "이 명령을 허용하시겠습니까?" 프롬프트는 작은 방해 요소입니다. '항상 허용' 버튼을 충분히 많이 클릭하다 보면 아무도 읽지 않는 settings.json 파일만 남게 됩니다. 여기 제가 가장 조심스러운 것부터 덜 조심스러운 순서로 .claude/settings.json에 저장해 둔 세 가지 프리셋과, 이들 중 어느 것도 해결할 수 없는 한 가지 사항을 소개합니다.
규칙은 다음 순서로 일치 여부를 확인합니다: **거부(deny)**가 **질문(ask)**보다 우선하며, **질문(ask)**이 **허용(allow)**보다 우선합니다. 목록에 없는 것은 defaultMode의 기본값으로 돌아갑니다.
1. 엄격 (Strict): 새로운 또는 민감한 저장소
읽기 전용 git은 무료입니다. 커밋, 푸시 및 설치는 확인이 필요하며, 네트워크 도구는 비활성화됩니다.
{
"permissions": {
"defaultMode": "default",
...
2. 균형 (Balanced): 일상적인 작업
편집은 자동으로 수락됩니다 (acceptEdits). Lint, 테스트 및 타입 검사는 질문 없이 실행되며, 사용자의 기기를 벗어나거나 의존성을 변경하는 모든 것은 여전히 질문합니다.
{
"permissions": {
"defaultMode": "acceptEdits",
...
3. 자율 (Autonomous): 임시 브랜치 및 스파이크 작업
git과 npm의 모든 기능이 허용됩니다. 이 프리셋은 나쁜 명령어가 프로덕션 데이터베이스가 아닌 단순히 브랜치를 손실하게 만드는 경우에만 사용해야 합니다.
{
"permissions": {
"defaultMode": "acceptEdits",
...
한계점 (The gap)
자율 프리셋을 다시 살펴보세요: Bash(git:*)는 git push --force와 git reset --hard까지 허용합니다. 권한 규칙은 명령어를 접두사로 일치시킵니다. 따라서 안전한 git push와 파괴적인 git push를 구분할 수 없습니다.
또 다른 한계점도 있습니다. Read(./.env)는 Claude의 Read 도구를 차단하지만, 이는 쉘에 대한 규칙이 아닙니다. Bash를 통한 cat .env는 다른 도구이며 별도의 처리가 필요합니다.
후크(hooks)가 바로 그런 용도로 사용됩니다. PreToolUse 후크는 명령이 실행되기 전에 전체 명령을 확인하는 스크립트이며, 이를 통해 exit 2로 차단할 수 있습니다. 따라서 일반 푸시(normal push)는 허용하면서도 git push --force를 거부하거나 .env 파일을 건드리는 모든 명령을 거부할 수 있습니다. 두 가지 무료 후크(하나는 파괴적 명령어(destructive commands)를 차단하며, git push origin +main과 같은 우회 시도를 테스트했습니다. 다른 하나는 비밀 정보가 파일에 기록되는 것을 방지합니다.)를 여기에서 사용할 수 있습니다: https://github.com/kailucho/claude-code-hooks-seguridad (무료, MIT).
편의성을 위한 프리셋(Preset), 안전을 위한 후크(Hook). 두 가지 모두 필요합니다.
세 가지 프리셋, 후크, 6가지 스킬(/commit, /pr, /review, /tests, /plan, /debug), 그리고 React, Node 및 GraphQL용 CLAUDE.md 템플릿이 Claude Code용 스타터 키트 (US$9, 비공식)에 모여 있습니다: https://luijhy.gumroad.com/l/starter-kit-for-claude-code