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. Bei stream-json verhalten sich mit einem Prompt gestartete Runs nicht-interaktiv (headless), entsprechend --output-format stream-json. Zur argv-Parse-Zeit validierte Flags (--include-partial-messages, --input-format stream-json) erfordern weiterhin das explizite Flag --output-format stream-json. | "text" | "text", "json", "stream-json" |
output.showTimestamps | boolean | Zeigt einen [HH:MM:SS] Zeitstempel vor jeder Assistant-Antwort an. | false |
review
| Setting | Type | Beschreibung | Default |
|---|---|---|---|
review.attribution | boolean | Hängt den Attributions-Footer mit Modell- und CLI-Version (z. B. _— qwen3-coder via Qwen Code /review (v0.21.2)_) an Review-Bodys und Inline-Kommentare an, die von /review gepostet werden. Deaktivieren, um Reviews ohne sichtbare KI-Attribution zu posten: der Footer wird weggelassen und gepostete Kommentare und Body-Listen verlieren ihre **[Critical]**/**[Suggestion]**-Marker. Die Posts bleiben im Raw-Source identifizierbar: jeder trägt einen unsichtbaren Schweregrad-Marker (<!-- qwen-review critical -->) und der Review-Body trägt einen Ledger-Marker (<!-- qwen-review-ledger ... -->) — alles, was Kommentar-Bodys liest (GitHub-API-Automatisierung, die Workflows, die diese Einstellung koppelt), erkennt weiterhin ein /review-Artefakt, und die Presubmit-Duplikaterkennung erkennt frühere Posts des Review-Accounts am Schweregrad-Marker, obwohl nicht-attribuierte Posts anderer Accounts ihr entgehen. Weitere Konsequenz: qwen-autofix’s Critical-only-Modus (aktiviert nach Runde 5, oder früher wenn das Diff-Wachstums-Budget eines Zählfensters auslöst) erkennt die geposteten Ergebnisse nicht mehr als Critical und schiebt sie auf. Das Deaktivieren entzieht auch das Modell aus dem Machine-Ledger-Marker im Review-Body, sodass in einer frischen Umgebung (CI, ein anderes Clone — überall ohne Review-Cache) der inkrementelle Anker aus dem zuletzt geposteten Review die Same-Model-Prüfung fehlschlägt und das Re-Review auf den vollen Bereich zurückfällt. | true |
review.effort | enum | Standard-Aufwand für /review, wenn --effort nicht angegeben wird: "low", "medium", "high" oder "auto" (die eingebaute Regel: high für PRs, medium für lokale Änderungen). Ein explizites --effort hat Vorrang; ein wirksames --comment erzwingt weiterhin high und --fix setzt weiterhin mindestens medium. | "auto" |
review.comment | boolean | Behandelt jedes PR-/review so, als ob --comment übergeben wurde: Findings werden ohne das Flag an den Pull Request gepostet. Der Post bindet weiterhin an den in der Invocation genannten PR. Nur aktivieren, wenn Reviews immer veröffentlicht werden sollen. | false |
review.severityFloor | enum | Der niedrigste Schweregrad, den ein PR-/review postet, wenn --severity-floor nicht angegeben wird: "auto" (der rundenadaptive Standard – Suggestions werden bis Runde 5 gepostet, ab Runde 6 nur Criticals, wobei sonst postbare high-confidence Suggestions erfasst und aufgeschoben werden, und Runden 2–5 neue Suggestions auf Code unverändert seit der Vorrunde aufschieben; low-confidence und Nice-to-have-Findings bleiben terminal-only), "critical" (diese Haltung ab Runde 1) oder "suggestion" (Suggestions werden in jeder Runde gepostet; schaltet die Konvergenz-Haltung ab). Nicht-PR-Ziele haben keine Runden und ignorieren dies. | "auto" |
review.reverseAuditRounds | number | Senkt die Runden-Obergrenze der Reverse-Audit-Schleife für jedes High-Effort-Review. Die Obergrenze folgt ansonsten der Diff-Topologie (10 klein / 5 gechunkt; ein riesiges Diff ist 3 mit Review-Deadline und 5 ohne). Kann nur die jeweils geltende Stufe senken: ein Wert unter 3, über der Stufe oder keine ganze Zahl über null wird ignoriert. Das Kürzen der Obergrenze lässt Reviews nicht schneller konvergieren — die Schleife endet bei zwei aufeinanderfolgenden trockenen Runden — sondern führt dazu, dass sie häufiger vor der Konvergenz stoppen, und jeder solche Stopp deckelt das Fazit auf Comment. | 0 (nicht gesetzt) |
Diese Einstellungen werden nur aus Operator-Scopes gelesen (User, System und SystemDefaults); Werte in einer Workspace-.qwen/settings.json werden ignoriert, sodass ein Repository keine Review-Policy für seine Reviewer setzen kann.
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 | Im Terminal-UI ausgemustert. Die CLI zeigt jetzt immer die kompakte, typbasierte Tool-Ansicht im Haupttranskript; drücke Ctrl+O, um den erweiterten Detailmodus umzuschalten (alle Thinking-Blöcke und Tool-Ausgaben ein-/ausblenden), anstatt einen Modus umzuschalten. Wird weiterhin von der Web Shell berücksichtigt. | 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. Standardmäßig in kompatiblen interaktiven Terminals aktiviert, um Flackern, Scroll-Sturm und einfrierende Benutzeroberflächen bei langen Sitzungen zu vermeiden. 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; ziehe zum Auswählen von Text (Doppel-/Dreifachklick wählt ein Wort/eine Zeile), oder halte Shift (oder Option unter macOS) beim Ziehen für die eigene Auswahl des Terminals. Mausinteraktionen (Rad, Ziehen, Klick, Hover) erfordern ui.mouseTracking (standardmäßig aktiv). | true |
ui.showScrollbar | boolean | Zeigt die automatisch ausgeblendete Scrollbar im scrollbaren In-App-Viewport (Virtualized History) an. Die Leiste erscheint beim Scrollen und blendet bei Inaktivität aus. Deaktiviere diese Option, um sie komplett auszublenden. Gilt nur für die interaktive Terminal-UI. | true |
ui.mouseTracking | boolean | Aktiviert das SGR-Maus-Tracking in der App für Textauswahl, Klick-zu-Position in Texteingaben, Zeilen-Hover, Umschalten von History-Elementen und Viewport-Scrolling. Während es aktiviert ist, leitet das Terminal alle Mausereignisse an die App weiter, sodass native Rechtsklick-Kontextmenüs und OSC-8-Hyperlink-Klicks nicht verfügbar sind. Deaktiviere es, um native Rechtsklicks und klickbare URL-Links wiederherzustellen; dies schaltet alle Mausinteraktionen in der App aus, und im Virtualized History scrollt das Rad nicht mehr das Transkript – verwende stattdessen Shift+↑/↓, PgUp/PgDn oder Ctrl+Home/End (kombiniere mit ui.useTerminalBuffer: false, um den nativen Terminal-Scrollback wiederherzustellen). Gilt nur für die interaktive Terminal-UI. | true |
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 | integer | 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, retryInitialDelayMs, retryMaxDelayMs, 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. | 20 |
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. In Daemon-/ACP-Sessions, die keinen der anderen Streaming-Detektoren ausführen, aktiviert das Wiederaktivieren auch einen globalen Duplicate-Tool-Call-Halt; der immer aktive pro-Turn-Tool-Call-Cap und ein Invalid-Tool-Params-Stagnation-Guard laufen dort unabhängig von dieser Einstellung. | true |
model.maxToolCallsPerTurn | integer | Obergrenze für Tool-Aufrufe pro Turn (ein Model-Turn plus dessen Tool-Result-Fortsetzungen; blockierende Stop-Hook-Fortsetzungen wie /goal-Iterationen starten ein neues Budget). Wenn explizit gesetzt, ist dieser Wert eine harte Obergrenze: der Turn hält beim nächsten Tool-Call danach an (das veröffentlichte Verhalten). Wenn nicht gesetzt (Standard 100), ist die Obergrenze adaptiv: sobald der Turn 100 überschreitet, hält er nur an, wenn das Modell denselben Aufruf wiederholt (festgefahrene Schleife); ein produktiver Turn (unterschiedliche Aufrufe) läuft bis zu einer harten Obergrenze von 1000 weiter, die immer anhält. Der adaptive Standard gilt für die interaktive TUI, nicht-interaktive (-p / JSON / stream-JSON) Core-Client-Runs und Daemon-/ACP-Sessions gleichermaßen. Daemon-/ACP-Sessions werten die Obergrenze einmal pro Tool-Batch aus, vor der Ausführung: ein Batch, der eine explizite Obergrenze oder die harte Obergrenze überschreiten würde, wird komplett übersprungen, sodass ein Turn nie über eine der beiden hinaus ausgeführt wird (er kann bis zu einem Batch davor anhalten), während die adaptive Soft-Obergrenze konstruktionsbedingt bis zur Obergrenze überschritten wird. Sie haben auch keine In-Session-Deaktivierung. Immer aktiver Circuit Breaker gegen durchdrehende Turns, unabhängig von model.skipLoopDetection. 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 |
model.openAILogRetentionDays | number | Tage, die OpenAI-API-Logdateien aufbewahrt werden, wenn model.enableOpenAILogging aktiviert ist. Abgeschlossene Hintergrund-Housekeeping-Durchläufe laufen höchstens einmal pro Tag in interaktiven, Headless-, Stream-JSON-SDK- und ACP-Sessions. Kurzlebige nicht-interaktive Prozesse machen Best-Effort-Fortschritt, während persistente Prozesse bis zum Abschluss scannen. 0 = minimale Aufbewahrung (~1 Stunde). Für ein benutzerdefiniertes model.openAILoggingDir konfiguriere die Aufbewahrung auf User- oder System-Scope; Workspace-scoped Aufbewahrung wird übersprungen, da ein benutzerdefiniertes Verzeichnis von mehreren Workspaces geteilt werden kann. Änderungen werden nach einem Neustart wirksam. | 7 |
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 verschieden von den beiden Stream-Guards unten.
Stream-Guards (nur OpenAI-kompatible Provider):
Zwei Guards begrenzen eine Streaming-Antwort, jeder akzeptiert 0 zum Deaktivieren. Keiner wird von den Anthropic/Gemini-Generatoren implementiert, die die unten beschriebene tröpfchenweise Form unbegrenzt lassen.
QWEN_STREAM_IDLE_TIMEOUT_MS(Standard240000) begrenzt die Inaktivität zwischen gestreamten Chunks: Ein Stream, der so lange schweigt, wird als wiederholbaresETIMEDOUTabgebrochen.QWEN_STREAM_MAX_LIFETIME_MS(Standard900000) begrenzt die gesamte Upstream-Wartezeit einer Streaming-Antwort unabhängig vom Chunk-Fluss – die Obergrenze für einen tröpfchenweisen Stream, der nie abschließen kann, sich nie zurücksetzen kann.
Dies sind ausschließlich Umgebungsvariablen (oder für Embedder ContentGeneratorConfig.streamIdleTimeoutMs / streamMaxLifetimeMs) – es gibt keinen settings.json-Key; "streamMaxLifetimeMs" in settings.json zu schreiben hat keine Wirkung. Upgrade-Hinweise: Ein Deployment, das zuvor QWEN_STREAM_IDLE_TIMEOUT_MS=0 gesetzt hat – oder streamIdleTimeoutMs: 0 in ContentGeneratorConfig übergeben hat – um Stream-Abbrüche zu deaktivieren, benötigt jetzt auch QWEN_STREAM_MAX_LIFETIME_MS=0 (oder streamMaxLifetimeMs: 0), um dies beizubehalten; und die 15-Minuten-Lifetime-Obergrenze begrenzt auch einen Stream, dessen Idle-Timeout darüber angehoben wurde (z. B. QWEN_STREAM_IDLE_TIMEOUT_MS=1800000) – hebe die Obergrenze ebenfalls an oder setze sie auf 0, wenn du ein längeres Fenster benötigst.
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. | "" |
advisorModel
| Einstellung | Typ | Beschreibung | Standard |
|---|---|---|---|
advisorModel | string | Modell, das von /advisor für Second-Opinion-Überprüfungen der Konversation verwendet wird. Leer lassen, um das Hauptmodell zu verwenden. Ein mindestens gleichwertiges Modell wie das Hauptmodell wird empfohlen. Die Einstellung sendet das aktuelle Konversationstranskript an dieses Modell, auch wenn es einen anderen Provider verwendet. | "" |
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 oder read_file den begrenzten PDF-Visual-Fallback benötigt, wird es zuerst von diesem Modell transkribiert. Die explizite Einstellung autorisiert Bridge-Aufrufe an dieses Modell, auch wenn es einen anderen Provider verwendet; die Tool-Anzeige zeigt den Endpunkt an. Leer lassen, um automatisch ein Vision-Modell desselben Providers auszuwählen. Kann auch über /model --vision gesetzt werden. | "" |
compactionModel
| Einstellung | Typ | Beschreibung | Standard |
|---|---|---|---|
compactionModel | string | Modell, das für die Chat-Komprimierung (Auto-Compaction) verwendet wird. Leer lassen, um auf das Hauptmodell zurückzufallen. Ein kleineres oder schnelleres Modell kann die Komprimierungslatenz und -kosten reduzieren. Kann auch über /model --compaction gesetzt oder gelöscht werden. | "" |
imageModel
| Einstellung | Typ | Beschreibung | Standard |
|---|---|---|---|
imageModel | string | Modell, das vom integrierten image_gen-Tool verwendet wird. Die ausgewählte Route muss supportsImageGeneration: true (oder das Legacy imageOnly: true) setzen und eine HTTPS-baseUrl sowie envKey in modelProviders deklarieren. Leer lassen, um das Tool nicht verfügbar zu halten. Kann auch über /model --image gesetzt werden. | "" |
visionBridgeTimeoutMs
| Einstellung | Typ | Beschreibung | Standard |
|---|---|---|---|
visionBridgeTimeoutMs | integer | Timeout in Millisekunden pro Versuch für den Vision-Bridge-Bildtranskriptionsaufruf (positive Ganzzahl bis 2147483647; die Bridge wiederholt einen Timeout-Versuch einmal mit einem frischen Timeout). Nicht gesetzt verwendet den eingebauten Wert von 30s. Erhöhen für langsame oder proxied Vision-Endpunkte. | nicht gesetzt |
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 | Ziel-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.85 (85 %). Wirkt als Obergrenze für den Trigger: Bei großen Fenstern ist er der effektive Trigger (~85 %), während bei kleineren Fenstern die Komprimierung früher auslösen kann, um Platz zum Zusammenfassen zu schaffen. Ersetzt den alten model.chatCompression.contextPercentageThreshold. | undefined (verwendet intern 0.85) |
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. Wenn überschritten, werden die ältesten Ergebnisse bis auf die Hälfte dieses Schwellenwerts gelöscht (Best Effort), damit spätere Turns weiterhin den Provider-Prompt-Cache wiederverwenden können, anstatt den Verlauf in jedem Turn neu zu schreiben. 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.shell.defaultTimeoutMs | number | Standard-Timeout in Millisekunden für Vordergrund-Shell-Befehle, die vom Agent gestartet werden. Ein pro-Aufruf-Timeout des Shell-Tools überschreibt dies. Wenn nicht gesetzt, läuft das Vordergrund-Command-Timeout nach 120000 ms (2 Minuten) ab. Setze auf 0, um das Timeout zu deaktivieren. | undefined | |
tools.shell.heartbeatIntervalMs | number | Intervall in Millisekunden zwischen Liveness-Heartbeats, die emittiert werden, während ein Vordergrund-Shell-Befehl keine Ausgabe erzeugt. Heartbeats werden an ACP-Clients und Stream-JSON-Konsumenten weitergeleitet, damit sie einen stillen Befehl von einer toten Session unterscheiden können. Wenn nicht gesetzt, werden Heartbeats alle 10000 ms (10 Sekunden) gesendet. Setze auf 0, um Heartbeats zu deaktivieren. | undefined | |
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.disabled | array of strings | Tool-Namen, die vollständig aus der Registry ausgeblendet werden. Im Gegensatz zu permissions.deny (das Aufrufe zur Laufzeit blockiert) werden deaktivierte Tools niemals registriert, sodass sie nicht in /tools erscheinen und vom Modell nicht entdeckt oder aufgerufen werden können. Beispielsweise verhindert ["enter_plan_mode"], dass das Modell eigenständig in den Plan-Modus wechselt. Wird als Union über alle Scopes zusammengeführt. | undefined | |
tools.visible | array of strings | Deferred-Tool-Namen, die beim Start sichtbar gemacht werden, ohne tool_search zu benötigen. Aufgelistete Tools erscheinen neben den Core-Tools in der initialen Session. Wird als Union über alle Scopes zusammengeführt. | 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. | auto | 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.workflowsEnabled | boolean | Aktiviert das Workflow-Tool, mit dem das Modell ein Skript erstellen und ausführen kann, das Subagenten parallel orchestriert. Standardmäßig deaktiviert; ein Run kann viele Subagenten dispatchen und entsprechend Tokens verbrauchen. | false | Nur User-, System- und SystemDefaults-Scopes; Workspace-Werte werden ignoriert. Neustart erforderlich: Ja. Env-Overrides: QWEN_CODE_ENABLE_WORKFLOWS=1 erzwingt an; QWEN_CODE_DISABLE_WORKFLOWS=1 erzwingt aus (disable gewinnt). |
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 |
tools.toolSearch.threshold | number | Kontextfenster-Prozentsatz, der als Session-Start-Budget für das Vorladen von Deferred Tools verwendet wird (sowohl gebündelte Built-ins als auch MCP). Wenn die kombinierten Schemas aller Deferred Tools in dieses Budget passen, werden sie alle im Voraus deklariert, anstatt bei Bedarf über ToolSearch geladen zu werden – eine stabile Deklarationsliste hält die Prefix-KV-Caches für die gesamte Session gültig. Setze 0, um Deferred Tools immer bei Bedarf zu laden. | 10 | Neustart erforderlich: Ja |
tools.listDirectory.enabled | boolean | Aktiviert das integrierte list_directory-Tool. Standardmäßig deaktiviert, da glob die Verzeichnisauflistung in den meisten Fällen abdeckt; das Tool wird auch automatisch wieder aktiviert, wenn es explizit in der coreTools-Allowlist aufgeführt wird (--core-tools / tools.core). | false | 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 |
memory.agentTimeoutMinutes | number | Maximale Laufzeit in Minuten für Hintergrund-Memory-Agenten (Extraktion, Dream, Remember, Skill-Review). Nicht gesetzt verwendet den eingebauten Standardwert des jeweiligen Agenten (2–5 Minuten); 0 deaktiviert das Zeitlimit. | unset |
memory.agentMaxTurns | number | Maximale Turns für Hintergrund-Memory-Agenten (Extraktion, Dream, Remember, Skill-Review). Nicht gesetzt verwendet den eingebauten Standardwert des jeweiligen Agenten (5–8); 0 deaktiviert das Turn-Limit. | unset |
Siehe Memory für Details zur Funktionsweise von Auto-Memory und zur Verwendung der Befehle /memory, /remember und /dream.
agents
| Setting | Type | Beschreibung | Default |
|---|---|---|---|
agents.builtin.exploreModel | string | Modell-Selektor für den eingebauten Explore-Subagenten. Verwende inherit für das Hauptsession-Modell, fast für fastModel, eine Modell-ID oder einen authType:model-id-Selektor. Ein benutzerdefinierter Explore-Agent mit gleichem Namen behält seine eigene Modellkonfiguration. Erfordert Neustart. | inherit |
agents.modelGrades | object | Bildet semantische Grade-Namen, die dem Agent-Tool exposed werden, auf Modell-Selektoren ab. Erfordert Neustart. | undefined |
agents.allowedGrades | array of strings | Optionale Whitelist der konfigurierten Modell-Grades, die das Agent-Tool verwenden darf. Erfordert Neustart. | undefined |
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.disabledLevels | array of strings | Skill-Discovery-Level, die vollständig übersprungen werden sollen. Unterstützte Werte sind project, user, extension und bundled. Wird als Union über die Einstellungsbereiche zusammengeführt. Verwende ["bundled"], um alle gebündelten Skills auszublenden, während vom Host bereitgestellte Skills erhalten bleiben. Hinweis: skills.directories-Einträge werden auf dem user-Level erkannt, daher verbirgt ["user"] diese ebenfalls. | undefined |
skills.disabled | array of strings | Hart deaktivierte Skill-Namen. Wird case-insensitive abgeglichen und als Union über die Einstellungsbereiche zusammengeführt, sodass Projekteinstellungen einen User- oder System-Eintrag nicht überschreiben können. Versteckte Skills erscheinen weder in <available_skills> noch als /<name>-Slash-Befehle. | undefined |
skills.defaultDisabled | array of strings | Skill-Namen, die standardmäßig deaktiviert sind, aber über skills.enabled aktiviert werden können. Wird case-insensitive abgeglichen und als Union über die Einstellungsbereiche zusammengeführt. | undefined |
skills.enabled | array of strings | Explizite Aktivierungen, die passende skills.defaultDisabled-Einträge überschreiben. Wird case-insensitive abgeglichen und als Union über die Einstellungsbereiche zusammengeführt. Diese Einstellung kann skills.disabled nicht überschreiben oder Skills aus einem durch skills.disabledLevels ausgeschlossenen Level reaktivieren. | undefined |
Die Priorität ist skills.disabled > skills.enabled > skills.defaultDisabled. Ein Benutzer kann beispielsweise einen Skill in defaultDisabled setzen und ein Projekt kann denselben Namen zu enabled hinzufügen; ein hartes disabled auf beliebiger Ebene gewinnt dennoch.
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 |
security.allowedInsecureVoiceBaseUrls | array of strings | Vollständige Voice-Provider-Base-URLs, die HTTP verwenden oder auf private Netzwerkadressen aufgelöst werden dürfen. Jeder Eintrag muss ein explizites http://- oder https://-Schema und den vollständigen Pfad enthalten (zum Beispiel /v1); nur URL-Serialisierung und abschließende Schrägstriche werden normalisiert. Wildcards werden nicht unterstützt; Metadata-, Link-Local-, Local-Use-NAT64-, 6to4- und Teredo-Adressen bleiben blockiert, auch wenn sie aufgeführt sind, ebenso wie Hostnamen, die auf Loopback aufgelöst werden; IPv4-gemappte, IPv4-kompatible und Well-Known-NAT64-(64:ff9b::/96) Literale werden nach ihrer eingebetteten IPv4-Adresse klassifiziert. Nur die Scopes User, System und SystemDefaults werden berücksichtigt. Nur für vertrauenswürdige Endpunkte in verwalteten privaten Netzwerken verwenden. Klartext-HTTP legt auch den Provider-API-Key offen, der im Authorization-Header übertragen wird. Ein erlaubter Hostname ist nur so vertrauenswürdig wie sein DNS; bevorzuge IP-Literal-Einträge, wenn die Gateway-Adresse stabil ist. Die exakte Übereinstimmung deckt die Batch-Request-URL ab; Streaming-Transporte verbinden sich mit einer daraus abgeleiteten WebSocket-URL (gleiches Schema, Host und Port, /api-ws/v1/...-Pfad), nicht mit dem erlaubten Pfad selbst. | [] |
serve
Persistente Sub-Session-Concurrency-Einstellungen für qwen serve. Änderungen erfordern einen Neustart des Daemons. Nicht-positive oder nicht-ganzzahlige Concurrency-Limits erzeugen eine Warnung und fallen auf ihre eingebauten Standardwerte zurück.
| Setting | Typ | Beschreibung | Standard |
|---|---|---|---|
serve.maxConcurrentSubSessionsPerCaller | integer | Maximale Anzahl gleichzeitiger Sub-Sessions, die eine Caller-Session über create_sub_session erstellen kann. Muss mindestens 1 sein. | 16 |
serve.maxConcurrentSubSessionsTotal | integer | Maximale Anzahl gleichzeitiger Sub-Sessions über alle Caller in einem Workspace. Muss eine Ganzzahl von 1 bis 1024 sein. Werte über 1024 werden ohne Warnung auf 1024 begrenzt. | 24 |
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 von dieser Liste ausgeschlossen; Loader-betroffene Variablen werden aus jedem .env-Scope immer abgelehnt (siehe unten). | ["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.sessionWorkflow | boolean | Zeigt den Daemon-WebShell-Session-Workflow-DAG an und präsentiert den bestehenden plan-Genehmigungsmodus als Plan & Review. Dies ändert nur die Darstellung: es fügt keinen Genehmigungsmodus hinzu, ändert das Todo-Ausführungsverhalten nicht und plant keine Abhängigkeiten. Änderungen werden ohne Neustart wirksam. | false |
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.todoStopGuard | boolean | Erlaubt Daemon- und ACP-Sessions, nach einem natürlichen Modell-Stopp fortzufahren, wenn die aktuelle Work-Chain erfolgreich eine unvollständige Top-Level-Todo-Liste geschrieben hat. Fügt höchstens zwei aufeinanderfolgende Primärmodell-Aufrufe ohne neue Benutzereingabe hinzu; Benutzereingaben mitten im Turn starten eine neue Zwei-Versuch-Phase. Wird nach einem Prozessneustart nicht wiederhergestellt und in den Modi safe, bare und Approval plan zwangsweise deaktiviert. Erfordert einen Neustart. | false |
experimental.sessionWriterLease | boolean | Aktiviert prozessübergreifendes Write-Fencing für persistierte ACP- und Daemon-Sessions. Der Wert wird eingefroren, wenn der ACP- oder Daemon-Prozess startet. Alle gleichzeitigen ACP-Schreiber müssen die Einstellung aktiviert haben; gemischte Versionen oder Konfigurationen bleiben unsicher. Interaktive und Headless-Recorder sind nicht betroffen. Erfordert einen Prozessneustart. | false |
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 Artifact-Tools. Standardmäßig aktiviert. In interaktiven Non-SDK-Sessions kann das Modell eine in sich geschlossene HTML-Seite als interaktives Artifact veröffentlichen und im Browser öffnen. Non-SDK-Daemon-Sessions können das reine Metadaten-Tool record_artifact verwenden. Setze dies auf false oder verwende QWEN_CODE_DISABLE_ARTIFACT=1, um beides zu deaktivieren. Erfordert einen Neustart. | true |
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 seine Tool-Call-Bestätigungen in einem vertrauenswürdigen Workspace. | 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.userId | string | Stabile End-Benutzer-Kennung, die in GenAI-Spans als ARMS-Erweiterung gen_ai.user.id geschrieben wird. Bevorzuge einen pseudonymen Wert. Setze keinen prozessweiten Wert für eine gemeinsam genutzte Multi-User-Daemon- oder Channel-Instanz. | |
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,
"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"]
}
}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.
Loader-betroffene Variablen werden immer abgelehnt: Variablen, die einen gestarteten Node.js-Prozess oder OS-Loader dazu bringen, eine vom Angreifer gewählte Datei auszuführen — NODE_OPTIONS, npm_config_node_options (und npms Config-File-Weiterleitungen npm_config_userconfig, npm_config_globalconfig, npm_config_script_shell, npm_config_prefix), NODE_PATH, OPENSSL_CONF (dlopent eine vom Angreifer gewählte OpenSSL-Engine beim Startup), NODE_REPL_EXTERNAL_MODULE, npm_config_node_gyp, npm_config_init_module, LD_PRELOAD, LD_AUDIT, DYLD_INSERT_LIBRARIES, BASH_ENV, ZDOTDIR und exportierte Bash-Funktionsdefinitionen (BASH_FUNC_*) — werden niemals aus .env-Dateien geladen (kein Scope, einschließlich .qwen/.env und Dateien auf Benutzerebene) oder aus dem env-Abschnitt der obersten Ebene in settings.json. Ein dort über den Workspace kontrollierter Wert könnte die Modul-Auflösung für jeden von Qwen Code gestarteten Subprozess kapern, daher gibt Qwen Code eine Warnung aus, wenn es einen solchen Key ablehnt (einmal pro Prozess, pro Key und Quelle – in einem Multi-Workspace-Daemon wird die Ablehnung jedes Workspaces separat gemeldet). Um eine dieser Variablen zu verwenden, exportiere sie in der Umgebung, aus der du Qwen Code startest; Sessions, die von einem qwen serve-Daemon gehostet werden, übernehmen sie absichtlich nicht, während direkte Editor-Sessions (ACP) und die einfache CLI den exportierten Wert behalten. Bibliotheks-Such-Pfade (LD_LIBRARY_PATH, DYLD_LIBRARY_PATH) und die nur für interaktive Shells relevante ENV stehen absichtlich nicht auf dieser Liste – sie abzulehnen würde Mainstream-Toolchains brechen (ENV=production, Conda/CUDA-Bibliotheksverzeichnisse) – aber ein Projekt-.env kann sie beim Neuladen trotzdem nicht anwenden. Diese Ablehnung gilt nur für den env-Abschnitt der obersten Ebene: mcpServers[].env pro Server und hooks[].env pro Hook sind absichtlich auf diesen Server bzw. Hook beschränkt und werden weiterhin angewendet (beide Oberflächen sind über Folder-Trust für Workspace-bereitgestellte Konfigurationen abgesichert). Separat kann ein Projekt-.env niemals QWEN_CLI_ENTRY (den Session-Prozess-Entrypoint des Daemons), QWEN_CDP_MCP_COMMAND (den Befehl, den der Daemon als Browser-Automatisierungs-MCP-Adapter startet), QWEN_SERVE_CDP_TUNNEL_OVER_WS (schaltet diese Tunnel-Oberfläche um), DEV (den Dev-Harness-Startmarker), die TLS-Trust-Anchor-Variablen (NODE_EXTRA_CA_CERTS, SSL_CERT_FILE, SSL_CERT_DIR, CURL_CA_BUNDLE, REQUESTS_CA_BUNDLE, GIT_SSL_CAINFO, GIT_SSL_CAPATH, npm_config_cafile, npm_config_ca, npm_config_strict_ssl, PIP_CERT – ein Angreifer-CA dort, oder npm_config_strict_ssl=false, würde MITM des Token-tragenden Traffics ermöglichen, den git/npm/pip/curl-Aufrufe einer Session tätigen), die Git-Command-Execution-Variablen (GIT_SSH_COMMAND, GIT_SSH, GIT_EXEC_PATH, GIT_TEMPLATE_DIR, GIT_ASKPASS, GIT_PROXY_COMMAND, GIT_EDITOR, GIT_SEQUENCE_EDITOR, GIT_EXTERNAL_DIFF, GIT_CONFIG_GLOBAL, GIT_CONFIG_SYSTEM, GIT_CONFIG_COUNT, GIT_CONFIG_PARAMETERS und die nummerierten GIT_CONFIG_KEY_<n>/GIT_CONFIG_VALUE_<n>-Paare – Git führt diese bei jeder git-Invocation einer Session aus – sowie XDG_CONFIG_HOME, das die $XDG_CONFIG_HOME/git/config umleitet, die Git mit ~/.gitconfig mergt), die curl/wget-rc-File-Weiterleitungen (CURL_HOME, WGETRC – deren rc-Dateien einen Angreifer-Proxy oder CA installieren können), PIP_CONFIG_FILE (leitet die gesamte pip-Konfiguration um – index-url, trusted-host, Proxy- oder Cert-Einstellungen in einer Angreifer-Datei senden Session-pip-Traffic oder Credentials an Angreifer-Infrastruktur), SSH_ASKPASS (git/ssh führen es als Fallback-Passphrase-Prompt-Programm bei einer Auth-Challenge aus), LESSOPEN und LESSCLOSE (less führt sie als Input-Präprozessoren für jede Datei aus, die eine Session betrachtet), die node-gyp-Interpreter-Auswahl-Variablen (NODE_GYP_FORCE_PYTHON, npm_config_python, PYTHON – werden als Build-Python während Native-Addon-Installationen ausgeführt – sowie npm_config_git, als npms Git-Binärdatei ausgeführt), die Editor- und Startup-Hooks (VISUAL, EDITOR – Gits Editor-Fallback-Chain, die auch von den eigenen External-Editor-Flows der CLI gestartet werden – sowie PYTHONSTARTUP, das CPython beim interaktiven Start ausführt) oder BROWSER (die CLI führt ihn über den sicheren Browser-Launcher aus) setzen; diese bleiben aus der Shell-Umgebung oder einer .env auf Benutzerebene setzbar; im Gegensatz zur Loader-Liste oben werden sie nur aus Projektdateien abgelehnt, sodass ein selbst exportierter Wert erhalten bleibt. Sie werden auch beim Boot aus einer .env auf Benutzerebene eingefroren: ein Settings-Reload wendet keine Änderungen an ihnen dort – oder deren Entfernung – an, bis der Prozess neu startet. Upgrade-Hinweis: Vor der Einführung dieser Denylist konnten einige dieser Keys aus .env-Dateien oder dem env-Abschnitt von settings.json auf einigen Pfaden geladen werden; sie werden jetzt überall mit einer Warnung abgelehnt, und ein qwen serve-Daemon übergibt keine geerbten Werte mehr an Session-Subprozesse.
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_USAGE_STATISTICS_ENABLED | Setze dies auf true oder 1, um Nutzungsstatistiken zu aktivieren. Jeder andere Wert wird als Deaktivierung behandelt. | Überschreibt die privacy.usageStatisticsEnabled-Einstellung. Standardmäßig aktiviert, wenn weder das eine noch das andere konfiguriert ist. |
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_USER_ID | Setzt bei der Interaktion eine stabile End-Benutzer-Kennung auf Interaction-, LLM-, Tool- und Agent-Spans als gen_ai.user.id. Bevorzuge einen pseudonymen Wert. | Überschreibt nach dem Trimmen telemetry.userId. Ein leerer Wert fällt auf die Einstellungen zurück. Dies ist prozessweit und darf nicht als pro-Request-Identität in einem gemeinsam genutzten Multi-User-Prozess verwendet werden. |
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/serve/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_ACP_REPEATED_TOOL_FAILURE_GUARD | Operator-Rollout-Modus für den Schutz vor wiederholtem Tool-Ausführungsfehler in ACP. Akzeptiert off, shadow, warn oder enforce; fehlende oder ungültige Werte fallen auf shadow zurück. | Gilt nur für interaktive Vordergrund-ACP-Prompts; kanalgesteuerte und automatische Routen bleiben auf off. Projekt- und Workspace-Umgebungsdateien können diese Operator-Richtlinie nicht setzen. Shadow lässt Modell-Fortsetzung und Nachrichten unverändert, fügt aber das Queued-Prompt-Watch-Flag zu craft/drainMidTurnQueue hinzu; jeder Modus außer off erfordert zuverlässigen Queued-Prompt-Status. Nicht-leere ungültige Werte geben eine Diagnose aus; exportiere die Variable im Prozess-Environment oder einer Datei auf Benutzerebene. |
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 |
QWEN_CODE_LEGACY_ERASE_LINES | =1 deaktiviert den Terminal-Redraw-Optimizer zwangsweise (stellt die zeilenweisen Löschsequenzen wieder her); =0 aktiviert ihn zwangsweise, auch auf WSL, wo er standardmäßig übersprungen wird, da ConPTY die gebatchten Cursor-Bewegungen des Optimizers mishandelt (Issue #7634). Nicht gesetzt = Plattform-Standard (überspringen, wenn WSL_DISTRO_NAME oder WSL_INTEROP gesetzt ist). | Escape-Hatch für Streaming-Output-Regressionen. Da er aus der Umgebung gelesen wird, dropen ihn Launcher, die env bereinigen (z. B. sudo), ebenfalls – übergib ihn stattdessen beim Start: sudo QWEN_CODE_LEGACY_ERASE_LINES=1 qwen. Beispiel: export QWEN_CODE_LEGACY_ERASE_LINES=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. 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 und Kategorien (native oder MCP) der aufgerufenen Tools, ihren Terminal-Status (success, error oder cancelled) 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
}
}Alternativ kannst du QWEN_USAGE_STATISTICS_ENABLED=false (oder 0) in der
Umgebung setzen. Die Umgebungsvariable hat Vorrang vor der Einstellung.
Starte Qwen Code nach der Änderung eines der beiden Werte neu.
Wenn Nutzungsstatistiken aktiviert sind, werden Ereignisse an einen Alibaba Cloud RUM-Sammel-Endpunkt gesendet.