{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://json.schemastore.org/qwen-code-settings.json",
  "title": "Qwen Code Settings",
  "description": "Configuration file for Qwen Code",
  "type": "object",
  "properties": {
    "$schema": {
      "type": "string",
      "description": "URL or path to the JSON schema for this configuration file"
    },
    "$version": {
      "type": "integer",
      "description": "Schema version identifier"
    },
    "general": {
      "type": "object",
      "description": "General configuration options",
      "properties": {
        "preferredEditor": {
          "type": "string",
          "description": "The preferred editor to open files in"
        },
        "vimMode": {
          "type": "boolean",
          "description": "Enable Vim keybindings",
          "default": false
        },
        "enableAutoUpdate": {
          "type": "boolean",
          "description": "Enable automatic update checks and installations on startup",
          "default": true
        },
        "gitCoAuthor": {
          "type": "boolean",
          "description": "Automatically add a Co-authored-by trailer to git commit messages",
          "default": true
        },
        "checkpointing": {
          "type": "object",
          "description": "Session checkpointing configuration",
          "properties": {
            "enabled": {
              "type": "boolean",
              "description": "Enable session checkpointing for recovery",
              "default": false
            }
          }
        },
        "defaultFileEncoding": {
          "type": "string",
          "description": "Default encoding for new files",
          "default": "utf-8",
          "enum": ["utf-8", "utf-8-bom"]
        }
      },
      "additionalProperties": false
    },
    "output": {
      "type": "object",
      "description": "Output configuration",
      "properties": {
        "format": {
          "type": "string",
          "description": "The format of the CLI output",
          "default": "text",
          "enum": ["text", "json"]
        }
      },
      "additionalProperties": false
    },
    "ui": {
      "type": "object",
      "description": "User interface configuration",
      "properties": {
        "theme": {
          "type": "string",
          "description": "The color theme for the UI"
        },
        "customThemes": {
          "type": "object",
          "description": "Custom theme definitions",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "name": { "type": "string" },
              "type": { "type": "string", "const": "custom" },
              "Background": {
                "type": "string",
                "pattern": "^#[0-9a-fA-F]{6}$"
              },
              "Foreground": {
                "type": "string",
                "pattern": "^#[0-9a-fA-F]{6}$"
              },
              "AccentBlue": {
                "type": "string",
                "pattern": "^#[0-9a-fA-F]{6}$"
              },
              "AccentPurple": {
                "type": "string",
                "pattern": "^#[0-9a-fA-F]{6}$"
              },
              "AccentCyan": {
                "type": "string",
                "pattern": "^#[0-9a-fA-F]{6}$"
              },
              "AccentGreen": {
                "type": "string",
                "pattern": "^#[0-9a-fA-F]{6}$"
              },
              "AccentYellow": {
                "type": "string",
                "pattern": "^#[0-9a-fA-F]{6}$"
              },
              "AccentRed": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" },
              "LightBlue": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" },
              "Comment": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" },
              "Gray": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" },
              "DiffAdded": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" },
              "DiffRemoved": {
                "type": "string",
                "pattern": "^#[0-9a-fA-F]{6}$"
              },
              "DiffModified": {
                "type": "string",
                "pattern": "^#[0-9a-fA-F]{6}$"
              },
              "GradientColors": {
                "type": "array",
                "items": { "type": "string", "pattern": "^#[0-9a-fA-F]{6}$" }
              }
            },
            "required": ["name", "type"]
          }
        },
        "hideWindowTitle": {
          "type": "boolean",
          "description": "Hide the window title bar",
          "default": false
        },
        "hideTips": {
          "type": "boolean",
          "description": "Hide helpful tips in the UI",
          "default": false
        },
        "hideBanner": {
          "type": "boolean",
          "description": "Hide the application banner",
          "default": false
        },
        "hideFooter": {
          "type": "boolean",
          "description": "Hide the footer from the UI",
          "default": false
        },
        "showMemoryUsage": {
          "type": "boolean",
          "description": "Display memory usage information in the UI",
          "default": false
        },
        "showLineNumbers": {
          "type": "boolean",
          "description": "Show line numbers in code blocks in the CLI output",
          "default": true
        },
        "showCitations": {
          "type": "boolean",
          "description": "Show citations for generated text in the chat",
          "default": true
        },
        "enableWelcomeBack": {
          "type": "boolean",
          "description": "Show welcome back dialog when returning to a project with conversation history",
          "default": true
        },
        "accessibility": {
          "type": "object",
          "description": "Accessibility configuration",
          "properties": {
            "enableLoadingPhrases": {
              "type": "boolean",
              "description": "Enable loading phrases (disable for accessibility)",
              "default": true
            },
            "screenReader": {
              "type": "boolean",
              "description": "Enables screen reader mode, adjusting the TUI for better compatibility",
              "default": false
            }
          },
          "additionalProperties": false
        },
        "customWittyPhrases": {
          "type": "array",
          "description": "Custom phrases to display during loading states",
          "items": { "type": "string" },
          "default": []
        }
      },
      "additionalProperties": false
    },
    "ide": {
      "type": "object",
      "description": "IDE integration configuration",
      "properties": {
        "enabled": {
          "type": "boolean",
          "description": "Enable IDE integration mode",
          "default": false
        },
        "hasSeenNudge": {
          "type": "boolean",
          "description": "Whether the user has seen the IDE integration nudge",
          "default": false
        }
      },
      "additionalProperties": false
    },
    "privacy": {
      "type": "object",
      "description": "Privacy configuration",
      "properties": {
        "usageStatisticsEnabled": {
          "type": "boolean",
          "description": "Enable collection of usage statistics",
          "default": true
        }
      },
      "additionalProperties": false
    },
    "model": {
      "type": "object",
      "description": "Model configuration",
      "properties": {
        "name": {
          "type": "string",
          "description": "The Qwen model to use for conversations"
        },
        "maxSessionTurns": {
          "type": "integer",
          "description": "Maximum number of turns to keep in a session (-1 is unlimited)",
          "default": -1
        },
        "chatCompression": {
          "type": "object",
          "description": "Chat history compression configuration",
          "properties": {
            "contextPercentageThreshold": {
              "type": "number",
              "description": "Threshold for chat history compression as a percentage of token limit",
              "default": 0.7,
              "minimum": 0,
              "maximum": 1
            }
          },
          "additionalProperties": false
        },
        "skipNextSpeakerCheck": {
          "type": "boolean",
          "description": "Skip the next speaker check",
          "default": false
        },
        "skipLoopDetection": {
          "type": "boolean",
          "description": "Disables loop detection checks (use if false positives occur)",
          "default": false
        },
        "skipStartupContext": {
          "type": "boolean",
          "description": "Skips sending the startup workspace context at session start",
          "default": false
        },
        "enableOpenAILogging": {
          "type": "boolean",
          "description": "Enables logging of OpenAI API calls for debugging",
          "default": false
        },
        "openAILoggingDir": {
          "type": "string",
          "description": "Custom directory path for OpenAI API logs"
        },
        "generationConfig": {
          "type": "object",
          "description": "Generation configuration parameters",
          "properties": {
            "timeout": {
              "type": "number",
              "description": "Request timeout"
            },
            "contextWindowSize": {
              "type": "integer",
              "description": "Override model's maximum assumed context capacity"
            },
            "enableCacheControl": {
              "type": "boolean",
              "description": "Enable cache control"
            },
            "modalities": {
              "type": "object",
              "description": "Override auto-detected input modalities",
              "properties": {
                "image": { "type": "boolean" },
                "pdf": { "type": "boolean" },
                "audio": { "type": "boolean" },
                "video": { "type": "boolean" }
              },
              "additionalProperties": false
            },
            "customHeaders": {
              "type": "object",
              "description": "Custom HTTP headers for API requests",
              "additionalProperties": { "type": "string" }
            },
            "extra_body": {
              "type": "object",
              "description": "Additional body parameters (OpenAI-compatible providers only)"
            },
            "samplingParams": {
              "type": "object",
              "description": "Fine-tuning knobs (e.g., temperature, top_p, max_tokens)",
              "properties": {
                "temperature": { "type": "number" },
                "top_p": { "type": "number" },
                "max_tokens": { "type": "integer" }
              }
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "context": {
      "type": "object",
      "description": "Context configuration",
      "properties": {
        "fileName": {
          "oneOf": [
            { "type": "string" },
            { "type": "array", "items": { "type": "string" } }
          ],
          "description": "The name of the context file(s)"
        },
        "importFormat": {
          "type": "string",
          "description": "The format to use when importing memory"
        },
        "includeDirectories": {
          "type": "array",
          "description": "Additional directories to include in the workspace context",
          "items": { "type": "string" },
          "default": []
        },
        "loadFromIncludeDirectories": {
          "type": "boolean",
          "description": "Controls behavior of /memory refresh for included directories",
          "default": false
        },
        "fileFiltering": {
          "type": "object",
          "description": "File filtering configuration",
          "properties": {
            "respectGitIgnore": {
              "type": "boolean",
              "description": "Respect .gitignore files when searching",
              "default": true
            },
            "respectQwenIgnore": {
              "type": "boolean",
              "description": "Respect .qwenignore files when searching",
              "default": true
            },
            "enableRecursiveFileSearch": {
              "type": "boolean",
              "description": "Enable recursive file searching for @ completions",
              "default": true
            },
            "enableFuzzySearch": {
              "type": "boolean",
              "description": "Enable fuzzy search capabilities",
              "default": true
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "tools": {
      "type": "object",
      "description": "Tools configuration",
      "properties": {
        "sandbox": {
          "oneOf": [{ "type": "boolean" }, { "type": "string" }],
          "description": "Sandbox execution environment (boolean or custom path string)"
        },
        "shell": {
          "type": "object",
          "description": "Shell configuration",
          "properties": {
            "enableInteractiveShell": {
              "type": "boolean",
              "description": "Use node-pty for an interactive shell experience",
              "default": false
            }
          },
          "additionalProperties": false
        },
        "core": {
          "type": "array",
          "description": "Allowlist of built-in tools",
          "items": { "type": "string" }
        },
        "exclude": {
          "type": "array",
          "description": "Tool names to exclude from discovery",
          "items": { "type": "string" }
        },
        "allowed": {
          "type": "array",
          "description": "Tools that bypass the confirmation dialog",
          "items": { "type": "string" }
        },
        "approvalMode": {
          "type": "string",
          "description": "Default approval mode for tool usage",
          "default": "default",
          "enum": ["plan", "default", "auto-edit", "yolo"]
        },
        "discoveryCommand": {
          "type": "string",
          "description": "Command to run for tool discovery"
        },
        "callCommand": {
          "type": "string",
          "description": "Custom shell command for calling a specific discovered tool"
        },
        "useRipgrep": {
          "type": "boolean",
          "description": "Use ripgrep for file content search",
          "default": true
        },
        "useBuiltinRipgrep": {
          "type": "boolean",
          "description": "Use the bundled ripgrep binary (requires tools.useRipgrep: true)",
          "default": true
        },
        "truncateToolOutputThreshold": {
          "type": "integer",
          "description": "Truncate output if larger than this many characters",
          "default": 25000
        },
        "truncateToolOutputLines": {
          "type": "integer",
          "description": "Maximum lines/entries kept when truncating output",
          "default": 1000
        }
      },
      "additionalProperties": false
    },
    "mcp": {
      "type": "object",
      "description": "MCP (Model Context Protocol) configuration",
      "properties": {
        "serverCommand": {
          "type": "string",
          "description": "Command to start an MCP server"
        },
        "allowed": {
          "type": "array",
          "description": "Allowlist of MCP server names",
          "items": { "type": "string" }
        },
        "excluded": {
          "type": "array",
          "description": "Denylist of MCP server names",
          "items": { "type": "string" }
        }
      },
      "additionalProperties": false
    },
    "security": {
      "type": "object",
      "description": "Security configuration",
      "properties": {
        "folderTrust": {
          "type": "object",
          "description": "Folder trust configuration",
          "properties": {
            "enabled": {
              "type": "boolean",
              "description": "Setting to track whether Folder trust is enabled",
              "default": false
            }
          },
          "additionalProperties": false
        },
        "auth": {
          "type": "object",
          "description": "Authentication configuration",
          "properties": {
            "selectedType": {
              "type": "string",
              "description": "The currently selected authentication type"
            },
            "enforcedType": {
              "type": "string",
              "description": "The required auth type (useful for enterprises)"
            },
            "useExternal": {
              "type": "boolean",
              "description": "Whether to use an external authentication flow"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "advanced": {
      "type": "object",
      "description": "Advanced configuration options",
      "properties": {
        "autoConfigureMemory": {
          "type": "boolean",
          "description": "Automatically configure Node.js memory limits",
          "default": false
        },
        "dnsResolutionOrder": {
          "type": "string",
          "description": "The DNS resolution order"
        },
        "excludedEnvVars": {
          "type": "array",
          "description": "Environment variables to exclude from project context",
          "items": { "type": "string" },
          "default": ["DEBUG", "DEBUG_MODE"]
        },
        "tavilyApiKey": {
          "type": "string",
          "description": "API key for Tavily web search service"
        },
        "bugCommand": {
          "type": "object",
          "description": "Bug command configuration",
          "properties": {
            "urlTemplate": {
              "type": "string",
              "description": "A URL that can contain {title} and {info} placeholders for the /bug command"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "mcpServers": {
      "type": "object",
      "description": "Model-Context Protocol server configurations",
      "additionalProperties": {
        "type": "object",
        "description": "MCP server configuration",
        "properties": {
          "command": {
            "type": "string",
            "description": "The command to execute to start the MCP server via stdio"
          },
          "args": {
            "type": "array",
            "description": "Arguments to pass to the command",
            "items": { "type": "string" }
          },
          "env": {
            "type": "object",
            "description": "Environment variables to set for the server process",
            "additionalProperties": { "type": "string" }
          },
          "cwd": {
            "type": "string",
            "description": "The working directory in which to start the server"
          },
          "url": {
            "type": "string",
            "description": "The URL of an MCP server using Server-Sent Events (SSE)"
          },
          "httpUrl": {
            "type": "string",
            "description": "The URL of an MCP server using streamable HTTP"
          },
          "headers": {
            "type": "object",
            "description": "A map of HTTP headers to send with requests to url or httpUrl",
            "additionalProperties": { "type": "string" }
          },
          "timeout": {
            "type": "number",
            "description": "Timeout in milliseconds for requests to this MCP server"
          },
          "trust": {
            "type": "boolean",
            "description": "Trust this server and bypass all tool call confirmations"
          },
          "description": {
            "type": "string",
            "description": "A brief description of the server"
          },
          "includeTools": {
            "type": "array",
            "description": "Allowlist of tool names from this MCP server",
            "items": { "type": "string" }
          },
          "excludeTools": {
            "type": "array",
            "description": "Denylist of tool names from this MCP server (takes precedence over includeTools)",
            "items": { "type": "string" }
          }
        },
        "additionalProperties": false
      }
    },
    "telemetry": {
      "type": "object",
      "description": "Telemetry configuration",
      "properties": {
        "enabled": {
          "type": "boolean",
          "description": "Whether or not telemetry is enabled"
        },
        "target": {
          "type": "string",
          "description": "The destination for collected telemetry",
          "enum": ["local", "gcp"]
        },
        "otlpEndpoint": {
          "type": "string",
          "description": "The endpoint for the OTLP Exporter"
        },
        "otlpProtocol": {
          "type": "string",
          "description": "The protocol for the OTLP Exporter",
          "enum": ["grpc", "http"]
        },
        "logPrompts": {
          "type": "boolean",
          "description": "Whether or not to include the content of user prompts in the logs"
        },
        "outfile": {
          "type": "string",
          "description": "The file to write telemetry to when target is local"
        },
        "useCollector": {
          "type": "boolean",
          "description": "Whether to use an external OTLP collector"
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
