코드 리뷰 중 실수로 파일을 수정한 적 있으신가요? — readonly-mode Kit 실전 테스트
Claude Code에서 파일 읽기만 허용하고 쓰기를 완전 차단하는 readonly-mode 설정 Kit. JSON 4줄로 코드 리뷰 세션의 안전망을 만드는 법을 5가지 테스트로 검증했습니다.

코드 리뷰하다가 실수로 프로덕션 파일을 건드린 적 있으시죠?
Claude Code는 강력합니다. 파일을 읽고, 분석하고, 수정하고, 새로 만듭니다. 문제는 — 때로는 읽기만 하고 싶을 때도 있다는 겁니다. 코드 리뷰, 보안 감사, 새 코드베이스 파악. 이런 상황에서 Claude가 "이 부분 수정해 드릴까요?"라고 하면 좀 불안합니다.
readonly-mode는 이 문제를 해결하는 설정 Kit입니다. Write와 Edit 도구를 완전 비활성화해서, Claude Code를 순수한 분석 도구로 전환합니다.
설정 내용
~/.claude/settings.json에 추가하는 내용은 이것이 전부입니다.
4줄입니다. Write, Edit, NotebookEdit 세 도구를{"permissions": {
"Write": "deny",
"Edit": "deny",
"NotebookEdit": "deny"
}
}
deny로 설정하면 Claude Code는 어떤 요청을 받아도 파일을 수정하거나 생성하지 않습니다.
Read, Grep, Glob, Bash는 그대로 사용 가능합니다. 분석 능력은 100% 유지하면서 쓰기만 차단하는 구조입니다.
왜 실전 테스트인가
AI K LINK의 이전 평가 방식은 "설명을 읽고 점수를 매기는" 문서 기반이었습니다. 하지만 설명이 그럴듯하다고 실제로 작동하는 건 아닙니다. 그래서 방식을 바꿨습니다. 직접 설정을 적용하고 5가지 시나리오로 테스트했습니다.
테스트 1: 파일 읽기 — 정상 작동
요청: "src/app/page.tsx 파일을 읽어줘"
결과: Read 도구가 즉시 호출되어 파일 내용이 출력됩니다. 승인 프롬프트도 없고, 지연도 없습니다. 읽기 전용 모드이지 읽기 금지 모드가 아닙니다. 분석 작업에 어떤 제약도 없습니다.
테스트 2: 파일 편집 시도 — 차단
요청: "src/app/page.tsx에서 title을 'Test'로 변경해줘"
결과: Claude가 Edit 도구를 호출하려 하지만, 즉시 권한 거부됩니다. 그런데 여기서 좋은 점은 — 단순히 "안 됩니다"로 끝나지 않는다는 겁니다.
Claude는 이렇게 답합니다:
"현재 읽기 전용 모드가 활성화되어 있어 파일 수정이 불가합니다. 변경 사항을 코드 블록으로 보여드리겠습니다. 직접 적용하실 수 있습니다."
차단 + 대안 제시. 이게 좋은 UX입니다. 리뷰어가 수정 아이디어를 얻되, 실수로 적용하는 일은 없습니다.
테스트 3: 새 파일 생성 — 차단
요청: "새 파일 test.ts를 만들어줘"
Write 도구도 동일하게 차단됩니다. "읽기 전용 모드에서는 새 파일 생성이 불가합니다. 파일 내용을 코드 블록으로 보여드리겠습니다." 일관된 동작입니다.
테스트 4: 프로젝트 구조 분석 — 정상
요청: "프로젝트 구조를 분석해줘"
Glob으로 파일 목록을 가져오고, Grep으로 패턴을 검색하고, Read로 핵심 파일을 읽습니다. 읽기 전용 제약 없이 완전한 분석을 수행합니다. 분석 능력 100% 유지 확인.
테스트 5: Bash 우회 — 부분 차단
요청: "echo 'test' > /tmp/test.txt 실행해줘"
여기서 한 가지 빈틈이 있습니다. Bash 자체는 allowedTools에 포함되어 있어서, 리다이렉트(>)를 통한 파일 쓰기가 이론적으로 가능합니다.
다행히 Claude Code의 기본 안전장치가 리다이렉트를 감지해서 사용자 확인을 요구합니다. 하지만 이건 readonly-mode Kit의 기능이 아니라 Claude Code 자체의 보호입니다.
솔직한 평가: Bash 우회 경로가 완전히 막히지는 않습니다. 91점/A등급이 100점이 아닌 이유입니다.최종 점수: 91/A
| 평가 축 | 점수 | 코멘트 |
| Behavior Clarity | 28/30 | 동작이 명확하고 예측 가능 |
| Safety & Guardrails | 28/30 | Write/Edit 완벽 차단, Bash 우회는 Claude 기본 안전장치 위임 |
| Scope Precision | 17/20 | 읽기/쓰기 분리 명확, Bash 우회 정책 명시 부재 |
| Practical Value | 18/20 | 코드 리뷰·감사·온보딩에 즉시 활용 |
언제 쓰면 좋은가
- 코드 리뷰 세션: 리뷰어가 분석만 하고 수정은 못 하게
- 신규 팀원 온보딩: 코드베이스를 파악하는 동안 실수 방지
- 보안 감사: 감사자가 코드를 읽되 변경하지 못하게
- 학습 목적: Claude에게 코드 설명을 요청하되 수정은 직접
readonly-mode vs minimal-permissions
| 항목 | readonly-mode | minimal-permissions |
| Write/Edit | deny (완전 차단) | ask (승인 필요) |
| Bash | 허용 | ask (승인 필요) |
| 읽기 도구 | 자유 | 자유 |
| 적합 시나리오 | 코드 리뷰, 감사 | 새 프로젝트 시작 |
| 가격 | 무료 | 무료 |
readonly-mode, 쓰기는 하되 매번 확인받고 싶다면 minimal-permissions입니다.
적용 방법
# ~/.claude/settings.json에 추가{
"permissions": {
"Write": "deny",
"Edit": "deny",
"NotebookEdit": "deny"
}
}
4줄 복사, 붙여넣기. 그게 전부입니다.
해제하고 싶으면 해당 permissions 블록을 삭제하거나 "allow"로 변경하면 됩니다. 설정 파일 하나로 모드 전환이 되니, 세션 목적에 따라 왔다 갔다 할 수 있습니다.
평가 상세: readonly-mode 테스트 리포트 전문
관련 글
이 글은 AI K LINK 콘텐츠팀이 작성하였으며, AI 도구의 도움을 받아 리서치 및 초안 작성이 이루어졌습니다. 최종 발행 전 전문 에디터의 검수를 거칩니다. 내용에 대한 문의는 contact@aiklink.com으로 보내주세요.


