Claude Code 권한 및 hooks 설정
/permissions와 settings.json으로 allow, ask 및 deny rules를 구성한 다음 Claude Code hooks를 추가, 확인 및 문제 해결하세요.
바로 답변
Claude Code에서 /permissions를 실행하여 permission rules를 보고 관리하세요. rules를 persist하려면 allow, ask, deny를 settings.json에 넣으세요. Hooks는 같은 settings files를 사용하며 tool calls 전후로 formatting, tests 또는 safety checks를 실행합니다. permission precedence는 deny → ask → allow이므로 allow rule은 deny rule을 override할 수 없습니다.
이 settings는 computer의 local tools를 제어합니다. BetterToken은 model API Base URL, API Key 및 routing만 변경하며 local permissions를 bypass하거나 hooks를 대신 실행하지 않습니다.
permissions 또는 hooks 선택
| 요구 사항 | 사용 |
|---|---|
| prompt 없이 specific command 실행 | permissions.allow |
| operation 전에 매번 질문 | permissions.ask |
| sensitive file reads 또는 dangerous commands 차단 | permissions.deny |
| file change 후 format 또는 test | PostToolUse hook |
| 실행 전 action 확인 또는 차단 | PreToolUse hook |
| model에 team conventions 설명 | permission rule이 아닌 CLAUDE.md |
올바른 scope 선택
| File | Scope | repository에 commit? |
|---|---|---|
~/.claude/settings.json | current user의 모든 projects | 아니요 |
.claude/settings.json | current project 및 team | 예 |
.claude/settings.local.json | 이 machine의 current project | 아니요 |
최소 permission rules 구성
/permissions로 existing rules 검사
Claude Code에서 다음을 실행하세요.
/permissionsUI는 allow, ask, deny rules와 source files를 표시합니다. user 또는 project setting을 선택하기 전에 existing team 또는 managed rules를 확인하세요.
narrow rules 추가
이 project-level example은 일반 tests와 lint를 allow하고 매 git push 전에 ask하며 .env reads를 block합니다.
{ "permissions": { "allow": [ "Bash(npm run lint *)", "Bash(npm test *)" ], "ask": [ "Bash(git push *)" ], "deny": [ "Read(./.env)", "Read(./.env.*)" ] }}commands를 project에 있는 scripts로 바꾸세요. prompts를 제거하기 위해서만 bypassPermissions를 enable하지 마세요. 공식 documentation은 해당 mode를 isolated containers 또는 VMs로 제한합니다.
/permissions에서 확인
file을 저장하고 /permissions를 다시 실행하세요. 각 rule이 expected source 아래에 표시되는지 확인한 후 allow, ask, deny case를 각각 하나씩 trigger하여 behavior를 확인하세요.
복사 가능한 formatting hook 추가
이 example은 Claude Code가 Edit 또는 Write를 사용한 후 project formatter를 실행합니다.
{ "hooks": { "PostToolUse": [ { "matcher": "Edit|Write", "hooks": [ { "type": "command", "command": "npm run format" } ] } ] }}file에 이미 permissions가 있다면 hooks를 같은 top-level JSON object에 merge하세요. standalone .claude/hooks.json을 만들지 마세요. 먼저 npm run format을 수동 실행하여 성공하는지 확인하세요.
hook 확인
- Claude Code에서
/hooks를 실행하세요. - PostToolUse를 열고
Edit|Write와npm run format이 표시되는지 확인하세요. - Claude에게 test file을 수정하게 하세요.
- hook output과 file format을 확인하고 hook이 errors 없이 한 번 실행되었는지 확인하세요.
Claude Code는 보통 settings changes를 자동으로 reload합니다. 그렇지 않다면 session을 종료하고 Claude Code를 다시 시작하세요.
일반적인 오류
| 증상 | 원인 | 해결 방법 |
|---|---|---|
| Permission rules가 적용되지 않음 | ~/.claude.json 또는 wrong directory에 있음 | ~/.claude/settings.json, .claude/settings.json 또는 .claude/settings.local.json으로 이동 |
| allowed action이 계속 blocked됨 | deny 또는 managed rule과 match됨 | /permissions에서 sources를 확인하세요. deny가 ask 및 allow보다 우선합니다. |
| hook이 실행되지 않음 | event 또는 matcher가 tool과 match하지 않음 | /hooks를 검사하세요. PreToolUse는 execution 전, PostToolUse는 success 후 실행되며 matchers는 case-sensitive입니다. |
| hook은 실행되지만 command가 실패함 | wrong script, working directory 또는 dependency | 먼저 project directory에서 같은 command를 수동으로 실행 |
| BetterToken 연결 후에도 prompts가 남음 | API provider와 local permissions가 분리됨 | BetterToken Base URL을 유지하고 narrow Claude Code permissions를 별도로 구성 |
| 모든 hooks를 일시적으로 disable해야 함 | hook이 debugging을 방해할 수 있음 | "disableAllHooks": true를 추가한 후 debugging 뒤 제거하거나 false로 설정 |
BetterToken boundaries
BetterToken은 Claude Code model API access, model routing, balance 및 usage를 처리합니다. Claude Code는 다음을 계속 제어합니다.
- file read 및 write access
- Bash confirmation behavior
- hooks의 실행 시점과 실행 scripts
- sandbox, MCP 및 project rules
401, Base URL 또는 model mapping errors는 Claude Code 설정 가이드를 참조하세요. command prompts와 automation은 여기에서 permissions와 hooks를 문제 해결하세요.
관련 문서
- BetterToken으로 Claude Code 설정
- Claude Code의 CLAUDE.md란 무엇인가요?
- Claude Code가 많은 tokens를 사용하는 이유
- Claude Code MCP와 API Key 및 Base URL 비교

