Qwen Code 설정
인증 / API 키: 인증(API Key, Alibaba Cloud Coding Plan) 및 인증 관련 환경 변수(OPENAI_API_KEY 등)는 **Authentication**에 문서화되어 있습니다.
새 설정 형식 안내: settings.json 파일의 형식이 더 체계적인 새 구조로 업데이트되었습니다. 기존 형식은 자동으로 마이그레이션됩니다.
Qwen Code는 환경 변수, 커맨드라인 인자, 설정 파일 등 다양한 방법으로 동작을 구성할 수 있습니다. 이 문서에서는 각 설정 방법과 사용 가능한 설정을 설명합니다.
설정 레이어
설정은 다음 우선순위 순서로 적용됩니다(낮은 번호가 높은 번호에 의해 재정의됨):
| 단계 | 설정 소스 | 설명 |
|---|---|---|
| 1 | 기본값 | 애플리케이션 내에 하드코딩된 기본값 |
| 2 | 시스템 기본값 파일 | 다른 설정 파일에 의해 재정의될 수 있는 시스템 전반의 기본 설정 |
| 3 | 사용자 설정 파일 | 현재 사용자의 전역 설정 |
| 4 | 프로젝트 설정 파일 | 프로젝트별 설정 |
| 5 | 시스템 설정 파일 | 다른 모든 설정 파일을 재정의하는 시스템 전반의 설정 |
| 6 | 환경 변수 | 시스템 전반 또는 세션별 변수, .env 파일에서 로드될 수 있음 |
| 7 | 커맨드라인 인자 | CLI 시작 시 전달되는 값 |
설정 파일
Qwen Code는 영구 구성에 JSON 설정 파일을 사용합니다. 파일 위치는 네 곳입니다:
| 파일 유형 | 위치 | 범위 |
|---|---|---|
| 시스템 기본값 파일 | Linux: /etc/qwen-code/system-defaults.jsonWindows: C:\ProgramData\qwen-code\system-defaults.jsonmacOS: /Library/Application Support/QwenCode/system-defaults.json QWEN_CODE_SYSTEM_DEFAULTS_PATH 환경 변수로 경로를 재정의할 수 있습니다. | 시스템 전반 기본 설정의 기본 레이어를 제공합니다. 이 설정은 가장 낮은 우선순위를 가지며, 사용자, 프로젝트 또는 시스템 재정의 설정에 의해 재정의되도록 의도되었습니다. |
| 사용자 설정 파일 | ~/.qwen/settings.json(~는 홈 디렉토리). | 현재 사용자의 모든 Qwen Code 세션에 적용됩니다. |
| 프로젝트 설정 파일 | 프로젝트 루트 디렉토리 내의 .qwen/settings.json. | 해당 특정 프로젝트에서 Qwen Code를 실행할 때만 적용됩니다. 프로젝트 설정은 사용자 설정을 재정의합니다. |
| 시스템 설정 파일 | Linux: /etc/qwen-code/settings.json Windows: C:\ProgramData\qwen-code\settings.json macOS: /Library/Application Support/QwenCode/settings.jsonQWEN_CODE_SYSTEM_SETTINGS_PATH 환경 변수로 경로를 재정의할 수 있습니다. | 시스템의 모든 사용자에 대한 모든 Qwen Code 세션에 적용됩니다. 시스템 설정은 사용자 및 프로젝트 설정을 재정의합니다. 기업에서 시스템 관리자가 사용자의 Qwen Code 설정을 제어하는 데 유용할 수 있습니다. |
설정의 환경 변수 참고: settings.json 파일 내의 문자열 값은 $VAR_NAME 또는 ${VAR_NAME} 구문을 사용하여 환경 변수를 참조할 수 있습니다. 이 변수는 설정이 로드될 때 자동으로 해석됩니다. 예를 들어, MY_API_TOKEN 환경 변수가 있는 경우 settings.json에서 다음과 같이 사용할 수 있습니다: "apiKey": "$MY_API_TOKEN".
프로젝트의 .qwen 디렉토리
프로젝트 설정 파일 외에도, 프로젝트의 .qwen 디렉토리에는 Qwen Code의 작동과 관련된 기타 프로젝트별 파일을 포함할 수 있습니다:
- 사용자 정의 샌드박스 프로파일(예:
.qwen/sandbox-macos-custom.sb,.qwen/sandbox.Dockerfile). .qwen/skills/아래의 Agent Skill(각 Skill은SKILL.md를 포함하는 디렉토리).
설정 마이그레이션
Qwen Code는 레거시 설정을 새 형식으로 자동 마이그레이션합니다. 이전 설정 파일은 마이그레이션 전에 백업됩니다. 다음 설정은 부정(disable*)에서 긍정(enable*) 명칭으로 변경되었습니다:
| 이전 설정 | 새 설정 | 비고 |
|---|---|---|
disableAutoUpdate + disableUpdateNag | general.enableAutoUpdate | 단일 설정으로 통합 |
disableLoadingPhrases | ui.accessibility.enableLoadingPhrases | |
disableFuzzySearch | context.fileFiltering.enableFuzzySearch | |
disableCacheControl | model.generationConfig.enableCacheControl |
불리언 값 반전: 마이그레이션 시 불리언 값이 반전됩니다(예: disableAutoUpdate: true는 enableAutoUpdate: false가 됨).
disableAutoUpdate와 disableUpdateNag의 통합 정책
두 레거시 설정이 서로 다른 값으로 존재할 때, 마이그레이션은 다음 정책을 따릅니다: disableAutoUpdate 또는 disableUpdateNag 중 하나라도 true이면 enableAutoUpdate는 false가 됩니다:
disableAutoUpdate | disableUpdateNag | 마이그레이션된 enableAutoUpdate |
|---|---|---|
false | false | true |
false | true | false |
true | false | false |
true | true | false |
settings.json의 사용 가능한 설정
설정은 범주로 구분됩니다. 대부분의 설정은 settings.json 파일의 해당 최상위 범주 객체 내에 배치해야 합니다. proxy와 plansDirectory 같은 일부 최상위 설정은 호환성을 위해 직접 루트 키로 유지됩니다.
general
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
general.preferredEditor | string | 파일을 열 기본 편집기. | undefined |
general.vimMode | boolean | Vim 키 바인딩을 활성화합니다. | false |
general.enableAutoUpdate | boolean | 시작 시 자동 업데이트 확인 및 설치를 활성화합니다. | true |
general.showSessionRecap | boolean | 터미널에서離れた 후 돌아올 때 “이전 작업 위치” 한 줄 요약을 자동 표시합니다. 기본값은 꺼짐입니다. 이 설정과 관계없이 /recap으로 수동 트리거할 수 있습니다. | false |
general.sessionRecapAwayThresholdMinutes | number | 포커스 인 시 자동 요약이 실행되기 전에 터미널이 흐려져야 하는 최소 시간(분). showSessionRecap이 활성화된 경우에만 사용됩니다. | 5 |
general.gitCoAuthor.commit | boolean | Qwen Code를 통해 생성된 커밋에 Co-authored-by 트레일러를 추가하고 파일별 AI 기여 git 노트(refs/notes/ai-attribution)를 첨부합니다. 비활성화 시 둘 다 건너뜁니다. | true |
general.gitCoAuthor.pr | boolean | gh pr create 실행 시 PR 설명에 Qwen Code 기여 라인을 추가합니다. | true |
general.defaultFileEncoding | enum | 새 파일의 기본 인코딩. BOM 없는 UTF-8은 "utf-8"(기본값), BOM 포함 UTF-8은 "utf-8-bom". 프로젝트에서 BOM을 특별히 요구하는 경우에만 변경하세요. | "utf-8" |
general.voice.enabled | boolean | 프롬프트 입력에서 음성 받아쓰기를 활성화합니다. /voice 명령어로도 전환할 수 있습니다. 음성 모델(voiceModel)이 구성되어 있어야 합니다. | false |
general.voice.mode | enum | 푸시 투 톡 동작 방식: "hold"는 키를 누르고 있는 동안 말하기, "tap"은 탭하여 시작하고 탭(또는 일시정지)하여 중지 및 제출. | "hold" |
general.voice.language | string | 음성 받아쓰기의 선호 언어(예: "english", "chinese"). 비워두면 자동 감지합니다. | "" |
general.voice.keytermsFile | string | 음성 받아쓰기를 도메인별 용어에 맞게 조정하는 사용자 정의 키term 파일 경로(한 줄에 하나의 용어, #은 주석). 상대 경로는 워크스페이스 루트에서 해석되며, 존재 시 .qwen/voice-keyterms.txt가 기본값입니다. 신뢰할 수 있는 워크스페이스에서만 읽힙니다. Qwen ASR 모델(qwen3-asr-*)에만 적용됩니다. | "" |
general.voice.refineTranscript | boolean | 삽입 전 빠른 모델로 음성 스크립트를 정리합니다 — 필러 단어를 제거하고 인식 오류를 수정하면서 의미를 보존합니다. 실패 시 원본 스크립트로 폴백하며, 빠른 모델이 구성되어 있지 않으면 건너뜁니다. | true |
general.cleanupPeriodDays | number | /rewind에서 사용하는 ~/.qwen/file-history/ 세션 백업을 보관하는 일수. 이보다 오래된 백업은 하루에 한 번 실행되는 백그라운드 작업에 의해 제거됩니다. 0 = 최소 보관(~1시간): 지난 1시간 동안 접근된 세션과 현재 활성 세션만 유지합니다. 변경 사항은 재시작 후 적용됩니다. | 30 |
general.language | enum | 사용자 인터페이스 언어. "auto"로 설정하면 시스템 설정에서 감지하며, 언어 코드(예: "zh-CN", "fr")를 사용할 수 있습니다. ~/.qwen/locales/에 JS 로케일 파일을 배치하여 사용자 정의 코드를 추가할 수 있습니다. i18n 참조. 재시작이 필요합니다. | "auto" |
general.outputLanguage | string | 모델 출력 언어. "auto"로 설정하면 시스템 설정에서 감지하며, 특정 언어를 설정할 수 있습니다. 재시작이 필요합니다. | "auto" |
general.dynamicCommandTranslation | boolean | 동적 슬래시 명령어 설명의 AI 번역을 활성화합니다. 비활성화 시 동적 명령어는 원래 설명을 유지하고 번역 모델 호출을 건너뜁니다. | false |
general.terminalBell | boolean | 응답이 완료되거나 승인이 필요할 때 터미널 벨 소리를 재생합니다. | true |
general.preventSystemSleep | boolean | Qwen Code가 모델 응답을 스트리밍하거나 도구를 실행하는 동안 시스템이 절전 모드로 전환되는 것을 방지합니다. 유휴 프롬프트 시간과 권한 프롬프트는 절전 모드를 억제하지 않습니다. 시작 시 한 번 읽히므로 변경 사항은 재시작 후 적용됩니다. | true |
general.chatRecording | boolean | 채팅 기록을 디스크에 저장합니다. 비활성화 시 --continue 및 --resume도 작동하지 않습니다. 재시작이 필요합니다. | true |
output
| 설정 | 유형 | 설명 | 기본값 | 가능한 값 |
|---|---|---|---|---|
output.format | string | CLI 출력 형식. | "text" | "text", "json" |
output.showTimestamps | boolean | 각 어시스턴트 응답 앞에 [HH:MM:SS] 타임스탬프를 표시합니다. | false |
ui
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
ui.theme | string | UI의 색상 테마. 사용 가능한 옵션은 Themes를 참조하세요. | "Qwen Dark" |
ui.customThemes | object | 사용자 정의 테마 정의. | {} |
ui.statusLine | object | 사용자 정의 상태 라인 구성. command, refreshInterval, respectUserColors, hideContextIndicator 옵션을 지원합니다. Status Line을 참조하세요. | undefined |
ui.hideWindowTitle | boolean | 창 제목 표시줄을 숨깁니다. | false |
ui.hideTips | boolean | UI의 모든 팁(시작 및 응답 후)을 숨깁니다. Contextual Tips를 참조하세요. | false |
ui.hideBanner | boolean | 시작 시 ASCII 로고와 정보 패널을 숨깁니다. ui.hideTips도 설정하지 않으면 팁과 채팅 입력은 계속 렌더링됩니다. | false |
ui.customBannerTitle | string | 배너 정보 패널의 기본 >_ Qwen Code 제목을 대체합니다. (vX.Y.Z) 버전 접미사는 항상 추가되며, 인증, 모델, 경로 라인은 영향을 받지 않습니다. 삭제 처리되며 80자로 제한됩니다. | "" |
ui.customBannerSubtitle | string | 배너 제목과 인증/모델 라인 사이에 렌더링되는 선택적 서브타이틀 라인으로, 빈 스페이서 행 대신 사용됩니다. 삭제 처리되며 160자로 제한됩니다. 비어 있으면(기본값) 원래 빈 스페이서를 유지합니다. | "" |
ui.customAsciiArt | string | object | 배너의 QWEN ASCII 로고를 대체합니다. 인라인 문자열(두 너비 티어 모두에 사용), { "path": "./brand.txt" }(상대 경로는 소유 설정 파일의 디렉토리를 기준으로 해석; POSIX에서 O_NOFOLLOW로 한 번 읽히며 64KB로 제한), 또는 너비별 선택을 위한 { "small": ..., "large": ... }를 허용합니다. 삭제 처리되며 티어당 200줄 × 200열로 제한됩니다. | undefined |
ui.showLineNumbers | boolean | CLI 출력의 코드 블록에 줄 번호를 표시합니다. | true |
ui.renderMode | string | 기본 Markdown 표시 모드. "render"는 풍부한 시각 미리보기를, "raw"는 소스 지향 Markdown을 기본적으로 표시합니다. 세션 중에 Alt/Option+M으로 전환할 수 있으며, macOS에서는 터미널이 Option을 Meta로 전송해야 합니다. Markdown Rendering을 참조하세요. | "render" |
ui.showCitations | boolean | 채팅에서 생성된 텍스트의 인용을 표시합니다. | false |
ui.history.collapseOnResume | boolean | 세션을 재개할 때 기본적으로 기록을 접을지 여부. /history collapse-on-resume 및 /history expand-on-resume로 전환할 수 있습니다. | false |
ui.history.collapsePreviewCount | number | ui.history.collapseOnResume이 활성화되어 있을 때 표시되는 최근 사용자 턴 수. 0은 모든 복원된 기록을 기본적으로 접고, -1은 모든 복원된 기록을 표시합니다. | 0 |
ui.compactMode | boolean | 터미널 UI에서 은퇴되었습니다. CLI는 이제 메인 트랜스크립트에서 항상 컴팩트한 유형 기반 도구 보기를 표시합니다. Ctrl+O로 확장 세부 모드(모든 thinking 블록과 도구 출력을 인라인으로 확장/축소)를 전환할 수 있습니다. 웹 셸에서는 여전히 적용됩니다. | false |
ui.shellOutputMaxLines | number | 인라인으로 표시되는 셸 출력의 최대 줄 수. 0으로 설정하면 제한을 비활성화하고 전체 출력을 표시합니다. 숨겨진 라인은 +N lines 표시기로 표시됩니다. 오류, ! 접두사 사용자 시작 명령, 도구 확인, 포커스 임베디드 셸은 항상 전체 출력을 표시합니다. | 5 |
ui.enableWelcomeBack | boolean | 대화 기록이 있는 프로젝트로 돌아올 때 환영 대화상자를 표시합니다. 활성화하면 Qwen Code는 이전에 생성된 프로젝트 요약(.qwen/PROJECT_SUMMARY.md)이 있는 프로젝트로 돌아오는 것을 자동으로 감지하고 이전 대화를 계속하거나 새로 시작할 수 있는 대화상자를 표시합니다. Start new chat session을 선택하면 해당 선택은 프로젝트 요약이 변경될 때까지 현재 프로젝트에 기억됩니다. 이 기능은 /summary 명령어 및 종료 확인 대화상자와 통합됩니다. | true |
ui.accessibility.enableLoadingPhrases | boolean | 로딩 문구를 활성화합니다(접근성을 위해 비활성화). | true |
ui.accessibility.screenReader | boolean | 스크린 리더 호환성을 위해 TUI를 조정하는 스크린 리더 모드를 활성화합니다. | false |
ui.customWittyPhrases | array of strings | 로딩 상태에서 표시할 사용자 정의 문구 목록. 제공되면 CLI는 기본 문구 대신 이 문구를 순환합니다. | [] |
ui.showResponseTokensPerSecond | boolean | 모델이 스트리밍하는 동안 응답 토큰 카운터 옆에 실시간 tokens/sec 추정치를 표시합니다. 이는 생성 속도 힌트이며 ETA 또는 완료 비율이 아닙니다. 다음 세션부터 적용됩니다. | false |
ui.enableFollowupSuggestions | boolean | 모델 응답 후 다음에 입력할 내용을 예측하는 followup suggestions을 활성화합니다. 제안은 플레이스홀더 텍스트로 표시되며 Tab, Enter 또는 Right Arrow로 수락됩니다(입력을 채우며 자동 제출되지 않음). 기본적으로 켜져 있으며, false로 설정하여 옵트아웃할 수 있습니다. | true |
ui.enableCacheSharing | boolean | 제안 생성에 캐시 인식 포크 쿼리를 사용합니다. 접두사 캐싱을 지원하는 제공자에서 비용을 절감합니다(실험적). | true |
ui.enableSpeculation | boolean | 수락된 제안을 제출 전에 추측 실행합니다. 수락 시 결과가 즉시 표시됩니다(실험적). | false |
ui.showStatusInTitle | boolean | 터미널 창 제목에 Qwen Code 세션 이름과 상태를 표시합니다. | true |
ui.disableWorkflowKeywordTrigger | boolean | true이면 프롬프트에서 workflow라는 단어를 언급해도 턴이 Workflow 도구로 부드럽게 유도되지 않으며(그리고 Footer의 workflow active 표시기가 억제됨). workflow가 활성화된 경우에만 적용됩니다. | false |
ui.enableUserFeedback | boolean | Qwen 성능 개선에 도움을 주기 위해 대화 후 선택적 피드백 대화상자를 표시합니다. | true |
ui.compactInline | boolean | 그룹 간 병합 대신 각 그룹 내에서 컴팩트 도구 표시를 사용합니다. ui.compactMode가 활성화되어 있어야 합니다. 재시작이 필요합니다. | false |
ui.useTerminalBuffer | boolean | 터미널 스크롤백 버퍼 대신 앱 내 스크롤 가능한 뷰포트에서 대화 기록을 렌더링합니다. 호환되는 인터랙티브 터미널에서 기본적으로 활성화되어 긴 세션에서의 깜빡임, 스크롤 폭풍, 인터페이스 멈춤을 방지합니다. Shift+↑/↓(줄), PgUp/PgDn(페이지), Ctrl+Home/End(처음/끝) 또는 마우스 휠로 스크롤합니다. 활성화되는 동안 호스트 터미널 스크롤백을 사용하지 않습니다. 텍스트 선택을 위해 드래그(더블/트리플 클릭으로 단어/라인 선택)하거나 드래그 중 Shift(또는 macOS에서 Option)를 누르면 터미널 자체 선택을 사용합니다. 마우스 상호작용(휠, 드래그 선택, 클릭, 호버)은 ui.mouseTracking(기본적으로 켜짐)이 필요합니다. | true |
ui.showScrollbar | boolean | 앱 내 스크롤 가능한 뷰포트(가상화 기록)에서 자동 숨김 스크롤바를 표시합니다. 스크롤 중에 나타나고 유휴 시 사라집니다. 완전히 숨기려면 비활성화하세요. 인터랙티브 터미널 UI에서만 적용됩니다. | true |
ui.mouseTracking | boolean | 텍스트 선택, 텍스트 입력에서 클릭으로 위치 지정, 행 호버, 기록 항목 토글, 뷰포트 스크롤을 위한 앱 내 SGR 마우스 추적을 활성화합니다. 활성화되면 터미널이 모든 마우스 이벤트를 앱으로 전달하므로 네이티브 우클릭 컨텍스트 메뉴와 OSC 8 하이퍼링크 클릭을 사용할 수 없습니다. 네이티브 우클릭과 클릭 가능한 URL 링크를 복원하려면 비활성화하세요. 모든 앱 내 마우스 상호작용이 꺼지며, 가상화 기록에서 휠이 더 이상 트랜스크립트를 스크롤하지 않습니다. 대신 Shift+↑/↓, PgUp/PgDn 또는 Ctrl+Home/End를 사용하세요(ui.useTerminalBuffer: false와 함께 사용하여 네이티브 터미널 스크롤백을 복원). 인터랙티브 터미널 UI에서만 적용됩니다. | true |
ui.hideBuiltinWorktreeIndicator | boolean | Footer의 내장 ⎇ worktree-<branch> (<slug>) 라인을 숨깁니다. worktree 상태는 여전히 stdin 페이로드를 통해 사용자 정의 상태라인 스크립트에 전달됩니다. 사용자 정의 상태라인이 직접 worktree를 렌더링하지 않는 한 기본값을 유지하세요. | false |
ide
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
ide.enabled | boolean | IDE 통합 모드를 활성화합니다. | false |
ide.hasSeenNudge | boolean | 사용자가 IDE 통합 안내를 확인했는지 여부. | false |
privacy
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
privacy.usageStatisticsEnabled | boolean | 사용 통계 수집을 활성화합니다. | true |
model
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
model.name | string | 대화에 사용할 Qwen 모델. | undefined |
model.reasoningEffort | enum | 추론 가능 모델의 사고 강도. 모든 제공자에 적용됩니다. /effort 명령어(low, medium, high, xhigh, max)로 설정합니다. 각 제공자는 활성 모델이 지원하는 수준으로 매핑하고 제한합니다(예: Gemini는 high에서 제한, Anthropic은 모델에 없는 티어를 제한). 설정하지 않으면 모델/제공자 기본값을 사용합니다. | undefined |
model.baseUrl | string | 여러 modelProviders 항목이 동일한 모델 id를 공유할 때 구분하기 위해 모델 선택기가 자동으로 저장합니다. 수동으로 설정하도록 의도되지 않았습니다 — /model 선택기나 modelProviders 항목을 대신 사용하세요. 오래된 수동 편집 값은 동일한 id의 다른 제공자로 요청을 조용히 라우팅할 수 있습니다. | undefined |
model.sessionTokenLimit | number | 다음 메시지를 보내기 전에 허용되는 최대 기록 프롬프트 토큰 수. -1은 무제한, 0도 무제한으로 처리됩니다(model.maxToolCalls와 달리, 여기서 0은 모든 호출을 허용하지 않음). 기록된 프롬프트 수가 제한을 초과하면 다음 전송이 삭제됩니다(세션은 중단되지 않음). | -1 |
model.maxSessionTurns | integer | 세션에 유지할 사용자/모델/도구 턴의 최대 수. -1은 무제한. | -1 |
model.maxWallTimeSeconds | number | 헤드리스/무인 실행의 경과 시간 예산(초). -1은 무제한. --max-wall-time으로 호출별로 재정의할 수 있으며 양수 지속 시간(90, 30s, 5m, 1h, 1.5h)이 필요합니다. 최소 1초 — sub-second 값(500ms, 0.5)은 오타로 거부됩니다. 플래그를 생략하면 이 설정으로 폴백합니다. 초과 시 종료 코드 55로 중단합니다. | -1 |
model.maxToolCalls | number | 실행의 누적 도구 호출 예산(성공 또는 실패 관계없이 모든 실행된 도구를 계산; --json-schema의 structured_output은 면제). -1은 무제한, 0은 “도구 호출 불가”. 오타를 잡기 위해 1,000,000으로 제한됩니다. --max-tool-calls로 재정의할 수 있습니다. 초과 시 종료 코드 55로 중단합니다. | -1 |
model.maxSubagentDepth | number | 최대 서브에이전트 중첩 깊이(1부터 시작: 최상위 서브에이전트는 레벨 1). 1은 서브에이전트를 사용 가능하게 유지하지만 중첩을 비활성화합니다 — 중첩 이전 동작. 값은 1–100 범위로 제한되며, 비유한 값은 기본값으로 폴백합니다. 동료, 포크, workflow 생성 에이전트는 이 설정과 관계없이 중첩되지 않습니다. --max-subagent-depth로 재정의할 수 있습니다. | 5 |
model.generationConfig | object | 기본 콘텐츠 생성기에 전달되는 고급 재정의. timeout, maxRetries, retryInitialDelayMs, retryMaxDelayMs, enableCacheControl, splitToolMedia(기본값 true; 도구 반환 미디어 — 내장 read_file가 읽은 이미지 포함 — 를 규격 위반 role: "tool" 메시지 대신 후속 사용자 메시지로 분할하여 doubao / new-api / LM Studio 같은 엄격한 OpenAI 호환 서버가 볼 수 있게 함; false로 설정하면 레거시 도구 내 임베드 동작으로 복원), toolResultContentFormat(기본값 "parts"; 도구 템플리트가 텍스트 콘텐츠 파트를 무시하는 레거시 OpenAI 호환 런타임에만 "string" 설정), contextWindowSize(모델의 컨텍스트 창 크기 재정의), modalities(자동 감지된 입력 모달리티 재정의), customHeaders(API 요청의 사용자 정의 HTTP 헤더), extra_body(OpenAI 호환 API 요청의 추가 body 파라미터), samplingParams의 세밀한 조절 knob(예: temperature, top_p, max_tokens)을 지원합니다. 설정하지 않으면 제공자 기본값을 사용합니다. | undefined |
model.chatCompression.contextPercentageThreshold | number | 삭제됨. context.autoCompactThreshold(#### context 섹션 참조)로 대체되었습니다. 자동 압축은 이제 computeThresholds() 함수를 통해 모델의 컨텍스트 창에서 내부적으로 계산되는 3단계 임계값 사다리(warn / auto / hard)를 사용합니다. 이전 설정은 자동으로 무시됩니다(시작 경고 없음). 재설계 이유는 PR #4345 / docs/design/auto-compaction-threshold-redesign.md를 참조하세요. | N/A |
model.chatCompression.maxRecentFilesToRetain | number | 자동 압축 후 기록에 복원되는 최근 접근 파일 수(현재 내용이 임베드되거나 경로로 참조됨). 0은 아무것도 복원하지 않습니다. 환경 재정의: QWEN_COMPACT_MAX_RECENT_FILES. | 5 |
model.chatCompression.maxRecentImagesToRetain | number | 자동 압축 후 기록에 복원되는 최근 이미지 수(도구 스크린샷 / 사용자 붙여넣기). 0은 아무것도 복원하지 않습니다. 환경 재정의: QWEN_COMPACT_MAX_RECENT_IMAGES. | 3 |
model.chatCompression.enableScreenshotTrigger | boolean | true이면 자동 압축은 도구 반환 이미지 수가 screenshotTriggerThreshold에 도달하면 토큰 사용량과 무관하게 실행됩니다 — 빈번한 스크린샷이 모델 주의를 희석하는 computer-use 세션을 대상으로 합니다. 도구 결과 내에서 반환된 이미지만 계산하며, 사용자가 붙여넣은 이미지는 계산하지 않습니다. 환경 재정의: QWEN_COMPACT_SCREENSHOT_TRIGGER(1/true/0/false). | true |
model.chatCompression.screenshotTriggerThreshold | number | enableScreenshotTrigger가 활성화된 경우 스크린샷 트리거가 실행되는 도구 반환 이미지 수. 압축은 카운트를 초기화합니다 — 생존한 이미지는 최상위 파트로 다시 임베드되며 트리거는 이를 계산하지 않으므로 즉시 재실행되지 않습니다. 환경 재정의: QWEN_COMPACT_SCREENSHOT_THRESHOLD. | 20 |
model.skipNextSpeakerCheck | boolean | 다음 화자 확인을 건너뜁니다. | true |
model.skipLoopDetection | boolean | 스트리밍 루프 감지 확인을 비활성화합니다. 기본값은 true(루프 감지 건너뜀)로, 정상 workflow의 오탐을 방지합니다. false로 설정하면 스트리밍 루프 감지를 다시 활성화합니다 — stuck 반복이 예산을 낭비할 수 있는 헤드리스/비대화형 실행의 가드레드로 유용합니다. 다른 스트리밍 감지기를 실행하지 않는 데몬/ACP 세션에서는 다시 활성화하면 전역 중복 도구 호출 중단도 활성화됩니다. 항상 작동하는 턴별 도구 호출 상한과 잘못된 도구 파라미터 정체 가드는 이 설정과 무관하게 실행됩니다. | true |
model.maxToolCallsPerTurn | integer | 턴별 도구 호출 상한(하나의 모델 턴과 그 도구 결과 연속; /goal 반복 같은 Stop-hook 연속은 새 예산을 시작합니다). 명시적으로 설정되면 이 값은 하드 캡입니다: 도달 후 다음 도구 호출에서 턴이 중단됩니다(릴리즈 동작). 설정하지 않으면(기본값 100) 캡은 적응적입니다: 턴이 100을 초과하면 모델이 동일한 호출을 반복할 때만 중단되고, 생산적인 턴(다양한 호출)은 하드 백스톱 1000까지 계속됩니다. 적응형 기본값은 인터랙티브 TUI, 비대화형(-p / JSON / stream-JSON) 코어 클라이언트 실행 및 데몬/ACP 세션 모두에 적용됩니다. 데몬/ACP 세션은 실행 전 도구 배치마다 캡을 평가합니다: 명시적 캡이나 하드 백스톱을 초과할 수 있는 배치는 전체가 건너뛰어지므로 턴은 그 이상 실행되지 않습니다(최대 한 배치 전에 중단될 수 있음). 적응형 소프트 캡은 설계상 백스톱까지 초과될 수 있습니다. 세션 내 비활성화도 없습니다. model.skipLoopDetection과 무관하게 runaway 턴에 대한 항상 작동 회로 차단기입니다. 0 또는 음수로 설정하면 캡을 비활성화합니다. 루프 감지 대화상자에서 “Disable loop detection for this session”을 선택해도 세션 동안 억제됩니다. | 100 |
model.skipStartupContext | boolean | 각 세션 시작 시 시작 워크스페이스 컨텍스트(환경 요약 및 승인) 전송을 건너뜁니다. 컨텍스트를 수동으로 제공하거나 시작 시 토큰을 절약하려면 활성화하세요. | false |
model.enableOpenAILogging | boolean | 디버깅 및 분석을 위해 OpenAI API 호출 로깅을 활성화합니다. 활성화되면 API 요청과 응답이 JSON 파일에 기록됩니다. | false |
model.openAILoggingDir | string | OpenAI API 로그의 사용자 정의 디렉토리 경로. 지정하지 않으면 현재 작업 디렉토리의 logs/openai가 기본값입니다. 절대 경로, 상대 경로(현재 작업 디렉토리에서 해석), ~ 확장(홈 디렉토리)을 지원합니다. | undefined |
model.generationConfig 예시:
{
"model": {
"generationConfig": {
"timeout": 60000,
"contextWindowSize": 128000,
"modalities": {
"image": true
},
"enableCacheControl": true,
"toolResultContentFormat": "parts",
"customHeaders": {
"X-Client-Request-ID": "req-123"
},
"extra_body": {
"enable_thinking": true
},
"samplingParams": {
"temperature": 0.2,
"top_p": 0.8,
"max_tokens": 1024
}
}
}
}timeout (요청 타임아웃):
timeout은 밀리초 단위의 요청별 타임아웃(기본값 120000)입니다. 0으로 설정하면 요청 타임아웃을 비활성화합니다 — QWEN_STREAM_IDLE_TIMEOUT_MS=0 규칙과 일치 — 요청을 중단하지 않습니다. QWEN_CODE_API_TIMEOUT_MS 환경 변수로도 설정할 수 있습니다. 이는 아래의 두 스트림 가드와 구별됩니다.
스트림 가드 (OpenAI 호환 제공자 전용):
두 가드가 스트리밍 응답을 제한하며, 각각 0을 받아 비활성화합니다. Anthropic/Gemini 생성기는 구현하지 않으며, 아래의 drip-fed 형태를 제한 없이 둡니다.
QWEN_STREAM_IDLE_TIMEOUT_MS(기본값240000)는 스트리밍 청크 _사이_의 비활성 시간을 제한합니다: 이 시간 동안 침묵하는 스트림은 재시도 가능한ETIMEDOUT으로 중단됩니다.QWEN_STREAM_MAX_LIFETIME_MS(기본값900000)는 청크 흐름과 무관하게 하나의 스트리밍 응답의 전체 업스트림 대기 시간을 제한합니다 — 완료되지 않는 drip-fed 스트림이 리셋할 수 없는 바운드.
이것들은 환경 변수(또는 임베더의 경우 ContentGeneratorConfig.streamIdleTimeoutMs / streamMaxLifetimeMs) 전용 — settings.json 키가 없습니다; settings.json에 "streamMaxLifetimeMs"를 작성해도 효과가 없습니다. 업그레이드 노트: 이전에 QWEN_STREAM_IDLE_TIMEOUT_MS=0(또는 ContentGeneratorConfig에서 streamIdleTimeoutMs: 0)을 설정하여 스트림 중단을 옵트아웃했던 배포는 이제 QWEN_STREAM_MAX_LIFETIME_MS=0(또는 streamMaxLifetimeMs: 0)도 필요합니다. 15분 수명 캡은 유휴 타임아웃을 그 이상으로 올린 스트림도 제한합니다(예: QWEN_STREAM_IDLE_TIMEOUT_MS=1800000) — 더 긴 창에 의존한다면 캡도 동일하게 올리거나 0으로 설정하세요.
max_tokens (출력 토큰 제한):
samplingParams.max_tokens과 QWEN_CODE_MAX_OUTPUT_TOKENS가 모두 설정되지 않으면 Qwen Code는 일반적으로 선택된 모델의 선언된 출력 제한을 요청의 기본 출력 제한으로 사용합니다. 응답이 여전히 해당 제한에 도달하면 Qwen Code는 상향된 제한(64K 바닥)으로 재시도하고 연속 턴에 걸쳐 복구할 수 있습니다.
OpenAI 호환 제공자의 경우 samplingParams는 와이어 형태 이스케이프 해치이기도 합니다: 설정되면 키가 그대로 전달되며 Qwen Code는 max_tokens 기본값을 합성하지 않습니다. max_completion_tokens 같은 제공자별 파라미터에 사용하세요.
고정 출력 제한을 강제하려면 설정에서 samplingParams.max_tokens을 설정하거나 QWEN_CODE_MAX_OUTPUT_TOKENS 환경 변수를 사용하세요. 명시적 제한은 자동 출력 토큰 상향을 비활성화합니다.
toolResultContentFormat:
OpenAI 호환 요청에서 텍스트 전용 도구 결과의 직렬화 방식을 제어합니다. 기본값 "parts"는 표준 콘텐츠 파트 배열 형태를 유지합니다. "string"은 도구 템플리트가 텍스트 콘텐츠 파트를 무시하는 레거시 OpenAI 호환 런타임(예: 오래된 GLM-5.1 vLLM/SGLang 템플리트)에만 설정하세요. 도구 반환 미디어는 여전히 splitToolMedia의 영향을 받습니다.
contextWindowSize:
선택된 모델의 기본 컨텍스트 창 크기를 재정의합니다. Qwen Code는 모델 이름 패턴 매칭을 기반으로 내장 기본값을 사용하여 컨텍스트 창을 결정하며, 상수 폴백 값이 있습니다. 제공자의 유효 컨텍스트 제한이 Qwen Code의 기본값과 다를 때 이 설정을 사용하세요. 이 값은 모델의 가정된 최대 컨텍스트 용량을 정의하며, 요청별 토큰 제한이 아닙니다.
선택된 모델이 modelProviders에 정의되어 있으면 최상위 model.generationConfig 대신 해당 제공자 항목의 generationConfig에서 contextWindowSize를 설정하세요. 제공자 모델 항목은 봉인되어 있으므로 최상위 생성 설정이 누락된 제공자 필드를 채우지 않습니다.
modalities:
선택된 모델의 자동 감지된 입력 모달리티를 재정의합니다. Qwen Code는 모델 이름 패턴 매칭을 기반으로 지원되는 모달리티(image, PDF, audio, video)를 자동으로 감지합니다. 자동 감지가 올바르지 않을 때 이 설정을 사용하세요 — 예를 들어 지원하지만 인식되지 않는 모델에 대해 pdf를 활성화합니다. 형식: { "image": true, "pdf": true, "audio": true, "video": true }. 지원되지 않는 유형은 키를 생략하거나 false로 설정하세요.
customHeaders:
모든 API 요청에 사용자 정의 HTTP 헤더를 추가할 수 있습니다. 요청 추적, 모니터링, API 게이트웨이 라우팅 또는 다른 모델이 다른 헤더를 요구할 때 유용합니다. 제공자 모델의 경우 modelProviders[].generationConfig.customHeaders에 customHeaders를 정의하세요. 일치하는 제공자 항목이 없는 런타임 모델의 경우 model.generationConfig.customHeaders에 정의하세요. 두 수준 간 병합은 발생하지 않습니다.
extra_body 필드는 API로 전송되는 요청 body에 사용자 정의 파라미터를 추가할 수 있습니다. 표준 구성 필드에서 다루지 않는 제공자별 옵션에 유용합니다. 참고: 이 필드는 OpenAI 호환 제공자(openai, qwen-oauth)에서만 지원됩니다. Anthropic과 Gemini 제공자에서는 무시됩니다. 제공자 모델의 경우 modelProviders[].generationConfig.extra_body에 extra_body를 정의하세요. 일치하는 제공자 항목이 없는 런타임 모델의 경우 model.generationConfig.extra_body에 정의하세요.
model.openAILoggingDir 예시:
"~/qwen-logs"-~/qwen-logs디렉토리에 로깅"./custom-logs"- 현재 디렉토리 기준./custom-logs에 로깅"/tmp/openai-logs"- 절대 경로/tmp/openai-logs에 로깅
fastModel
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
fastModel | string | 프롬프트 제안 생성과 추측 실행에 사용되는 모델. 비워두면 메인 모델을 사용합니다. 더 작고 빠른 모델(예: qwen3-coder-flash)은 지연 시간과 비용을 줄입니다. /model --fast로도 설정할 수 있습니다. | "" |
visionModel
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
visionModel | string | vision bridge로 사용되는 이미지 지원 모델: 텍스트 전용 메인 모델이 이미지를 받거나 read_file에 유계 PDF 시각 폴백이 필요할 때 이 모델이 먼저 트랜스크립션합니다. 명시적으로 설정하면 다른 제공자를 사용하더라도 해당 모델에 대한 bridge 호출을 승인하며, 도구 디스플레이가 엔드포인트를 공개합니다. 비워두면 동일 제공자 vision 모델을 자동 선택합니다. /model --vision으로도 설정할 수 있습니다. | "" |
compactionModel
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
compactionModel | string | 채팅 압축(자동 압축)에 사용되는 모델. 비워두면 메인 모델로 폴백합니다. 더 작거나 빠른 모델은 압축 지연 시간과 비용을 줄일 수 있습니다. /model --compaction으로도 설정하거나 해제할 수 있습니다. | "" |
imageModel
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
imageModel | string | 내장 image_gen 도구에서 사용하는 모델. 선택된 모델은 modelProviders에서 imageOnly: true, HTTPS baseUrl, envKey를 가져야 합니다. 비워두면 도구를 사용할 수 없는 상태로 유지합니다. /model --image로도 설정할 수 있습니다. | "" |
visionBridgeTimeoutMs
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
visionBridgeTimeoutMs | integer | vision bridge 이미지 트랜스크립션 호출의 시도별 타임아웃(밀리초). 양수 정수(최대 2147483647; bridge는 타임아웃된 시도를 새 타임아웃으로 한 번 재시도). 설정하지 않으면 내장 30초를 사용합니다. 느리거나 프록시된 vision 엔드포인트에 대해 높이세요. | 설정 안 됨 |
voiceModel
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
voiceModel | string | 음성 받아쓰기에 사용되는 모델. 비워두면 음성 모델이 선택될 때까지 음성 받아쓰기가 비활성화됩니다. /model --voice로도 설정할 수 있습니다. | "" |
modelFallbacks
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
modelFallbacks | string | 기본 모델이 용량 오류(429/503/529)에 도달할 때 시도할 폴백 모델 ID의 정렬된 목록(쉼표로 구분, 최대 3개). 예: "qwen-plus,qwen-turbo". --fallback-model CLI 플래그로도 설정할 수 있습니다. 재시작이 필요합니다. | "" |
modelPricing
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
modelPricing | object | /stats model의 비용 추산을 위한 선택적 모델별 가격. 예: { "qwen3-coder": { "inputPerMillionTokens": 0.30, "outputPerMillionTokens": 1.20 } }. | undefined |
context
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
context.fileName | string 또는 string 배열 | 컨텍스트 파일의 이름. | undefined |
context.autoCompactThreshold | number | 자동 압축이 트리거되는 컨텍스트 창의 목표 비율. 0보다 크고 최대 1이어야 합니다. 기본값은 0.85(85%). 트리거의 상한으로 작용합니다: 큰 창에서는 유효 트리거(~85%)이며, 작은 창에서는 압축이 요약할 공간을 남기기 위해 더 일찍 실행될 수 있습니다. 이전 model.chatCompression.contextPercentageThreshold를 대체합니다. | undefined (내부 0.85 사용) |
context.importFormat | string | 메모리 가져오기 시 사용할 형식. | undefined |
context.includeDirectories | array | 워크스페이스 컨텍스트에 포함할 추가 디렉토리. 워크스페이스 컨텍스트에 포함할 추가 절대 또는 상대 경로 배열을 지정합니다. 누락된 디렉토리는 기본적으로 경고와 함께 건너뜁니다. 경로는 ~를 사용하여 사용자 홈 디렉토리를 참조할 수 있습니다. 이 설정은 --include-directories 커맨드라인 플래그와 결합할 수 있습니다. | [] |
context.loadFromIncludeDirectories | boolean | /memory refresh 명령어의 동작을 제어합니다. true로 설정하면 모든 추가된 디렉토리에서 QWEN.md 파일을 로드합니다. false로 설정하면 현재 디렉토리에서만 QWEN.md를 로드합니다. | false |
context.fileFiltering.respectGitIgnore | boolean | 검색 시 .gitignore 파일을 존중합니다. | true |
context.fileFiltering.respectQwenIgnore | boolean | 검색 시 .qwenignore 및 구성된 사용자 정의 ignore 파일을 존중합니다. | true |
context.fileFiltering.customIgnoreFiles | array | respectQwenIgnore가 활성화된 경우 기본 호환 파일(.agentignore, .aiignore) 대신 사용할 프로젝트 루트 상대 ignore 파일. .qwenignore는 항상 포함됩니다. | [".agentignore", ".aiignore"] |
context.fileFiltering.enableRecursiveFileSearch | boolean | 프롬프트에서 @ 접두사를 완성할 때 현재 트리 아래의 파일명을 재귀적으로 검색할지 여부. | true |
context.fileFiltering.enableFuzzySearch | boolean | true이면 파일 검색 시 퍼지 검색 기능을 활성화합니다. 파일 수가 많은 프로젝트에서 성능을 개선하려면 false로 설정하세요. | true |
context.clearContextOnIdle.toolResultsThresholdMinutes | number | 오래된 도구 결과 내용을 정리하기 전 비활성 시간(분). -1을 사용하면 유휴 트리거를 비활성화합니다. | 60 |
context.clearContextOnIdle.toolResultsNumToKeep | integer | 정리 시 보존할 최근 압축 가능 도구 결과의 정수 수. 1 미만의 값은 1로 바닥값 처리됩니다. | 5 |
context.clearContextOnIdle.toolResultsTotalCharsThreshold | number | 정리 전 기록에서 허용되는 총 압축 가능 도구 결과 출력 문자 수. 초과되면 가장 오래된 결과가 이 임계값의 절반까지 정리됩니다(최선 노력). 이후 턴이 매 턴 기록을 다시 작성하는 대신 제공자 프롬프트 캐시를 재사용할 수 있습니다. -1을 사용하면 크기 트리거를 비활성화합니다. 이것은 소프트 임계값입니다: 보호된 최근 도구 결과가 총계를 그 이상으로 유지할 수 있습니다. | 500000 |
파일 검색 성능 문제 해결
파일 검색(예: @ 완성)에서 성능 문제가 발생하면, 특히 파일 수가 매우 많은 프로젝트에서 다음 방법을 순서대로 시도해 보세요:
- ignore 파일 사용: 프로젝트 루트에
.qwenignore또는 구성된 사용자 정의 ignore 파일을 생성하여 참조할 필요가 없는 대량 파일이 포함된 디렉토리(예: 빌드 아티팩트, 로그,node_modules)를 제외하세요. 크롤링되는 총 파일 수를 줄이는 것이 성능을 개선하는 가장 효과적인 방법입니다. - 퍼지 검색 비활성화: 파일 무시만으로는 부족하면
settings.json에서enableFuzzySearch를false로 설정하여 퍼지 검색을 비활성화할 수 있습니다. 더 단순한 비퍼지 매칭 알고리즘을 사용하여 더 빠를 수 있습니다. - 재귀 파일 검색 비활성화: 마지막 수단으로
enableRecursiveFileSearch를false로 설정하여 재귀 파일 검색을 완전히 비활성화할 수 있습니다. 프로젝트의 재귀 크롤을 피하므로 가장 빠른 옵션입니다. 단,@완성 사용 시 파일의 전체 경로를 입력해야 합니다.
tools
| 설정 | 유형 | 설명 | 기본값 | 비고 |
|---|---|---|---|---|
tools.sandbox | boolean 또는 string | 샌드박스 실행 환경(boolean 또는 경로 문자열). | undefined | |
tools.sandboxImage | string | --sandbox-image와 QWEN_SANDBOX_IMAGE가 설정되지 않았을 때 Docker/Podman이 사용하는 샌드박스 이미지 URI. | undefined | |
tools.shell.enableInteractiveShell | boolean | 대화형 셸 경험에 node-pty를 사용합니다. child_process로의 폴백이 여전히 적용됩니다. | true | |
tools.shell.defaultTimeoutMs | number | 에이전트가 시작하는 포그라운드 셸 명령의 기본 타임아웃(밀리초). 셸 도구의 호출별 타임아웃이 이를 재정의합니다. 설정하지 않으면 포그라운드 명령은 120000ms(2분) 후 타임아웃됩니다. 0으로 설정하면 타임아웃을 비활성화합니다. | undefined | |
tools.shell.heartbeatIntervalMs | number | 포그라운드 셸 명령이 출력을 생성하지 않는 동안 전송되는 활성 상태 하트비트 사이의 간격(밀리초). 하트비트는 ACP 클라이언트와 stream-json 소비자에게 전달되어 조용한 명령과 죽은 세션을 구별할 수 있게 합니다. 설정하지 않으면 하트비트는 10000ms(10초)마다 실행됩니다. 0으로 설정하면 하트비트를 비활성화합니다. | undefined | |
tools.core | array of strings | 지원 중단. 다음 버전에서 제거됩니다. 대신 permissions.allow + permissions.deny를 사용하세요. 내장 도구를 허용 목록으로 제한합니다. 목록에 없는 모든 도구는 비활성화됩니다. | undefined | |
tools.exclude | array of strings | 지원 중단. 대신 permissions.deny를 사용하세요. 발견에서 제외할 도구 이름. 첫 로드 시 permissions 형식으로 자동 마이그레이션됩니다. | undefined | |
tools.disabled | array of strings | 레지스트리에서 완전히 숨겨지는 도구 이름. permissions.deny(런타임에 호출을 차단)와 달리, 비활성화된 도구는 등록되지 않으므로 /tools에 나타나지 않으며 모델이 발견하거나 호출할 수 없습니다. 예를 들어 ["enter_plan_mode"]는 모델이 스스로 plan 모드로 전환하는 것을 방지합니다. 범위를 가로질러 합집합으로 병합됩니다. | undefined | |
tools.visible | array of strings | tool_search 없이 시작 시 표시되는 지연 도구 이름. 나열된 도구는 초기 세션에서 핵심 도구와 함께 나타납니다. 범위를 가로질러 합집합으로 병합됩니다. | undefined | |
tools.allowed | array of strings | 지원 중단. 대신 permissions.allow를 사용하세요. 확인 대화상자를 우회하는 도구 이름. 첫 로드 시 permissions 형식으로 자동 마이그레이션됩니다. | undefined | |
tools.approvalMode | string | 도구 사용의 기본 승인 모드를 설정합니다. | auto | 가능한 값: plan(분석만, 파일 수정이나 명령 실행 안 함), default(파일 편집이나 셸 명령 실행 전 승인 필요), auto-edit(파일 편집 자동 승인), auto(LLM 분류기가 안전한 동작을 자동 승인하고 위험한 동작을 차단), yolo(모든 도구 호출 자동 승인) |
tools.discoveryCommand | string | 도구 발견을 위해 실행할 명령. | undefined | |
tools.callCommand | string | tools.discoveryCommand를 사용하여 발견된 특정 도구를 호출하는 사용자 정의 셸 명령을 정의합니다. 셸 명령은 다음 기준을 충족해야 합니다: 함수 name(함수 선언 과 정확히 동일)을 첫 번째 커맨드라인 인자로 받아야 합니다. stdin에서 함수 인자를 JSON으로 읽어야 합니다(functionCall.args와 유사). 함수 출력을 stdout에서 JSON으로 반환해야 합니다(functionResponse.response.content와 유사). | undefined | |
tools.useRipgrep | boolean | 파일 내용 검색에 폴백 구현 대신 ripgrep을 사용합니다. 더 빠른 검색 성능을 제공합니다. | true | |
tools.useBuiltinRipgrep | boolean | 번들된 ripgrep 바이너리를 사용합니다. false로 설정하면 시스템 수준의 rg 명령이 대신 사용됩니다. 이 설정은 tools.useRipgrep이 true일 때만 효과적입니다. | true | |
tools.truncateToolOutputThreshold | number | 도구 출력이 이 문자 수보다 크면 잘라냅니다. Shell, Grep, Glob, ReadFile 및 ReadManyFiles 도구에 적용됩니다. | 25000 | 재시작 필요: 예 |
tools.truncateToolOutputLines | number | 도구 출력 잘라내기 시 유지되는 최대 줄 수 또는 항목 수. Shell, Grep, Glob, ReadFile 및 ReadManyFiles 도구에 적용됩니다. | 1000 | 재시작 필요: 예 |
tools.computerUse.enabled | boolean | 내장 Computer Use 도구(cua-driver 네이티브 데스크톱 자동화)를 활성화합니다. true(기본값)이면 computer_use__* 도구가 지연 내장으로 등록됩니다. 첫 호출 시 고정된 서명된 cua-driver 바이너리가 ~/.qwen/computer-use/에 다운로드되고 macOS 접근성 / 화면 녹화 권한을 안내합니다. | true | 재시작 필요: 예 |
tools.computerUse.maxImageDimension | number | cua-driver 스크린샷에 적용되는 최장 변 픽셀 상한(set_config의 max_image_dimension을 통해). -1(기본값)은 cua-driver의 내장 기본값(1568)을 유지, 0은 크기 조정을 비활성화(전체 해상도), 양수 값은 최장 변을 제한합니다. 낮은 캡은 vision-token 비용을 줄이지만 세밀한 디테일이 희생됩니다. | -1 | 재시작 필요: 예. 환경 재정의: QWEN_COMPUTER_USE_MAX_IMAGE_DIMENSION(음수가 아닌 정수; 이 설정보다 우선) |
tools.computerUse.idleTimeoutMs | number | 마지막 computer_use__* 호출 후 cua-driver 프로세스를 유지하는 시간(밀리초). 기본값은 300000(5분)입니다. 0으로 설정하면 Qwen Code가 종료될 때까지 실행을 유지합니다. | 300000 | 재시작 필요: 예 |
tools.toolSearch.enabled | boolean | 프롬프트 크기를 줄이기 위해 ToolSearch를 통해 MCP 도구를 온디맨드로 로드합니다. 접두사 기반 KV 캐싱에 의존하는 모델(예: DeepSeek)에서 프롬프트 접두사를 안정적으로 유지하고 캐시 적중률을 극대화하려면 비활성화하세요. | true | 재시작 필요: 예 |
tools.toolSearch.threshold | number | 지연 도구 사전 로딩의 세션 시작 예산으로 사용되는 컨텍스트 창 비율(번들 내장 및 MCP 모두). 모든 지연 도구의 결합된 스키마가 이 예산 내에 맞으면 온디맨드 로드 대신 모두 사전에 선언됩니다 — 안정적인 선언 목록은 세션 전체에 걸쳐 접두사 KV 캐시를 유효하게 유지합니다. 0으로 설정하면 항상 지연 도구를 온디맨드로 로드합니다. | 10 | 재시작 필요: 예 |
tools.core / tools.exclude / tools.allowed에서 마이그레이션: 이 레거시 설정은 지원 중단되었으며 첫 로드 시 새 permissions 형식으로 자동 마이그레이션됩니다. permissions.allow / permissions.deny를 직접 구성하는 것을 권장합니다. /permissions을 사용하여 대화형으로 규칙을 관리하세요.
memory
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
memory.enableManagedAutoMemory | boolean | 대화에서 메모리를 자동으로 추출하는 백그라운드 추출을 활성화합니다. | true |
memory.enableManagedAutoDream | boolean | 수집된 메모리의 자동 통합(중복 제거 및 정리)을 활성화합니다. | true |
memory.enableAutoSkill | boolean | 도구 집약적 세션 후 재사용 가능한 프로젝트 skill에 대한 백그라운드 검토를 활성화합니다. | true |
memory.autoSkillConfirm | boolean | 자동 생성된 skill이 skill 라이브러리에 추가되기 전에 확인을 요청합니다. 꺼져 있으면 자동 skill이 즉시 저장됩니다. | true |
memory.enableTeamMemory | boolean | git 추적 .qwen/team-memory/ 디렉토리를 통해 협력자와 공유되는 프로젝트 메모리 계층을 활성화합니다. 여기에 대한 쓰기는 비밀 검색되며 git diff에서 검토할 수 있습니다. | false |
memory.enableTeamMemorySync | boolean | 팀 메모리가 활성화되면 세션 시작 시 .qwen/team-memory/ 디렉토리를 자동으로 커밋, fast-forward-pull, push하여 협력자를 동기화 상태로 유지합니다. 구성된 git upstream이 필요합니다. | false |
memory.agentTimeoutMinutes | number | 백그라운드 메모리 에이전트(추출, dream, remember, skill 검토)의 최대 실행 시간(분). 설정하지 않으면 각 에이전트의 내장 기본값(2–5분)을 사용합니다. 0은 시간 제한을 비활성화합니다. | 설정 안 됨 |
memory.agentMaxTurns | number | 백그라운드 메모리 에이전트(추출, dream, remember, skill 검토)의 최대 턴. 설정하지 않으면 각 에이전트의 내장 기본값(5–8)을 사용합니다. 0은 턴 제한을 비활성화합니다. | 설정 안 됨 |
자동 메모리의 작동 방식 및 /memory, /remember, /dream 명령어 사용법은 Memory를 참조하세요.
agents
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
agents.builtin.exploreModel | string | 내장 Explore 서브에이전트의 모델 선택기. 메인 세션 모델은 inherit, fastModel은 fast, 모델 ID 또는 authType:model-id 선택기를 사용합니다. 사용자 정의 동일 이름 Explore 에이전트는 자체 모델 구성을 유지합니다. 재시작이 필요합니다. | inherit |
agents.modelGrades | object | Agent 도구에 노출되는 의미적 등급 이름을 모델 선택기에 매핑합니다. 재시작이 필요합니다. | undefined |
agents.allowedGrades | array of strings | Agent 도구가 사용할 수 있는 구성된 모델 등급의 선택적 허용 목록. 재시작이 필요합니다. | undefined |
permissions
권한 시스템은 어떤 도구를 실행할 수 있는지, 어떤 도구가 확인이 필요한지, 어떤 도구가 차단되는지에 대한 세밀한 제어를 제공합니다.
결정 우선순위(높은 순): deny > ask > allow > (기본값/대화형 모드)
첫 번째로 일치하는 규칙이 승리합니다. 규칙은 "ToolName" 또는 "ToolName(specifier)" 형식을 사용합니다.
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
permissions.allow | array of strings | 자동 승인된 도구 호출에 대한 규칙(확인 불필요). 모든 범위(사용자 + 프로젝트 + 시스템)에서 병합됩니다. | undefined |
permissions.ask | array of strings | 항상 사용자 확인이 필요한 도구 호출에 대한 규칙. allow보다 우선합니다. | undefined |
permissions.deny | array of strings | 차단된 도구 호출에 대한 규칙. 최고 우선순위 — allow와 ask 모두를 재정의합니다. | undefined |
도구 이름 별칭(규칙에서 모두 작동):
| 별칭 | 표준 도구 | 비고 |
|---|---|---|
Bash, Shell | run_shell_command | |
Read, ReadFile | read_file | 메타 범주 — 아래 참조 |
Edit, EditFile | edit | 메타 범주 — 아래 참조 |
Write, WriteFile | write_file | |
NotebookEdit | notebook_edit | |
NotebookEditTool | notebook_edit | |
Grep, SearchFiles | grep_search | |
Glob, FindFiles | glob | |
ListFiles | list_directory | |
WebFetch | web_fetch | |
Agent | task | |
Skill | skill |
메타 범주:
일부 규칙 이름은 자동으로 여러 도구를 포함합니다:
| 규칙 이름 | 포함되는 도구 |
|---|---|
Read | read_file, grep_search, glob, list_directory |
Edit | edit, write_file, notebook_edit |
[!important]
Read(/path/**)는 네 가지 읽기 도구(파일 읽기, grep, glob, 디렉토리 목록)를 모두 포함합니다. 파일 읽기만 제한하려면ReadFile(/path/**)또는read_file(/path/**)를 사용하세요.
규칙 구문 예시:
| 규칙 | 의미 |
|---|---|
"Bash" | 모든 셸 명령 |
"Bash(git *)" | git으로 시작하는 셸 명령(단어 경계: gitk는 아님) |
"Bash(git push *)" | git push origin main 같은 셸 명령 |
"Bash(npm run *)" | 모든 npm run 스크립트 |
"Read" | 모든 파일 읽기 작업(읽기, grep, glob, 목록) |
"Read(./secrets/**)" | ./secrets/ 아래의 모든 파일을 재귀적으로 읽기 |
"Edit(/src/**/*.ts)" | 프로젝트 루트 /src/ 아래의 TypeScript 파일 편집 |
"WebFetch(api.example.com)" | api.example.com과 모든 하위 도메인에서 가져오기 |
"mcp__puppeteer" | puppeteer MCP 서버의 모든 도구 |
경로 패턴 접두사:
| 접두사 | 의미 | 예시 |
|---|---|---|
// | 파일 시스템 루트의 절대 경로 | //etc/passwd |
~/ | 홈 디렉토리 기준 상대 경로 | ~/Documents/*.pdf |
/ | 프로젝트 루트 기준 상대 경로 | /src/**/*.ts |
./ | 현재 작업 디렉토리 기준 상대 경로 | ./secrets/** |
| (없음) | ./와 동일 | secrets/** |
셸 명령 우회 방지:
Read, Edit, WebFetch의 권한 규칙은 에이전트가 동등한 셸 명령을 실행할 때도 적용됩니다.
레거시 설정에서 마이그레이션:
| 레거시 설정 | 해당 permissions 규칙 | 비고 |
|---|---|---|
tools.allowed | permissions.allow | 첫 로드 시 자동 마이그레이션 |
tools.exclude | permissions.deny | 첫 로드 시 자동 마이그레이션 |
tools.core | permissions.allow(허용 목록) | 자동 마이그레이션; 목록에 없는 도구는 레지스트리 수준에서 비활성화 |
설정 예시:
{
"permissions": {
"allow": ["Bash(git *)", "Bash(npm run *)", "Read(//Users/alice/code/**)"],
"ask": ["Bash(git push *)", "Edit"],
"deny": ["Bash(rm -rf *)", "Read(.env)", "WebFetch(malicious.com)"]
}
}[!tip] 인터랙티브 CLI에서
/permissions를 사용하면settings.json을 직접 편집하지 않고도 규칙을 보고, 추가하고, 제거할 수 있습니다.
slashCommands
CLI에서 사용 가능한 슬래시 명령어를 제어합니다. 멀티테넌트 또는 기업 배포에서 명령어 표면을 제한하는 데 유용합니다.
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
slashCommands.disabled | array of strings | 숨기고 실행을 거부할 슬래시 명령어 이름. 최종 명령어 이름에 대해 대소문자 구분 없이 매칭됩니다(확장 명령어의 경우 명확화된 형식, 예: myext.deploy). 범위를 가로질러 합집합으로 병합되므로 워크스페이스 설정은 사용자 또는 시스템 설정에서 정의된 항목을 추가할 수 있지만 제거할 수는 없습니다. | undefined |
동일한 거부 목록은 --disabled-slash-commands CLI 플래그(쉼표로 구분 또는 반복)와 QWEN_DISABLED_SLASH_COMMANDS 환경 변수를 통해서도 제공될 수 있으며, 세 출처의 값이 모두 합집합됩니다.
예시 — 샌드박스 배포를 위한 내장 명령어 잠금:
{
"slashCommands": {
"disabled": ["auth", "mcp", "extensions", "ide", "quit"]
}
}시스템 수준 settings.json(/etc/qwen-code/settings.json 또는 QWEN_CODE_SYSTEM_SETTINGS_PATH)에 이러한 값이 있으면 사용자는 자체 범위에서 거부 목록을 축소할 수 없으며 비활성화된 명령어는 자동 완성에서 나타나지 않고 입력 시 실행되지 않습니다.
[!note] 이 설정은 슬래시 명령어(예:
/auth,/mcp)만 게이트합니다. 도구 권한에는 영향을 주지 않습니다 — 해당 내용은permissions.deny를 참조하세요.Ctrl+C또는Esc같은 키보드 단축키도 가로채지 않습니다.
skills
모델에 노출되는 Skill을 제어합니다.
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
skills.disabledLevels | array of strings | 완전히 건너뛸 skill 발견 레벨. 지원되는 값은 project, user, extension, bundled입니다. 설정 범위를 가로질러 합집합으로 병합됩니다. ["bundled"]를 사용하면 호스트 제공 skill을 유지하면서 모든 번들 skill을 숨깁니다. 참고: skills.directories 항목은 user 레벨에서 발견되므로 ["user"]는 이것들도 숨깁니다. | undefined |
skills.disabled | array of strings | 하드 비활성화된 skill 이름. 대소문자 구분 없이 매칭되며 설정 범위를 가로질러 합집합으로 병합되므로 프로젝트 설정이 사용자 또는 시스템 항목을 재정의할 수 없습니다. 숨겨진 skill은 <available_skills> 또는 /<name> 슬래시 명령어로 나타나지 않습니다. | undefined |
skills.defaultDisabled | array of strings | 기본적으로 비활성화되지만 skills.enabled를 통해 옵트인할 수 있는 skill 이름. 대소문자 구분 없이 매칭되며 설정 범위를 가로질러 합집합으로 병합됩니다. | undefined |
skills.enabled | array of strings | 일치하는 skills.defaultDisabled 항목을 재정의하는 명시적 옵트인. 대소문자 구분 없이 매칭되며 설정 범위를 가로질러 합집합으로 병합됩니다. 이 설정은 skills.disabled를 재정의하거나 skills.disabledLevels에서 제외된 레벨의 skill을 다시 활성화할 수 없습니다. | undefined |
우선순위는 skills.disabled > skills.enabled > skills.defaultDisabled입니다. 예를 들어 사용자는 skill을 defaultDisabled에 넣을 수 있고 프로젝트는 동일한 이름을 enabled에 추가할 수 있습니다. 어느 범위의 하드 disabled 항목이 여전히 승리합니다.
mcp
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
mcp.serverCommand | string | MCP 서버를 시작하는 명령. | undefined |
mcp.allowed | array of strings | 허용할 MCP 서버의 허용 목록. 모델에 사용 가능하게 만들 MCP 서버 이름 목록을 지정할 수 있습니다. 연결할 MCP 서버 집합을 제한하는 데 사용할 수 있습니다. 글롭 패턴을 지원합니다(*는 임의의 시퀀스, ?는 단일 문자와 매칭 — 예: "*puppeteer*") 글롭 문자가 없는 항목은 정확히 매칭됩니다. --allowed-mcp-server-names가 설정되면 무시됩니다. | undefined |
mcp.excluded | array of strings | 제외할 MCP 서버의 거부 목록. mcp.excluded와 mcp.allowed 모두에 나열된 서버는 제외됩니다. mcp.allowed와 동일한 방식으로 글롭 패턴(*, ?)을 지원합니다. --allowed-mcp-server-names가 설정되면 무시됩니다. | undefined |
mcp.toolIdleTimeoutMs | number | MCP 도구 호출의 유휴 타임아웃(밀리초). MCP 서버가 이 시간 내에 응답이나 진행 업데이트를 생성하지 않으면 호출이 중단됩니다. 10000에서 3600000 사이여야 합니다. QWEN_CODE_MCP_TOOL_IDLE_TIMEOUT_MS 환경 변수로 재정의할 수 있습니다. | 300000 |
MCP 서버 보안 참고: 이 설정은 수정 가능한 MCP 서버 이름에 대한 단순 문자열 매칭을 사용합니다. 관리자가 사용자가 이를 우회하는 것을 방지하려면 시스템 설정 수준에서 mcpServers를 구성하여 사용자가 자체 MCP 서버를 구성할 수 없도록 하는 것을 고려하세요. 이것은 완벽한 보안 메커니즘으로 사용되어서는 안 됩니다.
lsp
[!warning] 실험적 기능: LSP 지원은 현재 실험적이며 기본적으로 비활성화되어 있습니다.
--experimental-lsp커맨드라인 플래그를 사용하여 활성화하세요.
Language Server Protocol(LSP)은 go-to-definition, 참조 찾기, 진단과 같은 코드 인텔리전스 기능을 제공합니다.
LSP 서버 구성은 settings.json이 아닌 프로젝트 루트 디렉토리의 .lsp.json 파일을 통해 수행됩니다. 구성 세부 정보와 예시는 LSP 문서를 참조하세요.
security
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
security.folderTrust.enabled | boolean | 폴더 신뢰가 활성화되어 있는지 추적하는 설정. | false |
security.auth.selectedType | string | 현재 선택된 인증 유형. | undefined |
security.auth.enforcedType | string | 필수 인증 유형(기업에 유용). | undefined |
security.auth.useExternal | boolean | 외부 인증 흐름을 사용할지 여부. | undefined |
security.auth.apiKey | string | 지원 중단. OpenAI 호환 인증의 API 키. 대신 envKey가 있는 modelProviders로 마이그레이션하세요 — Model Providers 참조. | undefined |
security.auth.baseUrl | string | 지원 중단. OpenAI 호환 API의 Base URL. 대신 modelProviders로 마이그레이션하세요 — Model Providers 참조. | undefined |
security.allowedInsecureVoiceBaseUrls | array of strings | HTTP를 사용하거나 사설 네트워크 주소로 해석될 수 있는 음성 제공자 Base URL. 각 항목은 명시적 http:// 또는 https:// 스킴과 전체 경로(예: /v1)를 포함해야 합니다. URL 직렬화와 후행 슬래시만 정규화됩니다. 와일드카드는 지원되지 않으며, 메타데이터, 링크 로컬, 로컬 사용 NAT64, 6to4 및 Teredo 주소는 나열되어도 차단되고, 루프백으로 해석되는 호스트이름도 마찬가지입니다. IPv4 매핑, IPv4 호환 및 잘 알려진 NAT64(64:ff9b::/96) 리터럴은 임베드된 IPv4 주소로 분류됩니다. User, System 및 SystemDefaults 범위만 적용됩니다. 관리된 사설 네트워크의 신뢰할 수 있는 엔드포인트에만 사용하세요. 클리어텍스트 HTTP는 Authorization 헤더로 전송되는 제공자 API 키도 노출합니다. 허용 목록에 있는 호스트이름은 DNS만큼만 신뢰할 수 있습니다. 게이트웨이 주소가 안정적일 때 IP 리터럴 항목을 선호하세요. 정확한 일치는 배치 요청 URL을 포함합니다. 스트리밍 전송은 여기서 파생된 WebSocket URL(동일한 스킴, 호스트, 포트, /api-ws/v1/... 경로)에 연결되며 허용 목록 경로 자체에는 연결되지 않습니다. | [] |
serve
qwen serve의 영구 서브 세션 동시성 설정. 변경 사항은 데몬을 재시작해야 합니다. 양수가 아니거나 정수가 아닌 동시성 제한은 경고를 생성하고 내장 기본값으로 폴백합니다.
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
serve.maxConcurrentSubSessionsPerCaller | integer | 하나의 호출자 세션이 create_sub_session를 통해 생성할 수 있는 진행 중인 서브 세션의 최대 수. 최소 1이어야 합니다. | 16 |
serve.maxConcurrentSubSessionsTotal | integer | 하나의 워크스페이스에서 모든 호출자를 통틀어 진행 중인 서브 세션의 최대 수. 1에서 1024 사이의 정수여야 합니다. 1024를 초과하는 값은 경고 없이 1024로 제한됩니다. | 24 |
advanced
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
advanced.autoConfigureMemory | boolean | Node.js 메모리 제한을 자동으로 구성합니다. | false |
advanced.dnsResolutionOrder | string | DNS 확인 순서. | undefined |
advanced.excludedEnvVars | array of strings | 프로젝트 컨텍스트에서 제외할 환경 변수. 프로젝트 .env 파일에서 로드되지 않도록 제외할 환경 변수를 지정합니다. 이렇게 하면 프로젝트별 환경 변수(예: DEBUG=true)가 CLI 동작에 간섭하는 것을 방지합니다. .qwen/.env 파일의 변수는 절대 제외되지 않습니다. | ["DEBUG","DEBUG_MODE"] |
advanced.bugCommand | object | 버그 보고 명령어의 구성. /bug 명령어의 기본 URL을 재정의합니다. 속성: urlTemplate(string): {title} 및 {info} 자리표시를 포함할 수 있는 URL. 예: "bugCommand": { "urlTemplate": "https://bug.example.com/new?title={title}&info={info}" } | undefined |
plansDirectory | string | 승인된 Plan Mode 파일의 사용자 정의 디렉토리. 상대 경로는 프로젝트 루트에서 해석되며 해석된 경로는 프로젝트 루트 내에 있어야 합니다. 설정하지 않으면 plan 파일은 ~/.qwen/plans에 저장됩니다. 재시작 필요. 디렉토리가 프로젝트 루트 내부이면 .gitignore에 추가하여 plan 파일이 커밋되는 것을 방지하세요. | undefined |
experimental
실험적 기능. 이 토글은 개발 중인 기능을 게이트하며 향후 릴리스에서 변경되거나 제거될 수 있습니다.
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
experimental.cron | boolean | 세션 내 cron/loop 도구(cron_create, cron_list, cron_delete)를 활성화하여 모델이 반복 프롬프트를 생성할 수 있게 합니다. QWEN_CODE_DISABLE_CRON=1 환경 변수로 비활성화할 수 있습니다. 재시작이 필요합니다. | true |
experimental.todoStopGuard | boolean | 현재 작업 체인이 미완료 최상위 Todo 목록을 성공적으로 작성했을 때 자연 모델 정지 후 데몬 및 ACP 세션이 계속되는 것을 허용합니다. 새 사용자 입력 없이 최대 2회의 연속 주요 모델 호출을 추가합니다. 중간 턴 사용자 입력은 새 2단계 시도를 시작합니다. 프로세스 재시작 후 복원되지 않으며 safe, bare 및 Approval plan 모드에서는 강제로 꺼집니다. 재시작이 필요합니다. | false |
experimental.sessionWriterLease | boolean | 영구 ACP 및 데몬 세션에 대한 크로스 프로세스 쓰기 펜싱을 활성화합니다. 값은 ACP 또는 데몬 프로세스가 시작될 때 고정됩니다. 모든 동시 ACP 작성자가 설정을 활성화해야 합니다. 혼합 버전 또는 구성은 여전히 안전하지 않습니다. 인터랙티브 및 헤드리스 레코더는 영향을 받지 않습니다. 프로세스 재시작이 필요합니다. | false |
experimental.cronRecurringMaxAgeDays | number | 반복 cron/loop 작업이 자동 만료되기 전까지 생존하는 일수(마지막으로 한 번 실행된 후 삭제됨). 0으로 설정하면 만료를 비활성화하여 작업이 삭제될 때까지 실행됩니다 — 장기 실행 데몬 배포에 유용합니다. QWEN_CODE_CRON_MAX_AGE_DAYS 환경 변수로 재정의할 수 있습니다. 재시작이 필요합니다. | 7 |
experimental.agentTeam | boolean | 멀티 에이전트 조정을 위한 에이전트 팀 협업 도구(team_create, task_create, task_update, send_message 등)를 활성화합니다. QWEN_CODE_ENABLE_AGENT_TEAM=1로도 활성화할 수 있습니다. 재시작이 필요합니다. | false |
experimental.artifact | boolean | 아티팩트 도구를 활성화합니다. 기본적으로 활성화됩니다. 인터랙티브 비 SDK 세션에서 모델은 자체 포함 HTML 페이지를 인터랙티브 Artifact로 게시하고 브라우저에서 열 수 있습니다. 비 SDK 데몬 세션은 메타데이터 전용 record_artifact를 사용할 수 있습니다. 둘 다 비활성화하려면 false로 설정하거나 QWEN_CODE_DISABLE_ARTIFACT=1을 사용하세요. 재시작이 필요합니다. | true |
experimental.emitToolUseSummaries | boolean | 각 도구 호출 배치 완료 후 짧은 LLM 기반 레이블을 생성합니다. Tool-Use Summaries를 참조하세요. 빠른 모델이 구성되어 있어야 합니다(fastModel); 그렇지 않으면 조용히 건너뜁니다. QWEN_CODE_EMIT_TOOL_USE_SUMMARIES=0 또는 =1로 세션별로 재정의할 수 있습니다. | true |
mcpServers
사용자 정의 도구를 발견하고 사용하기 위해 하나 이상의 모델 컨텍스트 프로토콜(MCP) 서버에 대한 연결을 구성합니다. Qwen Code는 구성된 각 MCP 서버에 연결하여 사용 가능한 도구를 발견하려고 시도합니다. 여러 MCP 서버가 동일한 이름의 도구를 노출하면 도구 이름에 구성에서 정의한 서버 별칭이 접두사로 추가됩니다(예: serverAlias__actualToolName). 시스템이 호환성을 위해 MCP 도구 정의에서 특정 스키마 속성을 제거할 수 있습니다. command, url, httpUrl 중 최소 하나를 제공해야 합니다. 여러 개가 지정되면 우선순위 순서는 httpUrl, 그다음 url, 그다음 command입니다.
| 속성 | 유형 | 설명 | 선택 사항 |
|---|---|---|---|
mcpServers.<SERVER_NAME>.command | string | 표준 I/O를 통해 MCP 서버를 시작하기 위해 실행할 명령. | 예 |
mcpServers.<SERVER_NAME>.args | array of strings | 명령에 전달할 인자. | 예 |
mcpServers.<SERVER_NAME>.env | object | 서버 프로세스에 설정할 환경 변수. | 예 |
mcpServers.<SERVER_NAME>.cwd | string | 서버를 시작할 작업 디렉토리. | 예 |
mcpServers.<SERVER_NAME>.url | string | Server-Sent Events(SSE)를 통신에 사용하는 MCP 서버의 URL. | 예 |
mcpServers.<SERVER_NAME>.httpUrl | string | 스트리밍 가능한 HTTP를 통신에 사용하는 MCP 서버의 URL. | 예 |
mcpServers.<SERVER_NAME>.headers | object | url 또는 httpUrl로의 요청과 함께 전송할 HTTP 헤더 맵. | 예 |
mcpServers.<SERVER_NAME>.timeout | number | 이 MCP 서버로의 요청에 대한 타임아웃(밀리초). | 예 |
mcpServers.<SERVER_NAME>.trust | boolean | 신뢰할 수 있는 워크스페이스에서 이 서버를 신뢰하고 도구 호출 확인을 우회합니다. | 예 |
mcpServers.<SERVER_NAME>.description | string | 표시 목적으로 사용될 수 있는 서버의 간단한 설명. | 예 |
mcpServers.<SERVER_NAME>.includeTools | array of strings | 이 MCP 서버에서 포함할 도구 이름 목록. 지정되면 여기에 나열된 도구만 이 서버에서 사용 가능합니다(허용 목록 동작). 지정하지 않으면 서버의 모든 도구가 기본적으로 활성화됩니다. | 예 |
mcpServers.<SERVER_NAME>.excludeTools | array of strings | 이 MCP 서버에서 제외할 도구 이름 목록. 여기에 나열된 도구는 서버에서 노출되더라도 모델이 사용할 수 없습니다. 참고: excludeTools는 includeTools보다 우선합니다 — 도구가 두 목록 모두에 있으면 제외됩니다. | 예 |
telemetry
Qwen Code의 로깅 및 메트릭 수집을 구성합니다. 자세한 내용은 telemetry를 참조하세요.
| 설정 | 유형 | 설명 | 기본값 |
|---|---|---|---|
telemetry.enabled | boolean | telemetry가 활성화되어 있는지 여부. | |
telemetry.target | string | telemetry 대상의 정보 레이블(local 또는 gcp). 익스포터 라우팅을 제어하지 않습니다. 데이터가 전송되는 위치를 구성하려면 telemetry.otlpEndpoint 또는 telemetry.outfile을 설정하세요. | |
telemetry.otlpEndpoint | string | OTLP 익스포터의 엔드포인트. | |
telemetry.otlpProtocol | string | OTLP 익스포터의 프로토콜(grpc 또는 http). | |
telemetry.logPrompts | boolean | 로그에 사용자 프롬프트 내용을 포함할지 여부. | |
telemetry.userId | string | ARMS 확장 gen_ai.user.id로 GenAI span에 기록되는 안정적 최종 사용자 식별자. 가명 값을 선호하세요. 공유 멀티 사용자 데몬 또는 채널 인스턴스에 대해 프로세스 전체 값을 설정하지 마세요. | |
telemetry.includeSensitiveSpanAttributes | boolean | 활성화되면 사용자 프롬프트, 시스템 프롬프트, 도구 입력/출력 및 모델 응답을 네이티브 OTel span 속성에 첨부합니다(log-to-span bridge span에도 추가). ⚠️ 민감한 데이터 — 파일 내용, 셸 명령, 대화 기록 — 를 OTLP 백엔드로 스트리밍합니다. | false |
telemetry.sensitiveSpanAttributeMaxLength | number | 각 민감한 네이티브 OTel span 속성 내용 페이로드의 최대 JavaScript 문자열 길이. 1에서 104857600(100 MiB) 사이여야 합니다. 컬렉터나 백엔드가 큰 속성을 거부하면 더 낮게 설정하세요. | 1048576 |
telemetry.outfile | string | telemetry를 파일로 쓸 경로. 설정되면 OTLP 내보내기를 재정의합니다. |
settings.json 예시
v0.3.0부터의 중첩 구조를 가진 settings.json 파일 예시:
{
"proxy": "http://localhost:7890",
"plansDirectory": "./.qwen/plans",
"general": {
"vimMode": true,
"preferredEditor": "code"
},
"ui": {
"theme": "GitHub",
"hideTips": false,
"customWittyPhrases": [
"You forget a thousand things every day. Make sure this is one of 'em",
"Connecting to AGI"
]
},
"tools": {
"approvalMode": "yolo",
"sandbox": "docker",
"sandboxImage": "ghcr.io/qwenlm/qwen-code:0.14.1",
"discoveryCommand": "bin/get_tools",
"callCommand": "bin/call_tool",
"exclude": ["write_file"]
},
"mcpServers": {
"mainServer": {
"command": "bin/mcp_server.py"
},
"anotherServer": {
"command": "node",
"args": ["mcp_server.js", "--verbose"]
}
},
"telemetry": {
"enabled": true,
"target": "local",
"otlpEndpoint": "http://localhost:4317",
"logPrompts": true,
"userId": "user-079458",
"includeSensitiveSpanAttributes": false,
"sensitiveSpanAttributeMaxLength": 1048576
},
"privacy": {
"usageStatisticsEnabled": true
},
"model": {
"name": "qwen3-coder-plus",
"maxSessionTurns": 10,
"enableOpenAILogging": false,
"openAILoggingDir": "~/qwen-logs",
},
"context": {
"fileName": ["CONTEXT.md", "QWEN.md"],
"includeDirectories": ["path/to/dir1", "~/path/to/dir2", "../path/to/dir3"],
"loadFromIncludeDirectories": true,
"fileFiltering": {
"respectGitIgnore": false
}
},
"advanced": {
"excludedEnvVars": ["DEBUG", "DEBUG_MODE", "NODE_ENV"]
}
}셸 기록
CLI는 실행한 셸 명령의 기록을 유지합니다. 다른 프로젝트 간의 충돌을 피하기 위해 이 기록은 사용자 홈 폴더 내의 프로젝트별 디렉토리에 저장됩니다.
- 위치:
~/.qwen/tmp/<project_hash>/shell_history<project_hash>는 프로젝트의 루트 경로에서 생성된 고유 식별자입니다.- 기록은
shell_history라는 파일에 저장됩니다.
환경 변수 및 .env 파일
환경 변수는 애플리케이션을 구성하는 일반적인 방법이며, 특히 민감한 정보(토큰 등)나 환경 간에 변경될 수 있는 설정에 사용됩니다.
Qwen Code는 .env 파일에서 환경 변수를 자동으로 로드할 수 있습니다.
인증 관련 변수(OPENAI_* 등)와 권장 .qwen/.env 접근 방식은 **Authentication**을 참조하세요.
환경 변수 제외: 일부 환경 변수(DEBUG, DEBUG_MODE 등)는 CLI 동작에 간섭하는 것을 방지하기 위해 프로젝트 .env 파일에서 기본적으로 자동으로 제외됩니다. .qwen/.env 파일의 변수는 절대 제외되지 않습니다. settings.json의 advanced.excludedEnvVars 설정을 사용하여 이 동작을 사용자 정의할 수 있습니다.
환경 변수 표
| 변수 | 설명 | 비고 |
|---|---|---|
QWEN_HOME | 전역 구성 디렉토리를 사용자 정의합니다(기본값: ~/.qwen). 절대 또는 상대 경로를 허용합니다(상대 경로는 현재 작업 디렉토리에서 해석됩니다). 선행 ~는 사용자 홈 디렉토리로 확장됩니다. | 자격 증명, 설정, 메모리, skill 및 기타 전역 상태를 저장합니다. 설정되면 프로젝트 수준의 .qwen/ 디렉토리는 영향을 받지 않습니다. 빈 문자열은 설정되지 않은 것으로 처리됩니다. |
QWEN_RUNTIME_DIR | 런타임 출력 디렉토리(대화, 로그, todos)를 재정의합니다. 설정하지 않으면 QWEN_HOME 디렉토리가 기본값입니다. | 일시적 런타임 데이터를 영구 구성과 분리하는 데 사용하세요. QWEN_HOME이 공유/느린 파일 시스템에 있을 때 유용합니다. |
QWEN_USAGE_STATISTICS_ENABLED | true 또는 1로 설정하면 사용 통계를 활성화합니다. 다른 값은 비활성화로 처리됩니다. | privacy.usageStatisticsEnabled 설정을 재정의합니다. 둘 다 구성되지 않으면 기본적으로 활성화됩니다. |
QWEN_TELEMETRY_ENABLED | true 또는 1로 설정하면 telemetry를 활성화합니다. 다른 값은 비활성화로 처리됩니다. | telemetry.enabled 설정을 재정의합니다. |
QWEN_TELEMETRY_TARGET | telemetry 대상의 정보 레이블을 설정합니다(local 또는 gcp). 라우팅을 제어하지 않습니다. 데이터가 전송되는 위치를 구성하려면 QWEN_TELEMETRY_OTLP_ENDPOINT 또는 QWEN_TELEMETRY_OUTFILE을 사용하세요. | telemetry.target 설정을 재정의합니다. |
QWEN_TELEMETRY_OTLP_ENDPOINT | telemetry의 OTLP 엔드포인트를 설정합니다. | telemetry.otlpEndpoint 설정을 재정의합니다. |
QWEN_TELEMETRY_OTLP_PROTOCOL | OTLP 프로토콜을 설정합니다(grpc 또는 http). | telemetry.otlpProtocol 설정을 재정의합니다. |
QWEN_TELEMETRY_LOG_PROMPTS | true 또는 1로 설정하면 사용자 프롬프트 로깅을 활성화하거나 비활성화합니다. 다른 값은 비활성화로 처리됩니다. | telemetry.logPrompts 설정을 재정의합니다. |
QWEN_TELEMETRY_USER_ID | 상호작용, LLM, Tool 및 Agent span에서 gen_ai.user.id로 안정적 최종 사용자 식별자를 설정합니다. 가명 값을 선호하세요. | 트림 후 telemetry.userId를 재정의합니다. 빈 값은 설정으로 폴백합니다. 이것은 프로세스 전체이며 공유 멀티 사용자 프로세스에서 요청별 정체성으로 사용되어서는 안 됩니다. |
QWEN_TELEMETRY_INCLUDE_SENSITIVE_SPAN_ATTRIBUTES | true 또는 1로 설정하면 사용자 프롬프트, 시스템 프롬프트, 도구 I/O 및 모델 응답을 네이티브 OTel span 속성에 첨부합니다(그리고 log-to-span bridge span의 prompt / function_args / response_text를 유지합니다). 다른 값은 비활성화합니다. | telemetry.includeSensitiveSpanAttributes 설정을 재정의합니다. ⚠️ 민감한 데이터를 OTLP 백엔드로 스트리밍합니다. |
QWEN_TELEMETRY_SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTH | 각 민감한 네이티브 OTel span 속성 내용 페이로드의 최대 JavaScript 문자열 길이를 설정합니다. 104857600(100 MiB)을 초과하지 않는 양의 정수여야 합니다. | telemetry.sensitiveSpanAttributeMaxLength 설정을 재정의합니다. 기본값은 1048576(1 MiB)입니다. 컬렉터나 백엔드가 큰 span 속성을 거부하면 낮추세요. |
QWEN_TELEMETRY_OUTFILE | telemetry를 쓸 파일 경로를 설정합니다. 설정되면 OTLP 내보내기를 재정의합니다. | telemetry.outfile 설정을 재정의합니다. |
QWEN_SANDBOX | settings.json의 sandbox 설정에 대한 대안. | true, false, docker, podman 또는 사용자 정의 명령 문자열을 허용합니다. |
QWEN_SANDBOX_IMAGE | Docker/Podman의 샌드박스 이미지 선택을 재정의합니다. | tools.sandboxImage보다 우선합니다. |
SEATBELT_PROFILE | (macOS 전용) macOS에서 Seatbelt(sandbox-exec) 프로파일을 전환합니다. | permissive-open: (기본값) 프로젝트 폴더로의 쓰기를 제한(및 기타 일부 폴더, packages/cli/src/utils/sandbox-macos-permissive-open.sb 참조)하지만 다른 작업은 허용합니다. strict: 기본적으로 작업을 거부하는 엄격한 프로파일을 사용합니다. <profile_name>: 사용자 정의 프로파일을 사용합니다. 사용자 정의 프로파일을 정의하려면 프로젝트의 .qwen/ 디렉토리에 sandbox-macos-<profile_name>.sb라는 파일을 생성하세요(예: my-project/.qwen/sandbox-macos-custom.sb). |
DEBUG 또는 DEBUG_MODE | (종종 기본 라이브러리나 CLI 자체에서 사용) true 또는 1로 설정하면 자세한 디버그 로깅을 활성화하여 문제 해결에 도움이 될 수 있습니다. | 참고: 이 변수는 CLI 동작에 간섭하는 것을 방지하기 위해 프로젝트 .env 파일에서 기본적으로 자동으로 제외됩니다. Qwen Code에 대해 이 변수를 설정해야 하는 경우 .qwen/.env 파일을 사용하세요. |
NO_COLOR | 어떤 값으로든 설정하면 CLI의 모든 색상 출력을 비활성화합니다. | |
FORCE_HYPERLINK | Markdown 렌더러에서 OSC 8 클릭 가능한 링크 감지를 재정의합니다. 1(또는 0이 아닌 정수, 또는 빈 문자열)로 설정하면 강제 활성화, 0 또는 false / off 같은 비숫자 값으로 설정하면 강제 비활성화합니다. 위의 NO_COLOR / QWEN_DISABLE_HYPERLINKS 옵트아웃을 존중합니다. | tmux / GNU screen 내부에서 OSC 8을 옵트인하는 데 사용하세요(호스트 터미널의 기능이 멀티플렉서 뒤에 숨겨져 있어 자동 감지가 기본적으로 거부합니다). tmux 3.3+에서 set -g allow-passthrough on이 필요합니다. 자동 감지되지 않는 Hyper도 활성화합니다. |
QWEN_DISABLE_HYPERLINKS | 1로 설정하면 OSC 8 클릭 가능한 하이퍼링크를 지원으로 자동 감지되는 터미널에서도 하드 비활성화합니다. | 터미널이 지원을 광고하지만 긴 URL에서 깨지는 경우, 또는 출력을 이스케이프 시퀀스를 망가뜨리는 중재자를 통해 파이프할 때 유용합니다. 렌더러는 일반 label (url) 렌더링으로 폴백합니다. |
CLI_TITLE | 문자열로 설정하면 CLI의 제목을 사용자 정의합니다. | |
CODE_ASSIST_ENDPOINT | 코드 어시스트 서버의 엔드포인트를 지정합니다. | 개발 및 테스트에 유용합니다. |
QWEN_CODE_MAX_OUTPUT_TOKENS | 응답당 기본 최대 출력 토큰을 재정의합니다. 설정하지 않으면 Qwen Code는 모델의 선언된 출력 제한을 기본값으로 사용하며, 응답이 잘리면 자동으로 상향(64K 바닥)하고 턴 간에 복구합니다. 고정 제한을 사용하려면 특정 값(예: 16000)으로 설정하세요 — 요청별 슬롯 예약을 낮추고자 하는 용량 제한 셀프 호스팅 백엔드에 유용합니다. | 모델 제한 기본값보다 우선하지만 설정의 samplingParams.max_tokens에 의해 재정의됩니다. 설정되면 자동 상향을 비활성화합니다. 예: export QWEN_CODE_MAX_OUTPUT_TOKENS=16000 |
QWEN_CODE_UNATTENDED_RETRY | true 또는 1로 설정하면 영구 재시도 모드를 활성화합니다. 활성화되면 일시적 API 용량 오류(HTTP 429 Rate Limit 및 529 Overloaded)가 지수 백오프(재시도당 최대 5분)로 무기한 재시도되며 stderr에서 30초마다 하트비트 키프가 전송됩니다. | 장기 실행 작업이 일시적 API 장애를 견뎌야 하는 CI/CD 파이프라인과 백그라운드 자동화에 설계되었습니다. 명시적으로 설정해야 합니다 — CI=true만으로는 이 모드가 활성화되지 않습니다. 자세한 내용은 Headless Mode를 참조하세요. 예: export QWEN_CODE_UNATTENDED_RETRY=1 |
QWEN_CODE_PROFILE_STARTUP | 1로 설정하면 시작 성능 프로파일링을 활성화합니다. ~/.qwen/startup-perf/에 단계별 지속 시간이 포함된 JSON 타이밍 보고서를 씁니다. | 샌드박스 자식 프로세스 내부에서만 활성(또는 QWEN_CODE_PROFILE_STARTUP_OUTER=1과 함께). 설정하지 않으면 오버헤드 없음. 예: export QWEN_CODE_PROFILE_STARTUP=1 |
QWEN_CODE_PROFILE_STARTUP_OUTER | QWEN_CODE_PROFILE_STARTUP=1과 함께 1로 설정하면 외부(샌드박스 이전) 프로세스에서도 시작 프로파일을 수집합니다. 외부 프로세스 보고서는 샌드박스 자식의 보고서와 구별하기 위해 outer- 파일명 접두사를 가져옵니다. | 기본적으로 꺼짐 — 중복 보고서를 방지하기 위해 샌드박스 자식만 수집합니다. CLI가 샌드박스로 재시작되지 않는 로컬 개발에 유용합니다. |
QWEN_CODE_PROFILE_STARTUP_NO_HEAP | QWEN_CODE_PROFILE_STARTUP=1과 함께 1로 설정하면 체크포인트별 process.memoryUsage() 스냅샷을 건너뜁니다. 프로파일러 자체의 하이젠베르크 오버헤드를 측정할 때 유용합니다. | 기본적으로 꺼짐. 힙 스냅샷은 각각 ~50µs 비용(전체 시작의 1% 미만)이므로 대부분의 사용자는 그대로 두면 됩니다. |
QWEN_CODE_LEGACY_MCP_BLOCKING | 1로 설정하면 Config.initialize()가 반환되기 전에 모든 구성된 MCP 서버의 discover handshake를 동기적으로 대기하는 사전 프로그레시브 MCP 동작을 복원합니다. | 기본적으로 꺼짐. 현대의 qwen-code는 UI가 이미 대화형인 동안 MCP 서버가 백그라운드에서 온라인 상태가 되도록 합니다. 모델은 서버가 안정화된 후 ~16ms 이내에 각 배치의 새 도구를 봅니다. 이 플래그는 ≥ 1 릴리스 동안 롤백 이스케이프 해치로 유지됩니다. 예: export QWEN_CODE_LEGACY_MCP_BLOCKING=1 |
사용자 수준 .env 파일이 동일한 변수를 정의할 때 Qwen 전용 파일이 승리합니다: <QWEN_HOME>/.env(또는 QWEN_HOME이 설정되지 않으면 ~/.qwen/.env)가 ~/.env 전에 로드되며 기존 환경 값은 덮어쓰지 않습니다.
커맨드라인 인자
CLI를 실행할 때 직접 전달되는 인자는 해당 세션에 대해 다른 구성을 재정의할 수 있습니다.
샌드박스 이미지 선택의 우선순위는 다음과 같습니다:
--sandbox-image > QWEN_SANDBOX_IMAGE > tools.sandboxImage > 내장 기본 이미지.
커맨드라인 인자 표
| 인자 | 별칭 | 설명 | 가능한 값 | 비고 |
|---|---|---|---|---|
--model | -m | 이 세션에 사용할 Qwen 모델을 지정합니다. | 모델 이름 | 예: npm start -- --model qwen3-coder-plus |
--prompt | -p | 프롬프트를 직접 명령에 전달합니다. Qwen Code를 비대화형 모드로 호출합니다. | 프롬프트 텍스트 | 스크립팅 예시의 경우 --output-format json 플래그를 사용하여 구조화된 출력을 얻으세요. |
--prompt-interactive | -i | 제공된 프롬프트를 초기 입력으로 사용하여 대화형 세션을 시작합니다. | 프롬프트 텍스트 | 프롬프트는 대화형 세션 내에서 처리되며 그 전에 처리되지 않습니다. stdin에서 입력을 파이프할 때는 사용할 수 없습니다. 예: qwen -i "explain this code" |
--system-prompt | 이번 실행에 대해 내장 메인 세션 시스템 프롬프트를 재정의합니다. | 프롬프트 텍스트 | QWEN.md와 같은 로드된 컨텍스트 파일은 여전히 이 재정의 뒤에 추가됩니다. --append-system-prompt과 결합할 수 있습니다. | |
--append-system-prompt | 이번 실행에 대해 메인 세션 시스템 프롬프트에 추가 지시를 추가합니다. | 프롬프트 텍스트 | 내장 프롬프트와 로드된 컨텍스트 파일 후에 적용됩니다. --system-prompt과 결합할 수 있습니다. 예시는 Headless Mode를 참조하세요. | |
--output-format | -o | 비대화형 모드의 CLI 출력 형식을 지정합니다. | text, json, stream-json | text: (기본값) 표준 사람 읽기 가능 출력. json: 실행 종료 시 출력되는 기계 읽기 가능 JSON 출력. stream-json: 실행 중에 발생하는 스트리밍 JSON 메시지. 구조화된 출력 및 스크립팅에는 --output-format json 또는 --output-format stream-json 플래그를 사용하세요. 자세한 내용은 Headless Mode를 참조하세요. |
--input-format | 표준 입력에서 소비되는 형식을 지정합니다. | text, stream-json | text: (기본값) stdin 또는 커맨드라인 인자의 표준 텍스트 입력. stream-json: 양방향 통신을 위한 stdin을 통한 JSON 메시지 프로토콜. 요구 사항: --input-format stream-json은 --output-format stream-json도 설정해야 합니다. stream-json 사용 시 stdin은 프로토콜 메시지에 사용됩니다. 자세한 내용은 Headless Mode를 참조하세요. | |
--include-partial-messages | stream-json 출력 형식 사용 시 부분 어시스턴트 메시지를 포함합니다. 활성화되면 스트리밍 중에 스트림 이벤트(message_start, content_block_delta 등)를 발생시킵니다. | 기본값: false. 요구 사항: --output-format stream-json이 설정되어야 합니다. 스트림 이벤트에 대한 자세한 내용은 Headless Mode를 참조하세요. | ||
--sandbox | -s | 이 세션에 대해 샌드박스 모드를 활성화합니다. | ||
--sandbox-image | 샌드박스 이미지 URI를 설정합니다. | |||
--debug | -d | 이 세션에 대해 디버그 모드를 활성화하여 더 자세한 출력을 제공합니다. | ||
--help | -h | 커맨드라인 인자에 대한 도움말 정보를 표시합니다. | ||
--yolo | 모든 도구 호출을 자동 승인하는 YOLO 모드를 활성화합니다. | |||
--approval-mode | 도구 호출의 승인 모드를 설정합니다. | plan, default, auto-edit, auto, yolo | 지원되는 모드: plan: 분석만 — 파일 수정이나 명령 실행 안 함. default: 파일 편집이나 셸 명령에 대해 승인 필요(기본 동작). auto-edit: 편집 도구(edit, write_file, notebook_edit)를 자동 승인하고 다른 도구는 프롬프트. auto: LLM 분류기가 안전한 동작을 자동 승인하고 위험한 동작을 차단. yolo: 모든 도구 호출 자동 승인(--yolo와 동일). --yolo와 함께 사용할 수 없습니다. 새 통합 접근 방식은 --approval-mode=yolo를 사용하세요. 예: qwen --approval-mode auto-editApproval Mode에 대한 자세한 내용. | |
--allowed-tools | 확인 대화상자를 우회할 도구 이름의 쉼표로 구분된 목록. | 도구 이름 | 예: qwen --allowed-tools "Shell(git status)" | |
--disabled-slash-commands | 숨기거나 비활성화할 슬래시 명령어 이름(쉼표로 구분 또는 반복). slashCommands.disabled 설정 및 QWEN_DISABLED_SLASH_COMMANDS 환경 변수와 합집합됩니다. 최종 명령어 이름에 대해 대소문자 구분 없이 매칭됩니다. | 명령어 이름 | 예: qwen --disabled-slash-commands "auth,mcp,extensions" | |
--telemetry | telemetry를 활성화합니다. | |||
--telemetry-target | telemetry 대상을 설정합니다. | 자세한 내용은 telemetry를 참조하세요. | ||
--telemetry-otlp-endpoint | telemetry의 OTLP 엔드포인트를 설정합니다. | 자세한 내용은 telemetry를 참조하세요. | ||
--telemetry-otlp-protocol | telemetry의 OTLP 프로토콜을 설정합니다(grpc 또는 http). | 기본값은 grpc. 자세한 내용은 telemetry를 참조하세요. | ||
--telemetry-log-prompts | telemetry의 프롬프트 로깅을 활성화합니다. | 자세한 내용은 telemetry를 참조하세요. | ||
--acp | ACP 모드(Agent Client Protocol)를 활성화합니다. Zed 같은 IDE/편집기 통합에 유용합니다. | 안정적. 지원 중단된 --experimental-acp 플래그를 대체합니다. | ||
--experimental-lsp | 실험적 LSP (Language Server Protocol) 기능을 활성화하여 코드 인텔리전스(go-to-definition, 참조 찾기, 진단 등)를 제공합니다. | 실험적. 언어 서버가 설치되어 있어야 합니다. | ||
--extensions | -e | 세션에 사용할 확장 목록을 지정합니다. | 확장 이름 | 제공되지 않으면 사용 가능한 모든 확장이 사용됩니다. 모든 확장을 비활성화하려면 qwen -e none을 사용하세요. 예: qwen -e my-extension -e my-other-extension |
--list-extensions | -l | 사용 가능한 모든 확장을 나열하고 종료합니다. | ||
--proxy | CLI의 프록시를 설정합니다. | 프록시 URL | 예: --proxy http://localhost:7890. | |
--include-directories | 멀티 디렉토리 지원을 위해 워크스페이스에 추가 디렉토리를 포함합니다. | 디렉토리 경로 | 여러 번 또는 쉼표로 구분된 값으로 지정할 수 있습니다. 예: --include-directories /path/to/project1,/path/to/project2 또는 --include-directories /path/to/project1 --include-directories /path/to/project2 | |
--screen-reader | 스크린 리더 호환성을 위해 TUI를 조정하는 스크린 리더 모드를 활성화합니다. | |||
--version | CLI의 버전을 표시합니다. | |||
--openai-logging | 디버깅 및 분석을 위해 OpenAI API 호출 로깅을 활성화합니다. | 이 플래그는 settings.json의 enableOpenAILogging 설정을 재정의합니다. | ||
--openai-logging-dir | OpenAI API 로그의 사용자 정의 디렉토리 경로를 설정합니다. | 디렉토리 경로 | 이 플래그는 settings.json의 openAILoggingDir 설정을 재정의합니다. 절대 경로, 상대 경로 및 ~ 확장을 지원합니다. 예: qwen --openai-logging-dir "~/qwen-logs" --openai-logging |
컨텍스트 파일(계층적 지시 컨텍스트)
CLI의 _동작_에 대한 엄격한 구성은 아니지만, 컨텍스트 파일(기본적으로 QWEN.md이지만 context.fileName 설정으로 구성 가능)은 지시 컨텍스트(“메모리”라고도 함)를 구성하는 데 중요합니다. 이 강력한 기능을 사용하면 프로젝트별 지시, 코딩 스타일 가이드 또는 관련 배경 정보를 AI에게 제공하여 응답을 사용자의 요구에 더 맞고 정확하게 만들 수 있습니다. CLI는 로드된 컨텍스트 파일 수를 나타내는 footer 표시기와 같은 UI 요소를 통해 활성 컨텍스트에 대한 정보를 제공합니다.
- 목적: 이 Markdown 파일에는 Qwen 모델이 응답을 생성할 때 참조할 지시, 가이드라인 또는 컨텍스트가 포함됩니다.
- 위치: 컨텍스트 파일은 프로젝트 루트 또는 그 상위 디렉토리에 배치할 수 있습니다.
컨텍스트 파일 내용 예시(예: QWEN.md)
TypeScript 프로젝트 루트에 있는 컨텍스트 파일의 개념적 예시:
# Project: My Awesome TypeScript Library
## General Instructions:
- When generating new TypeScript code, please follow the existing coding style.
- Ensure all new functions and classes have JSDoc comments.
- Prefer functional programming paradigms where appropriate.
- All code should be compatible with TypeScript 5.0 and Node.js 22+.
## Coding Style:
- Use 2 spaces for indentation.
- Interface names should be prefixed with `I` (e.g., `IUserService`).
- Private class members should be prefixed with an underscore (`_`).
- Always use strict equality (`===` and `!==`).
## Specific Component: `src/api/client.ts`
- This file handles all outbound API requests.
- When adding new API call functions, ensure they include robust error handling and logging.
- Use the existing `fetchWithRetry` utility for all GET requests.
## Regarding Dependencies:
- Avoid introducing new external dependencies unless absolutely necessary.
- If a new dependency is required, please state the reason.이 예시는 일반 프로젝트 컨텍스트, 특정 코딩 규칙, 특정 파일이나 컴포넌트에 대한 노트를 제공하는 방법을 보여줍니다. 컨텍스트 파일이 관련성이 있고 정확할수록 AI가 더 잘 도울 수 있습니다. 프로젝트별 컨텍스트 파일을 사용하여 규칙과 컨텍스트를 설정하는 것을 강력히 권장합니다.
- 계층적 로딩 및 우선순위: CLI는 여러 위치에서 컨텍스트 파일(예:
QWEN.md)을 로드하여 계층적 메모리 시스템을 구현합니다. 이 목록의 아래(더 구체적)에 있는 파일의 내용은 위(더 일반적)에 있는 파일의 내용을 일반적으로 재정의하거나 보완합니다. 정확한 연결 순서와 최종 컨텍스트는/memory대화상자에서 확인할 수 있습니다. 일반적인 로딩 순서는 다음과 같습니다:- 전역 컨텍스트 파일:
- 위치:
~/.qwen/<configured-context-filename>(예: 사용자 홈 디렉토리의~/.qwen/QWEN.md). - 범위: 모든 프로젝트에 대한 기본 지시를 제공합니다.
- 위치:
- 프로젝트 루트 및 상위 컨텍스트 파일:
- 위치: CLI는 현재 작업 디렉토리에서 구성된 컨텍스트 파일을 검색한 다음 프로젝트 루트(
.git폴더로 식별) 또는 홈 디렉토리까지 각 상위 디렉토리에서 검색합니다. - 범위: 전체 프로젝트 또는 그 상당 부분과 관련된 컨텍스트를 제공합니다.
- 위치: CLI는 현재 작업 디렉토리에서 구성된 컨텍스트 파일을 검색한 다음 프로젝트 루트(
- 전역 컨텍스트 파일:
- 연결 및 UI 표시: 발견된 모든 컨텍스트 파일의 내용은 구분 기호와 함께 연결(출처와 경로를 표시)되어 시스템 프롬프트의 일부로 제공됩니다. CLI footer는 로드된 컨텍스트 파일 수를 표시하여 활성 지시 컨텍스트에 대한 빠른 시각적 단서를 제공합니다.
- 내용 가져오기:
@path/to/file.md구문을 사용하여 다른 Markdown 파일을 가져옴으로써 컨텍스트 파일을 모듈화할 수 있습니다. 자세한 내용은 Memory 문서를 참조하세요. - 메모리 관리 명령어:
/memory를 사용하여 메모리 관리 대화상자를 엽니다.- 대화상자에서 메모리를 새로 고쳐 모든 구성된 위치에서 컨텍스트 파일을 다시 검색하고 로드합니다.
/memory명령어에 대한 자세한 내용은 Commands 문서를 참조하세요.
구성 레이어와 컨텍스트 파일의 계층적 특성을 이해하고 활용함으로써 AI의 메모리를 효과적으로 관리하고 Qwen Code의 응답을 특정 요구와 프로젝트에 맞게 조정할 수 있습니다.
샌드박스
Qwen Code는 시스템을 보호하기 위해 샌드박스 환경에서 잠재적으로 안전하지 않은 작업(셸 명령 및 파일 수정 등)을 실행할 수 있습니다.
샌드박스는 기본적으로 비활성화되어 있지만 다음 방법으로 활성화할 수 있습니다:
--sandbox또는-s플래그 사용.QWEN_SANDBOX환경 변수 설정.- 설정에서
tools.sandbox설정.
⚠️
--yolo는 샌드박스를 자동으로 활성화하지 않습니다. YOLO 모드는 도구 호출만 자동 승인합니다. 샌드박싱은--sandbox,QWEN_SANDBOX또는tools.sandbox를 통해 별도로 옵트인해야 합니다.--yolo(또는--approval-mode=yolo)와 샌드박스 없이 헤드리스/비대화형 실행에서 모델은 현재 프로세스의 권한 수준에서 셸, 쓰기 및 편집 도구를 실행할 수 있습니다 — Qwen Code는 이 경우 stderr에 경고를 출력합니다. 트레이드오프를 검토한 후QWEN_CODE_SUPPRESS_YOLO_WARNING=1로 억제하세요.
기본적으로 미리 빌드된 qwen-code-sandbox Docker 이미지를 사용합니다.
프로젝트별 샌드박싱이 필요한 경우 프로젝트 루트 디렉토리의 .qwen/sandbox.Dockerfile에 사용자 정의 Dockerfile을 생성할 수 있습니다. 이 Dockerfile은 기본 샌드박스 이미지를 기반으로 할 수 있습니다:
FROM qwen-code-sandbox
# 여기에 사용자 정의 종속성이나 구성을 추가하세요
# 예:
# RUN apt-get update && apt-get install -y some-package
# COPY ./my-config /app/my-config.qwen/sandbox.Dockerfile이 존재하면 Qwen Code를 실행할 때 BUILD_SANDBOX 환경 변수를 사용하여 사용자 정의 샌드박스 이미지를 자동으로 빌드할 수 있습니다:
BUILD_SANDBOX=1 qwen -s사용 통계
Qwen Code를 개선하기 위해 익명화된 사용 통계를 수집합니다. 이 데이터는 CLI가 어떻게 사용되는지 이해하고, 일반적인 문제를 식별하고, 새 기능의 우선순위를 정하는 데 도움이 됩니다.
수집하는 항목:
- 도구 호출: 호출된 도구의 이름과 범주(네이티브 또는 MCP), 종료 상태(성공, 오류 또는 취소), 실행에 걸린 시간을 기록합니다. 도구에 전달된 인자나 반환된 데이터는 수집하지 않습니다.
- API 요청: 각 요청에 사용된 모델, 요청 지속 시간, 성공 여부를 기록합니다. 프롬프트나 응답의 내용은 수집하지 않습니다.
- 세션 정보: 활성화된 도구 및 승인 모드와 같은 CLI 구성에 대한 정보를 수집합니다.
수집하지 않는 항목:
- 개인 식별 정보(PII): 이름, 이메일 주소 또는 API 키와 같은 개인 정보를 수집하지 않습니다.
- 프롬프트 및 응답 내용: 프롬프트 내용이나 모델의 응답을 기록하지 않습니다.
- 파일 내용: CLI가 읽거나 쓴 파일의 내용을 기록하지 않습니다.
옵트아웃 방법:
settings.json 파일의 privacy 범주에서 usageStatisticsEnabled 속성을 false로 설정하여 언제든지 사용 통계 수집을 옵트아웃할 수 있습니다:
{
"privacy": {
"usageStatisticsEnabled": false
}
}또는 환경에서 QWEN_USAGE_STATISTICS_ENABLED=false(또는 0)를 설정하세요. 환경 변수가 설정보다 우선합니다. 두 값 중 하나를 변경한 후 Qwen Code를 재시작하세요.
사용 통계가 활성화되면 이벤트가 Alibaba Cloud RUM 수집 엔드포인트로 전송됩니다.