Skip to Content
BenutzerhandbuchKonfigurationEinstellungen

Qwen Code Konfiguration

Tip

Authentifizierung / API-Keys: Die Authentifizierung (Qwen OAuth, Alibaba Cloud Coding Plan oder API-Key) sowie authentifizierungsbezogene Umgebungsvariablen (wie OPENAI_API_KEY) sind unter Authentifizierung dokumentiert.

Note

Hinweis zum neuen Konfigurationsformat: Das Format der settings.json-Datei wurde auf eine neue, besser strukturierte Form aktualisiert. Das alte Format wird automatisch migriert. Qwen Code bietet mehrere 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 Nummern werden von höheren Nummern überschrieben):

EbeneKonfigurationsquelleBeschreibung
1StandardwerteIn der Anwendung fest codierte Standardwerte
2System-StandarddateiSystemweite Standardeinstellungen, die durch andere Einstellungsdateien überschrieben werden können
3Benutzer-EinstellungsdateiGlobale Einstellungen für den aktuellen Benutzer
4Projekt-EinstellungsdateiProjektspezifische Einstellungen
5System-EinstellungsdateiSystemweite Einstellungen, die alle anderen Einstellungsdateien überschreiben
6UmgebungsvariablenSystemweite oder sitzungsspezifische Variablen, die ggf. aus .env-Dateien geladen werden
7BefehlszeilenargumenteWerte, die beim Starten der CLI übergeben werden

Einstellungsdateien

Qwen Code verwendet JSON-Einstellungsdateien für die persistente Konfiguration. Es gibt vier Speicherorte für diese Dateien:

DateitypSpeicherortGeltungsbereich
System-StandarddateiLinux: /etc/qwen-code/system-defaults.json
Windows: C:\ProgramData\qwen-code\system-defaults.json
macOS: /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-Überschreibungseinstellungen ü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 spezifischen Projekt heraus ausgeführt wird. Projekteinstellungen überschreiben Benutzereinstellungen.
System-EinstellungsdateiLinux: /etc/qwen-code/settings.json
Windows: C:\ProgramData\qwen-code\settings.json
macOS: /Library/Application Support/QwenCode/settings.json
Der 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-Einrichtungen der Benutzer zu steuern.
Note

Hinweis zu Umgebungsvariablen in Einstellungen: Zeichenkettenwerte in deinen settings.json-Dateien können Umgebungsvariablen entweder mit der $VAR_NAME- oder der ${VAR_NAME}-Syntax referenzieren. Diese Variablen werden beim Laden der Einstellungen automatisch aufgelöst. Wenn du beispielsweise eine Umgebungsvariable MY_API_TOKEN hast, kannst du sie in settings.json so 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 z. B.:

Konfigurationsmigration

Qwen Code migriert veraltete 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 EinstellungNeue EinstellungHinweise
disableAutoUpdate + disableUpdateNaggeneral.enableAutoUpdateZu einer einzigen Einstellung zusammengefasst
disableLoadingPhrasesui.accessibility.enableLoadingPhrases
disableFuzzySearchcontext.fileFiltering.enableFuzzySearch
disableCacheControlmodel.generationConfig.enableCacheControl
Note

Invertierung von Boolean-Werten: Bei der Migration werden Boolean-Werte invertiert (z. B. wird disableAutoUpdate: true zu enableAutoUpdate: false).

Konsolidierungsrichtlinie für disableAutoUpdate und disableUpdateNag

Wenn beide veralteten 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:

disableAutoUpdatedisableUpdateNagMigriertes enableAutoUpdate
falsefalsetrue
falsetruefalse
truefalsefalse
truetruefalse

Verfügbare Einstellungen in settings.json

Die Einstellungen sind in Kategorien organisiert. Alle Einstellungen sollten innerhalb ihres entsprechenden Top-Level-Kategorieobjekts in deiner settings.json-Datei platziert werden.

general

SettingTypeDescriptionDefault
general.preferredEditorstringDer bevorzugte Editor zum Öffnen von Dateien.undefined
general.vimModebooleanVim-Tastenkombinationen aktivieren.false
general.enableAutoUpdatebooleanAutomatische Update-Prüfungen und -Installationen beim Start aktivieren.true
general.gitCoAuthorbooleanFügt Git-Commit-Nachrichten automatisch einen Co-authored-by-Trailer hinzu, wenn Commits über Qwen Code erstellt werden.true
general.checkpointing.enabledbooleanSession-Checkpointing für die Wiederherstellung aktivieren.false
general.defaultFileEncodingstringStandardkodierung 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 explizit BOM erfordert."utf-8"

output

SettingTypeDescriptionDefaultPossible Values
output.formatstringDas Format der CLI-Ausgabe."text""text", "json"

ui

SettingTypeDescriptionDefault
ui.themestringDas Farbthema für die UI. Siehe Themes für verfügbare Optionen.undefined
ui.customThemesobjectDefinitionen für benutzerdefinierte Themes.{}
ui.statusLineobjectKonfiguration der benutzerdefinierten Statuszeile. Ein Shell-Befehl, dessen Ausgabe im linken Bereich der Fußzeile angezeigt wird. Siehe Status Line.undefined
ui.hideWindowTitlebooleanDie Fenstertitelleiste ausblenden.false
ui.hideTipsbooleanHilfreiche Tipps in der UI ausblenden.false
ui.hideBannerbooleanDas Anwendungsbanner ausblenden.false
ui.hideFooterbooleanDie Fußzeile in der UI ausblenden.false
ui.showMemoryUsagebooleanInformationen zur Speichernutzung in der UI anzeigen.false
ui.showLineNumbersbooleanZeilennummern in Codeblöcken der CLI-Ausgabe anzeigen.true
ui.showCitationsbooleanQuellenangaben für generierten Text im Chat anzeigen.true
ui.compactModebooleanTool-Ausgabe und Thinking-Blöcke für eine übersichtlichere Ansicht ausblenden. Umschaltbar mit Ctrl+O während einer Sitzung. Wenn aktiviert, erscheint ein compact-Indikator in der Fußzeile. Die Einstellung bleibt sitzungsübergreifend erhalten.false
enableWelcomeBackbooleanWillkommensdialog anzeigen, wenn du zu einem Projekt mit Chatverlauf 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. Diese Funktion ist mit dem /summary-Befehl und dem Bestätigungsdialog beim Beenden integriert.true
ui.accessibility.enableLoadingPhrasesbooleanLade-Phrasen aktivieren (für Barrierefreiheit deaktivieren).true
ui.accessibility.screenReaderbooleanAktiviert den Screenreader-Modus, der die TUI für eine bessere Kompatibilität mit Screenreadern anpasst.false
ui.customWittyPhrasesarray of stringsEine Liste benutzerdefinierter Phrasen, die während Ladezuständen angezeigt werden. Wenn angegeben, durchläuft die CLI diese Phrasen anstelle der Standardphrasen.[]
ui.enableFollowupSuggestionsbooleanFolgevorschläge aktivieren, die vorhersagen, was du als Nächstes eingeben möchtest, nachdem das Modell geantwortet hat. Vorschläge erscheinen als Geister-Text und können mit Tab, Enter oder dem rechten Pfeil akzeptiert werden.true
ui.enableCacheSharingbooleanCache-aware forked queries für die Vorschlagsgenerierung verwenden. Reduziert Kosten bei Providern, die Prefix-Caching unterstützen (experimentell).true
ui.enableSpeculationbooleanAkzeptierte Vorschläge spekulativ vor der Übermittlung ausführen. Ergebnisse erscheinen sofort bei Akzeptanz (experimentell).false

ide

SettingTypeDescriptionDefault
ide.enabledbooleanIDE-Integrationsmodus aktivieren.false
ide.hasSeenNudgebooleanGibt an, ob der Benutzer den Hinweis zur IDE-Integration bereits gesehen hat.false

privacy

SettingTypeDescriptionDefault
privacy.usageStatisticsEnabledbooleanErfassung von Nutzungsstatistiken aktivieren.true

model

SettingTypeDescriptionDefault
model.namestringDas Qwen-Modell, das für Konversationen verwendet werden soll.undefined
model.maxSessionTurnsnumberMaximale Anzahl an Benutzer-/Modell-/Tool-Turns, die in einer Sitzung gespeichert werden. -1 bedeutet unbegrenzt.-1
model.generationConfigobjectErweiterte Overrides, die an den zugrunde liegenden Content-Generator übergeben werden. Unterstützt Request-Controls wie timeout, maxRetries, enableCacheControl, contextWindowSize (Überschreibt die Context-Window-Größe des Modells), modalities (Überschreibt automatisch erkannte Eingabe-Modalitäten), customHeaders (benutzerdefinierte HTTP-Header für API-Requests) und extra_body (zusätzliche Body-Parameter nur für OpenAI-kompatible API-Requests), sowie Feinabstimmungsparameter unter samplingParams (z. B. temperature, top_p, max_tokens). Nicht gesetzt lassen, um auf Provider-Standards zurückzugreifen.undefined
model.chatCompression.contextPercentageThresholdnumberLegt den Schwellenwert für die Chatverlaufskomprimierung als Prozentsatz des gesamten Token-Limits des Modells fest. Dies ist ein Wert zwischen 0 und 1, der sowohl für die automatische Komprimierung als auch für den manuellen /compress-Befehl gilt. Ein Wert von 0.6 löst beispielsweise die Komprimierung aus, wenn der Chatverlauf 60 % des Token-Limits überschreitet. Verwende 0, um die Komprimierung vollständig zu deaktivieren.0.7
model.skipNextSpeakerCheckbooleanDie Prüfung des nächsten Sprechers überspringen.false
model.skipLoopDetectionbooleanDeaktiviert Loop-Detection-Prüfungen. Die Loop-Detection verhindert Endlosschleifen in KI-Antworten, kann aber falsche Positive erzeugen, die legitime Workflows unterbrechen. Aktiviere diese Option, wenn du häufige Unterbrechungen durch falsch positive Loop-Detection-Erkennungen erlebst.false
model.skipStartupContextbooleanÜberspringt das Senden des Startup-Workspace-Kontexts (Umgebungszusammenfassung und Bestätigung) zu Beginn jeder Sitzung. Aktiviere dies, wenn du den Kontext manuell bereitstellen oder Tokens beim Start sparen möchtest.false
model.enableOpenAILoggingbooleanAktiviert das Logging von OpenAI-API-Aufrufen zum Debuggen und Analysieren. Wenn aktiviert, werden API-Requests und -Responses in JSON-Dateien protokolliert.false
model.openAILoggingDirstringBenutzerdefinierter Verzeichnispfad für OpenAI-API-Logs. Wenn nicht angegeben, wird standardmäßig logs/openai im aktuellen Arbeitsverzeichnis verwendet. Unterstützt absolute Pfade, relative Pfade (aufgelöst vom aktuellen Arbeitsverzeichnis) und ~-Erweiterung (Home-Verzeichnis).undefined

Beispiel für model.generationConfig:

{ "model": { "generationConfig": { "timeout": 60000, "contextWindowSize": 128000, "modalities": { "image": true }, "enableCacheControl": true, "customHeaders": { "X-Client-Request-ID": "req-123" }, "extra_body": { "enable_thinking": true }, "samplingParams": { "temperature": 0.2, "top_p": 0.8, "max_tokens": 1024 } } } }

max_tokens (adaptive Ausgabe-Tokens):

Wenn samplingParams.max_tokens nicht gesetzt ist, verwendet Qwen Code eine adaptive Strategie für Ausgabe-Tokens, um die GPU-Ressourcennutzung zu optimieren:

  1. Requests beginnen mit einem Standardlimit von 8K Ausgabe-Tokens
  2. Wenn die Antwort abgeschnitten wird (das Modell erreicht das Limit), wiederholt Qwen Code den Vorgang automatisch mit 64K Tokens
  3. Die teilweise Ausgabe wird verworfen und durch die vollständige Antwort aus dem Retry ersetzt

Dies geschieht transparent für Benutzer – du siehst möglicherweise kurz einen Retry-Indikator, wenn eine Eskalation erfolgt. Da 99 % der Antworten unter 5K Tokens liegen, tritt der Retry selten auf (<1 % der Requests).

Um dieses Verhalten zu überschreiben, setze entweder samplingParams.max_tokens in deinen Einstellungen oder verwende die Umgebungsvariable QWEN_CODE_MAX_OUTPUT_TOKENS.

contextWindowSize:

Überschreibt die standardmäßige Context-Window-Größe für das ausgewählte Modell. Qwen Code ermittelt die Context-Window-Größe anhand interner Standards basierend auf Modellnamens-Matching, mit einem konstanten Fallback-Wert. Verwende diese Einstellung, wenn das effektive Context-Limit eines Providers von Qwen Codes Standard abweicht. Dieser Wert definiert die angenommene maximale Context-Kapazität des Modells, nicht ein Token-Limit pro Request.

modalities:

Überschreibt die automatisch erkannten Eingabe-Modalitäten für das ausgewählte Modell. Qwen Code erkennt unterstützte Modalitäten (Bild, PDF, Audio, Video) automatisch basierend auf Modellnamens-Mustern. Verwende diese Einstellung, wenn die Auto-Erkennung fehlerhaft ist – z. B. 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 benötigen. Wenn customHeaders in modelProviders[].generationConfig.customHeaders definiert ist, wird es direkt verwendet; andernfalls werden Header aus model.generationConfig.customHeaders verwendet. Es findet kein Merging zwischen den beiden Ebenen statt.

Das Feld extra_body ermöglicht das Hinzufügen benutzerdefinierter Parameter zum Request-Body, der an die API gesendet wird. Dies ist nützlich für providerspezifische Optionen, die nicht von den Standardkonfigurationsfeldern abgedeckt werden. Hinweis: Dieses Feld wird nur für OpenAI-kompatible Provider (openai, qwen-oauth) unterstützt. Es wird für Anthropic- und Gemini-Provider ignoriert. Wenn extra_body in modelProviders[].generationConfig.extra_body definiert ist, wird es direkt verwendet; andernfalls werden Werte aus model.generationConfig.extra_body verwendet.

Beispiele für model.openAILoggingDir:

  • "~/qwen-logs" - Logs im Verzeichnis ~/qwen-logs
  • "./custom-logs" - Logs in ./custom-logs relativ zum aktuellen Verzeichnis
  • "/tmp/openai-logs" - Logs im absoluten Pfad /tmp/openai-logs

fastModel

SettingTypeDescriptionDefault
fastModelstringModell, 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.""

context

SettingTypeDescriptionDefault
context.fileNamestring or array of stringsDer Name der Kontextdatei(en).undefined
context.importFormatstringDas Format, das beim Importieren von Memory verwendet werden soll.undefined
context.includeDirectoriesarrayZusä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 aufgenommen werden sollen. 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 Befehlszeilenflag --include-directories kombiniert werden.[]
context.loadFromIncludeDirectoriesbooleanSteuert 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.respectGitIgnoreboolean.gitignore-Dateien bei der Suche beachten.true
context.fileFiltering.respectQwenIgnoreboolean.qwenignore-Dateien bei der Suche beachten.true
context.fileFiltering.enableRecursiveFileSearchbooleanGibt an, ob bei der Vervollständigung von @-Präfixen im Prompt rekursiv nach Dateinamen im aktuellen Baum gesucht werden soll.true
context.fileFiltering.enableFuzzySearchbooleanWenn true, aktiviert Fuzzy-Suchfunktionen bei der Dateisuche. Setze auf false, um die Leistung bei Projekten mit einer großen Anzahl von Dateien zu verbessern.true
context.gapThresholdMinutesnumberMinuten der Inaktivität, nach denen beibehaltene Thinking-Blöcke gelöscht werden, um Context-Tokens freizugeben. Richtet sich nach der typischen Prompt-Cache-TTL von Providern. Erhöhe den Wert, wenn dein Provider eine längere Cache-TTL hat.5

Fehlerbehebung bei der Dateisuchleistung

Wenn du Leistungsprobleme bei der Dateisuche hast (z. B. bei @-Vervollständigungen), insbesondere in Projekten mit einer sehr großen Anzahl von Dateien, kannst du folgende Schritte in der empfohlenen Reihenfolge versuchen:

  1. Verwende .qwenignore: Erstelle eine .qwenignore-Datei im Projektstamm, 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 Leistung zu verbessern.
  2. Deaktiviere Fuzzy Search: Wenn das Ignorieren von Dateien nicht ausreicht, kannst du die Fuzzy-Suche deaktivieren, indem du enableFuzzySearch in deiner settings.json-Datei auf false setzt. Dadurch wird ein einfacherer, nicht-fuzziger Matching-Algorithmus verwendet, der schneller sein kann.
  3. Deaktiviere rekursive Dateisuche: Als letzten Ausweg kannst du die rekursive Dateisuche vollständig deaktivieren, indem du enableRecursiveFileSearch auf false setzt. Dies ist die schnellste Option, da sie einen rekursiven Durchlauf deines Projekts vermeidet. Das bedeutet jedoch, dass du bei der Verwendung von @-Vervollständigungen den vollständigen Pfad zu Dateien eingeben musst.

tools

SettingTypeDescriptionDefaultNotes
tools.sandboxboolean or stringSandbox-Ausführungsumgebung (kann ein Boolean oder ein Pfad-String sein).undefined
tools.shell.enableInteractiveShellbooleanVerwende node-pty für ein interaktives Shell-Erlebnis. Fallback auf child_process gilt weiterhin.false
tools.corearray of stringsVeraltet. Wird in der nächsten Version entfernt. Verwende stattdessen permissions.allow + permissions.deny. Beschränkt integrierte Tools auf eine Allowlist. Alle Tools, die nicht in der Liste stehen, sind deaktiviert.undefined
tools.excludearray of stringsVeraltet. Verwende stattdessen permissions.deny. Tool-Namen, die von der Discovery ausgeschlossen werden sollen. Wird beim ersten Laden automatisch in das permissions-Format migriert.undefined
tools.allowedarray of stringsVeraltet. Verwende stattdessen permissions.allow. Tool-Namen, die den Bestätigungsdialog umgehen. Wird beim ersten Laden automatisch in das permissions-Format migriert.undefined
tools.approvalModestringLegt den standardmäßigen Genehmigungsmodus für die Tool-Nutzung fest.defaultMögliche Werte: plan (nur analysieren, keine Dateien ändern oder Befehle ausführen), default (Genehmigung vor Dateiänderungen oder Shell-Befehlen erforderlich), auto-edit (Dateiänderungen automatisch genehmigen), yolo (alle Tool-Aufrufe automatisch genehmigen)
tools.discoveryCommandstringBefehl, der für die Tool-Discovery ausgeführt werden soll.undefined
tools.callCommandstringDefiniert einen benutzerdefinierten Shell-Befehl zum Aufrufen eines bestimmten Tools, das mit tools.discoveryCommand entdeckt wurde. Der Shell-Befehl muss folgende 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.useRipgrepbooleanVerwende ripgrep für die Dateiinhaltsuche anstelle der Fallback-Implementierung. Bietet schnellere Suchleistung.true
tools.useBuiltinRipgrepbooleanVerwende das gebündelte ripgrep-Binary. 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.truncateToolOutputThresholdnumberKürzt die Tool-Ausgabe, wenn sie größer als diese Anzahl von Zeichen ist. Gilt für Shell-, Grep-, Glob-, ReadFile- und ReadManyFiles-Tools.25000Erfordert Neustart: Ja
tools.truncateToolOutputLinesnumberMaximale Anzahl an Zeilen oder Einträgen, die beim Kürzen der Tool-Ausgabe beibehalten werden. Gilt für Shell-, Grep-, Glob-, ReadFile- und ReadManyFiles-Tools.1000Erfordert Neustart: Ja
Note

Migration von tools.core / tools.exclude / tools.allowed: Diese veralteten Einstellungen sind deprecated und werden beim ersten Laden automatisch in das neue permissions-Format migriert. Konfiguriere permissions.allow / permissions.deny bevorzugt direkt. Verwende /permissions, um Regeln interaktiv zu verwalten.

permissions

Das Berechtigungssystem 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)".

SettingTypeDescriptionDefault
permissions.allowarray of stringsRegeln für automatisch genehmigte Tool-Aufrufe (keine Bestätigung erforderlich). Wird über alle Geltungsbereiche hinweg zusammengeführt (Benutzer + Projekt + System).undefined
permissions.askarray of stringsRegeln für Tool-Aufrufe, die immer eine Benutzerbestätigung erfordern. Hat Vorrang vor allow.undefined
permissions.denyarray of stringsRegeln für blockierte Tool-Aufrufe. Höchste Priorität – überschreibt sowohl allow als auch ask.undefined

Tool-Namen-Aliase (jeder davon funktioniert in Regeln):

AliasCanonical toolNotes
Bash, Shellrun_shell_command
Read, ReadFileread_fileMetakategorie – siehe unten
Edit, EditFileeditMetakategorie – siehe unten
Write, WriteFilewrite_file
Grep, SearchFilesgrep_search
Glob, FindFilesglob
ListFileslist_directory
WebFetchweb_fetch
Agenttask
Skillskill

Metakategorien:

Einige Regelnamen decken automatisch mehrere Tools ab:

Rule nameTools covered
Readread_file, grep_search, glob, list_directory
Editedit, write_file

[!important] Read(/path/**) stimmt mit allen vier Read-Tools überein (Datei lesen, grep, glob und Verzeichnisauflistung). Um nur das Lesen von Dateien einzuschränken, verwende ReadFile(/path/**) oder read_file(/path/**).

Beispiele für Regelsyntax:

RuleMeaning
"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-Lesevorgänge (lesen, grep, glob, auflisten)
"Read(./secrets/**)"Lese jede Datei unter ./secrets/ rekursiv
"Edit(/src/**/*.ts)"Bearbeite TypeScript-Dateien unter dem Projektstamm /src/
"WebFetch(api.example.com)"Hole von api.example.com und allen seinen Subdomains
"mcp__puppeteer"Alle Tools vom puppeteer-MCP-Server

Pfadmuster-Präfixe:

PrefixMeaningExample
//Absoluter Pfad vom Dateisystemstamm//etc/passwd
~/Relativ zum Home-Verzeichnis~/Documents/*.pdf
/Relativ zum Projektstamm/src/**/*.ts
./Relativ zum aktuellen Arbeitsverzeichnis./secrets/**
(none)Gleichbedeutend mit ./secrets/**

Verhinderung der Umgehung von Shell-Befehlen:

Berechtigungsregeln für Read, Edit und WebFetch werden auch durchgesetzt, wenn der Agent äquivalente Shell-Befehle ausführt. Wenn sich beispielsweise Read(./.env) in deny befindet, 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 mehr. Unbekannte/sichere Befehle (z. B. git) sind von Datei-/Netzwerkregeln nicht betroffen.

Migration von veralteten Einstellungen:

Legacy settingEquivalent permissions ruleNotes
tools.allowedpermissions.allowWird beim ersten Laden automatisch migriert
tools.excludepermissions.denyWird beim ersten Laden automatisch migriert
tools.corepermissions.allow (Allowlist)Automatisch migriert; nicht aufgeführte Tools werden auf Registry-Ebene deaktiviert

Beispielkonfiguration:

{ "permissions": { "allow": ["Bash(git *)", "Bash(npm run *)", "Read(//Users/alice/code/**)"], "ask": ["Bash(git push *)", "Edit"], "deny": ["Bash(rm -rf *)", "Read(.env)", "WebFetch(malicious.com)"] } }

[!tip] Verwende /permissions in der interaktiven CLI, um Regeln anzuzeigen, hinzuzufügen und zu entfernen, ohne settings.json direkt zu bearbeiten.

mcp

SettingTypeDescriptionDefault
mcp.serverCommandstringBefehl zum Starten eines MCP-Servers.undefined
mcp.allowedarray of stringsEine Allowlist von MCP-Servern, die erlaubt 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. Beachte, dass dies ignoriert wird, wenn --allowed-mcp-server-names gesetzt ist.undefined
mcp.excludedarray of stringsEine 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. Beachte, dass dies ignoriert wird, wenn --allowed-mcp-server-names gesetzt ist.undefined
Note

Sicherheitshinweis für MCP-Server: Diese Einstellungen verwenden einfaches String-Matching für MCP-Servernamen, die geändert werden können. Wenn du als Systemadministrator verhindern möchtest, dass Benutzer dies umgehen, erwäge, die mcpServers auf der Ebene der Systemeinstellungen so zu konfigurieren, dass Benutzer keine eigenen MCP-Server konfigurieren können. Dies sollte nicht als wasserdichter Sicherheitsmechanismus verwendet werden.

lsp

[!warning] Experimentelles Feature: Die LSP-Unterstützung ist derzeit experimentell und standardmäßig deaktiviert. Aktiviere sie mit dem Befehlszeilenflag --experimental-lsp.

Das Language Server Protocol (LSP) bietet Code-Intelligence-Funktionen wie Gehe-zu-Definition, Referenzen suchen und Diagnosen.

Die Konfiguration des LSP-Servers erfolgt über .lsp.json-Dateien im Projektstammverzeichnis, nicht über settings.json. Siehe die LSP-Dokumentation für Konfigurationsdetails und Beispiele.

security

SettingTypeDescriptionDefault
security.folderTrust.enabledbooleanEinstellung, die angibt, ob Folder Trust aktiviert ist.false
security.auth.selectedTypestringDer aktuell ausgewählte Authentifizierungstyp.undefined
security.auth.enforcedTypestringDer erforderliche Authentifizierungstyp (nützlich für Unternehmen).undefined
security.auth.useExternalbooleanGibt an, ob ein externer Authentifizierungsablauf verwendet werden soll.undefined

advanced

SettingTypeDescriptionDefault
advanced.autoConfigureMemorybooleanNode.js-Speicherlimits automatisch konfigurieren.false
advanced.dnsResolutionOrderstringDie DNS-Auflösungsreihenfolge.undefined
advanced.excludedEnvVarsarray of stringsUmgebungsvariablen, die vom Projektkontext ausgeschlossen werden sollen. Gibt Umgebungsvariablen an, die nicht aus Projekt-.env-Dateien geladen werden sollen. Dies verhindert, dass projektspezifische Umgebungsvariablen (wie DEBUG=true) das CLI-Verhalten beeinträchtigen. Variablen aus .qwen/.env-Dateien werden niemals ausgeschlossen.["DEBUG","DEBUG_MODE"]
advanced.bugCommandobjectKonfiguration für den Bug-Report-Befehl. Überschreibt die Standard-URL für den /bug-Befehl. Eigenschaften: urlTemplate (String): Eine URL, die {title}- und {info}-Platzhalter enthalten kann. Beispiel: "bugCommand": { "urlTemplate": "https://bug.example.com/new?title={title}&info={info}" }undefined
advanced.tavilyApiKeystringAPI-Key für den Tavily-Websuchdienst. Wird verwendet, um die web_search-Tool-Funktionalität zu aktivieren.undefined
Note

Hinweis zu advanced.tavilyApiKey: Dies ist ein veraltetes Konfigurationsformat. Für Qwen OAuth-Benutzer ist der DashScope-Provider automatisch ohne Konfiguration verfügbar. Für andere Authentifizierungstypen konfiguriere Tavily- oder Google-Provider mit dem neuen webSearch-Konfigurationsformat.

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 die Tool-Namen mit dem 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 einer der Werte command, url oder httpUrl muss angegeben werden. Wenn mehrere angegeben sind, ist die Prioritätsreihenfolge httpUrl, dann url, dann command.

PropertyTypeDescriptionOptional
mcpServers.<SERVER_NAME>.commandstringDer Befehl zum Ausführen, um den MCP-Server über Standard-I/O zu starten.Yes
mcpServers.<SERVER_NAME>.argsarray of stringsArgumente, die an den Befehl übergeben werden sollen.Yes
mcpServers.<SERVER_NAME>.envobjectUmgebungsvariablen, die für den Serverprozess festgelegt werden sollen.Yes
mcpServers.<SERVER_NAME>.cwdstringDas Arbeitsverzeichnis, in dem der Server gestartet werden soll.Yes
mcpServers.<SERVER_NAME>.urlstringDie URL eines MCP-Servers, der Server-Sent Events (SSE) für die Kommunikation verwendet.Yes
mcpServers.<SERVER_NAME>.httpUrlstringDie URL eines MCP-Servers, der streamable HTTP für die Kommunikation verwendet.Yes
mcpServers.<SERVER_NAME>.headersobjectEine Map von HTTP-Headern, die mit Requests an url oder httpUrl gesendet werden sollen.Yes
mcpServers.<SERVER_NAME>.timeoutnumberTimeout in Millisekunden für Requests an diesen MCP-Server.Yes
mcpServers.<SERVER_NAME>.trustbooleanVertraue diesem Server und umgehe alle Tool-Aufruf-Bestätigungen.Yes
mcpServers.<SERVER_NAME>.descriptionstringEine kurze Beschreibung des Servers, die ggf. für Anzeigezwecke verwendet wird.Yes
mcpServers.<SERVER_NAME>.includeToolsarray of stringsListe 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.Yes
mcpServers.<SERVER_NAME>.excludeToolsarray of stringsListe 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 steht, wird es ausgeschlossen.Yes

telemetry

Konfiguriert Logging und Metrikerfassung für Qwen Code. Weitere Informationen findest du unter Telemetry.

SettingTypeDescriptionDefault
telemetry.enabledbooleanGibt an, ob Telemetry aktiviert ist.
telemetry.targetstringDas Ziel für erfasste Telemetry-Daten. Unterstützte Werte sind local und gcp.
telemetry.otlpEndpointstringDer Endpunkt für den OTLP-Exporter.
telemetry.otlpProtocolstringDas Protokoll für den OTLP-Exporter (grpc oder http).
telemetry.logPromptsbooleanGibt an, ob der Inhalt von Benutzer-Prompts in die Logs aufgenommen werden soll.
telemetry.outfilestringDie Datei, in die Telemetry geschrieben wird, wenn target auf local gesetzt ist.
telemetry.useCollectorbooleanGibt an, ob ein externer OTLP-Collector verwendet werden soll.

Beispiel für settings.json

Hier ist ein Beispiel für eine settings.json-Datei mit der verschachtelten Struktur, neu ab v0.3.0:

{ "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", "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 }, "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 von dir ausgeführten Shell-Befehle. Um Konflikte zwischen verschiedenen Projekten zu vermeiden, wird dieser Verlauf in einem projektspezifischen Verzeichnis innerhalb deines Benutzer-Home-Ordners gespeichert.

  • Speicherort: ~/.qwen/tmp/<project_hash>/shell_history
    • <project_hash> ist eine eindeutige Kennung, die aus dem Root-Pfad deines Projekts generiert wird.
    • Der Verlauf
Last updated on