@symerian/symi 3.0.16 → 3.0.17

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 (167) hide show
  1. package/dist/build-info.json +3 -3
  2. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  3. package/docs/.i18n/zh-CN.tm.jsonl +0 -20
  4. package/docs/automation/cron-jobs.md +0 -2
  5. package/docs/automation/hooks.md +0 -2
  6. package/docs/automation/poll.md +0 -8
  7. package/docs/automation/webhook.md +0 -2
  8. package/docs/capabilities.md +0 -2
  9. package/docs/channels/broadcast-groups.md +0 -1
  10. package/docs/channels/channel-routing.md +4 -10
  11. package/docs/channels/group-messages.md +0 -2
  12. package/docs/channels/groups.md +0 -10
  13. package/docs/channels/index.md +0 -1
  14. package/docs/channels/matrix.md +0 -2
  15. package/docs/channels/msteams.md +0 -2
  16. package/docs/channels/pairing.md +0 -3
  17. package/docs/channels/signal.md +0 -2
  18. package/docs/channels/troubleshooting.md +0 -7
  19. package/docs/cli/channels.md +0 -6
  20. package/docs/cli/configure.md +0 -1
  21. package/docs/cli/directory.md +0 -1
  22. package/docs/cli/index.md +0 -7
  23. package/docs/cli/message.md +1 -47
  24. package/docs/cli/status.md +0 -1
  25. package/docs/concepts/architecture.md +0 -1
  26. package/docs/concepts/features.md +0 -2
  27. package/docs/concepts/markdown-formatting.md +6 -8
  28. package/docs/concepts/memory.md +0 -4
  29. package/docs/concepts/messages.md +0 -1
  30. package/docs/concepts/models.md +0 -1
  31. package/docs/concepts/multi-agent.md +4 -19
  32. package/docs/concepts/queue.md +0 -3
  33. package/docs/concepts/retry.md +0 -5
  34. package/docs/concepts/session-tool.md +0 -2
  35. package/docs/concepts/session.md +2 -9
  36. package/docs/concepts/streaming.md +0 -2
  37. package/docs/concepts/system-prompt.md +0 -1
  38. package/docs/concepts/timezone.md +0 -1
  39. package/docs/date-time.md +0 -1
  40. package/docs/docs.json +2 -11
  41. package/docs/experiments/plans/cron-add-hardening.md +0 -1
  42. package/docs/experiments/plans/session-binding-channel-agnostic.md +2 -23
  43. package/docs/experiments/plans/thread-bound-subagents.md +7 -64
  44. package/docs/gateway/configuration-examples.md +0 -10
  45. package/docs/gateway/configuration-reference.md +22 -47
  46. package/docs/gateway/configuration.md +0 -3
  47. package/docs/gateway/heartbeat.md +0 -2
  48. package/docs/gateway/security/index.md +1 -6
  49. package/docs/gateway/troubleshooting.md +0 -1
  50. package/docs/help/faq.md +0 -13
  51. package/docs/help/troubleshooting.md +0 -1
  52. package/docs/index.md +0 -6
  53. package/docs/install/ansible.md +2 -3
  54. package/docs/install/docker.md +1 -7
  55. package/docs/install/fly.md +0 -14
  56. package/docs/install/northflank.mdx +7 -11
  57. package/docs/install/railway.mdx +6 -10
  58. package/docs/install/render.mdx +1 -2
  59. package/docs/ja-JP/index.md +0 -3
  60. package/docs/pi.md +3 -5
  61. package/docs/platforms/digitalocean.md +0 -1
  62. package/docs/platforms/mac/voicewake.md +0 -1
  63. package/docs/providers/index.md +0 -2
  64. package/docs/refactor/outbound-session-mirroring.md +0 -2
  65. package/docs/reference/AGENTS.default.md +0 -1
  66. package/docs/reference/RELEASING.md +0 -1
  67. package/docs/reference/session-management-compaction.md +0 -1
  68. package/docs/reference/templates/AGENTS.md +0 -7
  69. package/docs/reference/wizard.md +0 -4
  70. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +0 -1
  71. package/docs/security/README.md +0 -1
  72. package/docs/security/THREAT-MODEL-ATLAS.md +7 -10
  73. package/docs/start/docs-directory.md +0 -1
  74. package/docs/start/hubs.md +0 -1
  75. package/docs/start/lore.md +0 -3
  76. package/docs/start/setup.md +0 -2
  77. package/docs/start/showcase.md +0 -2
  78. package/docs/start/symi.md +0 -4
  79. package/docs/start/wizard-cli-reference.md +0 -4
  80. package/docs/start/wizard.md +3 -4
  81. package/docs/tools/agent-send.md +0 -1
  82. package/docs/tools/elevated.md +0 -2
  83. package/docs/tools/exec-approvals.md +0 -1
  84. package/docs/tools/index.md +0 -7
  85. package/docs/tools/multi-agent-sandbox-tools.md +1 -2
  86. package/docs/tools/reactions.md +0 -1
  87. package/docs/tools/slash-commands.md +0 -14
  88. package/docs/tools/symihub.md +0 -1
  89. package/docs/tts.md +0 -1
  90. package/docs/web/control-ui.md +0 -1
  91. package/docs/zh-CN/automation/cron-jobs.md +0 -2
  92. package/docs/zh-CN/automation/poll.md +0 -8
  93. package/docs/zh-CN/automation/webhook.md +0 -2
  94. package/docs/zh-CN/channels/broadcast-groups.md +0 -1
  95. package/docs/zh-CN/channels/channel-routing.md +4 -9
  96. package/docs/zh-CN/channels/group-messages.md +0 -2
  97. package/docs/zh-CN/channels/groups.md +0 -10
  98. package/docs/zh-CN/channels/imessage.md +0 -2
  99. package/docs/zh-CN/channels/index.md +0 -1
  100. package/docs/zh-CN/channels/msteams.md +0 -2
  101. package/docs/zh-CN/channels/pairing.md +0 -3
  102. package/docs/zh-CN/channels/signal.md +0 -2
  103. package/docs/zh-CN/channels/slack.md +0 -2
  104. package/docs/zh-CN/channels/telegram.md +0 -3
  105. package/docs/zh-CN/channels/troubleshooting.md +0 -2
  106. package/docs/zh-CN/cli/channels.md +0 -6
  107. package/docs/zh-CN/cli/configure.md +0 -1
  108. package/docs/zh-CN/cli/directory.md +0 -1
  109. package/docs/zh-CN/cli/index.md +0 -7
  110. package/docs/zh-CN/cli/message.md +1 -42
  111. package/docs/zh-CN/cli/status.md +0 -1
  112. package/docs/zh-CN/concepts/architecture.md +0 -1
  113. package/docs/zh-CN/concepts/features.md +0 -2
  114. package/docs/zh-CN/concepts/markdown-formatting.md +6 -8
  115. package/docs/zh-CN/concepts/messages.md +0 -1
  116. package/docs/zh-CN/concepts/multi-agent.md +4 -5
  117. package/docs/zh-CN/concepts/queue.md +0 -3
  118. package/docs/zh-CN/concepts/retry.md +0 -5
  119. package/docs/zh-CN/concepts/session-tool.md +0 -2
  120. package/docs/zh-CN/concepts/session.md +3 -11
  121. package/docs/zh-CN/concepts/streaming.md +0 -2
  122. package/docs/zh-CN/concepts/system-prompt.md +0 -2
  123. package/docs/zh-CN/concepts/timezone.md +0 -2
  124. package/docs/zh-CN/date-time.md +0 -1
  125. package/docs/zh-CN/experiments/plans/cron-add-hardening.md +0 -1
  126. package/docs/zh-CN/gateway/configuration-examples.md +0 -7
  127. package/docs/zh-CN/gateway/configuration.md +2 -50
  128. package/docs/zh-CN/gateway/heartbeat.md +0 -2
  129. package/docs/zh-CN/gateway/security/index.md +1 -6
  130. package/docs/zh-CN/gateway/troubleshooting.md +1 -14
  131. package/docs/zh-CN/help/faq.md +0 -15
  132. package/docs/zh-CN/index.md +0 -3
  133. package/docs/zh-CN/install/ansible.md +2 -3
  134. package/docs/zh-CN/install/docker.md +1 -7
  135. package/docs/zh-CN/install/fly.md +0 -14
  136. package/docs/zh-CN/install/northflank.mdx +7 -11
  137. package/docs/zh-CN/install/railway.mdx +6 -10
  138. package/docs/zh-CN/install/render.mdx +1 -2
  139. package/docs/zh-CN/pi.md +3 -5
  140. package/docs/zh-CN/platforms/digitalocean.md +0 -1
  141. package/docs/zh-CN/platforms/mac/voicewake.md +0 -1
  142. package/docs/zh-CN/providers/index.md +0 -2
  143. package/docs/zh-CN/refactor/outbound-session-mirroring.md +0 -2
  144. package/docs/zh-CN/reference/AGENTS.default.md +0 -1
  145. package/docs/zh-CN/reference/RELEASING.md +0 -1
  146. package/docs/zh-CN/reference/session-management-compaction.md +0 -1
  147. package/docs/zh-CN/reference/templates/AGENTS.md +0 -5
  148. package/docs/zh-CN/start/docs-directory.md +0 -1
  149. package/docs/zh-CN/start/getting-started.md +0 -5
  150. package/docs/zh-CN/start/hubs.md +0 -1
  151. package/docs/zh-CN/start/lore.md +0 -3
  152. package/docs/zh-CN/start/setup.md +0 -2
  153. package/docs/zh-CN/start/showcase.md +0 -2
  154. package/docs/zh-CN/start/symi.md +0 -4
  155. package/docs/zh-CN/start/wizard.md +0 -5
  156. package/docs/zh-CN/tools/agent-send.md +0 -1
  157. package/docs/zh-CN/tools/elevated.md +0 -2
  158. package/docs/zh-CN/tools/exec-approvals.md +0 -1
  159. package/docs/zh-CN/tools/index.md +0 -7
  160. package/docs/zh-CN/tools/multi-agent-sandbox-tools.md +1 -2
  161. package/docs/zh-CN/tools/reactions.md +0 -1
  162. package/docs/zh-CN/tools/slash-commands.md +0 -9
  163. package/docs/zh-CN/tts.md +0 -2
  164. package/docs/zh-CN/web/control-ui.md +0 -1
  165. package/package.json +1 -1
  166. package/docs/channels/discord.md +0 -998
  167. package/docs/zh-CN/channels/discord.md +0 -468
@@ -66,10 +66,9 @@ The wizard starts with **QuickStart** (defaults) vs **Advanced** (full control).
66
66
  (OpenAI-compatible, Anthropic-compatible, or Unknown auto-detect). Pick a default model.
67
67
  2. **Workspace** — Location for agent files (default `~/.symi/workspace`). Seeds bootstrap files.
68
68
  3. **Gateway** — Port, bind address, auth mode, Tailscale exposure.
69
- 4. **Channels** — WhatsApp, Telegram, Discord, Google Chat, Mattermost, Signal, BlueBubbles, or iMessage.
70
- 5. **Daemon** — Installs a LaunchAgent (macOS) or systemd user unit (Linux/WSL2).
71
- 6. **Health check** — Starts the Gateway and verifies it's running.
72
- 7. **Skills** — Installs recommended skills and optional dependencies.
69
+ 4. **Daemon** — Installs a LaunchAgent (macOS) or systemd user unit (Linux/WSL2).
70
+ 5. **Health check** — Starts the Gateway and verifies it's running.
71
+ 6. **Skills** — Installs recommended skills and optional dependencies.
73
72
 
74
73
  <Note>
75
74
  Re-running the wizard does **not** wipe anything unless you explicitly choose **Reset** (or pass `--reset`).
@@ -43,7 +43,6 @@ symi agent --agent ops --message "Generate report" --deliver --reply-channel sla
43
43
 
44
44
  - `--local`: run locally (requires model provider API keys in your shell)
45
45
  - `--deliver`: send the reply to the chosen channel
46
- - `--channel`: delivery channel (`whatsapp|telegram|discord|googlechat|slack|signal|imessage`, default: `whatsapp`)
47
46
  - `--reply-to`: delivery target override
48
47
  - `--reply-channel`: delivery channel override
49
48
  - `--reply-account`: delivery account id override
@@ -45,10 +45,8 @@ title: "Elevated Mode"
45
45
  ## Availability + allowlists
46
46
 
47
47
  - Feature gate: `tools.elevated.enabled` (default can be off via config even if the code supports it).
48
- - Sender allowlist: `tools.elevated.allowFrom` with per-provider allowlists (e.g. `discord`, `whatsapp`).
49
48
  - Per-agent gate: `agents.list[].tools.elevated.enabled` (optional; can only further restrict).
50
49
  - Per-agent allowlist: `agents.list[].tools.elevated.allowFrom` (optional; when set, the sender must match **both** global + per-agent allowlists).
51
- - Discord fallback: if `tools.elevated.allowFrom.discord` is omitted, the `channels.discord.allowFrom` list is used as a fallback (legacy: `channels.discord.dm.allowFrom`). Set `tools.elevated.allowFrom.discord` (even `[]`) to override. Per-agent allowlists do **not** use the fallback.
52
50
  - All gates must pass; otherwise elevated is treated as unavailable.
53
51
 
54
52
  ## Logging + status
@@ -201,7 +201,6 @@ Config:
201
201
  enabled: true,
202
202
  mode: "session", // "session" | "targets" | "both"
203
203
  agentFilter: ["main"],
204
- sessionFilter: ["discord"], // substring or regex
205
204
  targets: [
206
205
  { channel: "slack", to: "U12345678" },
207
206
  { channel: "telegram", to: "123456789" },
@@ -41,13 +41,10 @@ Profiles:
41
41
  - `messaging`: `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`, `session_status`
42
42
  - `full`: no restriction (same as unset)
43
43
 
44
- Example (messaging-only by default, allow Slack + Discord tools too):
45
-
46
44
  ```json5
47
45
  {
48
46
  tools: {
49
47
  profile: "messaging",
50
- allow: ["slack", "discord"],
51
48
  },
52
49
  }
53
50
  ```
@@ -397,12 +394,9 @@ Notes:
397
394
 
398
395
  ### `message`
399
396
 
400
- Send messages and channel actions across Discord/Google Chat/Slack/Telegram/WhatsApp/Signal/iMessage/MS Teams.
401
-
402
397
  Core actions:
403
398
 
404
399
  - `send` (text + optional media; MS Teams also supports `card` for Adaptive Cards)
405
- - `poll` (WhatsApp/Discord/MS Teams polls)
406
400
  - `react` / `reactions` / `read` / `edit` / `delete`
407
401
  - `pin` / `unpin` / `list-pins`
408
402
  - `permissions`
@@ -420,7 +414,6 @@ Core actions:
420
414
  Notes:
421
415
 
422
416
  - `send` routes WhatsApp via the Gateway; other channels go direct.
423
- - `poll` uses the Gateway for WhatsApp and MS Teams; Discord polls go direct.
424
417
  - When a message tool call is bound to an active chat session, sends are constrained to that session’s target to avoid cross-context leaks.
425
418
 
426
419
  ### `cron`
@@ -110,8 +110,7 @@ For debugging “why is this blocked?”, see [Sandbox vs Tool Policy vs Elevate
110
110
  "workspaceRoot": "/tmp/work-sandboxes"
111
111
  },
112
112
  "tools": {
113
- "allow": ["read", "write", "apply_patch", "exec"],
114
- "deny": ["browser", "gateway", "discord"]
113
+ "allow": ["read", "write", "apply_patch", "exec"]
115
114
  }
116
115
  }
117
116
  ]
@@ -15,7 +15,6 @@ Shared reaction semantics across channels:
15
15
 
16
16
  Channel notes:
17
17
 
18
- - **Discord/Slack**: empty `emoji` removes all of the bot's reactions on the message; `remove: true` removes just that emoji.
19
18
  - **Google Chat**: empty `emoji` removes the app's reactions on the message; `remove: true` removes just that emoji.
20
19
  - **Telegram**: empty `emoji` removes the bot's reactions; `remove: true` also removes reactions but still requires a non-empty `emoji` for tool validation.
21
20
  - **WhatsApp**: empty `emoji` removes the bot reaction; `remove: true` maps to empty emoji (still requires `emoji`).
@@ -40,7 +40,6 @@ They run immediately, are stripped before the model sees the message, and the re
40
40
  restart: false,
41
41
  allowFrom: {
42
42
  "*": ["user1"],
43
- discord: ["user:123"],
44
43
  },
45
44
  useAccessGroups: true,
46
45
  },
@@ -50,12 +49,7 @@ They run immediately, are stripped before the model sees the message, and the re
50
49
  - `commands.text` (default `true`) enables parsing `/...` in chat messages.
51
50
  - On surfaces without native commands (WhatsApp/WebChat/Signal/iMessage/Google Chat/MS Teams), text commands still work even if you set this to `false`.
52
51
  - `commands.native` (default `"auto"`) registers native commands.
53
- - Auto: on for Discord/Telegram; off for Slack (until you add slash commands); ignored for providers without native support.
54
- - Set `channels.discord.commands.native`, `channels.telegram.commands.native`, or `channels.slack.commands.native` to override per provider (bool or `"auto"`).
55
- - `false` clears previously registered commands on Discord/Telegram at startup. Slack commands are managed in the Slack app and are not removed automatically.
56
52
  - `commands.nativeSkills` (default `"auto"`) registers **skill** commands natively when supported.
57
- - Auto: on for Discord/Telegram; off for Slack (Slack requires creating a slash command per skill).
58
- - Set `channels.discord.commands.nativeSkills`, `channels.telegram.commands.nativeSkills`, or `channels.slack.commands.nativeSkills` to override per provider (bool or `"auto"`).
59
53
  - `commands.bash` (default `false`) enables `! <cmd>` to run host shell commands (`/bash <cmd>` is an alias; requires `tools.elevated` allowlists).
60
54
  - `commands.bashForegroundMs` (default `2000`) controls how long bash waits before switching to background mode (`0` backgrounds immediately).
61
55
  - `commands.config` (default `false`) enables `/config` (reads/writes `symi.json`).
@@ -81,8 +75,6 @@ Text + native (when enabled):
81
75
  - `/session ttl <duration|off>` (manage session-level settings, such as TTL)
82
76
  - `/subagents list|kill|log|info|send|steer|spawn` (inspect, control, or spawn sub-agent runs for the current session)
83
77
  - `/agents` (list thread-bound agents for this session)
84
- - `/focus <target>` (Discord: bind this thread, or a new thread, to a session/subagent target)
85
- - `/unfocus` (Discord: remove the current thread binding)
86
78
  - `/kill <id|#|all>` (immediately abort one or all running sub-agents for this session; no confirmation message)
87
79
  - `/steer <id|#> <message>` (steer a running sub-agent immediately: in-run when possible, otherwise abort current work and restart on the steer message)
88
80
  - `/tell <id|#> <message>` (alias for `/steer`)
@@ -90,11 +82,9 @@ Text + native (when enabled):
90
82
  - `/debug show|set|unset|reset` (runtime overrides, owner-only; requires `commands.debug: true`)
91
83
  - `/usage off|tokens|full|cost` (per-response usage footer or local cost summary)
92
84
  - `/tts off|always|inbound|tagged|status|provider|limit|summary|audio` (control TTS; see [/tts](/tts))
93
- - Discord: native command is `/voice` (Discord reserves `/tts`); text `/tts` still works.
94
85
  - `/stop`
95
86
  - `/restart`
96
87
  - `/dock-telegram` (alias: `/dock_telegram`) (switch replies to Telegram)
97
- - `/dock-discord` (alias: `/dock_discord`) (switch replies to Discord)
98
88
  - `/dock-slack` (alias: `/dock_slack`) (switch replies to Slack)
99
89
  - `/activation mention|always` (groups only)
100
90
  - `/send on|off|inherit` (owner-only)
@@ -123,7 +113,6 @@ Notes:
123
113
  - `/allowlist add|remove` requires `commands.config=true` and honors channel `configWrites`.
124
114
  - `/usage` controls the per-response usage footer; `/usage cost` prints a local cost summary from Symi session logs.
125
115
  - `/restart` is enabled by default; set `commands.restart: false` to disable it.
126
- - Discord-only native command: `/vc join|leave|status` controls voice channels (requires `channels.discord.voice` and native commands; not available as text).
127
116
  - `/verbose` is meant for debugging and extra visibility; keep it **off** in normal use.
128
117
  - `/reasoning` (and `/verbose`) are risky in group settings: they may reveal internal reasoning or tool output you did not intend to expose. Prefer leaving them off, especially in group chats.
129
118
  - **Fast path:** command-only messages from allowlisted senders are handled immediately (bypass queue + model).
@@ -137,7 +126,6 @@ Notes:
137
126
  - By default, skill commands are forwarded to the model as a normal request.
138
127
  - Skills may optionally declare `command-dispatch: tool` to route the command directly to a tool (deterministic, no model).
139
128
  - Example: `/prose` (OpenProse plugin) — see [OpenProse](/prose).
140
- - **Native command arguments:** Discord uses autocomplete for dynamic options (and button menus when you omit required args). Telegram and Slack show a button menu when a command supports choices and you omit the arg.
141
129
 
142
130
  ## Usage surfaces (what shows where)
143
131
 
@@ -163,7 +151,6 @@ Examples:
163
151
  Notes:
164
152
 
165
153
  - `/model` and `/model list` show a compact, numbered picker (model family + available providers).
166
- - On Discord, `/model` and `/models` open an interactive picker with provider and model dropdowns plus a Submit step.
167
154
  - `/model <#>` selects from that picker (and prefers the current provider when possible).
168
155
  - `/model status` shows the detailed view, including configured provider endpoint (`baseUrl`) and API mode (`api`) when available.
169
156
 
@@ -209,7 +196,6 @@ Notes:
209
196
 
210
197
  - **Text commands** run in the normal chat session (DMs share `main`, groups have their own session).
211
198
  - **Native commands** use isolated sessions:
212
- - Discord: `agent:<agentId>:discord:slash:<userId>`
213
199
  - Slack: `agent:<agentId>:slack:slash:<userId>` (prefix configurable via `channels.slack.slashCommand.sessionPrefix`)
214
200
  - Telegram: `telegram:slash:<userId>` (targets the chat session via `CommandTargetSessionKey`)
215
201
  - **`/stop`** targets the active chat session so it can abort the current run.
@@ -112,7 +112,6 @@ Reporting and moderation:
112
112
  - Moderators can view hidden skills, unhide them, delete them, or ban users.
113
113
  - Abusing the report feature can result in account bans.
114
114
 
115
- Interested in becoming a moderator? Ask in the Symi Discord and contact a
116
115
  moderator or maintainer.
117
116
 
118
117
  ## CLI commands and parameters
package/docs/tts.md CHANGED
@@ -358,7 +358,6 @@ Reply -> TTS enabled?
358
358
  There is a single command: `/tts`.
359
359
  See [Slash commands](/tools/slash-commands) for enablement details.
360
360
 
361
- Discord note: `/tts` is a built-in Discord command, so Symi registers
362
361
  `/voice` as the native command there. Text `/tts ...` still works.
363
362
 
364
363
  ```
@@ -64,7 +64,6 @@ you revoke it with `symi devices revoke --device <id> --role <role>`. See
64
64
 
65
65
  - Chat with the model via Gateway WS (`chat.history`, `chat.send`, `chat.abort`, `chat.inject`)
66
66
  - Stream tool calls + live tool output cards in Chat (agent events)
67
- - Channels: WhatsApp/Telegram/Discord/Slack + plugin channels (Mattermost, etc.) status + QR login + per-channel config (`channels.status`, `web.login.*`, `config.patch`)
68
67
  - Instances: presence list + refresh (`system-presence`)
69
68
  - Sessions: list + per-session thinking/verbose overrides (`sessions.list`, `sessions.patch`)
70
69
  - Cron jobs: list/add/run/enable/disable + run history (`cron.*`)
@@ -173,7 +173,6 @@ Cron 表达式使用 `croner`。如果省略时区,将使用 Gateway网关主
173
173
  隔离任务可以通过顶层 `delivery` 配置投递输出:
174
174
 
175
175
  - `delivery.mode`:`announce`(投递摘要)或 `none`
176
- - `delivery.channel`:`whatsapp` / `telegram` / `discord` / `slack` / `mattermost`(插件)/ `signal` / `imessage` / `last`
177
176
  - `delivery.to`:渠道特定的接收目标
178
177
  - `delivery.bestEffort`:投递失败时避免任务失败
179
178
 
@@ -183,7 +182,6 @@ Cron 表达式使用 `croner`。如果省略时区,将使用 Gateway网关主
183
182
 
184
183
  目标格式提醒:
185
184
 
186
- - Slack/Discord/Mattermost(插件)目标应使用明确前缀(例如 `channel:<id>`、`user:<id>`)以避免歧义。
187
185
  - Telegram 主题应使用 `:topic:` 格式(见下文)。
188
186
 
189
187
  #### Telegram 投递目标(主题/论坛帖子)
@@ -18,7 +18,6 @@ x-i18n:
18
18
  ## 支持的渠道
19
19
 
20
20
  - WhatsApp(Web 渠道)
21
- - Discord
22
21
  - MS Teams(Adaptive Cards)
23
22
 
24
23
  ## CLI
@@ -30,10 +29,7 @@ symi message poll --target +15555550123 \
30
29
  symi message poll --target 123456789@g.us \
31
30
  --poll-question "Meeting time?" --poll-option "10am" --poll-option "2pm" --poll-option "4pm" --poll-multi
32
31
 
33
- # Discord
34
- symi message poll --channel discord --target channel:123456789 \
35
32
  --poll-question "Snack?" --poll-option "Pizza" --poll-option "Sushi"
36
- symi message poll --channel discord --target channel:123456789 \
37
33
  --poll-question "Plan?" --poll-option "A" --poll-option "B" --poll-duration-hours 48
38
34
 
39
35
  # MS Teams
@@ -43,9 +39,7 @@ symi message poll --channel msteams --target conversation:19:abc@thread.tacv2 \
43
39
 
44
40
  选项:
45
41
 
46
- - `--channel`:`whatsapp`(默认)、`discord` 或 `msteams`
47
42
  - `--poll-multi`:允许选择多个选项
48
- - `--poll-duration-hours`:仅限 Discord(省略时默认为 24)
49
43
 
50
44
  ## Gateway 网关 RPC
51
45
 
@@ -64,13 +58,11 @@ symi message poll --channel msteams --target conversation:19:abc@thread.tacv2 \
64
58
  ## 渠道差异
65
59
 
66
60
  - WhatsApp:2-12 个选项,`maxSelections` 必须在选项数量范围内,忽略 `durationHours`。
67
- - Discord:2-10 个选项,`durationHours` 限制在 1-768 小时之间(默认 24)。`maxSelections > 1` 启用多选;Discord 不支持严格的选择数量限制。
68
61
  - MS Teams:Adaptive Card 投票(由 Symi 管理)。无原生投票 API;`durationHours` 被忽略。
69
62
 
70
63
  ## 智能体工具(Message)
71
64
 
72
65
  使用 `message` 工具的 `poll` 操作(`to`、`pollQuestion`、`pollOption`,可选 `pollMulti`、`pollDurationHours`、`channel`)。
73
66
 
74
- 注意:Discord 没有"恰好选择 N 个"模式;`pollMulti` 映射为多选。
75
67
  Teams 投票以 Adaptive Cards 形式渲染,需要 Gateway 网关保持在线
76
68
  以将投票记录到 `~/.symi/msteams-polls.json`。
@@ -84,8 +84,6 @@ Gateway 网关可以暴露一个小型 HTTP webhook 端点用于外部触发。
84
84
  - `sessionKey` 可选(字符串):用于标识智能体会话的键。默认为随机的 `hook:<uuid>`。使用一致的键可以在 hook 上下文中进行多轮对话。
85
85
  - `wakeMode` 可选(`now` | `next-heartbeat`):是否立即触发心跳(默认 `now`)或等待下一次定期检查。
86
86
  - `deliver` 可选(布尔值):如果为 `true`,智能体的响应将发送到消息渠道。默认为 `true`。仅为心跳确认的响应会自动跳过。
87
- - `channel` 可选(字符串):用于投递的消息渠道。可选值:`last`、`whatsapp`、`telegram`、`discord`、`slack`、`mattermost`(插件)、`signal`、`imessage`、`msteams`。默认为 `last`。
88
- - `to` 可选(字符串):渠道的接收者标识符(例如 WhatsApp/Signal 的电话号码、Telegram 的聊天 ID、Discord/Slack/Mattermost(插件)的频道 ID、MS Teams 的会话 ID)。默认为主会话中的最后一个接收者。
89
87
  - `model` 可选(字符串):模型覆盖(例如 `anthropic/claude-3-5-sonnet` 或别名)。如果有限制,必须在允许的模型列表中。
90
88
  - `thinking` 可选(字符串):思考级别覆盖(例如 `low`、`medium`、`high`)。
91
89
  - `timeoutSeconds` 可选(数字):智能体运行的最大持续时间(秒)。
@@ -285,7 +285,6 @@ Result: Agent A and C respond, Agent B logs error
285
285
 
286
286
  - ✅ WhatsApp(已实现)
287
287
  - 🚧 Telegram(计划中)
288
- - 🚧 Discord(计划中)
289
288
  - 🚧 Slack(计划中)
290
289
 
291
290
  ### 路由
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  read_when:
3
3
  - 更改渠道路由或收件箱行为
4
- summary: 每个渠道(WhatsApp、Telegram、Discord、Slack)的路由规则及共享上下文
5
4
  title: 渠道路由
6
5
  x-i18n:
7
6
  generated_at: "2026-02-01T20:22:21Z"
@@ -18,7 +17,6 @@ Symi 将回复**路由回消息来源的渠道**。模型不会选择渠道;
18
17
 
19
18
  ## 关键术语
20
19
 
21
- - **渠道**:`whatsapp`、`telegram`、`discord`、`slack`、`signal`、`imessage`、`webchat`。
22
20
  - **AccountId**:每个渠道的账户实例(在支持的情况下)。
23
21
  - **AgentId**:隔离的工作区 + 会话存储("大脑")。
24
22
  - **SessionKey**:用于存储上下文和控制并发的桶键。
@@ -36,24 +34,21 @@ Symi 将回复**路由回消息来源的渠道**。模型不会选择渠道;
36
34
 
37
35
  线程:
38
36
 
39
- - Slack/Discord 线程会在基础键后追加 `:thread:<threadId>`。
40
37
  - Telegram 论坛主题在群组键中嵌入 `:topic:<topicId>`。
41
38
 
42
39
  示例:
43
40
 
44
41
  - `agent:main:telegram:group:-1001234567890:topic:42`
45
- - `agent:main:discord:channel:123456:thread:987654`
46
42
 
47
43
  ## 路由规则(如何选择智能体)
48
44
 
49
45
  路由为每条入站消息选择**一个智能体**:
50
46
 
51
47
  1. **精确对端匹配**(`bindings` 中的 `peer.kind` + `peer.id`)。
52
- 2. **Guild 匹配**(Discord)通过 `guildId`。
53
- 3. **Team 匹配**(Slack)通过 `teamId`。
54
- 4. **账户匹配**(渠道上的 `accountId`)。
55
- 5. **渠道匹配**(该渠道上的任意账户)。
56
- 6. **默认智能体**(`agents.list[].default`,否则取列表第一项,兜底为 `main`)。
48
+ 2. **Team 匹配**(Slack)通过 `teamId`。
49
+ 3. **账户匹配**(渠道上的 `accountId`)。
50
+ 4. **渠道匹配**(该渠道上的任意账户)。
51
+ 5. **默认智能体**(`agents.list[].default`,否则取列表第一项,兜底为 `main`)。
57
52
 
58
53
  匹配到的智能体决定使用哪个工作区和会话存储。
59
54
 
@@ -16,8 +16,6 @@ x-i18n:
16
16
 
17
17
  目标:让 Symi 留在 WhatsApp 群组中,仅在被提及时唤醒,并将该对话线程与个人私信会话分开。
18
18
 
19
- 注意:`agents.list[].groupChat.mentionPatterns` 现在也被 Telegram/Discord/Slack/iMessage 使用;本文档重点介绍 WhatsApp 特定的行为。对于多智能体设置,为每个智能体设置 `agents.list[].groupChat.mentionPatterns`(或使用 `messages.groupChat.mentionPatterns` 作为全局回退)。
20
-
21
19
  ## 已实现的功能(2025-12-03)
22
20
 
23
21
  - 激活模式:`mention`(默认)或 `always`。`mention` 需要被提及(通过 `mentionedJids` 的真实 WhatsApp @提及、正则表达式模式,或文本中任意位置的机器人 E.164 号码)。`always` 会在每条消息时唤醒智能体,但它应该只在能提供有意义价值时才回复;否则返回静默令牌 `NO_REPLY`。默认值可在配置中设置(`channels.whatsapp.groups`),并可通过 `/activation` 为每个群组单独覆盖。当设置了 `channels.whatsapp.groups` 时,它同时充当群组允许列表(包含 `"*"` 以允许所有群组)。
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  read_when:
3
3
  - 更改群聊行为或提及限制
4
- summary: 跨平台的群聊行为(WhatsApp/Telegram/Discord/Slack/Signal/iMessage/Microsoft Teams)
5
4
  title: 群组
6
5
  x-i18n:
7
6
  generated_at: "2026-02-03T07:47:08Z"
@@ -14,8 +13,6 @@ x-i18n:
14
13
 
15
14
  # 群组
16
15
 
17
- Symi 在各平台上统一处理群聊:WhatsApp、Telegram、Discord、Slack、Signal、iMessage、Microsoft Teams。
18
-
19
16
  ## 新手入门(2 分钟)
20
17
 
21
18
  Symi"运行"在你自己的消息账户上。没有单独的 WhatsApp 机器人用户。如果**你**在一个群组中,Symi 就可以看到该群组并在其中回复。
@@ -157,7 +154,6 @@ requireMention? 是 -> 被提及? 否 -> 仅存储为上下文
157
154
  groupPolicy: "disabled",
158
155
  groupAllowFrom: ["user@org.com"],
159
156
  },
160
- discord: {
161
157
  groupPolicy: "allowlist",
162
158
  guilds: {
163
159
  GUILD_ID: { channels: { help: { allow: true } } },
@@ -189,10 +185,8 @@ requireMention? 是 -> 被提及? 否 -> 仅存储为上下文
189
185
 
190
186
  - `groupPolicy` 与提及限制(需要 @ 提及)是分开的。
191
187
  - WhatsApp/Telegram/Signal/iMessage/Microsoft Teams:使用 `groupAllowFrom`(回退:显式 `allowFrom`)。
192
- - Discord:允许列表使用 `channels.discord.guilds.<id>.channels`。
193
188
  - Slack:允许列表使用 `channels.slack.channels`。
194
189
  - Matrix:允许列表使用 `channels.matrix.groups`(房间 ID、别名或名称)。使用 `channels.matrix.groupAllowFrom` 限制发送者;也支持每个房间的 `users` 允许列表。
195
- - 群组私信单独控制(`channels.discord.dm.*`、`channels.slack.dm.*`)。
196
190
  - Telegram 允许列表可以匹配用户 ID(`"123456789"`、`"telegram:123456789"`、`"tg:123456789"`)或用户名(`"@alice"` 或 `"alice"`);前缀不区分大小写。
197
191
  - 默认为 `groupPolicy: "allowlist"`;如果你的群组允许列表为空,群组消息将被阻止。
198
192
 
@@ -206,8 +200,6 @@ requireMention? 是 -> 被提及? 否 -> 仅存储为上下文
206
200
 
207
201
  群组消息需要提及,除非按群组覆盖。默认值位于 `*.groups."*"` 下的每个子系统中。
208
202
 
209
- 回复机器人消息被视为隐式提及(当渠道支持回复元数据时)。这适用于 Telegram、WhatsApp、Slack、Discord 和 Microsoft Teams。
210
-
211
203
  ```json5
212
204
  {
213
205
  channels: {
@@ -250,7 +242,6 @@ requireMention? 是 -> 被提及? 否 -> 仅存储为上下文
250
242
  - 提供显式提及的平台仍然通过;模式是回退。
251
243
  - 每个智能体覆盖:`agents.list[].groupChat.mentionPatterns`(当多个智能体共享一个群组时有用)。
252
244
  - 提及限制仅在提及检测可行时强制执行(原生提及或 `mentionPatterns` 已配置)。
253
- - Discord 默认值位于 `channels.discord.guilds."*"`(可按服务器/频道覆盖)。
254
245
  - 群组历史上下文在渠道间统一包装,并且是**仅待处理**(由于提及限制而跳过的消息);使用 `messages.groupChat.historyLimit` 作为全局默认值,使用 `channels.<channel>.historyLimit`(或 `channels.<channel>.accounts.*.historyLimit`)进行覆盖。设置 `0` 以禁用。
255
246
 
256
247
  ## 群组/频道工具限制(可选)
@@ -290,7 +281,6 @@ requireMention? 是 -> 被提及? 否 -> 仅存储为上下文
290
281
  注意事项:
291
282
 
292
283
  - 群组/频道工具限制在全局/智能体工具策略之外额外应用(deny 仍然优先)。
293
- - 某些渠道对房间/频道使用不同的嵌套结构(例如,Discord `guilds.*.channels.*`、Slack `channels.*`、MS Teams `teams.*.channels.*`)。
294
284
 
295
285
  ## 群组允许列表
296
286
 
@@ -194,8 +194,6 @@ exec ssh -T bot@mac-mini.tailnet-1234.ts.net imsg "$@"
194
194
  - 使用 SSH 密钥使 `ssh bot@mac-mini.tailnet-1234.ts.net` 无需提示即可工作。
195
195
  - `remoteHost` 应与 SSH 目标匹配,以便 SCP 可以获取附件。
196
196
 
197
- 多账户支持:使用 `channels.imessage.accounts` 配置每个账户及可选的 `name`。参见 [`gateway/configuration`](/gateway/configuration#telegramaccounts--discordaccounts--slackaccounts--signalaccounts--imessageaccounts) 了解共享模式。不要提交 `~/.symi/symi.json`(它通常包含令牌)。
198
-
199
197
  ## 访问控制(私信 + 群组)
200
198
 
201
199
  私信:
@@ -22,7 +22,6 @@ Symi 可以在你已经使用的任何聊天应用上与你交流。每个渠道
22
22
 
23
23
  - [WhatsApp](/channels/whatsapp) — 最受欢迎;使用 Baileys,需要二维码配对。
24
24
  - [Telegram](/channels/telegram) — 通过 grammY 使用 Bot API;支持群组。
25
- - [Discord](/channels/discord) — Discord Bot API + Gateway;支持服务器、频道和私信。
26
25
  - [Slack](/channels/slack) — Bolt SDK;工作区应用。
27
26
  - [飞书](/channels/feishu) — 飞书(Lark)机器人(插件,需单独安装)。
28
27
  - [Google Chat](/channels/googlechat) — 通过 HTTP webhook 的 Google Chat API 应用。
@@ -444,8 +444,6 @@ Symi 通过快速返回并主动发送回复来处理这个问题,但非常慢
444
444
 
445
445
  ### 格式化
446
446
 
447
- Teams markdown 比 Slack 或 Discord 更有限:
448
-
449
447
  - 基本格式化有效:**粗体**、_斜体_、`代码`、链接
450
448
  - 复杂的 markdown(表格、嵌套列表)可能无法正确渲染
451
449
  - 支持 Adaptive Cards 用于投票和任意卡片发送(见下文)
@@ -42,8 +42,6 @@ symi pairing list telegram
42
42
  symi pairing approve telegram <CODE>
43
43
  ```
44
44
 
45
- 支持的渠道:`telegram`、`whatsapp`、`signal`、`imessage`、`discord`、`slack`。
46
-
47
45
  ### 状态存储位置
48
46
 
49
47
  存储在 `~/.symi/credentials/` 下:
@@ -85,5 +83,4 @@ symi devices reject <requestId>
85
83
  - WhatsApp:[WhatsApp](/channels/whatsapp)
86
84
  - Signal:[Signal](/channels/signal)
87
85
  - iMessage:[iMessage](/channels/imessage)
88
- - Discord:[Discord](/channels/discord)
89
86
  - Slack:[Slack](/channels/slack)
@@ -88,8 +88,6 @@ x-i18n:
88
88
  }
89
89
  ```
90
90
 
91
- 多账户支持:使用 `channels.signal.accounts` 配置每个账户及可选的 `name`。共享模式请参见 [`gateway/configuration`](/gateway/configuration#telegramaccounts--discordaccounts--slackaccounts--signalaccounts--imessageaccounts)。
92
-
93
91
  ## 外部守护进程模式(httpUrl)
94
92
 
95
93
  如果你想自己管理 `signal-cli`(JVM 冷启动慢、容器初始化或共享 CPU),请单独运行守护进程并将 Symi 指向它:
@@ -54,8 +54,6 @@ x-i18n:
54
54
 
55
55
  使用下面的 manifest 以保持权限范围和事件同步。
56
56
 
57
- 多账户支持:使用 `channels.slack.accounts` 配置每个账户的令牌和可选的 `name`。参见 [`gateway/configuration`](/gateway/configuration#telegramaccounts--discordaccounts--slackaccounts--signalaccounts--imessageaccounts) 了解共享模式。
58
-
59
57
  ### Symi 配置(最小)
60
58
 
61
59
  通过环境变量设置令牌(推荐):
@@ -79,8 +79,6 @@ x-i18n:
79
79
  环境变量选项:`TELEGRAM_BOT_TOKEN=...`(适用于默认账户)。
80
80
  如果环境变量和配置都设置了,配置优先。
81
81
 
82
- 多账户支持:使用 `channels.telegram.accounts`,每个账户有独立的 token 和可选的 `name`。参见 [`gateway/configuration`](/gateway/configuration#telegramaccounts--discordaccounts--slackaccounts--signalaccounts--imessageaccounts) 了解共享模式。
83
-
84
82
  3. 启动 Gateway 网关。当 token 解析成功时 Telegram 启动(配置优先,环境变量回退)。
85
83
  4. 私信访问默认为配对模式。机器人首次被联系时批准配对码。
86
84
  5. 对于群组:添加机器人,决定隐私/管理员行为(见下文),然后设置 `channels.telegram.groups` 来控制提及门控和允许列表。
@@ -747,5 +745,4 @@ Telegram 反应作为**单独的 `message_reaction` 事件**到达,而不是
747
745
 
748
746
  - `agents.list[].groupChat.mentionPatterns`(提及门控模式)。
749
747
  - `messages.groupChat.mentionPatterns`(全局回退)。
750
- - `commands.native`(默认为 `"auto"` → Telegram/Discord 开启,Slack 关闭)、`commands.text`、`commands.useAccessGroups`(命令行为)。使用 `channels.telegram.commands.native` 覆盖。
751
748
  - `messages.responsePrefix`、`messages.ackReaction`、`messages.ackReactionScope`、`messages.removeAckAfterReply`。
@@ -2,7 +2,6 @@
2
2
  read_when:
3
3
  - 渠道已连接但消息无法流通
4
4
  - 排查渠道配置错误(意图、权限、隐私模式)
5
- summary: 渠道专属故障排除快捷指南(Discord/Telegram/WhatsApp)
6
5
  title: 渠道故障排除
7
6
  x-i18n:
8
7
  generated_at: "2026-02-01T19:58:09Z"
@@ -26,7 +25,6 @@ symi channels status --probe
26
25
 
27
26
  ## 渠道
28
27
 
29
- - Discord:[/channels/discord#troubleshooting](/channels/discord#troubleshooting)
30
28
  - Telegram:[/channels/telegram#troubleshooting](/channels/telegram#troubleshooting)
31
29
  - WhatsApp:[/channels/whatsapp#troubleshooting-quick](/channels/whatsapp#troubleshooting-quick)
32
30
 
@@ -1,6 +1,5 @@
1
1
  ---
2
2
  read_when:
3
- - 你想添加/删除渠道账户(WhatsApp/Telegram/Discord/Google Chat/Slack/Mattermost(插件)/Signal/iMessage)
4
3
  - 你想检查渠道状态或跟踪渠道日志
5
4
  summary: "`symi channels` 的 CLI 参考(账户、状态、登录/登出、日志)"
6
5
  title: channels
@@ -28,7 +27,6 @@ x-i18n:
28
27
  symi channels list
29
28
  symi channels status
30
29
  symi channels capabilities
31
- symi channels capabilities --channel discord --target channel:123
32
30
  symi channels resolve --channel slack "#general" "@jane"
33
31
  symi channels logs --channel all
34
32
  ```
@@ -61,14 +59,11 @@ symi channels logout --channel whatsapp
61
59
 
62
60
  ```bash
63
61
  symi channels capabilities
64
- symi channels capabilities --channel discord --target channel:123
65
62
  ```
66
63
 
67
64
  说明:
68
65
 
69
66
  - `--channel` 是可选的;省略它可列出所有渠道(包括扩展)。
70
- - `--target` 接受 `channel:<id>` 或原始数字频道 id,仅适用于 Discord。
71
- - 探测是特定于提供商的:Discord intents + 可选的频道权限;Slack bot + user scopes;Telegram bot 标志 + webhook;Signal daemon 版本;MS Teams app token + Graph roles/scopes(在已知处标注)。没有探测功能的渠道报告 `Probe: unavailable`。
72
67
 
73
68
  ## 解析名称为 ID
74
69
 
@@ -76,7 +71,6 @@ symi channels capabilities --channel discord --target channel:123
76
71
 
77
72
  ```bash
78
73
  symi channels resolve --channel slack "#general" "@jane"
79
- symi channels resolve --channel discord "My Server/#support" "@someone"
80
74
  symi channels resolve --channel matrix "Project Room"
81
75
  ```
82
76
 
@@ -28,7 +28,6 @@ x-i18n:
28
28
  注意事项:
29
29
 
30
30
  - 选择 Gateway 网关运行位置始终会更新 `gateway.mode`。如果这是你唯一需要的,可以不选择其他部分直接选择"继续"。
31
- - 面向渠道的服务(Slack/Discord/Matrix/Microsoft Teams)在设置期间会提示输入频道/房间允许列表。你可以输入名称或 ID;向导会尽可能将名称解析为 ID。
32
31
 
33
32
  ## 示例
34
33
 
@@ -41,7 +41,6 @@ symi message send --channel slack --target user:U012ABCDEF --message "hello"
41
41
  - WhatsApp:`+15551234567`(私聊),`1234567890-1234567890@g.us`(群组)
42
42
  - Telegram:`@username` 或数字聊天 ID;群组为数字 ID
43
43
  - Slack:`user:U…` 和 `channel:C…`
44
- - Discord:`user:<id>` 和 `channel:<id>`
45
44
  - Matrix(插件):`user:@user:server`、`room:!roomId:server` 或 `#alias:server`
46
45
  - Microsoft Teams(插件):`user:<id>` 和 `conversation:<id>`
47
46
  - Zalo(插件):用户 ID(Bot API)
@@ -373,8 +373,6 @@ symi [--dev] [--profile <name>] <command>
373
373
 
374
374
  ### `channels`
375
375
 
376
- 管理聊天渠道账户(WhatsApp/Telegram/Discord/Google Chat/Slack/Mattermost(插件)/Signal/iMessage/MS Teams)。
377
-
378
376
  子命令:
379
377
 
380
378
  - `channels list`:显示已配置的渠道和认证配置文件。
@@ -388,7 +386,6 @@ symi [--dev] [--profile <name>] <command>
388
386
 
389
387
  通用选项:
390
388
 
391
- - `--channel <name>`:`whatsapp|telegram|discord|googlechat|slack|mattermost|signal|imessage|msteams`
392
389
  - `--account <id>`:渠道账户 id(默认 `default`)
393
390
  - `--name <label>`:账户的显示名称
394
391
 
@@ -420,8 +417,6 @@ symi [--dev] [--profile <name>] <command>
420
417
 
421
418
  ```bash
422
419
  symi channels add --channel telegram --account alerts --name "Alerts Bot" --token $TELEGRAM_BOT_TOKEN
423
- symi channels add --channel discord --account work --name "Work Bot" --token $DISCORD_BOT_TOKEN
424
- symi channels remove --channel discord --account work --delete
425
420
  symi channels status --probe
426
421
  symi status --deep
427
422
  ```
@@ -493,7 +488,6 @@ Gmail Pub/Sub 钩子设置 + 运行器。参见 [/automation/gmail-pubsub](/auto
493
488
  示例:
494
489
 
495
490
  - `symi message send --target +15555550123 --message "Hi"`
496
- - `symi message poll --channel discord --target channel:123 --poll-question "Snack?" --poll-option Pizza --poll-option Sushi`
497
491
 
498
492
  ### `agent`
499
493
 
@@ -509,7 +503,6 @@ Gmail Pub/Sub 钩子设置 + 运行器。参见 [/automation/gmail-pubsub](/auto
509
503
  - `--session-id <id>`
510
504
  - `--thinking <off|minimal|low|medium|high|xhigh>`(仅限 GPT-5.2 + Codex 模型)
511
505
  - `--verbose <on|full|off>`
512
- - `--channel <whatsapp|telegram|discord|slack|mattermost|signal|imessage|msteams>`
513
506
  - `--local`
514
507
  - `--deliver`
515
508
  - `--json`