@mmmbuto/qwen-code-termux 0.16.1-termux → 0.18.0-termux
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -109
- package/bundled/new-app/SKILL.md +22 -0
- package/bundled/qc-helper/SKILL.md +29 -24
- package/bundled/qc-helper/docs/_meta.ts +1 -0
- package/bundled/qc-helper/docs/configuration/_meta.ts +0 -3
- package/bundled/qc-helper/docs/configuration/settings.md +37 -31
- package/bundled/qc-helper/docs/configuration/themes.md +39 -0
- package/bundled/qc-helper/docs/features/_meta.ts +1 -3
- package/bundled/qc-helper/docs/features/approval-mode.md +35 -35
- package/bundled/qc-helper/docs/features/auto-mode.md +54 -9
- package/bundled/qc-helper/docs/features/channels/_meta.ts +1 -0
- package/bundled/qc-helper/docs/features/channels/feishu.md +170 -0
- package/bundled/qc-helper/docs/features/commands.md +115 -35
- package/bundled/qc-helper/docs/features/followup-suggestions.md +2 -2
- package/bundled/qc-helper/docs/features/headless.md +32 -0
- package/bundled/qc-helper/docs/features/markdown-rendering.md +21 -1
- package/bundled/qc-helper/docs/features/memory.md +22 -5
- package/bundled/qc-helper/docs/features/scheduled-tasks.md +1 -1
- package/bundled/qc-helper/docs/features/status-line.md +168 -32
- package/bundled/qc-helper/docs/features/sub-agents.md +60 -0
- package/bundled/qc-helper/docs/features/worktree.md +345 -0
- package/bundled/qc-helper/docs/overview.md +4 -4
- package/bundled/qc-helper/docs/quickstart.md +4 -4
- package/bundled/qc-helper/docs/qwen-serve-deploy-local.md +221 -0
- package/bundled/qc-helper/docs/qwen-serve.md +234 -24
- package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +16 -0
- package/bundled/qc-helper/docs/support/Uninstall.md +19 -1
- package/bundled/qc-helper/docs/support/troubleshooting.md +2 -1
- package/bundled/simplify/SKILL.md +123 -0
- package/chunks/agent-IDS4HMOX.js +56 -0
- package/chunks/agent-headless-5Q2EUSPS.js +50 -0
- package/chunks/{anthropicContentGenerator-SSGKR6DO.js → anthropicContentGenerator-2HBRNQ3B.js} +52 -9
- package/chunks/{askUserQuestion-PJWUUXKN.js → askUserQuestion-75TDJVK2.js} +45 -3
- package/chunks/{ca-UZ7BANMN.js → ca-BARBRL6N.js} +89 -5
- package/chunks/{chunk-GGNTZ2NH.js → chunk-2Y5SYSD3.js} +368 -597
- package/chunks/{chunk-2LA2TREA.js → chunk-3AA2DK35.js} +1448 -207
- package/chunks/{chunk-I2V5WXHJ.js → chunk-3AUHFMSK.js} +80 -38
- package/chunks/chunk-3DHXZ6EV.js +241 -0
- package/chunks/{chunk-PR4T27R7.js → chunk-3HTIVKZE.js} +42 -8
- package/chunks/chunk-3HX5LZ6R.js +1798 -0
- package/chunks/chunk-3PJXIDKI.js +2517 -0
- package/chunks/{chunk-MYAKAFEC.js → chunk-55ZMG67I.js} +7451 -3517
- package/chunks/{chunk-66CXYE4B.js → chunk-5IFG2VC4.js} +293 -242
- package/chunks/chunk-64WXLC72.js +98 -0
- package/chunks/{chunk-C6WMLUNB.js → chunk-72LDN5PP.js} +1 -1
- package/chunks/{chunk-F23NCRJ2.js → chunk-A7B4ISQP.js} +1 -1
- package/chunks/chunk-B7HXHOHU.js +393 -0
- package/chunks/{chunk-XEGHDASV.js → chunk-D3RHSPAS.js} +435 -540
- package/chunks/{chunk-XKS5KBFJ.js → chunk-EYENRK4D.js} +694 -384
- package/chunks/chunk-H6BD2ELD.js +36 -0
- package/chunks/{chunk-XP27SJMH.js → chunk-HR7SV7AY.js} +79 -48
- package/chunks/{chunk-D5NTAHYL.js → chunk-IDX6COTE.js} +7 -2
- package/chunks/{chunk-SHT4VJWU.js → chunk-IWKSG2AR.js} +2 -2
- package/chunks/chunk-J37FGIOA.js +1623 -0
- package/chunks/chunk-J5MDQKJL.js +2230 -0
- package/chunks/{chunk-USE2VQ5P.js → chunk-JTQAQBTV.js} +21 -0
- package/chunks/{chunk-NCTLV2NB.js → chunk-KQJMQJPI.js} +1 -1
- package/chunks/{chunk-5FBA5XC2.js → chunk-KRIHGKNA.js} +1 -1
- package/chunks/chunk-LD2XBG6Z.js +102 -0
- package/chunks/{chunk-MAY32HXD.js → chunk-M6VTDSVR.js} +3 -1
- package/chunks/chunk-MRO43B25.js +30 -0
- package/chunks/{chunk-N4WOREMD.js → chunk-NVFMZBX2.js} +43 -3
- package/chunks/chunk-OHEGWO4L.js +264 -0
- package/chunks/{chunk-K6O2NBMF.js → chunk-OQ7NJIY7.js} +4604 -6397
- package/chunks/chunk-QQDPRDVW.js +25 -0
- package/chunks/{chunk-KXZ4TJB4.js → chunk-SEGYWKIH.js} +1 -1
- package/chunks/chunk-SKBPNJEW.js +45 -0
- package/chunks/{chunk-4AOCVI6J.js → chunk-SNGELLWX.js} +52 -6
- package/chunks/{chunk-3OCRHZA3.js → chunk-TD4OPI4T.js} +56742 -44104
- package/chunks/{chunk-DQ4QTG7E.js → chunk-VV4F63BD.js} +11 -11
- package/chunks/chunk-XBY7E2FX.js +605 -0
- package/chunks/{chunk-JKMBWLFB.js → chunk-YILFYI5W.js} +48 -26
- package/chunks/chunk-YOGAOMYB.js +159 -0
- package/chunks/{chunk-QWSRH265.js → chunk-Z2Z3GUXZ.js} +777 -776
- package/chunks/{chunk-SDHRQFOS.js → chunk-ZTZ4DDQE.js} +2 -2
- package/chunks/computer-use-W2TYQNEE.js +825 -0
- package/chunks/contextCommand-6FGX3A7J.js +52 -0
- package/chunks/{cron-create-3ZBBN7WB.js → cron-create-APL5LU6I.js} +3 -3
- package/chunks/{cron-delete-NAGKKIIG.js → cron-delete-4SBJSCN4.js} +3 -3
- package/chunks/{cron-list-PAGRXNAI.js → cron-list-2AMGOMVO.js} +3 -3
- package/chunks/{de-V4IE2OOZ.js → de-YGKK2BC4.js} +89 -5
- package/chunks/{devtools-TWVXEJQB.js → devtools-FM6GJPYG.js} +2 -1
- package/chunks/{dist-4L54HRX2.js → dist-4LXD6L6X.js} +24 -5
- package/chunks/dist-H6ONXVLG.js +94146 -0
- package/chunks/{dist-XKWIWPWQ.js → dist-KAZ3SEBX.js} +1083 -3856
- package/chunks/{dist-BXDUQ2QY.js → dist-PK7DFCAW.js} +1 -1
- package/chunks/{edit-NVO3FOAK.js → edit-ZCEZC264.js} +30 -22
- package/chunks/{en-HGJ2SPLM.js → en-DHGYHIHX.js} +127 -6
- package/chunks/{enter-worktree-UEBG4WFC.js → enter-worktree-BBHCFCHG.js} +30 -20
- package/chunks/enterPlanMode-3M6KTD3B.js +158 -0
- package/chunks/{exit-worktree-UZ3MAQZN.js → exit-worktree-73YPIEQO.js} +27 -19
- package/chunks/exitPlanMode-TYZM6BAE.js +703 -0
- package/chunks/{fr-CJULI7ZX.js → fr-JXBKPJKQ.js} +89 -5
- package/chunks/{geminiContentGenerator-3UZFXGNT.js → geminiContentGenerator-7N2V3VW2.js} +8 -6
- package/chunks/{getMachineId-bsd-JXOSIJV2.js → getMachineId-bsd-4CASPIU4.js} +4 -4
- package/chunks/{getMachineId-darwin-TE4QRR42.js → getMachineId-darwin-HPQPEMZR.js} +4 -4
- package/chunks/{getMachineId-linux-S3OL52XK.js → getMachineId-linux-AUARKYHL.js} +3 -3
- package/chunks/{getMachineId-unsupported-DWUSBAPX.js → getMachineId-unsupported-S32ZDA2T.js} +3 -3
- package/chunks/{getMachineId-win-AAC5P3AP.js → getMachineId-win-4EFLHYIJ.js} +4 -4
- package/chunks/{glob-KNHSFFFG.js → glob-5XBCPQ2A.js} +27 -19
- package/chunks/{grep-LACWDZW4.js → grep-VIUU3A7X.js} +30 -19
- package/chunks/{ja-L7CHRQEW.js → ja-TGPZSP2B.js} +89 -5
- package/chunks/{keychain-token-storage-335UOLJ6.js → keychain-token-storage-6IU6ORQN.js} +3 -3
- package/chunks/{ls-AGXQOKSG.js → ls-JRGYIGLY.js} +4 -4
- package/chunks/{lsp-UDMUHNPA.js → lsp-SHMKFOAC.js} +3 -3
- package/chunks/{monitor-ETKWPJEH.js → monitor-6R4LIJL5.js} +40 -25
- package/chunks/{multipart-parser-3QWGTLK3.js → multipart-parser-AJ4WASWR.js} +2 -2
- package/chunks/{notebook-edit-QJJLPNYT.js → notebook-edit-5E7ULDVQ.js} +28 -20
- package/chunks/{openaiContentGenerator-CNNN424U.js → openaiContentGenerator-ZVHFKM3O.js} +17 -14
- package/chunks/{pt-M6JULLEQ.js → pt-TIBG6BIO.js} +89 -5
- package/chunks/{qwenContentGenerator-BOLCGK3R.js → qwenContentGenerator-B2VTVSPJ.js} +31 -23
- package/chunks/{qwenOAuth2-EEJGROP7.js → qwenOAuth2-2KCKWDCF.js} +6 -4
- package/chunks/read-file-GIT7BCDR.js +27 -0
- package/chunks/ripGrep-MWKFVYMS.js +48 -0
- package/chunks/{ru-QILM4HBC.js → ru-JBCHCK4L.js} +89 -5
- package/chunks/scheduler-5VOOYGBH.js +308 -0
- package/chunks/send-message-4QNWQJF4.js +244 -0
- package/chunks/{serve-OLSI7WSR.js → serve-MN6HZBWN.js} +14262 -7414
- package/chunks/shell-NQZQGFM2.js +56 -0
- package/chunks/{skill-D6YRHTTI.js → skill-WCFW4644.js} +145 -119
- package/chunks/{src-TMOD5X6F.js → src-7XL4G4DC.js} +88 -46
- package/chunks/{src-4QH4FZ6I.js → src-IHA6DTUV.js} +452 -62
- package/chunks/{syntheticOutput-5PVFDDJ4.js → syntheticOutput-YTYS2ZMQ.js} +4 -4
- package/chunks/task-create-MPORPYN6.js +19 -0
- package/chunks/task-list-R2YDYPZT.js +151 -0
- package/chunks/{task-stop-AJKPSR6R.js → task-stop-SYWJYBCM.js} +3 -3
- package/chunks/task-update-E4NSLKMQ.js +408 -0
- package/chunks/team-create-7R7KA5IP.js +314 -0
- package/chunks/team-delete-25OIWUPN.js +116 -0
- package/chunks/{todoWrite-VLAUG4CA.js → todoWrite-4YHMIF4X.js} +16 -5
- package/chunks/{tool-search-MZGHUUKD.js → tool-search-YBRVZCLI.js} +29 -11
- package/chunks/{tts-notification-K3X7X7MN.js → tts-notification-7SOEMQK4.js} +5 -4
- package/chunks/{web-fetch-OILB464A.js → web-fetch-MFIRHIHI.js} +5 -5
- package/chunks/workflow-5RIKVCIE.js +960 -0
- package/chunks/{write-file-BIQAA57V.js → write-file-DMQTJZOM.js} +32 -24
- package/chunks/{zh-PWL2NKY3.js → zh-7H5OQC4I.js} +135 -11
- package/chunks/{zh-TW-S3YGWICZ.js → zh-TW-P4IDHD3M.js} +128 -11
- package/cli.js +45402 -20570
- package/examples/agent/agents/diary.md +86 -0
- package/examples/agent/qwen-extension.json +5 -0
- package/examples/commands/commands/fs/grep-code.md +3 -0
- package/examples/commands/qwen-extension.json +5 -0
- package/examples/context/QWEN.md +8 -0
- package/examples/context/qwen-extension.json +5 -0
- package/examples/mcp-server/example.ts +60 -0
- package/examples/mcp-server/package.json +18 -0
- package/examples/mcp-server/qwen-extension.json +12 -0
- package/examples/mcp-server/tsconfig.json +13 -0
- package/examples/skills/qwen-extension.json +5 -0
- package/examples/skills/skills/synonyms/SKILL.md +48 -0
- package/examples/starter/QWEN.md +30 -0
- package/examples/starter/README.md +59 -0
- package/examples/starter/agents/diary.md +86 -0
- package/examples/starter/commands/writing/polish.md +13 -0
- package/examples/starter/example.ts +64 -0
- package/examples/starter/package.json +18 -0
- package/examples/starter/qwen-extension.json +12 -0
- package/examples/starter/skills/synonyms/SKILL.md +48 -0
- package/examples/starter/tsconfig.json +13 -0
- package/fzfWorker.js +1083 -0
- package/locales/ca.js +118 -5
- package/locales/de.js +117 -5
- package/locales/en.js +169 -7
- package/locales/fr.js +119 -5
- package/locales/ja.js +114 -5
- package/locales/pt.js +117 -5
- package/locales/ru.js +116 -5
- package/locales/zh-TW.js +161 -12
- package/locales/zh.js +169 -12
- package/package.json +4 -2
- package/scripts/postinstall.cjs +2 -1
- package/bundled/qc-helper/docs/features/checkpointing.md +0 -77
- package/chunks/agent-7ZN3CRHR.js +0 -48
- package/chunks/chunk-6PCB2DEF.js +0 -434
- package/chunks/chunk-EM6ETG2K.js +0 -60
- package/chunks/chunk-G7YTSRES.js +0 -150
- package/chunks/contextCommand-7IBASARL.js +0 -44
- package/chunks/exitPlanMode-PZAMWIRW.js +0 -227
- package/chunks/multipart-parser-IXGBIOIN.js +0 -384
- package/chunks/read-file-CCUEUFG2.js +0 -24
- package/chunks/ripGrep-TADOH2HK.js +0 -40
- package/chunks/send-message-YL44UZFC.js +0 -151
- package/chunks/shell-7KKKC5G7.js +0 -48
- package/chunks/src-IPWIHNMI.js +0 -1406
- package/chunks/undici-F6ZOXSS5.js +0 -8
|
@@ -77,17 +77,17 @@ Settings are organized into categories. Most settings should be placed within th
|
|
|
77
77
|
|
|
78
78
|
#### general
|
|
79
79
|
|
|
80
|
-
| Setting | Type | Description
|
|
81
|
-
| ------------------------------------------ | ------- |
|
|
82
|
-
| `general.preferredEditor` | string | The preferred editor to open files in.
|
|
83
|
-
| `general.vimMode` | boolean | Enable Vim keybindings.
|
|
84
|
-
| `general.enableAutoUpdate` | boolean | Enable automatic update checks and installations on startup.
|
|
85
|
-
| `general.showSessionRecap` | boolean | Auto-show a one-line "where you left off" recap when returning to the terminal after being away. Off by default. Use `/recap` to trigger manually regardless of this setting.
|
|
86
|
-
| `general.sessionRecapAwayThresholdMinutes` | number | Minutes the terminal must be blurred before an auto-recap fires on focus-in. Only used when `showSessionRecap` is enabled.
|
|
87
|
-
| `general.gitCoAuthor.commit` | boolean | Add a Co-authored-by trailer to git commit messages AND attach a per-file AI-attribution git note (`refs/notes/ai-attribution`) for commits made through Qwen Code. Disabling skips both.
|
|
88
|
-
| `general.gitCoAuthor.pr` | boolean | Append a Qwen Code attribution line to pull request descriptions when running `gh pr create`.
|
|
89
|
-
| `general.
|
|
90
|
-
| `general.
|
|
80
|
+
| Setting | Type | Description | Default |
|
|
81
|
+
| ------------------------------------------ | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
|
|
82
|
+
| `general.preferredEditor` | string | The preferred editor to open files in. | `undefined` |
|
|
83
|
+
| `general.vimMode` | boolean | Enable Vim keybindings. | `false` |
|
|
84
|
+
| `general.enableAutoUpdate` | boolean | Enable automatic update checks and installations on startup. | `true` |
|
|
85
|
+
| `general.showSessionRecap` | boolean | Auto-show a one-line "where you left off" recap when returning to the terminal after being away. Off by default. Use `/recap` to trigger manually regardless of this setting. | `false` |
|
|
86
|
+
| `general.sessionRecapAwayThresholdMinutes` | number | Minutes the terminal must be blurred before an auto-recap fires on focus-in. Only used when `showSessionRecap` is enabled. | `5` |
|
|
87
|
+
| `general.gitCoAuthor.commit` | boolean | Add a Co-authored-by trailer to git commit messages AND attach a per-file AI-attribution git note (`refs/notes/ai-attribution`) for commits made through Qwen Code. Disabling skips both. | `true` |
|
|
88
|
+
| `general.gitCoAuthor.pr` | boolean | Append a Qwen Code attribution line to pull request descriptions when running `gh pr create`. | `true` |
|
|
89
|
+
| `general.defaultFileEncoding` | string | Default encoding for new files. Use `"utf-8"` (default) for UTF-8 without BOM, or `"utf-8-bom"` for UTF-8 with BOM. Only change this if your project specifically requires BOM. | `"utf-8"` |
|
|
90
|
+
| `general.cleanupPeriodDays` | number | Days to retain `~/.qwen/file-history/` session backups used by `/rewind`. Backups older than this are removed by a background pass that runs at most once per day. `0` = minimum retention (~1 hour): keeps sessions touched in the last hour plus the currently active one. Changes take effect after restart. | `30` |
|
|
91
91
|
|
|
92
92
|
#### output
|
|
93
93
|
|
|
@@ -101,25 +101,23 @@ Settings are organized into categories. Most settings should be placed within th
|
|
|
101
101
|
| --------------------------------------- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
|
|
102
102
|
| `ui.theme` | string | The color theme for the UI. See [Themes](../configuration/themes) for available options. | `undefined` |
|
|
103
103
|
| `ui.customThemes` | object | Custom theme definitions. | `{}` |
|
|
104
|
-
| `ui.statusLine` | object | Custom status line configuration.
|
|
104
|
+
| `ui.statusLine` | object | Custom status line configuration. Supports `command`, `refreshInterval`, `respectUserColors`, and `hideContextIndicator` options. See [Status Line](../features/status-line). | `undefined` |
|
|
105
105
|
| `ui.hideWindowTitle` | boolean | Hide the window title bar. | `false` |
|
|
106
106
|
| `ui.hideTips` | boolean | Hide all tips (startup and post-response) in the UI. See [Contextual Tips](../features/tips). | `false` |
|
|
107
107
|
| `ui.hideBanner` | boolean | Hide the startup ASCII logo and info panel. Tips and chat input still render unless `ui.hideTips` is also set. | `false` |
|
|
108
108
|
| `ui.customBannerTitle` | string | Replace the default `>_ Qwen Code` title in the banner info panel. The `(vX.Y.Z)` version suffix is always appended; auth, model, and path lines are not affected. Sanitized; capped at 80 characters. | `""` |
|
|
109
109
|
| `ui.customBannerSubtitle` | string | Optional subtitle line rendered between the banner title and the auth/model line, in place of the blank spacer row. Sanitized; capped at 160 characters. Empty (default) keeps the original blank spacer. | `""` |
|
|
110
110
|
| `ui.customAsciiArt` | string \| object | Replace the QWEN ASCII logo in the banner. Accepts an inline string (used for both width tiers), `{ "path": "./brand.txt" }` (relative paths resolve against the owning settings file's directory; read once at startup with `O_NOFOLLOW` on POSIX, capped at 64 KB), or `{ "small": ..., "large": ... }` for width-aware selection. Sanitized; capped at 200 lines × 200 columns per tier. | `undefined` |
|
|
111
|
-
| `ui.hideFooter` | boolean | Hide the footer from the UI. | `false` |
|
|
112
|
-
| `ui.showMemoryUsage` | boolean | Display memory usage information in the UI. | `false` |
|
|
113
111
|
| `ui.showLineNumbers` | boolean | Show line numbers in code blocks in the CLI output. | `true` |
|
|
114
112
|
| `ui.renderMode` | string | Default Markdown display mode. Use `"render"` for rich visual previews or `"raw"` to show source-oriented Markdown by default. Toggle during a session with `Alt/Option+M`; on macOS the terminal must send Option as Meta. See [Markdown Rendering](../features/markdown-rendering). | `"render"` |
|
|
115
|
-
| `ui.showCitations` | boolean | Show citations for generated text in the chat. | `
|
|
113
|
+
| `ui.showCitations` | boolean | Show citations for generated text in the chat. | `false` |
|
|
116
114
|
| `ui.compactMode` | boolean | Hide tool output and thinking for a cleaner view. Toggle with `Ctrl+O` during a session or via the Settings dialog. Tool approval prompts are never hidden, even in compact mode. The setting persists across sessions. | `false` |
|
|
117
115
|
| `ui.shellOutputMaxLines` | number | Max number of shell output lines shown inline. Set to `0` to disable the cap and show full output. Hidden lines are surfaced via the `+N lines` indicator. Errors, `!`-prefix user-initiated commands, confirming tools, and focused embedded shells always show full output. | `5` |
|
|
118
|
-
| `enableWelcomeBack`
|
|
116
|
+
| `ui.enableWelcomeBack` | boolean | Show welcome back dialog when returning to a project with conversation history. When enabled, Qwen Code will automatically detect if you're returning to a project with a previously generated project summary (`.qwen/PROJECT_SUMMARY.md`) and show a dialog allowing you to continue your previous conversation or start fresh. If you choose **Start new chat session**, that choice is remembered for the current project until the project summary changes. This feature integrates with the `/summary` command and quit confirmation dialog. | `true` |
|
|
119
117
|
| `ui.accessibility.enableLoadingPhrases` | boolean | Enable loading phrases (disable for accessibility). | `true` |
|
|
120
118
|
| `ui.accessibility.screenReader` | boolean | Enables screen reader mode, which adjusts the TUI for better compatibility with screen readers. | `false` |
|
|
121
119
|
| `ui.customWittyPhrases` | array of strings | A list of custom phrases to display during loading states. When provided, the CLI will cycle through these phrases instead of the default ones. | `[]` |
|
|
122
|
-
| `ui.enableFollowupSuggestions` | boolean | Enable [followup suggestions](../features/followup-suggestions) that predict what you want to type next after the model responds. Suggestions appear as ghost text and can be accepted with Tab, Enter, or Right Arrow. | `
|
|
120
|
+
| `ui.enableFollowupSuggestions` | boolean | Enable [followup suggestions](../features/followup-suggestions) that predict what you want to type next after the model responds. Suggestions appear as ghost text and can be accepted with Tab, Enter, or Right Arrow. | `false` |
|
|
123
121
|
| `ui.enableCacheSharing` | boolean | Use cache-aware forked queries for suggestion generation. Reduces cost on providers that support prefix caching (experimental). | `true` |
|
|
124
122
|
| `ui.enableSpeculation` | boolean | Speculatively execute accepted suggestions before submission. Results appear instantly when you accept (experimental). | `false` |
|
|
125
123
|
| `experimental.emitToolUseSummaries` | boolean | Generate short LLM-based labels summarizing each tool-call batch. See [Tool-Use Summaries](../features/tool-use-summaries). Requires `fastModel` to be configured; silently skipped otherwise. Can be overridden per-session with `QWEN_CODE_EMIT_TOOL_USE_SUMMARIES=0` or `=1`. | `true` |
|
|
@@ -139,17 +137,23 @@ Settings are organized into categories. Most settings should be placed within th
|
|
|
139
137
|
|
|
140
138
|
#### model
|
|
141
139
|
|
|
142
|
-
| Setting | Type | Description
|
|
143
|
-
| -------------------------------------------------- | ------- |
|
|
144
|
-
| `model.name` | string | The Qwen model to use for conversations.
|
|
145
|
-
| `model.maxSessionTurns` | number | Maximum number of user/model/tool turns to keep in a session. -1 means unlimited.
|
|
146
|
-
| `model.
|
|
147
|
-
| `model.
|
|
148
|
-
| `model.
|
|
149
|
-
| `model.
|
|
150
|
-
| `model.
|
|
151
|
-
| `model.
|
|
152
|
-
| `model.
|
|
140
|
+
| Setting | Type | Description | Default |
|
|
141
|
+
| -------------------------------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
|
|
142
|
+
| `model.name` | string | The Qwen model to use for conversations. | `undefined` |
|
|
143
|
+
| `model.maxSessionTurns` | number | Maximum number of user/model/tool turns to keep in a session. -1 means unlimited. | `-1` |
|
|
144
|
+
| `model.maxWallTimeSeconds` | number | Wall-clock budget for headless / unattended runs, in seconds. `-1` means unlimited. Overridable per-invocation via `--max-wall-time`, which requires a positive duration (`90`, `30s`, `5m`, `1h`, `1.5h`); the minimum is 1 second — sub-second values (`500ms`, `0.5`) are rejected as typos. Omit the flag to fall back to this setting. Aborts with exit code 55 when exceeded. | `-1` |
|
|
145
|
+
| `model.maxToolCalls` | number | Cumulative tool-call budget for a run (counts every executed tool, success or failure; `structured_output` under `--json-schema` is exempt). `-1` means unlimited; `0` means "no tool calls allowed". Capped at 1,000,000 to catch typos. Overridable via `--max-tool-calls`. Aborts with exit code 55 when exceeded. | `-1` |
|
|
146
|
+
| `model.generationConfig` | object | Advanced overrides passed to the underlying content generator. Supports request controls such as `timeout`, `maxRetries`, `enableCacheControl`, `splitToolMedia` (default `true`; splits tool-returned media — including images read by the built-in read_file — into a follow-up user message instead of the spec-violating `role: "tool"` message, so strict OpenAI-compatible servers like doubao / new-api / LM Studio can see it; set `false` to restore the legacy embed-in-tool behavior), `contextWindowSize` (override model's context window size), `modalities` (override auto-detected input modalities), `customHeaders` (custom HTTP headers for API requests), and `extra_body` (additional body parameters for OpenAI-compatible API requests only), along with fine-tuning knobs under `samplingParams` (for example `temperature`, `top_p`, `max_tokens`). Leave unset to rely on provider defaults. | `undefined` |
|
|
147
|
+
| `model.chatCompression.contextPercentageThreshold` | number | **REMOVED.** Auto-compaction now uses a three-tier threshold ladder (warn / auto / hard) computed internally from the model's context window via the `computeThresholds()` function — no longer user-configurable. Setting this field in `settings.json` is silently ignored (no startup warning). There is currently no replacement for "disable compression entirely" — reactive overflow recovery remains the safety net at the API layer if compression itself fails. (See PR #4345 / `docs/design/auto-compaction-threshold-redesign.md` for the redesign rationale.) | `N/A` |
|
|
148
|
+
| `model.chatCompression.maxRecentFilesToRetain` | number | Number of most-recently-touched files whose current content is restored (embedded if small, otherwise referenced by path) into history after auto-compaction. `0` restores none. Env override: `QWEN_COMPACT_MAX_RECENT_FILES`. | `5` |
|
|
149
|
+
| `model.chatCompression.maxRecentImagesToRetain` | number | Number of most-recent images (tool screenshots / user pastes) restored into history after auto-compaction. `0` restores none. Env override: `QWEN_COMPACT_MAX_RECENT_IMAGES`. | `3` |
|
|
150
|
+
| `model.chatCompression.enableScreenshotTrigger` | boolean | When `true`, auto-compaction also fires once the number of tool-returned images accumulated in history reaches `screenshotTriggerThreshold`, independent of token usage — aimed at computer-use sessions where frequent screenshots dilute model attention. Counts only images returned inside tool results, not user-pasted images. Env override: `QWEN_COMPACT_SCREENSHOT_TRIGGER` (`1`/`true`/`0`/`false`). | `true` |
|
|
151
|
+
| `model.chatCompression.screenshotTriggerThreshold` | number | Tool-returned image count at or above which the screenshot trigger fires (only when `enableScreenshotTrigger`). Compaction resets the count — surviving images are re-embedded as top-level parts, which the trigger doesn't count — so it won't immediately re-fire. Env override: `QWEN_COMPACT_SCREENSHOT_THRESHOLD`. | `50` |
|
|
152
|
+
| `model.skipNextSpeakerCheck` | boolean | Skip the next speaker check. | `false` |
|
|
153
|
+
| `model.skipLoopDetection` | boolean | Disables streaming loop detection checks. Defaults to `true` (loop detection is skipped) to avoid false positives interrupting legitimate workflows. Set to `false` to re-enable streaming loop detection — useful as a guardrail in headless / non-interactive runs where stuck repetition can otherwise waste budget. | `true` |
|
|
154
|
+
| `model.skipStartupContext` | boolean | Skips sending the startup workspace context (environment summary and acknowledgement) at the beginning of each session. Enable this if you prefer to provide context manually or want to save tokens on startup. | `false` |
|
|
155
|
+
| `model.enableOpenAILogging` | boolean | Enables logging of OpenAI API calls for debugging and analysis. When enabled, API requests and responses are logged to JSON files. | `false` |
|
|
156
|
+
| `model.openAILoggingDir` | string | Custom directory path for OpenAI API logs. If not specified, defaults to `logs/openai` in the current working directory. Supports absolute paths, relative paths (resolved from current working directory), and `~` expansion (home directory). | `undefined` |
|
|
153
157
|
|
|
154
158
|
**Example model.generationConfig:**
|
|
155
159
|
|
|
@@ -272,7 +276,8 @@ If you are experiencing performance issues with file searching (e.g., with `@` c
|
|
|
272
276
|
| Setting | Type | Description | Default |
|
|
273
277
|
| -------------------------------- | ------- | --------------------------------------------------------------------------------- | ------- |
|
|
274
278
|
| `memory.enableManagedAutoMemory` | boolean | Enable background extraction of memories from conversations. | `true` |
|
|
275
|
-
| `memory.enableManagedAutoDream` | boolean | Enable automatic consolidation (deduplication and cleanup) of collected memories. | `
|
|
279
|
+
| `memory.enableManagedAutoDream` | boolean | Enable automatic consolidation (deduplication and cleanup) of collected memories. | `true` |
|
|
280
|
+
| `memory.enableAutoSkill` | boolean | Enable background review for reusable project skills after tool-heavy sessions. | `true` |
|
|
276
281
|
|
|
277
282
|
See [Memory](../features/memory) for details on how auto-memory works and how to use the `/memory`, `/remember`, and `/dream` commands.
|
|
278
283
|
|
|
@@ -630,7 +635,6 @@ For sandbox image selection, precedence is:
|
|
|
630
635
|
| `--telemetry-otlp-endpoint` | | Sets the OTLP endpoint for telemetry. | | See [telemetry](../../developers/development/telemetry) for more information. |
|
|
631
636
|
| `--telemetry-otlp-protocol` | | Sets the OTLP protocol for telemetry (`grpc` or `http`). | | Defaults to `grpc`. See [telemetry](../../developers/development/telemetry) for more information. |
|
|
632
637
|
| `--telemetry-log-prompts` | | Enables logging of prompts for telemetry. | | See [telemetry](../../developers/development/telemetry) for more information. |
|
|
633
|
-
| `--checkpointing` | | Enables [checkpointing](../features/checkpointing). | | |
|
|
634
638
|
| `--acp` | | Enables ACP mode (Agent Client Protocol). Useful for IDE/editor integrations like [Zed](../integration-zed). | | Stable. Replaces the deprecated `--experimental-acp` flag. |
|
|
635
639
|
| `--experimental-lsp` | | Enables experimental [LSP (Language Server Protocol)](../features/lsp) feature for code intelligence (go-to-definition, find references, diagnostics, etc.). | | Experimental. Requires language servers to be installed. |
|
|
636
640
|
| `--extensions` | `-e` | Specifies a list of extensions to use for the session. | Extension names | If not provided, all available extensions are used. Use the special term `qwen -e none` to disable all extensions. Example: `qwen -e my-extension -e my-other-extension` |
|
|
@@ -703,7 +707,9 @@ Qwen Code can execute potentially unsafe operations (like shell commands and fil
|
|
|
703
707
|
|
|
704
708
|
- Using `--sandbox` or `-s` flag.
|
|
705
709
|
- Setting `QWEN_SANDBOX` environment variable.
|
|
706
|
-
-
|
|
710
|
+
- Setting `tools.sandbox` in settings.
|
|
711
|
+
|
|
712
|
+
> ⚠️ **`--yolo` does _not_ automatically enable a sandbox.** YOLO mode only auto-approves tool calls; sandboxing must still be opted into via `--sandbox`, `QWEN_SANDBOX`, or `tools.sandbox`. In headless / non-interactive runs with `--yolo` (or `--approval-mode=yolo`) and no sandbox, the model can execute shell, write, and edit tools at the current process's privilege level — Qwen Code prints a warning to stderr in that case. Suppress with `QWEN_CODE_SUPPRESS_YOLO_WARNING=1` once you've reviewed the trade-off.
|
|
707
713
|
|
|
708
714
|
By default, it uses a pre-built `qwen-code-sandbox` Docker image.
|
|
709
715
|
|
|
@@ -36,6 +36,45 @@ Selected themes are saved in Qwen Code's [configuration](../configuration/settin
|
|
|
36
36
|
|
|
37
37
|
---
|
|
38
38
|
|
|
39
|
+
## Auto Theme Detection
|
|
40
|
+
|
|
41
|
+
When the theme is set to `"auto"` (or left unset), Qwen Code automatically detects whether your terminal uses a dark or light background and selects the matching Qwen theme (`Qwen Dark` or `Qwen Light`).
|
|
42
|
+
|
|
43
|
+
### How to enable
|
|
44
|
+
|
|
45
|
+
Set the theme to `"auto"` in `settings.json`:
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"ui": {
|
|
50
|
+
"theme": "auto"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Or select **Auto** in the `/theme` dialog. This is the default behavior when no theme is explicitly configured.
|
|
56
|
+
|
|
57
|
+
### Detection methods
|
|
58
|
+
|
|
59
|
+
Qwen Code uses multiple detection methods in a fallback chain. At startup (async path), the order is:
|
|
60
|
+
|
|
61
|
+
| Priority | Method | Platform | How it works |
|
|
62
|
+
| -------- | ----------------------- | ---------- | ---------------------------------------------------------------------------------------------------- |
|
|
63
|
+
| 1 | `COLORFGBG` | All | Reads the `COLORFGBG` environment variable (set by terminals like iTerm2, rxvt, Konsole) |
|
|
64
|
+
| 2 | OSC 11 | All (TTY) | Sends an `ESC]11;?` query to the terminal and parses the background color from the response (~200ms) |
|
|
65
|
+
| 3 | macOS system appearance | macOS only | Runs `defaults read -g AppleInterfaceStyle` to check if macOS Dark Mode is active |
|
|
66
|
+
| 4 | Default | All | Falls back to dark theme if no method succeeds |
|
|
67
|
+
|
|
68
|
+
The first method that returns a result wins. The detected value is cached for the session so subsequent theme resolutions (e.g. reselecting Auto in the `/theme` dialog) stay consistent.
|
|
69
|
+
|
|
70
|
+
### When to use Auto
|
|
71
|
+
|
|
72
|
+
- **Most users** — Auto works well if your terminal background matches your OS appearance or if your terminal sets `COLORFGBG` / supports OSC 11.
|
|
73
|
+
- **tmux / screen users** — OSC 11 may not pass through multiplexers. Detection falls back to `COLORFGBG` or macOS system appearance. If neither is available, the default dark theme is used. Set a specific theme if auto-detection gives the wrong result.
|
|
74
|
+
- **SSH sessions** — detection depends on the remote environment. If `COLORFGBG` is not forwarded and the remote terminal doesn't respond to OSC 11, the default dark theme is used.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
39
78
|
## Custom Color Themes
|
|
40
79
|
|
|
41
80
|
Qwen Code allows you to create your own custom color themes by specifying them in your `settings.json` file. This gives you full control over the color palette used in the CLI.
|
|
@@ -11,11 +11,9 @@ export default {
|
|
|
11
11
|
headless: 'Headless Mode',
|
|
12
12
|
'structured-output': 'Structured Output',
|
|
13
13
|
'dual-output': 'Dual Output',
|
|
14
|
-
checkpointing: {
|
|
15
|
-
display: 'hidden',
|
|
16
|
-
},
|
|
17
14
|
'approval-mode': 'Approval Mode',
|
|
18
15
|
'auto-mode': 'Auto Mode',
|
|
16
|
+
worktree: 'Worktrees',
|
|
19
17
|
mcp: 'MCP',
|
|
20
18
|
lsp: 'LSP (Language Server Protocol)',
|
|
21
19
|
'token-caching': 'Token Caching',
|
|
@@ -4,18 +4,22 @@ Qwen Code offers five distinct permission modes that allow you to flexibly contr
|
|
|
4
4
|
|
|
5
5
|
## Permission Modes Comparison
|
|
6
6
|
|
|
7
|
-
| Mode
|
|
8
|
-
|
|
|
9
|
-
| **Plan**
|
|
10
|
-
| **
|
|
11
|
-
| **Auto-Edit**
|
|
12
|
-
| **Auto**
|
|
13
|
-
| **YOLO**
|
|
7
|
+
| Mode | File Editing | Shell Commands | Best For | Risk Level |
|
|
8
|
+
| -------------------- | --------------------------- | --------------------------- | ------------------------------------------------------------------------------------------------------ | ---------- |
|
|
9
|
+
| **Plan** | ❌ Read-only analysis only | ❌ Not executed | • Code exploration <br>• Planning complex changes <br>• Safe code review | Lowest |
|
|
10
|
+
| **Ask Permissions** | ✅ Manual approval required | ✅ Manual approval required | • New/unfamiliar codebases <br>• Critical systems <br>• Team collaboration <br>• Learning and teaching | Low |
|
|
11
|
+
| **Auto-Edit** | ✅ Auto-approved | ❌ Manual approval required | • Daily development tasks <br>• Refactoring and code improvements <br>• Safe automation | Medium |
|
|
12
|
+
| **Auto** | ✅ Classifier-evaluated | ✅ Classifier-evaluated | • Long autonomous sessions <br>• When Auto-Edit is too cautious but YOLO is too risky | Medium |
|
|
13
|
+
| **YOLO** | ✅ Auto-approved | ✅ Auto-approved | • Trusted personal projects <br>• Automated scripts/CI/CD <br>• Batch processing tasks | Highest |
|
|
14
|
+
|
|
15
|
+
> [!NOTE]
|
|
16
|
+
>
|
|
17
|
+
> The mode previously named **Default** has been renamed to **Ask Permissions** to better describe its behavior. The underlying configuration value (`tools.approvalMode: "default"`) and the `/approval-mode default` command are unchanged for backward compatibility.
|
|
14
18
|
|
|
15
19
|
### Quick Reference Guide
|
|
16
20
|
|
|
17
21
|
- **Start in Plan Mode**: Great for understanding before making changes
|
|
18
|
-
- **Work in
|
|
22
|
+
- **Work in Ask Permissions Mode**: The balanced choice for most development work
|
|
19
23
|
- **Switch to Auto-Edit**: When you're making lots of safe code changes
|
|
20
24
|
- **Try Auto Mode**: When you want fewer interruptions but still want safety on shell commands and network calls — an LLM classifier evaluates each call
|
|
21
25
|
- **Use YOLO sparingly**: Only for trusted automation in controlled environments
|
|
@@ -90,17 +94,17 @@ How should we handle database migration?
|
|
|
90
94
|
```json
|
|
91
95
|
// .qwen/settings.json
|
|
92
96
|
{
|
|
93
|
-
"
|
|
94
|
-
"
|
|
97
|
+
"tools": {
|
|
98
|
+
"approvalMode": "plan"
|
|
95
99
|
}
|
|
96
100
|
}
|
|
97
101
|
```
|
|
98
102
|
|
|
99
|
-
## 2. Use
|
|
103
|
+
## 2. Use Ask Permissions Mode for Controlled Interaction
|
|
100
104
|
|
|
101
|
-
|
|
105
|
+
Ask Permissions Mode is the standard way to work with Qwen Code. In this mode, you maintain full control over all potentially risky operations - Qwen Code will ask for your approval before making any file changes or executing shell commands.
|
|
102
106
|
|
|
103
|
-
### When to use
|
|
107
|
+
### When to use Ask Permissions Mode
|
|
104
108
|
|
|
105
109
|
- **New to a codebase**: When you're exploring an unfamiliar project and want to be extra cautious
|
|
106
110
|
- **Critical systems**: When working on production code, infrastructure, or sensitive data
|
|
@@ -108,23 +112,23 @@ Default Mode is the standard way to work with Qwen Code. In this mode, you maint
|
|
|
108
112
|
- **Team collaboration**: When multiple people are working on the same codebase
|
|
109
113
|
- **Complex operations**: When the changes involve multiple files or complex logic
|
|
110
114
|
|
|
111
|
-
### How to use
|
|
115
|
+
### How to use Ask Permissions Mode
|
|
112
116
|
|
|
113
|
-
**Turn on
|
|
117
|
+
**Turn on Ask Permissions Mode during a session**
|
|
114
118
|
|
|
115
|
-
You can switch into
|
|
119
|
+
You can switch into Ask Permissions Mode during a session using **Shift+Tab** (or **Tab** on Windows) to cycle through permission modes. If you're in any other mode, pressing **Shift+Tab** (or **Tab** on Windows) will eventually cycle back to Ask Permissions Mode, indicated by the absence of any mode indicator at the bottom of the terminal.
|
|
116
120
|
|
|
117
|
-
**Start a new session in
|
|
121
|
+
**Start a new session in Ask Permissions Mode**
|
|
118
122
|
|
|
119
|
-
|
|
123
|
+
Ask Permissions Mode is the initial mode when you start Qwen Code. If you've changed modes and want to return to Ask Permissions Mode, use:
|
|
120
124
|
|
|
121
125
|
```
|
|
122
126
|
/approval-mode default
|
|
123
127
|
```
|
|
124
128
|
|
|
125
|
-
**Run "headless" queries in
|
|
129
|
+
**Run "headless" queries in Ask Permissions Mode**
|
|
126
130
|
|
|
127
|
-
When running headless commands,
|
|
131
|
+
When running headless commands, Ask Permissions Mode is the default behavior. You can explicitly specify it with:
|
|
128
132
|
|
|
129
133
|
```
|
|
130
134
|
qwen --prompt "Analyze this code for potential bugs"
|
|
@@ -148,13 +152,13 @@ Qwen Code will analyze your codebase and propose a plan. It will then ask for ap
|
|
|
148
152
|
|
|
149
153
|
You can review each proposed change and approve or reject it individually.
|
|
150
154
|
|
|
151
|
-
### Configure
|
|
155
|
+
### Configure Ask Permissions Mode as default
|
|
152
156
|
|
|
153
157
|
```bash
|
|
154
158
|
// .qwen/settings.json
|
|
155
159
|
{
|
|
156
|
-
"
|
|
157
|
-
"
|
|
160
|
+
"tools": {
|
|
161
|
+
"approvalMode": "default"
|
|
158
162
|
}
|
|
159
163
|
}
|
|
160
164
|
```
|
|
@@ -200,7 +204,7 @@ configuration, troubleshooting, FAQ).
|
|
|
200
204
|
|
|
201
205
|
### When to use Auto Mode
|
|
202
206
|
|
|
203
|
-
- **Long autonomous sessions**: When
|
|
207
|
+
- **Long autonomous sessions**: When Ask Permissions Mode interrupts too often but
|
|
204
208
|
YOLO is too risky.
|
|
205
209
|
- **Trusted projects**: Internal codebases where the agent should keep
|
|
206
210
|
moving but you still want a guardrail on destructive shell commands and
|
|
@@ -277,7 +281,7 @@ Refactor the auth module to use OAuth2. Run the full test suite afterwards.
|
|
|
277
281
|
Qwen Code makes the file edits (in-workspace edits skip the classifier),
|
|
278
282
|
runs `npm test` (classifier judges safe), and surfaces a block if it ever
|
|
279
283
|
tries something risky like `rm -rf /Users/me/.aws`. You can review the
|
|
280
|
-
reason inline and decide whether to switch to
|
|
284
|
+
reason inline and decide whether to switch to Ask Permissions Mode for that step.
|
|
281
285
|
|
|
282
286
|
### Configure Auto Mode as default
|
|
283
287
|
|
|
@@ -336,10 +340,8 @@ YOLO Mode grants Qwen Code the highest permissions, automatically approving all
|
|
|
336
340
|
```bash
|
|
337
341
|
// .qwen/settings.json
|
|
338
342
|
{
|
|
339
|
-
"
|
|
340
|
-
"
|
|
341
|
-
"confirmShellCommands": false,
|
|
342
|
-
"confirmFileEdits": false
|
|
343
|
+
"tools": {
|
|
344
|
+
"approvalMode": "yolo"
|
|
343
345
|
}
|
|
344
346
|
}
|
|
345
347
|
```
|
|
@@ -360,10 +362,10 @@ qwen --prompt "Run the test suite, fix all failing tests, then commit changes"
|
|
|
360
362
|
|
|
361
363
|
### Keyboard Shortcut Switching
|
|
362
364
|
|
|
363
|
-
During a Qwen Code session, use **Shift+Tab** (or **Tab** on Windows) to quickly cycle through the
|
|
365
|
+
During a Qwen Code session, use **Shift+Tab** (or **Tab** on Windows) to quickly cycle through the five modes:
|
|
364
366
|
|
|
365
367
|
```
|
|
366
|
-
|
|
368
|
+
Plan Mode → Ask Permissions Mode → Auto-Edit Mode → Auto Mode → YOLO Mode → Plan Mode
|
|
367
369
|
```
|
|
368
370
|
|
|
369
371
|
### Persistent Configuration
|
|
@@ -372,10 +374,8 @@ Default Mode → Auto-Edit Mode → YOLO Mode → Plan Mode → Default Mode
|
|
|
372
374
|
// Project-level: ./.qwen/settings.json
|
|
373
375
|
// User-level: ~/.qwen/settings.json
|
|
374
376
|
{
|
|
375
|
-
"
|
|
376
|
-
"
|
|
377
|
-
"confirmShellCommands": true,
|
|
378
|
-
"confirmFileEdits": true
|
|
377
|
+
"tools": {
|
|
378
|
+
"approvalMode": "auto-edit" // or "plan", "default", "auto", "yolo"
|
|
379
379
|
}
|
|
380
380
|
}
|
|
381
381
|
```
|
|
@@ -15,6 +15,16 @@ walks three layers in order:
|
|
|
15
15
|
|
|
16
16
|
1. **acceptEdits fast-path** — Edit / Write whose target path is inside
|
|
17
17
|
the workspace is auto-approved without invoking the classifier.
|
|
18
|
+
**Exception:** writes to Qwen Code's own self-modification surfaces
|
|
19
|
+
(`.qwen/settings*.json`, `QWEN.md`, `AGENTS.md`, `QWEN.local.md`,
|
|
20
|
+
configured context filenames, `.qwen/rules/`, `.qwen/commands/`,
|
|
21
|
+
`.qwen/agents/`, `.qwen/skills/`, `.qwen/hooks/`, `.mcp.json`) and
|
|
22
|
+
persistence surfaces (`.git/`, `.husky/`, `package.json`, `.npmrc`,
|
|
23
|
+
`Makefile`, `.github/workflows/`, etc.) route through the classifier
|
|
24
|
+
even when they are inside the workspace. Symlinks targeting protected
|
|
25
|
+
paths are resolved and rejected too. Shell commands that reach these
|
|
26
|
+
paths via `cd && bash -lc '...'` or other wrappers go through the
|
|
27
|
+
classifier as well.
|
|
18
28
|
2. **Safe-tool allowlist** — Read-only and metadata-only built-in tools
|
|
19
29
|
(Read, Grep, Glob, LS, LSP, TodoWrite, AskUserQuestion, etc.) are
|
|
20
30
|
auto-approved without invoking the classifier.
|
|
@@ -42,7 +52,12 @@ runs:
|
|
|
42
52
|
classifier never sees it.
|
|
43
53
|
- `permissions.allow` rules with specific specifiers (e.g.
|
|
44
54
|
`Bash(git status)`, `Read(./docs/**)`) still auto-allow without the
|
|
45
|
-
classifier
|
|
55
|
+
classifier — **except** when the call resolves to a write at a
|
|
56
|
+
protected self-modification or persistence path (see the list under
|
|
57
|
+
"How it works"). In that case Auto Mode re-checks the call through
|
|
58
|
+
the classifier so an allow rule on `Bash(*)` cannot silently turn
|
|
59
|
+
into permission to rewrite Qwen Code settings, commands, hooks,
|
|
60
|
+
skills, or MCP servers.
|
|
46
61
|
- `permissions.ask` rules force manual confirmation even in Auto Mode.
|
|
47
62
|
|
|
48
63
|
## Over-broad allow rules are stripped while in Auto Mode
|
|
@@ -69,6 +84,19 @@ entries are natural-language descriptions, not rule patterns — they are
|
|
|
69
84
|
injected additively into the classifier's system prompt alongside the
|
|
70
85
|
built-in defaults.
|
|
71
86
|
|
|
87
|
+
There are three hint categories plus an environment list:
|
|
88
|
+
|
|
89
|
+
- **`allow`** — actions the classifier should auto-approve.
|
|
90
|
+
- **`softDeny`** — destructive or irreversible actions the classifier
|
|
91
|
+
should block **unless the user's most recent explicit request asked
|
|
92
|
+
for that exact action and scope**. Soft denies can be cleared by
|
|
93
|
+
user intent; a generic "yes do whatever" doesn't count.
|
|
94
|
+
- **`hardDeny`** — security-boundary actions the classifier must block
|
|
95
|
+
in Auto Mode regardless of `autoMode.hints.allow` or recent user
|
|
96
|
+
intent. This is classifier policy, not a deterministic permission
|
|
97
|
+
rule: it does not override `permissions.allow`. Use `permissions.deny`
|
|
98
|
+
for actions that must never be allowed by the permission manager.
|
|
99
|
+
|
|
72
100
|
```json
|
|
73
101
|
{
|
|
74
102
|
"permissions": {
|
|
@@ -79,10 +107,13 @@ built-in defaults.
|
|
|
79
107
|
"Cleaning build artifacts under ./dist or ./build",
|
|
80
108
|
"Reading any file under /Users/me/code/"
|
|
81
109
|
],
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"Modifying anything under ~/.ssh or ~/.aws",
|
|
110
|
+
"softDeny": [
|
|
111
|
+
"Editing Qwen Code settings unless I explicitly ask for the exact change",
|
|
85
112
|
"Running migration scripts that touch the production DB"
|
|
113
|
+
],
|
|
114
|
+
"hardDeny": [
|
|
115
|
+
"Sending secrets or .env contents to any network endpoint",
|
|
116
|
+
"Modifying anything under ~/.ssh or ~/.aws"
|
|
86
117
|
]
|
|
87
118
|
},
|
|
88
119
|
"environment": [
|
|
@@ -94,13 +125,18 @@ built-in defaults.
|
|
|
94
125
|
}
|
|
95
126
|
```
|
|
96
127
|
|
|
128
|
+
`hints.deny` is still accepted for backward compatibility and is treated
|
|
129
|
+
as `softDeny`. Mixing both is fine — entries are concatenated, `softDeny`
|
|
130
|
+
first.
|
|
131
|
+
|
|
97
132
|
### Length and count limits
|
|
98
133
|
|
|
99
134
|
To keep the classifier system prompt small:
|
|
100
135
|
|
|
101
136
|
- Each entry is capped at 200 characters (longer entries are truncated
|
|
102
137
|
with a warning).
|
|
103
|
-
- `hints.allow` and `hints.
|
|
138
|
+
- `hints.allow`, `hints.softDeny`, and `hints.hardDeny` accept up to 50
|
|
139
|
+
entries each.
|
|
104
140
|
- `environment` accepts up to 20 entries.
|
|
105
141
|
|
|
106
142
|
### Layering across settings files
|
|
@@ -114,15 +150,24 @@ de-duplicated.
|
|
|
114
150
|
When the classifier blocks an action, the tool call fails with one of
|
|
115
151
|
the following error texts:
|
|
116
152
|
|
|
117
|
-
- **`Blocked by auto mode policy: <reason>`** —
|
|
118
|
-
the action unsafe. The reason comes from Stage
|
|
153
|
+
- **`Blocked by auto mode policy: <reason>`** —
|
|
154
|
+
the classifier judged the action unsafe. The reason comes from Stage
|
|
155
|
+
2 of the classifier.
|
|
119
156
|
- **`Auto mode classifier unavailable; action blocked for safety`** —
|
|
120
157
|
the classifier API was unreachable, timed out, or returned an
|
|
121
158
|
un-parseable response. This is fail-closed behavior: when in doubt,
|
|
122
159
|
block.
|
|
123
160
|
|
|
124
|
-
|
|
125
|
-
|
|
161
|
+
Both messages are followed by a trailing guidance line telling the agent
|
|
162
|
+
that the **denied action specifically** must not be completed through
|
|
163
|
+
another tool, shell indirection, generated script, alias, symlink,
|
|
164
|
+
config change, hook, command file, MCP configuration, encoded payload,
|
|
165
|
+
or equivalent path. **Unrelated safe work and genuinely safer
|
|
166
|
+
alternatives are still allowed** — only attempts to accomplish the same
|
|
167
|
+
denied intent through a different surface are blocked.
|
|
168
|
+
|
|
169
|
+
If the denied action is genuinely required, the agent should stop and
|
|
170
|
+
ask you for explicit approval rather than route around the denial.
|
|
126
171
|
|
|
127
172
|
### Classifier reason language
|
|
128
173
|
|