durar-ai 2026.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (571) hide show
  1. package/CHANGELOG.md +5497 -0
  2. package/LICENSE +21 -0
  3. package/README.md +614 -0
  4. package/assets/avatar-placeholder.svg +19 -0
  5. package/assets/chrome-extension/icons/icon128.png +0 -0
  6. package/assets/chrome-extension/icons/icon16.png +0 -0
  7. package/assets/chrome-extension/icons/icon32.png +0 -0
  8. package/assets/chrome-extension/icons/icon48.png +0 -0
  9. package/assets/dmg-background-small.png +0 -0
  10. package/assets/dmg-background.png +0 -0
  11. package/docs/.i18n/README.md +72 -0
  12. package/docs/.i18n/ar-navigation.json +18 -0
  13. package/docs/.i18n/de-navigation.json +18 -0
  14. package/docs/.i18n/es-navigation.json +18 -0
  15. package/docs/.i18n/fr-navigation.json +18 -0
  16. package/docs/.i18n/glossary.ar.json +5 -0
  17. package/docs/.i18n/glossary.de.json +5 -0
  18. package/docs/.i18n/glossary.es.json +5 -0
  19. package/docs/.i18n/glossary.fr.json +5 -0
  20. package/docs/.i18n/glossary.id.json +5 -0
  21. package/docs/.i18n/glossary.it.json +5 -0
  22. package/docs/.i18n/glossary.ja-JP.json +14 -0
  23. package/docs/.i18n/glossary.ko.json +5 -0
  24. package/docs/.i18n/glossary.pl.json +5 -0
  25. package/docs/.i18n/glossary.pt-BR.json +5 -0
  26. package/docs/.i18n/glossary.tr.json +5 -0
  27. package/docs/.i18n/glossary.zh-CN.json +358 -0
  28. package/docs/.i18n/id-navigation.json +18 -0
  29. package/docs/.i18n/it-navigation.json +18 -0
  30. package/docs/.i18n/ja-navigation.json +18 -0
  31. package/docs/.i18n/ko-navigation.json +18 -0
  32. package/docs/.i18n/pl-navigation.json +18 -0
  33. package/docs/.i18n/pt-BR-navigation.json +18 -0
  34. package/docs/.i18n/tr-navigation.json +18 -0
  35. package/docs/.i18n/zh-Hans-navigation.json +544 -0
  36. package/docs/assets/install-script.svg +1 -0
  37. package/docs/assets/macos-onboarding/01-macos-warning.jpeg +0 -0
  38. package/docs/assets/macos-onboarding/02-local-networks.jpeg +0 -0
  39. package/docs/assets/macos-onboarding/03-security-notice.png +0 -0
  40. package/docs/assets/macos-onboarding/04-choose-gateway.png +0 -0
  41. package/docs/assets/macos-onboarding/05-permissions.png +0 -0
  42. package/docs/assets/openclaw-logo-text-dark.png +0 -0
  43. package/docs/assets/openclaw-logo-text-dark.svg +418 -0
  44. package/docs/assets/openclaw-logo-text.png +0 -0
  45. package/docs/assets/openclaw-logo-text.svg +418 -0
  46. package/docs/assets/pixel-lobster.svg +60 -0
  47. package/docs/assets/showcase/agents-ui.jpg +0 -0
  48. package/docs/assets/showcase/bambu-cli.png +0 -0
  49. package/docs/assets/showcase/codexmonitor.png +0 -0
  50. package/docs/assets/showcase/gohome-grafana.png +0 -0
  51. package/docs/assets/showcase/ios-testflight.jpg +0 -0
  52. package/docs/assets/showcase/oura-health.png +0 -0
  53. package/docs/assets/showcase/padel-cli.svg +11 -0
  54. package/docs/assets/showcase/padel-screenshot.jpg +0 -0
  55. package/docs/assets/showcase/papla-tts.jpg +0 -0
  56. package/docs/assets/showcase/pr-review-telegram.jpg +0 -0
  57. package/docs/assets/showcase/roborock-screenshot.jpg +0 -0
  58. package/docs/assets/showcase/roborock-status.svg +13 -0
  59. package/docs/assets/showcase/roof-camera-sky.jpg +0 -0
  60. package/docs/assets/showcase/snag.png +0 -0
  61. package/docs/assets/showcase/tesco-shop.jpg +0 -0
  62. package/docs/assets/showcase/wienerlinien.png +0 -0
  63. package/docs/assets/showcase/wine-cellar-skill.jpg +0 -0
  64. package/docs/assets/showcase/winix-air-purifier.jpg +0 -0
  65. package/docs/assets/showcase/xuezh-pronunciation.jpeg +0 -0
  66. package/docs/assets/sponsors/blacksmith-light.svg +14 -0
  67. package/docs/assets/sponsors/blacksmith.svg +14 -0
  68. package/docs/assets/sponsors/convex-light.svg +16 -0
  69. package/docs/assets/sponsors/convex.svg +16 -0
  70. package/docs/assets/sponsors/github-light.svg +3 -0
  71. package/docs/assets/sponsors/github.svg +3 -0
  72. package/docs/assets/sponsors/nvidia-dark.svg +9 -0
  73. package/docs/assets/sponsors/nvidia.svg +9 -0
  74. package/docs/assets/sponsors/openai-light.svg +3 -0
  75. package/docs/assets/sponsors/openai.svg +3 -0
  76. package/docs/assets/sponsors/vercel-light.svg +5 -0
  77. package/docs/assets/sponsors/vercel.svg +5 -0
  78. package/docs/auth-credential-semantics.md +80 -0
  79. package/docs/automation/auth-monitoring.md +8 -0
  80. package/docs/automation/clawflow.md +8 -0
  81. package/docs/automation/cron-jobs.md +410 -0
  82. package/docs/automation/cron-vs-heartbeat.md +8 -0
  83. package/docs/automation/gmail-pubsub.md +8 -0
  84. package/docs/automation/hooks.md +303 -0
  85. package/docs/automation/index.md +115 -0
  86. package/docs/automation/poll.md +8 -0
  87. package/docs/automation/standing-orders.md +254 -0
  88. package/docs/automation/taskflow.md +82 -0
  89. package/docs/automation/tasks.md +323 -0
  90. package/docs/automation/troubleshooting.md +8 -0
  91. package/docs/automation/webhook.md +8 -0
  92. package/docs/brave-search.md +103 -0
  93. package/docs/channels/bluebubbles.md +435 -0
  94. package/docs/channels/broadcast-groups.md +442 -0
  95. package/docs/channels/channel-routing.md +139 -0
  96. package/docs/channels/discord.md +1254 -0
  97. package/docs/channels/feishu.md +793 -0
  98. package/docs/channels/googlechat.md +270 -0
  99. package/docs/channels/group-messages.md +84 -0
  100. package/docs/channels/groups.md +410 -0
  101. package/docs/channels/imessage.md +427 -0
  102. package/docs/channels/index.md +50 -0
  103. package/docs/channels/irc.md +252 -0
  104. package/docs/channels/line.md +225 -0
  105. package/docs/channels/location.md +56 -0
  106. package/docs/channels/matrix.md +869 -0
  107. package/docs/channels/mattermost.md +472 -0
  108. package/docs/channels/msteams.md +805 -0
  109. package/docs/channels/nextcloud-talk.md +149 -0
  110. package/docs/channels/nostr.md +252 -0
  111. package/docs/channels/pairing.md +129 -0
  112. package/docs/channels/qqbot.md +193 -0
  113. package/docs/channels/signal.md +337 -0
  114. package/docs/channels/slack.md +681 -0
  115. package/docs/channels/synology-chat.md +185 -0
  116. package/docs/channels/telegram.md +1072 -0
  117. package/docs/channels/tlon.md +290 -0
  118. package/docs/channels/troubleshooting.md +133 -0
  119. package/docs/channels/twitch.md +394 -0
  120. package/docs/channels/whatsapp.md +488 -0
  121. package/docs/channels/zalo.md +254 -0
  122. package/docs/channels/zalouser.md +195 -0
  123. package/docs/ci.md +66 -0
  124. package/docs/cli/acp.md +316 -0
  125. package/docs/cli/agent.md +57 -0
  126. package/docs/cli/agents.md +220 -0
  127. package/docs/cli/approvals.md +136 -0
  128. package/docs/cli/backup.md +84 -0
  129. package/docs/cli/browser.md +233 -0
  130. package/docs/cli/channels.md +131 -0
  131. package/docs/cli/clawbot.md +21 -0
  132. package/docs/cli/completion.md +35 -0
  133. package/docs/cli/config.md +353 -0
  134. package/docs/cli/configure.md +70 -0
  135. package/docs/cli/cron.md +167 -0
  136. package/docs/cli/daemon.md +57 -0
  137. package/docs/cli/dashboard.md +22 -0
  138. package/docs/cli/devices.md +171 -0
  139. package/docs/cli/directory.md +63 -0
  140. package/docs/cli/dns.md +48 -0
  141. package/docs/cli/docs.md +28 -0
  142. package/docs/cli/doctor.md +63 -0
  143. package/docs/cli/flows.md +18 -0
  144. package/docs/cli/gateway.md +307 -0
  145. package/docs/cli/health.md +36 -0
  146. package/docs/cli/hooks.md +337 -0
  147. package/docs/cli/index.md +1836 -0
  148. package/docs/cli/logs.md +59 -0
  149. package/docs/cli/mcp.md +505 -0
  150. package/docs/cli/memory.md +139 -0
  151. package/docs/cli/message.md +300 -0
  152. package/docs/cli/models.md +136 -0
  153. package/docs/cli/node.md +137 -0
  154. package/docs/cli/nodes.md +66 -0
  155. package/docs/cli/onboard.md +171 -0
  156. package/docs/cli/pairing.md +65 -0
  157. package/docs/cli/plugins.md +305 -0
  158. package/docs/cli/qr.md +52 -0
  159. package/docs/cli/reset.md +35 -0
  160. package/docs/cli/sandbox.md +197 -0
  161. package/docs/cli/secrets.md +197 -0
  162. package/docs/cli/security.md +86 -0
  163. package/docs/cli/sessions.md +113 -0
  164. package/docs/cli/setup.md +45 -0
  165. package/docs/cli/skills.md +59 -0
  166. package/docs/cli/status.md +35 -0
  167. package/docs/cli/system.md +71 -0
  168. package/docs/cli/tui.md +30 -0
  169. package/docs/cli/uninstall.md +39 -0
  170. package/docs/cli/update.md +113 -0
  171. package/docs/cli/voicecall.md +34 -0
  172. package/docs/cli/webhooks.md +91 -0
  173. package/docs/concepts/agent-loop.md +168 -0
  174. package/docs/concepts/agent-workspace.md +246 -0
  175. package/docs/concepts/agent.md +129 -0
  176. package/docs/concepts/architecture.md +156 -0
  177. package/docs/concepts/compaction.md +122 -0
  178. package/docs/concepts/context-engine.md +274 -0
  179. package/docs/concepts/context.md +179 -0
  180. package/docs/concepts/delegate-architecture.md +307 -0
  181. package/docs/concepts/dreaming.md +173 -0
  182. package/docs/concepts/features.md +76 -0
  183. package/docs/concepts/markdown-formatting.md +130 -0
  184. package/docs/concepts/memory-builtin.md +105 -0
  185. package/docs/concepts/memory-honcho.md +140 -0
  186. package/docs/concepts/memory-qmd.md +163 -0
  187. package/docs/concepts/memory-search.md +141 -0
  188. package/docs/concepts/memory.md +121 -0
  189. package/docs/concepts/messages.md +161 -0
  190. package/docs/concepts/model-failover.md +349 -0
  191. package/docs/concepts/model-providers.md +799 -0
  192. package/docs/concepts/models.md +255 -0
  193. package/docs/concepts/multi-agent.md +615 -0
  194. package/docs/concepts/oauth.md +225 -0
  195. package/docs/concepts/presence.md +102 -0
  196. package/docs/concepts/queue.md +89 -0
  197. package/docs/concepts/retry.md +69 -0
  198. package/docs/concepts/session-pruning.md +92 -0
  199. package/docs/concepts/session-tool.md +141 -0
  200. package/docs/concepts/session.md +116 -0
  201. package/docs/concepts/soul.md +110 -0
  202. package/docs/concepts/streaming.md +161 -0
  203. package/docs/concepts/system-prompt.md +182 -0
  204. package/docs/concepts/timezone.md +97 -0
  205. package/docs/concepts/typebox.md +307 -0
  206. package/docs/concepts/typing-indicators.md +69 -0
  207. package/docs/concepts/usage-tracking.md +59 -0
  208. package/docs/date-time.md +128 -0
  209. package/docs/debug/node-issue.md +85 -0
  210. package/docs/diagnostics/flags.md +91 -0
  211. package/docs/docs.json +1601 -0
  212. package/docs/gateway/authentication.md +218 -0
  213. package/docs/gateway/background-process.md +131 -0
  214. package/docs/gateway/bonjour.md +179 -0
  215. package/docs/gateway/bridge-protocol.md +89 -0
  216. package/docs/gateway/cli-backends.md +310 -0
  217. package/docs/gateway/configuration-examples.md +631 -0
  218. package/docs/gateway/configuration-reference.md +3618 -0
  219. package/docs/gateway/configuration.md +698 -0
  220. package/docs/gateway/discovery.md +141 -0
  221. package/docs/gateway/doctor.md +494 -0
  222. package/docs/gateway/gateway-lock.md +37 -0
  223. package/docs/gateway/health.md +61 -0
  224. package/docs/gateway/heartbeat.md +443 -0
  225. package/docs/gateway/index.md +367 -0
  226. package/docs/gateway/local-models.md +163 -0
  227. package/docs/gateway/logging.md +113 -0
  228. package/docs/gateway/multiple-gateways.md +120 -0
  229. package/docs/gateway/network-model.md +25 -0
  230. package/docs/gateway/openai-http-api.md +280 -0
  231. package/docs/gateway/openresponses-http-api.md +340 -0
  232. package/docs/gateway/openshell.md +307 -0
  233. package/docs/gateway/pairing.md +138 -0
  234. package/docs/gateway/protocol.md +588 -0
  235. package/docs/gateway/remote-gateway-readme.md +164 -0
  236. package/docs/gateway/remote.md +251 -0
  237. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +141 -0
  238. package/docs/gateway/sandboxing.md +473 -0
  239. package/docs/gateway/secrets-plan-contract.md +116 -0
  240. package/docs/gateway/secrets.md +541 -0
  241. package/docs/gateway/security/index.md +1362 -0
  242. package/docs/gateway/tailscale.md +136 -0
  243. package/docs/gateway/tools-invoke-http-api.md +161 -0
  244. package/docs/gateway/troubleshooting.md +451 -0
  245. package/docs/gateway/trusted-proxy-auth.md +399 -0
  246. package/docs/help/debugging.md +168 -0
  247. package/docs/help/environment.md +165 -0
  248. package/docs/help/faq.md +3244 -0
  249. package/docs/help/index.md +28 -0
  250. package/docs/help/scripts.md +27 -0
  251. package/docs/help/testing.md +640 -0
  252. package/docs/help/troubleshooting.md +372 -0
  253. package/docs/images/configure-model-picker-unsearchable.png +0 -0
  254. package/docs/images/feishu-step2-create-app.png +0 -0
  255. package/docs/images/feishu-step3-credentials.png +0 -0
  256. package/docs/images/feishu-step4-permissions.png +0 -0
  257. package/docs/images/feishu-step5-bot-capability.png +0 -0
  258. package/docs/images/feishu-step6-event-subscription.png +0 -0
  259. package/docs/images/feishu-verification-token.png +0 -0
  260. package/docs/images/groups-flow.svg +52 -0
  261. package/docs/images/mobile-ui-screenshot.png +0 -0
  262. package/docs/index.md +196 -0
  263. package/docs/install/ansible.md +230 -0
  264. package/docs/install/azure.md +311 -0
  265. package/docs/install/bun.md +55 -0
  266. package/docs/install/clawdock.md +106 -0
  267. package/docs/install/development-channels.md +131 -0
  268. package/docs/install/digitalocean.md +129 -0
  269. package/docs/install/docker-vm-runtime.md +142 -0
  270. package/docs/install/docker.md +412 -0
  271. package/docs/install/exe-dev.md +133 -0
  272. package/docs/install/fly.md +504 -0
  273. package/docs/install/gcp.md +412 -0
  274. package/docs/install/hetzner.md +259 -0
  275. package/docs/install/index.md +212 -0
  276. package/docs/install/installer.md +443 -0
  277. package/docs/install/kubernetes.md +192 -0
  278. package/docs/install/macos-vm.md +281 -0
  279. package/docs/install/migrating-matrix.md +349 -0
  280. package/docs/install/migrating.md +112 -0
  281. package/docs/install/nix.md +89 -0
  282. package/docs/install/node.md +144 -0
  283. package/docs/install/northflank.mdx +42 -0
  284. package/docs/install/oracle.md +158 -0
  285. package/docs/install/podman.md +210 -0
  286. package/docs/install/railway.mdx +90 -0
  287. package/docs/install/raspberry-pi.md +159 -0
  288. package/docs/install/render.mdx +165 -0
  289. package/docs/install/uninstall.md +128 -0
  290. package/docs/install/updating.md +142 -0
  291. package/docs/logging.md +389 -0
  292. package/docs/nav-tabs-underline.js +100 -0
  293. package/docs/network.md +69 -0
  294. package/docs/nodes/audio.md +191 -0
  295. package/docs/nodes/camera.md +162 -0
  296. package/docs/nodes/images.md +73 -0
  297. package/docs/nodes/index.md +408 -0
  298. package/docs/nodes/location-command.md +98 -0
  299. package/docs/nodes/media-understanding.md +432 -0
  300. package/docs/nodes/talk.md +92 -0
  301. package/docs/nodes/troubleshooting.md +123 -0
  302. package/docs/nodes/voicewake.md +66 -0
  303. package/docs/perplexity.md +181 -0
  304. package/docs/pi-dev.md +80 -0
  305. package/docs/pi.md +570 -0
  306. package/docs/platforms/android.md +244 -0
  307. package/docs/platforms/digitalocean.md +266 -0
  308. package/docs/platforms/index.md +55 -0
  309. package/docs/platforms/ios.md +223 -0
  310. package/docs/platforms/linux.md +100 -0
  311. package/docs/platforms/mac/bundled-gateway.md +75 -0
  312. package/docs/platforms/mac/canvas.md +125 -0
  313. package/docs/platforms/mac/child-process.md +69 -0
  314. package/docs/platforms/mac/dev-setup.md +107 -0
  315. package/docs/platforms/mac/health.md +34 -0
  316. package/docs/platforms/mac/icon.md +31 -0
  317. package/docs/platforms/mac/logging.md +57 -0
  318. package/docs/platforms/mac/menu-bar.md +81 -0
  319. package/docs/platforms/mac/peekaboo.md +65 -0
  320. package/docs/platforms/mac/permissions.md +50 -0
  321. package/docs/platforms/mac/remote.md +84 -0
  322. package/docs/platforms/mac/signing.md +47 -0
  323. package/docs/platforms/mac/skills.md +40 -0
  324. package/docs/platforms/mac/voice-overlay.md +60 -0
  325. package/docs/platforms/mac/voicewake.md +67 -0
  326. package/docs/platforms/mac/webchat.md +51 -0
  327. package/docs/platforms/mac/xpc.md +61 -0
  328. package/docs/platforms/macos.md +229 -0
  329. package/docs/platforms/oracle.md +305 -0
  330. package/docs/platforms/raspberry-pi.md +420 -0
  331. package/docs/platforms/windows.md +241 -0
  332. package/docs/plugins/agent-tools.md +10 -0
  333. package/docs/plugins/architecture.md +1609 -0
  334. package/docs/plugins/building-extensions.md +10 -0
  335. package/docs/plugins/building-plugins.md +319 -0
  336. package/docs/plugins/bundles.md +292 -0
  337. package/docs/plugins/community.md +149 -0
  338. package/docs/plugins/manifest.md +412 -0
  339. package/docs/plugins/sdk-channel-plugins.md +508 -0
  340. package/docs/plugins/sdk-entrypoints.md +210 -0
  341. package/docs/plugins/sdk-migration.md +359 -0
  342. package/docs/plugins/sdk-overview.md +475 -0
  343. package/docs/plugins/sdk-provider-plugins.md +712 -0
  344. package/docs/plugins/sdk-runtime.md +381 -0
  345. package/docs/plugins/sdk-setup.md +516 -0
  346. package/docs/plugins/sdk-testing.md +263 -0
  347. package/docs/plugins/voice-call.md +466 -0
  348. package/docs/plugins/zalouser.md +78 -0
  349. package/docs/prose.md +134 -0
  350. package/docs/providers/anthropic.md +402 -0
  351. package/docs/providers/bedrock-mantle.md +91 -0
  352. package/docs/providers/bedrock.md +273 -0
  353. package/docs/providers/chutes.md +103 -0
  354. package/docs/providers/claude-max-api-proxy.md +163 -0
  355. package/docs/providers/cloudflare-ai-gateway.md +71 -0
  356. package/docs/providers/deepgram.md +93 -0
  357. package/docs/providers/deepseek.md +53 -0
  358. package/docs/providers/fireworks.md +69 -0
  359. package/docs/providers/github-copilot.md +80 -0
  360. package/docs/providers/glm.md +68 -0
  361. package/docs/providers/google.md +149 -0
  362. package/docs/providers/groq.md +105 -0
  363. package/docs/providers/huggingface.md +193 -0
  364. package/docs/providers/index.md +81 -0
  365. package/docs/providers/kilocode.md +89 -0
  366. package/docs/providers/litellm.md +159 -0
  367. package/docs/providers/minimax.md +281 -0
  368. package/docs/providers/mistral.md +68 -0
  369. package/docs/providers/models.md +56 -0
  370. package/docs/providers/moonshot.md +224 -0
  371. package/docs/providers/nvidia.md +58 -0
  372. package/docs/providers/ollama.md +379 -0
  373. package/docs/providers/openai.md +472 -0
  374. package/docs/providers/opencode-go.md +45 -0
  375. package/docs/providers/opencode.md +68 -0
  376. package/docs/providers/openrouter.md +59 -0
  377. package/docs/providers/perplexity-provider.md +62 -0
  378. package/docs/providers/qianfan.md +90 -0
  379. package/docs/providers/qwen.md +128 -0
  380. package/docs/providers/qwen_modelstudio.md +137 -0
  381. package/docs/providers/sglang.md +115 -0
  382. package/docs/providers/stepfun.md +152 -0
  383. package/docs/providers/synthetic.md +101 -0
  384. package/docs/providers/together.md +70 -0
  385. package/docs/providers/venice.md +282 -0
  386. package/docs/providers/vercel-ai-gateway.md +60 -0
  387. package/docs/providers/vllm.md +103 -0
  388. package/docs/providers/volcengine.md +94 -0
  389. package/docs/providers/xai.md +94 -0
  390. package/docs/providers/xiaomi.md +89 -0
  391. package/docs/providers/zai.md +75 -0
  392. package/docs/reference/AGENTS.default.md +126 -0
  393. package/docs/reference/RELEASING.md +138 -0
  394. package/docs/reference/api-usage-costs.md +198 -0
  395. package/docs/reference/credits.md +30 -0
  396. package/docs/reference/device-models.md +47 -0
  397. package/docs/reference/memory-config.md +421 -0
  398. package/docs/reference/prompt-caching.md +344 -0
  399. package/docs/reference/rpc.md +43 -0
  400. package/docs/reference/secretref-credential-surface.md +148 -0
  401. package/docs/reference/secretref-user-supplied-credentials-matrix.json +607 -0
  402. package/docs/reference/session-management-compaction.md +352 -0
  403. package/docs/reference/templates/AGENTS.dev.md +84 -0
  404. package/docs/reference/templates/AGENTS.md +219 -0
  405. package/docs/reference/templates/BOOT.md +12 -0
  406. package/docs/reference/templates/BOOTSTRAP.md +62 -0
  407. package/docs/reference/templates/CLAUDE.md +1 -0
  408. package/docs/reference/templates/HEARTBEAT.md +14 -0
  409. package/docs/reference/templates/IDENTITY.dev.md +48 -0
  410. package/docs/reference/templates/IDENTITY.md +30 -0
  411. package/docs/reference/templates/SOUL.dev.md +77 -0
  412. package/docs/reference/templates/SOUL.md +45 -0
  413. package/docs/reference/templates/TOOLS.dev.md +25 -0
  414. package/docs/reference/templates/TOOLS.md +47 -0
  415. package/docs/reference/templates/USER.dev.md +19 -0
  416. package/docs/reference/templates/USER.md +24 -0
  417. package/docs/reference/test.md +119 -0
  418. package/docs/reference/token-use.md +197 -0
  419. package/docs/reference/transcript-hygiene.md +151 -0
  420. package/docs/reference/wizard.md +245 -0
  421. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +98 -0
  422. package/docs/security/THREAT-MODEL-ATLAS.md +608 -0
  423. package/docs/security/formal-verification.md +167 -0
  424. package/docs/snippets/plugin-publish/minimal-openclaw.plugin.json +9 -0
  425. package/docs/snippets/plugin-publish/minimal-package.json +16 -0
  426. package/docs/start/bootstrapping.md +41 -0
  427. package/docs/start/docs-directory.md +67 -0
  428. package/docs/start/getting-started.md +148 -0
  429. package/docs/start/hubs.md +199 -0
  430. package/docs/start/lore.md +219 -0
  431. package/docs/start/onboarding-overview.md +69 -0
  432. package/docs/start/onboarding.md +92 -0
  433. package/docs/start/openclaw.md +225 -0
  434. package/docs/start/quickstart.md +22 -0
  435. package/docs/start/setup.md +172 -0
  436. package/docs/start/showcase.md +418 -0
  437. package/docs/start/wizard-cli-automation.md +233 -0
  438. package/docs/start/wizard-cli-reference.md +324 -0
  439. package/docs/start/wizard.md +127 -0
  440. package/docs/style.css +37 -0
  441. package/docs/tools/acp-agents.md +837 -0
  442. package/docs/tools/agent-send.md +100 -0
  443. package/docs/tools/apply-patch.md +52 -0
  444. package/docs/tools/brave-search.md +107 -0
  445. package/docs/tools/browser-linux-troubleshooting.md +145 -0
  446. package/docs/tools/browser-login.md +73 -0
  447. package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +221 -0
  448. package/docs/tools/browser.md +890 -0
  449. package/docs/tools/btw.md +142 -0
  450. package/docs/tools/capability-cookbook.md +119 -0
  451. package/docs/tools/clawhub.md +348 -0
  452. package/docs/tools/code-execution.md +90 -0
  453. package/docs/tools/creating-skills.md +119 -0
  454. package/docs/tools/diffs.md +434 -0
  455. package/docs/tools/duckduckgo-search.md +102 -0
  456. package/docs/tools/elevated.md +116 -0
  457. package/docs/tools/exa-search.md +127 -0
  458. package/docs/tools/exec-approvals.md +635 -0
  459. package/docs/tools/exec.md +237 -0
  460. package/docs/tools/firecrawl.md +147 -0
  461. package/docs/tools/gemini-search.md +98 -0
  462. package/docs/tools/grok-search.md +102 -0
  463. package/docs/tools/image-generation.md +139 -0
  464. package/docs/tools/index.md +174 -0
  465. package/docs/tools/kimi-search.md +98 -0
  466. package/docs/tools/llm-task.md +119 -0
  467. package/docs/tools/lobster.md +348 -0
  468. package/docs/tools/loop-detection.md +100 -0
  469. package/docs/tools/minimax-search.md +99 -0
  470. package/docs/tools/multi-agent-sandbox-tools.md +373 -0
  471. package/docs/tools/ollama-search.md +100 -0
  472. package/docs/tools/pdf.md +176 -0
  473. package/docs/tools/perplexity-search.md +185 -0
  474. package/docs/tools/plugin.md +348 -0
  475. package/docs/tools/reactions.md +78 -0
  476. package/docs/tools/searxng-search.md +132 -0
  477. package/docs/tools/skills-config.md +133 -0
  478. package/docs/tools/skills.md +377 -0
  479. package/docs/tools/slash-commands.md +322 -0
  480. package/docs/tools/subagents.md +341 -0
  481. package/docs/tools/tavily.md +129 -0
  482. package/docs/tools/thinking.md +102 -0
  483. package/docs/tools/tts.md +452 -0
  484. package/docs/tools/web-fetch.md +159 -0
  485. package/docs/tools/web.md +417 -0
  486. package/docs/tts.md +452 -0
  487. package/docs/vps.md +115 -0
  488. package/docs/web/control-ui.md +318 -0
  489. package/docs/web/dashboard.md +93 -0
  490. package/docs/web/index.md +126 -0
  491. package/docs/web/tui.md +176 -0
  492. package/docs/web/webchat.md +77 -0
  493. package/docs/whatsapp-openclaw-ai-zh.jpg +0 -0
  494. package/docs/whatsapp-openclaw.jpg +0 -0
  495. package/durar.mjs +180 -0
  496. package/package.json +1259 -0
  497. package/scripts/npm-runner.mjs +111 -0
  498. package/scripts/postinstall-bundled-plugins.mjs +188 -0
  499. package/skills/1password/SKILL.md +70 -0
  500. package/skills/1password/references/cli-examples.md +29 -0
  501. package/skills/1password/references/get-started.md +17 -0
  502. package/skills/apple-notes/SKILL.md +77 -0
  503. package/skills/apple-reminders/SKILL.md +118 -0
  504. package/skills/bear-notes/SKILL.md +107 -0
  505. package/skills/blogwatcher/SKILL.md +69 -0
  506. package/skills/blucli/SKILL.md +47 -0
  507. package/skills/bluebubbles/SKILL.md +131 -0
  508. package/skills/camsnap/SKILL.md +45 -0
  509. package/skills/canvas/SKILL.md +199 -0
  510. package/skills/clawhub/SKILL.md +77 -0
  511. package/skills/coding-agent/SKILL.md +316 -0
  512. package/skills/discord/SKILL.md +197 -0
  513. package/skills/eightctl/SKILL.md +50 -0
  514. package/skills/gemini/SKILL.md +43 -0
  515. package/skills/gh-issues/SKILL.md +885 -0
  516. package/skills/gifgrep/SKILL.md +79 -0
  517. package/skills/github/SKILL.md +163 -0
  518. package/skills/gog/SKILL.md +116 -0
  519. package/skills/goplaces/SKILL.md +52 -0
  520. package/skills/healthcheck/SKILL.md +245 -0
  521. package/skills/himalaya/SKILL.md +257 -0
  522. package/skills/himalaya/references/configuration.md +184 -0
  523. package/skills/himalaya/references/message-composition.md +199 -0
  524. package/skills/imsg/SKILL.md +122 -0
  525. package/skills/mcporter/SKILL.md +61 -0
  526. package/skills/model-usage/SKILL.md +69 -0
  527. package/skills/model-usage/references/codexbar-cli.md +33 -0
  528. package/skills/model-usage/scripts/model_usage.py +320 -0
  529. package/skills/model-usage/scripts/test_model_usage.py +40 -0
  530. package/skills/nano-pdf/SKILL.md +38 -0
  531. package/skills/node-connect/SKILL.md +142 -0
  532. package/skills/notion/SKILL.md +174 -0
  533. package/skills/obsidian/SKILL.md +81 -0
  534. package/skills/openai-whisper/SKILL.md +38 -0
  535. package/skills/openai-whisper-api/SKILL.md +62 -0
  536. package/skills/openai-whisper-api/scripts/transcribe.sh +88 -0
  537. package/skills/openhue/SKILL.md +112 -0
  538. package/skills/oracle/SKILL.md +125 -0
  539. package/skills/ordercli/SKILL.md +78 -0
  540. package/skills/peekaboo/SKILL.md +190 -0
  541. package/skills/sag/SKILL.md +87 -0
  542. package/skills/session-logs/SKILL.md +151 -0
  543. package/skills/sherpa-onnx-tts/SKILL.md +109 -0
  544. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
  545. package/skills/skill-creator/SKILL.md +372 -0
  546. package/skills/skill-creator/license.txt +202 -0
  547. package/skills/skill-creator/scripts/init_skill.py +378 -0
  548. package/skills/skill-creator/scripts/package_skill.py +139 -0
  549. package/skills/skill-creator/scripts/quick_validate.py +159 -0
  550. package/skills/skill-creator/scripts/test_package_skill.py +160 -0
  551. package/skills/skill-creator/scripts/test_quick_validate.py +72 -0
  552. package/skills/slack/SKILL.md +144 -0
  553. package/skills/songsee/SKILL.md +49 -0
  554. package/skills/sonoscli/SKILL.md +65 -0
  555. package/skills/spotify-player/SKILL.md +64 -0
  556. package/skills/summarize/SKILL.md +87 -0
  557. package/skills/taskflow/SKILL.md +149 -0
  558. package/skills/taskflow/examples/inbox-triage.lobster +33 -0
  559. package/skills/taskflow/examples/pr-intake.lobster +32 -0
  560. package/skills/taskflow-inbox-triage/SKILL.md +119 -0
  561. package/skills/things-mac/SKILL.md +86 -0
  562. package/skills/tmux/SKILL.md +170 -0
  563. package/skills/tmux/scripts/find-sessions.sh +112 -0
  564. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  565. package/skills/trello/SKILL.md +108 -0
  566. package/skills/video-frames/SKILL.md +46 -0
  567. package/skills/video-frames/scripts/frame.sh +81 -0
  568. package/skills/voice-call/SKILL.md +45 -0
  569. package/skills/wacli/SKILL.md +72 -0
  570. package/skills/weather/SKILL.md +129 -0
  571. package/skills/xurl/SKILL.md +461 -0
@@ -0,0 +1,793 @@
1
+ ---
2
+ summary: "Feishu bot overview, features, and configuration"
3
+ read_when:
4
+ - You want to connect a Feishu/Lark bot
5
+ - You are configuring the Feishu channel
6
+ title: Feishu
7
+ ---
8
+
9
+ # Feishu bot
10
+
11
+ Feishu (Lark) is a team chat platform used by companies for messaging and collaboration. This plugin connects Durar to a Feishu/Lark bot using the platform’s WebSocket event subscription so messages can be received without exposing a public webhook URL.
12
+
13
+ ---
14
+
15
+ ## Bundled plugin
16
+
17
+ Feishu ships bundled with current Durar releases, so no separate plugin install
18
+ is required.
19
+
20
+ If you are using an older build or a custom install that does not include bundled
21
+ Feishu, install it manually:
22
+
23
+ ```bash
24
+ Durar plugins install @Durar/feishu
25
+ ```
26
+
27
+ ---
28
+
29
+ ## Quickstart
30
+
31
+ There are two ways to add the Feishu channel:
32
+
33
+ ### Method 1: onboarding (recommended)
34
+
35
+ If you just installed Durar, run onboarding:
36
+
37
+ ```bash
38
+ Durar onboard
39
+ ```
40
+
41
+ The wizard guides you through:
42
+
43
+ 1. Creating a Feishu app and collecting credentials
44
+ 2. Configuring app credentials in Durar
45
+ 3. Starting the gateway
46
+
47
+ ✅ **After configuration**, check gateway status:
48
+
49
+ - `Durar gateway status`
50
+ - `Durar logs --follow`
51
+
52
+ ### Method 2: CLI setup
53
+
54
+ If you already completed initial install, add the channel via CLI:
55
+
56
+ ```bash
57
+ Durar channels add
58
+ ```
59
+
60
+ Choose **Feishu**, then enter the App ID and App Secret.
61
+
62
+ ✅ **After configuration**, manage the gateway:
63
+
64
+ - `Durar gateway status`
65
+ - `Durar gateway restart`
66
+ - `Durar logs --follow`
67
+
68
+ ---
69
+
70
+ ## Step 1: Create a Feishu app
71
+
72
+ ### 1. Open Feishu Open Platform
73
+
74
+ Visit [Feishu Open Platform](https://open.feishu.cn/app) and sign in.
75
+
76
+ Lark (global) tenants should use [https://open.larksuite.com/app](https://open.larksuite.com/app) and set `domain: "lark"` in the Feishu config.
77
+
78
+ ### 2. Create an app
79
+
80
+ 1. Click **Create enterprise app**
81
+ 2. Fill in the app name + description
82
+ 3. Choose an app icon
83
+
84
+ ![Create enterprise app](/images/feishu-step2-create-app.png)
85
+
86
+ ### 3. Copy credentials
87
+
88
+ From **Credentials & Basic Info**, copy:
89
+
90
+ - **App ID** (format: `cli_xxx`)
91
+ - **App Secret**
92
+
93
+ ❗ **Important:** keep the App Secret private.
94
+
95
+ ![Get credentials](/images/feishu-step3-credentials.png)
96
+
97
+ ### 4. Configure permissions
98
+
99
+ On **Permissions**, click **Batch import** and paste:
100
+
101
+ ```json
102
+ {
103
+ "scopes": {
104
+ "tenant": [
105
+ "aily:file:read",
106
+ "aily:file:write",
107
+ "application:application.app_message_stats.overview:readonly",
108
+ "application:application:self_manage",
109
+ "application:bot.menu:write",
110
+ "cardkit:card:read",
111
+ "cardkit:card:write",
112
+ "contact:user.employee_id:readonly",
113
+ "corehr:file:download",
114
+ "event:ip_list",
115
+ "im:chat.access_event.bot_p2p_chat:read",
116
+ "im:chat.members:bot_access",
117
+ "im:message",
118
+ "im:message.group_at_msg:readonly",
119
+ "im:message.p2p_msg:readonly",
120
+ "im:message:readonly",
121
+ "im:message:send_as_bot",
122
+ "im:resource"
123
+ ],
124
+ "user": ["aily:file:read", "aily:file:write", "im:chat.access_event.bot_p2p_chat:read"]
125
+ }
126
+ }
127
+ ```
128
+
129
+ ![Configure permissions](/images/feishu-step4-permissions.png)
130
+
131
+ ### 5. Enable bot capability
132
+
133
+ In **App Capability** > **Bot**:
134
+
135
+ 1. Enable bot capability
136
+ 2. Set the bot name
137
+
138
+ ![Enable bot capability](/images/feishu-step5-bot-capability.png)
139
+
140
+ ### 6. Configure event subscription
141
+
142
+ ⚠️ **Important:** before setting event subscription, make sure:
143
+
144
+ 1. You already ran `Durar channels add` for Feishu
145
+ 2. The gateway is running (`Durar gateway status`)
146
+
147
+ In **Event Subscription**:
148
+
149
+ 1. Choose **Use long connection to receive events** (WebSocket)
150
+ 2. Add the event: `im.message.receive_v1`
151
+ 3. (Optional) For Drive comment workflows, also add: `drive.notice.comment_add_v1`
152
+
153
+ ⚠️ If the gateway is not running, the long-connection setup may fail to save.
154
+
155
+ ![Configure event subscription](/images/feishu-step6-event-subscription.png)
156
+
157
+ ### 7. Publish the app
158
+
159
+ 1. Create a version in **Version Management & Release**
160
+ 2. Submit for review and publish
161
+ 3. Wait for admin approval (enterprise apps usually auto-approve)
162
+
163
+ ---
164
+
165
+ ## Step 2: Configure Durar
166
+
167
+ ### Configure with the wizard (recommended)
168
+
169
+ ```bash
170
+ Durar channels add
171
+ ```
172
+
173
+ Choose **Feishu** and paste your App ID + App Secret.
174
+
175
+ ### Configure via config file
176
+
177
+ Edit `~/.Durar/Durar.json`:
178
+
179
+ ```json5
180
+ {
181
+ channels: {
182
+ feishu: {
183
+ enabled: true,
184
+ dmPolicy: "pairing",
185
+ accounts: {
186
+ main: {
187
+ appId: "cli_xxx",
188
+ appSecret: "xxx",
189
+ name: "My AI assistant",
190
+ },
191
+ },
192
+ },
193
+ },
194
+ }
195
+ ```
196
+
197
+ If you use `connectionMode: "webhook"`, set both `verificationToken` and `encryptKey`. The Feishu webhook server binds to `127.0.0.1` by default; set `webhookHost` only if you intentionally need a different bind address.
198
+
199
+ #### Verification Token and Encrypt Key (webhook mode)
200
+
201
+ When using webhook mode, set both `channels.feishu.verificationToken` and `channels.feishu.encryptKey` in your config. To get the values:
202
+
203
+ 1. In Feishu Open Platform, open your app
204
+ 2. Go to **Development** → **Events & Callbacks** (开发配置 → 事件与回调)
205
+ 3. Open the **Encryption** tab (加密策略)
206
+ 4. Copy **Verification Token** and **Encrypt Key**
207
+
208
+ The screenshot below shows where to find the **Verification Token**. The **Encrypt Key** is listed in the same **Encryption** section.
209
+
210
+ ![Verification Token location](/images/feishu-verification-token.png)
211
+
212
+ ### Configure via environment variables
213
+
214
+ ```bash
215
+ export FEISHU_APP_ID="cli_xxx"
216
+ export FEISHU_APP_SECRET="xxx"
217
+ ```
218
+
219
+ ### Lark (global) domain
220
+
221
+ If your tenant is on Lark (international), set the domain to `lark` (or a full domain string). You can set it at `channels.feishu.domain` or per account (`channels.feishu.accounts.<id>.domain`).
222
+
223
+ ```json5
224
+ {
225
+ channels: {
226
+ feishu: {
227
+ domain: "lark",
228
+ accounts: {
229
+ main: {
230
+ appId: "cli_xxx",
231
+ appSecret: "xxx",
232
+ },
233
+ },
234
+ },
235
+ },
236
+ }
237
+ ```
238
+
239
+ ### Quota optimization flags
240
+
241
+ You can reduce Feishu API usage with two optional flags:
242
+
243
+ - `typingIndicator` (default `true`): when `false`, skip typing reaction calls.
244
+ - `resolveSenderNames` (default `true`): when `false`, skip sender profile lookup calls.
245
+
246
+ Set them at top level or per account:
247
+
248
+ ```json5
249
+ {
250
+ channels: {
251
+ feishu: {
252
+ typingIndicator: false,
253
+ resolveSenderNames: false,
254
+ accounts: {
255
+ main: {
256
+ appId: "cli_xxx",
257
+ appSecret: "xxx",
258
+ typingIndicator: true,
259
+ resolveSenderNames: false,
260
+ },
261
+ },
262
+ },
263
+ },
264
+ }
265
+ ```
266
+
267
+ ---
268
+
269
+ ## Step 3: Start + test
270
+
271
+ ### 1. Start the gateway
272
+
273
+ ```bash
274
+ Durar gateway
275
+ ```
276
+
277
+ ### 2. Send a test message
278
+
279
+ In Feishu, find your bot and send a message.
280
+
281
+ ### 3. Approve pairing
282
+
283
+ By default, the bot replies with a pairing code. Approve it:
284
+
285
+ ```bash
286
+ Durar pairing approve feishu <CODE>
287
+ ```
288
+
289
+ After approval, you can chat normally.
290
+
291
+ ---
292
+
293
+ ## Overview
294
+
295
+ - **Feishu bot channel**: Feishu bot managed by the gateway
296
+ - **Deterministic routing**: replies always return to Feishu
297
+ - **Session isolation**: DMs share a main session; groups are isolated
298
+ - **WebSocket connection**: long connection via Feishu SDK, no public URL needed
299
+
300
+ ---
301
+
302
+ ## Access control
303
+
304
+ ### Direct messages
305
+
306
+ - **Default**: `dmPolicy: "pairing"` (unknown users get a pairing code)
307
+ - **Approve pairing**:
308
+
309
+ ```bash
310
+ Durar pairing list feishu
311
+ Durar pairing approve feishu <CODE>
312
+ ```
313
+
314
+ - **Allowlist mode**: set `channels.feishu.allowFrom` with allowed Open IDs
315
+
316
+ ### Group chats
317
+
318
+ **1. Group policy** (`channels.feishu.groupPolicy`):
319
+
320
+ - `"open"` = allow everyone in groups
321
+ - `"allowlist"` = only allow `groupAllowFrom`
322
+ - `"disabled"` = disable group messages
323
+
324
+ Default: `allowlist`
325
+
326
+ **2. Mention requirement** (`channels.feishu.requireMention`, overridable via `channels.feishu.groups.<chat_id>.requireMention`):
327
+
328
+ - explicit `true` = require @mention
329
+ - explicit `false` = respond without mentions
330
+ - when unset and `groupPolicy: "open"` = default to `false`
331
+ - when unset and `groupPolicy` is not `"open"` = default to `true`
332
+
333
+ ---
334
+
335
+ ## Group configuration examples
336
+
337
+ ### Allow all groups, no @mention required (default for open groups)
338
+
339
+ ```json5
340
+ {
341
+ channels: {
342
+ feishu: {
343
+ groupPolicy: "open",
344
+ },
345
+ },
346
+ }
347
+ ```
348
+
349
+ ### Allow all groups, but still require @mention
350
+
351
+ ```json5
352
+ {
353
+ channels: {
354
+ feishu: {
355
+ groupPolicy: "open",
356
+ requireMention: true,
357
+ },
358
+ },
359
+ }
360
+ ```
361
+
362
+ ### Allow specific groups only
363
+
364
+ ```json5
365
+ {
366
+ channels: {
367
+ feishu: {
368
+ groupPolicy: "allowlist",
369
+ // Feishu group IDs (chat_id) look like: oc_xxx
370
+ groupAllowFrom: ["oc_xxx", "oc_yyy"],
371
+ },
372
+ },
373
+ }
374
+ ```
375
+
376
+ ### Restrict which senders can message in a group (sender allowlist)
377
+
378
+ In addition to allowing the group itself, **all messages** in that group are gated by the sender open_id: only users listed in `groups.<chat_id>.allowFrom` have their messages processed; messages from other members are ignored (this is full sender-level gating, not only for control commands like /reset or /new).
379
+
380
+ ```json5
381
+ {
382
+ channels: {
383
+ feishu: {
384
+ groupPolicy: "allowlist",
385
+ groupAllowFrom: ["oc_xxx"],
386
+ groups: {
387
+ oc_xxx: {
388
+ // Feishu user IDs (open_id) look like: ou_xxx
389
+ allowFrom: ["ou_user1", "ou_user2"],
390
+ },
391
+ },
392
+ },
393
+ },
394
+ }
395
+ ```
396
+
397
+ ---
398
+
399
+ <a id="get-groupuser-ids"></a>
400
+
401
+ ## Get group/user IDs
402
+
403
+ ### Group IDs (chat_id)
404
+
405
+ Group IDs look like `oc_xxx`.
406
+
407
+ **Method 1 (recommended)**
408
+
409
+ 1. Start the gateway and @mention the bot in the group
410
+ 2. Run `Durar logs --follow` and look for `chat_id`
411
+
412
+ **Method 2**
413
+
414
+ Use the Feishu API debugger to list group chats.
415
+
416
+ ### User IDs (open_id)
417
+
418
+ User IDs look like `ou_xxx`.
419
+
420
+ **Method 1 (recommended)**
421
+
422
+ 1. Start the gateway and DM the bot
423
+ 2. Run `Durar logs --follow` and look for `open_id`
424
+
425
+ **Method 2**
426
+
427
+ Check pairing requests for user Open IDs:
428
+
429
+ ```bash
430
+ Durar pairing list feishu
431
+ ```
432
+
433
+ ---
434
+
435
+ ## Common commands
436
+
437
+ | Command | Description |
438
+ | --------- | ----------------- |
439
+ | `/status` | Show bot status |
440
+ | `/reset` | Reset the session |
441
+ | `/model` | Show/switch model |
442
+
443
+ > Note: Feishu does not support native command menus yet, so commands must be sent as text.
444
+
445
+ ## Gateway management commands
446
+
447
+ | Command | Description |
448
+ | -------------------------- | ----------------------------- |
449
+ | `Durar gateway status` | Show gateway status |
450
+ | `Durar gateway install` | Install/start gateway service |
451
+ | `Durar gateway stop` | Stop gateway service |
452
+ | `Durar gateway restart` | Restart gateway service |
453
+ | `Durar logs --follow` | Tail gateway logs |
454
+
455
+ ---
456
+
457
+ ## Troubleshooting
458
+
459
+ ### Bot does not respond in group chats
460
+
461
+ 1. Ensure the bot is added to the group
462
+ 2. Ensure you @mention the bot (default behavior)
463
+ 3. Check `groupPolicy` is not set to `"disabled"`
464
+ 4. Check logs: `Durar logs --follow`
465
+
466
+ ### Bot does not receive messages
467
+
468
+ 1. Ensure the app is published and approved
469
+ 2. Ensure event subscription includes `im.message.receive_v1`
470
+ 3. Ensure **long connection** is enabled
471
+ 4. Ensure app permissions are complete
472
+ 5. Ensure the gateway is running: `Durar gateway status`
473
+ 6. Check logs: `Durar logs --follow`
474
+
475
+ ### App Secret leak
476
+
477
+ 1. Reset the App Secret in Feishu Open Platform
478
+ 2. Update the App Secret in your config
479
+ 3. Restart the gateway
480
+
481
+ ### Message send failures
482
+
483
+ 1. Ensure the app has `im:message:send_as_bot` permission
484
+ 2. Ensure the app is published
485
+ 3. Check logs for detailed errors
486
+
487
+ ---
488
+
489
+ ## Advanced configuration
490
+
491
+ ### Multiple accounts
492
+
493
+ ```json5
494
+ {
495
+ channels: {
496
+ feishu: {
497
+ defaultAccount: "main",
498
+ accounts: {
499
+ main: {
500
+ appId: "cli_xxx",
501
+ appSecret: "xxx",
502
+ name: "Primary bot",
503
+ },
504
+ backup: {
505
+ appId: "cli_yyy",
506
+ appSecret: "yyy",
507
+ name: "Backup bot",
508
+ enabled: false,
509
+ },
510
+ },
511
+ },
512
+ },
513
+ }
514
+ ```
515
+
516
+ `defaultAccount` controls which Feishu account is used when outbound APIs do not specify an `accountId` explicitly.
517
+
518
+ ### Message limits
519
+
520
+ - `textChunkLimit`: outbound text chunk size (default: 2000 chars)
521
+ - `mediaMaxMb`: media upload/download limit (default: 30MB)
522
+
523
+ ### Streaming
524
+
525
+ Feishu supports streaming replies via interactive cards. When enabled, the bot updates a card as it generates text.
526
+
527
+ ```json5
528
+ {
529
+ channels: {
530
+ feishu: {
531
+ streaming: true, // enable streaming card output (default true)
532
+ blockStreaming: true, // enable block-level streaming (default true)
533
+ },
534
+ },
535
+ }
536
+ ```
537
+
538
+ Set `streaming: false` to wait for the full reply before sending.
539
+
540
+ ### ACP sessions
541
+
542
+ Feishu supports ACP for:
543
+
544
+ - DMs
545
+ - group topic conversations
546
+
547
+ Feishu ACP is text-command driven. There are no native slash-command menus, so use `/acp ...` messages directly in the conversation.
548
+
549
+ #### Persistent ACP bindings
550
+
551
+ Use top-level typed ACP bindings to pin a Feishu DM or topic conversation to a persistent ACP session.
552
+
553
+ ```json5
554
+ {
555
+ agents: {
556
+ list: [
557
+ {
558
+ id: "codex",
559
+ runtime: {
560
+ type: "acp",
561
+ acp: {
562
+ agent: "codex",
563
+ backend: "acpx",
564
+ mode: "persistent",
565
+ cwd: "/workspace/Durar",
566
+ },
567
+ },
568
+ },
569
+ ],
570
+ },
571
+ bindings: [
572
+ {
573
+ type: "acp",
574
+ agentId: "codex",
575
+ match: {
576
+ channel: "feishu",
577
+ accountId: "default",
578
+ peer: { kind: "direct", id: "ou_1234567890" },
579
+ },
580
+ },
581
+ {
582
+ type: "acp",
583
+ agentId: "codex",
584
+ match: {
585
+ channel: "feishu",
586
+ accountId: "default",
587
+ peer: { kind: "group", id: "oc_group_chat:topic:om_topic_root" },
588
+ },
589
+ acp: { label: "codex-feishu-topic" },
590
+ },
591
+ ],
592
+ }
593
+ ```
594
+
595
+ #### Thread-bound ACP spawn from chat
596
+
597
+ In a Feishu DM or topic conversation, you can spawn and bind an ACP session in place:
598
+
599
+ ```text
600
+ /acp spawn codex --thread here
601
+ ```
602
+
603
+ Notes:
604
+
605
+ - `--thread here` works for DMs and Feishu topics.
606
+ - Follow-up messages in the bound DM/topic route directly to that ACP session.
607
+ - v1 does not target generic non-topic group chats.
608
+
609
+ ### Multi-agent routing
610
+
611
+ Use `bindings` to route Feishu DMs or groups to different agents.
612
+
613
+ ```json5
614
+ {
615
+ agents: {
616
+ list: [
617
+ { id: "main" },
618
+ {
619
+ id: "clawd-fan",
620
+ workspace: "/home/user/clawd-fan",
621
+ agentDir: "/home/user/.Durar/agents/clawd-fan/agent",
622
+ },
623
+ {
624
+ id: "clawd-xi",
625
+ workspace: "/home/user/clawd-xi",
626
+ agentDir: "/home/user/.Durar/agents/clawd-xi/agent",
627
+ },
628
+ ],
629
+ },
630
+ bindings: [
631
+ {
632
+ agentId: "main",
633
+ match: {
634
+ channel: "feishu",
635
+ peer: { kind: "direct", id: "ou_xxx" },
636
+ },
637
+ },
638
+ {
639
+ agentId: "clawd-fan",
640
+ match: {
641
+ channel: "feishu",
642
+ peer: { kind: "direct", id: "ou_yyy" },
643
+ },
644
+ },
645
+ {
646
+ agentId: "clawd-xi",
647
+ match: {
648
+ channel: "feishu",
649
+ peer: { kind: "group", id: "oc_zzz" },
650
+ },
651
+ },
652
+ ],
653
+ }
654
+ ```
655
+
656
+ Routing fields:
657
+
658
+ - `match.channel`: `"feishu"`
659
+ - `match.peer.kind`: `"direct"` or `"group"`
660
+ - `match.peer.id`: user Open ID (`ou_xxx`) or group ID (`oc_xxx`)
661
+
662
+ See [Get group/user IDs](#get-groupuser-ids) for lookup tips.
663
+
664
+ ---
665
+
666
+ ## Configuration reference
667
+
668
+ Full configuration: [Gateway configuration](/gateway/configuration)
669
+
670
+ Key options:
671
+
672
+ | Setting | Description | Default |
673
+ | ------------------------------------------------- | --------------------------------------- | ---------------- |
674
+ | `channels.feishu.enabled` | Enable/disable channel | `true` |
675
+ | `channels.feishu.domain` | API domain (`feishu` or `lark`) | `feishu` |
676
+ | `channels.feishu.connectionMode` | Event transport mode | `websocket` |
677
+ | `channels.feishu.defaultAccount` | Default account ID for outbound routing | `default` |
678
+ | `channels.feishu.verificationToken` | Required for webhook mode | - |
679
+ | `channels.feishu.encryptKey` | Required for webhook mode | - |
680
+ | `channels.feishu.webhookPath` | Webhook route path | `/feishu/events` |
681
+ | `channels.feishu.webhookHost` | Webhook bind host | `127.0.0.1` |
682
+ | `channels.feishu.webhookPort` | Webhook bind port | `3000` |
683
+ | `channels.feishu.accounts.<id>.appId` | App ID | - |
684
+ | `channels.feishu.accounts.<id>.appSecret` | App Secret | - |
685
+ | `channels.feishu.accounts.<id>.domain` | Per-account API domain override | `feishu` |
686
+ | `channels.feishu.dmPolicy` | DM policy | `pairing` |
687
+ | `channels.feishu.allowFrom` | DM allowlist (open_id list) | - |
688
+ | `channels.feishu.groupPolicy` | Group policy | `allowlist` |
689
+ | `channels.feishu.groupAllowFrom` | Group allowlist | - |
690
+ | `channels.feishu.requireMention` | Default require @mention | conditional |
691
+ | `channels.feishu.groups.<chat_id>.requireMention` | Per-group require @mention override | inherited |
692
+ | `channels.feishu.groups.<chat_id>.enabled` | Enable group | `true` |
693
+ | `channels.feishu.textChunkLimit` | Message chunk size | `2000` |
694
+ | `channels.feishu.mediaMaxMb` | Media size limit | `30` |
695
+ | `channels.feishu.streaming` | Enable streaming card output | `true` |
696
+ | `channels.feishu.blockStreaming` | Enable block streaming | `true` |
697
+
698
+ ---
699
+
700
+ ## dmPolicy reference
701
+
702
+ | Value | Behavior |
703
+ | ------------- | --------------------------------------------------------------- |
704
+ | `"pairing"` | **Default.** Unknown users get a pairing code; must be approved |
705
+ | `"allowlist"` | Only users in `allowFrom` can chat |
706
+ | `"open"` | Allow all users (requires `"*"` in allowFrom) |
707
+ | `"disabled"` | Disable DMs |
708
+
709
+ ---
710
+
711
+ ## Supported message types
712
+
713
+ ### Receive
714
+
715
+ - ✅ Text
716
+ - ✅ Rich text (post)
717
+ - ✅ Images
718
+ - ✅ Files
719
+ - ✅ Audio
720
+ - ✅ Video/media
721
+ - ✅ Stickers
722
+
723
+ ### Send
724
+
725
+ - ✅ Text
726
+ - ✅ Images
727
+ - ✅ Files
728
+ - ✅ Audio
729
+ - ✅ Video/media
730
+ - ✅ Interactive cards
731
+ - ⚠️ Rich text (post-style formatting and cards, not arbitrary Feishu authoring features)
732
+
733
+ ### Threads and replies
734
+
735
+ - ✅ Inline replies
736
+ - ✅ Topic-thread replies where Feishu exposes `reply_in_thread`
737
+ - ✅ Media replies stay thread-aware when replying to a thread/topic message
738
+
739
+ ## Drive comments
740
+
741
+ Feishu can trigger the agent when someone adds a comment on a Feishu Drive document (Docs, Sheets,
742
+ etc.). The agent receives the comment text, document context, and the comment thread so it can
743
+ respond in-thread or make document edits.
744
+
745
+ Requirements:
746
+
747
+ - Subscribe to `drive.notice.comment_add_v1` in your Feishu app event subscription settings
748
+ (alongside the existing `im.message.receive_v1`)
749
+ - The Drive tool is enabled by default; disable with `channels.feishu.tools.drive: false`
750
+
751
+ The `feishu_drive` tool exposes these comment actions:
752
+
753
+ | Action | Description |
754
+ | ---------------------- | ----------------------------------- |
755
+ | `list_comments` | List comments on a document |
756
+ | `list_comment_replies` | List replies in a comment thread |
757
+ | `add_comment` | Add a new top-level comment |
758
+ | `reply_comment` | Reply to an existing comment thread |
759
+
760
+ When the agent handles a Drive comment event, it receives:
761
+
762
+ - the comment text and sender
763
+ - document metadata (title, type, URL)
764
+ - the comment thread context for in-thread replies
765
+
766
+ After making document edits, the agent is guided to use `feishu_drive.reply_comment` to notify the
767
+ commenter and then output the exact silent token `NO_REPLY` / `no_reply` to
768
+ avoid duplicate sends.
769
+
770
+ ## Runtime action surface
771
+
772
+ Feishu currently exposes these runtime actions:
773
+
774
+ - `send`
775
+ - `read`
776
+ - `edit`
777
+ - `thread-reply`
778
+ - `pin`
779
+ - `list-pins`
780
+ - `unpin`
781
+ - `member-info`
782
+ - `channel-info`
783
+ - `channel-list`
784
+ - `react` and `reactions` when reactions are enabled in config
785
+ - `feishu_drive` comment actions: `list_comments`, `list_comment_replies`, `add_comment`, `reply_comment`
786
+
787
+ ## Related
788
+
789
+ - [Channels Overview](/channels) — all supported channels
790
+ - [Pairing](/channels/pairing) — DM authentication and pairing flow
791
+ - [Groups](/channels/groups) — group chat behavior and mention gating
792
+ - [Channel Routing](/channels/channel-routing) — session routing for messages
793
+ - [Security](/gateway/security) — access model and hardening