전체 아키텍처에서 현재 위치
⚙️코어 엔진
→🔧도구 시스템
→🛡️보안
→🧠컨텍스트
→🤝멀티 에이전트
→🌐생태계
→⚡인프라
1
설정 소스 우선순위
8계층 설정 병합과 First-Source-Wins
우선순위병합 로직Zod 검증캐시|
utils/settings/settings.tsutils/settings/types.tsClaude Code는 8계층 설정 시스템으로 엔터프라이즈부터 개인까지 다양한 수준의 설정을 관리합니다.
src/utils/settings/settings.ts — 설정 계층
1// src/utils/settings/settings.ts — 다계층 설정 로드2 3import mergeWith from 'lodash-es/mergeWith.js'4import { z } from 'zod/v4'5 6// 설정 로드 순서 (우선순위 높은 → 낮은):7// 1. Remote Managed → 원격 동기화 서비스💡8// 2. MDM/Registry → macOS plist / Windows 레지스트리9// 3. Managed File → managed-settings.json + drop-ins10// 4. Flag Settings → --flag-settings CLI 인자11// 5. Policy → 최우선 소스에서 병합12// 6. User → ~/.claude/settings.json13// 7. Project → .claude/settings.json14// 8. Local → .claude/settings.local.json15 16// 커스텀 병합 로직17function settingsMergeCustomizer(objVal, srcVal) {💡18 // 배열: concat (규칙 누적)19 if (Array.isArray(objVal)) return objVal.concat(srcVal)20 // 객체: deep merge21 // 원시값: 상위 소스 우선22}23 24// Zod 기반 설정 검증 (types.ts, 42KB)25const SettingsSchema = z.object({26 permissions: z.object({27 allow: z.array(z.string()), // ["Bash(git *)", "GlobTool"]28 deny: z.array(z.string()), // ["Bash(rm -rf *)"]29 ask: z.array(z.string()),30 mode: permissionModeSchema,31 additionalDirectories: z.array(z.string()),32 }),33 hooks: z.record(z.array(hookConfigSchema)),34 env: z.record(z.string()),35 // ... sandbox, plugins, autoUpdate 등36})37 38// 변경 감지 (changeDetector.ts)39// 파일 워처 → 디바운스된 리로드 → 캐시 무효화