@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
|
@@ -35,7 +35,6 @@ All channels support DM policies and group policies:
|
|
|
35
35
|
<Note>
|
|
36
36
|
`channels.defaults.groupPolicy` sets the default when a provider's `groupPolicy` is unset.
|
|
37
37
|
Pairing codes expire after 1 hour. Pending DM pairing requests are capped at **3 per channel**.
|
|
38
|
-
Slack/Discord have a special fallback: if their provider section is missing entirely, runtime group policy can resolve to `open` (with a startup warning).
|
|
39
38
|
</Note>
|
|
40
39
|
|
|
41
40
|
### Channel model overrides
|
|
@@ -46,7 +45,6 @@ Use `channels.modelByChannel` to pin specific channel IDs to a model. Values acc
|
|
|
46
45
|
{
|
|
47
46
|
channels: {
|
|
48
47
|
modelByChannel: {
|
|
49
|
-
discord: {
|
|
50
48
|
"123456789012345678": "anthropic/claude-opus-4-6",
|
|
51
49
|
},
|
|
52
50
|
slack: {
|
|
@@ -176,12 +174,9 @@ WhatsApp runs through the gateway's web channel (Baileys Web). It starts automat
|
|
|
176
174
|
- Telegram stream previews use `sendMessage` + `editMessageText` (works in direct and group chats).
|
|
177
175
|
- Retry policy: see [Retry policy](/concepts/retry).
|
|
178
176
|
|
|
179
|
-
### Discord
|
|
180
|
-
|
|
181
177
|
```json5
|
|
182
178
|
{
|
|
183
179
|
channels: {
|
|
184
|
-
discord: {
|
|
185
180
|
enabled: true,
|
|
186
181
|
token: "your-bot-token",
|
|
187
182
|
mediaMaxMb: 8,
|
|
@@ -258,13 +253,10 @@ WhatsApp runs through the gateway's web channel (Baileys Web). It starts automat
|
|
|
258
253
|
}
|
|
259
254
|
```
|
|
260
255
|
|
|
261
|
-
- Token: `channels.discord.token`, with `DISCORD_BOT_TOKEN` as fallback for the default account.
|
|
262
256
|
- Use `user:<id>` (DM) or `channel:<id>` (guild channel) for delivery targets; bare numeric IDs are rejected.
|
|
263
257
|
- Guild slugs are lowercase with spaces replaced by `-`; channel keys use the slugged name (no `#`). Prefer guild IDs.
|
|
264
258
|
- Bot-authored messages are ignored by default. `allowBots: true` enables them (own messages still filtered).
|
|
265
259
|
- `maxLinesPerMessage` (default 17) splits tall messages even when under 2000 chars.
|
|
266
|
-
- `channels.discord.ui.components.accentColor` sets the accent color for Discord components v2 containers.
|
|
267
|
-
- `channels.discord.voice` enables Discord voice channel conversations and optional auto-join + TTS overrides.
|
|
268
260
|
|
|
269
261
|
**Reaction notification modes:** `off` (none), `own` (bot's messages, default), `all` (all messages), `allowlist` (from `guilds.<id>.users` on all messages).
|
|
270
262
|
|
|
@@ -481,8 +473,6 @@ Run multiple accounts per channel (each with its own `accountId`):
|
|
|
481
473
|
|
|
482
474
|
### Group chat mention gating
|
|
483
475
|
|
|
484
|
-
Group messages default to **require mention** (metadata mention or regex patterns). Applies to WhatsApp, Telegram, Discord, Google Chat, and iMessage group chats.
|
|
485
|
-
|
|
486
476
|
**Mention types:**
|
|
487
477
|
|
|
488
478
|
- **Metadata mentions**: Native platform @-mentions. Ignored in WhatsApp self-chat mode.
|
|
@@ -519,8 +509,6 @@ Group messages default to **require mention** (metadata mention or regex pattern
|
|
|
519
509
|
|
|
520
510
|
Resolution: per-DM override → provider default → no limit (all retained).
|
|
521
511
|
|
|
522
|
-
Supported: `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage`, `msteams`.
|
|
523
|
-
|
|
524
512
|
#### Self-chat mode
|
|
525
513
|
|
|
526
514
|
Include your own number in `allowFrom` to enable self-chat mode (ignores native @-mentions, only responds to text patterns):
|
|
@@ -558,7 +546,6 @@ Include your own number in `allowFrom` to enable self-chat mode (ignores native
|
|
|
558
546
|
restart: false, // allow /restart + gateway restart tool
|
|
559
547
|
allowFrom: {
|
|
560
548
|
"*": ["user1"],
|
|
561
|
-
discord: ["user:123"],
|
|
562
549
|
},
|
|
563
550
|
useAccessGroups: true,
|
|
564
551
|
},
|
|
@@ -568,8 +555,6 @@ Include your own number in `allowFrom` to enable self-chat mode (ignores native
|
|
|
568
555
|
<Accordion title="Command details">
|
|
569
556
|
|
|
570
557
|
- Text commands must be **standalone** messages with leading `/`.
|
|
571
|
-
- `native: "auto"` turns on native commands for Discord/Telegram, leaves Slack off.
|
|
572
|
-
- Override per channel: `channels.discord.commands.native` (bool or `"auto"`). `false` clears previously registered commands.
|
|
573
558
|
- `channels.telegram.customCommands` adds extra Telegram bot menu entries.
|
|
574
559
|
- `bash: true` enables `! <cmd>` for host shell. Requires `tools.elevated.enabled` and sender in `tools.elevated.allowFrom.<channel>`.
|
|
575
560
|
- `config: true` enables `/config` (reads/writes `symi.json`).
|
|
@@ -766,7 +751,6 @@ Periodic heartbeat runs.
|
|
|
766
751
|
includeReasoning: false,
|
|
767
752
|
session: "main",
|
|
768
753
|
to: "+15555550123",
|
|
769
|
-
target: "last", // last | whatsapp | telegram | discord | ... | none
|
|
770
754
|
prompt: "Read SYMIPULSE.md if it exists...",
|
|
771
755
|
ackMaxChars: 300,
|
|
772
756
|
suppressToolErrorWarnings: false,
|
|
@@ -866,7 +850,6 @@ See [Session Pruning](/concepts/session-pruning) for behavior details.
|
|
|
866
850
|
```
|
|
867
851
|
|
|
868
852
|
- Non-Telegram channels require explicit `*.blockStreaming: true` to enable block replies.
|
|
869
|
-
- Channel overrides: `channels.<channel>.blockStreamingCoalesce` (and per-account variants). Signal/Slack/Discord/Google Chat default `minChars: 1500`.
|
|
870
853
|
- `humanDelay`: randomized pause between block replies. `natural` = 800–2500ms. Per-agent override: `agents.list[].humanDelay`.
|
|
871
854
|
|
|
872
855
|
See [Streaming](/concepts/streaming) for behavior + chunking details.
|
|
@@ -964,7 +947,6 @@ Optional **Docker sandboxing** for the embedded agent. See [Sandboxing](/gateway
|
|
|
964
947
|
"sessions_spawn",
|
|
965
948
|
"session_status",
|
|
966
949
|
],
|
|
967
|
-
deny: ["browser", "canvas", "nodes", "cron", "discord", "gateway"],
|
|
968
950
|
},
|
|
969
951
|
},
|
|
970
952
|
},
|
|
@@ -1159,7 +1141,6 @@ Within each tier, the first matching `bindings` entry wins.
|
|
|
1159
1141
|
"whatsapp",
|
|
1160
1142
|
"telegram",
|
|
1161
1143
|
"slack",
|
|
1162
|
-
"discord",
|
|
1163
1144
|
"gateway",
|
|
1164
1145
|
],
|
|
1165
1146
|
deny: [
|
|
@@ -1196,9 +1177,7 @@ See [Multi-Agent Sandbox & Tools](/tools/multi-agent-sandbox-tools) for preceden
|
|
|
1196
1177
|
session: {
|
|
1197
1178
|
scope: "per-sender",
|
|
1198
1179
|
dmScope: "main", // main | per-peer | per-channel-peer | per-account-channel-peer
|
|
1199
|
-
identityLinks: {
|
|
1200
|
-
alice: ["telegram:123456789", "discord:987654321012345678"],
|
|
1201
|
-
},
|
|
1180
|
+
identityLinks: {},
|
|
1202
1181
|
reset: {
|
|
1203
1182
|
mode: "daily", // daily | idle
|
|
1204
1183
|
atHour: 4,
|
|
@@ -1220,7 +1199,6 @@ See [Multi-Agent Sandbox & Tools](/tools/multi-agent-sandbox-tools) for preceden
|
|
|
1220
1199
|
mainKey: "main", // legacy (runtime always uses "main")
|
|
1221
1200
|
agentToAgent: { maxPingPongTurns: 5 },
|
|
1222
1201
|
sendPolicy: {
|
|
1223
|
-
rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }],
|
|
1224
1202
|
default: "allow",
|
|
1225
1203
|
},
|
|
1226
1204
|
},
|
|
@@ -1299,7 +1277,6 @@ Variables are case-insensitive. `{think}` is an alias for `{thinkingLevel}`.
|
|
|
1299
1277
|
- Per-channel overrides: `channels.<channel>.ackReaction`, `channels.<channel>.accounts.<id>.ackReaction`.
|
|
1300
1278
|
- Resolution order: account → channel → `messages.ackReaction` → identity fallback.
|
|
1301
1279
|
- Scope: `group-mentions` (default), `group-all`, `direct`, `all`.
|
|
1302
|
-
- `removeAckAfterReply`: removes ack after reply (Slack/Discord/Telegram/Google Chat only).
|
|
1303
1280
|
|
|
1304
1281
|
### Inbound debounce
|
|
1305
1282
|
|
|
@@ -1443,7 +1420,6 @@ Controls elevated (host) exec access:
|
|
|
1443
1420
|
enabled: true,
|
|
1444
1421
|
allowFrom: {
|
|
1445
1422
|
whatsapp: ["+15555550123"],
|
|
1446
|
-
discord: ["steipete", "1234567890123"],
|
|
1447
1423
|
},
|
|
1448
1424
|
},
|
|
1449
1425
|
},
|
|
@@ -2436,28 +2412,27 @@ See [Cron Jobs](/automation/cron-jobs).
|
|
|
2436
2412
|
|
|
2437
2413
|
Template placeholders expanded in `tools.media.*.models[].args`:
|
|
2438
2414
|
|
|
2439
|
-
| Variable | Description
|
|
2440
|
-
| ------------------ |
|
|
2441
|
-
| `{{Body}}` | Full inbound message body
|
|
2442
|
-
| `{{RawBody}}` | Raw body (no history/sender wrappers)
|
|
2443
|
-
| `{{BodyStripped}}` | Body with group mentions stripped
|
|
2444
|
-
| `{{From}}` | Sender identifier
|
|
2445
|
-
| `{{To}}` | Destination identifier
|
|
2446
|
-
| `{{MessageSid}}` | Channel message id
|
|
2447
|
-
| `{{SessionId}}` | Current session UUID
|
|
2448
|
-
| `{{IsNewSession}}` | `"true"` when new session created
|
|
2449
|
-
| `{{MediaUrl}}` | Inbound media pseudo-URL
|
|
2450
|
-
| `{{MediaPath}}` | Local media path
|
|
2451
|
-
| `{{MediaType}}` | Media type (image/audio/document/…)
|
|
2452
|
-
| `{{Transcript}}` | Audio transcript
|
|
2453
|
-
| `{{Prompt}}` | Resolved media prompt for CLI entries
|
|
2454
|
-
| `{{MaxChars}}` | Resolved max output chars for CLI entries
|
|
2455
|
-
| `{{ChatType}}` | `"direct"` or `"group"`
|
|
2456
|
-
| `{{GroupSubject}}` | Group subject (best effort)
|
|
2457
|
-
| `{{GroupMembers}}` | Group members preview (best effort)
|
|
2458
|
-
| `{{SenderName}}` | Sender display name (best effort)
|
|
2459
|
-
| `{{SenderE164}}` | Sender phone number (best effort)
|
|
2460
|
-
| `{{Provider}}` | Provider hint (whatsapp, telegram, discord, etc.) |
|
|
2415
|
+
| Variable | Description |
|
|
2416
|
+
| ------------------ | ----------------------------------------- |
|
|
2417
|
+
| `{{Body}}` | Full inbound message body |
|
|
2418
|
+
| `{{RawBody}}` | Raw body (no history/sender wrappers) |
|
|
2419
|
+
| `{{BodyStripped}}` | Body with group mentions stripped |
|
|
2420
|
+
| `{{From}}` | Sender identifier |
|
|
2421
|
+
| `{{To}}` | Destination identifier |
|
|
2422
|
+
| `{{MessageSid}}` | Channel message id |
|
|
2423
|
+
| `{{SessionId}}` | Current session UUID |
|
|
2424
|
+
| `{{IsNewSession}}` | `"true"` when new session created |
|
|
2425
|
+
| `{{MediaUrl}}` | Inbound media pseudo-URL |
|
|
2426
|
+
| `{{MediaPath}}` | Local media path |
|
|
2427
|
+
| `{{MediaType}}` | Media type (image/audio/document/…) |
|
|
2428
|
+
| `{{Transcript}}` | Audio transcript |
|
|
2429
|
+
| `{{Prompt}}` | Resolved media prompt for CLI entries |
|
|
2430
|
+
| `{{MaxChars}}` | Resolved max output chars for CLI entries |
|
|
2431
|
+
| `{{ChatType}}` | `"direct"` or `"group"` |
|
|
2432
|
+
| `{{GroupSubject}}` | Group subject (best effort) |
|
|
2433
|
+
| `{{GroupMembers}}` | Group members preview (best effort) |
|
|
2434
|
+
| `{{SenderName}}` | Sender display name (best effort) |
|
|
2435
|
+
| `{{SenderE164}}` | Sender phone number (best effort) |
|
|
2461
2436
|
|
|
2462
2437
|
---
|
|
2463
2438
|
|
|
@@ -74,12 +74,10 @@ When validation fails:
|
|
|
74
74
|
## Common tasks
|
|
75
75
|
|
|
76
76
|
<AccordionGroup>
|
|
77
|
-
<Accordion title="Set up a channel (WhatsApp, Telegram, Discord, etc.)">
|
|
78
77
|
Each channel has its own config section under `channels.<provider>`. See the dedicated channel page for setup steps:
|
|
79
78
|
|
|
80
79
|
- [WhatsApp](/channels/whatsapp) — `channels.whatsapp`
|
|
81
80
|
- [Telegram](/channels/telegram) — `channels.telegram`
|
|
82
|
-
- [Discord](/channels/discord) — `channels.discord`
|
|
83
81
|
- [Slack](/channels/slack) — `channels.slack`
|
|
84
82
|
- [Signal](/channels/signal) — `channels.signal`
|
|
85
83
|
- [iMessage](/channels/imessage) — `channels.imessage`
|
|
@@ -234,7 +232,6 @@ When validation fails:
|
|
|
234
232
|
```
|
|
235
233
|
|
|
236
234
|
- `every`: duration string (`30m`, `2h`). Set `0m` to disable.
|
|
237
|
-
- `target`: `last` | `whatsapp` | `telegram` | `discord` | `none`
|
|
238
235
|
- See [Heartbeat](/gateway/heartbeat) for the full guide.
|
|
239
236
|
|
|
240
237
|
</Accordion>
|
|
@@ -213,7 +213,6 @@ Use `accountId` to target a specific account on multi-account channels like Tele
|
|
|
213
213
|
- Session key formats: see [Sessions](/concepts/session) and [Groups](/channels/groups).
|
|
214
214
|
- `target`:
|
|
215
215
|
- `last` (default): deliver to the last used external channel.
|
|
216
|
-
- explicit channel: `whatsapp` / `telegram` / `discord` / `googlechat` / `slack` / `msteams` / `signal` / `imessage`.
|
|
217
216
|
- `none`: run the heartbeat but **do not deliver** externally.
|
|
218
217
|
- `to`: optional recipient override (channel-specific id, e.g. E.164 for WhatsApp or a Telegram chat id). For Telegram topics/threads, use `<chatId>:topic:<messageThreadId>`.
|
|
219
218
|
- `accountId`: optional account id for multi-account channels. When `target: "last"`, the account id applies to the resolved last channel if it supports accounts; otherwise it is ignored. If the account id does not match a configured account for the resolved channel, delivery is skipped.
|
|
@@ -231,7 +230,6 @@ Use `accountId` to target a specific account on multi-account channels like Tele
|
|
|
231
230
|
|
|
232
231
|
- Heartbeats run in the agent’s main session by default (`agent:<id>:<mainKey>`),
|
|
233
232
|
or `global` when `session.scope = "global"`. Set `session` to override to a
|
|
234
|
-
specific channel session (Discord/WhatsApp/etc.).
|
|
235
233
|
- `session` only affects the run context; delivery is controlled by `target` and `to`.
|
|
236
234
|
- To deliver to a specific channel/recipient, set `target` + `to`. With
|
|
237
235
|
`target: "last"`, delivery uses the last external channel for that session.
|
|
@@ -96,7 +96,6 @@ Use this when auditing access or deciding what to back up:
|
|
|
96
96
|
|
|
97
97
|
- **WhatsApp**: `~/.symi/credentials/whatsapp/<accountId>/creds.json`
|
|
98
98
|
- **Telegram bot token**: config/env or `channels.telegram.tokenFile`
|
|
99
|
-
- **Discord bot token**: config/env (token file not yet supported)
|
|
100
99
|
- **Slack tokens**: config/env (`channels.slack.*`)
|
|
101
100
|
- **Pairing allowlists**: `~/.symi/credentials/<channel>-allowFrom.json`
|
|
102
101
|
- **Model auth profiles**: `~/.symi/agents/<agentId>/agent/auth-profiles.json`
|
|
@@ -336,13 +335,11 @@ If you run multiple accounts on the same channel, use `per-account-channel-peer`
|
|
|
336
335
|
|
|
337
336
|
Symi has two separate “who can trigger me?” layers:
|
|
338
337
|
|
|
339
|
-
-
|
|
340
|
-
- When `dmPolicy="pairing"`, approvals are written to `~/.symi/credentials/<channel>-allowFrom.json` (merged with config allowlists).
|
|
338
|
+
- When `dmPolicy="pairing"`, approvals are written to `~/.symi/credentials/<channel>-allowFrom.json` (merged with config allowlists).
|
|
341
339
|
- **Group allowlist** (channel-specific): which groups/channels/guilds the bot will accept messages from at all.
|
|
342
340
|
- Common patterns:
|
|
343
341
|
- `channels.whatsapp.groups`, `channels.telegram.groups`, `channels.imessage.groups`: per-group defaults like `requireMention`; when set, it also acts as a group allowlist (include `"*"` to keep allow-all behavior).
|
|
344
342
|
- `groupPolicy="allowlist"` + `groupAllowFrom`: restrict who can trigger the bot _inside_ a group session (WhatsApp/Telegram/Signal/iMessage/Microsoft Teams).
|
|
345
|
-
- `channels.discord.guilds` / `channels.slack.channels`: per-surface allowlists + mention defaults.
|
|
346
343
|
- Group checks run in this order: `groupPolicy`/group allowlists first, mention/reply activation second.
|
|
347
344
|
- Replying to a bot message (implicit mention) does **not** bypass sender allowlists like `groupAllowFrom`.
|
|
348
345
|
- **Security note:** treat `dmPolicy="open"` and `groupPolicy="open"` as last-resort settings. They should be barely used; prefer pairing + allowlists unless you fully trust every member of the room.
|
|
@@ -831,7 +828,6 @@ Common use cases:
|
|
|
831
828
|
"whatsapp",
|
|
832
829
|
"telegram",
|
|
833
830
|
"slack",
|
|
834
|
-
"discord",
|
|
835
831
|
],
|
|
836
832
|
deny: [
|
|
837
833
|
"read",
|
|
@@ -881,7 +877,6 @@ If your AI does something bad:
|
|
|
881
877
|
|
|
882
878
|
1. Rotate Gateway auth (`gateway.auth.token` / `SYMI_GATEWAY_PASSWORD`) and restart.
|
|
883
879
|
2. Rotate remote client secrets (`gateway.remote.token` / `.password`) on any machine that can call the Gateway.
|
|
884
|
-
3. Rotate provider/API credentials (WhatsApp creds, Slack/Discord tokens, model/API keys in `auth-profiles.json`).
|
|
885
880
|
|
|
886
881
|
### Audit
|
|
887
882
|
|
package/docs/help/faq.md
CHANGED
|
@@ -192,7 +192,6 @@ Quick answers plus deeper troubleshooting for real-world setups (local dev, VPS,
|
|
|
192
192
|
- [Chat commands, aborting tasks, and "it won't stop"](#chat-commands-aborting-tasks-and-it-wont-stop)
|
|
193
193
|
- [How do I stop internal system messages from showing in chat](#how-do-i-stop-internal-system-messages-from-showing-in-chat)
|
|
194
194
|
- [How do I stop/cancel a running task?](#how-do-i-stopcancel-a-running-task)
|
|
195
|
-
- [How do I send a Discord message from Telegram? ("Cross-context messaging denied")](#how-do-i-send-a-discord-message-from-telegram-crosscontext-messaging-denied)
|
|
196
195
|
- [Why does it feel like the bot "ignores" rapid-fire messages?](#why-does-it-feel-like-the-bot-ignores-rapidfire-messages)
|
|
197
196
|
|
|
198
197
|
## First 60 seconds if something's broken
|
|
@@ -265,7 +264,6 @@ Quick answers plus deeper troubleshooting for real-world setups (local dev, VPS,
|
|
|
265
264
|
### Im stuck what's the fastest way to get unstuck
|
|
266
265
|
|
|
267
266
|
Use a local AI agent that can **see your machine**. That is far more effective than asking
|
|
268
|
-
in Discord, because most "I'm stuck" cases are **local config or environment issues** that
|
|
269
267
|
remote helpers cannot inspect.
|
|
270
268
|
|
|
271
269
|
- **Claude Code**: [https://www.anthropic.com/claude-code/](https://www.anthropic.com/claude-code/)
|
|
@@ -659,7 +657,6 @@ Docs: [Update](/cli/update), [Updating](/install/updating).
|
|
|
659
657
|
- **Model/auth setup** (Anthropic **setup-token** recommended for Claude subscriptions, OpenAI Codex OAuth supported, API keys optional, LM Studio local models supported)
|
|
660
658
|
- **Workspace** location + bootstrap files
|
|
661
659
|
- **Gateway settings** (bind/port/auth/tailscale)
|
|
662
|
-
- **Providers** (WhatsApp, Telegram, Discord, Mattermost (plugin), Signal, iMessage)
|
|
663
660
|
- **Daemon install** (LaunchAgent on macOS; systemd user unit on Linux/WSL2)
|
|
664
661
|
- **Health checks** and **skills** selection
|
|
665
662
|
|
|
@@ -887,8 +884,6 @@ lowest friction and you're okay with sleep/restarts, run it locally.
|
|
|
887
884
|
- **Pros:** always-on, stable network, no laptop sleep issues, easier to keep running.
|
|
888
885
|
- **Cons:** often run headless (use screenshots), remote file access only, you must SSH for updates.
|
|
889
886
|
|
|
890
|
-
**Symi-specific note:** WhatsApp/Telegram/Slack/Mattermost (plugin)/Discord all work fine from a VPS. The only real trade-off is **headless browser** vs a visible window. See [Browser](/tools/browser).
|
|
891
|
-
|
|
892
887
|
**Recommended default:** VPS if you had gateway disconnects before. Local is great when you're actively using the Mac and want local file access or UI automation with a visible browser.
|
|
893
888
|
|
|
894
889
|
### How important is it to run Symi on a dedicated machine
|
|
@@ -931,8 +926,6 @@ If you are running macOS in a VM, see [macOS VM](/install/macos-vm).
|
|
|
931
926
|
|
|
932
927
|
### What is Symi in one paragraph
|
|
933
928
|
|
|
934
|
-
Symi is a personal AI assistant you run on your own devices. It replies on the messaging surfaces you already use (WhatsApp, Telegram, Slack, Mattermost (plugin), Discord, Google Chat, Signal, iMessage, WebChat) and can also do voice + a live Canvas on supported platforms. The **Gateway** is the always-on control plane; the assistant is the product.
|
|
935
|
-
|
|
936
929
|
### What's the value proposition
|
|
937
930
|
|
|
938
931
|
Symi is not "just a Claude wrapper." It's a **local-first control plane** that lets you run a
|
|
@@ -944,7 +937,6 @@ Highlights:
|
|
|
944
937
|
|
|
945
938
|
- **Your devices, your data:** run the Gateway wherever you want (Mac, Linux, VPS) and keep the
|
|
946
939
|
workspace + session history local.
|
|
947
|
-
- **Real channels, not a web sandbox:** WhatsApp/Telegram/Slack/Discord/Signal/iMessage/etc,
|
|
948
940
|
plus mobile voice and Canvas on supported platforms.
|
|
949
941
|
- **Model-agnostic:** use Anthropic, OpenAI, MiniMax, OpenRouter, etc., with per-agent routing
|
|
950
942
|
and failover.
|
|
@@ -1917,8 +1909,6 @@ See [Groups](/channels/groups) and [Group messages](/channels/group-messages).
|
|
|
1917
1909
|
|
|
1918
1910
|
### Do groups/threads share context with DMs
|
|
1919
1911
|
|
|
1920
|
-
Direct chats collapse to the main session by default. Groups/channels have their own session keys, and Telegram topics / Discord threads are separate sessions. See [Groups](/channels/groups) and [Group messages](/channels/group-messages).
|
|
1921
|
-
|
|
1922
1912
|
### How many workspaces and agents can I create
|
|
1923
1913
|
|
|
1924
1914
|
No hard limits. Dozens (even hundreds) are fine, but watch for:
|
|
@@ -2809,10 +2799,7 @@ Slash commands overview: see [Slash commands](/tools/slash-commands).
|
|
|
2809
2799
|
|
|
2810
2800
|
Most commands must be sent as a **standalone** message that starts with `/`, but a few shortcuts (like `/status`) also work inline for allowlisted senders.
|
|
2811
2801
|
|
|
2812
|
-
### How do I send a Discord message from Telegram Crosscontext messaging denied
|
|
2813
|
-
|
|
2814
2802
|
Symi blocks **cross-provider** messaging by default. If a tool call is bound
|
|
2815
|
-
to Telegram, it won't send to Discord unless you explicitly allow it.
|
|
2816
2803
|
|
|
2817
2804
|
Enable cross-provider messaging for the agent:
|
|
2818
2805
|
|
|
@@ -75,7 +75,6 @@ flowchart TD
|
|
|
75
75
|
|
|
76
76
|
Common log signatures:
|
|
77
77
|
|
|
78
|
-
- `drop guild message (mention required` → mention gating blocked the message in Discord.
|
|
79
78
|
- `pairing request` → sender is unapproved and waiting for DM pairing approval.
|
|
80
79
|
- `blocked` / `allowlist` in channel logs → sender, room, or group is filtered.
|
|
81
80
|
|
package/docs/index.md
CHANGED
|
@@ -25,7 +25,6 @@ title: "Symi"
|
|
|
25
25
|
> _"EXFOLIATE! EXFOLIATE!"_ — A space pipeline, probably
|
|
26
26
|
|
|
27
27
|
<p align="center">
|
|
28
|
-
<strong>Any OS gateway for AI agents across WhatsApp, Telegram, Discord, iMessage, and more.</strong><br />
|
|
29
28
|
Send a message, get an agent response from your pocket. Plugins add Mattermost and more.
|
|
30
29
|
</p>
|
|
31
30
|
|
|
@@ -43,14 +42,11 @@ title: "Symi"
|
|
|
43
42
|
|
|
44
43
|
## What is Symi?
|
|
45
44
|
|
|
46
|
-
Symi is a **self-hosted gateway** that connects your favorite chat apps — WhatsApp, Telegram, Discord, iMessage, and more — to AI coding agents like Pi. You run a single Gateway process on your own machine (or a server), and it becomes the bridge between your messaging apps and an always-available AI assistant.
|
|
47
|
-
|
|
48
45
|
**Who is it for?** Developers and power users who want a personal AI assistant they can message from anywhere — without giving up control of their data or relying on a hosted service.
|
|
49
46
|
|
|
50
47
|
**What makes it different?**
|
|
51
48
|
|
|
52
49
|
- **Self-hosted**: runs on your hardware, your rules
|
|
53
|
-
- **Multi-channel**: one Gateway serves WhatsApp, Telegram, Discord, and more simultaneously
|
|
54
50
|
- **Agent-native**: built for coding agents with tool use, sessions, memory, and multi-agent routing
|
|
55
51
|
- **Open source**: MIT licensed, community-driven
|
|
56
52
|
|
|
@@ -74,7 +70,6 @@ The Gateway is the single source of truth for sessions, routing, and channel con
|
|
|
74
70
|
|
|
75
71
|
<Columns>
|
|
76
72
|
<Card title="Multi-channel gateway" icon="network">
|
|
77
|
-
WhatsApp, Telegram, Discord, and iMessage with a single Gateway process.
|
|
78
73
|
</Card>
|
|
79
74
|
<Card title="Plugin channels" icon="plug">
|
|
80
75
|
Add Mattermost and more with extension packages.
|
|
@@ -161,7 +156,6 @@ Example:
|
|
|
161
156
|
SSH and tailnet access patterns.
|
|
162
157
|
</Card>
|
|
163
158
|
<Card title="Channels" href="/channels/telegram" icon="message-square">
|
|
164
|
-
Channel-specific setup for WhatsApp, Telegram, Discord, and more.
|
|
165
159
|
</Card>
|
|
166
160
|
<Card title="Nodes" href="/nodes" icon="smartphone">
|
|
167
161
|
iOS and Android nodes with pairing and Canvas.
|
package/docs/install/ansible.md
CHANGED
|
@@ -63,9 +63,8 @@ sudo -i -u symi
|
|
|
63
63
|
The post-install script will guide you through:
|
|
64
64
|
|
|
65
65
|
1. **Onboarding wizard**: Configure Symi settings
|
|
66
|
-
2. **
|
|
67
|
-
3. **
|
|
68
|
-
4. **Tailscale setup**: Connect to your VPN mesh
|
|
66
|
+
2. **Gateway testing**: Verify the installation
|
|
67
|
+
3. **Tailscale setup**: Connect to your VPN mesh
|
|
69
68
|
|
|
70
69
|
### Quick commands
|
|
71
70
|
|
package/docs/install/docker.md
CHANGED
|
@@ -287,13 +287,9 @@ Telegram (bot token):
|
|
|
287
287
|
docker compose run --rm symi-cli channels add --channel telegram --token "<token>"
|
|
288
288
|
```
|
|
289
289
|
|
|
290
|
-
Discord (bot token):
|
|
291
|
-
|
|
292
290
|
```bash
|
|
293
|
-
docker compose run --rm symi-cli channels add --channel discord --token "<token>"
|
|
294
|
-
```
|
|
295
291
|
|
|
296
|
-
|
|
292
|
+
```
|
|
297
293
|
|
|
298
294
|
### OpenAI Codex OAuth (headless Docker)
|
|
299
295
|
|
|
@@ -368,7 +364,6 @@ precedence, and troubleshooting.
|
|
|
368
364
|
- Auto-prune: idle > 24h OR age > 7d
|
|
369
365
|
- Network: `none` by default (explicitly opt-in if you need egress)
|
|
370
366
|
- Default allow: `exec`, `process`, `read`, `write`, `edit`, `sessions_list`, `sessions_history`, `sessions_send`, `sessions_spawn`, `session_status`
|
|
371
|
-
- Default deny: `browser`, `canvas`, `nodes`, `cron`, `discord`, `gateway`
|
|
372
367
|
|
|
373
368
|
### Enable sandboxing
|
|
374
369
|
|
|
@@ -435,7 +430,6 @@ If you plan to install packages in `setupCommand`, note:
|
|
|
435
430
|
"sessions_spawn",
|
|
436
431
|
"session_status",
|
|
437
432
|
],
|
|
438
|
-
deny: ["browser", "canvas", "nodes", "cron", "discord", "gateway"],
|
|
439
433
|
},
|
|
440
434
|
},
|
|
441
435
|
},
|
package/docs/install/fly.md
CHANGED
|
@@ -5,14 +5,11 @@ description: Deploy Symi on Fly.io
|
|
|
5
5
|
|
|
6
6
|
# Fly.io Deployment
|
|
7
7
|
|
|
8
|
-
**Goal:** Symi Gateway running on a [Fly.io](https://fly.io) machine with persistent storage, automatic HTTPS, and Discord/channel access.
|
|
9
|
-
|
|
10
8
|
## What you need
|
|
11
9
|
|
|
12
10
|
- [flyctl CLI](https://fly.io/docs/hands-on/install-flyctl/) installed
|
|
13
11
|
- Fly.io account (free tier works)
|
|
14
12
|
- Model auth: Anthropic API key (or other provider keys)
|
|
15
|
-
- Channel credentials: Discord bot token, Telegram token, etc.
|
|
16
13
|
|
|
17
14
|
## Beginner quick path
|
|
18
15
|
|
|
@@ -100,7 +97,6 @@ fly secrets set OPENAI_API_KEY=sk-...
|
|
|
100
97
|
fly secrets set GOOGLE_API_KEY=...
|
|
101
98
|
|
|
102
99
|
# Channel tokens
|
|
103
|
-
fly secrets set DISCORD_BOT_TOKEN=MTQ...
|
|
104
100
|
```
|
|
105
101
|
|
|
106
102
|
**Notes:**
|
|
@@ -128,7 +124,6 @@ You should see:
|
|
|
128
124
|
|
|
129
125
|
```
|
|
130
126
|
[gateway] listening on ws://0.0.0.0:3000 (PID xxx)
|
|
131
|
-
[discord] logged in to discord as xxx
|
|
132
127
|
```
|
|
133
128
|
|
|
134
129
|
## 5) Create config file
|
|
@@ -169,11 +164,9 @@ cat > /data/symi.json << 'EOF'
|
|
|
169
164
|
"bindings": [
|
|
170
165
|
{
|
|
171
166
|
"agentId": "main",
|
|
172
|
-
"match": { "channel": "discord" }
|
|
173
167
|
}
|
|
174
168
|
],
|
|
175
169
|
"channels": {
|
|
176
|
-
"discord": {
|
|
177
170
|
"enabled": true,
|
|
178
171
|
"groupPolicy": "allowlist",
|
|
179
172
|
"guilds": {
|
|
@@ -197,13 +190,6 @@ EOF
|
|
|
197
190
|
|
|
198
191
|
**Note:** With `SYMI_STATE_DIR=/data`, the config path is `/data/symi.json`.
|
|
199
192
|
|
|
200
|
-
**Note:** The Discord token can come from either:
|
|
201
|
-
|
|
202
|
-
- Environment variable: `DISCORD_BOT_TOKEN` (recommended for secrets)
|
|
203
|
-
- Config file: `channels.discord.token`
|
|
204
|
-
|
|
205
|
-
If using env var, no need to add token to config. The gateway reads `DISCORD_BOT_TOKEN` automatically.
|
|
206
|
-
|
|
207
193
|
Restart to apply:
|
|
208
194
|
|
|
209
195
|
```bash
|
|
@@ -28,9 +28,8 @@ and you configure everything via the `/setup` web wizard.
|
|
|
28
28
|
|
|
29
29
|
1. Visit `https://<your-northflank-domain>/setup` and enter your `SETUP_PASSWORD`.
|
|
30
30
|
2. Choose a model/auth provider and paste your key.
|
|
31
|
-
3.
|
|
32
|
-
4.
|
|
33
|
-
5. Open the Control UI at `https://<your-northflank-domain>/symi`
|
|
31
|
+
3. Click **Run setup**.
|
|
32
|
+
4. Open the Control UI at `https://<your-northflank-domain>/symi`
|
|
34
33
|
|
|
35
34
|
If Telegram DMs are set to pairing, the setup wizard can approve the pairing code.
|
|
36
35
|
|
|
@@ -43,11 +42,8 @@ If Telegram DMs are set to pairing, the setup wizard can approve the pairing cod
|
|
|
43
42
|
3. Copy the token (looks like `123456789:AA...`)
|
|
44
43
|
4. Paste it into `/setup`
|
|
45
44
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
4. **Enable MESSAGE CONTENT INTENT** under Bot → Privileged Gateway Intents (required or the bot will crash on startup)
|
|
52
|
-
5. Copy the **Bot Token** and paste into `/setup`
|
|
53
|
-
6. Invite the bot to your server (OAuth2 URL Generator; scopes: `bot`, `applications.commands`)
|
|
45
|
+
5. **New Application** → choose a name
|
|
46
|
+
6. **Bot** → **Add Bot**
|
|
47
|
+
7. **Enable MESSAGE CONTENT INTENT** under Bot → Privileged Gateway Intents (required or the bot will crash on startup)
|
|
48
|
+
8. Copy the **Bot Token** and paste into `/setup`
|
|
49
|
+
9. Invite the bot to your server (OAuth2 URL Generator; scopes: `bot`, `applications.commands`)
|
package/docs/install/railway.mdx
CHANGED
|
@@ -67,8 +67,7 @@ Set these variables on the service:
|
|
|
67
67
|
|
|
68
68
|
1. Visit `https://<your-railway-domain>/setup` and enter your `SETUP_PASSWORD`.
|
|
69
69
|
2. Choose a model/auth provider and paste your key.
|
|
70
|
-
3.
|
|
71
|
-
4. Click **Run setup**.
|
|
70
|
+
3. Click **Run setup**.
|
|
72
71
|
|
|
73
72
|
If Telegram DMs are set to pairing, the setup wizard can approve the pairing code.
|
|
74
73
|
|
|
@@ -81,14 +80,11 @@ If Telegram DMs are set to pairing, the setup wizard can approve the pairing cod
|
|
|
81
80
|
3. Copy the token (looks like `123456789:AA...`)
|
|
82
81
|
4. Paste it into `/setup`
|
|
83
82
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
4. **Enable MESSAGE CONTENT INTENT** under Bot → Privileged Gateway Intents (required or the bot will crash on startup)
|
|
90
|
-
5. Copy the **Bot Token** and paste into `/setup`
|
|
91
|
-
6. Invite the bot to your server (OAuth2 URL Generator; scopes: `bot`, `applications.commands`)
|
|
83
|
+
5. **New Application** → choose a name
|
|
84
|
+
6. **Bot** → **Add Bot**
|
|
85
|
+
7. **Enable MESSAGE CONTENT INTENT** under Bot → Privileged Gateway Intents (required or the bot will crash on startup)
|
|
86
|
+
8. Copy the **Bot Token** and paste into `/setup`
|
|
87
|
+
9. Invite the bot to your server (OAuth2 URL Generator; scopes: `bot`, `applications.commands`)
|
|
92
88
|
|
|
93
89
|
## Backups & migration
|
|
94
90
|
|
package/docs/install/render.mdx
CHANGED
|
@@ -78,8 +78,7 @@ The Blueprint defaults to `starter`. To use free tier, change `plan: free` in yo
|
|
|
78
78
|
1. Navigate to `https://<your-service>.onrender.com/setup`
|
|
79
79
|
2. Enter your `SETUP_PASSWORD`
|
|
80
80
|
3. Select a model provider and paste your API key
|
|
81
|
-
4.
|
|
82
|
-
5. Click **Run setup**
|
|
81
|
+
4. Click **Run setup**
|
|
83
82
|
|
|
84
83
|
### Access the Control UI
|
|
85
84
|
|
package/docs/ja-JP/index.md
CHANGED
|
@@ -32,7 +32,6 @@ x-i18n:
|
|
|
32
32
|
> _「EXFOLIATE! EXFOLIATE!」_ — たぶん宇宙ロブスター
|
|
33
33
|
|
|
34
34
|
<p align="center">
|
|
35
|
-
<strong>WhatsApp、Telegram、Discord、iMessageなどに対応した、あらゆるOS向けのAIエージェントgateway。</strong><br />
|
|
36
35
|
メッセージを送信すれば、ポケットからエージェントの応答を受け取れます。プラグインでMattermostなどを追加できます。
|
|
37
36
|
</p>
|
|
38
37
|
|
|
@@ -68,7 +67,6 @@ Gatewayは、セッション、ルーティング、チャネル接続の信頼
|
|
|
68
67
|
|
|
69
68
|
<Columns>
|
|
70
69
|
<Card title="マルチチャネルgateway" icon="network">
|
|
71
|
-
単一のGatewayプロセスでWhatsApp、Telegram、Discord、iMessageに対応。
|
|
72
70
|
</Card>
|
|
73
71
|
<Card title="プラグインチャネル" icon="plug">
|
|
74
72
|
拡張パッケージでMattermostなどを追加。
|
|
@@ -155,7 +153,6 @@ Gatewayの起動後、ブラウザでControl UIを開きます。
|
|
|
155
153
|
SSHおよびtailnetアクセスパターン。
|
|
156
154
|
</Card>
|
|
157
155
|
<Card title="チャネル" href="/channels/telegram" icon="message-square">
|
|
158
|
-
WhatsApp、Telegram、Discordなどのチャネル固有のセットアップ。
|
|
159
156
|
</Card>
|
|
160
157
|
<Card title="ノード" href="/nodes" icon="smartphone">
|
|
161
158
|
ペアリングとCanvas対応のiOSおよびAndroidノード。
|
package/docs/pi.md
CHANGED
|
@@ -115,7 +115,6 @@ src/agents/
|
|
|
115
115
|
│ ├── browser-tool.ts
|
|
116
116
|
│ ├── canvas-tool.ts
|
|
117
117
|
│ ├── cron-tool.ts
|
|
118
|
-
│ ├── discord-actions*.ts
|
|
119
118
|
│ ├── gateway-tool.ts
|
|
120
119
|
│ ├── image-tool.ts
|
|
121
120
|
│ ├── message-tool.ts
|
|
@@ -235,10 +234,9 @@ The SDK handles the full agent loop: sending to LLM, executing tool calls, strea
|
|
|
235
234
|
1. **Base Tools**: pi's `codingTools` (read, bash, edit, write)
|
|
236
235
|
2. **Custom Replacements**: Symi replaces bash with `exec`/`process`, customizes read/edit/write for sandbox
|
|
237
236
|
3. **Symi Tools**: messaging, browser, canvas, sessions, cron, gateway, etc.
|
|
238
|
-
4. **
|
|
239
|
-
5. **
|
|
240
|
-
6. **
|
|
241
|
-
7. **AbortSignal Wrapping**: Tools wrapped to respect abort signals
|
|
237
|
+
4. **Policy Filtering**: Tools filtered by profile, provider, agent, group, sandbox policies
|
|
238
|
+
5. **Schema Normalization**: Schemas cleaned for Gemini/OpenAI quirks
|
|
239
|
+
6. **AbortSignal Wrapping**: Tools wrapped to respect abort signals
|
|
242
240
|
|
|
243
241
|
### Tool Definition Adapter
|
|
244
242
|
|
|
@@ -55,7 +55,6 @@ Hardening:
|
|
|
55
55
|
## Forwarding behavior
|
|
56
56
|
|
|
57
57
|
- When Voice Wake is enabled, transcripts are forwarded to the active gateway/agent (the same local vs remote mode used by the rest of the mac app).
|
|
58
|
-
- Replies are delivered to the **last-used main provider** (WhatsApp/Telegram/Discord/WebChat). If delivery fails, the error is logged and the run is still visible via WebChat/session logs.
|
|
59
58
|
|
|
60
59
|
## Forwarding payload
|
|
61
60
|
|
package/docs/providers/index.md
CHANGED
|
@@ -11,8 +11,6 @@ title: "Model Providers"
|
|
|
11
11
|
Symi can use many LLM providers. Pick a provider, authenticate, then set the
|
|
12
12
|
default model as `provider/model`.
|
|
13
13
|
|
|
14
|
-
Looking for chat channel docs (WhatsApp/Telegram/Discord/Slack/Mattermost (plugin)/etc.)? See [Channels](/channels).
|
|
15
|
-
|
|
16
14
|
## Highlight: Venice (Venice AI)
|
|
17
15
|
|
|
18
16
|
Venice is our recommended Venice AI setup for privacy-first inference with an option to use Opus for hard tasks.
|