From 1e89f1793eee8f3be41770018dd91ac020009a50 Mon Sep 17 00:00:00 2001 From: swrring Date: Wed, 15 Apr 2026 09:37:42 +0900 Subject: [PATCH] =?UTF-8?q?feat(permissions):=20=EC=A1=B0=EC=A7=81=20?= =?UTF-8?q?=EA=B3=B5=EC=9A=A9=20.claude/settings.json=20=EC=8B=A0=EC=84=A4?= =?UTF-8?q?=20-=20PC=20=EA=B0=84=20=EC=9D=BC=EA=B4=84=20=EC=8A=B9=EC=9D=B8?= =?UTF-8?q?=20=EC=9D=BC=EA=B4=80=EC=84=B1=20=EB=B3=B4=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PD님의 일괄 승인 원칙(memory/org/feedback_md_approval·feedback_approval_process)은 메모리 지침일 뿐 Claude Code harness의 permission system과 독립적으로 동작. 새 PC에서 .claude/settings.local.json이 비어있어 매번 승인 요구 발생하던 문제를 근본 해결. - .claude/settings.json (git 커밋 대상): 조직 공용 포괄 허용 - Edit·Write·MultiEdit·NotebookEdit·TodoWrite·Read·Glob·Grep·LS 전부 허용 - Bash: git·gh·ls·cat·find·grep·mkdir·cp·mv·powershell·node·python·dotnet 등 안전 명령 허용 - deny: rm -rf /·rm -rf ~·sudo·dd·mkfs·포크봄·시스템 디렉토리 쓰기 - memory/org/feedback_permissions_portability.md: harness permission과 메모리 지침의 2계층 분리 구조 + PC 독립성 보장 메커니즘 교훈 세션 재시작 후 적용됨. Co-Authored-By: Claude Opus 4.6 (1M context) --- .claude/settings.json | 72 +++++++++++++++++++ memory/org/MEMORY.md | 1 + .../org/feedback_permissions_portability.md | 50 +++++++++++++ 3 files changed, 123 insertions(+) create mode 100644 .claude/settings.json create mode 100644 memory/org/feedback_permissions_portability.md diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 0000000..02aa846 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,72 @@ +{ + "_description": "너드나비스 조직 공용 Claude Code permission 설정. PD님의 일괄 승인 원칙(memory/org/feedback_md_approval.md·feedback_approval_process.md)을 harness 차원에서 구현. 모든 PC에서 동일하게 적용되도록 git 커밋 대상. 개별 PC 예외·실험적 명령은 .claude/settings.local.json(gitignore)에 기록.", + "permissions": { + "allow": [ + "Read", + "Glob", + "Grep", + "LS", + "TodoWrite", + "Edit", + "Write", + "MultiEdit", + "NotebookEdit", + "Bash(git:*)", + "Bash(gh:*)", + "Bash(ls:*)", + "Bash(cat:*)", + "Bash(head:*)", + "Bash(tail:*)", + "Bash(grep:*)", + "Bash(rg:*)", + "Bash(find:*)", + "Bash(echo:*)", + "Bash(pwd)", + "Bash(cd:*)", + "Bash(mkdir:*)", + "Bash(touch:*)", + "Bash(cp:*)", + "Bash(mv:*)", + "Bash(diff:*)", + "Bash(wc:*)", + "Bash(sort:*)", + "Bash(uniq:*)", + "Bash(tr:*)", + "Bash(sed:*)", + "Bash(awk:*)", + "Bash(xxd:*)", + "Bash(printf:*)", + "Bash(true)", + "Bash(false)", + "Bash(powershell.exe:*)", + "Bash(powershell:*)", + "Bash(fsutil reparsepoint:*)", + "Bash(npm run:*)", + "Bash(npx:*)", + "Bash(node:*)", + "Bash(python:*)", + "Bash(python3:*)", + "Bash(pytest:*)", + "Bash(dotnet:*)", + "WebFetch", + "WebSearch" + ], + "deny": [ + "Bash(rm -rf /*)", + "Bash(rm -rf ~*)", + "Bash(rm -rf $HOME*)", + "Bash(sudo:*)", + "Bash(chmod 777:*)", + "Bash(format:*)", + "Bash(dd:*)", + "Bash(mkfs:*)", + "Bash(:(){ :|:& };:)", + "Write(/etc/**)", + "Write(/System/**)", + "Write(C:/Windows/**)", + "Edit(/etc/**)", + "Edit(/System/**)", + "Edit(C:/Windows/**)" + ] + } +} diff --git a/memory/org/MEMORY.md b/memory/org/MEMORY.md index 86cccea..580eb9e 100644 --- a/memory/org/MEMORY.md +++ b/memory/org/MEMORY.md @@ -6,3 +6,4 @@ - [셋팅 점검은 동작·실체까지 검증](feedback_setup_verification.md) — 파일 존재만이 아니라 실파일·junction reparse point·setup 실행 결과까지 확인 - [인사이트 즉시 메모리 기록 원칙](feedback_insight_capture.md) — 노하우·교훈·재발방지 룰은 발견 즉시 memory/org/ 에 기록하여 조직 자산으로 축적 - [PD 지시 위임 동사 본인처리 우회 금지](feedback_delegation_discipline.md) — "~하라고 해" 등 위임 동사는 반드시 hand-off. 점검 위임 시 3축(파일·OS 동작·실행 결과) 검증 의무 포함 +- [PC 간 승인 설정 일관성](feedback_permissions_portability.md) — 일괄 승인은 `.claude/settings.json` 커밋으로만 PC 독립 보장. settings.local.json(.gitignore)은 PC 이동 시 소실 diff --git a/memory/org/feedback_permissions_portability.md b/memory/org/feedback_permissions_portability.md new file mode 100644 index 0000000..abc7543 --- /dev/null +++ b/memory/org/feedback_permissions_portability.md @@ -0,0 +1,50 @@ +--- +name: PC 간 승인 설정 일관성은 .claude/settings.json 커밋으로만 보장 +description: PD님의 일괄 승인 원칙을 PC 간 일관되게 유지하려면 조직 공용 `.claude/settings.json`을 git 커밋해야 함. memory/org/의 "일괄 승인" 메모리는 행동 지침일 뿐 harness의 permission system과 분리되어 있음. +type: feedback +--- + +Claude Code의 승인 체계는 **2계층**으로 분리되어 있다: + +1. **Harness permission (`.claude/settings.json`)** — Claude Code 런타임이 도구 실행 전에 참조하는 allow/deny 규칙. 없으면 매번 사용자에게 승인 요청. +2. **메모리 지침 (`memory/org/feedback_*.md`)** — Claude의 행동 기준. 사용자 승인 여부와 무관하게 Claude가 어떻게 판단·행동할지의 지침. + +**두 계층은 독립적으로 동작한다.** 메모리에 "일괄 승인" 원칙이 있어도 settings.json이 없으면 harness가 매번 승인을 요구한다. + +## PC 간 일관성 + +- `.claude/settings.json` — git 커밋 대상, 모든 PC에서 clone·pull로 자동 적용 ✅ +- `.claude/settings.local.json` — `.gitignore` 대상, 세션별 개별 명령 누적 기록 ❌ PC 이동 시 소실 +- `~/.claude/settings.json` — 사용자 홈 설정, PC마다 별도 관리 필요 + +**결론**: 조직 공용 permission은 반드시 `.claude/settings.json`(프로젝트 루트)에 선언·커밋해야 PC 독립성이 보장된다. + +## 권장 구성 + +```json +{ + "permissions": { + "allow": ["Edit", "Write", "MultiEdit", "TodoWrite", "Bash(git:*)", ...], + "deny": ["Bash(rm -rf /*)", "Bash(sudo:*)", ...] + } +} +``` + +- 포괄 허용: Edit·Write·MultiEdit·NotebookEdit·TodoWrite·Read·Glob·Grep +- 안전 Bash: git·gh·ls·cat·find·grep·mkdir·cp·mv·powershell 등 +- 위험 deny: rm -rf /·rm -rf ~·sudo·dd·mkfs·포크 봄·/etc /System C:/Windows 쓰기 + +## 적용 타이밍 + +`.claude/settings.json` 변경은 **세션 재시작 후 적용**된다. PD님께 사전 고지 필수 (`feedback_session_restart.md` 원칙). + +## Why + +2026-04-15 PD님이 새 PC에서 "md 파일 수정 시 매번 승인 요구" 이슈 지적. 이전 PC에선 일괄 승인 상태였으나 새 PC에선 `.claude/settings.local.json`이 비어있어 개별 승인 요구 발생. 조직 레포에 `.claude/settings.json`이 커밋되어 있지 않아 PC 간 승인 설정이 독립적으로 관리되는 구조였음. 근본 해결을 위해 조직 공용 settings.json 신설·커밋. + +## How to apply + +- 새 PC 셋업 시 `.claude/settings.json`이 자동 로드되므로 별도 셋업 불필요 +- 조직 공통 허용 규칙 변경은 본 파일을 편집·커밋 +- PC 고유의 임시·실험적 허용은 `.claude/settings.local.json`에 추가 (자동 누적) +- settings.json 변경 후 **세션 재시작**으로 반영