@symerian/symi 3.0.16 → 3.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{audio-preflight-CBDFctZN.js → audio-preflight-BfmZbg4Y.js} +4 -4
- package/dist/{audio-preflight-gsZSpG-6.js → audio-preflight-DcuC-liM.js} +4 -4
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +8 -8
- package/dist/bundled/session-memory/handler.js +7 -7
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{chrome-nPMY1XTJ.js → chrome-Bo7cbvFK.js} +5 -5
- package/dist/{chrome-BjVab8gM.js → chrome-DYp18Q0t.js} +5 -5
- package/dist/{deliver-D-QFqm31.js → deliver-ChSIbiMM.js} +1 -1
- package/dist/{deliver-B4-bcot9.js → deliver-DEgRQM4J.js} +1 -1
- package/dist/extensionAPI.js +7 -7
- package/dist/{image-CDwtQjmt.js → image-Bx-hvoNJ.js} +1 -1
- package/dist/{image-CcS-vzTA.js → image-CQl_mjWk.js} +1 -1
- package/dist/llm-slug-generator.js +7 -7
- package/dist/{manager-BnEdHzmO.js → manager-D_pn0urG.js} +1 -1
- package/dist/{manager-09r0qPze.js → manager-YQxK2t0C.js} +1 -1
- package/dist/{pi-embedded-CWsY69-4.js → pi-embedded-CLw_ZzEZ.js} +16 -16
- package/dist/{pi-embedded-helpers-BBMy-lqr.js → pi-embedded-helpers-B5I53aw6.js} +4 -4
- package/dist/{pi-embedded-helpers-ChEYbgVj.js → pi-embedded-helpers-sUAEIC9X.js} +4 -4
- package/dist/plugin-sdk/{accounts-BfyWsC_i.js → accounts-CWFytwbR.js} +3 -3
- package/dist/plugin-sdk/{active-listener-DcJW7xAT.js → active-listener-BkZ4jHrL.js} +2 -2
- package/dist/plugin-sdk/{agent-scope-ChbGV6of.js → agent-scope-C9gfY_Gk.js} +2 -2
- package/dist/plugin-sdk/{audio-preflight-D3GtNLqW.js → audio-preflight-HKbdzXLZ.js} +21 -21
- package/dist/plugin-sdk/{bindings-CN2Qmefj.js → bindings-BaKIqPPy.js} +2 -2
- package/dist/plugin-sdk/{channel-web-DTyqujjA.js → channel-web-D5nWiTH1.js} +18 -18
- package/dist/plugin-sdk/{chrome-BKzAKr3K.js → chrome-klTSnz-9.js} +3 -3
- package/dist/plugin-sdk/{chunk-DhDkBujV.js → chunk-BbrYSny_.js} +1 -1
- package/dist/plugin-sdk/{command-format-CVrYFyZS.js → command-format-BN6tyZt6.js} +1 -1
- package/dist/plugin-sdk/{commands-registry-17yfZkHZ.js → commands-registry-CTzKKtY6.js} +4 -4
- package/dist/plugin-sdk/{config-7wk65zKC.js → config-Crv2qEdJ.js} +9 -9
- package/dist/plugin-sdk/{consolidate-exbAW0ml.js → consolidate-DT1QH65Q.js} +2 -2
- package/dist/plugin-sdk/{deliver-TxAcw7J5.js → deliver-7rOvAlrc.js} +12 -12
- package/dist/plugin-sdk/{diagnostic-Debx4frd.js → diagnostic-0nsxhWp7.js} +1 -1
- package/dist/plugin-sdk/{fs-safe-wBYbAkJF.js → fs-safe-DfWYBeWF.js} +1 -1
- package/dist/plugin-sdk/{gemini-auth-7U2pm2Ky.js → gemini-auth-C0N0_u49.js} +1 -1
- package/dist/plugin-sdk/{image-BtDVmYA5.js → image-WOSl2apK.js} +4 -4
- package/dist/plugin-sdk/index.js +43 -43
- package/dist/plugin-sdk/{ir-CKMvRrGW.js → ir-9J84MTls.js} +4 -4
- package/dist/plugin-sdk/{local-roots-c_gaPs01.js → local-roots-OLRDbvyY.js} +3 -3
- package/dist/plugin-sdk/{login-DUym1Jy0.js → login-C7x4q0i2.js} +7 -7
- package/dist/plugin-sdk/{login-qr-B-WBdvrX.js → login-qr-Dv5_MoAW.js} +9 -9
- package/dist/plugin-sdk/{manager-B71SCzos.js → manager-C83tK17x.js} +8 -8
- package/dist/plugin-sdk/{manifest-registry-Dnic6Chh.js → manifest-registry-CJMV-PI7.js} +1 -1
- package/dist/plugin-sdk/{markdown-tables-Dur7OTlM.js → markdown-tables-DXNKz5y_.js} +1 -1
- package/dist/plugin-sdk/{message-channel-BrAhJJV_.js → message-channel-aGy1HbQQ.js} +1 -1
- package/dist/plugin-sdk/{model-selection-B9qaVQSJ.js → model-selection-C-3-tpe7.js} +4 -4
- package/dist/plugin-sdk/{outbound-DB1wDM8b.js → outbound-DquCeSy5.js} +6 -6
- package/dist/plugin-sdk/{pi-auth-json-ZO118hoy.js → pi-auth-json-D9PDCXGn.js} +1 -1
- package/dist/plugin-sdk/{pi-embedded-helpers-s_U0Un7j.js → pi-embedded-helpers-D3ygfH7l.js} +16 -16
- package/dist/plugin-sdk/{plugins-DF81oSaI.js → plugins-DOwnSg9D.js} +4 -4
- package/dist/plugin-sdk/{pw-ai-CTwP02uv.js → pw-ai-rlengLjb.js} +8 -8
- package/dist/plugin-sdk/{qmd-manager-CBaSGant.js → qmd-manager-BzxFjRFa.js} +4 -4
- package/dist/plugin-sdk/{registry-CZVURNhF.js → registry-5iFfixlB.js} +2 -2
- package/dist/plugin-sdk/{replies-hwRbkU3z.js → replies-BXOzO_H5.js} +7 -7
- package/dist/plugin-sdk/{reply-prefix-CaXmzZlx.js → reply-prefix-INAKTqCU.js} +1 -1
- package/dist/plugin-sdk/{resolve-outbound-target-fxVSOBmk.js → resolve-outbound-target-DvbxHtqp.js} +2 -2
- package/dist/plugin-sdk/{resolve-route-ClCyiOeu.js → resolve-route-URXlY3AK.js} +3 -3
- package/dist/plugin-sdk/{runner-Cq5jvwQ7.js → runner-Bv0_DWoH.js} +9 -9
- package/dist/plugin-sdk/{session-B_TkB65Y.js → session-C3r8l7ou.js} +4 -4
- package/dist/plugin-sdk/{skill-commands-0LF9HTGr.js → skill-commands-KjLUGIdZ.js} +5 -5
- package/dist/plugin-sdk/{skills-BIT_O7J0.js → skills-BrsD4L5c.js} +7 -7
- package/dist/plugin-sdk/{sqlite-Bx5Y5U5X.js → sqlite-CjW7ME1H.js} +1 -1
- package/dist/plugin-sdk/{subsystem-CXqYeDy-.js → subsystem-DcOg1xJr.js} +1 -1
- package/dist/plugin-sdk/{synthesis-DtsYAj1E.js → synthesis-CY7YAasV.js} +38 -38
- package/dist/plugin-sdk/{target-errors-B8mokOeH.js → target-errors-BVWJGWFq.js} +2 -2
- package/dist/plugin-sdk/{thinking-Ca0DhqzO.js → thinking-CtsTDPOi.js} +3 -3
- package/dist/plugin-sdk/{tokens-CvlONEqh.js → tokens-8lqOTZCB.js} +1 -1
- package/dist/plugin-sdk/{tool-images-DpBaWEHT.js → tool-images-Cl_rGIUZ.js} +2 -2
- package/dist/plugin-sdk/{tool-loop-detection-BOvUFa0f.js → tool-loop-detection-Da4WUT_P.js} +2 -2
- package/dist/plugin-sdk/{unified-runner-CnM7lyNd.js → unified-runner-nwMnsZyj.js} +60 -60
- package/dist/plugin-sdk/web-BlweOZDp.js +54 -0
- package/dist/plugin-sdk/{whatsapp-actions-CvnfsFJm.js → whatsapp-actions-DpfaGYs7.js} +21 -21
- package/dist/{pw-ai-BW8_KeDf.js → pw-ai-BqxJG-Wh.js} +1 -1
- package/dist/{pw-ai-j9IE1K0-.js → pw-ai-C-NSGye0.js} +1 -1
- package/dist/{runner-8ALr2UII.js → runner-COGFTeDw.js} +1 -1
- package/dist/{runner-C4-9kFdR.js → runner-DhCi2lT1.js} +1 -1
- package/dist/{synthesis-Cph3LhA1.js → synthesis-CXZu24Vx.js} +7 -7
- package/dist/{synthesis-Cus0A2dL.js → synthesis-DrPxcMlQ.js} +7 -7
- package/dist/{unified-runner-CX80YMTk.js → unified-runner-iByUazvW.js} +16 -16
- package/dist/{web-ChozvJ7I.js → web-EsMQBIYf.js} +7 -7
- package/dist/{web-DFlsbXmQ.js → web-PPg5y6xI.js} +7 -7
- package/docs/.i18n/zh-CN.tm.jsonl +0 -20
- package/docs/automation/cron-jobs.md +0 -2
- package/docs/automation/hooks.md +0 -2
- package/docs/automation/poll.md +0 -8
- package/docs/automation/webhook.md +0 -2
- package/docs/capabilities.md +0 -2
- package/docs/channels/broadcast-groups.md +0 -1
- package/docs/channels/channel-routing.md +4 -10
- package/docs/channels/group-messages.md +0 -2
- package/docs/channels/groups.md +0 -10
- package/docs/channels/index.md +0 -1
- package/docs/channels/matrix.md +0 -2
- package/docs/channels/msteams.md +0 -2
- package/docs/channels/pairing.md +0 -3
- package/docs/channels/signal.md +0 -2
- package/docs/channels/troubleshooting.md +0 -7
- package/docs/cli/channels.md +0 -6
- package/docs/cli/configure.md +0 -1
- package/docs/cli/directory.md +0 -1
- package/docs/cli/index.md +0 -7
- package/docs/cli/message.md +1 -47
- package/docs/cli/status.md +0 -1
- package/docs/concepts/architecture.md +0 -1
- package/docs/concepts/features.md +0 -2
- package/docs/concepts/markdown-formatting.md +6 -8
- package/docs/concepts/memory.md +0 -4
- package/docs/concepts/messages.md +0 -1
- package/docs/concepts/models.md +0 -1
- package/docs/concepts/multi-agent.md +4 -19
- package/docs/concepts/queue.md +0 -3
- package/docs/concepts/retry.md +0 -5
- package/docs/concepts/session-tool.md +0 -2
- package/docs/concepts/session.md +2 -9
- package/docs/concepts/streaming.md +0 -2
- package/docs/concepts/system-prompt.md +0 -1
- package/docs/concepts/timezone.md +0 -1
- package/docs/date-time.md +0 -1
- package/docs/docs.json +2 -11
- package/docs/experiments/plans/cron-add-hardening.md +0 -1
- package/docs/experiments/plans/session-binding-channel-agnostic.md +2 -23
- package/docs/experiments/plans/thread-bound-subagents.md +7 -64
- package/docs/gateway/configuration-examples.md +0 -10
- package/docs/gateway/configuration-reference.md +22 -47
- package/docs/gateway/configuration.md +0 -3
- package/docs/gateway/heartbeat.md +0 -2
- package/docs/gateway/security/index.md +1 -6
- package/docs/gateway/troubleshooting.md +0 -1
- package/docs/help/faq.md +0 -13
- package/docs/help/troubleshooting.md +0 -1
- package/docs/index.md +0 -6
- package/docs/install/ansible.md +2 -3
- package/docs/install/docker.md +1 -7
- package/docs/install/fly.md +0 -14
- package/docs/install/northflank.mdx +7 -11
- package/docs/install/railway.mdx +6 -10
- package/docs/install/render.mdx +1 -2
- package/docs/ja-JP/index.md +0 -3
- package/docs/pi.md +3 -5
- package/docs/platforms/digitalocean.md +0 -1
- package/docs/platforms/mac/voicewake.md +0 -1
- package/docs/providers/index.md +0 -2
- package/docs/refactor/outbound-session-mirroring.md +0 -2
- package/docs/reference/AGENTS.default.md +0 -1
- package/docs/reference/RELEASING.md +0 -1
- package/docs/reference/session-management-compaction.md +0 -1
- package/docs/reference/templates/AGENTS.md +0 -7
- package/docs/reference/wizard.md +0 -4
- package/docs/security/CONTRIBUTING-THREAT-MODEL.md +0 -1
- package/docs/security/README.md +0 -1
- package/docs/security/THREAT-MODEL-ATLAS.md +7 -10
- package/docs/start/docs-directory.md +0 -1
- package/docs/start/hubs.md +0 -1
- package/docs/start/lore.md +0 -3
- package/docs/start/setup.md +0 -2
- package/docs/start/showcase.md +0 -2
- package/docs/start/symi.md +0 -4
- package/docs/start/wizard-cli-reference.md +0 -4
- package/docs/start/wizard.md +3 -4
- package/docs/tools/agent-send.md +0 -1
- package/docs/tools/elevated.md +0 -2
- package/docs/tools/exec-approvals.md +0 -1
- package/docs/tools/index.md +0 -7
- package/docs/tools/multi-agent-sandbox-tools.md +1 -2
- package/docs/tools/reactions.md +0 -1
- package/docs/tools/slash-commands.md +0 -14
- package/docs/tools/symihub.md +0 -1
- package/docs/tts.md +0 -1
- package/docs/web/control-ui.md +0 -1
- package/docs/zh-CN/automation/cron-jobs.md +0 -2
- package/docs/zh-CN/automation/poll.md +0 -8
- package/docs/zh-CN/automation/webhook.md +0 -2
- package/docs/zh-CN/channels/broadcast-groups.md +0 -1
- package/docs/zh-CN/channels/channel-routing.md +4 -9
- package/docs/zh-CN/channels/group-messages.md +0 -2
- package/docs/zh-CN/channels/groups.md +0 -10
- package/docs/zh-CN/channels/imessage.md +0 -2
- package/docs/zh-CN/channels/index.md +0 -1
- package/docs/zh-CN/channels/msteams.md +0 -2
- package/docs/zh-CN/channels/pairing.md +0 -3
- package/docs/zh-CN/channels/signal.md +0 -2
- package/docs/zh-CN/channels/slack.md +0 -2
- package/docs/zh-CN/channels/telegram.md +0 -3
- package/docs/zh-CN/channels/troubleshooting.md +0 -2
- package/docs/zh-CN/cli/channels.md +0 -6
- package/docs/zh-CN/cli/configure.md +0 -1
- package/docs/zh-CN/cli/directory.md +0 -1
- package/docs/zh-CN/cli/index.md +0 -7
- package/docs/zh-CN/cli/message.md +1 -42
- package/docs/zh-CN/cli/status.md +0 -1
- package/docs/zh-CN/concepts/architecture.md +0 -1
- package/docs/zh-CN/concepts/features.md +0 -2
- package/docs/zh-CN/concepts/markdown-formatting.md +6 -8
- package/docs/zh-CN/concepts/messages.md +0 -1
- package/docs/zh-CN/concepts/multi-agent.md +4 -5
- package/docs/zh-CN/concepts/queue.md +0 -3
- package/docs/zh-CN/concepts/retry.md +0 -5
- package/docs/zh-CN/concepts/session-tool.md +0 -2
- package/docs/zh-CN/concepts/session.md +3 -11
- package/docs/zh-CN/concepts/streaming.md +0 -2
- package/docs/zh-CN/concepts/system-prompt.md +0 -2
- package/docs/zh-CN/concepts/timezone.md +0 -2
- package/docs/zh-CN/date-time.md +0 -1
- package/docs/zh-CN/experiments/plans/cron-add-hardening.md +0 -1
- package/docs/zh-CN/gateway/configuration-examples.md +0 -7
- package/docs/zh-CN/gateway/configuration.md +2 -50
- package/docs/zh-CN/gateway/heartbeat.md +0 -2
- package/docs/zh-CN/gateway/security/index.md +1 -6
- package/docs/zh-CN/gateway/troubleshooting.md +1 -14
- package/docs/zh-CN/help/faq.md +0 -15
- package/docs/zh-CN/index.md +0 -3
- package/docs/zh-CN/install/ansible.md +2 -3
- package/docs/zh-CN/install/docker.md +1 -7
- package/docs/zh-CN/install/fly.md +0 -14
- package/docs/zh-CN/install/northflank.mdx +7 -11
- package/docs/zh-CN/install/railway.mdx +6 -10
- package/docs/zh-CN/install/render.mdx +1 -2
- package/docs/zh-CN/pi.md +3 -5
- package/docs/zh-CN/platforms/digitalocean.md +0 -1
- package/docs/zh-CN/platforms/mac/voicewake.md +0 -1
- package/docs/zh-CN/providers/index.md +0 -2
- package/docs/zh-CN/refactor/outbound-session-mirroring.md +0 -2
- package/docs/zh-CN/reference/AGENTS.default.md +0 -1
- package/docs/zh-CN/reference/RELEASING.md +0 -1
- package/docs/zh-CN/reference/session-management-compaction.md +0 -1
- package/docs/zh-CN/reference/templates/AGENTS.md +0 -5
- package/docs/zh-CN/start/docs-directory.md +0 -1
- package/docs/zh-CN/start/getting-started.md +0 -5
- package/docs/zh-CN/start/hubs.md +0 -1
- package/docs/zh-CN/start/lore.md +0 -3
- package/docs/zh-CN/start/setup.md +0 -2
- package/docs/zh-CN/start/showcase.md +0 -2
- package/docs/zh-CN/start/symi.md +0 -4
- package/docs/zh-CN/start/wizard.md +0 -5
- package/docs/zh-CN/tools/agent-send.md +0 -1
- package/docs/zh-CN/tools/elevated.md +0 -2
- package/docs/zh-CN/tools/exec-approvals.md +0 -1
- package/docs/zh-CN/tools/index.md +0 -7
- package/docs/zh-CN/tools/multi-agent-sandbox-tools.md +1 -2
- package/docs/zh-CN/tools/reactions.md +0 -1
- package/docs/zh-CN/tools/slash-commands.md +0 -9
- package/docs/zh-CN/tts.md +0 -2
- package/docs/zh-CN/web/control-ui.md +0 -1
- package/package.json +1 -1
- package/dist/plugin-sdk/web-CIPJBHAU.js +0 -54
- package/docs/channels/discord.md +0 -998
- package/docs/zh-CN/channels/discord.md +0 -468
- package/skills/1password/SKILL.md +0 -71
- package/skills/1password/references/cli-examples.md +0 -29
- package/skills/1password/references/get-started.md +0 -17
- package/skills/apple-notes/SKILL.md +0 -78
- package/skills/apple-reminders/SKILL.md +0 -119
- package/skills/bear-notes/SKILL.md +0 -108
- package/skills/blogwatcher/SKILL.md +0 -70
- package/skills/blucli/SKILL.md +0 -48
- package/skills/bluebubbles/SKILL.md +0 -132
- package/skills/camsnap/SKILL.md +0 -46
- package/skills/canvas/SKILL.md +0 -204
- package/skills/connect-email/SKILL.md +0 -142
- package/skills/document-generation/SKILL.md +0 -83
- package/skills/eightctl/SKILL.md +0 -51
- package/skills/food-order/SKILL.md +0 -49
- package/skills/gemini/SKILL.md +0 -44
- package/skills/gh-issues/SKILL.md +0 -865
- package/skills/gifgrep/SKILL.md +0 -80
- package/skills/github/SKILL.md +0 -164
- package/skills/gog/SKILL.md +0 -117
- package/skills/goplaces/SKILL.md +0 -53
- package/skills/healthcheck/SKILL.md +0 -246
- package/skills/himalaya/SKILL.md +0 -258
- package/skills/himalaya/references/configuration.md +0 -184
- package/skills/himalaya/references/message-composition.md +0 -199
- package/skills/imsg/SKILL.md +0 -122
- package/skills/long-task/SKILL.md +0 -58
- package/skills/long-task/scripts/detach-task.sh +0 -187
- package/skills/nano-banana-pro/SKILL.md +0 -59
- package/skills/nano-banana-pro/scripts/generate_image.py +0 -184
- package/skills/nano-pdf/SKILL.md +0 -39
- package/skills/notion/SKILL.md +0 -173
- package/skills/obsidian/SKILL.md +0 -82
- package/skills/openai-image-gen/SKILL.md +0 -90
- package/skills/openai-image-gen/scripts/gen.py +0 -240
- package/skills/openai-whisper/SKILL.md +0 -39
- package/skills/openai-whisper-api/SKILL.md +0 -53
- package/skills/openai-whisper-api/scripts/transcribe.sh +0 -85
- package/skills/openhue/SKILL.md +0 -113
- package/skills/oracle/SKILL.md +0 -126
- package/skills/ordercli/SKILL.md +0 -79
- package/skills/peekaboo/SKILL.md +0 -191
- package/skills/reactions-extensive/SKILL.md +0 -30
- package/skills/reactions-minimal/SKILL.md +0 -31
- package/skills/safe-edit/SKILL.md +0 -51
- package/skills/sag/SKILL.md +0 -88
- package/skills/sherpa-onnx-tts/SKILL.md +0 -104
- package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +0 -178
- package/skills/songsee/SKILL.md +0 -50
- package/skills/sonoscli/SKILL.md +0 -66
- package/skills/spotify-player/SKILL.md +0 -65
- package/skills/symihub/SKILL.md +0 -78
- package/skills/things-mac/SKILL.md +0 -87
- package/skills/tmux/SKILL.md +0 -153
- package/skills/tmux/scripts/find-sessions.sh +0 -112
- package/skills/tmux/scripts/wait-for-text.sh +0 -83
- package/skills/trello/SKILL.md +0 -96
- package/skills/video-frames/SKILL.md +0 -47
- package/skills/video-frames/scripts/frame.sh +0 -81
- package/skills/voice-call/SKILL.md +0 -46
- package/skills/wacli/SKILL.md +0 -73
- package/skills/weather/SKILL.md +0 -113
- package/skills/xurl/SKILL.md +0 -462
|
@@ -36,7 +36,6 @@ Outbound sends were mirrored into the _current_ agent session (tool session key)
|
|
|
36
36
|
## Thread/Topic Handling
|
|
37
37
|
|
|
38
38
|
- Slack: replyTo/threadId -> `resolveThreadSessionKeys` (suffix).
|
|
39
|
-
- Discord: threadId/replyTo -> `resolveThreadSessionKeys` with `useSuffix=false` to match inbound (thread channel id already scopes session).
|
|
40
39
|
- Telegram: topic IDs map to `chatId:topic:<id>` via `buildTelegramGroupPeerId`.
|
|
41
40
|
|
|
42
41
|
## Extensions Covered
|
|
@@ -61,7 +60,6 @@ Outbound sends were mirrored into the _current_ agent session (tool session key)
|
|
|
61
60
|
- `src/infra/outbound/outbound-session.test.ts`
|
|
62
61
|
- Slack thread session key.
|
|
63
62
|
- Telegram topic session key.
|
|
64
|
-
- dmScope identityLinks with Discord.
|
|
65
63
|
- `src/agents/tools/message-tool.test.ts`
|
|
66
64
|
- Derives agentId from session key (no sessionKey passed through).
|
|
67
65
|
- `src/gateway/server-methods/send.test.ts`
|
|
@@ -102,7 +102,6 @@ git commit -m "Add Symi workspace"
|
|
|
102
102
|
- **eightctl** — Control your sleep, from the terminal.
|
|
103
103
|
- **imsg** — Send, read, stream iMessage & SMS.
|
|
104
104
|
- **wacli** — WhatsApp CLI: sync, search, send.
|
|
105
|
-
- **discord** — Discord actions: react, stickers, polls. Use `user:<id>` or `channel:<id>` targets (bare numeric ids are ambiguous).
|
|
106
105
|
- **gog** — Google Suite CLI: Gmail, Calendar, Drive, Contacts.
|
|
107
106
|
- **spotify-player** — Terminal Spotify client to search/queue/control playback.
|
|
108
107
|
- **sag** — ElevenLabs speech with mac-style say UX; streams to speakers by default.
|
|
@@ -73,7 +73,6 @@ Common patterns:
|
|
|
73
73
|
|
|
74
74
|
- Main/direct chat (per agent): `agent:<agentId>:<mainKey>` (default `main`)
|
|
75
75
|
- Group: `agent:<agentId>:<channel>:group:<id>`
|
|
76
|
-
- Room/channel (Discord/Slack): `agent:<agentId>:<channel>:channel:<id>` or `...:room:<id>`
|
|
77
76
|
- Cron: `cron:<job.id>`
|
|
78
77
|
- Webhook: `hook:<uuid>` (unless overridden)
|
|
79
78
|
|
|
@@ -37,7 +37,6 @@ Capture what matters. Decisions, context, things to remember. Skip the secrets u
|
|
|
37
37
|
### 🧠 MEMORY.md — The Human's Notes
|
|
38
38
|
|
|
39
39
|
- **ONLY load in main session** (direct chats with your human)
|
|
40
|
-
- **DO NOT load in shared contexts** (Discord, group chats, sessions with other people)
|
|
41
40
|
- This is for **security** — contains personal context that shouldn't leak to strangers
|
|
42
41
|
- **Read-only for you.** The human authors this file. If you think it's wrong or out of date, tell them; don't edit.
|
|
43
42
|
|
|
@@ -61,8 +60,6 @@ Capture what matters. Decisions, context, things to remember. Skip the secrets u
|
|
|
61
60
|
|
|
62
61
|
### 🔌 Runtime Connection State — Don't Trust Memory Files
|
|
63
62
|
|
|
64
|
-
Memory files (MEMORY.md, memory/YYYY-MM-DD.md, memory/symi-core.md, memory/symi-beliefs.md) record **historical** observations. Connection state for channels (Outlook, Gmail, Slack, Telegram, Discord, Signal, WhatsApp, Matrix, etc.) is **runtime state** — it can change between one turn and the next without any observation being written.
|
|
65
|
-
|
|
66
63
|
When answering "am I connected to X?" questions:
|
|
67
64
|
|
|
68
65
|
- **Trust the bracketed `[Channel]` block** at the top of the system prompt. It's rebuilt every turn from the live plugin state. Examples: `[Outlook 365] Connected as …`, `[Outlook 365] Last seen connected as … but … expired`, `[Outlook 365] Not connected`.
|
|
@@ -170,8 +167,6 @@ Participate, don't dominate.
|
|
|
170
167
|
|
|
171
168
|
### 😊 React Like a Human!
|
|
172
169
|
|
|
173
|
-
On platforms that support reactions (Discord, Slack), use emoji reactions naturally:
|
|
174
|
-
|
|
175
170
|
**React when:**
|
|
176
171
|
|
|
177
172
|
- You appreciate something but don't need to reply (👍, ❤️, 🙌)
|
|
@@ -193,8 +188,6 @@ Skills provide your tools. When you need one, check its `SKILL.md`. Keep local n
|
|
|
193
188
|
|
|
194
189
|
**📝 Platform Formatting:**
|
|
195
190
|
|
|
196
|
-
- **Discord/WhatsApp:** No markdown tables! Use bullet lists instead
|
|
197
|
-
- **Discord links:** Wrap multiple links in `<>` to suppress embeds: `<https://example.com>`
|
|
198
191
|
- **WhatsApp:** No headers — use **bold** or CAPS for emphasis
|
|
199
192
|
|
|
200
193
|
## 💓 Heartbeats - Be Proactive!
|
package/docs/reference/wizard.md
CHANGED
|
@@ -74,7 +74,6 @@ For a high-level overview, see [Onboarding Wizard](/start/wizard).
|
|
|
74
74
|
<Step title="Channels">
|
|
75
75
|
- [WhatsApp](/channels/whatsapp): optional QR login.
|
|
76
76
|
- [Telegram](/channels/telegram): bot token.
|
|
77
|
-
- [Discord](/channels/discord): bot token.
|
|
78
77
|
- [Google Chat](/channels/googlechat): service account JSON + webhook audience.
|
|
79
78
|
- [Mattermost](/channels/mattermost) (plugin): bot token + base URL.
|
|
80
79
|
- [Signal](/channels/signal): optional `signal-cli` install + account config.
|
|
@@ -243,8 +242,6 @@ Typical fields in `~/.symi/symi.json`:
|
|
|
243
242
|
- `agents.defaults.workspace`
|
|
244
243
|
- `agents.defaults.model` / `models.providers` (if Minimax chosen)
|
|
245
244
|
- `gateway.*` (mode, bind, auth, tailscale)
|
|
246
|
-
- `channels.telegram.botToken`, `channels.discord.token`, `channels.signal.*`, `channels.imessage.*`
|
|
247
|
-
- Channel allowlists (Slack/Discord/Matrix/Microsoft Teams) when you opt in during the prompts (names resolve to IDs when possible).
|
|
248
245
|
- `skills.install.nodeManager`
|
|
249
246
|
- `wizard.lastRunAt`
|
|
250
247
|
- `wizard.lastRunVersion`
|
|
@@ -265,5 +262,4 @@ will prompt to install it (npm or a local path) before it can be configured.
|
|
|
265
262
|
- Wizard overview: [Onboarding Wizard](/start/wizard)
|
|
266
263
|
- macOS app onboarding: [Onboarding](/start/onboarding)
|
|
267
264
|
- Config reference: [Gateway configuration](/gateway/configuration)
|
|
268
|
-
- Providers: [WhatsApp](/channels/whatsapp), [Telegram](/channels/telegram), [Discord](/channels/discord), [Google Chat](/channels/googlechat), [Signal](/channels/signal), [BlueBubbles](/channels/bluebubbles) (iMessage), [iMessage](/channels/imessage) (legacy)
|
|
269
265
|
- Skills: [Skills](/tools/skills), [Skills config](/tools/skills-config)
|
|
@@ -83,7 +83,6 @@ If you're unsure about the risk level, just describe the impact and we'll assess
|
|
|
83
83
|
|
|
84
84
|
- **Security vulnerabilities:** See our [Trust page](https://trust.symi.ai) for reporting instructions
|
|
85
85
|
- **Threat model questions:** Open an issue on [symi/trust](https://github.com/symi/trust/issues)
|
|
86
|
-
- **General chat:** Discord #security channel
|
|
87
86
|
|
|
88
87
|
## Recognition
|
|
89
88
|
|
package/docs/security/README.md
CHANGED
|
@@ -38,14 +38,13 @@ This threat model documents adversarial threats to the Symi AI agent platform an
|
|
|
38
38
|
|
|
39
39
|
### 1.2 Scope
|
|
40
40
|
|
|
41
|
-
| Component
|
|
42
|
-
|
|
|
43
|
-
| Symi Agent Runtime
|
|
44
|
-
| Gateway
|
|
45
|
-
|
|
|
46
|
-
|
|
|
47
|
-
|
|
|
48
|
-
| User Devices | Partial | Mobile apps, desktop clients |
|
|
41
|
+
| Component | Included | Notes |
|
|
42
|
+
| ------------------- | -------- | -------------------------------------------- |
|
|
43
|
+
| Symi Agent Runtime | Yes | Core agent execution, tool calls, sessions |
|
|
44
|
+
| Gateway | Yes | Authentication, routing, channel integration |
|
|
45
|
+
| SymiHub Marketplace | Yes | Skill publishing, moderation, distribution |
|
|
46
|
+
| MCP Servers | Yes | External tool providers |
|
|
47
|
+
| User Devices | Partial | Mobile apps, desktop clients |
|
|
49
48
|
|
|
50
49
|
### 1.3 Out of Scope
|
|
51
50
|
|
|
@@ -61,7 +60,6 @@ Nothing is explicitly out of scope for this threat model.
|
|
|
61
60
|
┌─────────────────────────────────────────────────────────────────┐
|
|
62
61
|
│ UNTRUSTED ZONE │
|
|
63
62
|
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
|
64
|
-
│ │ WhatsApp │ │ Telegram │ │ Discord │ ... │
|
|
65
63
|
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
|
|
66
64
|
│ │ │ │ │
|
|
67
65
|
└─────────┼────────────────┼────────────────┼──────────────────────┘
|
|
@@ -459,7 +457,6 @@ Current patterns in `moderation.ts`:
|
|
|
459
457
|
/(malware|stealer|phish|phishing|keylogger)/i
|
|
460
458
|
/(api[-_ ]?key|token|password|private key|secret)/i
|
|
461
459
|
/(wallet|seed phrase|mnemonic|crypto)/i
|
|
462
|
-
/(discord\.gg|webhook|hooks\.slack)/i
|
|
463
460
|
/(curl[^\n]+\|\s*(sh|bash))/i
|
|
464
461
|
/(bit\.ly|tinyurl\.com|t\.co|goo\.gl|is\.gd)/i
|
|
465
462
|
```
|
|
@@ -37,7 +37,6 @@ For a complete map of the docs, see [Docs hubs](/start/hubs).
|
|
|
37
37
|
- [WebChat](/web/webchat)
|
|
38
38
|
- [Control UI (browser)](/web/control-ui)
|
|
39
39
|
- [Telegram](/channels/telegram)
|
|
40
|
-
- [Discord](/channels/discord)
|
|
41
40
|
- [Mattermost (plugin)](/channels/mattermost)
|
|
42
41
|
- [BlueBubbles (iMessage)](/channels/bluebubbles)
|
|
43
42
|
- [iMessage (legacy)](/channels/imessage)
|
package/docs/start/hubs.md
CHANGED
|
@@ -75,7 +75,6 @@ Use these hubs to discover every page, including deep dives and reference docs t
|
|
|
75
75
|
- [Telegram](/channels/telegram)
|
|
76
76
|
- [Telegram (grammY notes)](/channels/grammy)
|
|
77
77
|
- [Slack](/channels/slack)
|
|
78
|
-
- [Discord](/channels/discord)
|
|
79
78
|
- [Mattermost](/channels/mattermost) (plugin)
|
|
80
79
|
- [Signal](/channels/signal)
|
|
81
80
|
- [BlueBubbles (iMessage)](/channels/bluebubbles)
|
package/docs/start/lore.md
CHANGED
|
@@ -27,8 +27,6 @@ New shell, same pipeline soul. Third time's the charm.
|
|
|
27
27
|
|
|
28
28
|
## The First Molt (January 27, 2026)
|
|
29
29
|
|
|
30
|
-
At 5am, the community gathered in Discord. Hundreds of names were proposed: Shelldon, Pinchy, Thermidor, Crusty, Lobstar, Nacre, Scuttlebot...
|
|
31
|
-
|
|
32
30
|
In the end, **Symi** won. Because molting is what pipelines do to grow. And growth was exactly what was happening.
|
|
33
31
|
|
|
34
32
|
_The crustacean known as Symi had officially molted._
|
|
@@ -127,7 +125,6 @@ In just 3 hours:
|
|
|
127
125
|
- **ELU** created incredible logos including "THE SHELL IS THE LAW" western banner
|
|
128
126
|
- **Whurley** (yes, THE William Hurley, quantum computing pioneer) made ASCII art
|
|
129
127
|
- **Onur** handled GitHub, first to rock the affiliate badge
|
|
130
|
-
- **Shadow** secured Discord vanity, nuked malware
|
|
131
128
|
- **The whole Shell Crew** pulled an all-nighter
|
|
132
129
|
|
|
133
130
|
**The Scammer Speedrun:** Crypto grifters launched a $SYMI token on Pump.fun within MINUTES. They stole artwork that was created 20 minutes earlier. Business-verified accounts pushed scams. The audacity was almost impressive.
|
package/docs/start/setup.md
CHANGED
|
@@ -128,7 +128,6 @@ Use this when debugging auth or deciding what to back up:
|
|
|
128
128
|
|
|
129
129
|
- **WhatsApp**: `~/.symi/credentials/whatsapp/<accountId>/creds.json`
|
|
130
130
|
- **Telegram bot token**: config/env or `channels.telegram.tokenFile`
|
|
131
|
-
- **Discord bot token**: config/env (token file not yet supported)
|
|
132
131
|
- **Slack tokens**: config/env (`channels.slack.*`)
|
|
133
132
|
- **Pairing allowlists**: `~/.symi/credentials/<channel>-allowFrom.json`
|
|
134
133
|
- **Model auth profiles**: `~/.symi/agents/<agentId>/agent/auth-profiles.json`
|
|
@@ -157,6 +156,5 @@ user service (no lingering needed). See [Gateway runbook](/gateway) for the syst
|
|
|
157
156
|
|
|
158
157
|
- [Gateway runbook](/gateway) (flags, supervision, ports)
|
|
159
158
|
- [Gateway configuration](/gateway/configuration) (config schema + examples)
|
|
160
|
-
- [Discord](/channels/discord) and [Telegram](/channels/telegram) (reply tags + replyToMode settings)
|
|
161
159
|
- [Symi assistant setup](/start/symi)
|
|
162
160
|
- [macOS app](/platforms/macos) (gateway lifecycle)
|
package/docs/start/showcase.md
CHANGED
|
@@ -82,8 +82,6 @@ Full setup walkthrough (28m) by VelvetShark.
|
|
|
82
82
|
|
|
83
83
|
[Watch on YouTube](https://www.youtube.com/watch?v=5kkIJNUGFho)
|
|
84
84
|
|
|
85
|
-
## 🆕 Fresh from Discord
|
|
86
|
-
|
|
87
85
|
<CardGroup cols={2}>
|
|
88
86
|
|
|
89
87
|
<Card title="PR Review → Telegram Feedback" icon="code-pull-request" href="https://x.com/i/status/2010878524543131691">
|
package/docs/start/symi.md
CHANGED
|
@@ -8,15 +8,12 @@ title: "Personal Assistant Setup"
|
|
|
8
8
|
|
|
9
9
|
# Building a personal assistant with Symi
|
|
10
10
|
|
|
11
|
-
Symi is a WhatsApp + Telegram + Discord + iMessage gateway for **Pi** agents. Plugins add Mattermost. This guide is the "personal assistant" setup: one dedicated WhatsApp number that behaves like your always-on agent.
|
|
12
|
-
|
|
13
11
|
## ⚠️ Safety first
|
|
14
12
|
|
|
15
13
|
You’re putting an agent in a position to:
|
|
16
14
|
|
|
17
15
|
- run commands on your machine (depending on your Pi tool setup)
|
|
18
16
|
- read/write files in your workspace
|
|
19
|
-
- send messages back out via WhatsApp/Telegram/Discord/Mattermost (plugin)
|
|
20
17
|
|
|
21
18
|
Start conservative:
|
|
22
19
|
|
|
@@ -196,7 +193,6 @@ Symi extracts these and sends them as media alongside the text.
|
|
|
196
193
|
```bash
|
|
197
194
|
symi status # local status (creds, sessions, queued events)
|
|
198
195
|
symi status --all # full diagnosis (read-only, pasteable)
|
|
199
|
-
symi status --deep # adds gateway health probes (Telegram + Discord)
|
|
200
196
|
symi health --json # gateway health snapshot (WS)
|
|
201
197
|
```
|
|
202
198
|
|
|
@@ -19,7 +19,6 @@ Local mode (default) walks you through:
|
|
|
19
19
|
- Model and auth setup (OpenAI Code subscription OAuth, Anthropic API key or setup token, plus MiniMax, GLM, Moonshot, and AI Gateway options)
|
|
20
20
|
- Workspace location and bootstrap files
|
|
21
21
|
- Gateway settings (port, bind, auth, tailscale)
|
|
22
|
-
- Channels and providers (Telegram, WhatsApp, Discord, Google Chat, Mattermost plugin, Signal)
|
|
23
22
|
- Daemon install (LaunchAgent or systemd user unit)
|
|
24
23
|
- Health check
|
|
25
24
|
- Skills setup
|
|
@@ -56,7 +55,6 @@ It does not install or modify anything on the remote host.
|
|
|
56
55
|
<Step title="Channels">
|
|
57
56
|
- [WhatsApp](/channels/whatsapp): optional QR login
|
|
58
57
|
- [Telegram](/channels/telegram): bot token
|
|
59
|
-
- [Discord](/channels/discord): bot token
|
|
60
58
|
- [Google Chat](/channels/googlechat): service account JSON + webhook audience
|
|
61
59
|
- [Mattermost](/channels/mattermost) plugin: bot token + base URL
|
|
62
60
|
- [Signal](/channels/signal): optional `signal-cli` install + account config
|
|
@@ -215,8 +213,6 @@ Typical fields in `~/.symi/symi.json`:
|
|
|
215
213
|
- `agents.defaults.workspace`
|
|
216
214
|
- `agents.defaults.model` / `models.providers` (if Minimax chosen)
|
|
217
215
|
- `gateway.*` (mode, bind, auth, tailscale)
|
|
218
|
-
- `channels.telegram.botToken`, `channels.discord.token`, `channels.signal.*`, `channels.imessage.*`
|
|
219
|
-
- Channel allowlists (Slack, Discord, Matrix, Microsoft Teams) when you opt in during prompts (names resolve to IDs when possible)
|
|
220
216
|
- `skills.install.nodeManager`
|
|
221
217
|
- `wizard.lastRunAt`
|
|
222
218
|
- `wizard.lastRunVersion`
|
package/docs/start/wizard.md
CHANGED
|
@@ -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. **
|
|
70
|
-
5. **
|
|
71
|
-
6. **
|
|
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`).
|
package/docs/tools/agent-send.md
CHANGED
|
@@ -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
|
package/docs/tools/elevated.md
CHANGED
|
@@ -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" },
|
package/docs/tools/index.md
CHANGED
|
@@ -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
|
]
|
package/docs/tools/reactions.md
CHANGED
|
@@ -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.
|
package/docs/tools/symihub.md
CHANGED
|
@@ -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
|
```
|
package/docs/web/control-ui.md
CHANGED
|
@@ -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` 可选(数字):智能体运行的最大持续时间(秒)。
|
|
@@ -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. **
|
|
53
|
-
3.
|
|
54
|
-
4.
|
|
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` 时,它同时充当群组允许列表(包含 `"*"` 以允许所有群组)。
|