클로드코드에서 엔터만 누르다 하루가 간 당신에게
권한 설정 5분이면 Accept 지옥에서 벗어납니다. 더 이상 모니터 앞에서 엔터 키 대기하지 마세요.
들어가며
클로드코드 쓰면서 이런 경험 없는가?
클로드가 열심히 코드를 짜다가 갑자기 멈춘다. "이 명령어를 실행해도 될까요?" 엔터를 누른다. 또 멈춘다. "이 파일을 수정해도 될까요?" 또 엔터. 커피 한 잔 타고 돌아왔더니 클로드가 권한 승인 대기 상태로 멈춰있다. 내가 엔터를 못 누른 그 시간 동안, 클로드는 아무것도 안 하고 멀뚱히 기다리고 있었다.
이게 반복되면 결국 두 가지 극단 중 하나를 선택하게 된다.
- 모니터 앞에 앉아서 엔터 키 대기 — 클로드가 일하는 걸 지켜보면서 Accept가 뜰 때마다 엔터를 누른다. 내가 다른 일을 할 수가 없다.
--dangerously-skip-permissions사용 — 모든 권한 체크를 건너뛴다. 편하긴 한데, 이름부터가 "dangerously"다.
중간 지대가 있다. 권한 설정을 제대로 하면 된다.
왜 클로드코드는 매번 물어볼까?
클로드코드는 도구(Tool) 단위로 권한을 관리한다. 파일을 읽을 때, 파일을 수정할 때, bash 명령어를 실행할 때 — 각각이 하나의 도구 호출이고, 기본 설정에서는 대부분의 도구 호출에 사용자 승인이 필요하다.
안전을 위한 설계이긴 하지만, 결과적으로 클로드가 뭘 하든 "이거 해도 돼?"를 물어보는 상황이 된다.
핵심은 이거다. 안전한 작업은 미리 허용해두면, 클로드가 물어볼 필요가 없다.
권한 설정 파일 이해하기
클로드코드의 권한 설정은 세 곳에서 관리할 수 있다.
| 파일 위치 | 범위 | Git 공유 |
|---|---|---|
~/.claude/settings.json | 모든 프로젝트 (글로벌) | ❌ |
.claude/settings.json | 현재 프로젝트 | ✅ (팀 공유 가능) |
.claude/settings.local.json | 현재 프로젝트 (개인) | ❌ |
우선순위는 .local.json > .claude/settings.json > ~/ 순이다. 더 구체적인 설정이 이긴다.
권한 설정의 기본 구조는 이렇다:
{
"permissions": {
"allow": [],
"deny": []
}
}allow에 넣으면 묻지 않고 바로 실행. deny에 넣으면 아예 차단. deny가 항상 우선한다. 둘 다 아닌 건 매번 물어본다.
5분 만에 Accept 지옥 탈출하기
1단계: 읽기 도구 전부 허용
파일을 읽는 건 안전하다. 시스템을 변경하지 않으니까.
{
"permissions": {
"allow": [
"Read",
"Glob",
"Grep"
]
}
}이것만 해도 체감이 다르다. 클로드가 코드베이스를 탐색할 때마다 멈추던 게 사라진다.
2단계: 쓰기 도구 허용
파일 수정도 대부분 안전하다. Git으로 관리하고 있다면 언제든 되돌릴 수 있다.
{
"permissions": {
"allow": [
"Read",
"Glob",
"Grep",
"Edit",
"Write"
]
}
}여기까지 하면 파일 읽기/수정에서 Accept가 완전히 사라진다. 하지만 진짜 병목은 다음 단계다.
3단계: 안전한 Bash 명령어 허용
Bash 명령어는 * 와일드카드로 패턴 매칭할 수 있다. 여기가 핵심이다.
{
"permissions": {
"allow": [
"Read",
"Glob",
"Grep",
"Edit",
"Write",
"Bash(git status *)",
"Bash(git diff *)",
"Bash(git log *)",
"Bash(git add *)",
"Bash(git commit *)",
"Bash(npm test *)",
"Bash(npm run lint *)",
"Bash(npm run build *)",
"Bash(npx prettier *)",
"Bash(ls *)",
"Bash(pwd)"
],
"deny": [
"Bash(rm -rf *)",
"Bash(git push --force *)"
]
}
}이 설정이면 클로드가 코드를 읽고, 수정하고, git 작업하고, 테스트 돌리고, 빌드하는 전체 흐름에서 Accept를 누를 일이 거의 없다.
주의:
Bash(git *)처럼 공백 뒤에*를 쓰면 단어 경계를 강제한다.Bash(ls *)는ls -la에 매칭되지만lsof에는 매칭되지 않는다. 공백 없이Bash(ls*)라고 쓰면 둘 다 매칭된다.
프로젝트별 실전 설정
프로젝트마다 사용하는 도구가 다르다. .claude/settings.json에 프로젝트에 맞는 설정을 넣으면 된다.
Spring/Gradle 프로젝트
{
"permissions": {
"allow": [
"Read", "Glob", "Grep", "Edit", "Write",
"Bash(./gradlew build *)",
"Bash(./gradlew test *)",
"Bash(./gradlew spotlessApply *)",
"Bash(./gradlew detekt *)",
"Bash(git *)"
],
"deny": [
"Bash(./gradlew publish *)",
"Bash(rm -rf *)"
]
}
}Next.js 프로젝트
{
"permissions": {
"allow": [
"Read", "Glob", "Grep", "Edit", "Write",
"Bash(npm run *)",
"Bash(npx *)",
"Bash(git *)"
],
"deny": [
"Bash(npm publish *)",
"Bash(rm -rf *)"
]
}
}Python 프로젝트
{
"permissions": {
"allow": [
"Read", "Glob", "Grep", "Edit", "Write",
"Bash(python -m pytest *)",
"Bash(python *)",
"Bash(pip install *)",
"Bash(ruff check *)",
"Bash(ruff format *)",
"Bash(git *)"
],
"deny": [
"Bash(rm -rf *)"
]
}
}팀과 공유하면 효과가 배가 된다
.claude/settings.json은 Git에 커밋할 수 있다. 팀원 모두가 같은 권한 설정을 쓰면:
- 팀원마다 설정할 필요가 없다
- 위험한 명령어를 팀 레벨에서 차단할 수 있다
- 새로 합류한 팀원도 바로 효율적으로 클로드를 쓸 수 있다
개인적인 추가 설정은 .claude/settings.local.json에 넣으면 된다. 이 파일은 .gitignore에 추가해서 공유되지 않도록 한다.
--dangerously-skip-permissions를 쓰지 마세요
유혹이 되는 건 안다. "그냥 다 허용하면 안 되나?"
안 된다. 이유는 간단하다.
- 클로드는 실수할 수 있다.
rm -rf,git push --force같은 명령어는 한 번의 실수로 큰 사고가 난다. - 할루시네이션. 존재하지 않는 명령어를 만들어내거나, 잘못된 경로에 작업하는 경우가 간혹 있다.
- 감사 추적이 사라진다. 뭘 실행했는지 확인할 기회조차 없다.
권한 설정을 제대로 하면 --dangerously-skip-permissions 없이도 거의 동일한 편의성을 얻을 수 있다. 차이는 위험한 명령어에서만 멈추느냐, 아예 안 멈추느냐다.
이전 글에서 소개한 보리스(Claude Code 개발자)도 Skip Permission을 쓰지 않는다고 했다. 대신 권한 설정을 활용한다.
Accept가 여전히 뜬다면
설정을 했는데도 Accept가 자주 뜬다면, 패턴을 확인해보자.
클로드가 어떤 명령어에서 멈추는지 보고, 그 명령어가 안전하다면 allow 목록에 추가한다. 이걸 2-3번 반복하면 거의 모든 일상적인 작업에서 Accept가 사라진다.
팁: 클로드가 권한을 요청할 때 "Always allow"를 선택하면 자동으로 설정 파일에 추가된다. 하지만 직접 설정 파일을 관리하는 게 더 깔끔하고 정확하다.
마치며
정리하면 이렇다.
- 클로드코드에서 엔터만 누르고 있었다면, 권한 설정이 안 되어 있는 것이다.
- 읽기 도구 → 쓰기 도구 → 안전한 Bash 명령어 순으로
allow에 추가하면 된다. - 프로젝트별
.claude/settings.json에 설정하고 팀과 공유하면 된다. --dangerously-skip-permissions는 쓰지 마라.
5분만 투자하면 엔터 키 대기 시간이 사라진다. 더 이상 모니터 앞에서 클로드를 지켜보며 앉아있지 않아도 된다. 클로드가 알아서 일하는 동안, 당신은 다른 일을 하면 된다.