feat: promote Agent Skills from experimental to stable

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
tanzhenxin 2026-02-06 13:04:08 +08:00
parent 139e621410
commit a4ffc6eb24
28 changed files with 196 additions and 341 deletions

View file

@ -245,7 +245,6 @@ The `TransportOptions` class allows configuration of how the SDK communicates wi
- `allowedTools`: List of tools that are pre-approved for use without additional confirmation
- `authType`: Authentication type to use for the session
- `includePartialMessages`: Enables receiving partial messages during streaming responses
- `skillsEnable`: Enables or disables skills functionality for the session
- `turnTimeout`: Timeout for a complete turn of conversation
- `messageTimeout`: Timeout for individual messages within a turn
- `resumeSessionId`: ID of a previous session to resume

View file

@ -43,7 +43,7 @@ Qwen Code uses JSON settings files for persistent configuration. There are four
In addition to a project settings file, a project's `.qwen` directory can contain other project-specific files related to Qwen Code's operation, such as:
- [Custom sandbox profiles](../features/sandbox) (e.g. `.qwen/sandbox-macos-custom.sb`, `.qwen/sandbox.Dockerfile`).
- [Agent Skills](../features/skills) (experimental) under `.qwen/skills/` (each Skill is a directory containing a `SKILL.md`).
- [Agent Skills](../features/skills) under `.qwen/skills/` (each Skill is a directory containing a `SKILL.md`).
### Configuration migration
@ -359,12 +359,6 @@ LSP server configuration is done through `.lsp.json` files in your project root
>
> **Note about advanced.tavilyApiKey:** This is a legacy configuration format. For Qwen OAuth users, DashScope provider is automatically available without any configuration. For other authentication types, configure Tavily or Google providers using the new `webSearch` configuration format.
#### experimental
| Setting | Type | Description | Default |
| --------------------- | ------- | -------------------------------- | ------- |
| `experimental.skills` | boolean | Enable experimental Agent Skills | `false` |
#### mcpServers
Configures connections to one or more Model-Context Protocol (MCP) servers for discovering and using custom tools. Qwen Code attempts to connect to each configured MCP server to discover available tools. If multiple MCP servers expose a tool with the same name, the tool names will be prefixed with the server alias you defined in the configuration (e.g., `serverAlias__actualToolName`) to avoid conflicts. Note that the system might strip certain schema properties from MCP tool definitions for compatibility. At least one of `command`, `url`, or `httpUrl` must be provided. If multiple are specified, the order of precedence is `httpUrl`, then `url`, then `command`.
@ -534,7 +528,6 @@ Arguments passed directly when running the CLI can override other configurations
| `--telemetry-log-prompts` | | Enables logging of prompts for telemetry. | | See [telemetry](../../developers/development/telemetry) for more information. |
| `--checkpointing` | | Enables [checkpointing](../features/checkpointing). | | |
| `--acp` | | Enables ACP mode (Agent Client Protocol). Useful for IDE/editor integrations like [Zed](../integration-zed). | | Stable. Replaces the deprecated `--experimental-acp` flag. |
| `--experimental-skills` | | Enables experimental [Agent Skills](../features/skills) (registers the `skill` tool and loads Skills from `.qwen/skills/` and `~/.qwen/skills/`). | | Experimental. |
| `--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. |
| `--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` |
| `--list-extensions` | `-l` | Lists all available extensions and exits. | | |

View file

@ -1,7 +1,7 @@
export default {
commands: 'Commands',
'sub-agents': 'SubAgents',
skills: 'Skills (Experimental)',
skills: 'Skills',
headless: 'Headless Mode',
checkpointing: {
display: 'hidden',

View file

@ -59,7 +59,7 @@ Commands for managing AI tools and models.
| ---------------- | --------------------------------------------- | --------------------------------------------- |
| `/mcp` | List configured MCP servers and tools | `/mcp`, `/mcp desc` |
| `/tools` | Display currently available tool list | `/tools`, `/tools desc` |
| `/skills` | List and run available skills (experimental) | `/skills`, `/skills <name>` |
| `/skills` | List and run available skills | `/skills`, `/skills <name>` |
| `/approval-mode` | Change approval mode for tool usage | `/approval-mode <mode (auto-edit)> --project` |
| →`plan` | Analysis only, no execution | Secure review |
| →`default` | Require approval for edits | Daily use |

View file

@ -189,20 +189,19 @@ qwen -p "Write code" --output-format stream-json --include-partial-messages | jq
Key command-line options for headless usage:
| Option | Description | Example |
| ---------------------------- | ------------------------------------------------------- | ------------------------------------------------------------------------ |
| `--prompt`, `-p` | Run in headless mode | `qwen -p "query"` |
| `--output-format`, `-o` | Specify output format (text, json, stream-json) | `qwen -p "query" --output-format json` |
| `--input-format` | Specify input format (text, stream-json) | `qwen --input-format text --output-format stream-json` |
| `--include-partial-messages` | Include partial messages in stream-json output | `qwen -p "query" --output-format stream-json --include-partial-messages` |
| `--debug`, `-d` | Enable debug mode | `qwen -p "query" --debug` |
| `--all-files`, `-a` | Include all files in context | `qwen -p "query" --all-files` |
| `--include-directories` | Include additional directories | `qwen -p "query" --include-directories src,docs` |
| `--yolo`, `-y` | Auto-approve all actions | `qwen -p "query" --yolo` |
| `--approval-mode` | Set approval mode | `qwen -p "query" --approval-mode auto_edit` |
| `--continue` | Resume the most recent session for this project | `qwen --continue -p "Pick up where we left off"` |
| `--resume [sessionId]` | Resume a specific session (or choose interactively) | `qwen --resume 123e... -p "Finish the refactor"` |
| `--experimental-skills` | Enable experimental Skills (registers the `skill` tool) | `qwen --experimental-skills -p "What Skills are available?"` |
| Option | Description | Example |
| ---------------------------- | --------------------------------------------------- | ------------------------------------------------------------------------ |
| `--prompt`, `-p` | Run in headless mode | `qwen -p "query"` |
| `--output-format`, `-o` | Specify output format (text, json, stream-json) | `qwen -p "query" --output-format json` |
| `--input-format` | Specify input format (text, stream-json) | `qwen --input-format text --output-format stream-json` |
| `--include-partial-messages` | Include partial messages in stream-json output | `qwen -p "query" --output-format stream-json --include-partial-messages` |
| `--debug`, `-d` | Enable debug mode | `qwen -p "query" --debug` |
| `--all-files`, `-a` | Include all files in context | `qwen -p "query" --all-files` |
| `--include-directories` | Include additional directories | `qwen -p "query" --include-directories src,docs` |
| `--yolo`, `-y` | Auto-approve all actions | `qwen -p "query" --yolo` |
| `--approval-mode` | Set approval mode | `qwen -p "query" --approval-mode auto_edit` |
| `--continue` | Resume the most recent session for this project | `qwen --continue -p "Pick up where we left off"` |
| `--resume [sessionId]` | Resume a specific session (or choose interactively) | `qwen --resume 123e... -p "Finish the refactor"` |
For complete details on all available configuration options, settings files, and environment variables, see the [Configuration Guide](../configuration/settings).

View file

@ -1,39 +1,12 @@
# Agent Skills (Experimental)
# Agent Skills
> Create, manage, and share Skills to extend Qwen Codes capabilities.
> Create, manage, and share Skills to extend Qwen Code's capabilities.
This guide shows you how to create, use, and manage Agent Skills in **Qwen Code**. Skills are modular capabilities that extend the models effectiveness through organized folders containing instructions (and optionally scripts/resources).
> [!note]
>
> Skills are currently **experimental** and must be enabled with `--experimental-skills`.
This guide shows you how to create, use, and manage Agent Skills in **Qwen Code**. Skills are modular capabilities that extend the model's effectiveness through organized folders containing instructions (and optionally scripts/resources).
## Prerequisites
- Qwen Code (recent version)
## How to enable
### Via CLI flag
```bash
qwen --experimental-skills
```
### Via settings.json
Add to your `~/.qwen/settings.json` or project's `.qwen/settings.json`:
```json
{
"tools": {
"experimental": {
"skills": true
}
}
}
```
- Basic familiarity with Qwen Code ([Quickstart](../quickstart.md))
## What are Agent Skills?
@ -42,7 +15,7 @@ Agent Skills package expertise into discoverable capabilities. Each Skill consis
### How Skills are invoked
Skills are **model-invoked** — the model autonomously decides when to use them based on your request and the Skills description. This is different from slash commands, which are **user-invoked** (you explicitly type `/command`).
Skills are **model-invoked** — the model autonomously decides when to use them based on your request and the Skill's description. This is different from slash commands, which are **user-invoked** (you explicitly type `/command`).
If you want to invoke a Skill explicitly, use the `/skills` slash command:
@ -50,7 +23,7 @@ If you want to invoke a Skill explicitly, use the `/skills` slash command:
/skills <skill-name>
```
The `/skills` command is only available when you run with `--experimental-skills`. Use autocomplete to browse available Skills and descriptions.
Use autocomplete to browse available Skills and descriptions.
### Benefits
@ -74,7 +47,7 @@ mkdir -p ~/.qwen/skills/my-skill-name
Use personal Skills for:
- Your individual workflows and preferences
- Experimental Skills youre developing
- Skills you're developing
- Personal productivity helpers
### Project Skills
@ -153,7 +126,7 @@ python scripts/helper.py input.txt
## View available Skills
When `--experimental-skills` is enabled, Qwen Code discovers Skills from:
Qwen Code discovers Skills from:
- Personal Skills: `~/.qwen/skills/`
- Project Skills: `.qwen/skills/`
@ -163,10 +136,7 @@ When `--experimental-skills` is enabled, Qwen Code discovers Skills from:
Extensions can provide custom skills that become available when the extension is enabled. These skills are stored in the extension's `skills/` directory and follow the same format as personal and project skills.
Extension skills are automatically discovered and loaded when:
- The extension is installed and enabled
- The `--experimental-skills` flag is enabled
Extension skills are automatically discovered and loaded when the extension is installed and enabled.
To see which extensions provide skills, check the extension's `qwen-extension.json` file for a `skills` field.
@ -185,7 +155,7 @@ ls ~/.qwen/skills/
# List project Skills (if in a project directory)
ls .qwen/skills/
# View a specific Skills content
# View a specific Skill's content
cat ~/.qwen/skills/my-skill/SKILL.md
```
@ -193,17 +163,17 @@ cat ~/.qwen/skills/my-skill/SKILL.md
After creating a Skill, test it by asking questions that match your description.
Example: if your description mentions “PDF files”:
Example: if your description mentions "PDF files":
```text
Can you help me extract text from this PDF?
```
The model autonomously decides to use your Skill if it matches the request — you dont need to explicitly invoke it.
The model autonomously decides to use your Skill if it matches the request — you don't need to explicitly invoke it.
## Debug a Skill
If Qwen Code doesnt use your Skill, check these common issues:
If Qwen Code doesn't use your Skill, check these common issues:
### Make the description specific
@ -251,7 +221,7 @@ Ensure:
Run Qwen Code with debug mode to see Skill loading errors:
```bash
qwen --experimental-skills --debug
qwen --debug
```
## Share Skills with your team
@ -260,7 +230,7 @@ You can share Skills through project repositories:
1. Add the Skill under `.qwen/skills/`
2. Commit and push
3. Teammates pull the changes and run with `--experimental-skills`
3. Teammates pull the changes
```bash
git add .qwen/skills/
@ -301,8 +271,8 @@ git commit -m "Remove unused Skill"
One Skill should address one capability:
- Focused: “PDF form filling”, “Excel analysis”, “Git commit messages”
- Too broad: “Document processing” (split into smaller Skills)
- Focused: "PDF form filling", "Excel analysis", "Git commit messages"
- Too broad: "Document processing" (split into smaller Skills)
### Write clear descriptions

File diff suppressed because it is too large Load diff

View file

@ -110,7 +110,6 @@ export interface CliArgs {
allowedTools: string[] | undefined;
acp: boolean | undefined;
experimentalAcp: boolean | undefined;
experimentalSkills: boolean | undefined;
experimentalLsp: boolean | undefined;
extensions: string[] | undefined;
listExtensions: boolean | undefined;
@ -160,7 +159,7 @@ function normalizeOutputFormat(
return OutputFormat.TEXT;
}
export async function parseArguments(settings: Settings): Promise<CliArgs> {
export async function parseArguments(): Promise<CliArgs> {
let rawArgv = hideBin(process.argv);
// hack: if the first argument is the CLI entry point, remove it
@ -313,15 +312,9 @@ export async function parseArguments(settings: Settings): Promise<CliArgs> {
})
.option('experimental-skills', {
type: 'boolean',
description: 'Enable experimental Skills feature',
default: (() => {
const legacySkills = (
settings as Settings & {
tools?: { experimental?: { skills?: boolean } };
}
).tools?.experimental?.skills;
return settings.experimental?.skills ?? legacySkills ?? false;
})(),
description:
'Deprecated: Skills are now enabled by default. This flag is ignored.',
hidden: true,
})
.option('experimental-lsp', {
type: 'boolean',
@ -959,7 +952,6 @@ export async function loadCliConfig(
maxSessionTurns:
argv.maxSessionTurns ?? settings.model?.maxSessionTurns ?? -1,
experimentalZedIntegration: argv.acp || argv.experimentalAcp || false,
experimentalSkills: argv.experimentalSkills || false,
listExtensions: argv.listExtensions || false,
overrideExtensions: overrideExtensions || argv.extensions,
noBrowser: !!process.env['NO_BROWSER'],

View file

@ -1133,28 +1133,6 @@ export function loadSettings(
);
}
export function migrateDeprecatedSettings(
loadedSettings: LoadedSettings,
): void {
const processScope = (scope: SettingScope) => {
const settings = loadedSettings.forScope(scope).settings;
const legacySkills = (
settings as Settings & {
tools?: { experimental?: { skills?: boolean } };
}
).tools?.experimental?.skills;
if (
legacySkills !== undefined &&
settings.experimental?.skills === undefined
) {
loadedSettings.setValue(scope, 'experimental.skills', legacySkills);
}
};
processScope(SettingScope.User);
processScope(SettingScope.Workspace);
}
export function saveSettings(settingsFile: SettingsFile): void {
try {
// Ensure the directory exists

View file

@ -1150,16 +1150,6 @@ const SETTINGS_SCHEMA = {
description: 'Setting to enable experimental features',
showInDialog: false,
properties: {
skills: {
type: 'boolean',
label: 'Experimental: Skills',
category: 'Experimental',
requiresRestart: true,
default: false,
description:
'Enable experimental Agent Skills feature. When enabled, Qwen Code can use Skills from .qwen/skills/ and ~/.qwen/skills/.',
showInDialog: true,
},
visionModelPreview: {
type: 'boolean',
label: 'Vision Model Preview',

View file

@ -470,7 +470,6 @@ describe('gemini.tsx main function kitty protocol', () => {
allowedTools: undefined,
acp: undefined,
experimentalAcp: undefined,
experimentalSkills: undefined,
extensions: undefined,
listExtensions: undefined,
openaiLogging: undefined,

View file

@ -211,7 +211,7 @@ export async function main() {
const settings = loadSettings();
await cleanupCheckpoints();
let argv = await parseArguments(settings.merged);
let argv = await parseArguments();
// Check for invalid input combinations early to prevent crashes
if (argv.promptInteractive && !process.stdin.isTTY) {

View file

@ -335,7 +335,6 @@ export default {
'Folder Trust': 'Ordnervertrauen',
'Vision Model Preview': 'Vision-Modell-Vorschau',
'Tool Schema Compliance': 'Werkzeug-Schema-Konformität',
'Experimental: Skills': 'Experimentell: Fähigkeiten',
// Settings enum options
'Auto (detect from system)': 'Automatisch (vom System erkennen)',
Text: 'Text',

View file

@ -351,7 +351,6 @@ export default {
'Folder Trust': 'Folder Trust',
'Vision Model Preview': 'Vision Model Preview',
'Tool Schema Compliance': 'Tool Schema Compliance',
'Experimental: Skills': 'Experimental: Skills',
// Settings enum options
'Auto (detect from system)': 'Auto (detect from system)',
Text: 'Text',

View file

@ -365,7 +365,6 @@ export default {
'Folder Trust': 'Confiança de Pasta',
'Vision Model Preview': 'Visualização de Modelo de Visão',
'Tool Schema Compliance': 'Conformidade de Esquema de Ferramenta',
'Experimental: Skills': 'Experimental: Habilidades',
// Settings enum options
'Auto (detect from system)': 'Automático (detectar do sistema)',

View file

@ -355,7 +355,6 @@ export default {
'Folder Trust': 'Доверие к папке',
'Vision Model Preview': 'Визуальная модель (предпросмотр)',
'Tool Schema Compliance': 'Соответствие схеме инструмента',
'Experimental: Skills': 'Экспериментальное: Навыки',
// Варианты перечислений настроек
'Auto (detect from system)': 'Авто (определить из системы)',
Text: 'Текст',

View file

@ -340,7 +340,6 @@ export default {
'Folder Trust': '文件夹信任',
'Vision Model Preview': '视觉模型预览',
'Tool Schema Compliance': '工具 Schema 兼容性',
'Experimental: Skills': '实验性: 技能',
// Settings enum options
'Auto (detect from system)': '自动(从系统检测)',
Text: '文本',

View file

@ -81,7 +81,7 @@ export class BuiltinCommandLoader implements ICommandLoader {
quitCommand,
restoreCommand(this.config),
resumeCommand,
...(this.config?.getExperimentalSkills?.() ? [skillsCommand] : []),
skillsCommand,
statsCommand,
summaryCommand,
themeCommand,

View file

@ -324,7 +324,6 @@ export interface ConfigParameters {
outputLanguageFilePath?: string;
maxSessionTurns?: number;
sessionTokenLimit?: number;
experimentalSkills?: boolean;
experimentalZedIntegration?: boolean;
listExtensions?: boolean;
overrideExtensions?: string[];
@ -488,7 +487,6 @@ export class Config {
| undefined;
private readonly cliVersion?: string;
private readonly experimentalZedIntegration: boolean = false;
private readonly experimentalSkills: boolean = false;
private readonly chatRecordingEnabled: boolean;
private readonly loadMemoryFromIncludeDirectories: boolean = false;
private readonly importFormat: 'tree' | 'flat';
@ -592,7 +590,6 @@ export class Config {
this.sessionTokenLimit = params.sessionTokenLimit ?? -1;
this.experimentalZedIntegration =
params.experimentalZedIntegration ?? false;
this.experimentalSkills = params.experimentalSkills ?? false;
this.listExtensions = params.listExtensions ?? false;
this.overrideExtensions = params.overrideExtensions;
this.noBrowser = params.noBrowser ?? false;
@ -699,11 +696,9 @@ export class Config {
this.debugLogger.debug('Extension manager initialized');
this.subagentManager = new SubagentManager(this);
if (this.getExperimentalSkills()) {
this.skillManager = new SkillManager(this);
await this.skillManager.startWatching();
this.debugLogger.debug('Skill manager initialized');
}
this.skillManager = new SkillManager(this);
await this.skillManager.startWatching();
this.debugLogger.debug('Skill manager initialized');
// Load session subagents if they were provided before initialization
if (this.sessionSubagents.length > 0) {
@ -1358,10 +1353,6 @@ export class Config {
return this.experimentalZedIntegration;
}
getExperimentalSkills(): boolean {
return this.experimentalSkills;
}
getListExtensions(): boolean {
return this.listExtensions;
}
@ -1673,9 +1664,7 @@ export class Config {
};
registerCoreTool(TaskTool, this);
if (this.getExperimentalSkills()) {
registerCoreTool(SkillTool, this);
}
registerCoreTool(SkillTool, this);
registerCoreTool(LSTool, this);
registerCoreTool(ReadFileTool, this);

View file

@ -58,7 +58,7 @@ The following is a simple example showing how to use the ACP SDK to create a cli
public void testSession() throws AgentInitializeException, SessionNewException, IOException {
// Create an ACP client with a process transport
AcpClient acpClient = new AcpClient(
new ProcessTransport(new ProcessTransportOptions().setCommandArgs(new String[] {"qwen", "--acp", "--experimental-skills", "-y"})));
new ProcessTransport(new ProcessTransportOptions().setCommandArgs(new String[] {"qwen", "--acp", "-y"})));
try {
// Send a prompt to the agent

View file

@ -45,7 +45,7 @@ class SessionTest {
private static final Logger logger = LoggerFactory.getLogger(SessionTest.class);
@Test
public void testSession() throws AgentInitializeException, SessionNewException, IOException {
AcpClient acpClient = new AcpClient(new ProcessTransport(new ProcessTransportOptions().setCommandArgs(new String[] {"qwen", "--acp", "--experimental-skills", "-y"})));
AcpClient acpClient = new AcpClient(new ProcessTransport(new ProcessTransportOptions().setCommandArgs(new String[] {"qwen", "--acp", "-y"})));
try {
acpClient.sendPrompt(Collections.singletonList(new TextContent("你是谁")), new AgentEventConsumer().setContentEventConsumer(new ContentEventSimpleConsumer(){
@Override
@ -86,7 +86,7 @@ class SessionTest {
@Test
void test() throws SessionNewException, AgentInitializeException, IOException {
Transport transport = new ProcessTransport(
new ProcessTransportOptions().setCommandArgs(new String[] {"qwen", "--acp", "--experimental-skills", "-y"}));
new ProcessTransportOptions().setCommandArgs(new String[] {"qwen", "--acp", "-y"}));
AcpClient acpClient = new AcpClient(transport, new InitializeRequestParams().setClientCapabilities(
new ClientCapabilities()
.setTerminal(true)
@ -98,7 +98,7 @@ class SessionTest {
@Test
void testPermission() throws AgentInitializeException, SessionNewException, IOException {
Transport transport = new ProcessTransport(
new ProcessTransportOptions().setCommandArgs(new String[] {"qwen", "--acp", "--experimental-skills"}));
new ProcessTransportOptions().setCommandArgs(new String[] {"qwen", "--acp"}));
AcpClient acpClient = new AcpClient(transport, new InitializeRequestParams().setClientCapabilities(
new ClientCapabilities()
.setTerminal(false)

View file

@ -153,7 +153,6 @@ The `TransportOptions` class allows configuration of how the SDK communicates wi
- `allowedTools`: List of tools that are pre-approved for use without additional confirmation
- `authType`: Authentication type to use for the session
- `includePartialMessages`: Enables receiving partial messages during streaming responses
- `skillsEnable`: Enables or disables skills functionality for the session
- `turnTimeout`: Timeout for a complete turn of conversation
- `messageTimeout`: Timeout for individual messages within a turn
- `resumeSessionId`: ID of a previous session to resume

View file

@ -245,7 +245,6 @@ The `TransportOptions` class allows configuration of how the SDK communicates wi
- `allowedTools`: List of tools that are pre-approved for use without additional confirmation
- `authType`: Authentication type to use for the session
- `includePartialMessages`: Enables receiving partial messages during streaming responses
- `skillsEnable`: Enables or disables skills functionality for the session
- `turnTimeout`: Timeout for a complete turn of conversation
- `messageTimeout`: Timeout for individual messages within a turn
- `resumeSessionId`: ID of a previous session to resume

View file

@ -57,10 +57,6 @@ public class TransportOptions implements Cloneable {
* Whether to include partial messages in responses.
*/
private Boolean includePartialMessages;
/**
* Whether to enable skills.
*/
private Boolean skillsEnable;
/**
* Timeout for individual turns.
*/
@ -298,26 +294,6 @@ public class TransportOptions implements Cloneable {
return this;
}
/**
* Gets whether skills are enabled.
*
* @return Whether skills are enabled
*/
public Boolean getSkillsEnable() {
return skillsEnable;
}
/**
* Sets whether skills are enabled.
*
* @param skillsEnable Whether skills are enabled
* @return This instance for method chaining
*/
public TransportOptions setSkillsEnable(Boolean skillsEnable) {
this.skillsEnable = skillsEnable;
return this;
}
/**
* Gets the turn timeout.
*

View file

@ -107,10 +107,6 @@ class TransportOptionsAdapter {
args.add("--include-partial-messages");
}
if (transportOptions.getSkillsEnable() != null && transportOptions.getSkillsEnable()) {
args.add("--experimental-skills");
}
if (StringUtils.isNotBlank(transportOptions.getResumeSessionId())) {
args.add("--resume");
args.add(transportOptions.getResumeSessionId());

View file

@ -226,7 +226,6 @@ export class ProcessTransport implements Transport {
'--output-format',
'stream-json',
'--channel=SDK',
'--experimental-skills',
];
if (this.options.model) {

View file

@ -55,7 +55,7 @@ export class QwenConnectionHandler {
let availableModels: ModelInfo[] | undefined;
// Build extra CLI arguments (only essential parameters)
const extraArgs: string[] = ['--experimental-skills'];
const extraArgs: string[] = [];
await connection.connect(cliEntryPath!, workingDir, extraArgs);

View file

@ -13,20 +13,20 @@ icon = "qwen-code.svg"
[agent_servers.qwen-code.targets.darwin-aarch64]
archive = "https://registry.npmjs.org/@qwen-code/qwen-code/-/qwen-code-0.8.0.tgz"
cmd = "node"
args = ["./package/cli.js", "--acp", "--experimental-skills"]
args = ["./package/cli.js", "--acp"]
[agent_servers.qwen-code.targets.darwin-x86_64]
archive = "https://registry.npmjs.org/@qwen-code/qwen-code/-/qwen-code-0.8.0.tgz"
cmd = "node"
args = ["./package/cli.js", "--acp", "--experimental-skills"]
args = ["./package/cli.js", "--acp"]
[agent_servers.qwen-code.targets.linux-x86_64]
archive = "https://registry.npmjs.org/@qwen-code/qwen-code/-/qwen-code-0.8.0.tgz"
cmd = "node"
args = ["./package/cli.js", "--acp", "--experimental-skills"]
args = ["./package/cli.js", "--acp"]
[agent_servers.qwen-code.targets.windows-x86_64]
archive = "https://registry.npmjs.org/@qwen-code/qwen-code/-/qwen-code-0.8.0.tgz"
cmd = "node"
args = ["./package/cli.js", "--acp", "--experimental-skills"]
args = ["./package/cli.js", "--acp"]