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.outputStyle | string | Name des Ausgabestils, der bestimmt, wie Antworten geschrieben werden: ein eingebauter Stil (Concise, Proactive, Explanatory, Learning) oder der Name eines benutzerdefinierten Stils — dessen Frontmatter-name, standardmäßig der Dateiname ohne .md (case-insensitive). Nicht gesetzt oder default für den Standardstil. --output-style überschreibt ihn für einen Run. Ändere ihn während der Sitzung mit /output-style, das die Auswahl ebenfalls persistiert; ein manueller Edit in dieser Datei wird beim nächsten Start wirksam. Ignoriert in --bare und --safe-mode. Siehe Output Styles. | 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
| Einstellung | Typ | Beschreibung | Standard | 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
| Einstellung | Typ | Beschreibung | Standard |
|---|---|---|---|
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 in der Rohquelle 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, an die diese Einstellung gekoppelt ist), 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 weder --effort noch ein im Projekt gespeicherter explizit eingegebener Level angegeben ist: "low", "medium", "high" oder "auto" (die eingebaute Regel: high für PRs, medium für lokale Änderungen). Ein expliziter oder gespeicherter Level 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.brand.name | string | Produktname, den die Web Shell in ihrer Seitenleiste, dem Willkommens-Header, dem Info-Panel „Über” und dem Browser-Tab-Titel anzeigt. Bereinigt auf eine einzige Zeile und auf 80 Zeichen begrenzt. Wird nur aus Operator-Scopes gelesen (User, System, SystemDefaults) – eine Workspace-.qwen/settings.json kann die Shell nicht umbranden. Ein Platzhalterwert, den eine Substitution ändern würde ($VAR/${VAR} bei gesetzter Variable), wird mit einer Warnung auf dem stderr des Daemons abgelehnt, weil die Substitutionsquelle prozessweit ist und ein Workspace sie liefern könnte; ein nicht auflösbarer Platzhalter wird wortwörtlich beibehalten, sodass eine falsch geschriebene Variable als literaler Text erscheint, anstatt still auf einen Fallback zurückzufallen. Nicht über die browserbasierte Settings-Seite bearbeitbar. Das Terminal-Banner hat seine eigene separate Einstellung, ui.customBannerTitle. | "" |
ui.brand.logoPath | string | Pfad zu einer SVG-Datei, die als Seitenleisten-Logo und Browser-Favicon der Web Shell verwendet wird. Ein führendes ~ wird expandiert, und ein relativer Pfad wird relativ zum Verzeichnis der Einstellungsdatei aufgelöst, die ihn deklariert. Muss eine reguläre Datei sein (kein Symlink, und nicht über mehr als einen Hard Link erreichbar) von höchstens 32 KiB – auf der Festplatte und nach UTF-8-Dekodierung – deren Wurzelelement ein namensraumgebundenes <svg> ist (das xmlns-Attribut oder eine xmlns:svg-Bindung an einem präfixgebundenen Root ist das, was es als Bild renderbar macht). Umgebungsvariablen-Platzhalter, die auflösen würden, werden abgelehnt, wie bei ui.brand.name. Wird nur aus Operator-Scopes gelesen. Eine abgelehnte Datei protokolliert eine Warnung auf dem stderr des Daemons und fällt auf das eingebaute Logo zurück. Ein Root-<svg> ohne brauchbare viewBox oder explizite positive Breite/Höhe wird akzeptiert, protokolliert aber einen Hinweis, ebenso ein präfixgebundener Root, dessen ungepräfixte Elemente keine Default-Namespace-Bindung haben, weil der Browser sie in der festen Größe der Seitenleiste leer darstellen könnte. | "" |
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 | ÜBERALL EINGESTELLT. 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, und die Web Shell hat ihre kompakte Ansicht ebenfalls fest eingeschaltet. Der Key wird nur beibehalten, damit vorhandene Einstellungsdateien nicht warnen; Schreibvorgänge werden akzeptiert, aber nichts liest den Wert. | false |
ui.showToolCallDetails | boolean | Zeigt Tool-Argumente und -Ergebnisse inline an. Setze auf false, um gewöhnliche Tool-Aufrufe als einzeilige Zusammenfassung darzustellen. Klicke die Zeile im Virtualized History oder drücke Ctrl+O, um Details zu erweitern. Genehmigungs-Prompts, benutzerinitiierte Shell-Befehle und fokussierte interaktive Shells bleiben erweitert. | true |
ui.showToolCallArgs | boolean | Rendert Tool-Aufrufe in einer eigenen Zeile mit ihren vollständigen Raw-Argumenten inline, anstatt der typbasierten Kompaktzusammenfassung, die Lese/Such/Listen-Batches in Read 3 files faltet. Stellt Parameter wieder her, die die Pro-Tool-Beschreibung zusammenfasst (z. B. zeigt Edit normalerweise nur den Dateinamen). Nützlich beim Debuggen von MCP-Integrationen oder Tool-Schemas. Die Args-Zeile ist auf 2 umgebrochene Zeilen (und höchstens 1000 Zeichen) begrenzt, sodass ein Batch ausstehender Aufrufe nicht über das Terminal hinauswachsen kann; drücke Ctrl+O, um die Begrenzung aufzuheben und auch die Ergebnisausgabe zu erweitern. Zwei Fälle behalten die Kompaktansicht: Gruppen laufender paralleler Subagenten, die dem Live-Agent-Roster gehören – sie zu erweitern bläht den Live-Frame über die Terminalhöhe auf (#5798) – und Daemon-angehängte Sessions, die keine Argumente über die Daemon-Grenze hinweg übertragen. Verwende dort Ctrl+O. Nur TUI – die Web Shell ist nicht betroffen. | 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 | ENTFERNT. Zusammen mit ui.compactMode eingestellt — die kompakte Ansicht ist jetzt sowohl in der TUI als auch in der Web Shell immer aktiv. Die alte Einstellung wird stillschweigend ignoriert (keine Startwarnung). | N/A |
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, nach Ctrl+O, nach Ctrl+E / Ctrl+F (Erweitern), nach Fenster-Resize oder beim Zurückkehren über Alt-Tab. Screenreader-Modus und nicht-interaktive Ausgabe wie gepiptes Stdout oder CI verwenden stattdessen append-only Terminal-Ausgabe. Scrolle mit Shift+↑/↓ (Zeile), PgUp/PgDn (Seite), Ctrl+Home/End (Anfang/Ende) oder dem Mausrad. Aktiviert außerdem Mausinteraktionen: Klicke auf eine Option in einem Menü/Dialog, um sie auszuwählen, hovere um sie hervorzuheben, und klicke in den Prompt, um den Cursor zu positionieren. Verwendet NICHT den Scrollback-Puffer des Host-Terminals, während es aktiviert ist. Ziehe zum Auswählen von Text im Viewport (Doppel-/Dreifachklick wählt ein Wort/eine Zeile), kopiert beim Loslassen. Um stattdessen die eigene Auswahl des Terminals zu verwenden, halte Shift (oder Option unter macOS) beim Ziehen. Ein einfacher Klick öffnet einen http(s)-Hyperlink unter dem Zeiger (andere Link-Schemas werden in die Zwischenablage kopiert), und Rechtsklick über einem Link oder einer Textauswahl öffnet ein In-App-Kontextmenü. Diese Mausinteraktionen werden durch ui.mouseTracking gesteuert; deaktiviere diese Einstellung, um die Maus vollständig an das Terminal zurückzugeben. | 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 In-App-SGR-Maus-Tracking. Während es aktiviert ist, erfasst Qwen Code Mausereignisse für Textauswahl, Klick-zu-Position in Texteingaben, Zeilen-Hover, Umschalten von History-Elementen und Viewport-Scrolling. Da das Terminal alle Mausereignisse an die App weiterleitet, liefert Qwen Code eigene Entsprechungen für das, was das Terminal nicht mehr nativ kann: ein einfacher Klick öffnet einen http(s)-Hyperlink unter dem Zeiger (andere Link-Schemas werden in die Zwischenablage kopiert), und Rechtsklick über einem Link oder einer Textauswahl öffnet ein In-App-Kontextmenü mit Open Link / Copy Link Address / Copy Selection. Deaktiviere es, um die Maus vollständig an das Terminal zurückzugeben (natives Rechtsklick-Menü und Link-Klicks); 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.goalTokenBudget | integer | Autonomes Ausgabefenster, das bei jedem neuen Goal aktiviert wird, in Tokens gemäß dem Goal-Meter gezählt (totalTokenCount summiert über die Modellaufrufe, die das Goal in eigenen Turns tätigt). Ein Goal, das sein Fenster aufbraucht, erhält einen Wind-down-Turn zur Übergabe und stoppt dann, bis du es fortsetzt, wodurch ein neues Fenster aktiviert wird. Nicht gesetzt verwendet den eingebauten Standardwert von 30.000.000; -1 bedeutet unbegrenzt. Null, Werte über 300.000.000 (10× der Standardwert, ein Tippfehlschutz), andere negative, gebrochene oder Nicht-Zahlen-Werte werden beim Start abgelehnt. | 30000000 |
model.goalCheckpointTimeoutSeconds | integer | Obergrenze für eine Goal-Evidenz-Checkpoint-Prüfung, in Sekunden. Ein langlaufendes Goal komprimiert periodisch seine Evidenz in Checkpoint-Claims mit einem Side-Model-Aufruf; wenn eine Prüfung ihren einen korrektiven Retry macht, teilen sich beide Aufrufe diese Obergrenze (Goals listet auf, welche Fehler einen verdienen). Eine Prüfung, die nicht rechtzeitig abgeschlossen wird, wird als nicht aussagekräftig aufgegeben; sie zählt nur dann zur Checkpoint-Stall-Grenze, wenn das Evidenzfenster überlaufen ist, während eine nicht überlaufende Prüfung die Serie bewahrt und in einem späteren Turn erneut versucht wird. Nicht gesetzt verwendet den eingebauten Standardwert von 180. Muss eine Ganzzahl zwischen 1 und 900 sein; andere Werte werden beim Start abgelehnt. Die Aufrufe werden gestreamt, sodass das Transport-Timeout pro Request (model.generationConfig.timeout, Standard 120 s) nur Connect und erste Antwort begrenzt, und Werte über 900 werden abgelehnt, weil jenseits des Standard-Stream-Lifetime-Guards dieser Guard, nicht diese Einstellung, die Prüfung beendet. Die Obergrenze von 900 ist fest: Eine Erhöhung von QWEN_STREAM_MAX_LIFETIME_MS hebt sie nicht an. | 180 |
model.goalMaxTurns | integer | Goal-Turn-Fenster, das bei jedem neuen Goal aktiviert wird. Jeder abgeschlossene Goal-Turn zählt, einschließlich benutzergesteuerter Turns; Benutzer-Turns werden auch an der Obergrenze noch zugelassen, aber sie können die nächste autonome Fortsetzung zu einem Wind-down machen. Ein Goal, das die Obergrenze erreicht, erhält einen Wind-down-Turn zur Übergabe und stoppt dann als nutzungslimitiert, bis du es fortsetzt, wodurch ein weiteres Fenster zusätzlich zu den bereits abgeschlossenen Turns autorisiert wird. Nicht gesetzt führt Goals ohne Turn-Obergrenze aus, und -1 sagt dies explizit – aber der Opt-Out nimmt nur einem Goal die Obergrenze, das sie bereits aufgebraucht hat, bei der folgenden Fortsetzung oder Bearbeitung; ein Goal, das noch unter seiner Obergrenze liegt, behält sie. Eine Obergrenze wird nur bei einem nach der Änderung erstellten Goal aktiviert, daher bedeutet das Begrenzen eines bereits vorhandenen Goals, es mit /goal set zu ersetzen, was ein neues Goal bei Revision 1 mit zurückgesetzten Zählern und nicht mehr zitierbarer früherer Evidenz startet, oder es zu löschen und neu zu beginnen. Null, Werte über 10.000, andere negative, gebrochene oder Nicht-Zahlen-Werte werden beim Start abgelehnt. Änderungen werden nach einem Neustart wirksam. | (none) |
model.goalMaxActiveMinutes | integer | Aktivzeitfenster, das bei jedem neuen Goal aktiviert wird, in Minuten Wall-Clock-Zeit, während das Goal aktiv bleibt, einschließlich Warte- und Leerlaufzeit zwischen Turns. Pausierte, blockierte oder gestoppte Zeit zählt nicht, ebenso wenig wie Ausfallzeit über einen Neustart hinweg; ein suspendierter Prozess wird weiterhin belastet. Ein Goal, das die Obergrenze erreicht, erhält einen Wind-down-Turn zur Übergabe und stoppt dann als nutzungslimitiert, bis du es fortsetzt, wodurch ein weiteres Fenster ab dem Stoppzeitpunkt autorisiert wird. Die Obergrenze wird zwischen Turns gelesen, nicht per Timer, sodass ein Goal weit über sie hinauslaufen kann, bevor es stoppt. Aktivzeit wird zwischen aufgezeichneten Übergängen gemessen, daher wird Zeit in einem Turn, den ein Neustart unterbrochen hat, nicht belastet. Nicht gesetzt führt Goals ohne Zeit-Obergrenze aus, und -1 sagt dies explizit – aber der Opt-Out nimmt nur einem Goal die Obergrenze, das sie bereits aufgebraucht hat, bei der folgenden Fortsetzung oder Bearbeitung. Eine Obergrenze wird nur bei einem nach der Änderung erstellten Goal aktiviert, daher bedeutet das Begrenzen eines bereits vorhandenen Goals, es mit /goal set zu ersetzen, was ein neues Goal bei Revision 1 mit zurückgesetzten Zählern und nicht mehr zitierbarer früherer Evidenz startet, oder es zu löschen und neu zu beginnen. Null, Werte über 10.080 (eine Woche), andere negative, gebrochene oder Nicht-Zahlen-Werte werden beim Start abgelehnt. Änderungen werden nach einem Neustart wirksam. | (none) |
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 für OpenAI-kompatible und OpenAI Responses 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,
"streamIdleTimeoutMs": 300000,
"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 (OpenAI-kompatible und Anthropic-Provider):
Zwei Guards begrenzen eine Streaming-Antwort, jeder akzeptiert 0 zum Deaktivieren. Der Gemini-Generator implementiert sie nicht, was die unten beschriebene tröpfchenweise Form für Gemini-Modelle unbegrenzt lässt.
streamIdleTimeoutMs(Standard240000) begrenzt die Inaktivität zwischen gestreamten Chunks: Ein Stream, der so lange schweigt, wird als wiederholbaresETIMEDOUTabgebrochen. Für Provider-basierte Modelle setze ihn unter der passendenmodelProviders[providerId][].generationConfig; für Runtime-Modelle verwendemodel.generationConfig. Ein expliziter Modellwert hat Vorrang vorQWEN_STREAM_IDLE_TIMEOUT_MS, und0deaktiviert den Idle-Guard.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.
streamMaxLifetimeMs bleibt nur über QWEN_STREAM_MAX_LIFETIME_MS oder für Embedder über ContentGeneratorConfig.streamMaxLifetimeMs verfügbar; das Schreiben in settings.json hat keine Wirkung. Die 15-Minuten-Lifetime-Obergrenze begrenzt weiterhin einen Stream, dessen Idle-Timeout darüber angehoben wurde. Hebe die Lifetime-Umgebungsvariable ebenfalls an oder setze sie auf 0, wenn du ein längeres Fenster benötigst. Das alleinige Deaktivieren von streamIdleTimeoutMs deaktiviert diese Lifetime-Obergrenze nicht.
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 für OpenAI-kompatible Provider (openai, qwen-oauth) und die OpenAI Responses API (openai-responses) unterstützt. Es wird für Anthropic- und Gemini-Provider ignoriert. Auf dem openai-responses-Wire wird der Legacy-Key enable_thinking in reasoning.effort übersetzt, anstatt unverändert weitergeleitet zu werden – verwende für diesen Provider stattdessen direkt reasoning.effort. 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 Auto-Compaction 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 Compaction 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 neuere 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. Eine nicht-leere Liste beschränkt das Core-Tool-Set (Datei, Shell, Suche und verwandte Built-ins) auf eine Allowlist: Core-Tools, die nicht in der Liste sind, werden deaktiviert (fail-closed). Tools außerhalb dieser Menge – dynamisch entdeckte Tools (MCP, Skill) und synthetische/System-Built-ins wie agent, list_agents, Plan-Mode-Lifecycle-Tools, Goal-Tools, task_stop, send_message und tool_search – umgehen die Allowlist by Design; verwende permissions.deny, um die Aufrufe eines Tools zu blockieren (bei MCP-Tools bleibt es aufgelistet und wird zur Laufzeit abgelehnt), oder tools.disabled / den serverbezogenen excludeTools-Filter, um es vollständig aus der Registry zu entfernen. Eine leere Liste ([]) wird wie nicht gesetzt behandelt und deaktiviert nichts. permissions.allow kann diese Einschränkung nicht reproduzieren – es ist reine Auto-Genehmigung (#10075). Verwende tools.eager, um einzuschränken, welche eagerly-als-Standard-Tool-Schemas initial gesendet werden (nicht aufgeführte Tools werden deferred, nicht deaktiviert – sie bleiben über tool_search ladbar), und permissions.deny, um Tools vollständig zu blockieren. | undefined | |
tools.exclude | array of strings | Veraltet. Verwende stattdessen permissions.deny. Tool-Namen, die von der Discovery ausgeschlossen werden sollen. Wird nicht automatisch migriert; die Legacy-Einstellung wird beim Start weiterhin berücksichtigt. | 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.eager | array of strings | Allowlist von eagerly-als-Standard integrierten Tool-Namen, deren Schemas für die initiale Model-Anfrage infrage kommen. Nicht aufgeführte nicht-ausgenommene Tools werden stattdessen deferred: weiterhin registriert, in /tools aufgelistet, aufrufbar und über tool_search entdeckbar. Tools, die standardmäßig bereits deferred sind, bleiben auch bei Auflistung on Demand; verwende tools.visible, um eines beim Start einzublenden. tool_search, structured_output, Plan-Mode-Lifecycle-Tools, task_stop, MCP-Tools und computer_use__*-Tools sind nicht betroffen und behalten ihr normales Ladeverhalten. Eine explizit leere Liste ([]) ist aktiv und verschiebt jedes nicht-ausgenommene eagerly-als-Standard-Tool nach deferred; das Weglassen der Einstellung bedeutet keine Einschränkung. Pairt mit tool_search: wenn ToolSearch nicht registriert ist – tools.toolSearch.enabled: false, eine tool_search-Deny-Regel oder die automatische Opt-Out für DeepSeek-Modelle – hält die Allowlist weiterhin die Schemas zurück, aber nichts kann sie zurückladen, sodass die herabgestuften Tools für diese Session unerreichbar sind (sie bleiben in /tools, und eine Warnung wird protokolliert). Zwei Ausnahmen: Herabgestufte Tools, die in der wiederhergestellten Session-Historie referenziert werden, erhalten ihre Schemas ohne Warnung erneut gesendet, und herabgestufte Tools, die in tools.visible aufgeführt sind, werden von vornherein deklariert. Verwende permissions.deny, wenn du sie entfernen wolltest, oder lasse ToolSearch aktiviert. Unbrauchbare Einträge (leer oder fehlerhaft) werden mit einer Warnung verworfen und lassen den Rest der Liste aktiv. Spätere Scopes ersetzen frühere Listen. Erfordert Neustart. | undefined | |
tools.allowed | array of strings | Veraltet. Verwende stattdessen permissions.allow. Tool-Namen, die den Bestätigungsdialog umgehen. Wird nicht automatisch migriert; die Legacy-Einstellung wird beim Start weiterhin berücksichtigt. | 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. Wenn die tools.eager-Allowlist aktiv ist, wird ein entdecktes Tool, das nicht darin aufgeführt ist, als deferred registriert: es bleibt in /tools und ist über tool_search ladbar, aber sein Schema wird nicht in die initiale Model-Anfrage gesendet. | undefined | |
tools.callCommand | string | Definiert einen benutzerdefinierten Shell-Befehl zum Aufrufen eines bestimmten Tools, das über tools.discoveryCommand entdeckt 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). |
goals.modelProposed | enum | Steuert das propose_goal-Tool, mit dem das Modell ein Session-Ziel zur Genehmigung vorschlagen kann: alwaysAsk zeigt jeden Vorschlag in einem Genehmigungsdialog an, und nichts wird gesetzt, bis du ihn akzeptierst; "disabled" entfernt das Tool. Ein manuell eingegebenes /goal bleibt unberührt. | alwaysAsk | User-, System- und SystemDefaults-Scopes; Workspace-Werte werden ignoriert. Neustart erforderlich: Ja. |
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.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 gewöhnlicher Deferred Tools verwendet wird (sowohl gebündelte Built-ins als auch MCP). Wenn ihre kombinierten Schemas in dieses Budget passen, werden sie im Voraus deklariert, anstatt bei Bedarf über ToolSearch geladen zu werden. Durch tools.eager herabgestufte Tools sind von diesem Preload ausgeschlossen und bleiben on Demand. 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 |
tools.todoWrite.enabled | boolean | Aktiviert das integrierte todo_write-Tool und seine System-Prompt-Anleitung. Standardmäßig deaktiviert. | false | Neustart erforderlich: Ja |
Migration von tools.core / tools.exclude / tools.allowed: Diese Legacy-Einstellungen sind veraltet, werden aber nicht automatisch migriert; sie funktionieren beim Start weiterhin. Migriere tools.allowed und tools.exclude manuell zu permissions.allow und permissions.deny. tools.core hat keinen exakten Ersatz; siehe die Tabelle unten.
memory
| Einstellung | Typ | Beschreibung | Standardwert |
|---|---|---|---|
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
| Einstellung | Typ | Beschreibung | Standardwert |
|---|---|---|---|
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 |
agents.crossSessionMessaging | boolean | Experimentell. Ermöglicht Qwen Code-Sessions auf diesem Rechner, sich über einen lokalen Socket pro Session gegenseitig Nachrichten zu senden. Das Aktivieren öffnet diese Session für Peer-Nachrichten, macht sie für andere auffindbar und ermöglicht es ihrem Modell, sie über send_message zu adressieren. Erfordert Neustart. Ein Workspace darf dies nur auf false setzen; ein true im Workspace wird ignoriert, mit einer Warnung nur, wenn es den vom Operator gesetzten oder den Standardwert auflockern würde. | false |
agents.crossSessionInbound | enum | Was mit eingehenden Cross-Session-Nachrichten geschieht: accept liefert sie zu, hold parkt sie zur Überprüfung durch /peers, ohne das Modell handeln zu lassen, und refuse meldet diese Session ab. Nicht gesetzt bedeutet, dass vom Benutzer erstellte Controller und die eigenen Child-Prozesse dieser Session automatisch zustellen, während andere Sessions Review-Class-Parität verwenden; andere Nachrichten werden zur Überprüfung gehalten. Ein Workspace darf dies nur straffen (hold oder refuse, wenn strenger als der vom Operator gesetzte Wert oder der Standardwert bei nicht gesetztem Wert); ein effektiver unbekannter Wert hält jede Nachricht. | 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. Dieser Key ist REINE Auto-Genehmigung: er entfernt, stuft kein Tool herab oder blendet es aus, und jedes Built-in bleibt registriert, unabhängig davon, welche Tools die Regeln abdecken; standardmäßig deferred Tools (wie task_stop oder monitor) behalten ihre übliche On-Demand-Ladung über tool_search (#10075). Um das Schema eines Tools aus der initialen Model-Anfrage herauszuhalten, verwende tools.eager; um ein Tool vollständig zu blockieren, verwende eine Whole-Tool-permissions.deny-Regel – MCP-Tools sind von der Deny-basierten Entfernung ausgenommen (siehe die permissions.deny-Zeile): verstecke sie mit den serverbezogenen excludeTools / tools.disabled-Filtern. Ausnahme: im AUTO-Genehmigungsmodus werden gefährliche Allow-Regeln versteckt statt aktiviert, sodass ein Entfernen während der Session den Stash nicht berühren kann – beim Verlassen des AUTO-Modus wird die gestashte Regel wiederhergestellt und genehmigt automatisch bis zum Session-Neustart. | undefined |
permissions.ask | array of strings | Regeln für Tool-Aufrufe, die immer eine Benutzerbestätigung erfordern. Hat Vorrang vor allow. Wie allow beeinflusst dies niemals, ob ein Tool registriert ist. | undefined |
permissions.deny | array of strings | Regeln für blockierte Tool-Aufrufe. Höchste Priorität – überschreibt sowohl allow als auch ask. Eine Whole-Tool-Deny-Regel (ohne Spezifizierer) entfernt das Tool auch aus der Registry – für eingebaute Tools und über tools.discoveryCommand gefundene Tools. MCP-Tools sind ausgenommen (ihr Registrierungspfad berücksichtigt nur disabledTools): verstecke sie mit den serverbezogenen excludeTools / tools.disabled-Filtern stattdessen. Deny-Regeln blockieren weiterhin MCP-Tool-Aufrufe zur Laufzeit. | 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 nicht automatisch migriert; wird beim Start weiterhin berücksichtigt |
tools.exclude | permissions.deny | Wird nicht automatisch migriert; wird beim Start weiterhin berücksichtigt |
tools.core | tools.eager (+ permissions.deny) | Wird nicht automatisch zu permissions.allow migriert, das reine Auto-Genehmigung ist und die Allowlist-Einschränkung nicht reproduzieren kann (#10075). tools.eager verschiebt nicht aufgeführte eagerly-als-Standard-Tools nach deferred (sie bleiben über tool_search ladbar); permissions.deny entfernt Built-ins vollständig aus der Registry (MCP-Tools bleiben aufgelistet und werden zur Laufzeit abgelehnt – verwende tools.disabled / den serverbezogenen excludeTools-Filter, um sie vollständig zu entfernen). Keines bewahrt die fail-closed-Garantie einer nicht-leeren tools.core-Allowlist über das Core-Tool-Set: ein in einem zukünftigen Release hinzugefügtes Built-in registriert sich, bis es explizit verweigert wird, daher muss eine Deny-Liste pro Release erneut geprüft werden. Eine leere tools.core-Liste wird wie nicht gesetzt behandelt und deaktiviert nichts. |
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), außer dass ein Skill-Befehl unter beiden Schreibweisen gesperrt wird — seinem registrierten Namen (rust:pdf) oder dem Namen, den sein SKILL.md Autoren verwenden (pdf) — sodass ein Eintrag, der vor der Existenz dieses Präfixes geschrieben wurde, ihn immer noch sperrt. 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. Ein Extension-Skill wird unter beiden Schreibweisen abgeglichen — seinem registrierten Namen (rust:pdf) oder dem Namen, den sein SKILL.md Autoren verwenden (pdf) — sodass ein Eintrag, der vor der Existenz des Präfixes geschrieben wurde, weiterhin greift. | 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. Überschreiben einen passenden skills.defaultDisabled-Eintrag und, bei einem Extension-Skill, den eigenen Standard der besitzenden Extension und die gespeicherte Aktivierung dieses Workspaces dafür. Wird case-insensitive abgeglichen und als Union über die Einstellungsbereiche zusammengeführt — nur gegen den registrierten Namen des Skills, sodass ein Extension-Skill rust:pdf benötigt: ein bloßes pdf wird niemals als Gewährung abgeglichen — es annulliert nur einen gleich geschriebenen skills.defaultDisabled-Eintrag (gemäß der Gleichschreibungs-Regel unten), und sobald es annulliert wurde, entscheidet die für diesen Workspace gespeicherte Aktivierung, sonst der eigene Standard der besitzenden Extension. 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.
Jede Liste enthält literale Skill-Namen, die nach dem Trimmen case-insensitive abgeglichen werden, ohne Glob-Unterstützung. skills.enabled annulliert einen skills.defaultDisabled-Eintrag nur, wenn beide Einträge gleich geschrieben sind, weil dieser Schritt die Einträge selbst vergleicht, anstatt sie zu einem Skill aufzulösen — sodass ein Extension-Skill, der sowohl aus dem Standard genommen als auch aktiviert werden muss, in beiden Listen als rust:pdf geschrieben wird. Siehe Extension Skills, warum die beiden obigen Listen beide Schreibweisen akzeptieren und diese nicht.
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. Erfordert tools.todoWrite.enabled. 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 |
telemetry
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 und API-Request/Response-Text 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. |
outboundCorrelation
⚠️ Sicherheitsrelevant. Steuert, welche clientseitigen Korrelationsdaten Qwen Code in ausgehende LLM-API-Requests schreibt – eine separate Genehmigungsentscheidung als telemetry.*, das die Daten regelt, die in dein EIGENES Observability-Backend fließen. Alle Werte sind standardmäßig ausgeschaltet.
| Setting | Type | Beschreibung | Default |
|---|---|---|---|
outboundCorrelation.propagateTraceContext | boolean | Injiziert W3C-traceparent in ausgehende fetch-Requests und als TRACEPARENT-Umgebungsvariable in Shell-Kindprozesse. Erfordert telemetry.enabled: true. | false |
outboundCorrelation.allowDynamicHeaderValues | boolean | Erlaubt, dass customHeaders-Werte Laufzeit-Platzhalter wie ${session_id} enthalten, die pro Request expandiert werden. Wenn ausgeschaltet, wird ein solcher Wert verworfen statt gesendet. | false |
{
"outboundCorrelation": {
"allowDynamicHeaderValues": true
}
}allowDynamicHeaderValues ist nur der Genehmigungsschalter. Welche Hosts den Wert erhalten und wie der Header heißt, wird dort entschieden, wo der Header lebt — modelProviders[].generationConfig.customHeaders, siehe Dynamic values in customHeaders.
Dieses Scoping ist der Grund, warum es hier keine Host-Allowlist gibt: Du hast den Endpunkt bereits gewählt, als du die baseUrl des Providers geschrieben hast, und Provider, die den Header nicht senden sollen, tragen ihn einfach nicht.
Wenn ein Provider-Eintrag einen Platzhalter hat, während dies ausgeschaltet ist, wird der Header verworfen und eine Warnung, die beide nennt, beim Start ausgegeben – sodass ein Gateway, das deine Requests ablehnt, niemals ein stilles Rätsel sein sollte.
Datenschutzhinweis: Ein expandierter Wert ist ein stabiler Pro-Konversation-Identifikator. Setze ihn nur bei einem Provider, an den du bereits deine Prompt-Inhalte sendest.
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 von dieser Standardliste 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 function_args, error, error.message und error_message auf Log-to-Span-Bridge-Spans zu belassen, sowie prompt / request_text / response_text, wenn telemetry.logPrompts ebenfalls aktiviert ist). 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 zwangsweise zu aktivieren; setze es auf 0 oder einen nicht-numerischen Wert wie false / off, um es zwangsweise 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. |
Standalone-Update-Downloadquelle
Setze QWEN_UPDATE_BASE_URL, um ein benutzerdefiniertes HTTPS-Release-Root für Standalone-Updates zu verwenden:
export QWEN_UPDATE_BASE_URL="https://downloads.example.com/qwen-code"
qwen updateFür Version 0.23.0 lädt der Updater das Plattform-Archiv, SHA256SUMS und SHA256SUMS.sig von <base-url>/v0.23.0/ herunter. Hoste diese Dateien unter denselben Namen und demselben Verzeichnis-Layout wie ein offizielles Release. Bestehende Prüfsummen- und Signaturprüfungen gelten weiterhin, einschließlich QWEN_REQUIRE_SIGNATURE=1, wenn eine Signatur erforderlich ist.
Die URL muss HTTPS verwenden und darf keine Credentials, einen Query-String oder ein Fragment enthalten. Umgebende Whitespaces und abschließende Schrägstriche werden entfernt. Ein leerer oder nur aus Whitespaces bestehender Wert behält die eingebauten Downloadquellen und ihre Fallback-Reihenfolge bei. Wenn ein benutzerdefiniertes Root gesetzt ist, fällt ein fehlgeschlagener Download nicht auf die eingebauten Quellen zurück.
Konfiguriere diese Variable in der startenden Shell oder einer .env-Datei auf Benutzerebene. Sie wird aus Projekt-.env- und .qwen/.env-Dateien sowie aus dem env-Abschnitt der obersten Ebene in settings.json auf jedem Scope abgelehnt. Ein .env-Wert auf Benutzerebene wird beim Start geladen; starte Qwen Code nach der Änderung neu.
Diese Einstellung gilt für qwen update, /update und automatische Standalone-Updates. Sie ändert nicht die npm-Registry-Versionserkennung. Sie ist getrennt von der QWEN_INSTALL_BASE_URL des Installers, die direkt auf ein versionsspezifisches Verzeichnis zeigt.
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-style | Wählt den Ausgabestil aus, der bestimmt, wie Antworten für diesen Durchlauf geschrieben werden. | Stilname | Concise, Proactive, Explanatory, Learning, der Name eines benutzerdefinierten Stils, oder default für keinen Stil (case-insensitive). Überschreibt die general.outputStyle-Einstellung. Ein unbekannter Name gibt eine Warnung aus und die Session startet mit dem Standardstil. Hat keine Wirkung, wenn --system-prompt oder QWEN_SYSTEM_MD den eingebauten Prompt ersetzt. 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 deiner 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.
- Session-Informationen: 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.