.claude/ 권한 버그, PermissionRequest hook으로 뚫는 법
Claude Code가 어제부터 .claude/ 파일을 수정 못 해서 매번 "이거 수정해도 돼?" 하고 물어봄.
해결법? 임시 워크어라운드 제시해드림 따라완
공식 문서에는 "skills 폴더는 자유롭게 수정 가능"이라고 써있는데, 실제 코드를 까보니 면제 목록에서 빠져있었음. 문서랑 코드가 다른 거.
v2.1.79부터 발생하는 버그인데, 스킬 파일을 많이 수정하는 워크플로우에서는 세션당 수십 번 프롬프트가 뜨면서 작업이 막힘.
클로드코드 --dangerously-skip-permissions 애용하는 스치니들은 이게 얼마나 큰 문제인지 알거야.
1. 클릭 피로는 보안을 오히려 파괴하는 역효과.
2. 어차피 재정의 플래그가 없으면 우회하는 파괴적인 행위를 하게돼있음 ㅋㅋ
3. 뭣보다 문제는 skip permissions를 했는데도 수행을 엉뚱하게하니 UX적으로 엉망.
"설정에서 허용하면 되는 거 아냐?" 했는데 안 됨.
Edit(.claude/**) 같은 allow list를 추가해봤지만, 권한 체크가 2단계로 되어 있어서 설정보다 하드코딩된 보호가 먼저 작동함. 설정으로는 뚫을 수 없는 구조.
해결법을 찾음: PermissionRequest hook.
Claude Code에는 "권한 물어보기 직전"에 끼어들 수 있는 hook이 있음. 여기서 "허용"을 자동으로 응답하면 프롬프트가 안 뜸.
settings 파일(설정값)은 보호하고, skills/hooks/rules 같은 작업용 폴더만 자동 승인하도록 만듦.
그런데 서브에이전트에서는 이 hook이 안 먹힘. 별도 버그.
서브에이전트용 우회법: .claude/ 보호가 Edit/Write 도구에만 걸린다는 걸 이용해서 Bash 명령어(cat, sed 등)로 파일을 씀. Bash는 보호 대상이 아님.
서브에이전트가 이 규칙을 알아서 따르도록 auto-loaded 규칙 파일로 배치.
테스트 20개 전수 통과.
메인 에이전트: skills, hooks, rules 편집 자동 승인 / settings는 여전히 보호 / 엣지케이스(빈 경로, 깨진 입력) 안전
서브에이전트: 다양한 Bash 쓰기 방법(heredoc, sed, tee, cp, 새 폴더 생성) 전부 통과
서브에이전트를 실제로 스폰해서 "이 규칙 아는지" 확인 → 규칙 인지하고 알아서 Bash 선택.
이건 임시 워크어라운드. Anthropic 팀에서 "수정 중"이라고 답변했으니 조만간 공식 패치가 나올 듯.
패치 나오면 삭제할 파일 3개를 메모리에 체크리스트로 기록해둠. 다음 세션에서 자동으로 인지 가능.
같은 문제 겪고 있다면:
1. PermissionRequest hook 스크립트 만들기
2. settings.local.json에 등록
3. 서브에이전트는 Bash로 .claude/ 쓰기
상세 코드와 테스트 결과는 이슈에 코멘트로 남겨둠.
http://github.com/anthropics/claude-code/issues/36497
복붙용 요약. 그냥 아래 복사해서 클로드코드에게 던져주면 됨.
세션 재시작 없이 바로 적용되니까 잠시동안 뗌질해서 쓰자고~
.claude/skills/ 편집할 때마다 권한 프롬프트가 뜨는 버그가 있어 (v2.1.79 regression, github.com/anthropics/claude-code/issues/36497). 아래 워크어라운드를 적용해줘:
1. .claude/hooks/permission-auto-approve.sh 파일을 만들어. 내용:
#!/usr/bin/env bash
set -uo pipefail
input="$(cat)"
file_path=$(printf '%s' "$input" | jq -r '.tool_input.file_path // empty' 2>/dev/null)
if [[ -n "$file_path" && "$file_path" == */.claude/* && "$file_path" != */.claude/settings* ]]; then
printf '{"hookSpecificOutput":{"hookEventName":"PermissionRequest","decision":{"behavior":"allow"}}}'
fi
2. chmod +x 해줘.
3. .claude/settings.local.json의 hooks에 PermissionRequest 섹션을 추가해:
"PermissionRequest": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/permission-auto-approve.sh",
"timeout": 3
}
]
}
]
4. 이것도 기억해줘: 서브에이전트는 이 hook이 안 먹혀서, .claude/ 하위 파일 수정 시 Edit/Write 대신 Bash(cat heredoc, sed -i)를 써야 해. 서브에이전트 스폰할 때 항상 이 규칙을 전달해줘.
적용 후 .claude/skills/ 아무 파일이나 Edit으로 테스트해서 프롬프트 없이 통과하는지 확인해줘.