설정 및 환경변수
읽는 시간: 12분 | 난이도: 중급
Claude Code의 설정 파일 구조, 권한 시스템, 환경변수를 이해하고 프로젝트와 팀에 맞게 최적화하는 방법을 알아봅니다.
설정 스코프 시스템
Claude Code는 5단계 스코프 시스템으로 설정을 관리합니다. 각 스코프는 적용 범위와 우선순위가 다릅니다.
스코프 종류
| 스코프 | 위치 | 적용 대상 | 팀 공유 |
|---|---|---|---|
| Managed | 서버 관리형 설정, plist/레지스트리, 또는 시스템 수준 managed-settings.json |
머신의 모든 사용자 | 예 (IT 배포) |
| User | ~/.claude/settings.json |
모든 프로젝트의 나 | 아니오 |
| Project | .claude/settings.json |
이 저장소의 모든 협업자 | 예 (git 커밋) |
| Local | .claude/settings.local.json |
이 저장소의 나만 | 아니오 (gitignore) |
| CLI 플래그 | 커맨드라인 인수 | 현재 세션만 | 아니오 |
스코프별 용도
Managed 스코프는 다음에 적합합니다:
- 조직 전체에 적용해야 하는 보안 정책
- 재정의할 수 없는 컴플라이언스 요구사항
- IT/DevOps가 배포하는 표준화된 설정
User 스코프는 다음에 적합합니다:
- 모든 프로젝트에서 원하는 개인 설정
- 프로젝트 전반에서 사용하는 플러그인
- API 키 및 인증 정보
Project 스코프는 다음에 적합합니다:
- 팀이 공유하는 설정 (권한, 훅, MCP 서버)
- 팀 전체가 사용해야 하는 플러그인
- 협업자 간 툴링 표준화
Local 스코프는 다음에 적합합니다:
- 특정 프로젝트에서의 개인 재정의
- 팀과 공유하기 전 설정 테스트
- 다른 사람에게는 작동하지 않는 머신 고유 설정
스코프 우선순위
동일한 설정이 여러 스코프에 설정된 경우, 더 구체적인 스코프가 우선합니다:
- Managed (최고) — 어떤 것으로도 재정의 불가
- CLI 플래그 — 특정 세션에 대한 임시 재정의
- Local (
.claude/settings.local.json) — 프로젝트 및 사용자 설정을 재정의 - Project (
.claude/settings.json) — 사용자 설정을 재정의 - User (
~/.claude/settings.json) (최저) — 다른 설정이 없을 때 적용
예를 들어, 사용자 설정에서 권한이 허용되었지만 프로젝트 설정에서 거부되었다면, 프로젝트 설정이 우선하여 해당 권한이 차단됩니다.
설정 파일 구조
settings.json은 Claude Code를 계층적으로 설정하는 공식 메커니즘입니다.
파일 위치 요약
~/.claude/
├── settings.json # User 스코프 (모든 프로젝트에 적용)
└── CLAUDE.md # 전역 지침 파일
프로젝트/
├── .claude/
│ ├── settings.json # Project 스코프 (팀과 공유, git 커밋)
│ ├── settings.local.json # Local 스코프 (개인용, gitignore)
│ └── agents/ # 프로젝트 서브에이전트 정의
├── CLAUDE.md # 프로젝트 지침
└── .claudeignore # 파일 제외 설정
settings.json 기본 형식
{
"permissions": {
"allow": [
"Bash(git *)",
"Bash(npm run *)"
],
"deny": [
"Bash(rm -rf *)",
"Read(./.env)"
],
"defaultMode": "acceptEdits"
},
"env": {
"NODE_ENV": "development"
},
"hooks": {
"PostToolUse": [...]
}
}
권한 설정 (Permissions)
권한 설정은 Claude가 어떤 도구를 어떤 조건으로 사용할 수 있는지 제어합니다.
permissions 구조
| 키 | 설명 | 예시 |
|---|---|---|
allow |
도구 사용을 허용하는 규칙 배열 | ["Bash(git diff *)"] |
ask |
확인을 요청하는 규칙 배열 | ["Bash(git push *)"] |
deny |
도구 사용을 거부하는 규칙 배열 | ["WebFetch", "Bash(curl *)"] |
additionalDirectories |
Claude가 접근할 수 있는 추가 작업 디렉토리 | ["../docs/"] |
defaultMode |
Claude Code 시작 시 기본 권한 모드 | "acceptEdits" |
disableBypassPermissionsMode |
bypassPermissions 모드 비활성화 |
"disable" |
권한 규칙 문법
규칙은 Tool 또는 Tool(specifier) 형식을 따릅니다. 규칙 평가 순서: deny 먼저, 그 다음 ask, 마지막으로 allow. 첫 번째로 매칭되는 규칙이 적용됩니다.
기본 예시:
| 규칙 | 효과 |
|---|---|
Bash |
모든 Bash 명령 매칭 |
Bash(npm run *) |
npm run으로 시작하는 명령 매칭 |
Read(./.env) |
.env 파일 읽기 매칭 |
WebFetch(domain:example.com) |
example.com에 대한 fetch 요청 매칭 |
도구별 패턴 예시:
{
"permissions": {
"allow": [
"Bash(git *)",
"Bash(npm run *)",
"Bash(pytest *)",
"Read(**)",
"WebFetch(domain:github.com)"
],
"ask": [
"Bash(git push *)",
"Bash(git merge *)"
],
"deny": [
"Bash(rm -rf *)",
"Bash(curl *)",
"WebFetch",
"Read(./.env)",
"Read(./secrets/**)"
]
}
}
MCP 도구 패턴:
{
"permissions": {
"allow": [
"mcp__filesystem__read_file",
"mcp__github__*"
],
"deny": [
"mcp__dangerous-server__*"
]
}
}
Skill 도구 패턴:
{
"permissions": {
"allow": [
"Skill(deploy *)",
"Skill(test *)"
]
}
}
서브에이전트(Task) 제한:
{
"permissions": {
"deny": [
"Task(dangerous-agent)"
]
}
}
/permissions 명령어
Claude Code 내부에서 /permissions 명령어로 현재 권한 설정을 확인하고 대화형으로 관리할 수 있습니다. /allowed-tools 명령어도 권한 규칙 설정에 사용할 수 있습니다.
현재 설정 확인
/status 명령어로 활성화된 설정 소스와 출처를 확인할 수 있습니다. 각 설정 레이어(managed, user, project)와 함께 출처 정보(Enterprise managed settings (remote), Enterprise managed settings (plist) 등)가 표시됩니다. 설정 파일에 오류가 있으면 /status가 문제를 보고합니다.
주요 설정 항목
전체 settings.json 설정 키
| 키 | 설명 | 예시 |
|---|---|---|
apiKeyHelper |
인증 값을 생성하는 커스텀 스크립트 (/bin/sh에서 실행) |
"/bin/generate_temp_api_key.sh" |
cleanupPeriodDays |
이 기간보다 오래된 비활성 세션 삭제 (기본: 30일) | 20 |
companyAnnouncements |
시작 시 사용자에게 표시할 공지 | ["코드 가이드라인: docs.acme.com"] |
env |
모든 세션에 적용할 환경변수 | {"FOO": "bar"} |
attribution |
git 커밋 및 PR의 저작자 표기 커스터마이징 | 아래 참조 |
includeCoAuthoredBy |
Deprecated: attribution 사용 권장. git 커밋/PR에 co-authored-by Claude 포함 여부 (기본: true) |
false |
permissions |
권한 설정 (위 표 참조) | - |
hooks |
생명주기 이벤트에 실행할 커스텀 명령 설정 | - |
disableAllHooks |
모든 훅 및 커스텀 상태 표시줄 비활성화 | true |
language |
Claude 응답 기본 언어 설정 | "japanese", "korean" |
autoUpdatesChannel |
업데이트 릴리즈 채널 ("stable" 또는 "latest") |
"stable" |
fileSuggestion |
@ 파일 경로 자동완성 커스텀 명령 설정 |
아래 참조 |
enabledPlugins |
활성화/비활성화할 플러그인 목록 | 아래 참조 |
extraKnownMarketplaces |
추가 플러그인 마켓플레이스 정의 | 아래 참조 |
샌드박스 설정 (sandbox)
샌드박싱은 Bash 명령을 파일시스템 및 네트워크에서 격리합니다. 파일시스템/네트워크 제한은 Read, Edit, WebFetch 권한 규칙으로 설정합니다.
{
"sandbox": {
"enabled": true,
"autoAllowBashIfSandboxed": true,
"excludedCommands": ["git", "docker"],
"allowUnsandboxedCommands": false
}
}
| 키 | 설명 | 기본값 |
|---|---|---|
enabled |
Bash 샌드박싱 활성화 (macOS, Linux, WSL2) | false |
autoAllowBashIfSandboxed |
샌드박스 환경에서 Bash 명령 자동 승인 | true |
excludedCommands |
샌드박스 외부에서 실행할 명령 목록 | [] |
allowUnsandboxedCommands |
dangerouslyDisableSandbox 매개변수로 샌드박스 외부 실행 허용 |
true |
저작자 표기 설정 (attribution)
git 커밋 및 PR에 대한 Claude Code 저작자 표기를 커스터마이징합니다.
{
"attribution": {
"commit": "Generated with AI\n\nCo-Authored-By: AI <ai@company.com>",
"pr": ""
}
}
| 키 | 설명 |
|---|---|
commit |
git 커밋에 대한 저작자 표기 (트레일러 포함 가능). 빈 문자열로 설정 시 숨김 |
pr |
PR 설명에 대한 저작자 표기. 빈 문자열로 설정 시 숨김 |
기본 커밋 저작자 표기:
Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
저작자 표기를 완전히 숨기려면 commit과 pr 모두 빈 문자열로 설정하세요.
파일 제안 설정 (fileSuggestion)
@ 파일 경로 자동완성에 커스텀 명령을 설정합니다. 대규모 모노레포에서 유용합니다.
{
"fileSuggestion": {
"type": "command",
"command": "~/.claude/file-suggestion.sh"
}
}
커맨드는 훅과 동일한 환경변수(CLAUDE_PROJECT_DIR 포함)로 실행됩니다. stdin으로 JSON이 입력됩니다:
{"query": "src/comp"}
stdout으로 줄바꿈 구분 파일 경로를 출력합니다 (최대 15개):
src/components/Button.tsx
src/components/Modal.tsx
src/components/Form.tsx
민감한 파일 제외 (.claudeignore)
Claude Code가 API 키, 시크릿, 환경 파일 등 민감한 정보가 포함된 파일에 접근하지 못하도록 하려면 .claude/settings.json의 permissions.deny 설정을 사용합니다:
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"Read(./config/credentials.json)",
"Read(./build)"
]
}
}
프로젝트 루트에 .claudeignore 파일을 생성하여 파일 탐색에서 제외할 파일과 디렉토리를 지정할 수도 있습니다. .gitignore와 동일한 패턴 문법을 사용합니다:
# .claudeignore 예시
.env
.env.*
secrets/
*.key
*.pem
node_modules/
dist/
build/
__pycache__/
.pytest_cache/
이러한 패턴과 일치하는 파일들은 파일 탐색 및 검색 결과에서 제외되고, 해당 파일에 대한 읽기 작업이 거부됩니다.
시스템 프롬프트
Claude Code의 내부 시스템 프롬프트는 공개되지 않습니다. 커스텀 지침을 추가하려면 CLAUDE.md 파일 또는 --append-system-prompt 플래그를 사용하세요.
서브에이전트 설정
Claude Code는 사용자 및 프로젝트 수준에서 커스텀 AI 서브에이전트를 지원합니다. 서브에이전트는 YAML 프론트매터가 있는 Markdown 파일로 저장됩니다:
- User 서브에이전트:
~/.claude/agents/— 모든 프로젝트에서 사용 가능 - Project 서브에이전트:
.claude/agents/— 프로젝트에 한정, 팀과 공유 가능
플러그인 설정
Claude Code는 스킬, 에이전트, 훅, MCP 서버로 기능을 확장하는 플러그인 시스템을 지원합니다.
enabledPlugins
어떤 플러그인을 활성화할지 제어합니다. 형식: "plugin-name@marketplace-name": true/false
{
"enabledPlugins": {
"formatter@acme-tools": true,
"deployer@acme-tools": true,
"analyzer@security-plugins": false
}
}
extraKnownMarketplaces
저장소에서 사용 가능한 추가 마켓플레이스를 정의합니다. 팀 편의를 위해 저장소 수준 설정에서 주로 사용합니다.
{
"extraKnownMarketplaces": {
"acme-tools": {
"source": {
"source": "github",
"repo": "acme-corp/claude-plugins"
}
}
}
}
저장소에 extraKnownMarketplaces가 포함된 경우:
- 팀원은 폴더를 신뢰할 때 마켓플레이스 설치를 요청받습니다.
- 해당 마켓플레이스의 플러그인 설치를 요청받습니다.
- 원하지 않는 마켓플레이스나 플러그인은 건너뛸 수 있습니다.
/plugin 명령어
/plugin 명령어로 플러그인을 대화형으로 관리합니다:
- 마켓플레이스에서 사용 가능한 플러그인 탐색
- 플러그인 설치/제거
- 플러그인 활성화/비활성화
- 플러그인 세부 정보 보기 (제공하는 명령, 에이전트, 훅)
- 마켓플레이스 추가/제거
환경변수 레퍼런스
Claude Code는 동작을 제어하는 다양한 환경변수를 지원합니다. 환경변수는 settings.json의 env 키로도 설정할 수 있습니다.
API 및 인증
| 변수 | 설명 |
|---|---|
ANTHROPIC_API_KEY |
X-Api-Key 헤더로 전송되는 API 키 (대화형 사용은 /login 권장) |
ANTHROPIC_AUTH_TOKEN |
Authorization 헤더의 커스텀 값 (Bearer 접두사 자동 추가) |
ANTHROPIC_CUSTOM_HEADERS |
요청에 추가할 커스텀 헤더 (Name: Value 형식, 여러 헤더는 줄바꿈으로 구분) |
CLAUDE_CODE_USE_BEDROCK |
AWS Bedrock 사용 |
CLAUDE_CODE_USE_VERTEX |
Google Vertex AI 사용 |
CLAUDE_CODE_USE_FOUNDRY |
Microsoft Foundry 사용 |
CLAUDE_CODE_SKIP_BEDROCK_AUTH |
Bedrock AWS 인증 건너뛰기 (LLM 게이트웨이 사용 시) |
CLAUDE_CODE_SKIP_VERTEX_AUTH |
Vertex Google 인증 건너뛰기 |
CLAUDE_CODE_SKIP_FOUNDRY_AUTH |
Foundry Azure 인증 건너뛰기 |
모델 설정
| 변수 | 설명 |
|---|---|
ANTHROPIC_DEFAULT_HAIKU_MODEL |
기본 Haiku 모델 재정의 |
ANTHROPIC_DEFAULT_OPUS_MODEL |
기본 Opus 모델 재정의 |
CLAUDE_CODE_SUBAGENT_MODEL |
서브에이전트용 모델 설정 |
CLAUDE_CODE_MAX_OUTPUT_TOKENS |
최대 출력 토큰 수 (기본: 32,000, 최대: 64,000) |
CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS |
파일 읽기의 기본 토큰 한도 재정의 |
MAX_MCP_OUTPUT_TOKENS |
MCP 도구 응답에 허용되는 최대 토큰 수 (기본: 25,000) |
MAX_THINKING_TOKENS |
확장 사고(extended thinking) 토큰 예산 재정의 |
CLAUDE_CODE_EFFORT_LEVEL |
지원 모델의 노력 수준 설정. 값: low, medium, high (기본) |
Vertex AI 지역 설정
| 변수 | 설명 |
|---|---|
VERTEX_REGION_CLAUDE_3_5_HAIKU |
Vertex AI에서 Claude 3.5 Haiku 지역 재정의 |
VERTEX_REGION_CLAUDE_3_7_SONNET |
Vertex AI에서 Claude 3.7 Sonnet 지역 재정의 |
VERTEX_REGION_CLAUDE_4_0_OPUS |
Vertex AI에서 Claude 4.0 Opus 지역 재정의 |
VERTEX_REGION_CLAUDE_4_0_SONNET |
Vertex AI에서 Claude 4.0 Sonnet 지역 재정의 |
동작 제어
| 변수 | 설명 |
|---|---|
CLAUDE_CONFIG_DIR |
Claude Code 설정 및 데이터 파일 저장 위치 커스터마이징 |
CLAUDE_CODE_SHELL |
자동 셸 감지 재정의 (예: bash, zsh) |
CLAUDE_CODE_SHELL_PREFIX |
모든 Bash 명령에 적용할 명령 접두사 (로깅/감사용) |
CLAUDE_ENV_FILE |
각 Bash 명령 전에 소싱할 환경 설정 파일 경로 |
CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR |
1로 설정 시 각 명령 후 프로젝트 디렉토리로 재설정 |
CLAUDE_CODE_TMPDIR |
내부 임시 파일용 임시 디렉토리 재정의 |
CLAUDE_CODE_SIMPLE |
1로 설정 시 최소 시스템 프롬프트와 기본 도구만으로 실행 |
CLAUDE_CODE_EXIT_AFTER_STOP_DELAY |
쿼리 루프가 유휴 상태가 된 후 자동 종료까지 대기 시간 (밀리초) |
업데이트 및 원격 측정
| 변수 | 설명 |
|---|---|
DISABLE_AUTOUPDATER |
1로 설정 시 자동 업데이트 비활성화 |
FORCE_AUTOUPDATE_PLUGINS |
true로 설정 시 메인 자동 업데이터가 비활성화된 경우에도 플러그인 자동 업데이트 강제 실행 |
DISABLE_TELEMETRY |
1로 설정 시 Statsig 텔레메트리 수신 거부 |
DISABLE_ERROR_REPORTING |
1로 설정 시 Sentry 에러 보고 수신 거부 |
CLAUDE_CODE_ENABLE_TELEMETRY |
1로 설정 시 OpenTelemetry 데이터 수집 활성화 |
DISABLE_BUG_COMMAND |
1로 설정 시 /bug 명령어 비활성화 |
DISABLE_COST_WARNINGS |
1로 설정 시 비용 경고 메시지 비활성화 |
DISABLE_INSTALLATION_CHECKS |
1로 설정 시 설치 경고 비활성화 |
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC |
DISABLE_AUTOUPDATER, DISABLE_BUG_COMMAND, DISABLE_ERROR_REPORTING, DISABLE_TELEMETRY를 일괄 설정하는 동등 효과 |
프록시 및 네트워크
| 변수 | 설명 |
|---|---|
HTTP_PROXY |
네트워크 연결용 HTTP 프록시 서버 지정 |
HTTPS_PROXY |
네트워크 연결용 HTTPS 프록시 서버 지정 |
NO_PROXY |
프록시를 우회하여 직접 요청을 보낼 도메인 및 IP 목록 |
CLAUDE_CODE_PROXY_RESOLVES_HOSTS |
true로 설정 시 프록시가 DNS 해석 수행 허용 |
MCP 설정
| 변수 | 설명 |
|---|---|
MCP_TIMEOUT |
MCP 서버 시작 타임아웃 (밀리초) |
MCP_TOOL_TIMEOUT |
MCP 도구 실행 타임아웃 (밀리초) |
MAX_MCP_OUTPUT_TOKENS |
MCP 도구 응답에 허용되는 최대 토큰 수 (기본: 25,000) |
ENABLE_TOOL_SEARCH |
MCP 도구 검색 제어. 값: auto (기본, 10% 컨텍스트에서 활성화), auto:N (커스텀 임계값), true (항상 켜기), false (비활성화) |
MCP_CLIENT_SECRET |
OAuth 클라이언트 시크릿 (사전 구성된 자격증명이 필요한 MCP 서버용) |
MCP_OAUTH_CALLBACK_PORT |
OAuth 리디렉션 콜백 고정 포트 |
프롬프트 캐싱
| 변수 | 설명 |
|---|---|
DISABLE_PROMPT_CACHING |
1로 설정 시 모든 모델에 대해 프롬프트 캐싱 비활성화 |
DISABLE_PROMPT_CACHING_HAIKU |
1로 설정 시 Haiku 모델 프롬프트 캐싱 비활성화 |
DISABLE_PROMPT_CACHING_OPUS |
1로 설정 시 Opus 모델 프롬프트 캐싱 비활성화 |
DISABLE_PROMPT_CACHING_SONNET |
1로 설정 시 Sonnet 모델 프롬프트 캐싱 비활성화 |
기타
| 변수 | 설명 |
|---|---|
USE_BUILTIN_RIPGREP |
0으로 설정 시 Claude Code에 포함된 rg 대신 시스템 설치 rg 사용 |
DISABLE_NON_ESSENTIAL_MODEL_CALLS |
1로 설정 시 플레이버 텍스트 같은 비핵심 경로의 모델 호출 비활성화 |
CLAUDE_CODE_DISABLE_TERMINAL_TITLE |
1로 설정 시 대화 컨텍스트 기반 터미널 제목 자동 업데이트 비활성화 |
IS_DEMO |
true로 설정 시 데모 모드 활성화 (UI에서 이메일/조직 숨김, 온보딩 건너뜀) |
SLASH_COMMAND_TOOL_CHAR_BUDGET |
Skill 도구에 표시되는 스킬 메타데이터 문자 예산 재정의 |
내장 도구 목록
Claude Code는 다음 내장 도구를 사용합니다:
| 도구 | 설명 | 권한 필요 |
|---|---|---|
| AskUserQuestion | 요구사항 수집 또는 모호성 해소를 위한 객관식 질문 | 아니오 |
| Bash | 환경에서 셸 명령 실행 | 예 |
| Edit | 특정 파일의 대상 편집 수행 | 예 |
| ExitPlanMode | 사용자에게 계획 모드를 종료하고 코딩 시작 요청 | 예 |
| Glob | 패턴 매칭으로 파일 찾기 | 아니오 |
| Grep | 파일 내용에서 패턴 검색 | 아니오 |
| KillShell | ID로 실행 중인 백그라운드 Bash 셸 종료 | 아니오 |
| LSP | 언어 서버를 통한 코드 인텔리전스 (타입 에러, 정의 이동, 참조 찾기 등) | 아니오 |
| MCPSearch | 도구 검색이 활성화된 경우 MCP 도구 검색 및 로드 | 아니오 |
| NotebookEdit | Jupyter 노트북 셀 수정 | 예 |
| Read | 파일 내용 읽기 | 아니오 |
| Skill | 메인 대화에서 스킬 실행 | 예 |
| Task | 복잡한 멀티스텝 작업을 처리하는 서브에이전트 실행 | 아니오 |
| TaskCreate | 작업 목록에 새 작업 생성 | 아니오 |
| TaskGet | 특정 작업의 전체 세부 정보 조회 | 아니오 |
| TaskList | 현재 상태와 함께 모든 작업 목록 표시 | 아니오 |
| TaskOutput | 백그라운드 작업(Bash 셸 또는 서브에이전트)의 출력 조회 | 아니오 |
| TaskUpdate | 작업 상태, 의존성, 세부 정보 업데이트 또는 작업 삭제 | 아니오 |
| WebFetch | 지정된 URL에서 콘텐츠 가져오기 | 예 |
| WebSearch | 도메인 필터링으로 웹 검색 수행 | 예 |
| Write | 파일 생성 또는 덮어쓰기 | 예 |
Bash 도구 동작
Bash 도구는 다음 지속성 동작으로 셸 명령을 실행합니다:
작업 디렉토리는 유지됩니다: Claude가 작업 디렉토리를 변경(
cd /path/to/dir)하면, 이후 Bash 명령들은 해당 디렉토리에서 실행됩니다. 각 명령 후 프로젝트 디렉토리로 재설정하려면CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR=1을 사용하세요.환경변수는 유지되지 않습니다: 한 Bash 명령에서 설정한 환경변수(
export MY_VAR=value)는 이후 Bash 명령에서 사용할 수 없습니다. 각 Bash 명령은 새로운 셸 환경에서 실행됩니다.
환경변수를 Bash 명령에서 사용 가능하게 하는 세 가지 방법:
방법 1: Claude Code 시작 전 환경 활성화 (가장 간단)
conda activate myenv
# 또는: source /path/to/venv/activate
claude
방법 2: CLAUDE_ENV_FILE 설정 (영속적 환경 설정)
export CLAUDE_ENV_FILE=/path/to/env-setup.sh
claude
/path/to/env-setup.sh 내용:
conda activate myenv
# 또는: export MY_VAR=value
Claude Code는 각 Bash 명령 전에 이 파일을 소싱합니다.
방법 3: SessionStart 훅 사용 (프로젝트별 설정)
.claude/settings.json:
{
"hooks": {
"SessionStart": [{
"matcher": "startup",
"hooks": [{
"type": "command",
"command": "echo 'conda activate myenv' >> \"$CLAUDE_ENV_FILE\""
}]
}]
}
}
엔터프라이즈 설정
Managed Settings 파일 위치
| 플랫폼 | 위치 |
|---|---|
| macOS | /Library/Application Support/ClaudeCode/managed-settings.json |
| Linux 및 WSL | /etc/claude-code/managed-settings.json |
| Windows | C:\Program Files\ClaudeCode\managed-settings.json |
MDM/OS 수준 정책
- macOS:
com.anthropic.claudecode관리형 환경설정 도메인 (Jamf, Kandji 등 MDM 도구를 통해 설정 프로필로 배포) - Windows:
HKLM\SOFTWARE\Policies\ClaudeCode레지스트리 키에 JSON을 포함한Settings값 (그룹 정책 또는 Intune으로 배포)
Managed 전용 설정
다음 설정들은 managed settings에서만 사용 가능합니다:
| 설정 | 설명 |
|---|---|
allowManagedHooksOnly |
사용자, 프로젝트, 플러그인 훅 로드 방지. managed 훅 및 SDK 훅만 허용 |
allowManagedPermissionRulesOnly |
사용자 및 프로젝트 설정의 allow, ask, deny 권한 규칙 정의 방지 |
allowManagedMcpServersOnly |
managed 설정 이외의 MCP 서버 설정 방지 |
strictKnownMarketplaces |
사용자가 추가할 수 있는 플러그인 마켓플레이스 제어 |
실전 예제
한국어 개발팀을 위한 프로젝트 설정
.claude/settings.json:
{
"permissions": {
"allow": [
"Bash(git *)",
"Bash(npm *)",
"Bash(yarn *)",
"Bash(pnpm *)",
"Bash(python *)",
"Bash(pytest *)",
"Bash(ruff *)",
"Bash(mypy *)"
],
"ask": [
"Bash(git push *)",
"Bash(git merge *)",
"Bash(git rebase *)",
"Bash(npm publish *)"
],
"deny": [
"Bash(rm -rf *)",
"Bash(sudo *)",
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"WebFetch"
],
"additionalDirectories": [
"../shared-utils/"
]
},
"attribution": {
"commit": "AI 보조 작성\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
"pr": ""
},
"env": {
"NODE_ENV": "development",
"PYTHONPATH": "./src"
}
}
위험한 명령어 제한
{
"permissions": {
"deny": [
"Bash(rm -rf *)",
"Bash(sudo rm *)",
"Bash(chmod 777 *)",
"Bash(curl * | bash)",
"Bash(wget * | bash)",
"Bash(> /etc/*)",
"Bash(dd *)"
]
}
}
개인 로컬 설정 예시
.claude/settings.local.json (git에 커밋되지 않음):
{
"permissions": {
"allow": [
"Bash(open *)",
"Bash(pbcopy *)"
]
},
"env": {
"MY_LOCAL_API_KEY": "개인_테스트_키"
}
}
트러블슈팅
설정이 적용되지 않을 때
/status명령어로 현재 활성 설정 소스 확인- 설정 파일의 JSON 문법 확인:
jq '.' ~/.claude/settings.json jq '.' .claude/settings.json - 스코프 우선순위 확인 — 더 높은 우선순위 스코프의 설정이 재정의하고 있을 수 있습니다.
권한 오류 발생 시
/permissions명령어로 현재 권한 규칙 확인deny규칙이allow규칙보다 먼저 평가되는지 확인- 규칙 문법이 올바른지 확인 (예:
Bash(git *),Read(./.env))
환경변수가 적용되지 않을 때
각 Bash 명령은 새로운 셸 환경에서 실행되므로, export로 설정한 변수는 다음 명령에서 사용할 수 없습니다. CLAUDE_ENV_FILE 또는 settings.json의 env 키를 사용하세요:
{
"env": {
"PYTHONPATH": "./src",
"DATABASE_URL": "postgresql://localhost/mydb"
}
}
다음 단계
이 섹션이 도움이 되셨나요?
