Qwen Code Konfiguration
Authentifizierung / API-Keys: Die Authentifizierung (API Key, Alibaba Cloud Coding Plan) und auth-bezogene Umgebungsvariablen (wie OPENAI_API_KEY) sind in Authentication dokumentiert.
Hinweis zum neuen Konfigurationsformat: Das Format der settings.json-Datei wurde auf eine neue, besser strukturierte Form umgestellt. Das alte Format wird automatisch migriert.
Qwen Code bietet verschiedene Möglichkeiten, sein Verhalten zu konfigurieren, darunter Umgebungsvariablen, Befehlszeilenargumente und Einstellungsdateien. Dieses Dokument beschreibt die verschiedenen Konfigurationsmethoden und verfügbaren Einstellungen.
Konfigurationsebenen
Die Konfiguration wird in der folgenden Prioritätsreihenfolge angewendet (niedrigere Zahlen werden durch höhere Zahlen überschrieben):
| Ebene | Konfigurationsquelle | Beschreibung |
|---|---|---|
| 1 | Standardwerte | Hartcodierte Standardwerte innerhalb der Anwendung |
| 2 | System-Standarddatei | Systemweite Standardeinstellungen, die durch andere Einstellungsdateien überschrieben werden können |
| 3 | Benutzer-Einstellungsdatei | Globale Einstellungen für den aktuellen Benutzer |
| 4 | Projekt-Einstellungsdatei | Projektspezifische Einstellungen |
| 5 | System-Einstellungsdatei | Systemweite Einstellungen, die alle anderen Einstellungsdateien überschreiben |
| 6 | Umgebungsvariablen | Systemweite oder sitzungsspezifische Variablen, die möglicherweise aus .env-Dateien geladen werden |
| 7 | Befehlszeilenargumente | Beim Starten der CLI übergebene Werte |
Einstellungsdateien
Qwen Code verwendet JSON-Einstellungsdateien für die persistente Konfiguration. Es gibt vier Speicherorte für diese Dateien:
| Dateityp | Speicherort | Gültigkeitsbereich |
|---|---|---|
| System-Standarddatei | Linux: /etc/qwen-code/system-defaults.jsonWindows: C:\ProgramData\qwen-code\system-defaults.jsonmacOS: /Library/Application Support/QwenCode/system-defaults.json Der Pfad kann mit der Umgebungsvariable QWEN_CODE_SYSTEM_DEFAULTS_PATH überschrieben werden. | Bietet eine Basisebene systemweiter Standardeinstellungen. Diese Einstellungen haben die niedrigste Priorität und sind dafür gedacht, durch Benutzer-, Projekt- oder System-Override-Einstellungen überschrieben zu werden. |
| Benutzer-Einstellungsdatei | ~/.qwen/settings.json (wobei ~ dein Home-Verzeichnis ist). | Gilt für alle Qwen Code-Sitzungen des aktuellen Benutzers. |
| Projekt-Einstellungsdatei | .qwen/settings.json im Stammverzeichnis deines Projekts. | Gilt nur, wenn Qwen Code aus diesem bestimmten Projekt heraus ausgeführt wird. Projekteinstellungen überschreiben Benutzereinstellungen. |
| System-Einstellungsdatei | Linux: /etc/qwen-code/settings.json Windows: C:\ProgramData\qwen-code\settings.json macOS: /Library/Application Support/QwenCode/settings.jsonDer Pfad kann mit der Umgebungsvariable QWEN_CODE_SYSTEM_SETTINGS_PATH überschrieben werden. | Gilt für alle Qwen Code-Sitzungen auf dem System, für alle Benutzer. Systemeinstellungen überschreiben Benutzer- und Projekteinstellungen. Kann für Systemadministratoren in Unternehmen nützlich sein, um die Qwen Code-Setups der Benutzer zu kontrollieren. |
Hinweis zu Umgebungsvariablen in Einstellungen: String-Werte in deinen settings.json-Dateien können über die Syntax $VAR_NAME oder ${VAR_NAME} auf Umgebungsvariablen verweisen. Diese Variablen werden beim Laden der Einstellungen automatisch aufgelöst. Wenn du beispielsweise eine Umgebungsvariable MY_API_TOKEN hast, kannst du sie in der settings.json wie folgt verwenden: "apiKey": "$MY_API_TOKEN".
Das .qwen-Verzeichnis in deinem Projekt
Zusätzlich zur Projekt-Einstellungsdatei kann das .qwen-Verzeichnis eines Projekts weitere projektspezifische Dateien enthalten, die sich auf den Betrieb von Qwen Code beziehen, wie zum Beispiel:
- Benutzerdefinierte Sandbox-Profile (z. B.
.qwen/sandbox-macos-custom.sb,.qwen/sandbox.Dockerfile). - Agent Skills unter
.qwen/skills/(jeder Skill ist ein Verzeichnis, das eineSKILL.mdenthält).
Konfigurationsmigration
Qwen Code migriert ältere Konfigurationseinstellungen automatisch in das neue Format. Alte Einstellungsdateien werden vor der Migration gesichert. Die folgenden Einstellungen wurden von einer negativen (disable*) zu einer positiven (enable*) Benennung umbenannt:
| Alte Einstellung | Neue Einstellung | Hinweise |
|---|---|---|
disableAutoUpdate + disableUpdateNag | general.enableAutoUpdate | In eine einzige Einstellung zusammengefasst |
disableLoadingPhrases | ui.accessibility.enableLoadingPhrases | |
disableFuzzySearch | context.fileFiltering.enableFuzzySearch | |
disableCacheControl | model.generationConfig.enableCacheControl |
Umkehrung von Boolean-Werten: Bei der Migration werden Boolean-Werte umgekehrt (z. B. wird aus disableAutoUpdate: true ein enableAutoUpdate: false).
Konsolidierungsrichtlinie für disableAutoUpdate und disableUpdateNag
Wenn beide Legacy-Einstellungen mit unterschiedlichen Werten vorhanden sind, folgt die Migration dieser Richtlinie: Wenn entweder disableAutoUpdate oder disableUpdateNag auf true gesetzt ist, wird enableAutoUpdate auf false gesetzt:
disableAutoUpdate | disableUpdateNag | Migriertes enableAutoUpdate |
|---|---|---|
false | false | true |
false | true | false |
true | false | false |
true | true | false |
Verfügbare Einstellungen in settings.json
Die Einstellungen sind in Kategorien organisiert. Die meisten Einstellungen sollten in das entsprechende Top-Level-Kategorieobjekt in deiner settings.json-Datei eingefügt werden. Einige Top-Level-Einstellungen wie proxy und plansDirectory bleiben aus Kompatibilitätsgründen direkte Root-Keys.
general
| Einstellung | Typ | Beschreibung | Standardwert |
|---|---|---|---|
general.preferredEditor | string | Der bevorzugte Editor zum Öffnen von Dateien. | undefined |
general.vimMode | boolean | Vim-Tastenkombinationen aktivieren. | false |
general.enableAutoUpdate | boolean | Automatische Update-Prüfungen und -Installationen beim Start aktivieren. | true |
general.showSessionRecap | boolean | Automatisch eine einzeilige Zusammenfassung (“wo du aufgehört hast”) anzeigen, wenn du nach einer Abwesenheit zum Terminal zurückkehrst. Standardmäßig deaktiviert. Verwende /recap, um sie manuell auszulösen, unabhängig von dieser Einstellung. | false |
general.sessionRecapAwayThresholdMinutes | number | Minuten, die das Terminal den Fokus verloren haben muss, bevor beim erneuten Fokussieren eine automatische Zusammenfassung ausgelöst wird. Wird nur verwendet, wenn showSessionRecap aktiviert ist. | 5 |
general.gitCoAuthor.commit | boolean | Fügt Git-Commit-Nachrichten einen “Co-authored-by”-Trailer hinzu UND fügt eine dateibasierte KI-Zuweisungs-Notiz (refs/notes/ai-attribution) für über Qwen Code erstellte Commits hinzu. Deaktivieren überspringt beides. | true |
general.gitCoAuthor.pr | boolean | Hängt Pull-Request-Beschreibungen beim Ausführen von gh pr create eine Qwen Code-Zuweisungszeile an. | true |
general.defaultFileEncoding | enum | Standardkodierung für neue Dateien. Verwende "utf-8" (Standard) für UTF-8 ohne BOM oder "utf-8-bom" für UTF-8 mit BOM. Ändere dies nur, wenn dein Projekt spezifisch ein BOM erfordert. | "utf-8" |
general.voice.enabled | boolean | Sprachdiktat in der Prompt-Eingabe aktivieren. Kann auch mit dem Befehl /voice umgeschaltet werden. Erfordert die Konfiguration eines Transkriptionsmodells (voiceModel). | false |
general.voice.mode | enum | Verhalten von Push-to-Talk: "hold", um zu sprechen, während die Taste gedrückt gehalten wird, oder "tap", um zu starten und durch erneutes Tippen (oder Pausieren) zu stoppen und abzusenden. | "hold" |
general.voice.language | string | Bevorzugte gesprochene Sprache für die Sprachtranskription (z. B. "english", "chinese"). Leer lassen für automatische Erkennung. | "" |
general.voice.keytermsFile | string | Pfad zu einer benutzerdefinierten Keyterms-Datei (ein Begriff pro Zeile, # für Kommentare), die die Sprachtranskription in Richtung domänenspezifischer Begriffe lenkt. Relative Pfade werden vom Workspace-Root aufgelöst; Standard ist .qwen/voice-keyterms.txt, wenn vorhanden. Wird nur in vertrauenswürdigen Workspaces gelesen. Gilt nur für Qwen ASR-Modelle (qwen3-asr-*). | "" |
general.voice.refineTranscript | boolean | Bereinigt Sprachtranskripte mit dem Fast-Modell vor dem Einfügen – entfernt Füllwörter und korrigiert Erkennungsfehler, während die Bedeutung erhalten bleibt. Fällt bei einem Fehler auf das Rohtranskript zurück und wird übersprungen, wenn kein Fast-Modell konfiguriert ist. | true |
general.cleanupPeriodDays | number | Tage, die ~/.qwen/file-history/ Sitzungs-Backups aufbewahrt werden, die von /rewind verwendet werden. Backups, die älter als dieser Wert sind, werden durch einen Hintergrundlauf entfernt, der höchstens einmal pro Tag ausgeführt wird. 0 = minimale Aufbewahrung (~1 Stunde): behält Sitzungen, die in der letzten Stunde bearbeitet wurden, plus die aktuell aktive. Änderungen werden nach einem Neustart wirksam. | 30 |
general.language | enum | Sprache der Benutzeroberfläche. Verwende "auto", um sie aus den Systemeinstellungen zu erkennen, oder einen Sprachcode (z. B. "zh-CN", "fr"). Benutzerdefinierte Codes können hinzugefügt werden, indem JS-Locale-Dateien in ~/.qwen/locales/ abgelegt werden. Siehe i18n. Erfordert einen Neustart. | "auto" |
general.outputLanguage | string | Sprache für die Modellausgabe. Verwende "auto", um sie aus den Systemeinstellungen zu erkennen, oder stelle eine bestimmte Sprache ein. Erfordert einen Neustart. | "auto" |
general.dynamicCommandTranslation | boolean | KI-Übersetzung von Beschreibungen dynamischer Slash-Befehle aktivieren. Wenn deaktiviert, behalten dynamische Befehle ihre ursprünglichen Beschreibungen und Überspringen Aufrufe des Übersetzungsmodells. | false |
general.terminalBell | boolean | Gibt einen Terminal-Bell-Sound aus, wenn eine Antwort abgeschlossen ist oder eine Genehmigung benötigt. | true |
general.preventSystemSleep | boolean | Verhindert, dass das System in den Ruhezustand geht, während Qwen Code eine Modellantwort streamt oder Tools ausführt. Leerlaufzeit des Prompts und Berechtigungsabfragen verhindern den Ruhezustand nicht. Wird einmalig beim Start gelesen, Änderungen werden also erst nach einem Neustart wirksam. | true |
general.chatRecording | boolean | Chat-Verlauf auf der Festplatte speichern. Das Deaktivieren verhindert auch, dass --continue und --resume funktionieren. Erfordert einen Neustart. | true |
output
| Setting | Type | Beschreibung | Default | Mögliche Werte |
|---|---|---|---|---|
output.format | string | Das Format der CLI-Ausgabe. | "text" | "text", "json" |
output.showTimestamps | boolean | Zeigt einen [HH:MM:SS] Zeitstempel vor jeder Assistant-Antwort an. | false |
ui
| Setting | Type | Beschreibung | Default |
|---|---|---|---|
ui.theme | string | Das Farbtheme für die UI. Siehe Themes für verfügbare Optionen. | "Qwen Dark" |
ui.customThemes | object | Benutzerdefinierte Theme-Definitionen. | {} |
ui.statusLine | object | Benutzerdefinierte Statuszeilen-Konfiguration. Unterstützt die Optionen command, refreshInterval, respectUserColors und hideContextIndicator. Siehe Status Line. | undefined |
ui.hideWindowTitle | boolean | Blendet die Fenstertitelleiste aus. | false |
ui.hideTips | boolean | Blendet alle Tipps (beim Start und nach der Antwort) in der UI aus. Siehe Contextual Tips. | false |
ui.hideBanner | boolean | Blendet das ASCII-Logo und das Info-Panel beim Start aus. Tipps und Chat-Eingabe werden weiterhin gerendert, es sei denn, ui.hideTips ist ebenfalls gesetzt. | false |
ui.customBannerTitle | string | Ersetzt den Standardtitel >_ Qwen Code im Info-Panel des Banners. Das Versions-Suffix (vX.Y.Z) wird immer angehängt; Auth-, Model- und Pfadzeilen sind nicht betroffen. Bereinigt; auf 80 Zeichen begrenzt. | "" |
ui.customBannerSubtitle | string | Optionale Untertitelzeile, die zwischen dem Banner-Titel und der Auth/Model-Zeile anstelle der leeren Trennzeile gerendert wird. Bereinigt; auf 160 Zeichen begrenzt. Leer (Standard) behält die ursprüngliche leere Trennzeile bei. | "" |
ui.customAsciiArt | string | object | Ersetzt das QWEN ASCII-Logo im Banner. Akzeptiert einen Inline-String (wird für beide Breitenstufen verwendet), { "path": "./brand.txt" } (relative Pfade werden relativ zum Verzeichnis der besitzenden Einstellungsdatei aufgelöst; einmalig beim Start mit O_NOFOLLOW unter POSIX gelesen, auf 64 KB begrenzt) oder { "small": ..., "large": ... } für die breitenabhängige Auswahl. Bereinigt; auf 200 Zeilen × 200 Spalten pro Stufe begrenzt. | undefined |
ui.showLineNumbers | boolean | Zeigt Zeilennummern in Codeblöcken in der CLI-Ausgabe an. | true |
ui.renderMode | string | Standard-Markdown-Anzeigemodus. Verwende "render" für formatierte visuelle Vorschauen oder "raw", um standardmäßig quelltextorientiertes Markdown anzuzeigen. Umschalten während einer Sitzung mit Alt/Option+M; unter macOS muss das Terminal Option als Meta senden. Siehe Markdown Rendering. | "render" |
ui.showCitations | boolean | Zeigt Quellenangaben für generierten Text im Chat an. | false |
ui.history.collapseOnResume | boolean | Gibt an, ob der Verlauf beim Fortsetzen einer Sitzung standardmäßig eingeklappt werden soll. Kann über /history collapse-on-resume und /history expand-on-resume umgeschaltet werden. | false |
ui.history.collapsePreviewCount | number | Anzahl der neuesten Benutzereingaben, die sichtbar bleiben, wenn ui.history.collapseOnResume aktiviert ist. 0 klappt standardmäßig den gesamten wiederhergestellten Verlauf ein; -1 zeigt den gesamten wiederhergestellten Verlauf an. | 0 |
ui.compactMode | boolean | Blendet Tool-Ausgaben und Thinking für eine aufgeräumtere Ansicht aus. Umschaltbar mit Ctrl+O während einer Sitzung oder über den Einstellungen-Dialog. Tool-Freigabeaufforderungen werden auch im Compact-Modus nie ausgeblendet. Die Einstellung bleibt über Sitzungen hinweg erhalten. | false |
ui.shellOutputMaxLines | number | Maximale Anzahl der inline angezeigten Shell-Ausgabezeilen. Setze auf 0, um das Limit zu deaktivieren und die vollständige Ausgabe anzuzeigen. Ausgeblendete Zeilen werden über den +N lines Indikator angezeigt. Fehler, benutzerinitiierte Befehle mit !-Präfix, Tool-Bestätigungen und fokussierte eingebettete Shells zeigen immer die vollständige Ausgabe an. | 5 |
ui.enableWelcomeBack | boolean | Zeigt den Willkommen-zurück-Dialog an, wenn du zu einem Projekt mit Gesprächsverlauf zurückkehrst. Wenn aktiviert, erkennt Qwen Code automatisch, ob du zu einem Projekt mit einer zuvor generierten Projektzusammenfassung (.qwen/PROJECT_SUMMARY.md) zurückkehrst, und zeigt einen Dialog an, der es dir ermöglicht, deine vorherige Konversation fortzusetzen oder neu zu beginnen. Wenn du Start new chat session wählst, wird diese Auswahl für das aktuelle Projekt gespeichert, bis sich die Projektzusammenfassung ändert. Dieses Feature integriert sich mit dem /summary Befehl und dem Beenden-Bestätigungsdialog. | true |
ui.accessibility.enableLoadingPhrases | boolean | Aktiviert Lade-Phrasen (für Barrierefreiheit deaktivieren). | true |
ui.accessibility.screenReader | boolean | Aktiviert den Screenreader-Modus, der die TUI für eine bessere Kompatibilität mit Screenreadern anpasst. | false |
ui.customWittyPhrases | array of strings | Eine Liste benutzerdefinierter Phrasen, die während des Ladens angezeigt werden. Wenn angegeben, durchläuft die CLI diese Phrasen anstelle der Standardphrasen. | [] |
ui.showResponseTokensPerSecond | boolean | Zeigt eine Live-Schätzung der Tokens/Sek neben dem Antwort-Token-Zähler an, während das Modell streamt. Dies ist ein Hinweis auf die Generierungsgeschwindigkeit, keine ETA oder kein Fertigstellungsprozentsatz. Wird in der nächsten Sitzung wirksam. | false |
ui.enableFollowupSuggestions | boolean | Aktiviert Folgevorschläge, die vorhersagen, was du als Nächstes tippen möchtest, nachdem das Modell geantwortet hat. Vorschläge erscheinen als Platzhaltertext und werden mit Tab, Enter oder der Pfeil-nach-rechts-Taste akzeptiert (wodurch die Eingabe gefüllt wird – sie werden nicht automatisch abgesendet). Standardmäßig aktiviert; setze auf false, um dies zu deaktivieren. | true |
ui.enableCacheSharing | boolean | Verwendet Cache-bewusste Fork-Abfragen für die Vorschlagsgenerierung. Reduziert die Kosten bei Providern, die Prefix-Caching unterstützen (experimentell). | true |
ui.enableSpeculation | boolean | Führt akzeptierte Vorschläge spekulativ vor der Übermittlung aus. Ergebnisse erscheinen sofort, wenn du akzeptierst (experimentell). | false |
ui.showStatusInTitle | boolean | Zeigt den Qwen Code-Sitzungsnamen und -status im Terminal-Fenstertitel an. | true |
ui.disableWorkflowKeywordTrigger | boolean | Wenn true, lenkt die Erwähnung des Wortes workflow in einem Prompt den Turn nicht mehr sanft in Richtung des Workflow-Tools (und der Footer-Indikator workflow active wird unterdrückt). Gilt nur, wenn Workflows aktiviert sind. | false |
ui.enableUserFeedback | boolean | Zeigt nach Konversationen einen optionalen Feedback-Dialog an, um die Verbesserung der Qwen-Performance zu unterstützen. | true |
ui.compactInline | boolean | Kompakte Tool-Anzeige innerhalb jeder Gruppe, anstatt über Gruppen hinweg zusammenzuführen. Erfordert, dass ui.compactMode aktiviert ist. Erfordert Neustart. | false |
ui.useTerminalBuffer | boolean | Rendert den Gesprächsverlauf in einem scrollbaren In-App-Viewport anstelle des Terminal-Scrollback-Puffers. Empfohlen, wenn du bei langen Sitzungen Flackern, Scroll-Sturm oder ein Einfrieren der Benutzeroberfläche bemerkst. Scrolle mit Shift+↑/↓ (Zeile), PgUp/PgDn (Seite), Ctrl+Home/End (Anfang/Ende) oder dem Mausrad. Verwendet nicht den Scrollback-Puffer des Host-Terminals, während es aktiviert ist; halte Shift (oder Option unter macOS) beim Ziehen für native Textauswahl. | false |
ui.hideBuiltinWorktreeIndicator | boolean | Blendet die eingebaute ⎇ worktree-<branch> (<slug>) Zeile im Footer aus. Der Worktree-Status wird weiterhin über die stdin-Payload an benutzerdefinierte Statusline-Skripte übergeben. Behalte den Standardwert bei, es sei denn, deine benutzerdefinierte Statuszeile rendert den Worktree selbst. | false |
ide
| Einstellung | Typ | Beschreibung | Standard |
|---|---|---|---|
ide.enabled | boolean | Aktiviert den IDE-Integrationsmodus. | false |
ide.hasSeenNudge | boolean | Gibt an, ob der Benutzer den IDE-Integrationshinweis bereits gesehen hat. | false |
privacy
| Einstellung | Typ | Beschreibung | Standard |
|---|---|---|---|
privacy.usageStatisticsEnabled | boolean | Aktiviert die Erfassung von Nutzungsstatistiken. | true |
model
| Einstellung | Typ | Beschreibung | Standard |
|---|---|---|---|
model.name | string | Das für Konversationen zu verwendende Qwen-Modell. | undefined |
model.reasoningEffort | enum | Legt fest, wie stark reasoning-fähige Modelle denken, angewendet über alle Provider hinweg. Wird mit dem Befehl /effort gesetzt (low, medium, high, xhigh, max). Jeder Provider mappt und begrenzt diesen Wert auf das, was das aktive Modell unterstützt (z. B. begrenzt Gemini auf high; Anthropic clamppt Stufen, die einem Modell fehlen). Nicht setzen, um den Standardwert des Modells/Providers zu verwenden. | undefined |
model.baseUrl | string | Wird automatisch vom Model Picker persistiert, um Mehrdeutigkeiten aufzulösen, wenn mehrere modelProviders-Einträge dieselbe Modell-ID teilen. Nicht zur manuellen Bearbeitung gedacht – verwende stattdessen den /model-Picker oder einen modelProviders-Eintrag; ein veralteter, manuell geänderter Wert kann Anfragen stillschweigend an einen anderen Provider mit derselben ID umleiten. | undefined |
model.sessionTokenLimit | number | Maximal erlaubte, aufgezeichnete Prompt-Token-Anzahl vor dem Senden der nächsten Nachricht. -1 bedeutet unbegrenzt; 0 wird ebenfalls als unbegrenzt behandelt (im Gegensatz zu model.maxToolCalls, wo 0 alle Aufrufe verbietet). Wenn die aufgezeichnete Prompt-Anzahl das Limit überschreitet, wird das nächste Senden verworfen (die Session wird nicht abgebrochen). | -1 |
model.maxSessionTurns | number | Maximale Anzahl an User/Model/Tool-Turns, die in einer Session behalten werden. -1 bedeutet unbegrenzt. | -1 |
model.maxWallTimeSeconds | number | Wall-Clock-Budget für Headless-/Unattended-Runs in Sekunden. -1 bedeutet unbegrenzt. Kann pro Aufruf über --max-wall-time überschrieben werden, was eine positive Dauer erfordert (90, 30s, 5m, 1h, 1.5h); das Minimum ist 1 Sekunde – Sub-Sekunden-Werte (500ms, 0.5) werden als Tippfehler abgelehnt. Lasse den Flag weg, um auf diese Einstellung zurückzufallen. Bricht mit Exit-Code 55 ab, wenn das Limit überschritten wird. | -1 |
model.maxToolCalls | number | Kumulatives Tool-Call-Budget für einen Run (zählt jeden ausgeführten Tool-Aufruf, unabhängig von Erfolg oder Misserfolg; structured_output unter --json-schema ist ausgenommen). -1 bedeutet unbegrenzt; 0 bedeutet “keine Tool-Aufrufe erlaubt”. Auf 1.000.000 begrenzt, um Tippfehler abzufangen. Überschreibbar über --max-tool-calls. Bricht mit Exit-Code 55 ab, wenn das Limit überschritten wird. | -1 |
model.maxSubagentDepth | number | Maximale Sub-Agent-Verschachtelungstiefe (1-basierte Ebenen: ein Top-Level-Sub-Agent ist Ebene 1). 1 hält Sub-Agenten verfügbar, deaktiviert aber die Verschachtelung – das Verhalten vor der Einführung von Nesting. Werte werden auf den Bereich 1–100 begrenzt; nicht-endliche Werte fallen auf den Standardwert zurück. Teammates, Forks und workflow-erzeugte Agenten verschachteln sich unabhängig von dieser Einstellung niemals. Überschreibbar über --max-subagent-depth. | 5 |
model.generationConfig | object | Erweiterte Overrides, die an den zugrunde liegenden Content-Generator übergeben werden. Unterstützt Request-Controls wie timeout, maxRetries, enableCacheControl, splitToolMedia (Standard true; teilt von Tools zurückgegebene Medien – einschließlich Bilder, die von der integrierten read_file-Funktion gelesen werden – in eine nachfolgende User-Message auf, anstatt in die spezifikationsverletzende role: "tool"-Message, damit strikte OpenAI-kompatible Server wie doubao / new-api / LM Studio sie sehen können; setze false, um das Legacy-Verhalten “embed-in-tool” wiederherzustellen), toolResultContentFormat (Standard "parts"; setze nur "string" für Legacy-OpenAI-kompatible Runtimes, deren Tool-Templates Text-Content-Parts ignorieren), contextWindowSize (überschreibt die Context-Window-Größe des Modells), modalities (überschreibt automatisch erkannte Input-Modalitäten), customHeaders (benutzerdefinierte HTTP-Header für API-Requests) und extra_body (zusätzliche Body-Parameter nur für OpenAI-kompatible API-Requests), zusammen mit Feinjustierungs-Reglern unter samplingParams (z. B. temperature, top_p, max_tokens). Nicht setzen, um sich auf die Provider-Standards zu verlassen. | undefined |
model.chatCompression.contextPercentageThreshold | number | ENTFERNT. Ersetzt durch context.autoCompactThreshold (siehe Abschnitt #### context unten). Auto-Compaction verwendet jetzt eine dreistufige Threshold-Leiter (warn / auto / hard), die intern aus dem Context-Window des Modells über die Funktion computeThresholds() berechnet wird. Die alte Einstellung wird stillschweigend ignoriert (keine Startup-Warnung). Siehe PR #4345 / docs/design/auto-compaction-threshold-redesign.md für die Begründung des Redesigns. | N/A |
model.chatCompression.maxRecentFilesToRetain | number | Anzahl der zuletzt geänderten Dateien, deren aktueller Inhalt nach der Auto-Compaction in die Historie wiederhergestellt wird (eingebettet, wenn klein, sonst per Pfad referenziert). 0 stellt keine wieder her. Env-Override: QWEN_COMPACT_MAX_RECENT_FILES. | 5 |
model.chatCompression.maxRecentImagesToRetain | number | Anzahl der neuesten Bilder (Tool-Screenshots / User-Pastes), die nach der Auto-Compaction in die Historie wiederhergestellt werden. 0 stellt keine wieder her. Env-Override: QWEN_COMPACT_MAX_RECENT_IMAGES. | 3 |
model.chatCompression.enableScreenshotTrigger | boolean | Wenn true, wird die Auto-Compaction auch ausgelöst, sobald die Anzahl der in der Historie angesammelten, von Tools zurückgegebenen Bilder screenshotTriggerThreshold erreicht, unabhängig vom Token-Verbrauch – gedacht für Computer-Use-Sessions, in denen häufige Screenshots die Aufmerksamkeit des Modells verwässern. Zählt nur Bilder, die innerhalb von Tool-Ergebnissen zurückgegeben werden, nicht vom User eingefügte Bilder. Env-Override: QWEN_COMPACT_SCREENSHOT_TRIGGER (1/true/0/false). | true |
model.chatCompression.screenshotTriggerThreshold | number | Anzahl der von Tools zurückgegebenen Bilder, ab der der Screenshot-Trigger auslöst (nur wenn enableScreenshotTrigger). Die Compaction setzt den Zähler zurück – überlebende Bilder werden als Top-Level-Parts neu eingebettet, was der Trigger nicht zählt – sodass er nicht sofort erneut auslöst. Env-Override: QWEN_COMPACT_SCREENSHOT_THRESHOLD. | 50 |
model.skipNextSpeakerCheck | boolean | Überspringt die nächste Speaker-Prüfung. | true |
model.skipLoopDetection | boolean | Deaktiviert die Streaming-Loop-Detection-Prüfungen. Standardmäßig true (Loop-Detection wird übersprungen), um False Positives zu vermeiden, die legitime Workflows unterbrechen. Setze auf false, um die Streaming-Loop-Detection wieder zu aktivieren – nützlich als Guardrail in Headless-/Non-Interactive-Runs, wo festgefahrene Wiederholungen sonst Budget verschwenden. | true |
model.maxToolCallsPerTurn | number | Harte Obergrenze für Tool-Aufrufe innerhalb eines einzelnen Turns (ein Model-Turn plus dessen Tool-Result-Fortsetzungen; blockierende Stop-Hook-Fortsetzungen wie /goal-Iterationen starten ein neues Budget). Immer aktiver Circuit Breaker gegen durchdrehende Turns, unabhängig von model.skipLoopDetection; die pattern-basierten Loop-Detektoren schlagen lange vor dieser Obergrenze an, die nur das Gesamtvolumen begrenzt. Setze auf 0 oder einen negativen Wert, um die Obergrenze zu deaktivieren. Die Auswahl von “Disable loop detection for this session” im Loop-Detected-Dialog unterdrückt sie ebenfalls für den Rest der Session. | 100 |
model.skipStartupContext | boolean | Überspringt das Senden des Startup-Workspace-Kontexts (Zusammenfassung der Umgebung und Bestätigung) zu Beginn jeder Session. Aktiviere dies, wenn du den Kontext lieber manuell bereitstellst oder beim Startup Tokens sparen möchtest. | false |
model.enableOpenAILogging | boolean | Aktiviert das Logging von OpenAI-API-Aufrufen zu Debugging- und Analysezwecken. Wenn aktiviert, werden API-Requests und -Responses in JSON-Dateien protokolliert. | false |
model.openAILoggingDir | string | Benutzerdefinierter Verzeichnispfad für OpenAI-API-Logs. Wenn nicht angegeben, ist der Standardwert logs/openai im aktuellen Arbeitsverzeichnis. Unterstützt absolute Pfade, relative Pfade (aufgelöst vom aktuellen Arbeitsverzeichnis) und ~-Expansion (Home-Verzeichnis). | undefined |
Beispiel für 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 (Request-Timeout):
timeout ist das Timeout pro Request in Millisekunden (Standard 120000). Setze es auf 0, um das Request-Timeout zu deaktivieren – entsprechend der Konvention QWEN_STREAM_IDLE_TIMEOUT_MS=0 – anstatt den Request abzubrechen. Es kann auch über die Umgebungsvariable QWEN_CODE_API_TIMEOUT_MS gesetzt werden. Dies ist zu unterscheiden von QWEN_STREAM_IDLE_TIMEOUT_MS, welches die Inaktivität zwischen gestreamten Chunks begrenzt.
max_tokens (Output-Token-Limit):
Wenn weder samplingParams.max_tokens noch QWEN_CODE_MAX_OUTPUT_TOKENS gesetzt ist, verwendet Qwen Code in der Regel das deklarierte Output-Limit des ausgewählten Modells als Standard-Output-Limit für den Request. Wenn die Antwort dennoch dieses Limit erreicht, kann Qwen Code einen Retry mit einem erhöhten Limit (mit einer Untergrenze von 64K) durchführen und dann über Fortsetzungs-Turns hinweg fortfahren.
Für OpenAI-kompatible Provider ist samplingParams auch ein Escape Hatch für das Wire-Format: Wenn es gesetzt ist, werden seine Schlüssel unverändert durchgereicht und Qwen Code synthetisiert keinen max_tokens-Standardwert. Verwende dies für provider-spezifische Parameter wie max_completion_tokens.
Um ein festes Output-Limit zu erzwingen, setze samplingParams.max_tokens in deinen Einstellungen oder verwende die Umgebungsvariable QWEN_CODE_MAX_OUTPUT_TOKENS. Explizite Limits deaktivieren die automatische Eskalation der Output-Token.
toolResultContentFormat:
Steuert, wie reine Text-Tool-Ergebnisse in OpenAI-kompatiblen Requests serialisiert werden. Der Standardwert "parts" behält die Standardform des Content-Part-Arrays bei. Setze "string" nur für Legacy-OpenAI-kompatible Runtimes, deren Tool-Templates Text-Content-Parts ignorieren, wie z. B. ältere GLM-5.1 vLLM/SGLang-Templates. Von Tools zurückgegebene Medien werden weiterhin durch splitToolMedia gesteuert.
contextWindowSize:
Überschreibt die Standardgröße des Context Windows für das ausgewählte Modell. Qwen Code bestimmt das Context Window anhand eingebauter Standardwerte basierend auf Model-Namens-Matching, mit einem konstanten Fallback-Wert. Verwende diese Einstellung, wenn das effektive Context-Limit eines Providers von der Qwen Code-Standardvorgabe abweicht. Dieser Wert definiert die angenommene maximale Context-Kapazität des Modells, nicht ein Token-Limit pro Request.
Wenn das ausgewählte Modell in modelProviders definiert ist, setze
contextWindowSize in der generationConfig dieses Provider-Eintrags anstelle der
Top-Level-model.generationConfig. Provider-Model-Einträge sind versiegelt (sealed), daher
füllen Top-Level-Generation-Einstellungen fehlende Provider-Felder nicht auf.
modalities:
Überschreibt die automatisch erkannten Input-Modalitäten für das ausgewählte Modell. Qwen Code erkennt unterstützte Modalitäten (Bild, PDF, Audio, Video) automatisch basierend auf Model-Namens-Mustern. Verwende diese Einstellung, wenn die automatische Erkennung inkorrekt ist – zum Beispiel, um pdf für ein Modell zu aktivieren, das es unterstützt, aber nicht erkannt wird. Format: { "image": true, "pdf": true, "audio": true, "video": true }. Lasse einen Schlüssel weg oder setze ihn auf false für nicht unterstützte Typen.
customHeaders:
Ermöglicht das Hinzufügen benutzerdefinierter HTTP-Header zu allen API-Requests. Dies ist nützlich für Request-Tracing, Monitoring, API-Gateway-Routing oder wenn verschiedene Modelle unterschiedliche Header erfordern. Für Provider-Modelle definiere customHeaders in modelProviders[].generationConfig.customHeaders. Für Runtime-Modelle ohne passenden Provider-Eintrag definiere es in model.generationConfig.customHeaders. Zwischen den beiden Ebenen erfolgt kein Merging.
Das Feld extra_body ermöglicht das Hinzufügen benutzerdefinierter Parameter zum an die API gesendeten Request-Body. Dies ist nützlich für provider-spezifische Optionen, die nicht von den Standard-Konfigurationsfeldern abgedeckt werden. Hinweis: Dieses Feld wird nur für OpenAI-kompatible Provider (openai, qwen-oauth) unterstützt. Es wird für Anthropic- und Gemini-Provider ignoriert. Für Provider-Modelle definiere extra_body in modelProviders[].generationConfig.extra_body. Für Runtime-Modelle ohne passenden Provider-Eintrag definiere es in model.generationConfig.extra_body.
Beispiele für model.openAILoggingDir:
"~/qwen-logs"- Loggt in das Verzeichnis~/qwen-logs"./custom-logs"- Loggt in./custom-logsrelativ zum aktuellen Verzeichnis"/tmp/openai-logs"- Loggt in den absoluten Pfad/tmp/openai-logs
fastModel
| Einstellung | Typ | Beschreibung | Standard |
|---|---|---|---|
fastModel | string | Modell, das zur Generierung von Prompt-Vorschlägen und spekulativer Ausführung verwendet wird. Leer lassen, um das Hauptmodell zu verwenden. Ein kleineres/schnelleres Modell (z. B. qwen3-coder-flash) reduziert Latenz und Kosten. Kann auch über /model --fast gesetzt werden. | "" |
visionModel
| Einstellung | Typ | Beschreibung | Standard |
|---|---|---|---|
visionModel | string | Bildfähiges Modell, das als Vision-Bridge verwendet wird: Wenn ein reines Text-Hauptmodell ein Bild empfängt, wird es zuerst von diesem Modell transkribiert. Leer lassen, um automatisch ein Vision-Modell desselben Providers auszuwählen. Kann auch über /model --vision gesetzt werden. | "" |
voiceModel
| Einstellung | Typ | Beschreibung | Standard |
|---|---|---|---|
voiceModel | string | Modell, das für die Sprachtranskription verwendet wird. Leer lassen, um die Spracheingabe deaktiviert zu lassen, bis ein Sprachmodell ausgewählt wird. Kann auch über /model --voice gesetzt werden. | "" |
modelFallbacks
| Einstellung | Typ | Beschreibung | Standard |
|---|---|---|---|
modelFallbacks | string | Geordnete Liste von Fallback-Modell-IDs (kommagetrennt, max. 3), die versucht werden, wenn das primäre Modell auf Kapazitätsfehler (429/503/529) trifft. Beispiel: "qwen-plus,qwen-turbo". Kann auch über den CLI-Flag --fallback-model gesetzt werden. Erfordert einen Neustart. | "" |
modelPricing
| Einstellung | Typ | Beschreibung | Standard |
|---|---|---|---|
modelPricing | object | Optionale preisliche Angaben pro Modell für die Kostenschätzung in /stats model. Beispiel: { "qwen3-coder": { "inputPerMillionTokens": 0.30, "outputPerMillionTokens": 1.20 } }. | undefined |
context
| Einstellung | Typ | Beschreibung | Standard |
|---|---|---|---|
context.fileName | string oder Array von Strings | Der Name der Kontextdatei(en). | undefined |
context.autoCompactThreshold | number | Bruchteil des Context Windows, bei dem die automatische Komprimierung ausgelöst wird. Muss größer als 0 und höchstens 1 sein. Standard ist 0.7 (70 %). Bei großen Context Windows (>110K Tokens) dominiert der absolute Zweig des dreistufigen Schwellenwertsystems, sodass Werte unter ~0,7 möglicherweise keinen sichtbaren Effekt haben. Benutzerdefinierte Schwellenwerte wirken sich hauptsächlich auf Modelle mit kleinem Window (≤128K) aus. Ersetzt den alten model.chatCompression.contextPercentageThreshold. | undefined (verwendet intern 0.7) |
context.importFormat | string | Das Format, das beim Importieren von Memory verwendet werden soll. | undefined |
context.includeDirectories | array | Zusätzliche Verzeichnisse, die in den Workspace-Kontext einbezogen werden sollen. Gibt ein Array zusätzlicher absoluter oder relativer Pfade an, die in den Workspace-Kontext einbezogen werden. Fehlende Verzeichnisse werden standardmäßig mit einer Warnung übersprungen. Pfade können ~ verwenden, um auf das Home-Verzeichnis des Benutzers zu verweisen. Diese Einstellung kann mit dem --include-directories Kommandozeilen-Flag kombiniert werden. | [] |
context.loadFromIncludeDirectories | boolean | Steuert das Verhalten des /memory refresh-Befehls. Wenn auf true gesetzt, sollten QWEN.md-Dateien aus allen hinzugefügten Verzeichnissen geladen werden. Wenn auf false gesetzt, sollte QWEN.md nur aus dem aktuellen Verzeichnis geladen werden. | false |
context.fileFiltering.respectGitIgnore | boolean | .gitignore-Dateien bei der Suche berücksichtigen. | true |
context.fileFiltering.respectQwenIgnore | boolean | .qwenignore und konfigurierte benutzerdefinierte Ignore-Dateien bei der Suche berücksichtigen. | true |
context.fileFiltering.customIgnoreFiles | array | Ignore-Dateien relativ zum Projekt-Root, die anstelle der Standard-Kompatibilitätsdateien (.agentignore, .aiignore) verwendet werden, wenn respectQwenIgnore aktiviert ist. .qwenignore ist immer enthalten. | [".agentignore", ".aiignore"] |
context.fileFiltering.enableRecursiveFileSearch | boolean | Ob die rekursive Suche nach Dateinamen unter dem aktuellen Baum aktiviert werden soll, wenn @-Präfixe im Prompt vervollständigt werden. | true |
context.fileFiltering.enableFuzzySearch | boolean | Wenn true, werden Fuzzy-Search-Funktionen bei der Dateisuche aktiviert. Auf false setzen, um die Performance bei Projekten mit einer großen Anzahl von Dateien zu verbessern. | true |
context.clearContextOnIdle.toolResultsThresholdMinutes | number | Minuten der Inaktivität, bevor alte Tool-Ergebnisinhalte gelöscht werden. Verwende -1, um den Idle-Trigger zu deaktivieren. | 60 |
context.clearContextOnIdle.toolResultsNumToKeep | integer | Ganzzahlige Anzahl der neuesten komprimierbaren Tool-Ergebnisse, die beim Löschen beibehalten werden sollen. Werte unter 1 werden auf 1 abgerundet. | 5 |
context.clearContextOnIdle.toolResultsTotalCharsThreshold | number | Gesamtzahl der erlaubten komprimierbaren Tool-Ergebnis-Ausgabezeichen im Verlauf, bevor die ältesten Ergebnisse gelöscht werden. Verwende -1, um den Größen-Trigger zu deaktivieren. Dies ist ein weicher Schwellenwert: Geschützte aktuelle Tool-Ergebnisse können die Gesamtzahl darüber halten. | 500000 |
Fehlerbehebung bei der Performance der Dateisuche
Wenn du Performance-Probleme bei der Dateisuche hast (z. B. bei @-Completions), insbesondere in Projekten mit einer sehr großen Anzahl von Dateien, kannst du Folgendes in der empfohlenen Reihenfolge ausprobieren:
- Ignore-Datei verwenden: Erstelle eine
.qwenignoreoder eine konfigurierte benutzerdefinierte Ignore-Datei in deinem Projekt-Root, um Verzeichnisse auszuschließen, die eine große Anzahl von Dateien enthalten, auf die du nicht verweisen musst (z. B. Build-Artefakte, Logs,node_modules). Die Reduzierung der Gesamtzahl der durchsuchten Dateien ist der effektivste Weg, um die Performance zu verbessern. - Fuzzy Search deaktivieren: Wenn das Ignorieren von Dateien nicht ausreicht, kannst du die Fuzzy-Suche deaktivieren, indem du
enableFuzzySearchin deinersettings.json-Datei auffalsesetzt. Dadurch wird ein einfacherer, nicht-fuzzy Matching-Algorithmus verwendet, was schneller sein kann. - Rekursive Dateisuche deaktivieren: Als letzte Möglichkeit kannst du die rekursive Dateisuche vollständig deaktivieren, indem du
enableRecursiveFileSearchauffalsesetzt. Dies ist die schnellste Option, da ein rekursives Durchsuchen deines Projekts vermieden wird. Das bedeutet jedoch, dass du bei der Verwendung von@-Completions den vollständigen Pfad zu den Dateien eingeben musst.
tools
| Einstellung | Typ | Beschreibung | Standard | Hinweise |
|---|---|---|---|---|
tools.sandbox | boolean or string | Sandbox-Ausführungsumgebung (kann ein Boolean oder ein Pfad-String sein). | undefined | |
tools.sandboxImage | string | Sandbox-Image-URI, die von Docker/Podman verwendet wird, wenn --sandbox-image und QWEN_SANDBOX_IMAGE nicht gesetzt sind. | undefined | |
tools.shell.enableInteractiveShell | boolean | Verwende node-pty für ein interaktives Shell-Erlebnis. Der Fallback auf child_process gilt weiterhin. | true | |
tools.core | array of strings | Veraltet. Wird in der nächsten Version entfernt. Verwende stattdessen permissions.allow + permissions.deny. Beschränkt integrierte Tools auf eine Allowlist. Alle Tools, die nicht in der Liste sind, werden deaktiviert. | undefined | |
tools.exclude | array of strings | Veraltet. Verwende stattdessen permissions.deny. Tool-Namen, die von der Discovery ausgeschlossen werden sollen. Wird beim ersten Laden automatisch in das permissions-Format migriert. | undefined | |
tools.allowed | array of strings | Veraltet. Verwende stattdessen permissions.allow. Tool-Namen, die den Bestätigungsdialog umgehen. Wird beim ersten Laden automatisch in das permissions-Format migriert. | undefined | |
tools.approvalMode | string | Legt den Standard-Genehmigungsmodus für die Tool-Nutzung fest. | default | Mögliche Werte: plan (nur analysieren, keine Dateien ändern oder Befehle ausführen), default (Genehmigung vor Dateiänderungen oder der Ausführung von Shell-Befehlen erforderlich), auto-edit (Dateiänderungen automatisch genehmigen), auto (LLM-Klassifizierer genehmigt sichere Aktionen automatisch und blockiert riskante), yolo (alle Tool-Aufrufe automatisch genehmigen) |
tools.discoveryCommand | string | Befehl, der für die Tool-Discovery ausgeführt wird. | undefined | |
tools.callCommand | string | Definiert einen benutzerdefinierten Shell-Befehl zum Aufrufen eines bestimmten Tools, das mit tools.discoveryCommand gefunden wurde. Der Shell-Befehl muss die folgenden Kriterien erfüllen: Er muss den Funktions-name (genau wie in der Funktionsdeklaration ) als erstes Befehlszeilenargument übernehmen. Er muss Funktionsargumente als JSON auf stdin lesen, analog zu functionCall.args. Er muss die Funktionsausgabe als JSON auf stdout zurückgeben, analog zu functionResponse.response.content. | undefined | |
tools.useRipgrep | boolean | Verwende ripgrep für die Dateiinhaltsuche anstelle der Fallback-Implementierung. Bietet schnellere Suchperformance. | true | |
tools.useBuiltinRipgrep | boolean | Verwende die mitgelieferte ripgrep-Binärdatei. Wenn auf false gesetzt, wird stattdessen der systemweite rg-Befehl verwendet. Diese Einstellung ist nur wirksam, wenn tools.useRipgrep auf true gesetzt ist. | true | |
tools.truncateToolOutputThreshold | number | Kürzt die Tool-Ausgabe, wenn sie größer als diese Anzahl von Zeichen ist. Gilt für die Tools Shell, Grep, Glob, ReadFile und ReadManyFiles. | 25000 | Neustart erforderlich: Ja |
tools.truncateToolOutputLines | number | Maximale Anzahl an Zeilen oder Einträgen, die beim Kürzen der Tool-Ausgabe beibehalten werden. Gilt für die Tools Shell, Grep, Glob, ReadFile und ReadManyFiles. | 1000 | Neustart erforderlich: Ja |
tools.computerUse.enabled | boolean | Aktiviert die integrierten Computer-Use-Tools (cua-driver native Desktop-Automatisierung). Wenn true (Standard), werden die computer_use__*-Tools als verzögerte Built-ins registriert; der erste Aufruf lädt die gepinnte, signierte cua-driver-Binärdatei in ~/.qwen/computer-use/ herunter und führt durch die macOS Accessibility / Screen Recording Berechtigungen. | true | Neustart erforderlich: Ja |
tools.computerUse.maxImageDimension | number | Pixel-Obergrenze für die längste Kante, die auf cua-driver-Screenshots angewendet wird (über max_image_dimension von set_config). -1 (Standard) behält den eingebauten Standardwert von cua-driver (1568) bei; 0 deaktiviert die Skalierung (volle Auflösung); ein positiver Wert begrenzt die längste Kante. Niedrigere Obergrenzen reduzieren die Vision-Token-Kosten auf Kosten feiner Details. | -1 | Neustart erforderlich: Ja. Env-Override: QWEN_COMPUTER_USE_MAX_IMAGE_DIMENSION (eine nicht-negative Ganzzahl; hat Vorrang vor dieser Einstellung) |
tools.computerUse.idleTimeoutMs | number | Millisekunden, die der cua-driver-Prozess nach dem letzten computer_use__*-Aufruf am Leben gehalten wird. Der Standardwert ist 300000 (5 Minuten). Setze den Wert auf 0, um den Prozess laufen zu lassen, bis Qwen Code beendet wird. | 300000 | Neustart erforderlich: Ja |
tools.toolSearch.enabled | boolean | Lädt MCP-Tools bei Bedarf über ToolSearch, um die Prompt-Größe zu reduzieren. Deaktiviere dies für Modelle, die auf präfixbasiertes KV-Caching angewiesen sind (z. B. DeepSeek), um das Prompt-Präfix stabil zu halten und die Cache-Trefferquote zu maximieren. | true | Neustart erforderlich: Ja |
Migration von tools.core / tools.exclude / tools.allowed: Diese Legacy-Einstellungen sind veraltet und werden beim ersten Laden automatisch in das neue permissions-Format migriert. Konfiguriere bevorzugt direkt permissions.allow / permissions.deny. Verwende /permissions, um Regeln interaktiv zu verwalten.
memory
| Setting | Type | Description | Default |
|---|---|---|---|
memory.enableManagedAutoMemory | boolean | Aktiviert die Hintergrundextraktion von Erinnerungen aus Konversationen. | true |
memory.enableManagedAutoDream | boolean | Aktiviert die automatische Konsolidierung (Deduplizierung und Bereinigung) gesammelter Erinnerungen. | true |
memory.enableAutoSkill | boolean | Aktiviert die Hintergrundprüfung auf wiederverwendbare Projekt-Skills nach tool-lastigen Sessions. | true |
memory.autoSkillConfirm | boolean | Fordert eine Bestätigung an, bevor automatisch generierte Skills zur Skill-Bibliothek hinzugefügt werden. Wenn deaktiviert, werden Auto-Skills sofort gespeichert. | true |
memory.enableTeamMemory | boolean | Aktiviert eine Projekt-Speicherebene, die über das über Git getrackte .qwen/team-memory/-Verzeichnis mit Mitarbeitern geteilt wird. Schreibzugriffe werden auf Secrets gescannt und können im Git-Diff überprüft werden. | false |
memory.enableTeamMemorySync | boolean | Wenn Team-Memory aktiviert ist, wird das .qwen/team-memory/-Verzeichnis bei Session-Start automatisch committet, per Fast-Forward gepullt und gepusht, sodass Mitarbeiter synchron bleiben. Erfordert einen konfigurierten Git-Upstream. | false |
Siehe Memory für Details zur Funktionsweise von Auto-Memory und zur Verwendung der Befehle /memory, /remember und /dream.
permissions
Das Permission-System bietet eine feingranulare Kontrolle darüber, welche Tools ausgeführt werden können, welche eine Bestätigung erfordern und welche blockiert sind.
Entscheidungspriorität (höchste zuerst): deny > ask > allow > (Standard/Interaktiver Modus)
Die erste übereinstimmende Regel gewinnt. Regeln verwenden das Format "ToolName" oder "ToolName(Spezifizierer)".
| Setting | Type | Description | Default |
|---|---|---|---|
permissions.allow | array of strings | Regeln für automatisch genehmigte Tool-Aufrufe (keine Bestätigung erforderlich). Werden über alle Scopes (User + Projekt + System) zusammengeführt. | undefined |
permissions.ask | array of strings | Regeln für Tool-Aufrufe, die immer eine Benutzerbestätigung erfordern. Hat Vorrang vor allow. | undefined |
permissions.deny | array of strings | Regeln für blockierte Tool-Aufrufe. Höchste Priorität – überschreibt sowohl allow als auch ask. | undefined |
Tool-Namen-Aliase (jeder dieser Namen funktioniert in Regeln):
| Alias | Canonical tool | Notes |
|---|---|---|
Bash, Shell | run_shell_command | |
Read, ReadFile | read_file | Meta-Kategorie – siehe unten |
Edit, EditFile | edit | Meta-Kategorie – siehe unten |
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 |
Meta-Kategorien:
Einige Regelnamen decken automatisch mehrere Tools ab:
| Rule name | Tools covered |
|---|---|
Read | read_file, grep_search, glob, list_directory |
Edit | edit, write_file, notebook_edit |
[!important]
Read(/path/**)trifft auf alle vier Read-Tools zu (Datei lesen, grep, glob und Verzeichnisauflistung). Um nur das Lesen von Dateien einzuschränken, verwendeReadFile(/path/**)oderread_file(/path/**).
Beispiele für die Regel-Syntax:
| Rule | Meaning |
|---|---|
"Bash" | Alle Shell-Befehle |
"Bash(git *)" | Shell-Befehle, die mit git beginnen (Wortgrenze: NICHT gitk) |
"Bash(git push *)" | Shell-Befehle wie git push origin main |
"Bash(npm run *)" | Jedes npm run-Skript |
"Read" | Alle Datei-Leseoperationen (read, grep, glob, list) |
"Read(./secrets/**)" | Liest rekursiv jede Datei unter ./secrets/ |
"Edit(/src/**/*.ts)" | Bearbeitet TypeScript-Dateien unter dem Projekt-Root /src/ |
"WebFetch(api.example.com)" | Fetcht von api.example.com und allen Subdomains |
"mcp__puppeteer" | Alle Tools vom Puppeteer-MCP-Server |
Präfixe für Pfadmuster:
| Prefix | Meaning | Example |
|---|---|---|
// | Absoluter Pfad vom Dateisystem-Root | //etc/passwd |
~/ | Relativ zum Home-Verzeichnis | ~/Documents/*.pdf |
/ | Relativ zum Projekt-Root | /src/**/*.ts |
./ | Relativ zum aktuellen Arbeitsverzeichnis | ./secrets/** |
| (none) | Entspricht ./ | secrets/** |
Verhinderung von Shell-Befehlsumgehungen:
Permission-Regeln für Read, Edit und WebFetch werden auch durchgesetzt, wenn der Agent äquivalente Shell-Befehle ausführt. Wenn beispielsweise Read(./.env) in deny enthalten ist, kann der Agent dies nicht über cat .env in einem Shell-Befehl umgehen. Unterstützte Shell-Befehle umfassen cat, grep, curl, wget, cp, mv, rm, chmod und viele weitere. Unbekannte/sichere Befehle (z. B. git) sind von Datei-/Netzwerkregeln nicht betroffen.
Migration von Legacy-Einstellungen:
| Legacy setting | Equivalent permissions rule | Notes |
|---|---|---|
tools.allowed | permissions.allow | Wird beim ersten Laden automatisch migriert |
tools.exclude | permissions.deny | Wird beim ersten Laden automatisch migriert |
tools.core | permissions.allow (Allowlist) | Automatisch migriert; nicht aufgeführte Tools werden auf Registry-Ebene deaktiviert |
Beispielkonfiguration:
{
"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] Verwende
/permissionsin der interaktiven CLI, um Regeln anzuzeigen, hinzuzufügen und zu entfernen, ohnesettings.jsondirekt zu bearbeiten.
slashCommands
Steuert, welche Slash-Befehle in der CLI verfügbar sind. Nützlich, um die Befehlsoberfläche in Multi-Tenant- oder Enterprise-Deployments einzuschränken.
| Setting | Type | Description | Default |
|---|---|---|---|
slashCommands.disabled | array of strings | Namen der Slash-Befehle, die ausgeblendet werden und deren Ausführung verweigert werden soll. Wird case-insensitive mit dem finalen Befehlsnamen abgeglichen (bei Extension-Befehlen ist dies die disambiguierte Form, z. B. myext.deploy). Wird als Union über alle Scopes zusammengeführt, sodass Workspace-Einstellungen Einträge aus User- oder System-Einstellungen hinzufügen, aber nicht entfernen können. | undefined |
Dieselbe Denylist kann auch über den CLI-Flag --disabled-slash-commands (kommagetrennt oder wiederholt) und die Umgebungsvariable QWEN_DISABLED_SLASH_COMMANDS bereitgestellt werden; Werte aus allen drei Quellen werden zusammengeführt.
Beispiel – Built-ins für ein sandboxed Deployment sperren:
{
"slashCommands": {
"disabled": ["auth", "mcp", "extensions", "ide", "quit"]
}
}Mit diesen Werten in einer systemweiten settings.json (/etc/qwen-code/settings.json oder QWEN_CODE_SYSTEM_SETTINGS_PATH) können Benutzer die Denylist nicht aus ihrem eigenen Scope verkleinern, und die deaktivierten Befehle erscheinen weder in der Autovervollständigung noch werden sie bei Eingabe ausgeführt.
[!note] Diese Einstellung beschränkt nur Slash-Befehle (z. B.
/auth,/mcp). Sie beeinflusst nicht die Tool-Permissions – siehe dafürpermissions.deny. Sie fängt auch keine Tastenkombinationen wieCtrl+CoderEscab.
skills
Steuert, welche Skills dem Modell zur Verfügung gestellt werden.
| Setting | Type | Description | Default |
|---|---|---|---|
skills.disabled | array of strings | Namen der Skills, die ausgeblendet werden sollen. Wird case-insensitive mit dem Skill-Namen abgeglichen. Ausgeblendete Skills erscheinen weder in <available_skills> noch als /<name>-Slash-Befehle. Wird als Union zusammengeführt über User-/Projekt-/System-Scopes, sodass ein Projekt keine Einträge entfernen kann, die in User- oder System-Einstellungen definiert wurden. | undefined |
mcp
| Setting | Type | Description | Default |
|---|---|---|---|
mcp.serverCommand | string | Befehl zum Starten eines MCP-Servers. | undefined |
mcp.allowed | array of strings | Eine Allowlist von MCP-Servern, die zugelassen werden sollen. Ermöglicht die Angabe einer Liste von MCP-Servernamen, die dem Modell zur Verfügung gestellt werden sollen. Dies kann verwendet werden, um die Menge der zu verbindenden MCP-Server einzuschränken. Unterstützt Glob-Muster (* matcht jede Sequenz, ? matcht ein einzelnes Zeichen – z. B. "*puppeteer*"); Einträge ohne Glob-Zeichen werden exakt abgeglichen. Beachte, dass dies ignoriert wird, wenn --allowed-mcp-server-names gesetzt ist. | undefined |
mcp.excluded | array of strings | Eine Denylist von MCP-Servern, die ausgeschlossen werden sollen. Ein Server, der sowohl in mcp.excluded als auch in mcp.allowed aufgeführt ist, wird ausgeschlossen. Unterstützt Glob-Muster (*, ?) auf dieselbe Weise wie mcp.allowed. Beachte, dass dies ignoriert wird, wenn --allowed-mcp-server-names gesetzt ist. | undefined |
mcp.toolIdleTimeoutMs | number | Idle-Timeout in Millisekunden für MCP-Tool-Aufrufe. Wenn der MCP-Server innerhalb dieser Zeit keine Antwort oder Statusaktualisierung liefert, wird der Aufruf abgebrochen. Muss zwischen 10000 und 3600000 liegen. Kann über die Umgebungsvariable QWEN_CODE_MCP_TOOL_IDLE_TIMEOUT_MS überschrieben werden. | 300000 |
Sicherheitshinweis für MCP-Server: Diese Einstellungen verwenden einfaches String-Matching auf MCP-Servernamen, die geändert werden können. Wenn du als Systemadministrator verhindern möchtest, dass Benutzer dies umgehen, solltest du die mcpServers auf der Ebene der Systemeinstellungen konfigurieren, sodass der Benutzer keine eigenen MCP-Server konfigurieren kann. Dies sollte nicht als wasserdichter Sicherheitsmechanismus verwendet werden.
lsp
[!warning] Experimentelles Feature: LSP-Support ist derzeit experimentell und standardmäßig deaktiviert. Aktiviere ihn mit dem
--experimental-lspCommand-Line-Flag.
Das Language Server Protocol (LSP) bietet Code-Intelligence-Features wie Go-to-Definition, Referenzen suchen und Diagnostics.
Die LSP-Server-Konfiguration erfolgt über .lsp.json-Dateien in deinem Projekt-Root-Verzeichnis, nicht über settings.json. Siehe die LSP-Dokumentation für Konfigurationsdetails und Beispiele.
security
| Einstellung | Typ | Beschreibung | Standard |
|---|---|---|---|
security.folderTrust.enabled | boolean | Einstellung zur Nachverfolgung, ob Folder-Trust aktiviert ist. | false |
security.auth.selectedType | string | Der aktuell ausgewählte Authentifizierungstyp. | undefined |
security.auth.enforcedType | string | Der erforderliche Authentifizierungstyp (nützlich für Unternehmen). | undefined |
security.auth.useExternal | boolean | Gibt an, ob ein externer Authentifizierungs-Flow verwendet werden soll. | undefined |
security.auth.apiKey | string | Veraltet. API-Key für die OpenAI-kompatible Authentifizierung. Migriere stattdessen zu modelProviders mit envKey – siehe Model Providers. | undefined |
security.auth.baseUrl | string | Veraltet. Base-URL für die OpenAI-kompatible API. Migriere stattdessen zu modelProviders – siehe Model Providers. | undefined |
advanced
| Einstellung | Typ | Beschreibung | Standard |
|---|---|---|---|
advanced.autoConfigureMemory | boolean | Konfiguriert die Node.js-Speicherlimits automatisch. | false |
advanced.dnsResolutionOrder | string | Die DNS-Auflösungsreihenfolge. | undefined |
advanced.excludedEnvVars | array of strings | Umgebungsvariablen, die vom Projekt-Kontext ausgeschlossen werden sollen. Gibt Umgebungsvariablen an, die nicht aus den .env-Dateien des Projekts geladen werden sollen. Dies verhindert, dass projektspezifische Umgebungsvariablen (wie DEBUG=true) das CLI-Verhalten beeinträchtigen. Variablen aus .qwen/.env-Dateien werden niemals ausgeschlossen. | ["DEBUG","DEBUG_MODE"] |
advanced.bugCommand | object | Konfiguration für den Bug-Report-Befehl. Überschreibt die Standard-URL für den /bug-Befehl. Eigenschaften: urlTemplate (string): Eine URL, die die Platzhalter {title} und {info} enthalten kann. Beispiel: "bugCommand": { "urlTemplate": "https://bug.example.com/new?title={title}&info={info}" } | undefined |
plansDirectory | string | Benutzerdefiniertes Verzeichnis für genehmigte Plan-Mode-Dateien. Relative Pfade werden vom Projekt-Root aufgelöst, und der aufgelöste Pfad muss innerhalb des Projekt-Roots bleiben. Wenn nicht gesetzt, werden Plan-Dateien in ~/.qwen/plans gespeichert. Erfordert einen Neustart. Wenn sich das Verzeichnis innerhalb des Projekt-Roots befindet, füge es zur .gitignore hinzu, um zu vermeiden, dass Plan-Dateien committet werden. | undefined |
experimental
Experimentelle Features. Diese Toggles schalten sich in der Entwicklung befindliche Funktionen frei und können sich in zukünftigen Releases ändern oder entfernt werden.
| Einstellung | Typ | Beschreibung | Standard |
|---|---|---|---|
experimental.cron | boolean | Aktiviert die In-Session-Cron/Loop-Tools (cron_create, cron_list, cron_delete), sodass das Modell wiederkehrende Prompts erstellen kann. Kann über die Umgebungsvariable QWEN_CODE_DISABLE_CRON=1 deaktiviert werden. Erfordert einen Neustart. | true |
experimental.cronRecurringMaxAgeDays | number | Anzahl der Tage, die ein wiederkehrender Cron/Loop-Job lebt, bevor er automatisch abläuft (er wird ein letztes Mal ausgeführt und dann gelöscht). Setze den Wert auf 0, um den Ablauf zu deaktivieren, sodass Jobs bis zur manuellen Löschung laufen – nützlich für langlaufende Daemon-Deployments. Kann über die Umgebungsvariable QWEN_CODE_CRON_MAX_AGE_DAYS überschrieben werden. Erfordert einen Neustart. | 7 |
experimental.agentTeam | boolean | Aktiviert die Agent-Team-Kollaborationstools (team_create, task_create, task_update, send_message usw.) für die Multi-Agent-Koordination. Kann auch über QWEN_CODE_ENABLE_AGENT_TEAM=1 aktiviert werden. Erfordert einen Neustart. | false |
experimental.artifact | boolean | Aktiviert das Artifact-Tool, mit dem das Modell eine in sich geschlossene HTML-Seite veröffentlichen und im Browser öffnen kann. Nur für interaktive Non-SDK-Sessions. QWEN_CODE_ENABLE_ARTIFACT=1 aktiviert das reine Metadaten-Tool record_artifact für Non-SDK-Daemon-Sessions und aktiviert außerdem das Artifact-Tool in interaktiven Sessions; QWEN_CODE_DISABLE_ARTIFACT=1 deaktiviert beides. Erfordert einen Neustart. | false |
experimental.emitToolUseSummaries | boolean | Generiert ein kurzes LLM-basiertes Label, nachdem jeder Tool-Call-Batch abgeschlossen ist. Siehe Tool-Use Summaries. Erfordert, dass ein schnelles Modell konfiguriert ist (fastModel); wird andernfalls stillschweigend übersprungen. Kann pro Session mit QWEN_CODE_EMIT_TOOL_USE_SUMMARIES=0 oder =1 überschrieben werden. | true |
mcpServers
Konfiguriert Verbindungen zu einem oder mehreren Model-Context Protocol (MCP)-Servern zum Entdecken und Verwenden benutzerdefinierter Tools. Qwen Code versucht, eine Verbindung zu jedem konfigurierten MCP-Server herzustellen, um verfügbare Tools zu entdecken. Wenn mehrere MCP-Server ein Tool mit demselben Namen bereitstellen, werden den Tool-Namen der Server-Alias vorangestellt, den du in der Konfiguration definiert hast (z. B. serverAlias__actualToolName), um Konflikte zu vermeiden. Beachte, dass das System aus Kompatibilitätsgründen bestimmte Schema-Eigenschaften aus MCP-Tool-Definitionen entfernen kann. Mindestens eine der Optionen command, url oder httpUrl muss angegeben werden. Wenn mehrere angegeben sind, ist die Prioritätenreihenfolge httpUrl, dann url, dann command.
| Eigenschaft | Typ | Beschreibung | Optional |
|---|---|---|---|
mcpServers.<SERVER_NAME>.command | string | Der Befehl, der ausgeführt wird, um den MCP-Server über Standard-I/O zu starten. | Ja |
mcpServers.<SERVER_NAME>.args | array of strings | Argumente, die an den Befehl übergeben werden. | Ja |
mcpServers.<SERVER_NAME>.env | object | Umgebungsvariablen, die für den Server-Prozess gesetzt werden. | Ja |
mcpServers.<SERVER_NAME>.cwd | string | Das Arbeitsverzeichnis, in dem der Server gestartet wird. | Ja |
mcpServers.<SERVER_NAME>.url | string | Die URL eines MCP-Servers, der Server-Sent Events (SSE) für die Kommunikation verwendet. | Ja |
mcpServers.<SERVER_NAME>.httpUrl | string | Die URL eines MCP-Servers, der streamable HTTP für die Kommunikation verwendet. | Ja |
mcpServers.<SERVER_NAME>.headers | object | Ein Map von HTTP-Headern, die mit Requests an url oder httpUrl gesendet werden. | Ja |
mcpServers.<SERVER_NAME>.timeout | number | Timeout in Millisekunden für Requests an diesen MCP-Server. | Ja |
mcpServers.<SERVER_NAME>.trust | boolean | Vertraue diesem Server und umgehe alle Tool-Call-Bestätigungen. | Ja |
mcpServers.<SERVER_NAME>.description | string | Eine kurze Beschreibung des Servers, die für Anzeigezwecke verwendet werden kann. | Ja |
mcpServers.<SERVER_NAME>.includeTools | array of strings | Liste der Tool-Namen, die von diesem MCP-Server eingeschlossen werden sollen. Wenn angegeben, sind nur die hier aufgeführten Tools von diesem Server verfügbar (Allowlist-Verhalten). Wenn nicht angegeben, sind standardmäßig alle Tools des Servers aktiviert. | Ja |
mcpServers.<SERVER_NAME>.excludeTools | array of strings | Liste der Tool-Namen, die von diesem MCP-Server ausgeschlossen werden sollen. Die hier aufgeführten Tools stehen dem Modell nicht zur Verfügung, auch wenn sie vom Server bereitgestellt werden. Hinweis: excludeTools hat Vorrang vor includeTools – wenn ein Tool in beiden Listen enthalten ist, wird es ausgeschlossen. | Ja |
Telemetrie
Konfiguriert das Logging und die Metrikerfassung für Qwen Code. Weitere Informationen findest du unter telemetry.
| Einstellung | Typ | Beschreibung | Standard |
|---|---|---|---|
telemetry.enabled | boolean | Gibt an, ob Telemetrie aktiviert ist. | |
telemetry.target | string | Informations-Label für das Telemetrie-Ziel (local oder gcp). Steuert nicht das Exporter-Routing; setze telemetry.otlpEndpoint oder telemetry.outfile, um zu konfigurieren, wohin die Daten gesendet werden. | |
telemetry.otlpEndpoint | string | Der Endpunkt für den OTLP-Exporter. | |
telemetry.otlpProtocol | string | Das Protokoll für den OTLP-Exporter (grpc oder http). | |
telemetry.logPrompts | boolean | Gibt an, ob der Inhalt von Benutzer-Prompts in die Logs aufgenommen wird. | |
telemetry.includeSensitiveSpanAttributes | boolean | Wenn aktiviert, werden wortwörtliche Benutzer-Prompts, System-Prompts, Tool-Inputs/Outputs und Modell-Antworten an native OTel-Span-Attribute angehängt (zusätzlich zu den Log-to-Span-Bridge-Spans). ⚠️ Streamt sensible Daten – Dateiinhalte, Shell-Befehle, Konversationsverlauf – an dein OTLP-Backend. | false |
telemetry.sensitiveSpanAttributeMaxLength | number | Maximale JavaScript-Stringlänge für jeden sensiblen nativen OTel-Span-Attribut-Content-Payload. Muss zwischen 1 und 104857600 (100 MiB) liegen. Setze diesen Wert niedriger, wenn dein Collector oder Backend große Attribute ablehnt. | 1048576 |
telemetry.outfile | string | Pfad, um Telemetrie in eine Datei zu schreiben. Wenn gesetzt, wird der OTLP-Export überschrieben. |
Beispiel settings.json
Hier ist ein Beispiel für eine settings.json-Datei mit der verschachtelten Struktur, neu ab v0.3.0:
{
"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,
"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"]
}
}Shell-Verlauf
Die CLI speichert einen Verlauf der Shell-Befehle, die du ausführst. Um Konflikte zwischen verschiedenen Projekten zu vermeiden, wird dieser Verlauf in einem projektspezifischen Verzeichnis innerhalb deines Home-Verzeichnisses gespeichert.
- Speicherort:
~/.qwen/tmp/<project_hash>/shell_history<project_hash>ist ein eindeutiger Bezeichner, der aus dem Root-Pfad deines Projekts generiert wird.- Der Verlauf wird in einer Datei namens
shell_historygespeichert.
Umgebungsvariablen & .env-Dateien
Umgebungsvariablen sind eine gängige Methode zur Konfiguration von Anwendungen, insbesondere für sensible Informationen (wie Tokens) oder für Einstellungen, die sich zwischen verschiedenen Umgebungen ändern können.
Qwen Code kann Umgebungsvariablen automatisch aus .env-Dateien laden.
Für authentifizierungsrelevante Variablen (wie OPENAI_*) und den empfohlenen .qwen/.env-Ansatz siehe Authentication.
Ausschluss von Umgebungsvariablen: Einige Umgebungsvariablen (wie DEBUG und DEBUG_MODE) werden standardmäßig automatisch aus projektbezogenen .env-Dateien ausgeschlossen, um Interferenzen mit dem CLI-Verhalten zu verhindern. Variablen aus .qwen/.env-Dateien werden niemals ausgeschlossen. Du kannst dieses Verhalten über die advanced.excludedEnvVars-Einstellung in deiner settings.json-Datei anpassen.
Tabelle der Umgebungsvariablen
| Variable | Beschreibung | Hinweise |
|---|---|---|
QWEN_HOME | Passt das globale Konfigurationsverzeichnis an (Standard: ~/.qwen). Akzeptiert einen absoluten oder relativen Pfad (relative Pfade werden vom aktuellen Arbeitsverzeichnis aus aufgelöst). Ein vorangestelltes ~ wird zum Home-Verzeichnis des Benutzers expandiert. | Speichert Credentials, Einstellungen, Memory, Skills und anderen globalen State. Wenn gesetzt, bleiben .qwen/-Verzeichnisse auf Projektebene unberührt. Ein leerer String wird wie nicht gesetzt behandelt. |
QWEN_RUNTIME_DIR | Überschreibt das Runtime-Output-Verzeichnis (Konversationen, Logs, Todos). Wenn nicht gesetzt, ist standardmäßig das QWEN_HOME-Verzeichnis eingestellt. | Verwende dies, um flüchtige Runtime-Daten von der persistenten Konfiguration zu trennen. Nützlich, wenn sich QWEN_HOME auf einem gemeinsam genutzten oder langsamen Dateisystem befindet. |
QWEN_TELEMETRY_ENABLED | Setze dies auf true oder 1, um Telemetrie zu aktivieren. Jeder andere Wert wird als Deaktivierung behandelt. | Überschreibt die telemetry.enabled-Einstellung. |
QWEN_TELEMETRY_TARGET | Setzt ein Informations-Label für das Telemetrie-Ziel (local oder gcp). Steuert nicht das Routing; verwende QWEN_TELEMETRY_OTLP_ENDPOINT oder QWEN_TELEMETRY_OUTFILE, um zu konfigurieren, wohin die Daten gesendet werden. | Überschreibt die telemetry.target-Einstellung. |
QWEN_TELEMETRY_OTLP_ENDPOINT | Setzt den OTLP-Endpunkt für Telemetrie. | Überschreibt die telemetry.otlpEndpoint-Einstellung. |
QWEN_TELEMETRY_OTLP_PROTOCOL | Setzt das OTLP-Protokoll (grpc oder http). | Überschreibt die telemetry.otlpProtocol-Einstellung. |
QWEN_TELEMETRY_LOG_PROMPTS | Setze dies auf true oder 1, um das Logging von Benutzer-Prompts zu aktivieren. Jeder andere Wert wird als Deaktivierung behandelt. | Überschreibt die telemetry.logPrompts-Einstellung. |
QWEN_TELEMETRY_INCLUDE_SENSITIVE_SPAN_ATTRIBUTES | Setze dies auf true oder 1, um wortwörtliche Benutzer-Prompts, System-Prompts, Tool-I/O und Modell-Antworten an native OTel-Span-Attribute anzuhängen (und prompt / function_args / response_text auf Log-to-Span-Bridge-Spans zu belassen). Jeder andere Wert deaktiviert dies. | Überschreibt die telemetry.includeSensitiveSpanAttributes-Einstellung. ⚠️ Streamt sensible Daten an dein OTLP-Backend. |
QWEN_TELEMETRY_SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTH | Setzt die maximale JavaScript-Stringlänge für jeden sensiblen nativen OTel-Span-Attribut-Content-Payload. Muss eine positive ganze Zahl sein, die nicht größer als 104857600 (100 MiB) ist. | Überschreibt die telemetry.sensitiveSpanAttributeMaxLength-Einstellung. Standard ist 1048576 (1 MiB); setze diesen Wert niedriger, wenn dein Collector oder Backend große Span-Attribute ablehnt. |
QWEN_TELEMETRY_OUTFILE | Setzt den Dateipfad, in den Telemetrie geschrieben werden soll. Wenn gesetzt, wird der OTLP-Export überschrieben. | Überschreibt die telemetry.outfile-Einstellung. |
QWEN_SANDBOX | Alternative zur sandbox-Einstellung in settings.json. | Akzeptiert true, false, docker, podman oder einen benutzerdefinierten Command-String. |
QWEN_SANDBOX_IMAGE | Überschreibt die Sandbox-Image-Auswahl für Docker/Podman. | Hat Vorrang vor tools.sandboxImage. |
SEATBELT_PROFILE | (macOS-spezifisch) Wechselt das Seatbelt-(sandbox-exec)-Profil auf macOS. | permissive-open: (Standard) Schränkt Schreibzugriffe auf den Projektordner (und einige andere Ordner, siehe packages/cli/src/utils/sandbox-macos-permissive-open.sb) ein, erlaubt aber andere Operationen. strict: Verwendet ein strenges Profil, das Operationen standardmäßig ablehnt. <profile_name>: Verwendet ein benutzerdefiniertes Profil. Um ein benutzerdefiniertes Profil zu definieren, erstelle eine Datei namens sandbox-macos-<profile_name>.sb im .qwen/-Verzeichnis deines Projekts (z. B. my-project/.qwen/sandbox-macos-custom.sb). |
DEBUG oder DEBUG_MODE | (wird oft von zugrunde liegenden Bibliotheken oder der CLI selbst verwendet) Setze dies auf true oder 1, um ausführliches Debug-Logging zu aktivieren, was bei der Fehlerbehebung hilfreich sein kann. | Hinweis: Diese Variablen werden standardmäßig automatisch aus projektbezogenen .env-Dateien ausgeschlossen, um Interferenzen mit dem CLI-Verhalten zu verhindern. Verwende .qwen/.env-Dateien, wenn du diese speziell für Qwen Code setzen musst. |
NO_COLOR | Setze dies auf einen beliebigen Wert, um die gesamte Farbausgabe in der CLI zu deaktivieren. | |
FORCE_HYPERLINK | Überschreibt die OSC-8-Erkennung für klickbare Links im Markdown-Renderer. Setze dies auf 1 (oder eine beliebige Ganzzahl ungleich Null oder einen leeren String), um es zu erzwingen; setze es auf 0 oder einen nicht-numerischen Wert wie false / off, um es zu deaktivieren. Beachtet NO_COLOR / QWEN_DISABLE_HYPERLINKS-Opt-outs darüber. | Verwende dies, um OSC 8 innerhalb von tmux / GNU screen zu aktivieren (die Auto-Detection lehnt standardmäßig ab, da die Fähigkeiten des Host-Terminals hinter dem Multiplexer verborgen sind). Erfordert set -g allow-passthrough on unter tmux 3.3+. Aktiviert außerdem Hyper, was nicht automatisch erkannt wird. |
QWEN_DISABLE_HYPERLINKS | Setze dies auf 1, um OSC-8-klickbare Hyperlinks im Markdown-Renderer hart zu deaktivieren, sogar auf Terminals, die automatisch als fähig erkannt werden. | Nützlich, wenn ein Terminal Support meldet, aber bei langen URLs abbricht, oder wenn die Ausgabe durch ein Intermediär gepiped wird, das Escape-Sequenzen verstümmelt. Der Renderer fällt auf das einfache label (url)-Rendering zurück. |
CLI_TITLE | Setze dies auf einen String, um den Titel der CLI anzupassen. | |
CODE_ASSIST_ENDPOINT | Gibt den Endpunkt für den Code-Assist-Server an. | Dies ist nützlich für Entwicklung und Testing. |
QWEN_CODE_MAX_OUTPUT_TOKENS | Überschreibt die standardmäßigen maximalen Output-Tokens pro Antwort. Wenn nicht gesetzt, verwendet Qwen Code standardmäßig das deklarierte Output-Limit des Modells und eskaliert (64K-Basis) automatisch und stellt sich über Turns hinweg wieder her, wenn eine Antwort abgeschnitten wird. Setze dies auf einen bestimmten Wert (z. B. 16000), um stattdessen ein festes Limit zu verwenden – nützlich für kapazitätsbeschränkte Self-Hosted-Backends, die eine niedrigere Slot-Reservierung pro Request wünschen. | Hat Vorrang vor dem Model-Limit-Standard, wird aber durch samplingParams.max_tokens in den Einstellungen überschrieben. Deaktiviert die automatische Eskalation, wenn gesetzt. Beispiel: export QWEN_CODE_MAX_OUTPUT_TOKENS=16000 |
QWEN_CODE_UNATTENDED_RETRY | Setze dies auf true oder 1, um den Persistent-Retry-Modus zu aktivieren. Wenn aktiviert, werden vorübergehende API-Kapazitätsfehler (HTTP 429 Rate Limit und 529 Overloaded) unbegrenzt mit exponentiellem Backoff (gedeckelt auf 5 Minuten pro Retry) und Heartbeat-Keepalives alle 30 Sekunden auf stderr wiederholt. | Entwickelt für CI/CD-Pipelines und Hintergrundautomatisierung, bei denen langlaufende Tasks vorübergehende API-Ausfälle überstehen sollen. Muss explizit gesetzt werden – CI=true allein aktiviert diesen Modus nicht. Siehe Headless Mode für Details. Beispiel: export QWEN_CODE_UNATTENDED_RETRY=1 |
QWEN_CODE_PROFILE_STARTUP | Setze dies auf 1, um das Startup-Performance-Profiling zu aktivieren. Schreibt einen JSON-Timing-Report mit Dauerwerten pro Phase nach ~/.qwen/startup-perf/. | Nur aktiv innerhalb des Sandbox-Child-Prozesses (oder mit QWEN_CODE_PROFILE_STARTUP_OUTER=1). Kein Overhead, wenn nicht gesetzt. Beispiel: export QWEN_CODE_PROFILE_STARTUP=1 |
QWEN_CODE_PROFILE_STARTUP_OUTER | Setze dies zusammen mit QWEN_CODE_PROFILE_STARTUP=1 auf 1, um auch im äußeren (Pre-Sandbox)-Prozess ein Startup-Profil zu sammeln. Outer-Process-Reports erhalten das Dateinamen-Präfix outer-, um sie vom Report des Sandbox-Childs zu unterscheiden. | Standardmäßig deaktiviert – nur der Sandbox-Child sammelt, um doppelte Reports zu vermeiden. Nützlich für die lokale Entwicklung, bei der die CLI nicht neu in einer Sandbox gestartet wird. |
QWEN_CODE_PROFILE_STARTUP_NO_HEAP | Setze dies zusammen mit QWEN_CODE_PROFILE_STARTUP=1 auf 1, um die process.memoryUsage()-Snapshots pro Checkpoint zu überspringen. Nützlich bei der Messung des eigenen Heisenberg-Overheads des Profilers. | Standardmäßig deaktiviert. Heap-Snapshots kosten jeweils ~50 µs (weit unter 1 % der gesamten Startup-Zeit), daher sollten die meisten Benutzer dies unverändert lassen. |
QWEN_CODE_LEGACY_MCP_BLOCKING | Setze dies auf 1, um das Pre-Progressive-MCP-Verhalten wiederherzustellen, bei dem Config.initialize() synchron auf den Discover-Handshake jedes konfigurierten MCP-Servers wartet, bevor es zurückkehrt. | Standardmäßig deaktiviert. Modernes qwen-code lässt MCP-Server im Hintergrund online gehen, während die UI bereits interaktiv ist; das Modell sieht jeden Batch neuer Tools innerhalb von ~16 ms, nachdem der Server bereit ist. Dieser Flag wird als Rollback-Escape-Hatch für ≥ 1 Release beibehalten. Beispiel: export QWEN_CODE_LEGACY_MCP_BLOCKING=1 |
Wenn beide .env-Dateien auf Benutzerebene dieselbe Variable definieren, hat die Qwen-spezifische Datei Vorrang: <QWEN_HOME>/.env (oder ~/.qwen/.env, wenn QWEN_HOME nicht gesetzt ist) wird vor ~/.env geladen, und vorhandene Umgebungswerte werden nicht überschrieben. |
Befehlszeilenargumente
Argumente, die direkt beim Ausführen der CLI übergeben werden, können andere Konfigurationen für diese spezifische Sitzung überschreiben.
Für die Auswahl des Sandbox-Images gilt folgende Priorität:
--sandbox-image > QWEN_SANDBOX_IMAGE > tools.sandboxImage > integriertes Standard-Image.
Tabelle der Befehlszeilenargumente
| Argument | Alias | Beschreibung | Mögliche Werte | Hinweise |
|---|---|---|---|---|
--model | -m | Gibt das Qwen-Modell an, das für diese Sitzung verwendet werden soll. | Modellname | Beispiel: npm start -- --model qwen3-coder-plus |
--prompt | -p | Wird verwendet, um einen Prompt direkt an den Befehl zu übergeben. Dies ruft Qwen Code in einem nicht-interaktiven Modus auf. | Prompt-Text | Für Skriptbeispiele verwende das Flag --output-format json, um strukturierte Ausgaben zu erhalten. |
--prompt-interactive | -i | Startet eine interaktive Sitzung mit dem angegebenen Prompt als anfängliche Eingabe. | Prompt-Text | Der Prompt wird innerhalb der interaktiven Sitzung verarbeitet, nicht davor. Kann nicht verwendet werden, wenn Eingaben von stdin gepipt werden. Beispiel: qwen -i "explain this code" |
--system-prompt | Überschreibt den integrierten System-Prompt der Hauptsitzung für diesen Durchlauf. | Prompt-Text | Geladene Kontextdateien wie QWEN.md werden auch nach dieser Überschreibung weiterhin angehängt. Kann mit --append-system-prompt kombiniert werden. | |
--append-system-prompt | Hängt zusätzliche Anweisungen an den System-Prompt der Hauptsitzung für diesen Durchlauf an. | Prompt-Text | Wird nach dem integrierten Prompt und den geladenen Kontextdateien angewendet. Kann mit --system-prompt kombiniert werden. Siehe Headless Mode für Beispiele. | |
--output-format | -o | Gibt das Format der CLI-Ausgabe für den nicht-interaktiven Modus an. | text, json, stream-json | text: (Standard) Die standardmäßige, menschenlesbare Ausgabe. json: Eine maschinenlesbare JSON-Ausgabe, die am Ende der Ausführung emittiert wird. stream-json: Streaming-JSON-Nachrichten, die während der Ausführung emittiert werden, sobald sie auftreten. Für strukturierte Ausgaben und Skripting verwende das Flag --output-format json oder --output-format stream-json. Siehe Headless Mode für detaillierte Informationen. |
--input-format | Gibt das Format an, das von der Standardeingabe konsumiert wird. | text, stream-json | text: (Standard) Standard-Texteingabe von stdin oder Befehlszeilenargumenten. stream-json: JSON-Nachrichtenprotokoll über stdin für bidirektionale Kommunikation. Voraussetzung: --input-format stream-json erfordert, dass --output-format stream-json gesetzt ist. Bei der Verwendung von stream-json ist stdin für Protokollnachrichten reserviert. Siehe Headless Mode für detaillierte Informationen. | |
--include-partial-messages | Schließt teilweise Assistenten-Nachrichten ein, wenn das stream-json-Ausgabeformat verwendet wird. Wenn aktiviert, werden Stream-Events (message_start, content_block_delta, etc.) emittiert, sobald sie während des Streamings auftreten. | Standard: false. Voraussetzung: Erfordert, dass --output-format stream-json gesetzt ist. Siehe Headless Mode für detaillierte Informationen zu Stream-Events. | ||
--sandbox | -s | Aktiviert den Sandbox-Modus für diese Sitzung. | ||
--sandbox-image | Legt die Sandbox-Image-URI fest. | |||
--debug | -d | Aktiviert den Debug-Modus für diese Sitzung und bietet eine ausführlichere Ausgabe. | ||
--help | -h | Zeigt Hilfeinformationen zu den Befehlszeilenargumenten an. | ||
--yolo | Aktiviert den YOLO-Modus, der alle Tool-Aufrufe automatisch genehmigt. | |||
--approval-mode | Legt den Genehmigungsmodus für Tool-Aufrufe fest. | plan, default, auto-edit, auto, yolo | Unterstützte Modi: plan: Nur analysieren – keine Dateien ändern oder Befehle ausführen. default: Genehmigung für Dateiänderungen oder Shell-Befehle erforderlich (Standardverhalten). auto-edit: Edit-Tools (edit, write_file, notebook_edit) automatisch genehmigen, für andere nachfragen. auto: LLM-Klassifizierer genehmigt sichere Aktionen automatisch und blockiert riskante. yolo: Alle Tool-Aufrufe automatisch genehmigen (entspricht --yolo). Kann nicht zusammen mit --yolo verwendet werden. Verwende --approval-mode=yolo anstelle von --yolo für den neuen einheitlichen Ansatz. Beispiel: qwen --approval-mode auto-editSiehe mehr über Approval Mode. | |
--allowed-tools | Eine durch Kommas getrennte Liste von Tool-Namen, die den Bestätigungsdialog umgehen. | Tool-Namen | Beispiel: qwen --allowed-tools "Shell(git status)" | |
--disabled-slash-commands | Namen von Slash-Befehlen zum Ausblenden/Deaktivieren (durch Kommas getrennt oder wiederholt). Wird mit der Einstellung slashCommands.disabled und der Umgebungsvariable QWEN_DISABLED_SLASH_COMMANDS vereinigt. Wird ohne Berücksichtigung der Groß-/Kleinschreibung mit dem endgültigen Befehlsnamen abgeglichen. | Befehlsnamen | Beispiel: qwen --disabled-slash-commands "auth,mcp,extensions" | |
--telemetry | Aktiviert Telemetrie. | |||
--telemetry-target | Legt das Telemetrie-Ziel fest. | Siehe Telemetrie für weitere Informationen. | ||
--telemetry-otlp-endpoint | Legt den OTLP-Endpunkt für die Telemetrie fest. | Siehe Telemetrie für weitere Informationen. | ||
--telemetry-otlp-protocol | Legt das OTLP-Protokoll für die Telemetrie fest (grpc oder http). | Standardmäßig grpc. Siehe Telemetrie für weitere Informationen. | ||
--telemetry-log-prompts | Aktiviert die Protokollierung von Prompts für die Telemetrie. | Siehe Telemetrie für weitere Informationen. | ||
--acp | Aktiviert den ACP-Modus (Agent Client Protocol). Nützlich für IDE-/Editor-Integrationen wie Zed. | Stabil. Ersetzt das veraltete Flag --experimental-acp. | ||
--experimental-lsp | Aktiviert die experimentelle LSP (Language Server Protocol)-Funktion für Code-Intelligenz (Go-to-Definition, Referenzen finden, Diagnostik usw.). | Experimentell. Erfordert die Installation von Language Servern. | ||
--extensions | -e | Gibt eine Liste von Erweiterungen an, die für die Sitzung verwendet werden sollen. | Erweiterungsnamen | Wenn nicht angegeben, werden alle verfügbaren Erweiterungen verwendet. Verwende den speziellen Begriff qwen -e none, um alle Erweiterungen zu deaktivieren. Beispiel: qwen -e my-extension -e my-other-extension |
--list-extensions | -l | Listet alle verfügbaren Erweiterungen auf und beendet das Programm. | ||
--proxy | Legt den Proxy für die CLI fest. | Proxy-URL | Beispiel: --proxy http://localhost:7890. | |
--include-directories | Fügt dem Workspace zusätzliche Verzeichnisse hinzu, um die Unterstützung mehrerer Verzeichnisse zu ermöglichen. | Verzeichnispfade | Kann mehrfach oder als durch Kommas getrennte Werte angegeben werden. Maximal können 5 Verzeichnisse hinzugefügt werden. Beispiel: --include-directories /path/to/project1,/path/to/project2 oder --include-directories /path/to/project1 --include-directories /path/to/project2 | |
--screen-reader | Aktiviert den Screen-Reader-Modus, der die TUI für eine bessere Kompatibilität mit Screen Readern anpasst. | |||
--version | Zeigt die Version der CLI an. | |||
--openai-logging | Aktiviert die Protokollierung von OpenAI-API-Aufrufen zum Debuggen und Analysieren. | Dieses Flag überschreibt die Einstellung enableOpenAILogging in settings.json. | ||
--openai-logging-dir | Legt einen benutzerdefinierten Verzeichnispfad für OpenAI-API-Logs fest. | Verzeichnispfad | Dieses Flag überschreibt die Einstellung openAILoggingDir in settings.json. Unterstützt absolute Pfade, relative Pfade und die ~-Expansion. Beispiel: qwen --openai-logging-dir "~/qwen-logs" --openai-logging |
Kontextdateien (Hierarchischer Instruktionskontext)
Auch wenn Kontextdateien nicht streng genommen die Verhaltensweise der CLI konfigurieren (standardmäßig QWEN.md, konfigurierbar über die context.fileName-Einstellung), sind sie entscheidend für die Konfiguration des Instruktionskontextes (auch “Memory” genannt). Mit dieser leistungsstarken Funktion kannst du der KI projektspezifische Anweisungen, Coding-Style-Guides oder beliebige relevante Hintergrundinformationen geben, wodurch ihre Antworten besser auf deine Bedürfnisse zugeschnitten und genauer werden. Die CLI enthält UI-Elemente, wie z. B. eine Anzeige im Footer, die die Anzahl der geladenen Kontextdateien zeigt, um dich über den aktiven Kontext zu informieren.
- Zweck: Diese Markdown-Dateien enthalten Anweisungen, Richtlinien oder Kontext, den das Qwen-Modell während eurer Interaktionen kennen soll. Das System ist so konzipiert, dass es diesen Instruktionskontext hierarchisch verwaltet.
Beispielinhalt einer Kontextdatei (z. B. QWEN.md)
Hier ist ein konzeptionelles Beispiel dafür, was eine Kontextdatei im Stammverzeichnis eines TypeScript-Projekts enthalten könnte:
# 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.Dieses Beispiel zeigt, wie du allgemeinen Projektkontext, spezifische Coding-Konventionen und sogar Notizen zu bestimmten Dateien oder Komponenten bereitstellen kannst. Je relevanter und präziser deine Kontextdateien sind, desto besser kann die KI dich unterstützen. Projektspezifische Kontextdateien werden dringend empfohlen, um Konventionen und Kontext zu etablieren.
- Hierarchisches Laden und Priorität: Die CLI implementiert ein hierarchisches Memory-System, indem sie Kontextdateien (z. B.
QWEN.md) aus verschiedenen Verzeichnissen lädt. Inhalte aus Dateien weiter unten in dieser Liste (spezifischer) überschreiben oder ergänzen in der Regel Inhalte aus Dateien weiter oben (allgemeiner). Die genaue Verkettungsreihenfolge und der finale Kontext können im/memory-Dialog eingesehen werden. Die typische Ladereihenfolge ist:- Globale Kontextdatei:
- Speicherort:
~/.qwen/<configured-context-filename>(z. B.~/.qwen/QWEN.mdin deinem Benutzer-Home-Verzeichnis). - Geltungsbereich: Stellt Standardanweisungen für alle deine Projekte bereit.
- Speicherort:
- Kontextdateien im Projekt-Root und übergeordneten Verzeichnissen:
- Speicherort: Die CLI sucht im aktuellen Arbeitsverzeichnis nach der konfigurierten Kontextdatei und dann in jedem übergeordneten Verzeichnis bis entweder zum Projekt-Root (erkennbar an einem
.git-Ordner) oder zu deinem Home-Verzeichnis. - Geltungsbereich: Stellt Kontext bereit, der für das gesamte Projekt oder einen wesentlichen Teil davon relevant ist.
- Speicherort: Die CLI sucht im aktuellen Arbeitsverzeichnis nach der konfigurierten Kontextdatei und dann in jedem übergeordneten Verzeichnis bis entweder zum Projekt-Root (erkennbar an einem
- Globale Kontextdatei:
- Verkettung & UI-Anzeige: Die Inhalte aller gefundenen Kontextdateien werden verkettet (mit Trennzeichen, die auf ihre Herkunft und ihren Pfad hinweisen) und als Teil des System-Prompts bereitgestellt. Der CLI-Footer zeigt die Anzahl der geladenen Kontextdateien an und gibt dir so einen schnellen visuellen Hinweis auf den aktiven Instruktionskontext.
- Inhalte importieren: Du kannst deine Kontextdateien modularisieren, indem du andere Markdown-Dateien mit der Syntax
@path/to/file.mdimportierst. Weitere Details findest du in der Memory-Dokumentation. - Befehle zur Memory-Verwaltung:
- Verwende
/memory, um den Dialog zur Memory-Verwaltung zu öffnen. - Aktualisiere den Memory-Status über den Dialog, um Kontextdateien aus allen konfigurierten Verzeichnissen erneut zu scannen und neu zu laden.
- Siehe die Befehlsdokumentation für vollständige Details zum
/memory-Befehl.
- Verwende
Indem du diese Konfigurationsebenen und die hierarchische Natur von Kontextdateien verstehst und nutzt, kannst du den Memory der KI effektiv verwalten und die Antworten von Qwen Code genau auf deine spezifischen Bedürfnisse und Projekte zuschneiden.
Sandbox
Qwen Code kann potenziell unsichere Operationen (wie Shell-Befehle und Dateiänderungen) in einer Sandbox-Umgebung ausführen, um dein System zu schützen.
Die Sandbox ist standardmäßig deaktiviert, du kannst sie jedoch auf verschiedene Arten aktivieren:
- Verwendung des
--sandbox- oder-s-Flags. - Setzen der
QWEN_SANDBOX-Umgebungsvariable. - Setzen von
tools.sandboxin den Einstellungen.
⚠️
--yoloaktiviert nicht automatisch eine Sandbox. Der YOLO-Modus genehmigt nur Tool-Aufrufe automatisch; die Sandbox muss weiterhin explizit über--sandbox,QWEN_SANDBOXodertools.sandboxaktiviert werden. Bei Headless-/nicht-interaktiven Ausführungen mit--yolo(oder--approval-mode=yolo) und ohne Sandbox kann das Modell Shell-, Write- und Edit-Tools mit den Berechtigungen des aktuellen Prozesses ausführen – Qwen Code gibt in diesem Fall eine Warnung auf stderr aus. Unterdrücke diese mitQWEN_CODE_SUPPRESS_YOLO_WARNING=1, sobald du die Kompromisse geprüft hast.
Standardmäßig wird ein vorgefertigtes qwen-code-sandbox Docker-Image verwendet.
Für projektspezifische Sandbox-Anforderungen kannst du ein benutzerdefiniertes Dockerfile unter .qwen/sandbox.Dockerfile im Stammverzeichnis deines Projekts erstellen. Dieses Dockerfile kann auf dem Basis-Sandbox-Image basieren:
FROM qwen-code-sandbox
# Add your custom dependencies or configurations here
# For example:
# RUN apt-get update && apt-get install -y some-package
# COPY ./my-config /app/my-configWenn .qwen/sandbox.Dockerfile vorhanden ist, kannst du beim Ausführen von Qwen Code die Umgebungsvariable BUILD_SANDBOX verwenden, um das benutzerdefinierte Sandbox-Image automatisch zu bauen:
BUILD_SANDBOX=1 qwen -sNutzungsstatistiken
Um uns bei der Verbesserung von Qwen Code zu unterstützen, erfassen wir anonymisierte Nutzungsstatistiken. Diese Daten helfen uns zu verstehen, wie die CLI genutzt wird, häufige Probleme zu identifizieren und neue Funktionen zu priorisieren.
Was wir erfassen:
- Tool-Aufrufe: Wir protokollieren die Namen der aufgerufenen Tools, ob sie erfolgreich sind oder fehlschlagen, und wie lange ihre Ausführung dauert. Wir erfassen nicht die an die Tools übergebenen Argumente oder die von ihnen zurückgegebenen Daten.
- API-Anfragen: Wir protokollieren das für jede Anfrage verwendete Modell, die Dauer der Anfrage und ob sie erfolgreich war. Wir erfassen nicht den Inhalt der Prompts oder Antworten.
- Sitzungsinformationen: Wir erfassen Informationen über die Konfiguration der CLI, wie z. B. die aktivierten Tools und den Genehmigungsmodus.
Was wir NICHT erfassen:
- Personenbezogene Daten (PII): Wir erfassen keine persönlichen Informationen wie deinen Namen, deine E-Mail-Adresse oder API-Keys.
- Prompt- und Antwortinhalte: Wir protokollieren nicht den Inhalt deiner Prompts oder die Antworten des Modells.
- Dateiinhalte: Wir protokollieren nicht den Inhalt von Dateien, die von der CLI gelesen oder geschrieben werden.
So kannst du die Erfassung deaktivieren:
Du kannst die Erfassung von Nutzungsstatistiken jederzeit deaktivieren, indem du die Eigenschaft usageStatisticsEnabled in der Kategorie privacy in deiner settings.json-Datei auf false setzt:
{
"privacy": {
"usageStatisticsEnabled": false
}
}Wenn Nutzungsstatistiken aktiviert sind, werden Ereignisse an einen Alibaba Cloud RUM-Sammel-Endpunkt gesendet.