qwen-code/docs/users/features/channels/plugins.md
jinye c90e6e7ba4
feat(channels): Add channel agent bridge abstraction (#5978)
* feat(channels): add channel agent bridge abstraction

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

* fix(channels): handle bridge session lifecycle cleanup

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

* fix(channels): close bridge lifecycle review gaps

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

* codex: address PR review feedback (#5978)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

* codex: address PR review feedback (#5978)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

* fix: address channel bridge review feedback

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

* codex: address PR review feedback (#5978)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

* codex: address PR review feedback (#5978)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>

---------

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-06-29 10:03:28 +00:00

3.8 KiB

Custom Channel Plugins

You can extend the channel system with custom platform adapters packaged as extensions. This lets you connect Qwen Code to any messaging platform, webhook, or custom transport.

How It Works

Channel plugins are loaded at startup from active extensions. When qwen channel start runs, it:

  1. Scans all enabled extensions for channels entries in their qwen-extension.json
  2. Dynamically imports each channel's entry point
  3. Registers the channel type so it can be referenced in settings.json
  4. Creates channel instances using the plugin's factory function

Your custom channel gets the full shared pipeline for free: sender gating, group policies, session routing, slash commands, crash recovery, and an agent bridge. Standalone qwen channel start currently supplies AcpBridge; plugin adapter code should depend on the adapter-facing ChannelAgentBridge contract. Existing TypeScript plugins with an explicit AcpBridge bridge parameter should migrate that annotation to ChannelAgentBridge; JavaScript plugins are unaffected at runtime.

Installing a Custom Channel

Install an extension that provides a channel plugin:

# From a local path (for development or private plugins)
qwen extensions install /path/to/my-channel-extension

# Or link it for development (changes are reflected immediately)
qwen extensions link /path/to/my-channel-extension

Configuring a Custom Channel

Add a channel entry to ~/.qwen/settings.json using the custom type provided by the extension:

{
  "channels": {
    "my-bot": {
      "type": "my-platform",
      "apiKey": "$MY_PLATFORM_API_KEY",
      "senderPolicy": "open",
      "cwd": "/path/to/project"
    }
  }
}

The type must match a channel type registered by an installed extension. Check the extension's documentation for which plugin-specific fields are required (e.g., apiKey, webhookUrl).

All standard channel options work with custom channels:

Option Description
senderPolicy allowlist, pairing, or open
allowedUsers Static allowlist of sender IDs
sessionScope user, thread, or single
cwd Working directory for the agent
instructions Prepended to the first message of each session
model Model override for the channel
groupPolicy disabled, allowlist, or open
groups Per-group settings

See Overview for details on each option.

Starting the Channel

# Start all channels including custom ones
qwen channel start

# Start just your custom channel
qwen channel start my-bot

What You Get for Free

Custom channels automatically support everything built-in channels do:

  • Sender policiesallowlist, pairing, and open access control
  • Group policies — Per-group settings with optional @mention gating
  • Session routing — Per-user, per-thread, or single shared sessions
  • DM pairing — Full pairing code flow for unknown users
  • Slash commands/help, /clear, /status work out of the box
  • Custom instructions — Prepended to the first message in each session
  • Crash recovery — Automatic restart with session preservation
  • Per-session serialization — Messages are queued to prevent race conditions

Building Your Own Channel Plugin

Want to build a channel plugin for a new platform? See the Channel Plugin Developer Guide for the ChannelPlugin interface, the Envelope format, and extension points.