@protolabsai/proto 0.14.0 → 0.15.0

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.
Files changed (91) hide show
  1. package/README.md +57 -7
  2. package/{dist/bundled → bundled}/qc-helper/docs/configuration/settings.md +9 -0
  3. package/{dist/bundled → bundled}/qc-helper/docs/extension/extension-releasing.md +85 -2
  4. package/{dist/bundled → bundled}/qc-helper/docs/extension/introduction.md +34 -6
  5. package/{dist/bundled → bundled}/qc-helper/docs/features/_meta.ts +1 -0
  6. package/{dist/bundled → bundled}/qc-helper/docs/features/commands.md +14 -13
  7. package/bundled/qc-helper/docs/features/followup-suggestions.md +109 -0
  8. package/{dist/bundled → bundled}/qc-helper/docs/features/hooks.md +13 -0
  9. package/{dist/bundled → bundled}/qc-helper/docs/overview.md +1 -0
  10. package/{dist/cli.js → cli.js} +67972 -62606
  11. package/locales/de.js +1965 -0
  12. package/locales/en.js +2006 -0
  13. package/locales/ja.js +1459 -0
  14. package/locales/pt.js +1957 -0
  15. package/locales/ru.js +1964 -0
  16. package/locales/zh.js +1811 -0
  17. package/package.json +39 -122
  18. /package/{dist/bundled → bundled}/adversarial-verification/SKILL.md +0 -0
  19. /package/{dist/bundled → bundled}/brainstorming/SKILL.md +0 -0
  20. /package/{dist/bundled → bundled}/coding-agent-standards/SKILL.md +0 -0
  21. /package/{dist/bundled → bundled}/dispatching-parallel-agents/SKILL.md +0 -0
  22. /package/{dist/bundled → bundled}/executing-plans/SKILL.md +0 -0
  23. /package/{dist/bundled → bundled}/finishing-a-development-branch/SKILL.md +0 -0
  24. /package/{dist/bundled → bundled}/loop/SKILL.md +0 -0
  25. /package/{dist/bundled → bundled}/qc-helper/SKILL.md +0 -0
  26. /package/{dist/bundled → bundled}/qc-helper/docs/_meta.ts +0 -0
  27. /package/{dist/bundled → bundled}/qc-helper/docs/common-workflow.md +0 -0
  28. /package/{dist/bundled → bundled}/qc-helper/docs/configuration/_meta.ts +0 -0
  29. /package/{dist/bundled → bundled}/qc-helper/docs/configuration/auth.md +0 -0
  30. /package/{dist/bundled → bundled}/qc-helper/docs/configuration/memory.md +0 -0
  31. /package/{dist/bundled → bundled}/qc-helper/docs/configuration/model-providers.md +0 -0
  32. /package/{dist/bundled → bundled}/qc-helper/docs/configuration/qwen-ignore.md +0 -0
  33. /package/{dist/bundled → bundled}/qc-helper/docs/configuration/themes.md +0 -0
  34. /package/{dist/bundled → bundled}/qc-helper/docs/configuration/trusted-folders.md +0 -0
  35. /package/{dist/bundled → bundled}/qc-helper/docs/extension/_meta.ts +0 -0
  36. /package/{dist/bundled → bundled}/qc-helper/docs/extension/getting-started-extensions.md +0 -0
  37. /package/{dist/bundled → bundled}/qc-helper/docs/features/approval-mode.md +0 -0
  38. /package/{dist/bundled → bundled}/qc-helper/docs/features/arena.md +0 -0
  39. /package/{dist/bundled → bundled}/qc-helper/docs/features/checkpointing.md +0 -0
  40. /package/{dist/bundled → bundled}/qc-helper/docs/features/headless.md +0 -0
  41. /package/{dist/bundled → bundled}/qc-helper/docs/features/language.md +0 -0
  42. /package/{dist/bundled → bundled}/qc-helper/docs/features/lsp.md +0 -0
  43. /package/{dist/bundled → bundled}/qc-helper/docs/features/mcp.md +0 -0
  44. /package/{dist/bundled → bundled}/qc-helper/docs/features/sandbox.md +0 -0
  45. /package/{dist/bundled → bundled}/qc-helper/docs/features/scheduled-tasks.md +0 -0
  46. /package/{dist/bundled → bundled}/qc-helper/docs/features/skills.md +0 -0
  47. /package/{dist/bundled → bundled}/qc-helper/docs/features/sub-agents.md +0 -0
  48. /package/{dist/bundled → bundled}/qc-helper/docs/features/token-caching.md +0 -0
  49. /package/{dist/bundled → bundled}/qc-helper/docs/ide-integration/_meta.ts +0 -0
  50. /package/{dist/bundled → bundled}/qc-helper/docs/ide-integration/ide-companion-spec.md +0 -0
  51. /package/{dist/bundled → bundled}/qc-helper/docs/ide-integration/ide-integration.md +0 -0
  52. /package/{dist/bundled → bundled}/qc-helper/docs/integration-github-action.md +0 -0
  53. /package/{dist/bundled → bundled}/qc-helper/docs/integration-jetbrains.md +0 -0
  54. /package/{dist/bundled → bundled}/qc-helper/docs/integration-vscode.md +0 -0
  55. /package/{dist/bundled → bundled}/qc-helper/docs/integration-zed.md +0 -0
  56. /package/{dist/bundled → bundled}/qc-helper/docs/quickstart.md +0 -0
  57. /package/{dist/bundled → bundled}/qc-helper/docs/reference/_meta.ts +0 -0
  58. /package/{dist/bundled → bundled}/qc-helper/docs/reference/keyboard-shortcuts.md +0 -0
  59. /package/{dist/bundled → bundled}/qc-helper/docs/reference/sdk-api.md +0 -0
  60. /package/{dist/bundled → bundled}/qc-helper/docs/support/Uninstall.md +0 -0
  61. /package/{dist/bundled → bundled}/qc-helper/docs/support/_meta.ts +0 -0
  62. /package/{dist/bundled → bundled}/qc-helper/docs/support/tos-privacy.md +0 -0
  63. /package/{dist/bundled → bundled}/qc-helper/docs/support/troubleshooting.md +0 -0
  64. /package/{dist/bundled → bundled}/receiving-code-review/SKILL.md +0 -0
  65. /package/{dist/bundled → bundled}/requesting-code-review/SKILL.md +0 -0
  66. /package/{dist/bundled → bundled}/review/SKILL.md +0 -0
  67. /package/{dist/bundled → bundled}/subagent-driven-development/SKILL.md +0 -0
  68. /package/{dist/bundled → bundled}/subagent-driven-development/code-quality-reviewer-prompt.md +0 -0
  69. /package/{dist/bundled → bundled}/subagent-driven-development/implementer-prompt.md +0 -0
  70. /package/{dist/bundled → bundled}/subagent-driven-development/spec-reviewer-prompt.md +0 -0
  71. /package/{dist/bundled → bundled}/systematic-debugging/SKILL.md +0 -0
  72. /package/{dist/bundled → bundled}/test-driven-development/SKILL.md +0 -0
  73. /package/{dist/bundled → bundled}/using-git-worktrees/SKILL.md +0 -0
  74. /package/{dist/bundled → bundled}/using-superpowers/SKILL.md +0 -0
  75. /package/{dist/bundled → bundled}/verification-before-completion/SKILL.md +0 -0
  76. /package/{dist/bundled → bundled}/writing-plans/SKILL.md +0 -0
  77. /package/{dist/bundled → bundled}/writing-skills/SKILL.md +0 -0
  78. /package/{dist/sandbox-macos-permissive-closed.sb → sandbox-macos-permissive-closed.sb} +0 -0
  79. /package/{dist/sandbox-macos-permissive-open.sb → sandbox-macos-permissive-open.sb} +0 -0
  80. /package/{dist/sandbox-macos-permissive-proxied.sb → sandbox-macos-permissive-proxied.sb} +0 -0
  81. /package/{dist/sandbox-macos-restrictive-closed.sb → sandbox-macos-restrictive-closed.sb} +0 -0
  82. /package/{dist/sandbox-macos-restrictive-open.sb → sandbox-macos-restrictive-open.sb} +0 -0
  83. /package/{dist/sandbox-macos-restrictive-proxied.sb → sandbox-macos-restrictive-proxied.sb} +0 -0
  84. /package/{dist/vendor → vendor}/ripgrep/COPYING +0 -0
  85. /package/{dist/vendor → vendor}/ripgrep/arm64-darwin/rg +0 -0
  86. /package/{dist/vendor → vendor}/ripgrep/arm64-linux/rg +0 -0
  87. /package/{dist/vendor → vendor}/ripgrep/x64-darwin/rg +0 -0
  88. /package/{dist/vendor → vendor}/ripgrep/x64-linux/rg +0 -0
  89. /package/{dist/vendor → vendor}/ripgrep/x64-win32/rg.exe +0 -0
  90. /package/{dist/vendor → vendor}/tree-sitter/tree-sitter-bash.wasm +0 -0
  91. /package/{dist/vendor → vendor}/tree-sitter/tree-sitter.wasm +0 -0
package/README.md CHANGED
@@ -23,16 +23,16 @@ proto is a fork of [Qwen Code](https://github.com/QwenLM/qwen-code) (itself fork
23
23
  Requires Node.js 20+ and Rust toolchain (for beads_rust).
24
24
 
25
25
  ```bash
26
- # Clone and build
26
+ # Install from npm (recommended)
27
+ npm install -g @protolabsai/proto
28
+ proto --version
29
+
30
+ # Or install from source
27
31
  git clone https://github.com/protoLabsAI/protoCLI.git
28
32
  cd protoCLI
29
- npm install
30
- npm run build
31
-
32
- # Link globally
33
- npm link
33
+ npm install && npm run build && npm link
34
34
 
35
- # Install beads_rust task manager (optional but recommended)
35
+ # Optional: task manager for persistent task tracking
36
36
  cargo install beads_rust
37
37
  ```
38
38
 
@@ -159,6 +159,56 @@ Tools are exposed as `mcp__<server_name>__<tool_name>` and available to the agen
159
159
 
160
160
  proto auto-discovers Claude Code plugins installed at `~/.claude/plugins/`. Any plugin's `commands/` directory is automatically loaded as slash commands — no additional config needed.
161
161
 
162
+ ## Observability
163
+
164
+ proto supports [Langfuse](https://langfuse.com) tracing out of the box. Set three environment variables and every session is fully traced — LLM calls (all providers), tool executions, subagent lifecycles, and turn hierarchy.
165
+
166
+ ### Setup
167
+
168
+ Add to the `env` block in `~/.proto/settings.json`:
169
+
170
+ ```json
171
+ {
172
+ "env": {
173
+ "LANGFUSE_PUBLIC_KEY": "pk-lf-...",
174
+ "LANGFUSE_SECRET_KEY": "sk-lf-...",
175
+ "LANGFUSE_BASE_URL": "https://cloud.langfuse.com"
176
+ }
177
+ }
178
+ ```
179
+
180
+ `LANGFUSE_BASE_URL` is optional and defaults to `https://cloud.langfuse.com`. For a self-hosted instance, set it to your deployment URL.
181
+
182
+ > **Why `settings.json` and not `.env`?** proto walks up from your CWD loading `.env` files, so a project-level `.env` with Langfuse keys would bleed into proto's tracing and mix your traces into the wrong dataset. The `env` block in `settings.json` is proto-namespaced and completely isolated from your projects.
183
+
184
+ ### What gets traced
185
+
186
+ | Span | Attributes |
187
+ | --------------------- | ---------------------------------------------------------------------------------------------------- |
188
+ | `turn` | `session.id`, `turn.id` — root span per user prompt |
189
+ | `gen_ai chat {model}` | `gen_ai.usage.input_tokens`, `gen_ai.usage.output_tokens`, `gen_ai.request.model` — one per LLM call |
190
+ | `tool/{name}` | `tool.name`, `tool.type`, `tool.duration_ms` — one per tool execution |
191
+ | `agent/{name}` | `agent.name`, `agent.status`, `agent.duration_ms` — one per subagent |
192
+
193
+ All three provider backends are covered: OpenAI-compatible, Anthropic, and Gemini.
194
+
195
+ ### Prompt content logging
196
+
197
+ Full prompt messages and response text are included in traces by default. To disable:
198
+
199
+ ```json
200
+ // ~/.proto/settings.json
201
+ {
202
+ "telemetry": { "logPrompts": false }
203
+ }
204
+ ```
205
+
206
+ > **Privacy note:** `logPrompts` is enabled by default. When enabled, full prompt and response content is sent to your Langfuse instance. Set to `false` if you want traces without message content.
207
+
208
+ ### Langfuse activates independently
209
+
210
+ Langfuse tracing activates from env vars alone — it does not require `telemetry.enabled: true` in settings. The general telemetry pipeline (OTLP/GCP) and Langfuse are independent.
211
+
162
212
  ## Task Management
163
213
 
164
214
  proto integrates [beads_rust](https://github.com/Dicklesworthstone/beads_rust) for persistent, SQLite-backed task tracking. When `br` is on PATH, the 6 task tools (`task_create`, `task_get`, `task_list`, `task_update`, `task_stop`, `task_output`) use it as the backend. Tasks persist across sessions in `.beads/` within the project directory.
@@ -109,6 +109,9 @@ Settings are organized into categories. All settings should be placed within the
109
109
  | `ui.accessibility.enableLoadingPhrases` | boolean | Enable loading phrases (disable for accessibility). | `true` |
110
110
  | `ui.accessibility.screenReader` | boolean | Enables screen reader mode, which adjusts the TUI for better compatibility with screen readers. | `false` |
111
111
  | `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. | `[]` |
112
+ | `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. | `true` |
113
+ | `ui.enableCacheSharing` | boolean | Use cache-aware forked queries for suggestion generation. Reduces cost on providers that support prefix caching (experimental). | `true` |
114
+ | `ui.enableSpeculation` | boolean | Speculatively execute accepted suggestions before submission. Results appear instantly when you accept (experimental). | `false` |
112
115
 
113
116
  #### ide
114
117
 
@@ -185,6 +188,12 @@ The `extra_body` field allows you to add custom parameters to the request body s
185
188
  - `"./custom-logs"` - Logs to `./custom-logs` relative to current directory
186
189
  - `"/tmp/openai-logs"` - Logs to absolute path `/tmp/openai-logs`
187
190
 
191
+ #### fastModel
192
+
193
+ | Setting | Type | Description | Default |
194
+ | ----------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
195
+ | `fastModel` | string | Model for background tasks ([suggestion generation](../features/followup-suggestions), speculation). Leave empty to use the main model. A smaller/faster model (e.g., `qwen3.5-flash`) reduces latency and cost. Can also be set via `/model --fast`. | `""` |
196
+
188
197
  #### context
189
198
 
190
199
  | Setting | Type | Description | Default |
@@ -1,11 +1,12 @@
1
1
  # Extension Releasing
2
2
 
3
- There are two primary ways of releasing extensions to users:
3
+ There are three primary ways of releasing extensions to users:
4
4
 
5
5
  - [Git repository](#releasing-through-a-git-repository)
6
6
  - [Github Releases](#releasing-through-github-releases)
7
+ - [npm Registry](#releasing-through-npm-registry)
7
8
 
8
- Git repository releases tend to be the simplest and most flexible approach, while GitHub releases can be more efficient on initial install as they are shipped as single archives instead of requiring a git clone which downloads each file individually. Github releases may also contain platform specific archives if you need to ship platform specific binary files.
9
+ Git repository releases tend to be the simplest and most flexible approach, while GitHub releases can be more efficient on initial install as they are shipped as single archives instead of requiring a git clone which downloads each file individually. Github releases may also contain platform specific archives if you need to ship platform specific binary files. npm registry releases are ideal for teams that already use npm for package distribution, especially with private registries.
9
10
 
10
11
  ## Releasing through a git repository
11
12
 
@@ -119,3 +120,85 @@ jobs:
119
120
  release/linux.arm64.my-tool.tar.gz
120
121
  release/win32.arm64.my-tool.zip
121
122
  ```
123
+
124
+ ## Releasing through npm registry
125
+
126
+ You can publish Qwen Code extensions as scoped npm packages (e.g. `@your-org/my-extension`). This is a good fit when:
127
+
128
+ - Your team already uses npm for package distribution
129
+ - You need private registry support with existing auth infrastructure
130
+ - You want version resolution and access control handled by npm
131
+
132
+ ### Package requirements
133
+
134
+ Your npm package must include a `qwen-extension.json` file at the package root. This is the same config file used by all Qwen Code extensions — the npm tarball is simply another delivery mechanism.
135
+
136
+ A minimal package structure looks like:
137
+
138
+ ```
139
+ my-extension/
140
+ ├── package.json
141
+ ├── qwen-extension.json
142
+ ├── QWEN.md # optional context file
143
+ ├── commands/ # optional custom commands
144
+ ├── skills/ # optional custom skills
145
+ └── agents/ # optional custom subagents
146
+ ```
147
+
148
+ Make sure `qwen-extension.json` is included in your published package (i.e. not excluded by `.npmignore` or the `files` field in `package.json`).
149
+
150
+ ### Publishing
151
+
152
+ Use standard npm publishing tools:
153
+
154
+ ```bash
155
+ # Publish to the default registry
156
+ npm publish
157
+
158
+ # Publish to a private/custom registry
159
+ npm publish --registry https://your-registry.com
160
+ ```
161
+
162
+ ### Installation
163
+
164
+ Users install your extension using the scoped package name:
165
+
166
+ ```bash
167
+ # Install latest version
168
+ qwen extensions install @your-org/my-extension
169
+
170
+ # Install a specific version
171
+ qwen extensions install @your-org/my-extension@1.2.0
172
+
173
+ # Install from a custom registry
174
+ qwen extensions install @your-org/my-extension --registry https://your-registry.com
175
+ ```
176
+
177
+ ### Update behavior
178
+
179
+ - Extensions installed without a version pin (e.g. `@scope/pkg`) track the `latest` dist-tag.
180
+ - Extensions installed with a dist-tag (e.g. `@scope/pkg@beta`) track that specific tag.
181
+ - Extensions pinned to an exact version (e.g. `@scope/pkg@1.2.0`) are always considered up-to-date and will not prompt for updates.
182
+
183
+ ### Authentication for private registries
184
+
185
+ Qwen Code reads npm auth credentials automatically:
186
+
187
+ 1. **`NPM_TOKEN` environment variable** — highest priority
188
+ 2. **`.npmrc` file** — supports both host-level and path-scoped `_authToken` entries (e.g. `//your-registry.com/:_authToken=TOKEN` or `//pkgs.dev.azure.com/org/_packaging/feed/npm/registry/:_authToken=TOKEN`)
189
+
190
+ `.npmrc` files are read from the current directory and the user's home directory.
191
+
192
+ ### Managing release channels
193
+
194
+ You can use npm dist-tags to manage release channels:
195
+
196
+ ```bash
197
+ # Publish a beta release
198
+ npm publish --tag beta
199
+
200
+ # Users install beta channel
201
+ qwen extensions install @your-org/my-extension@beta
202
+ ```
203
+
204
+ This works similarly to git branch-based release channels but uses npm's native dist-tag mechanism.
@@ -12,11 +12,11 @@ We offer a suite of extension management tools using both `qwen extensions` CLI
12
12
 
13
13
  You can manage extensions at runtime within the interactive CLI using `/extensions` slash commands. These commands support hot-reloading, meaning changes take effect immediately without restarting the application.
14
14
 
15
- | Command | Description |
16
- | ------------------------------------- | ----------------------------------------------------------------- |
17
- | `/extensions` or `/extensions manage` | Manage all installed extensions |
18
- | `/extensions install <source>` | Install an extension from a git URL, local path, or marketplace |
19
- | `/extensions explore [source]` | Open extensions source page(Gemini or ClaudeCode) in your browser |
15
+ | Command | Description |
16
+ | ------------------------------------- | ---------------------------------------------------------------------------- |
17
+ | `/extensions` or `/extensions manage` | Manage all installed extensions |
18
+ | `/extensions install <source>` | Install an extension from a git URL, local path, npm package, or marketplace |
19
+ | `/extensions explore [source]` | Open extensions source page(Gemini or ClaudeCode) in your browser |
20
20
 
21
21
  ### CLI Extension Management
22
22
 
@@ -89,6 +89,34 @@ Gemini extensions are automatically converted to Qwen Code format during install
89
89
  - TOML command files are automatically migrated to Markdown format
90
90
  - MCP servers, context files, and settings are preserved
91
91
 
92
+ #### From npm Registry
93
+
94
+ Qwen Code supports installing extensions from npm registries using scoped package names. This is ideal for teams with private registries that already have auth, versioning, and publishing infrastructure in place.
95
+
96
+ ```bash
97
+ # Install the latest version
98
+ qwen extensions install @scope/my-extension
99
+
100
+ # Install a specific version
101
+ qwen extensions install @scope/my-extension@1.2.0
102
+
103
+ # Install from a custom registry
104
+ qwen extensions install @scope/my-extension --registry https://your-registry.com
105
+ ```
106
+
107
+ Only scoped packages (`@scope/package-name`) are supported to avoid ambiguity with the `owner/repo` GitHub shorthand format.
108
+
109
+ **Registry resolution** follows this priority:
110
+
111
+ 1. `--registry` CLI flag (explicit override)
112
+ 2. Scoped registry from `.npmrc` (e.g. `@scope:registry=https://...`)
113
+ 3. Default registry from `.npmrc`
114
+ 4. Fallback: `https://registry.npmjs.org/`
115
+
116
+ **Authentication** is handled automatically via the `NPM_TOKEN` environment variable or registry-specific `_authToken` entries in your `.npmrc` file.
117
+
118
+ > **Note:** npm extensions must include a `qwen-extension.json` file at the package root, following the same format as any other Qwen Code extension. See [Extension Releasing](./extension-releasing.md#releasing-through-npm-registry) for packaging details.
119
+
92
120
  #### From Git Repository
93
121
 
94
122
  ```bash
@@ -127,7 +155,7 @@ This is useful if you have an extension disabled at the top-level and only enabl
127
155
 
128
156
  ### Updating an extension
129
157
 
130
- For extensions installed from a local path or a git repository, you can explicitly update to the latest version (as reflected in the `qwen-extension.json` `version` field) with `qwen extensions update extension-name`.
158
+ For extensions installed from a local path, a git repository, or an npm registry, you can explicitly update to the latest version with `qwen extensions update extension-name`. For npm extensions installed without a version pin (e.g. `@scope/pkg`), updates check the `latest` dist-tag. For those installed with a specific dist-tag (e.g. `@scope/pkg@beta`), updates track that tag. Extensions pinned to an exact version (e.g. `@scope/pkg@1.2.0`) are always considered up-to-date.
131
159
 
132
160
  You can update all extensions with:
133
161
 
@@ -1,5 +1,6 @@
1
1
  export default {
2
2
  commands: 'Commands',
3
+ 'followup-suggestions': 'Followup Suggestions',
3
4
  'sub-agents': 'SubAgents',
4
5
  arena: 'Agent Arena',
5
6
  skills: 'Skills',
@@ -56,19 +56,20 @@ Commands specifically for controlling interface and output language.
56
56
 
57
57
  Commands for managing AI tools and models.
58
58
 
59
- | Command | Description | Usage Examples |
60
- | ---------------- | --------------------------------------------- | --------------------------------------------- |
61
- | `/mcp` | List configured MCP servers and tools | `/mcp`, `/mcp desc` |
62
- | `/tools` | Display currently available tool list | `/tools`, `/tools desc` |
63
- | `/skills` | List and run available skills | `/skills`, `/skills <name>` |
64
- | `/approval-mode` | Change approval mode for tool usage | `/approval-mode <mode (auto-edit)> --project` |
65
- | →`plan` | Analysis only, no execution | Secure review |
66
- | →`default` | Require approval for edits | Daily use |
67
- | →`auto-edit` | Automatically approve edits | Trusted environment |
68
- | →`yolo` | Automatically approve all | Quick prototyping |
69
- | `/model` | Switch model used in current session | `/model` |
70
- | `/extensions` | List all active extensions in current session | `/extensions` |
71
- | `/memory` | Manage AI's instruction context | `/memory add Important Info` |
59
+ | Command | Description | Usage Examples |
60
+ | ---------------- | ------------------------------------------------- | --------------------------------------------- |
61
+ | `/mcp` | List configured MCP servers and tools | `/mcp`, `/mcp desc` |
62
+ | `/tools` | Display currently available tool list | `/tools`, `/tools desc` |
63
+ | `/skills` | List and run available skills | `/skills`, `/skills <name>` |
64
+ | `/approval-mode` | Change approval mode for tool usage | `/approval-mode <mode (auto-edit)> --project` |
65
+ | →`plan` | Analysis only, no execution | Secure review |
66
+ | →`default` | Require approval for edits | Daily use |
67
+ | →`auto-edit` | Automatically approve edits | Trusted environment |
68
+ | →`yolo` | Automatically approve all | Quick prototyping |
69
+ | `/model` | Switch model used in current session | `/model` |
70
+ | `/model --fast` | Set or select the fast model for background tasks | `/model --fast qwen3.5-flash` |
71
+ | `/extensions` | List all active extensions in current session | `/extensions` |
72
+ | `/memory` | Manage AI's instruction context | `/memory add Important Info` |
72
73
 
73
74
  ### 1.5 Information, Settings, and Help
74
75
 
@@ -0,0 +1,109 @@
1
+ # Followup Suggestions
2
+
3
+ Qwen Code can predict what you want to type next and show it as ghost text in the input area. This feature uses an LLM call to analyze the conversation context and generate a natural next step suggestion.
4
+
5
+ This feature works end-to-end in the CLI. In the WebUI, the hook and UI plumbing are available, but host applications must trigger suggestion generation and wire the followup state for suggestions to appear.
6
+
7
+ ## How It Works
8
+
9
+ After Qwen Code finishes responding, a suggestion appears as dimmed text in the input area after a short delay (~300ms). For example, after fixing a bug, you might see:
10
+
11
+ ```
12
+ > run the tests
13
+ ```
14
+
15
+ The suggestion is generated by sending the conversation history to the model, which predicts what you would naturally type next.
16
+
17
+ ## Accepting Suggestions
18
+
19
+ | Key | Action |
20
+ | ------------- | ------------------------------------------------ |
21
+ | `Tab` | Accept the suggestion and fill it into the input |
22
+ | `Enter` | Accept the suggestion and submit it immediately |
23
+ | `Right Arrow` | Accept the suggestion and fill it into the input |
24
+ | Any typing | Dismiss the suggestion and type normally |
25
+
26
+ ## When Suggestions Appear
27
+
28
+ Suggestions are generated when all of the following conditions are met:
29
+
30
+ - The model has completed its response (not during streaming)
31
+ - At least 2 model turns have occurred in the conversation
32
+ - There are no errors in the most recent response
33
+ - No confirmation dialogs are pending (e.g., shell confirmation, permissions)
34
+ - The approval mode is not set to `plan`
35
+ - The feature is enabled in settings (enabled by default)
36
+
37
+ Suggestions will not appear in non-interactive mode (e.g., headless/SDK mode).
38
+
39
+ Suggestions are automatically dismissed when:
40
+
41
+ - You start typing
42
+ - A new model turn begins
43
+ - The suggestion is accepted
44
+
45
+ ## Fast Model
46
+
47
+ By default, suggestions use the same model as your main conversation. For faster and cheaper suggestions, configure a dedicated fast model:
48
+
49
+ ### Via command
50
+
51
+ ```
52
+ /model --fast qwen3.5-flash
53
+ ```
54
+
55
+ Or use `/model --fast` (without a model name) to open a selection dialog.
56
+
57
+ ### Via settings.json
58
+
59
+ ```json
60
+ {
61
+ "fastModel": "qwen3.5-flash"
62
+ }
63
+ ```
64
+
65
+ The fast model is used for background tasks like suggestion generation. When not configured, the main conversation model is used as fallback.
66
+
67
+ Thinking/reasoning mode is automatically disabled for all background tasks (suggestion generation and speculation), regardless of your main model's thinking configuration. This avoids wasting tokens on internal reasoning that isn't needed for these tasks.
68
+
69
+ ## Configuration
70
+
71
+ These settings can be configured in `settings.json`:
72
+
73
+ | Setting | Type | Default | Description |
74
+ | ------------------------------ | ------- | ------- | ------------------------------------------------------------------ |
75
+ | `ui.enableFollowupSuggestions` | boolean | `true` | Enable or disable followup suggestions |
76
+ | `ui.enableCacheSharing` | boolean | `true` | Use cache-aware forked queries to reduce cost (experimental) |
77
+ | `ui.enableSpeculation` | boolean | `false` | Speculatively execute suggestions before submission (experimental) |
78
+ | `fastModel` | string | `""` | Model for background tasks (suggestion generation, speculation) |
79
+
80
+ ### Example
81
+
82
+ ```json
83
+ {
84
+ "fastModel": "qwen3.5-flash",
85
+ "ui": {
86
+ "enableFollowupSuggestions": true,
87
+ "enableCacheSharing": true
88
+ }
89
+ }
90
+ ```
91
+
92
+ ## Monitoring
93
+
94
+ Suggestion model usage appears in `/stats` output, showing tokens consumed by the fast model for suggestion generation.
95
+
96
+ The fast model is also shown in `/about` output under "Fast Model".
97
+
98
+ ## Suggestion Quality
99
+
100
+ Suggestions go through quality filters to ensure they are useful:
101
+
102
+ - Must be 2-12 words (CJK: 2-30 characters), under 100 characters total
103
+ - Cannot be evaluative ("looks good", "thanks")
104
+ - Cannot use AI voice ("Let me...", "I'll...")
105
+ - Cannot be multiple sentences or contain formatting (markdown, newlines)
106
+ - Cannot be meta-commentary ("nothing to suggest", "silence")
107
+ - Cannot be error messages or prefixed labels ("Suggestion: ...")
108
+ - Single-word suggestions are only allowed for common commands (yes, commit, push, etc.)
109
+ - Slash commands (e.g., `/commit`) are always allowed as single-word suggestions
@@ -4,6 +4,19 @@ Run custom scripts at key points in the proto lifecycle — before tool calls, a
4
4
 
5
5
  This page covers how to configure hooks, the available hook types and events, and the input/output contract for each event.
6
6
 
7
+ Hooks are enabled by default. You can temporarily disable all hooks by setting `disableAllHooks` to `true` in your settings file (at the top level, alongside `hooks`):
8
+
9
+ ```json
10
+ {
11
+ "disableAllHooks": true,
12
+ "hooks": {
13
+ "PreToolUse": [...]
14
+ }
15
+ }
16
+ ```
17
+
18
+ This disables all hooks without deleting their configurations.
19
+
7
20
  ## Configure a hook
8
21
 
9
22
  Hooks are defined in `.proto/settings.json` (project) or `~/.proto/settings.json` (global). Each hook attaches to an event name and optionally filters by a matcher pattern.
@@ -56,6 +56,7 @@ You'll be prompted to log in on first use. That's it! [Continue with Quickstart
56
56
  - **Debug and fix issues**: Describe a bug or paste an error message. Qwen Code will analyze your codebase, identify the problem, and implement a fix.
57
57
  - **Navigate any codebase**: Ask anything about your team's codebase, and get a thoughtful answer back. Qwen Code maintains awareness of your entire project structure, can find up-to-date information from the web, and with [MCP](./features/mcp) can pull from external datasources like Google Drive, Figma, and Slack.
58
58
  - **Automate tedious tasks**: Fix fiddly lint issues, resolve merge conflicts, and write release notes. Do all this in a single command from your developer machines, or automatically in CI.
59
+ - **[Followup suggestions](./features/followup-suggestions)**: Qwen Code predicts what you want to type next and shows it as ghost text. Press Tab to accept, or just keep typing to dismiss.
59
60
 
60
61
  ## Why developers love Qwen Code
61
62