activeclaw 2026.2.11 → 2026.2.13
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/CHANGELOG.md +106 -0
- package/dist/{accounts-DbzMEfKN.js → accounts-DCDeFTra.js} +2 -2
- package/dist/{accounts-C2elk6PC.js → accounts-DeqIQjo1.js} +2 -2
- package/dist/{acp-cli-CVFTdsQY.js → acp-cli-CeYI4XRd.js} +15 -16
- package/dist/{acp-cli-BpJwIyLl.js → acp-cli-rNbGXICg.js} +14 -15
- package/dist/{agent-Bz1r5O8q.js → agent-BvNJF5QL.js} +19 -15
- package/dist/{agent-22-R4bNS.js → agent-CyMxTyrG.js} +20 -16
- package/dist/{agent-scope-D8miw9q_.js → agent-scope-BIEhVP4_.js} +172 -4
- package/dist/{agent-scope-CGmuusG9.js → agent-scope-CQCus0rI.js} +3 -3
- package/dist/{agent-scope-DQuy3dwI.js → agent-scope-CsRbLH4l.js} +4 -4
- package/dist/{agent-scope-BEf5crnU.js → agent-scope-DPIFau3f.js} +5 -1
- package/dist/audio-preflight-BU8W7uxc.js +60 -0
- package/dist/audio-preflight-CGsumMzb.js +60 -0
- package/dist/audio-preflight-SLmkJI6-.js +74 -0
- package/dist/audio-preflight-jZc5mFCZ.js +71 -0
- package/dist/{audit-C4wLaF0D.js → audit-Dmww_503.js} +71 -19
- package/dist/{audit-CY-yopxa.js → audit-wPu26VMb.js} +72 -20
- package/dist/{tailscale-DU6DgqVy.js → auth-9x3lqfIY.js} +208 -3
- package/dist/{tailscale-Cu-2HNvU.js → auth-CQNl_IaI.js} +190 -3
- package/dist/{auth-health-BFKUoCwJ.js → auth-health-C4L4FGBA.js} +1 -1
- package/dist/{auth-health-d7BMZlWG.js → auth-health-j6epgQbq.js} +1 -1
- package/dist/{auth-profiles-Bv1AEm-Y.js → auth-profiles-ByNs3eEm.js} +87 -31
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +28 -22
- package/dist/bundled/session-memory/handler.js +33 -22
- package/dist/{call-7yrB6v4I.js → call-DVYCIV8m.js} +5 -5
- package/dist/{call-Bek1xlgk.js → call-SolyGS1r.js} +6 -6
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-options-3mdYN0C_.js → channel-options-BwC2yQcR.js} +4 -4
- package/dist/{channel-options-DJ0b1m7B.js → channel-options-Cq9BVDkP.js} +12 -7
- package/dist/{channel-selection-RZimme3j.js → channel-selection-D4D6ImhN.js} +2 -2
- package/dist/{channel-selection-B9b7Kuit.js → channel-selection-MZAHm4U8.js} +2 -2
- package/dist/{channels-cli-CYbK2Dku.js → channels-cli-9Dsk9Qm7.js} +57 -53
- package/dist/{channels-cli-BFznbGOs.js → channels-cli-BJUppQll.js} +59 -55
- package/dist/{channels-status-issues-B3KkflfR.js → channels-status-issues-D7GSV1GS.js} +1 -1
- package/dist/{channels-status-issues-DQkRaZts.js → channels-status-issues-DDAWeT-6.js} +1 -1
- package/dist/{chrome-Db7w64LF.js → chrome-BfB6JdKF.js} +4 -4
- package/dist/{chrome-Dm-EgOjJ.js → chrome-Cvr-57lg.js} +6 -5
- package/dist/{chrome-CF16STk9.js → chrome-DL0avO8n.js} +2 -1
- package/dist/{chrome-yIKmOzCO.js → chrome-foEwx3lN.js} +5 -4
- package/dist/{clack-prompter-BCiBkJVr.js → clack-prompter-Bz3Mmcl-.js} +5 -5
- package/dist/{clack-prompter-DuBVnTKy.js → clack-prompter-ChCGXfyt.js} +4 -4
- package/dist/cli/daemon-cli.js +1 -1
- package/dist/{cli-Cl3PdJei.js → cli-ZR9ugUBX.js} +42 -38
- package/dist/cli-miPe4Ujz.js +93 -0
- package/dist/{client-6xKrRC-1.js → client-BrYfyoDK.js} +54 -5
- package/dist/{client-DMloFP_O.js → client-CTwXnRl7.js} +54 -5
- package/dist/{command-format-ayFsmwwz.js → command-format-Bxe0mWee.js} +1 -1
- package/dist/{command-options-BTAzyqqb.js → command-options-BvgxzPbK.js} +9 -4
- package/dist/{commands-CjEGXOZ_.js → commands-BX_OIIVR.js} +4 -4
- package/dist/{completion-cli-DrJGfJGl.js → completion-cli-CR77-jyv.js} +3 -3
- package/dist/{completion-cli-DOec3E2Z.js → completion-cli-DnjpxAag.js} +30 -30
- package/dist/{config-B00lvFac.js → config-Bdhomfei.js} +21 -7
- package/dist/{config-XBdA0ciN.js → config-BvMsmctM.js} +83 -9
- package/dist/{config-BqGVMf1y.js → config-QYrbd7x7.js} +60 -6
- package/dist/{config--NUdpACy.js → config-aFQssWKX.js} +21 -7
- package/dist/{config-guard-4kCO_rnQ.js → config-guard-CljaSxJd.js} +160 -51
- package/dist/{configure-B69emwZv.js → configure-BXLiucXo.js} +28 -25
- package/dist/{configure-sMhpLzFf.js → configure-BYPqXzGZ.js} +28 -25
- package/dist/control-auth-8Cf4WXpR.js +54 -0
- package/dist/control-auth-DBCu3qyv.js +54 -0
- package/dist/{control-service-Db_1V-KY.js → control-service-B5KnPqGP.js} +11 -5
- package/dist/{control-service-IRAmbcbN.js → control-service-DKnttEus.js} +10 -4
- package/dist/control-ui/assets/{index-CnB9IO4a.js → index-B4LPvte9.js} +369 -369
- package/dist/control-ui/assets/index-B4LPvte9.js.map +1 -0
- package/dist/control-ui/index.html +1 -1
- package/dist/{cron-cli-Cum2324v.js → cron-cli-D7BRjDv2.js} +20 -20
- package/dist/{cron-cli-DhUWcYdk.js → cron-cli-z1zk_FXQ.js} +19 -19
- package/dist/{daemon-cli-q7nkEF5-.js → daemon-cli-BDkU2ocb.js} +60 -21
- package/dist/{daemon-cli-CTC2CHci.js → daemon-cli-cNSF93-v.js} +59 -20
- package/dist/{daemon-runtime-c0uXH4Dl.js → daemon-runtime-B0tg_LsX.js} +3 -3
- package/dist/{daemon-runtime-UsK-tOty.js → daemon-runtime-Bsjeut6m.js} +3 -3
- package/dist/{deliver-hf-WKyWd.js → deliver-CIU9Npgs.js} +373 -281
- package/dist/{deliver-CT6KiDqO.js → deliver-DYYCo1G7.js} +369 -278
- package/dist/{deliver-T9d44OpZ.js → deliver-LsxKETro.js} +371 -279
- package/dist/{deliver-CPy8jYj9.js → deliver-xUU3mGHo.js} +369 -277
- package/dist/{deps-Bv1kLtwo.js → deps-QSwGcoNZ.js} +2 -2
- package/dist/{deps-DFQdAWQc.js → deps-lAAA2zYI.js} +2 -2
- package/dist/{devices-cli-Cm7U1py9.js → devices-cli-BG3-2oqt.js} +14 -14
- package/dist/{devices-cli-ZpjlfK-e.js → devices-cli-VIQtOvt_.js} +14 -14
- package/dist/{directory-cli-B14TUSJA.js → directory-cli-BCJwjVC0.js} +16 -16
- package/dist/{directory-cli-67kzd4I5.js → directory-cli-jYzZ02gk.js} +14 -14
- package/dist/{dispatcher-3ElQWGVI.js → dispatcher-DY51b-Zc.js} +2 -2
- package/dist/{dns-cli-CU-xfhTN.js → dns-cli-DHIiMJjS.js} +12 -12
- package/dist/{dns-cli-Dqj7O6Q_.js → dns-cli-pZlv87Ib.js} +11 -11
- package/dist/{docs-cli-CamBqzb5.js → docs-cli-2JDiwfzP.js} +8 -8
- package/dist/{docs-cli-Cj3L5oqB.js → docs-cli-BhkYqoIQ.js} +7 -7
- package/dist/{doctor-BV1kvbMm.js → doctor-Bf8EhNtA.js} +36 -35
- package/dist/{doctor-BJirShBi.js → doctor-sYG5V4Co.js} +34 -33
- package/dist/entry.js +56 -18
- package/dist/{env-BxRc6wWv.js → env-ONzUVAG2.js} +1 -1
- package/dist/{exec-CijMSZd9.js → exec-B8lXct-k.js} +503 -14
- package/dist/{exec-B8JKbXKW.js → exec-CACT5OAW.js} +1 -1
- package/dist/{exec-57A8Rlc8.js → exec-CJFFoM7H.js} +32 -13
- package/dist/{exec-Cv_Ofd1m.js → exec-YIosokWE.js} +1 -1
- package/dist/{exec-approvals-cli-DEzz9Iai.js → exec-approvals-cli-7LH0lwhO.js} +21 -21
- package/dist/{exec-approvals-cli-DhXj3hQX.js → exec-approvals-cli-apGnQbpj.js} +21 -21
- package/dist/extensionAPI.js +7733 -8746
- package/dist/fetch-DmiOpALK.js +274 -0
- package/dist/fetch-timeout-BEtUjM1S.js +274 -0
- package/dist/fetch-timeout-DEoXG_SF.js +274 -0
- package/dist/fetch-timeout-DTK9vxex.js +274 -0
- package/dist/{gateway-cli-D1EdIq8I.js → gateway-cli-DUdYxlZS.js} +491 -136
- package/dist/{gateway-cli-B_xDUDy2.js → gateway-cli-DbvWmE-9.js} +495 -140
- package/dist/{gateway-rpc-3B5y445n.js → gateway-rpc-BByb2Snz.js} +3 -3
- package/dist/{gateway-rpc-BoL2vinh.js → gateway-rpc-wXSCUZXj.js} +3 -3
- package/dist/{github-copilot-auth-Omqrto0J.js → github-copilot-auth-D7ewvpMd.js} +205 -17
- package/dist/{github-copilot-auth-CZxurvdz.js → github-copilot-auth-DDispnyz.js} +205 -17
- package/dist/{github-copilot-token-SLWintYd.js → github-copilot-token-Cfs0Wxr8.js} +1 -1
- package/dist/{gmail-setup-utils-BXQKsLtI.js → gmail-setup-utils-Cfns8TQx.js} +3 -3
- package/dist/{gmail-setup-utils-CHcssBOA.js → gmail-setup-utils-DJb-_5kO.js} +4 -4
- package/dist/{health-format-Dy1caGsq.js → health-format-KGPokKJH.js} +97 -42
- package/dist/{health-format-DrGFg8bx.js → health-format-LZDxu3rv.js} +95 -40
- package/dist/{help-format-DAj7l5uV.js → help-format-C48TXngO.js} +1 -1
- package/dist/{help-format-CUnac_bT.js → help-format-R5fLToDw.js} +1 -1
- package/dist/{hooks-cli-ptEf6TIM.js → hooks-cli-CT8JCRkH.js} +51 -46
- package/dist/{hooks-cli-Bhf5VRp1.js → hooks-cli-S1MKumJO.js} +49 -44
- package/dist/{hooks-status-Br-2bK2G.js → hooks-status-Cw0xD8Lt.js} +3 -3
- package/dist/{hooks-status-DNQJSa4B.js → hooks-status-D9MhwHRp.js} +3 -3
- package/dist/{image-rOFfK3PJ.js → image-Brk1sJbw.js} +10 -7
- package/dist/{image-fUwR7slg.js → image-C4Nn2p3e.js} +10 -7
- package/dist/{image-Ds4NLGPR.js → image-DgtfXMcX.js} +9 -6
- package/dist/{image-Dnnxt82I.js → image-RKwc3fsL.js} +8 -5
- package/dist/index.js +208 -97
- package/dist/{installs-CRSjQxbR.js → installs-CrLcWYHe.js} +8 -7
- package/dist/{installs-89zeUsVn.js → installs-DscWb9b9.js} +8 -7
- package/dist/{links-7M-j83As.js → links-B8LAzWwg.js} +1 -1
- package/dist/{links-C591fM9M.js → links-Eax1UO3w.js} +1 -1
- package/dist/llm-slug-generator.js +18 -19
- package/dist/{loader-wXwp4rZJ.js → loader-KjT074JR.js} +5722 -6888
- package/dist/{logging-MMRGFxGI.js → logging-BAyPwvdH.js} +1 -1
- package/dist/{logging-DuK6YXuK.js → logging-CRq4h04P.js} +2 -2
- package/dist/{login-qr-wM8BnKJh.js → login-qr-B6ZgAuIf.js} +5 -5
- package/dist/{login-qr-CPEsT6dN.js → login-qr-Bua-p0nG.js} +3 -4
- package/dist/{login-qr-CGEu5TU-.js → login-qr-CuvemJj4.js} +6 -6
- package/dist/{login-qr-DH150tTp.js → login-qr-Djr1JfIf.js} +2 -2
- package/dist/{logs-cli-ClgkHnfT.js → logs-cli-9IAV7rWY.js} +38 -22
- package/dist/{logs-cli-CmfINsOj.js → logs-cli-EiKzUFPa.js} +37 -21
- package/dist/{manager-DYo4PlVM.js → manager-BIMh_eSm.js} +7 -8
- package/dist/{manager-D6EbxDV4.js → manager-CwinWQoz.js} +5 -5
- package/dist/{manager-BbnHek5T.js → manager-DkqF1GiK.js} +9 -9
- package/dist/{manager-CcVYv0N5.js → manager-T1XfGchB.js} +8 -8
- package/dist/{manifest-registry-3It8Z8yN.js → manifest-registry-CQhdnDBZ.js} +40 -2
- package/dist/{manifest-registry-D5SiA3xq.js → manifest-registry-u0okVSkU.js} +40 -2
- package/dist/{message-channel-Cu61-7H6.js → message-channel-BLi2a6Yw.js} +1 -1
- package/dist/{message-channel-BlgPSDAh.js → message-channel-C_MmebBt.js} +1 -1
- package/dist/{model-auth-ioeR_zLX.js → model-auth-CabXIF6O.js} +116 -34
- package/dist/{model-selection-BK7DuyH8.js → model-selection-BLuqsGVB.js} +86 -30
- package/dist/{model-selection-CezC36lH.js → model-selection-C1GmkTAV.js} +84 -28
- package/dist/{models-cli-C3uGdOrd.js → models-cli-9jmDv-h3.js} +52 -48
- package/dist/{models-cli-CUIVPgXE.js → models-cli-zS9rtWz8.js} +53 -49
- package/dist/{node-cli-BxBGSuPE.js → node-cli-CrpTxTTs.js} +28 -26
- package/dist/{node-cli-CdYAsuQQ.js → node-cli-wemUMCg-.js} +28 -26
- package/dist/{node-service-u8g85nD3.js → node-service-C8DTHTMg.js} +2 -2
- package/dist/{node-service-CM5vkdIo.js → node-service-WQuEKz6W.js} +2 -2
- package/dist/{nodes-cli-By6yeCTB.js → nodes-cli-BaU2SIFw.js} +20 -20
- package/dist/{nodes-cli-BaVMTAPc.js → nodes-cli-Dx23D72n.js} +20 -20
- package/dist/{nodes-screen-Dvl_ohUY.js → nodes-screen-C0IuBqUL.js} +1 -1
- package/dist/{note-5WqioBRA.js → note-BhRSeNeu.js} +2 -2
- package/dist/{note-Ci08TSbV.js → note-hhtubr2j.js} +1 -1
- package/dist/{onboard-channels-DxXvp8og.js → onboard-channels-C501x8GI.js} +8 -8
- package/dist/{onboard-channels-CXhnVy4E.js → onboard-channels-Dxzroasd.js} +8 -8
- package/dist/{onboard-skills-CBxsRGyf.js → onboard-skills-DV0Qzvjj.js} +440 -136
- package/dist/{onboard-skills-DQwOQ6Ry.js → onboard-skills-rlBHcu3Q.js} +439 -135
- package/dist/{onboarding-Du_7qEng.js → onboarding-CN-EDLjd.js} +38 -38
- package/dist/{openclaw-root-JLDMp6ux.js → openclaw-root-1VeFrph_.js} +4 -0
- package/dist/{openclaw-root-Dw6gumSU.js → openclaw-root-BNlEap4i.js} +4 -0
- package/dist/{pairing-cli-CRQDpj8f.js → pairing-cli-CDHG4xuI.js} +15 -15
- package/dist/{pairing-cli-Cng1KFWw.js → pairing-cli-CQP34Dlx.js} +15 -15
- package/dist/{pairing-labels-Ciu3Zoxj.js → pairing-labels-B6CN0SNH.js} +1 -1
- package/dist/{pairing-labels-CWFEtSc3.js → pairing-labels-CgNHnjzT.js} +1 -1
- package/dist/{pairing-store-c-QQ2u8p.js → pairing-store-CmlRVqOz.js} +2 -2
- package/dist/{pairing-store-CgXR3ZWJ.js → pairing-store-Dp5_JGnG.js} +3 -3
- package/dist/{path-env-CXWUFfFv.js → path-env-CLvYNwtL.js} +1 -1
- package/dist/{path-env-BgLvMbz_.js → path-env-CaYUVIML.js} +2 -2
- package/dist/{paths-MnZaxqPw.js → paths-B0a4ywSO.js} +30 -5
- package/dist/{paths-Bkhd_qY8.js → paths-B49s6UZQ.js} +30 -5
- package/dist/{paths-DL6EIRTw.js → paths-D0O87MfH.js} +30 -5
- package/dist/{paths-IivnSNkP.js → paths-DLINmNFQ.js} +31 -6
- package/dist/{pi-embedded-CgPTEqlB.js → pi-embedded-Ctrt2kz0.js} +8759 -9600
- package/dist/{pi-embedded-helpers-DYH6OWft.js → pi-embedded-helpers-CMKLjW6X.js} +68 -9
- package/dist/{pi-embedded-helpers-y1_Se0yq.js → pi-embedded-helpers-CUzTc1v6.js} +241 -24
- package/dist/{pi-embedded-helpers-Bkpd4fTr.js → pi-embedded-helpers-DfwkwPYD.js} +67 -8
- package/dist/{pi-embedded-helpers-BbWRSUnc.js → pi-embedded-helpers-WDwx99UA.js} +347 -32
- package/dist/{pi-tools.policy-akYsGFiA.js → pi-tools.policy-BpsROZbz.js} +4 -4
- package/dist/{plugin-auto-enable-lZwe2yX5.js → plugin-auto-enable-Bqhc3w5n.js} +5 -5
- package/dist/{plugin-auto-enable-AOSOJ-v1.js → plugin-auto-enable-PW76g_PJ.js} +5 -5
- package/dist/plugin-sdk/agents/bash-process-registry.d.ts +1 -0
- package/dist/plugin-sdk/agents/models-config.providers.d.ts +10 -0
- package/dist/plugin-sdk/agents/pi-embedded-helpers/errors.d.ts +5 -1
- package/dist/plugin-sdk/agents/pi-embedded-helpers.d.ts +1 -1
- package/dist/plugin-sdk/agents/pi-embedded-runner/google.d.ts +1 -0
- package/dist/plugin-sdk/agents/pi-embedded-runner/run/params.d.ts +2 -0
- package/dist/plugin-sdk/agents/pi-embedded-runner/run/payloads.d.ts +1 -0
- package/dist/plugin-sdk/agents/pi-embedded-runner/run/types.d.ts +2 -0
- package/dist/plugin-sdk/agents/pi-embedded-runner/types.d.ts +15 -0
- package/dist/plugin-sdk/agents/pi-embedded-subscribe.handlers.tools.d.ts +1 -1
- package/dist/plugin-sdk/agents/pi-embedded-subscribe.handlers.types.d.ts +2 -0
- package/dist/plugin-sdk/agents/pi-embedded-subscribe.types.d.ts +2 -0
- package/dist/plugin-sdk/agents/session-tool-result-guard-wrapper.d.ts +2 -0
- package/dist/plugin-sdk/agents/session-tool-result-guard.d.ts +4 -0
- package/dist/plugin-sdk/agents/tools/agent-step.d.ts +3 -0
- package/dist/plugin-sdk/agents/tools/browser-tool.schema.d.ts +1 -1
- package/dist/plugin-sdk/agents/tools/web-search.d.ts +10 -1
- package/dist/plugin-sdk/agents/usage.d.ts +1 -0
- package/dist/plugin-sdk/auto-reply/heartbeat.d.ts +1 -1
- package/dist/plugin-sdk/auto-reply/reply/get-reply-directives.d.ts +1 -0
- package/dist/plugin-sdk/auto-reply/reply/mentions.d.ts +1 -0
- package/dist/plugin-sdk/auto-reply/reply/model-selection.d.ts +3 -0
- package/dist/plugin-sdk/auto-reply/reply/reply-reference.d.ts +1 -1
- package/dist/plugin-sdk/auto-reply/reply/session-run-accounting.d.ts +11 -0
- package/dist/plugin-sdk/auto-reply/reply/session-usage.d.ts +8 -0
- package/dist/plugin-sdk/auto-reply/types.d.ts +2 -0
- package/dist/plugin-sdk/browser/control-auth.d.ts +13 -0
- package/dist/plugin-sdk/channels/plugins/onboarding/signal.d.ts +1 -0
- package/dist/plugin-sdk/cli/prompt.d.ts +1 -0
- package/dist/plugin-sdk/commands/agent/types.d.ts +2 -0
- package/dist/plugin-sdk/commands/onboard-types.d.ts +7 -1
- package/dist/plugin-sdk/config/sessions/paths.d.ts +7 -2
- package/dist/plugin-sdk/config/types.agents.d.ts +2 -0
- package/dist/plugin-sdk/config/types.discord.d.ts +5 -0
- package/dist/plugin-sdk/config/types.gateway.d.ts +15 -0
- package/dist/plugin-sdk/config/types.hooks.d.ts +15 -0
- package/dist/plugin-sdk/config/types.memory.d.ts +2 -0
- package/dist/plugin-sdk/config/zod-schema.agents.d.ts +1 -0
- package/dist/plugin-sdk/config/zod-schema.d.ts +13 -1
- package/dist/plugin-sdk/config/zod-schema.hooks.d.ts +1 -1
- package/dist/plugin-sdk/config/zod-schema.providers-core.d.ts +9 -0
- package/dist/plugin-sdk/config/zod-schema.providers.d.ts +4 -0
- package/dist/plugin-sdk/cron/service/jobs.d.ts +8 -0
- package/dist/plugin-sdk/cron/service/state.d.ts +1 -0
- package/dist/plugin-sdk/cron/types.d.ts +2 -0
- package/dist/plugin-sdk/discord/monitor/allow-list.d.ts +15 -0
- package/dist/plugin-sdk/discord/send.types.d.ts +5 -0
- package/dist/plugin-sdk/gateway/auth.d.ts +36 -0
- package/dist/plugin-sdk/gateway/protocol/index.d.ts +0 -3
- package/dist/plugin-sdk/gateway/protocol/schema/agent.d.ts +7 -1
- package/dist/plugin-sdk/gateway/session-utils.fs.d.ts +3 -1
- package/dist/plugin-sdk/index.js +935 -660
- package/dist/plugin-sdk/infra/binaries.d.ts +3 -0
- package/dist/plugin-sdk/infra/heartbeat-active-hours.d.ts +5 -0
- package/dist/plugin-sdk/infra/heartbeat-runner.d.ts +1 -0
- package/dist/plugin-sdk/infra/net/fetch-guard.d.ts +1 -0
- package/dist/plugin-sdk/infra/net/ssrf.d.ts +1 -0
- package/dist/plugin-sdk/infra/tailscale.d.ts +34 -0
- package/dist/plugin-sdk/infra/tmp-openclaw-dir.d.ts +10 -0
- package/dist/plugin-sdk/logging/console.d.ts +1 -0
- package/dist/plugin-sdk/logging/logger.d.ts +1 -1
- package/dist/plugin-sdk/logging/state.d.ts +1 -0
- package/dist/plugin-sdk/markdown/ir.d.ts +1 -1
- package/dist/plugin-sdk/markdown/whatsapp.d.ts +14 -0
- package/dist/plugin-sdk/media/input-files.d.ts +5 -0
- package/dist/plugin-sdk/media-understanding/audio-preflight.d.ts +16 -0
- package/dist/plugin-sdk/media-understanding/types.d.ts +1 -0
- package/dist/plugin-sdk/memory/backend-config.d.ts +2 -1
- package/dist/plugin-sdk/memory/qmd-manager.d.ts +2 -0
- package/dist/plugin-sdk/memory/qmd-query-parser.d.ts +8 -0
- package/dist/plugin-sdk/process/command-queue.d.ts +16 -0
- package/dist/plugin-sdk/routing/resolve-route.d.ts +3 -1
- package/dist/plugin-sdk/security/external-content.d.ts +1 -1
- package/dist/plugin-sdk/security/secret-equal.d.ts +1 -0
- package/dist/plugin-sdk/sessions/input-provenance.d.ts +16 -0
- package/dist/plugin-sdk/signal/monitor/event-handler.types.d.ts +8 -0
- package/dist/plugin-sdk/signal/monitor/mentions.d.ts +2 -0
- package/dist/plugin-sdk/slack/monitor/commands.d.ts +5 -0
- package/dist/plugin-sdk/telegram/bot-message-context.d.ts +2 -1
- package/dist/plugin-sdk/telegram/send.d.ts +3 -0
- package/dist/plugin-sdk/web/media.d.ts +2 -0
- package/dist/{plugins-Db5BiELK.js → plugins-4Hqd1WGf.js} +3 -3
- package/dist/{plugins-CNaHNND_.js → plugins-X7d_tfTE.js} +4 -4
- package/dist/{plugins-cli-8G-hQPCu.js → plugins-cli-Bgku3EGj.js} +253 -44
- package/dist/{plugins-cli-CDiocaDE.js → plugins-cli-CVToH3if.js} +257 -48
- package/dist/{ports-BeebfNCb.js → ports-qkt29rdC.js} +2 -2
- package/dist/{program-0Cj9YxRN.js → program-Cf7lkBur.js} +82 -80
- package/dist/{progress-DIQJt9Va.js → progress-C9kngsTD.js} +1 -1
- package/dist/{progress-Da1ehW-x.js → progress-DWqhRakV.js} +1 -1
- package/dist/{prompt-style-Dc0C5HC9.js → prompt-style-BFH5D5LN.js} +1 -1
- package/dist/{prompt-style-CjQRlDx4.js → prompt-style-CIbmaxSa.js} +1 -1
- package/dist/{pw-ai-C43wv1ZF.js → pw-ai-8mdv3h-d.js} +7 -6
- package/dist/{pw-ai-COWYvUfG.js → pw-ai-CM1IsSgZ.js} +6 -6
- package/dist/{pw-ai-BxJ-KCIy.js → pw-ai-FGoRVblI.js} +5 -6
- package/dist/{pw-ai-CsvaObGM.js → pw-ai-sS1fRKW_.js} +3 -3
- package/dist/{qmd-manager-CpsjQyaZ.js → qmd-manager-C67Fc8aN.js} +79 -26
- package/dist/{qmd-manager-C9YWFeG6.js → qmd-manager-CXVbfg99.js} +81 -26
- package/dist/{qmd-manager-C02E8ixK.js → qmd-manager-RMRE8Tqt.js} +81 -26
- package/dist/{qmd-manager-BzY2LQTT.js → qmd-manager-pyc_MTIe.js} +78 -23
- package/dist/{register.subclis-DUkirdHn.js → register.subclis-C02e4zuJ.js} +29 -29
- package/dist/{reply--b7BsXGP.js → reply-DICXkh_C.js} +7289 -8455
- package/dist/{routes-DUkEKAc1.js → routes-CmOI1hIH.js} +29 -11
- package/dist/{routes-B4QQiFju.js → routes-DewK5tq2.js} +29 -12
- package/dist/{rpc-CuMtxrRT.js → rpc-DHr30euf.js} +3 -3
- package/dist/{rpc-Blt6MJ4F.js → rpc-T300F8zI.js} +3 -3
- package/dist/{run-main-XZcPA23b.js → run-main-C5wpthq1.js} +84 -82
- package/dist/runner-CY0nmVme.js +1886 -0
- package/dist/runner-Cfm5nTMc.js +1785 -0
- package/dist/runner-D_dujMod.js +1886 -0
- package/dist/runner-DrGYLH5K.js +1785 -0
- package/dist/{sandbox-Aks-9EcZ.js → sandbox-BKYnhYQH.js} +24 -17
- package/dist/{sandbox-DqUO2K83.js → sandbox-Bhjnh1Xg.js} +23 -16
- package/dist/{sandbox-cli-C99Thxi8.js → sandbox-cli-DBsAjZJN.js} +21 -21
- package/dist/{sandbox-cli-CJqRM4V6.js → sandbox-cli-rV9LtFeu.js} +21 -21
- package/dist/{security-cli-iqYLMOz3.js → security-cli-BIwJM_rs.js} +27 -27
- package/dist/{security-cli-DW3lCz-o.js → security-cli-BRjny8Yu.js} +27 -27
- package/dist/{server-context-fX4xiYRh.js → server-context-BGpGs3qd.js} +7 -7
- package/dist/{server-context-8Qt35QdF.js → server-context-Cl0U0vE3.js} +7 -7
- package/dist/{server-node-events-CHWXfb_T.js → server-node-events-CBfTbiTA.js} +48 -44
- package/dist/{server-node-events-BzrEnKLX.js → server-node-events-QCvh8EgI.js} +45 -41
- package/dist/{service-Cd4BxKuo.js → service--nPk7DvT.js} +8 -4
- package/dist/{service-DDPRbf8a.js → service-99RDXwX4.js} +8 -4
- package/dist/{service-audit-CCFxuvKs.js → service-audit-DnLmRGQt.js} +4 -4
- package/dist/{service-audit-x6jCN-6a.js → service-audit-ckBaRCVC.js} +4 -4
- package/dist/{session-cost-usage-CcCEQNuc.js → session-cost-usage-D7HuoSSD.js} +12 -10
- package/dist/{session-cost-usage-PvyVZz-g.js → session-cost-usage-D9hHANWI.js} +12 -10
- package/dist/{shared-ILguacOr.js → shared-Bs4vduG4.js} +3 -3
- package/dist/{shared-CagUDdmp.js → shared-CEY5IkwG.js} +3 -3
- package/dist/{shared-gOyV38rM.js → shared-DRohONn_.js} +4 -4
- package/dist/{shared-BDk_zC9p.js → shared-ICqOZibV.js} +4 -4
- package/dist/{skill-scanner-C_fQzVDu.js → skill-scanner-CucvxYhu.js} +1 -1
- package/dist/{skill-scanner-DrVEHfC6.js → skill-scanner-rHMtUHtP.js} +1 -1
- package/dist/{skills-D5UZZZSY.js → skills-DRjfSQT3.js} +141 -6
- package/dist/{skills-ccAgQ3Ad.js → skills-DprQj9X2.js} +142 -7
- package/dist/{skills-cli-DQilTG3n.js → skills-cli-9WO-C55s.js} +12 -12
- package/dist/{skills-cli-ggyLBtAY.js → skills-cli-B9eej-EW.js} +13 -13
- package/dist/{skills-status-BosMnzIs.js → skills-status-5U3P3YfJ.js} +3 -3
- package/dist/{skills-status-DjtPPMnY.js → skills-status-TDIgVd1K.js} +2 -2
- package/dist/{sqlite-B7FPASCO.js → sqlite-BINzs1U0.js} +2 -2
- package/dist/{sqlite-Btrgi7-j.js → sqlite-D4w5TejA.js} +3 -3
- package/dist/{sqlite-BrQ9tw8B.js → sqlite-DRRHmlug.js} +3 -3
- package/dist/{sqlite-HepBVDoX.js → sqlite-F6PGkEm1.js} +2 -2
- package/dist/{status-BByCntWS.js → status-BKGkKC_v.js} +3 -3
- package/dist/{status-Dt7RE_Yy.js → status-CiHtHdaa.js} +4 -4
- package/dist/{status-zfL4Yej7.js → status-DDWoOpeB.js} +37 -37
- package/dist/{subsystem-Bh1Y_6Uv.js → subsystem-BoExtIHo.js} +52 -17
- package/dist/{system-cli-DwuUkdkH.js → system-cli-B6lr60Io.js} +14 -14
- package/dist/{system-cli-Clqsx8U5.js → system-cli-CprW9G3h.js} +14 -14
- package/dist/{systemd-BEWwfwn0.js → systemd-C0VZriGM.js} +3 -3
- package/dist/{systemd-D6wTPnHi.js → systemd-DrmBtJ5T.js} +3 -3
- package/dist/{systemd-hints-zi4ohCOY.js → systemd-hints-DZtXiVHa.js} +1 -1
- package/dist/{systemd-linger-CDo2UbHM.js → systemd-linger-NC2kl1SC.js} +2 -2
- package/dist/{systemd-linger-BxjTrgoH.js → systemd-linger-xdn3BdPh.js} +2 -2
- package/dist/{table-DEnmtvl5.js → table-B8dx3v4v.js} +2 -2
- package/dist/{table-cCoGqLsk.js → table-CwulTLQp.js} +1 -1
- package/dist/{tool-display-DskiU8Kt.js → tool-display-CZRIDMRm.js} +2 -2
- package/dist/{tool-display-o-dDAlqF.js → tool-display-ClRud3pg.js} +2 -2
- package/dist/{tui-BdJWZdto.js → tui-CVTQn-dC.js} +14 -13
- package/dist/{tui-Bc7XUQGP.js → tui-Lu8FdrlK.js} +13 -14
- package/dist/{tui-cli-BGYh0UL0.js → tui-cli-BLpTj1X9.js} +27 -27
- package/dist/{tui-cli-D3n-O9zB.js → tui-cli-BLx5kL2I.js} +26 -26
- package/dist/{tui-formatters-CA85v4U2.js → tui-formatters-CNySEfJN.js} +6 -6
- package/dist/{tui-formatters-C3NarH24.js → tui-formatters-DePhZK3J.js} +6 -6
- package/dist/{update-JB16aPIY.js → update-DHVxMTpQ.js} +3 -3
- package/dist/{update-Ct9sqJC_.js → update-DU1geolI.js} +3 -3
- package/dist/{update-cli-wWKDS3cm.js → update-cli-C0hUvJWK.js} +89 -71
- package/dist/{update-cli-DDXp_N9B.js → update-cli-Wb1GB3rL.js} +88 -70
- package/dist/{update-runner-ChTf6O6p.js → update-runner--ixK4J3W.js} +11 -11
- package/dist/{update-runner-CmE6cHdn.js → update-runner-7Qa1T9y6.js} +10 -10
- package/dist/{utils-Dk86IbEs.js → utils-BLJAc3ZV.js} +1 -1
- package/dist/{utils-es4ygvQ-.js → utils-Cd9QdCHh.js} +1 -1
- package/dist/{webhooks-cli-CVIE9TtX.js → webhooks-cli-DgcMy7RG.js} +12 -12
- package/dist/{webhooks-cli-BmKSiQQC.js → webhooks-cli-aVzUcJY9.js} +11 -11
- package/dist/{widearea-dns-2ah0bkAj.js → widearea-dns-BaIgNEhY.js} +3 -3
- package/dist/{widearea-dns-CMIG6-74.js → widearea-dns-DzuRdwk5.js} +3 -3
- package/dist/{ws-DtDKpbLR.js → ws-CHCQHs0F.js} +1 -1
- package/dist/{ws-log-BP3z_g6Z.js → ws-log-CIXbLCka.js} +1 -1
- package/dist/{ws-log-D7MkvKhg.js → ws-log-DcQFZByi.js} +2 -2
- package/dist/{wsl-Cwo7X0Un.js → wsl-BUOkxKJu.js} +2 -2
- package/docs/assets/install-script.svg +1 -0
- package/docs/automation/hooks.md +1 -38
- package/docs/automation/webhook.md +43 -2
- package/docs/channels/discord.md +389 -381
- package/docs/channels/imessage.md +229 -218
- package/docs/channels/slack.md +294 -415
- package/docs/channels/telegram.md +401 -505
- package/docs/channels/whatsapp.md +338 -310
- package/docs/ci.md +0 -12
- package/docs/cli/hooks.md +1 -14
- package/docs/cli/index.md +6 -1
- package/docs/cli/logs.md +4 -0
- package/docs/cli/onboard.md +30 -0
- package/docs/cli/plugins.md +20 -1
- package/docs/cli/security.md +1 -0
- package/docs/concepts/memory.md +7 -4
- package/docs/concepts/session-tool.md +1 -0
- package/docs/docs.json +11 -11
- package/docs/gateway/configuration-examples.md +9 -2
- package/docs/gateway/configuration-reference.md +2329 -0
- package/docs/gateway/configuration.md +338 -3304
- package/docs/gateway/index.md +162 -238
- package/docs/gateway/openresponses-http-api.md +15 -0
- package/docs/gateway/security/index.md +3 -0
- package/docs/help/faq.md +9 -0
- package/docs/install/hetzner.md +21 -0
- package/docs/install/installer.md +20 -0
- package/docs/nodes/audio.md +19 -0
- package/docs/platforms/mac/release.md +7 -7
- package/docs/providers/glm.md +3 -3
- package/docs/providers/index.md +1 -0
- package/docs/providers/litellm.md +153 -0
- package/docs/providers/zai.md +2 -2
- package/docs/reference/templates/AGENTS.md +26 -26
- package/docs/reference/templates/HEARTBEAT.md +31 -2
- package/docs/reference/templates/SOUL.md +14 -8
- package/docs/reference/transcript-hygiene.md +18 -0
- package/docs/start/getting-started.md +5 -0
- package/docs/start/wizard-cli-automation.md +17 -0
- package/docs/start/wizard-cli-reference.md +12 -0
- package/docs/tools/browser.md +6 -0
- package/docs/zh-CN/automation/hooks.md +1 -38
- package/docs/zh-CN/cli/hooks.md +1 -14
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/bluebubbles/src/monitor.test.ts +40 -28
- package/extensions/bluebubbles/src/monitor.ts +0 -4
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +10 -10
- package/extensions/discord/package.json +1 -1
- package/extensions/feishu/package.json +2 -5
- package/extensions/feishu/src/bot.checkBotMentioned.test.ts +64 -0
- package/extensions/feishu/src/bot.ts +1 -1
- package/extensions/feishu/src/channel.test.ts +48 -0
- package/extensions/feishu/src/channel.ts +1 -3
- package/extensions/feishu/src/config-schema.ts +6 -0
- package/extensions/feishu/src/docx.ts +14 -4
- package/extensions/feishu/src/media.test.ts +151 -0
- package/extensions/feishu/src/media.ts +27 -13
- package/extensions/feishu/src/reply-dispatcher.test.ts +116 -0
- package/extensions/feishu/src/reply-dispatcher.ts +124 -67
- package/extensions/feishu/src/streaming-card.ts +223 -0
- package/extensions/feishu/src/targets.test.ts +16 -0
- package/extensions/feishu/src/targets.ts +1 -1
- package/extensions/google-antigravity-auth/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/googlechat/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/irc/src/client.ts +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/lobster/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +6 -0
- package/extensions/matrix/package.json +2 -2
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +1 -1
- package/extensions/memory-lancedb/index.ts +6 -2
- package/extensions/memory-lancedb/package.json +2 -2
- package/extensions/minimax-portal-auth/index.ts +7 -5
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +6 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +6 -0
- package/extensions/nostr/package.json +2 -2
- package/extensions/open-prose/package.json +1 -1
- package/extensions/signal/package.json +1 -1
- package/extensions/slack/package.json +1 -1
- package/extensions/telegram/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +6 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +6 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/voice-call/src/media-stream.ts +7 -1
- package/extensions/voice-call/src/providers/twilio.test.ts +5 -3
- package/extensions/voice-call/src/providers/twilio.ts +12 -1
- package/extensions/whatsapp/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +6 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +6 -0
- package/extensions/zalouser/package.json +1 -1
- package/package.json +26 -22
- package/dist/auth-BcNHFK-i.js +0 -184
- package/dist/auth-BvIPpm7G.js +0 -184
- package/dist/boolean-M-esQJt6.js +0 -30
- package/dist/bundled/soul-evil/HOOK.md +0 -71
- package/dist/bundled/soul-evil/handler.js +0 -194
- package/dist/cli-DJbWJ9aB.js +0 -89
- package/dist/config-CI7EpvlP.js +0 -15
- package/dist/control-ui/assets/index-CnB9IO4a.js.map +0 -1
- package/dist/date-time-c6HTX6IW.js +0 -187
- package/dist/frontmatter-xwTm0734.js +0 -105
- package/dist/parse-duration-De_tAQSe.js +0 -24
- package/dist/session-key-nXYQSv-a.js +0 -167
- package/dist/utils-dp_OM900.js +0 -476
- package/docs/hooks/soul-evil.md +0 -69
- package/docs/zh-CN/hooks/soul-evil.md +0 -72
- /package/dist/{archive-CXhvR9nU.js → archive-beaSfAzA.js} +0 -0
- /package/dist/{brew-BIrWdDps.js → brew-BUIxHEkn.js} +0 -0
- /package/dist/{brew-B7YK4ZoL.js → brew-ROHf0-Xp.js} +0 -0
- /package/dist/{cli-utils-PlLcDZlM.js → cli-utils-CRhVAaLV.js} +0 -0
- /package/dist/{cli-utils-R-ECs5cY.js → cli-utils-LcHOt63h.js} +0 -0
- /package/dist/{command-format-BUxhT1xL.js → command-format-qUVxzqYm.js} +0 -0
- /package/dist/{constants-CNTiY-ZN.js → constants-BvQ6S8j5.js} +0 -0
- /package/dist/{constants-DuoCkWRh.js → constants-JPeoOZnw.js} +0 -0
- /package/dist/{errors-D3tYRJWG.js → errors-B91HIDPD.js} +0 -0
- /package/dist/{errors-B0eT3jVv.js → errors-Bv81hF2P.js} +0 -0
- /package/dist/{errors-x4NYs-1P.js → errors-DjZBTJJ3.js} +0 -0
- /package/dist/{exec-approvals-DGPTjO0N.js → exec-approvals-Cb4ZLukq.js} +0 -0
- /package/dist/{exec-approvals-DhmKpiIo.js → exec-approvals-DQ8TVVmj.js} +0 -0
- /package/dist/{format-CaxeRcue.js → format-CNU-Zkrz.js} +0 -0
- /package/dist/{format-DLOJPZmo.js → format-DcfK-dwd.js} +0 -0
- /package/dist/{format-duration-Be5Z7JdJ.js → format-duration-84n6_DgO.js} +0 -0
- /package/dist/{format-duration-CEmFWLyX.js → format-duration-Bo9zNKwO.js} +0 -0
- /package/dist/{format-relative-79_Y1n2Y.js → format-relative-CZOlQ2pA.js} +0 -0
- /package/dist/{format-relative-Db7eqEu8.js → format-relative-cegC_FF5.js} +0 -0
- /package/dist/{github-copilot-token-C9IJh2Pn.js → github-copilot-token-DkiRbJdR.js} +0 -0
- /package/dist/{helpers-CQI-5xS9.js → helpers-8O7IVGO-.js} +0 -0
- /package/dist/{helpers-CRzoyyXS.js → helpers-D_jqdWkd.js} +0 -0
- /package/dist/{helpers-C89IG08W.js → helpers-HyeZXsnu.js} +0 -0
- /package/dist/{is-main-WWuz28Ip.js → is-main-BWoXGz7p.js} +0 -0
- /package/dist/{logging-BzvBIA3Y.js → logging-fywhKCmE.js} +0 -0
- /package/dist/{nodes-screen-lykd2cny.js → nodes-screen-CdCWeiwy.js} +0 -0
- /package/dist/{parse-Cjiudy6x.js → parse-Bw0oH-rT.js} +0 -0
- /package/dist/{parse-DqAvJRIf.js → parse-ioZhOtha.js} +0 -0
- /package/dist/{parse-log-line-CUrpqe1w.js → parse-log-line-BoDqomM4.js} +0 -0
- /package/dist/{parse-log-line-D2UGw0wR.js → parse-log-line-DPxH1XZx.js} +0 -0
- /package/dist/{parse-timeout-DFSPLxpY.js → parse-timeout-D1XX_zN_.js} +0 -0
- /package/dist/{parse-timeout-DV8NQQWk.js → parse-timeout-DMW-z4Iz.js} +0 -0
- /package/dist/{pi-model-discovery-CV2V1HHz.js → pi-model-discovery-DqgqUyAv.js} +0 -0
- /package/dist/{pi-model-discovery-DzFOAbQt.js → pi-model-discovery-EwKVHlZB.js} +0 -0
- /package/dist/{prompts--d-6l5Ln.js → prompts-Bg96reub.js} +0 -0
- /package/dist/{redact-DAKeu7PA.js → redact-BRsnXqwD.js} +0 -0
- /package/dist/{redact-DuEEf1p1.js → redact-Br9GfacZ.js} +0 -0
- /package/dist/{redact-BOIof271.js → redact-BrXLgslJ.js} +0 -0
- /package/dist/{status-Cv36yYdi.js → status-BRZfQbJ2.js} +0 -0
- /package/dist/{status-Drziap9H.js → status-CoAy6bEC.js} +0 -0
- /package/dist/{systemd-hints-CH4pbCFD.js → systemd-hints-CXNtLw9Q.js} +0 -0
- /package/dist/{tailnet-DGRSvYuQ.js → tailnet-DATIFSsY.js} +0 -0
- /package/dist/{transcript-events-BlIONGVn.js → transcript-events-BHS7QoRl.js} +0 -0
- /package/dist/{transcript-events-C1hdue6u.js → transcript-events-Bp7fGnwv.js} +0 -0
- /package/dist/{transcript-events-CZ8CG4ht.js → transcript-events-BtNd-j6q.js} +0 -0
- /package/dist/{usage-format-6Uar63S0.js → usage-format-C4JfTbSp.js} +0 -0
- /package/dist/{usage-format-hd37en6b.js → usage-format-CpORtVCG.js} +0 -0
package/docs/channels/discord.md
CHANGED
|
@@ -7,21 +7,32 @@ title: "Discord"
|
|
|
7
7
|
|
|
8
8
|
# Discord (Bot API)
|
|
9
9
|
|
|
10
|
-
Status: ready for
|
|
10
|
+
Status: ready for DMs and guild channels via the official Discord gateway.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
<CardGroup cols={3}>
|
|
13
|
+
<Card title="Pairing" icon="link" href="/channels/pairing">
|
|
14
|
+
Discord DMs default to pairing mode.
|
|
15
|
+
</Card>
|
|
16
|
+
<Card title="Slash commands" icon="terminal" href="/tools/slash-commands">
|
|
17
|
+
Native command behavior and command catalog.
|
|
18
|
+
</Card>
|
|
19
|
+
<Card title="Channel troubleshooting" icon="wrench" href="/channels/troubleshooting">
|
|
20
|
+
Cross-channel diagnostics and repair flow.
|
|
21
|
+
</Card>
|
|
22
|
+
</CardGroup>
|
|
13
23
|
|
|
14
|
-
|
|
15
|
-
2. In the Discord app settings, enable **Message Content Intent** (and **Server Members Intent** if you plan to use allowlists or name lookups).
|
|
16
|
-
3. Set the token for OpenClaw:
|
|
17
|
-
- Env: `DISCORD_BOT_TOKEN=...`
|
|
18
|
-
- Or config: `channels.discord.token: "..."`.
|
|
19
|
-
- If both are set, config takes precedence (env fallback is default-account only).
|
|
20
|
-
4. Invite the bot to your server with message permissions (create a private server if you just want DMs).
|
|
21
|
-
5. Start the gateway.
|
|
22
|
-
6. DM access is pairing by default; approve the pairing code on first contact.
|
|
24
|
+
## Quick setup
|
|
23
25
|
|
|
24
|
-
|
|
26
|
+
<Steps>
|
|
27
|
+
<Step title="Create a Discord bot and enable intents">
|
|
28
|
+
Create an application in the Discord Developer Portal, add a bot, then enable:
|
|
29
|
+
|
|
30
|
+
- **Message Content Intent**
|
|
31
|
+
- **Server Members Intent** (required for role allowlists and role-based routing; recommended for name-to-ID allowlist matching)
|
|
32
|
+
|
|
33
|
+
</Step>
|
|
34
|
+
|
|
35
|
+
<Step title="Configure token">
|
|
25
36
|
|
|
26
37
|
```json5
|
|
27
38
|
{
|
|
@@ -34,342 +45,293 @@ Minimal config:
|
|
|
34
45
|
}
|
|
35
46
|
```
|
|
36
47
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
- Talk to OpenClaw via Discord DMs or guild channels.
|
|
40
|
-
- Direct chats collapse into the agent's main session (default `agent:main:main`); guild channels stay isolated as `agent:<agentId>:discord:channel:<channelId>` (display names use `discord:<guildSlug>#<channelSlug>`).
|
|
41
|
-
- Group DMs are ignored by default; enable via `channels.discord.dm.groupEnabled` and optionally restrict by `channels.discord.dm.groupChannels`.
|
|
42
|
-
- Keep routing deterministic: replies always go back to the channel they arrived on.
|
|
43
|
-
|
|
44
|
-
## How it works
|
|
45
|
-
|
|
46
|
-
1. Create a Discord application → Bot, enable the intents you need (DMs + guild messages + message content), and grab the bot token.
|
|
47
|
-
2. Invite the bot to your server with the permissions required to read/send messages where you want to use it.
|
|
48
|
-
3. Configure OpenClaw with `channels.discord.token` (or `DISCORD_BOT_TOKEN` as a fallback).
|
|
49
|
-
4. Run the gateway; it auto-starts the Discord channel when a token is available (config first, env fallback) and `channels.discord.enabled` is not `false`.
|
|
50
|
-
- If you prefer env vars, set `DISCORD_BOT_TOKEN` (a config block is optional).
|
|
51
|
-
5. Direct chats: use `user:<id>` (or a `<@id>` mention) when delivering; all turns land in the shared `main` session. Bare numeric IDs are ambiguous and rejected.
|
|
52
|
-
6. Guild channels: use `channel:<channelId>` for delivery. Mentions are required by default and can be set per guild or per channel.
|
|
53
|
-
7. Direct chats: secure by default via `channels.discord.dm.policy` (default: `"pairing"`). Unknown senders get a pairing code (expires after 1 hour); approve via `openclaw pairing approve discord <code>`.
|
|
54
|
-
- To keep old “open to anyone” behavior: set `channels.discord.dm.policy="open"` and `channels.discord.dm.allowFrom=["*"]`.
|
|
55
|
-
- To hard-allowlist: set `channels.discord.dm.policy="allowlist"` and list senders in `channels.discord.dm.allowFrom`.
|
|
56
|
-
- To ignore all DMs: set `channels.discord.dm.enabled=false` or `channels.discord.dm.policy="disabled"`.
|
|
57
|
-
8. Group DMs are ignored by default; enable via `channels.discord.dm.groupEnabled` and optionally restrict by `channels.discord.dm.groupChannels`.
|
|
58
|
-
9. Optional guild rules: set `channels.discord.guilds` keyed by guild id (preferred) or slug, with per-channel rules.
|
|
59
|
-
10. Optional native commands: `commands.native` defaults to `"auto"` (on for Discord/Telegram, off for Slack). Override with `channels.discord.commands.native: true|false|"auto"`; `false` clears previously registered commands. Text commands are controlled by `commands.text` and must be sent as standalone `/...` messages. Use `commands.useAccessGroups: false` to bypass access-group checks for commands.
|
|
60
|
-
- Full command list + config: [Slash commands](/tools/slash-commands)
|
|
61
|
-
11. Optional guild context history: set `channels.discord.historyLimit` (default 20, falls back to `messages.groupChat.historyLimit`) to include the last N guild messages as context when replying to a mention. Set `0` to disable.
|
|
62
|
-
12. Reactions: the agent can trigger reactions via the `discord` tool (gated by `channels.discord.actions.*`).
|
|
63
|
-
- Reaction removal semantics: see [/tools/reactions](/tools/reactions).
|
|
64
|
-
- The `discord` tool is only exposed when the current channel is Discord.
|
|
65
|
-
13. Native commands use isolated session keys (`agent:<agentId>:discord:slash:<userId>`) rather than the shared `main` session.
|
|
66
|
-
|
|
67
|
-
Note: Name → id resolution uses guild member search and requires Server Members Intent; if the bot can’t search members, use ids or `<@id>` mentions.
|
|
68
|
-
Note: Slugs are lowercase with spaces replaced by `-`. Channel names are slugged without the leading `#`.
|
|
69
|
-
Note: Guild context `[from:]` lines include `author.tag` + `id` to make ping-ready replies easy.
|
|
70
|
-
|
|
71
|
-
## Config writes
|
|
72
|
-
|
|
73
|
-
By default, Discord is allowed to write config updates triggered by `/config set|unset` (requires `commands.config: true`).
|
|
74
|
-
|
|
75
|
-
Disable with:
|
|
48
|
+
Env fallback for the default account:
|
|
76
49
|
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
channels: { discord: { configWrites: false } },
|
|
80
|
-
}
|
|
50
|
+
```bash
|
|
51
|
+
DISCORD_BOT_TOKEN=...
|
|
81
52
|
```
|
|
82
53
|
|
|
83
|
-
|
|
54
|
+
</Step>
|
|
84
55
|
|
|
85
|
-
|
|
56
|
+
<Step title="Invite the bot and start gateway">
|
|
57
|
+
Invite the bot to your server with message permissions.
|
|
86
58
|
|
|
87
|
-
|
|
59
|
+
```bash
|
|
60
|
+
openclaw gateway
|
|
61
|
+
```
|
|
88
62
|
|
|
89
|
-
|
|
90
|
-
2. In your app:
|
|
91
|
-
- **Bot** → **Add Bot**
|
|
92
|
-
- Copy the **Bot Token** (this is what you put in `DISCORD_BOT_TOKEN`)
|
|
63
|
+
</Step>
|
|
93
64
|
|
|
94
|
-
|
|
65
|
+
<Step title="Approve first DM pairing">
|
|
95
66
|
|
|
96
|
-
|
|
67
|
+
```bash
|
|
68
|
+
openclaw pairing list discord
|
|
69
|
+
openclaw pairing approve discord <CODE>
|
|
70
|
+
```
|
|
97
71
|
|
|
98
|
-
|
|
72
|
+
Pairing codes expire after 1 hour.
|
|
99
73
|
|
|
100
|
-
|
|
101
|
-
|
|
74
|
+
</Step>
|
|
75
|
+
</Steps>
|
|
102
76
|
|
|
103
|
-
|
|
77
|
+
<Note>
|
|
78
|
+
Token resolution is account-aware. Config token values win over env fallback. `DISCORD_BOT_TOKEN` is only used for the default account.
|
|
79
|
+
</Note>
|
|
104
80
|
|
|
105
|
-
|
|
81
|
+
## Runtime model
|
|
106
82
|
|
|
107
|
-
|
|
83
|
+
- Gateway owns the Discord connection.
|
|
84
|
+
- Reply routing is deterministic: Discord inbound replies back to Discord.
|
|
85
|
+
- By default (`session.dmScope=main`), direct chats share the agent main session (`agent:main:main`).
|
|
86
|
+
- Guild channels are isolated session keys (`agent:<agentId>:discord:channel:<channelId>`).
|
|
87
|
+
- Group DMs are ignored by default (`channels.discord.dm.groupEnabled=false`).
|
|
88
|
+
- Native slash commands run in isolated command sessions (`agent:<agentId>:discord:slash:<userId>`), while still carrying `CommandTargetSessionKey` to the routed conversation session.
|
|
108
89
|
|
|
109
|
-
|
|
90
|
+
## Access control and routing
|
|
110
91
|
|
|
111
|
-
|
|
112
|
-
|
|
92
|
+
<Tabs>
|
|
93
|
+
<Tab title="DM policy">
|
|
94
|
+
`channels.discord.dm.policy` controls DM access:
|
|
113
95
|
|
|
114
|
-
|
|
96
|
+
- `pairing` (default)
|
|
97
|
+
- `allowlist`
|
|
98
|
+
- `open` (requires `channels.discord.dm.allowFrom` to include `"*"`)
|
|
99
|
+
- `disabled`
|
|
115
100
|
|
|
116
|
-
|
|
117
|
-
- ✅ Send Messages
|
|
118
|
-
- ✅ Read Message History
|
|
119
|
-
- ✅ Embed Links
|
|
120
|
-
- ✅ Attach Files
|
|
121
|
-
- ✅ Add Reactions (optional but recommended)
|
|
122
|
-
- ✅ Use External Emojis / Stickers (optional; only if you want them)
|
|
101
|
+
If DM policy is not open, unknown users are blocked (or prompted for pairing in `pairing` mode).
|
|
123
102
|
|
|
124
|
-
|
|
103
|
+
DM target format for delivery:
|
|
125
104
|
|
|
126
|
-
|
|
105
|
+
- `user:<id>`
|
|
106
|
+
- `<@id>` mention
|
|
127
107
|
|
|
128
|
-
|
|
108
|
+
Bare numeric IDs are ambiguous and rejected unless an explicit user/channel target kind is provided.
|
|
129
109
|
|
|
130
|
-
|
|
110
|
+
</Tab>
|
|
131
111
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
- Server name → **Copy Server ID** (guild id)
|
|
135
|
-
- Channel (e.g. `#help`) → **Copy Channel ID**
|
|
136
|
-
- Your user → **Copy User ID**
|
|
112
|
+
<Tab title="Guild policy">
|
|
113
|
+
Guild handling is controlled by `channels.discord.groupPolicy`:
|
|
137
114
|
|
|
138
|
-
|
|
115
|
+
- `open`
|
|
116
|
+
- `allowlist`
|
|
117
|
+
- `disabled`
|
|
139
118
|
|
|
140
|
-
|
|
119
|
+
Secure baseline when `channels.discord` exists is `allowlist`.
|
|
141
120
|
|
|
142
|
-
|
|
121
|
+
`allowlist` behavior:
|
|
143
122
|
|
|
144
|
-
- `
|
|
123
|
+
- guild must match `channels.discord.guilds` (`id` preferred, slug accepted)
|
|
124
|
+
- optional sender allowlists: `users` (IDs or names) and `roles` (role IDs only); if either is configured, senders are allowed when they match `users` OR `roles`
|
|
125
|
+
- if a guild has `channels` configured, non-listed channels are denied
|
|
126
|
+
- if a guild has no `channels` block, all channels in that allowlisted guild are allowed
|
|
145
127
|
|
|
146
|
-
|
|
128
|
+
Example:
|
|
147
129
|
|
|
148
130
|
```json5
|
|
149
131
|
{
|
|
150
132
|
channels: {
|
|
151
133
|
discord: {
|
|
152
|
-
|
|
153
|
-
|
|
134
|
+
groupPolicy: "allowlist",
|
|
135
|
+
guilds: {
|
|
136
|
+
"123456789012345678": {
|
|
137
|
+
requireMention: true,
|
|
138
|
+
users: ["987654321098765432"],
|
|
139
|
+
roles: ["123456789012345678"],
|
|
140
|
+
channels: {
|
|
141
|
+
general: { allow: true },
|
|
142
|
+
help: { allow: true, requireMention: true },
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
},
|
|
154
146
|
},
|
|
155
147
|
},
|
|
156
148
|
}
|
|
157
149
|
```
|
|
158
150
|
|
|
159
|
-
|
|
151
|
+
If you only set `DISCORD_BOT_TOKEN` and do not create a `channels.discord` block, runtime fallback is `groupPolicy="open"` (with a warning in logs).
|
|
152
|
+
|
|
153
|
+
</Tab>
|
|
154
|
+
|
|
155
|
+
<Tab title="Mentions and group DMs">
|
|
156
|
+
Guild messages are mention-gated by default.
|
|
157
|
+
|
|
158
|
+
Mention detection includes:
|
|
159
|
+
|
|
160
|
+
- explicit bot mention
|
|
161
|
+
- configured mention patterns (`agents.list[].groupChat.mentionPatterns`, fallback `messages.groupChat.mentionPatterns`)
|
|
162
|
+
- implicit reply-to-bot behavior in supported cases
|
|
163
|
+
|
|
164
|
+
`requireMention` is configured per guild/channel (`channels.discord.guilds...`).
|
|
165
|
+
|
|
166
|
+
Group DMs:
|
|
167
|
+
|
|
168
|
+
- default: ignored (`dm.groupEnabled=false`)
|
|
169
|
+
- optional allowlist via `dm.groupChannels` (channel IDs or slugs)
|
|
170
|
+
|
|
171
|
+
</Tab>
|
|
172
|
+
</Tabs>
|
|
160
173
|
|
|
161
|
-
|
|
174
|
+
### Role-based agent routing
|
|
162
175
|
|
|
163
|
-
|
|
176
|
+
Use `bindings[].match.roles` to route Discord guild members to different agents by role ID. Role-based bindings accept role IDs only and are evaluated after peer or parent-peer bindings and before guild-only bindings.
|
|
164
177
|
|
|
165
178
|
```json5
|
|
166
179
|
{
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
requireMention: true,
|
|
175
|
-
channels: {
|
|
176
|
-
help: { allow: true, requireMention: true },
|
|
177
|
-
},
|
|
178
|
-
},
|
|
180
|
+
bindings: [
|
|
181
|
+
{
|
|
182
|
+
agentId: "opus",
|
|
183
|
+
match: {
|
|
184
|
+
channel: "discord",
|
|
185
|
+
guildId: "123456789012345678",
|
|
186
|
+
roles: ["111111111111111111"],
|
|
179
187
|
},
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
agentId: "sonnet",
|
|
191
|
+
match: {
|
|
192
|
+
channel: "discord",
|
|
193
|
+
guildId: "123456789012345678",
|
|
185
194
|
},
|
|
186
195
|
},
|
|
187
|
-
|
|
196
|
+
],
|
|
188
197
|
}
|
|
189
198
|
```
|
|
190
199
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
-
|
|
224
|
-
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
-
|
|
235
|
-
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
##
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
200
|
+
## Developer Portal setup
|
|
201
|
+
|
|
202
|
+
<AccordionGroup>
|
|
203
|
+
<Accordion title="Create app and bot">
|
|
204
|
+
|
|
205
|
+
1. Discord Developer Portal -> **Applications** -> **New Application**
|
|
206
|
+
2. **Bot** -> **Add Bot**
|
|
207
|
+
3. Copy bot token
|
|
208
|
+
|
|
209
|
+
</Accordion>
|
|
210
|
+
|
|
211
|
+
<Accordion title="Privileged intents">
|
|
212
|
+
In **Bot -> Privileged Gateway Intents**, enable:
|
|
213
|
+
|
|
214
|
+
- Message Content Intent
|
|
215
|
+
- Server Members Intent (recommended)
|
|
216
|
+
|
|
217
|
+
Presence intent is optional and only required if you want to receive presence updates. Setting bot presence (`setPresence`) does not require enabling presence updates for members.
|
|
218
|
+
|
|
219
|
+
</Accordion>
|
|
220
|
+
|
|
221
|
+
<Accordion title="OAuth scopes and baseline permissions">
|
|
222
|
+
OAuth URL generator:
|
|
223
|
+
|
|
224
|
+
- scopes: `bot`, `applications.commands`
|
|
225
|
+
|
|
226
|
+
Typical baseline permissions:
|
|
227
|
+
|
|
228
|
+
- View Channels
|
|
229
|
+
- Send Messages
|
|
230
|
+
- Read Message History
|
|
231
|
+
- Embed Links
|
|
232
|
+
- Attach Files
|
|
233
|
+
- Add Reactions (optional)
|
|
234
|
+
|
|
235
|
+
Avoid `Administrator` unless explicitly needed.
|
|
236
|
+
|
|
237
|
+
</Accordion>
|
|
238
|
+
|
|
239
|
+
<Accordion title="Copy IDs">
|
|
240
|
+
Enable Discord Developer Mode, then copy:
|
|
241
|
+
|
|
242
|
+
- server ID
|
|
243
|
+
- channel ID
|
|
244
|
+
- user ID
|
|
245
|
+
|
|
246
|
+
Prefer numeric IDs in OpenClaw config for reliable audits and probes.
|
|
247
|
+
|
|
248
|
+
</Accordion>
|
|
249
|
+
</AccordionGroup>
|
|
250
|
+
|
|
251
|
+
## Native commands and command auth
|
|
252
|
+
|
|
253
|
+
- `commands.native` defaults to `"auto"` and is enabled for Discord.
|
|
254
|
+
- Per-channel override: `channels.discord.commands.native`.
|
|
255
|
+
- `commands.native=false` explicitly clears previously registered Discord native commands.
|
|
256
|
+
- Native command auth uses the same Discord allowlists/policies as normal message handling.
|
|
257
|
+
- Commands may still be visible in Discord UI for users who are not authorized; execution still enforces OpenClaw auth and returns "not authorized".
|
|
258
|
+
|
|
259
|
+
See [Slash commands](/tools/slash-commands) for command catalog and behavior.
|
|
260
|
+
|
|
261
|
+
## Feature details
|
|
262
|
+
|
|
263
|
+
<AccordionGroup>
|
|
264
|
+
<Accordion title="Reply tags and native replies">
|
|
265
|
+
Discord supports reply tags in agent output:
|
|
266
|
+
|
|
267
|
+
- `[[reply_to_current]]`
|
|
268
|
+
- `[[reply_to:<id>]]`
|
|
269
|
+
|
|
270
|
+
Controlled by `channels.discord.replyToMode`:
|
|
271
|
+
|
|
272
|
+
- `off` (default)
|
|
273
|
+
- `first`
|
|
274
|
+
- `all`
|
|
275
|
+
|
|
276
|
+
Message IDs are surfaced in context/history so agents can target specific messages.
|
|
277
|
+
|
|
278
|
+
</Accordion>
|
|
279
|
+
|
|
280
|
+
<Accordion title="History, context, and thread behavior">
|
|
281
|
+
Guild history context:
|
|
282
|
+
|
|
283
|
+
- `channels.discord.historyLimit` default `20`
|
|
284
|
+
- fallback: `messages.groupChat.historyLimit`
|
|
285
|
+
- `0` disables
|
|
286
|
+
|
|
287
|
+
DM history controls:
|
|
288
|
+
|
|
289
|
+
- `channels.discord.dmHistoryLimit`
|
|
290
|
+
- `channels.discord.dms["<user_id>"].historyLimit`
|
|
291
|
+
|
|
292
|
+
Thread behavior:
|
|
293
|
+
|
|
294
|
+
- Discord threads are routed as channel sessions
|
|
295
|
+
- parent thread metadata can be used for parent-session linkage
|
|
296
|
+
- thread config inherits parent channel config unless a thread-specific entry exists
|
|
297
|
+
|
|
298
|
+
Channel topics are injected as **untrusted** context (not as system prompt).
|
|
299
|
+
|
|
300
|
+
</Accordion>
|
|
301
|
+
|
|
302
|
+
<Accordion title="Reaction notifications">
|
|
303
|
+
Per-guild reaction notification mode:
|
|
304
|
+
|
|
305
|
+
- `off`
|
|
306
|
+
- `own` (default)
|
|
307
|
+
- `all`
|
|
308
|
+
- `allowlist` (uses `guilds.<id>.users`)
|
|
309
|
+
|
|
310
|
+
Reaction events are turned into system events and attached to the routed Discord session.
|
|
311
|
+
|
|
312
|
+
</Accordion>
|
|
313
|
+
|
|
314
|
+
<Accordion title="Config writes">
|
|
315
|
+
Channel-initiated config writes are enabled by default.
|
|
316
|
+
|
|
317
|
+
This affects `/config set|unset` flows (when command features are enabled).
|
|
318
|
+
|
|
319
|
+
Disable:
|
|
247
320
|
|
|
248
321
|
```json5
|
|
249
322
|
{
|
|
250
323
|
channels: {
|
|
251
324
|
discord: {
|
|
252
|
-
|
|
253
|
-
token: "abc.123",
|
|
254
|
-
groupPolicy: "allowlist",
|
|
255
|
-
guilds: {
|
|
256
|
-
"*": {
|
|
257
|
-
channels: {
|
|
258
|
-
general: { allow: true },
|
|
259
|
-
},
|
|
260
|
-
},
|
|
261
|
-
},
|
|
262
|
-
mediaMaxMb: 8,
|
|
263
|
-
actions: {
|
|
264
|
-
reactions: true,
|
|
265
|
-
stickers: true,
|
|
266
|
-
emojiUploads: true,
|
|
267
|
-
stickerUploads: true,
|
|
268
|
-
polls: true,
|
|
269
|
-
permissions: true,
|
|
270
|
-
messages: true,
|
|
271
|
-
threads: true,
|
|
272
|
-
pins: true,
|
|
273
|
-
search: true,
|
|
274
|
-
memberInfo: true,
|
|
275
|
-
roleInfo: true,
|
|
276
|
-
roles: false,
|
|
277
|
-
channelInfo: true,
|
|
278
|
-
channels: true,
|
|
279
|
-
voiceStatus: true,
|
|
280
|
-
events: true,
|
|
281
|
-
moderation: false,
|
|
282
|
-
presence: false,
|
|
283
|
-
},
|
|
284
|
-
replyToMode: "off",
|
|
285
|
-
dm: {
|
|
286
|
-
enabled: true,
|
|
287
|
-
policy: "pairing", // pairing | allowlist | open | disabled
|
|
288
|
-
allowFrom: ["123456789012345678", "steipete"],
|
|
289
|
-
groupEnabled: false,
|
|
290
|
-
groupChannels: ["openclaw-dm"],
|
|
291
|
-
},
|
|
292
|
-
guilds: {
|
|
293
|
-
"*": { requireMention: true },
|
|
294
|
-
"123456789012345678": {
|
|
295
|
-
slug: "friends-of-openclaw",
|
|
296
|
-
requireMention: false,
|
|
297
|
-
reactionNotifications: "own",
|
|
298
|
-
users: ["987654321098765432", "steipete"],
|
|
299
|
-
channels: {
|
|
300
|
-
general: { allow: true },
|
|
301
|
-
help: {
|
|
302
|
-
allow: true,
|
|
303
|
-
requireMention: true,
|
|
304
|
-
users: ["987654321098765432"],
|
|
305
|
-
skills: ["search", "docs"],
|
|
306
|
-
systemPrompt: "Keep answers short.",
|
|
307
|
-
},
|
|
308
|
-
},
|
|
309
|
-
},
|
|
310
|
-
},
|
|
325
|
+
configWrites: false,
|
|
311
326
|
},
|
|
312
327
|
},
|
|
313
328
|
}
|
|
314
329
|
```
|
|
315
330
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
- `dm.enabled`: set `false` to ignore all DMs (default `true`).
|
|
321
|
-
- `dm.policy`: DM access control (`pairing` recommended). `"open"` requires `dm.allowFrom=["*"]`.
|
|
322
|
-
- `dm.allowFrom`: DM allowlist (user ids or names). Used by `dm.policy="allowlist"` and for `dm.policy="open"` validation. The wizard accepts usernames and resolves them to ids when the bot can search members.
|
|
323
|
-
- `dm.groupEnabled`: enable group DMs (default `false`).
|
|
324
|
-
- `dm.groupChannels`: optional allowlist for group DM channel ids or slugs.
|
|
325
|
-
- `groupPolicy`: controls guild channel handling (`open|disabled|allowlist`); `allowlist` requires channel allowlists.
|
|
326
|
-
- `guilds`: per-guild rules keyed by guild id (preferred) or slug.
|
|
327
|
-
- `guilds."*"`: default per-guild settings applied when no explicit entry exists.
|
|
328
|
-
- `guilds.<id>.slug`: optional friendly slug used for display names.
|
|
329
|
-
- `guilds.<id>.users`: optional per-guild user allowlist (ids or names).
|
|
330
|
-
- `guilds.<id>.tools`: optional per-guild tool policy overrides (`allow`/`deny`/`alsoAllow`) used when the channel override is missing.
|
|
331
|
-
- `guilds.<id>.toolsBySender`: optional per-sender tool policy overrides at the guild level (applies when the channel override is missing; `"*"` wildcard supported).
|
|
332
|
-
- `guilds.<id>.channels.<channel>.allow`: allow/deny the channel when `groupPolicy="allowlist"`.
|
|
333
|
-
- `guilds.<id>.channels.<channel>.requireMention`: mention gating for the channel.
|
|
334
|
-
- `guilds.<id>.channels.<channel>.tools`: optional per-channel tool policy overrides (`allow`/`deny`/`alsoAllow`).
|
|
335
|
-
- `guilds.<id>.channels.<channel>.toolsBySender`: optional per-sender tool policy overrides within the channel (`"*"` wildcard supported).
|
|
336
|
-
- `guilds.<id>.channels.<channel>.users`: optional per-channel user allowlist.
|
|
337
|
-
- `guilds.<id>.channels.<channel>.skills`: skill filter (omit = all skills, empty = none).
|
|
338
|
-
- `guilds.<id>.channels.<channel>.systemPrompt`: extra system prompt for the channel. Discord channel topics are injected as **untrusted** context (not system prompt).
|
|
339
|
-
- `guilds.<id>.channels.<channel>.enabled`: set `false` to disable the channel.
|
|
340
|
-
- `guilds.<id>.channels`: channel rules (keys are channel slugs or ids).
|
|
341
|
-
- `guilds.<id>.requireMention`: per-guild mention requirement (overridable per channel).
|
|
342
|
-
- `guilds.<id>.reactionNotifications`: reaction system event mode (`off`, `own`, `all`, `allowlist`).
|
|
343
|
-
- `textChunkLimit`: outbound text chunk size (chars). Default: 2000.
|
|
344
|
-
- `chunkMode`: `length` (default) splits only when exceeding `textChunkLimit`; `newline` splits on blank lines (paragraph boundaries) before length chunking.
|
|
345
|
-
- `maxLinesPerMessage`: soft max line count per message. Default: 17.
|
|
346
|
-
- `mediaMaxMb`: clamp inbound media saved to disk.
|
|
347
|
-
- `historyLimit`: number of recent guild messages to include as context when replying to a mention (default 20; falls back to `messages.groupChat.historyLimit`; `0` disables).
|
|
348
|
-
- `dmHistoryLimit`: DM history limit in user turns. Per-user overrides: `dms["<user_id>"].historyLimit`.
|
|
349
|
-
- `retry`: retry policy for outbound Discord API calls (attempts, minDelayMs, maxDelayMs, jitter).
|
|
350
|
-
- `pluralkit`: resolve PluralKit proxied messages so system members appear as distinct senders.
|
|
351
|
-
- `actions`: per-action tool gates; omit to allow all (set `false` to disable).
|
|
352
|
-
- `reactions` (covers react + read reactions)
|
|
353
|
-
- `stickers`, `emojiUploads`, `stickerUploads`, `polls`, `permissions`, `messages`, `threads`, `pins`, `search`
|
|
354
|
-
- `memberInfo`, `roleInfo`, `channelInfo`, `voiceStatus`, `events`
|
|
355
|
-
- `channels` (create/edit/delete channels + categories + permissions)
|
|
356
|
-
- `roles` (role add/remove, default `false`)
|
|
357
|
-
- `moderation` (timeout/kick/ban, default `false`)
|
|
358
|
-
- `presence` (bot status/activity, default `false`)
|
|
359
|
-
- `execApprovals`: Discord-only exec approval DMs (button UI). Supports `enabled`, `approvers`, `agentFilter`, `sessionFilter`, `cleanupAfterResolve`.
|
|
360
|
-
|
|
361
|
-
Reaction notifications use `guilds.<id>.reactionNotifications`:
|
|
362
|
-
|
|
363
|
-
- `off`: no reaction events.
|
|
364
|
-
- `own`: reactions on the bot's own messages (default).
|
|
365
|
-
- `all`: all reactions on all messages.
|
|
366
|
-
- `allowlist`: reactions from `guilds.<id>.users` on all messages (empty list disables).
|
|
367
|
-
|
|
368
|
-
### PluralKit (PK) support
|
|
369
|
-
|
|
370
|
-
Enable PK lookups so proxied messages resolve to the underlying system + member.
|
|
371
|
-
When enabled, OpenClaw uses the member identity for allowlists and labels the
|
|
372
|
-
sender as `Member (PK:System)` to avoid accidental Discord pings.
|
|
331
|
+
</Accordion>
|
|
332
|
+
|
|
333
|
+
<Accordion title="PluralKit support">
|
|
334
|
+
Enable PluralKit resolution to map proxied messages to system member identity:
|
|
373
335
|
|
|
374
336
|
```json5
|
|
375
337
|
{
|
|
@@ -377,100 +339,146 @@ sender as `Member (PK:System)` to avoid accidental Discord pings.
|
|
|
377
339
|
discord: {
|
|
378
340
|
pluralkit: {
|
|
379
341
|
enabled: true,
|
|
380
|
-
token: "pk_live_...", // optional;
|
|
342
|
+
token: "pk_live_...", // optional; needed for private systems
|
|
381
343
|
},
|
|
382
344
|
},
|
|
383
345
|
},
|
|
384
346
|
}
|
|
385
347
|
```
|
|
386
348
|
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
-
|
|
390
|
-
-
|
|
391
|
-
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
-
|
|
440
|
-
-
|
|
441
|
-
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
- `
|
|
466
|
-
- `
|
|
467
|
-
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
349
|
+
Notes:
|
|
350
|
+
|
|
351
|
+
- allowlists can use `pk:<memberId>`
|
|
352
|
+
- member display names are matched by name/slug
|
|
353
|
+
- lookups use original message ID and are time-window constrained
|
|
354
|
+
- if lookup fails, proxied messages are treated as bot messages and dropped unless `allowBots=true`
|
|
355
|
+
|
|
356
|
+
</Accordion>
|
|
357
|
+
|
|
358
|
+
<Accordion title="Exec approvals in Discord">
|
|
359
|
+
Discord supports button-based exec approvals in DMs.
|
|
360
|
+
|
|
361
|
+
Config path:
|
|
362
|
+
|
|
363
|
+
- `channels.discord.execApprovals.enabled`
|
|
364
|
+
- `channels.discord.execApprovals.approvers`
|
|
365
|
+
- `agentFilter`, `sessionFilter`, `cleanupAfterResolve`
|
|
366
|
+
|
|
367
|
+
If approvals fail with unknown approval IDs, verify approver list and feature enablement.
|
|
368
|
+
|
|
369
|
+
Related docs: [Exec approvals](/tools/exec-approvals)
|
|
370
|
+
|
|
371
|
+
</Accordion>
|
|
372
|
+
</AccordionGroup>
|
|
373
|
+
|
|
374
|
+
## Tools and action gates
|
|
375
|
+
|
|
376
|
+
Discord message actions include messaging, channel admin, moderation, presence, and metadata actions.
|
|
377
|
+
|
|
378
|
+
Core examples:
|
|
379
|
+
|
|
380
|
+
- messaging: `sendMessage`, `readMessages`, `editMessage`, `deleteMessage`, `threadReply`
|
|
381
|
+
- reactions: `react`, `reactions`, `emojiList`
|
|
382
|
+
- moderation: `timeout`, `kick`, `ban`
|
|
383
|
+
- presence: `setPresence`
|
|
384
|
+
|
|
385
|
+
Action gates live under `channels.discord.actions.*`.
|
|
386
|
+
|
|
387
|
+
Default gate behavior:
|
|
388
|
+
|
|
389
|
+
| Action group | Default |
|
|
390
|
+
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- |
|
|
391
|
+
| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | enabled |
|
|
392
|
+
| roles | disabled |
|
|
393
|
+
| moderation | disabled |
|
|
394
|
+
| presence | disabled |
|
|
395
|
+
|
|
396
|
+
## Troubleshooting
|
|
397
|
+
|
|
398
|
+
<AccordionGroup>
|
|
399
|
+
<Accordion title="Used disallowed intents or bot sees no guild messages">
|
|
400
|
+
|
|
401
|
+
- enable Message Content Intent
|
|
402
|
+
- enable Server Members Intent when you depend on user/member resolution
|
|
403
|
+
- restart gateway after changing intents
|
|
404
|
+
|
|
405
|
+
</Accordion>
|
|
406
|
+
|
|
407
|
+
<Accordion title="Guild messages blocked unexpectedly">
|
|
408
|
+
|
|
409
|
+
- verify `groupPolicy`
|
|
410
|
+
- verify guild allowlist under `channels.discord.guilds`
|
|
411
|
+
- if guild `channels` map exists, only listed channels are allowed
|
|
412
|
+
- verify `requireMention` behavior and mention patterns
|
|
413
|
+
|
|
414
|
+
Useful checks:
|
|
415
|
+
|
|
416
|
+
```bash
|
|
417
|
+
openclaw doctor
|
|
418
|
+
openclaw channels status --probe
|
|
419
|
+
openclaw logs --follow
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
</Accordion>
|
|
423
|
+
|
|
424
|
+
<Accordion title="Require mention false but still blocked">
|
|
425
|
+
Common causes:
|
|
426
|
+
|
|
427
|
+
- `groupPolicy="allowlist"` without matching guild/channel allowlist
|
|
428
|
+
- `requireMention` configured in the wrong place (must be under `channels.discord.guilds` or channel entry)
|
|
429
|
+
- sender blocked by guild/channel `users` allowlist
|
|
430
|
+
|
|
431
|
+
</Accordion>
|
|
432
|
+
|
|
433
|
+
<Accordion title="Permissions audit mismatches">
|
|
434
|
+
`channels status --probe` permission checks only work for numeric channel IDs.
|
|
435
|
+
|
|
436
|
+
If you use slug keys, runtime matching can still work, but probe cannot fully verify permissions.
|
|
437
|
+
|
|
438
|
+
</Accordion>
|
|
439
|
+
|
|
440
|
+
<Accordion title="DM and pairing issues">
|
|
441
|
+
|
|
442
|
+
- DM disabled: `channels.discord.dm.enabled=false`
|
|
443
|
+
- DM policy disabled: `channels.discord.dm.policy="disabled"`
|
|
444
|
+
- awaiting pairing approval in `pairing` mode
|
|
445
|
+
|
|
446
|
+
</Accordion>
|
|
447
|
+
|
|
448
|
+
<Accordion title="Bot to bot loops">
|
|
449
|
+
By default bot-authored messages are ignored.
|
|
450
|
+
|
|
451
|
+
If you set `channels.discord.allowBots=true`, use strict mention and allowlist rules to avoid loop behavior.
|
|
452
|
+
|
|
453
|
+
</Accordion>
|
|
454
|
+
</AccordionGroup>
|
|
455
|
+
|
|
456
|
+
## Configuration reference pointers
|
|
457
|
+
|
|
458
|
+
Primary reference:
|
|
459
|
+
|
|
460
|
+
- [Configuration reference - Discord](/gateway/configuration-reference#discord)
|
|
461
|
+
|
|
462
|
+
High-signal Discord fields:
|
|
463
|
+
|
|
464
|
+
- startup/auth: `enabled`, `token`, `accounts.*`, `allowBots`
|
|
465
|
+
- policy: `groupPolicy`, `dm.*`, `guilds.*`, `guilds.*.channels.*`
|
|
466
|
+
- command: `commands.native`, `commands.useAccessGroups`, `configWrites`
|
|
467
|
+
- reply/history: `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit`
|
|
468
|
+
- delivery: `textChunkLimit`, `chunkMode`, `maxLinesPerMessage`
|
|
469
|
+
- media/retry: `mediaMaxMb`, `retry`
|
|
470
|
+
- actions: `actions.*`
|
|
471
|
+
- features: `pluralkit`, `execApprovals`, `intents`, `agentComponents`, `heartbeat`, `responsePrefix`
|
|
472
|
+
|
|
473
|
+
## Safety and operations
|
|
474
|
+
|
|
475
|
+
- Treat bot tokens as secrets (`DISCORD_BOT_TOKEN` preferred in supervised environments).
|
|
476
|
+
- Grant least-privilege Discord permissions.
|
|
477
|
+
- If command deploy/state is stale, restart gateway and re-check with `openclaw channels status --probe`.
|
|
478
|
+
|
|
479
|
+
## Related
|
|
480
|
+
|
|
481
|
+
- [Pairing](/channels/pairing)
|
|
482
|
+
- [Channel routing](/channels/channel-routing)
|
|
483
|
+
- [Troubleshooting](/channels/troubleshooting)
|
|
484
|
+
- [Slash commands](/tools/slash-commands)
|