fengming 0.3.10 → 0.3.11

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 (761) hide show
  1. package/dist/build-info.json +2 -2
  2. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  3. package/dist/cli-startup-metadata.json +8 -8
  4. package/dist/control-ui/assets/{activity-D-mnRThU.js → activity-wgT0-JR0.js} +2 -2
  5. package/dist/control-ui/assets/{agents-U_KSP5I_.js → agents-DG5PobrT.js} +2 -2
  6. package/dist/control-ui/assets/{channels-ohK9_G1O.js → channels-CX28oM42.js} +2 -2
  7. package/dist/control-ui/assets/{cron-6ZCzfU29.js → cron-B8ixwBqU.js} +2 -2
  8. package/dist/control-ui/assets/{debug-CSsDLg_s.js → debug-CnkYZUXy.js} +2 -2
  9. package/dist/control-ui/assets/{index-jUDczxhd.js → index-DQRZJKbO.js} +4 -4
  10. package/dist/control-ui/assets/{instances-782ZoDT4.js → instances-BE3mV1JC.js} +2 -2
  11. package/dist/control-ui/assets/{nodes-BMX16BKM.js → nodes-Cou4PWRX.js} +2 -2
  12. package/dist/control-ui/assets/{sessions-jLGSApYa.js → sessions-DpAaBT21.js} +2 -2
  13. package/dist/control-ui/assets/{skills-DweBwUhs.js → skills-DjA_j_20.js} +2 -2
  14. package/dist/control-ui/assets/{workboard-BsU-FXIo.js → workboard-BFnvbS0k.js} +2 -2
  15. package/dist/control-ui/index.html +1 -1
  16. package/dist/control-ui/sw.js +1 -1
  17. package/dist/gateway/protocol/index.d.ts +1 -1
  18. package/dist/{index-AZzJCgph.d.ts → index-DuDY3bCZ.d.ts} +2 -2
  19. package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
  20. package/dist/plugin-sdk/agent-config-primitives.d.ts +1 -1
  21. package/dist/plugin-sdk/{bundled-channel-config-schema-Dfn3b8sF.d.ts → bundled-channel-config-schema-BPFNnbwu.d.ts} +23 -23
  22. package/dist/plugin-sdk/bundled-channel-config-schema.d.ts +3 -3
  23. package/dist/plugin-sdk/channel-config-primitives.d.ts +2 -2
  24. package/dist/plugin-sdk/channel-config-schema-legacy.d.ts +3 -3
  25. package/dist/plugin-sdk/channel-config-schema.d.ts +2 -2
  26. package/dist/plugin-sdk/channel-core.d.ts +1 -1
  27. package/dist/plugin-sdk/channel-plugin-common.d.ts +1 -1
  28. package/dist/plugin-sdk/compat.d.ts +2 -2
  29. package/dist/plugin-sdk/{config-schema-DUddICQM.d.ts → config-schema-D7cABQ6o.d.ts} +1 -1
  30. package/dist/plugin-sdk/config-schema.d.ts +2 -2
  31. package/dist/plugin-sdk/core.d.ts +1 -1
  32. package/dist/plugin-sdk/discord.d.ts +2 -2
  33. package/dist/plugin-sdk/tts-runtime.d.ts +1 -1
  34. package/dist/plugin-sdk/{zod-schema.core-B4_b2R5K.d.ts → zod-schema.core-CwBNqcXp.d.ts} +1 -1
  35. package/package.json +4 -409
  36. package/CHANGELOG.md +0 -42
  37. package/THIRD_PARTY_NOTICES.md +0 -37
  38. package/docs/.i18n/README.md +0 -81
  39. package/docs/.i18n/ar-navigation.json +0 -18
  40. package/docs/.i18n/de-navigation.json +0 -18
  41. package/docs/.i18n/es-navigation.json +0 -18
  42. package/docs/.i18n/fr-navigation.json +0 -18
  43. package/docs/.i18n/glossary.ar.json +0 -78
  44. package/docs/.i18n/glossary.de.json +0 -78
  45. package/docs/.i18n/glossary.es.json +0 -78
  46. package/docs/.i18n/glossary.fa.json +0 -78
  47. package/docs/.i18n/glossary.fr.json +0 -78
  48. package/docs/.i18n/glossary.id.json +0 -78
  49. package/docs/.i18n/glossary.it.json +0 -78
  50. package/docs/.i18n/glossary.ja-JP.json +0 -98
  51. package/docs/.i18n/glossary.ko.json +0 -78
  52. package/docs/.i18n/glossary.nl.json +0 -78
  53. package/docs/.i18n/glossary.pl.json +0 -78
  54. package/docs/.i18n/glossary.pt-BR.json +0 -78
  55. package/docs/.i18n/glossary.th.json +0 -78
  56. package/docs/.i18n/glossary.tr.json +0 -78
  57. package/docs/.i18n/glossary.uk.json +0 -78
  58. package/docs/.i18n/glossary.vi.json +0 -78
  59. package/docs/.i18n/glossary.zh-CN.json +0 -1122
  60. package/docs/.i18n/glossary.zh-TW.json +0 -78
  61. package/docs/.i18n/id-navigation.json +0 -18
  62. package/docs/.i18n/it-navigation.json +0 -18
  63. package/docs/.i18n/ja-navigation.json +0 -18
  64. package/docs/.i18n/ko-navigation.json +0 -18
  65. package/docs/.i18n/pl-navigation.json +0 -18
  66. package/docs/.i18n/pt-BR-navigation.json +0 -18
  67. package/docs/.i18n/tr-navigation.json +0 -18
  68. package/docs/.i18n/translation-workflow.md +0 -111
  69. package/docs/.i18n/zh-Hans-navigation.json +0 -552
  70. package/docs/AGENTS.md +0 -36
  71. package/docs/CLAUDE.md +0 -1
  72. package/docs/agent-runtime-architecture.md +0 -48
  73. package/docs/announcements/bluebubbles-imessage.md +0 -79
  74. package/docs/auth-credential-semantics.md +0 -124
  75. package/docs/automation/auth-monitoring.md +0 -11
  76. package/docs/automation/clawflow.md +0 -12
  77. package/docs/automation/cron-jobs.md +0 -534
  78. package/docs/automation/cron-vs-heartbeat.md +0 -11
  79. package/docs/automation/gmail-pubsub.md +0 -11
  80. package/docs/automation/hooks.md +0 -387
  81. package/docs/automation/index.md +0 -135
  82. package/docs/automation/poll.md +0 -12
  83. package/docs/automation/standing-orders.md +0 -250
  84. package/docs/automation/taskflow.md +0 -155
  85. package/docs/automation/tasks.md +0 -374
  86. package/docs/automation/troubleshooting.md +0 -12
  87. package/docs/automation/webhook.md +0 -12
  88. package/docs/brave-search.md +0 -11
  89. package/docs/channels/access-groups.md +0 -201
  90. package/docs/channels/ambient-room-events.md +0 -214
  91. package/docs/channels/bot-loop-protection.md +0 -131
  92. package/docs/channels/broadcast-groups.md +0 -472
  93. package/docs/channels/channel-routing.md +0 -162
  94. package/docs/channels/clickclack.md +0 -138
  95. package/docs/channels/discord.md +0 -1758
  96. package/docs/channels/feishu.md +0 -650
  97. package/docs/channels/googlechat.md +0 -284
  98. package/docs/channels/group-messages.md +0 -95
  99. package/docs/channels/groups.md +0 -524
  100. package/docs/channels/imessage-from-bluebubbles.md +0 -259
  101. package/docs/channels/imessage.md +0 -839
  102. package/docs/channels/index.md +0 -64
  103. package/docs/channels/irc.md +0 -253
  104. package/docs/channels/line.md +0 -243
  105. package/docs/channels/location.md +0 -71
  106. package/docs/channels/matrix-migration.md +0 -370
  107. package/docs/channels/matrix-presentation.md +0 -77
  108. package/docs/channels/matrix-push-rules.md +0 -150
  109. package/docs/channels/matrix.md +0 -921
  110. package/docs/channels/mattermost.md +0 -542
  111. package/docs/channels/msteams.md +0 -1096
  112. package/docs/channels/nextcloud-talk.md +0 -176
  113. package/docs/channels/nostr.md +0 -253
  114. package/docs/channels/pairing.md +0 -214
  115. package/docs/channels/qqbot.md +0 -314
  116. package/docs/channels/signal.md +0 -417
  117. package/docs/channels/slack.md +0 -1623
  118. package/docs/channels/synology-chat.md +0 -187
  119. package/docs/channels/telegram.md +0 -1124
  120. package/docs/channels/tlon.md +0 -296
  121. package/docs/channels/troubleshooting.md +0 -162
  122. package/docs/channels/twitch.md +0 -431
  123. package/docs/channels/wechat.md +0 -171
  124. package/docs/channels/whatsapp.md +0 -796
  125. package/docs/channels/yuanbao.md +0 -416
  126. package/docs/channels/zalo.md +0 -253
  127. package/docs/channels/zalouser.md +0 -217
  128. package/docs/ci.md +0 -657
  129. package/docs/clawhub/publishing.md +0 -96
  130. package/docs/cli/acp.md +0 -370
  131. package/docs/cli/agent.md +0 -109
  132. package/docs/cli/agents.md +0 -253
  133. package/docs/cli/approvals.md +0 -190
  134. package/docs/cli/backup.md +0 -98
  135. package/docs/cli/browser.md +0 -307
  136. package/docs/cli/channels.md +0 -154
  137. package/docs/cli/clawbot.md +0 -25
  138. package/docs/cli/commitments.md +0 -90
  139. package/docs/cli/completion.md +0 -39
  140. package/docs/cli/config.md +0 -504
  141. package/docs/cli/configure.md +0 -77
  142. package/docs/cli/crestodian.md +0 -337
  143. package/docs/cli/cron.md +0 -304
  144. package/docs/cli/daemon.md +0 -67
  145. package/docs/cli/dashboard.md +0 -33
  146. package/docs/cli/devices.md +0 -240
  147. package/docs/cli/directory.md +0 -68
  148. package/docs/cli/dns.md +0 -53
  149. package/docs/cli/docs.md +0 -63
  150. package/docs/cli/doctor.md +0 -241
  151. package/docs/cli/flows.md +0 -52
  152. package/docs/cli/gateway.md +0 -572
  153. package/docs/cli/health.md +0 -43
  154. package/docs/cli/hooks.md +0 -345
  155. package/docs/cli/index.md +0 -400
  156. package/docs/cli/infer.md +0 -364
  157. package/docs/cli/logs.md +0 -68
  158. package/docs/cli/mcp.md +0 -529
  159. package/docs/cli/memory.md +0 -183
  160. package/docs/cli/message.md +0 -317
  161. package/docs/cli/migrate.md +0 -334
  162. package/docs/cli/models.md +0 -239
  163. package/docs/cli/node.md +0 -177
  164. package/docs/cli/nodes.md +0 -76
  165. package/docs/cli/onboard.md +0 -250
  166. package/docs/cli/pairing.md +0 -77
  167. package/docs/cli/path.md +0 -511
  168. package/docs/cli/plugins.md +0 -459
  169. package/docs/cli/policy.md +0 -886
  170. package/docs/cli/proxy.md +0 -89
  171. package/docs/cli/qr.md +0 -56
  172. package/docs/cli/reset.md +0 -39
  173. package/docs/cli/sandbox.md +0 -208
  174. package/docs/cli/secrets.md +0 -202
  175. package/docs/cli/security.md +0 -136
  176. package/docs/cli/sessions.md +0 -164
  177. package/docs/cli/setup.md +0 -59
  178. package/docs/cli/skills.md +0 -122
  179. package/docs/cli/status.md +0 -45
  180. package/docs/cli/system.md +0 -89
  181. package/docs/cli/tasks.md +0 -111
  182. package/docs/cli/transcripts.md +0 -151
  183. package/docs/cli/tui.md +0 -91
  184. package/docs/cli/uninstall.md +0 -44
  185. package/docs/cli/update.md +0 -243
  186. package/docs/cli/voicecall.md +0 -204
  187. package/docs/cli/webhooks.md +0 -117
  188. package/docs/cli/wiki.md +0 -256
  189. package/docs/concepts/active-memory.md +0 -856
  190. package/docs/concepts/agent-loop.md +0 -185
  191. package/docs/concepts/agent-runtimes.md +0 -276
  192. package/docs/concepts/agent-workspace.md +0 -230
  193. package/docs/concepts/agent.md +0 -140
  194. package/docs/concepts/architecture.md +0 -154
  195. package/docs/concepts/channel-docking.md +0 -145
  196. package/docs/concepts/commitments.md +0 -150
  197. package/docs/concepts/compaction.md +0 -203
  198. package/docs/concepts/context-engine.md +0 -347
  199. package/docs/concepts/context.md +0 -199
  200. package/docs/concepts/delegate-architecture.md +0 -319
  201. package/docs/concepts/dreaming.md +0 -264
  202. package/docs/concepts/experimental-features.md +0 -109
  203. package/docs/concepts/features.md +0 -91
  204. package/docs/concepts/fengming-sdk.md +0 -323
  205. package/docs/concepts/mantis-slack-desktop-runbook.md +0 -231
  206. package/docs/concepts/mantis.md +0 -744
  207. package/docs/concepts/markdown-formatting.md +0 -139
  208. package/docs/concepts/memory-builtin.md +0 -148
  209. package/docs/concepts/memory-honcho.md +0 -144
  210. package/docs/concepts/memory-qmd.md +0 -271
  211. package/docs/concepts/memory-search.md +0 -167
  212. package/docs/concepts/memory.md +0 -299
  213. package/docs/concepts/message-lifecycle-refactor.md +0 -1126
  214. package/docs/concepts/messages.md +0 -214
  215. package/docs/concepts/model-failover.md +0 -384
  216. package/docs/concepts/model-providers.md +0 -719
  217. package/docs/concepts/models.md +0 -371
  218. package/docs/concepts/multi-agent.md +0 -625
  219. package/docs/concepts/oauth.md +0 -198
  220. package/docs/concepts/parallel-specialist-lanes.md +0 -127
  221. package/docs/concepts/personal-agent-benchmark-pack.md +0 -74
  222. package/docs/concepts/presence.md +0 -117
  223. package/docs/concepts/progress-drafts.md +0 -406
  224. package/docs/concepts/qa-e2e-automation.md +0 -947
  225. package/docs/concepts/qa-matrix.md +0 -139
  226. package/docs/concepts/queue-steering.md +0 -90
  227. package/docs/concepts/queue.md +0 -136
  228. package/docs/concepts/retry.md +0 -86
  229. package/docs/concepts/session-pruning.md +0 -104
  230. package/docs/concepts/session-tool.md +0 -188
  231. package/docs/concepts/session.md +0 -164
  232. package/docs/concepts/soul.md +0 -116
  233. package/docs/concepts/streaming.md +0 -257
  234. package/docs/concepts/system-prompt.md +0 -328
  235. package/docs/concepts/timezone.md +0 -47
  236. package/docs/concepts/typebox.md +0 -309
  237. package/docs/concepts/typing-indicators.md +0 -88
  238. package/docs/concepts/usage-tracking.md +0 -66
  239. package/docs/date-time.md +0 -126
  240. package/docs/debug/node-issue.md +0 -90
  241. package/docs/diagnostics/flags.md +0 -182
  242. package/docs/docs.json +0 -1862
  243. package/docs/fengming-agent-runtime.md +0 -82
  244. package/docs/gateway/authentication.md +0 -256
  245. package/docs/gateway/background-process.md +0 -147
  246. package/docs/gateway/bonjour.md +0 -303
  247. package/docs/gateway/bridge-protocol.md +0 -97
  248. package/docs/gateway/cli-backends.md +0 -439
  249. package/docs/gateway/config-agents.md +0 -1525
  250. package/docs/gateway/config-channels.md +0 -945
  251. package/docs/gateway/config-tools.md +0 -774
  252. package/docs/gateway/configuration-examples.md +0 -704
  253. package/docs/gateway/configuration-reference.md +0 -1391
  254. package/docs/gateway/configuration.md +0 -739
  255. package/docs/gateway/diagnostics.md +0 -213
  256. package/docs/gateway/discovery.md +0 -154
  257. package/docs/gateway/doctor.md +0 -575
  258. package/docs/gateway/gateway-lock.md +0 -37
  259. package/docs/gateway/health.md +0 -73
  260. package/docs/gateway/heartbeat.md +0 -498
  261. package/docs/gateway/index.md +0 -383
  262. package/docs/gateway/local-model-services.md +0 -205
  263. package/docs/gateway/local-models.md +0 -355
  264. package/docs/gateway/logging.md +0 -149
  265. package/docs/gateway/multiple-gateways.md +0 -178
  266. package/docs/gateway/network-model.md +0 -15
  267. package/docs/gateway/openai-http-api.md +0 -378
  268. package/docs/gateway/openresponses-http-api.md +0 -347
  269. package/docs/gateway/openshell.md +0 -316
  270. package/docs/gateway/opentelemetry.md +0 -433
  271. package/docs/gateway/operator-scopes.md +0 -119
  272. package/docs/gateway/pairing.md +0 -207
  273. package/docs/gateway/prometheus.md +0 -249
  274. package/docs/gateway/protocol.md +0 -826
  275. package/docs/gateway/remote-gateway-readme.md +0 -169
  276. package/docs/gateway/remote.md +0 -280
  277. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +0 -148
  278. package/docs/gateway/sandboxing.md +0 -546
  279. package/docs/gateway/secrets-plan-contract.md +0 -159
  280. package/docs/gateway/secrets.md +0 -805
  281. package/docs/gateway/security/audit-checks.md +0 -127
  282. package/docs/gateway/security/exposure-runbook.md +0 -212
  283. package/docs/gateway/security/index.md +0 -1343
  284. package/docs/gateway/security/secure-file-operations.md +0 -76
  285. package/docs/gateway/security/shrinkwrap.md +0 -111
  286. package/docs/gateway/tailscale.md +0 -156
  287. package/docs/gateway/tools-invoke-http-api.md +0 -169
  288. package/docs/gateway/troubleshooting.md +0 -877
  289. package/docs/gateway/trusted-proxy-auth.md +0 -483
  290. package/docs/help/debugging.md +0 -341
  291. package/docs/help/environment.md +0 -233
  292. package/docs/help/faq-first-run.md +0 -870
  293. package/docs/help/faq-models.md +0 -556
  294. package/docs/help/faq.md +0 -2041
  295. package/docs/help/index.md +0 -39
  296. package/docs/help/scripts.md +0 -56
  297. package/docs/help/testing-live.md +0 -587
  298. package/docs/help/testing-updates-plugins.md +0 -299
  299. package/docs/help/testing.md +0 -977
  300. package/docs/help/troubleshooting.md +0 -449
  301. package/docs/index.md +0 -196
  302. package/docs/install/ansible.md +0 -233
  303. package/docs/install/azure.md +0 -315
  304. package/docs/install/bun.md +0 -59
  305. package/docs/install/clawdock.md +0 -112
  306. package/docs/install/development-channels.md +0 -148
  307. package/docs/install/digitalocean.md +0 -174
  308. package/docs/install/docker-vm-runtime.md +0 -154
  309. package/docs/install/docker.md +0 -564
  310. package/docs/install/exe-dev.md +0 -201
  311. package/docs/install/fly.md +0 -524
  312. package/docs/install/gcp.md +0 -418
  313. package/docs/install/hetzner.md +0 -285
  314. package/docs/install/hostinger.md +0 -98
  315. package/docs/install/index.md +0 -232
  316. package/docs/install/installer.md +0 -447
  317. package/docs/install/kubernetes.md +0 -196
  318. package/docs/install/macos-vm.md +0 -281
  319. package/docs/install/migrating-claude.md +0 -165
  320. package/docs/install/migrating-hermes.md +0 -178
  321. package/docs/install/migrating.md +0 -137
  322. package/docs/install/nix.md +0 -112
  323. package/docs/install/node.md +0 -142
  324. package/docs/install/northflank.mdx +0 -44
  325. package/docs/install/oracle.md +0 -218
  326. package/docs/install/podman.md +0 -216
  327. package/docs/install/railway.mdx +0 -92
  328. package/docs/install/raspberry-pi.md +0 -234
  329. package/docs/install/render.mdx +0 -167
  330. package/docs/install/uninstall.md +0 -131
  331. package/docs/install/updating.md +0 -284
  332. package/docs/install/upstash.md +0 -96
  333. package/docs/logging.md +0 -320
  334. package/docs/nav-tabs-underline.js +0 -100
  335. package/docs/network.md +0 -72
  336. package/docs/nodes/audio.md +0 -216
  337. package/docs/nodes/camera.md +0 -166
  338. package/docs/nodes/images.md +0 -77
  339. package/docs/nodes/index.md +0 -439
  340. package/docs/nodes/location-command.md +0 -102
  341. package/docs/nodes/media-understanding.md +0 -495
  342. package/docs/nodes/talk.md +0 -160
  343. package/docs/nodes/troubleshooting.md +0 -123
  344. package/docs/nodes/voicewake.md +0 -93
  345. package/docs/perplexity.md +0 -11
  346. package/docs/plan/codex-context-engine-harness.md +0 -624
  347. package/docs/plan/ui-channels.md +0 -284
  348. package/docs/platforms/digitalocean.md +0 -12
  349. package/docs/platforms/easyrunner.md +0 -109
  350. package/docs/platforms/index.md +0 -51
  351. package/docs/platforms/linux.md +0 -141
  352. package/docs/platforms/mac/bundled-gateway.md +0 -79
  353. package/docs/platforms/mac/canvas.md +0 -128
  354. package/docs/platforms/mac/child-process.md +0 -72
  355. package/docs/platforms/mac/dev-setup.md +0 -112
  356. package/docs/platforms/mac/health.md +0 -39
  357. package/docs/platforms/mac/icon.md +0 -36
  358. package/docs/platforms/mac/logging.md +0 -62
  359. package/docs/platforms/mac/menu-bar.md +0 -93
  360. package/docs/platforms/mac/peekaboo.md +0 -96
  361. package/docs/platforms/mac/permissions.md +0 -73
  362. package/docs/platforms/mac/remote.md +0 -123
  363. package/docs/platforms/mac/signing.md +0 -52
  364. package/docs/platforms/mac/skills.md +0 -43
  365. package/docs/platforms/mac/voice-overlay.md +0 -66
  366. package/docs/platforms/mac/voicewake.md +0 -73
  367. package/docs/platforms/mac/webchat.md +0 -54
  368. package/docs/platforms/mac/xpc.md +0 -66
  369. package/docs/platforms/oracle.md +0 -12
  370. package/docs/platforms/raspberry-pi.md +0 -13
  371. package/docs/platforms/windows.md +0 -286
  372. package/docs/plugins/adding-capabilities.md +0 -146
  373. package/docs/plugins/admin-http-rpc.md +0 -216
  374. package/docs/plugins/agent-tools.md +0 -13
  375. package/docs/plugins/architecture-internals.md +0 -1196
  376. package/docs/plugins/architecture.md +0 -483
  377. package/docs/plugins/building-extensions.md +0 -13
  378. package/docs/plugins/building-plugins.md +0 -335
  379. package/docs/plugins/bundles.md +0 -310
  380. package/docs/plugins/cli-backend-plugins.md +0 -310
  381. package/docs/plugins/codex-computer-use.md +0 -297
  382. package/docs/plugins/codex-harness-reference.md +0 -470
  383. package/docs/plugins/codex-harness-runtime.md +0 -268
  384. package/docs/plugins/codex-harness.md +0 -780
  385. package/docs/plugins/codex-native-plugins.md +0 -276
  386. package/docs/plugins/community.md +0 -77
  387. package/docs/plugins/compatibility.md +0 -167
  388. package/docs/plugins/copilot.md +0 -356
  389. package/docs/plugins/dependency-resolution.md +0 -176
  390. package/docs/plugins/google-meet.md +0 -1737
  391. package/docs/plugins/hooks.md +0 -484
  392. package/docs/plugins/install-overrides.md +0 -80
  393. package/docs/plugins/manage-plugins.md +0 -210
  394. package/docs/plugins/manifest.md +0 -1457
  395. package/docs/plugins/memory-lancedb.md +0 -385
  396. package/docs/plugins/memory-wiki.md +0 -529
  397. package/docs/plugins/message-presentation.md +0 -473
  398. package/docs/plugins/oc-path.md +0 -166
  399. package/docs/plugins/plugin-inventory.md +0 -189
  400. package/docs/plugins/plugin-permission-requests.md +0 -193
  401. package/docs/plugins/reference/acpx.md +0 -23
  402. package/docs/plugins/reference/admin-http-rpc.md +0 -23
  403. package/docs/plugins/reference/alibaba.md +0 -23
  404. package/docs/plugins/reference/amazon-bedrock-mantle.md +0 -23
  405. package/docs/plugins/reference/amazon-bedrock.md +0 -23
  406. package/docs/plugins/reference/anthropic-vertex.md +0 -19
  407. package/docs/plugins/reference/anthropic.md +0 -23
  408. package/docs/plugins/reference/arcee.md +0 -23
  409. package/docs/plugins/reference/azure-speech.md +0 -23
  410. package/docs/plugins/reference/bonjour.md +0 -19
  411. package/docs/plugins/reference/brave.md +0 -23
  412. package/docs/plugins/reference/browser.md +0 -23
  413. package/docs/plugins/reference/byteplus.md +0 -19
  414. package/docs/plugins/reference/canvas.md +0 -19
  415. package/docs/plugins/reference/cerebras.md +0 -23
  416. package/docs/plugins/reference/chutes.md +0 -23
  417. package/docs/plugins/reference/clickclack.md +0 -23
  418. package/docs/plugins/reference/cloudflare-ai-gateway.md +0 -23
  419. package/docs/plugins/reference/codex-supervisor.md +0 -27
  420. package/docs/plugins/reference/codex.md +0 -23
  421. package/docs/plugins/reference/comfy.md +0 -23
  422. package/docs/plugins/reference/copilot-proxy.md +0 -19
  423. package/docs/plugins/reference/copilot.md +0 -23
  424. package/docs/plugins/reference/deepgram.md +0 -23
  425. package/docs/plugins/reference/deepinfra.md +0 -23
  426. package/docs/plugins/reference/deepseek.md +0 -23
  427. package/docs/plugins/reference/diagnostics-otel.md +0 -19
  428. package/docs/plugins/reference/diagnostics-prometheus.md +0 -19
  429. package/docs/plugins/reference/diffs-language-pack.md +0 -19
  430. package/docs/plugins/reference/diffs.md +0 -19
  431. package/docs/plugins/reference/discord.md +0 -23
  432. package/docs/plugins/reference/document-extract.md +0 -23
  433. package/docs/plugins/reference/duckduckgo.md +0 -23
  434. package/docs/plugins/reference/elevenlabs.md +0 -23
  435. package/docs/plugins/reference/exa.md +0 -23
  436. package/docs/plugins/reference/fal.md +0 -23
  437. package/docs/plugins/reference/feishu.md +0 -23
  438. package/docs/plugins/reference/file-transfer.md +0 -19
  439. package/docs/plugins/reference/firecrawl.md +0 -23
  440. package/docs/plugins/reference/fireworks.md +0 -23
  441. package/docs/plugins/reference/github-copilot.md +0 -23
  442. package/docs/plugins/reference/gmi.md +0 -23
  443. package/docs/plugins/reference/google-meet.md +0 -23
  444. package/docs/plugins/reference/google.md +0 -23
  445. package/docs/plugins/reference/googlechat.md +0 -23
  446. package/docs/plugins/reference/gradium.md +0 -23
  447. package/docs/plugins/reference/groq.md +0 -23
  448. package/docs/plugins/reference/huggingface.md +0 -23
  449. package/docs/plugins/reference/imessage.md +0 -23
  450. package/docs/plugins/reference/inworld.md +0 -23
  451. package/docs/plugins/reference/irc.md +0 -23
  452. package/docs/plugins/reference/kilocode.md +0 -23
  453. package/docs/plugins/reference/kimi.md +0 -23
  454. package/docs/plugins/reference/line.md +0 -23
  455. package/docs/plugins/reference/litellm.md +0 -23
  456. package/docs/plugins/reference/llm-task.md +0 -19
  457. package/docs/plugins/reference/lmstudio.md +0 -23
  458. package/docs/plugins/reference/lobster.md +0 -19
  459. package/docs/plugins/reference/matrix.md +0 -23
  460. package/docs/plugins/reference/mattermost.md +0 -23
  461. package/docs/plugins/reference/memory-core.md +0 -19
  462. package/docs/plugins/reference/memory-lancedb.md +0 -23
  463. package/docs/plugins/reference/memory-wiki.md +0 -23
  464. package/docs/plugins/reference/microsoft-foundry.md +0 -19
  465. package/docs/plugins/reference/microsoft.md +0 -19
  466. package/docs/plugins/reference/migrate-claude.md +0 -19
  467. package/docs/plugins/reference/migrate-hermes.md +0 -19
  468. package/docs/plugins/reference/minimax.md +0 -23
  469. package/docs/plugins/reference/mistral.md +0 -23
  470. package/docs/plugins/reference/moonshot.md +0 -23
  471. package/docs/plugins/reference/msteams.md +0 -23
  472. package/docs/plugins/reference/nextcloud-talk.md +0 -23
  473. package/docs/plugins/reference/nostr.md +0 -23
  474. package/docs/plugins/reference/novita.md +0 -23
  475. package/docs/plugins/reference/nvidia.md +0 -23
  476. package/docs/plugins/reference/oc-path.md +0 -23
  477. package/docs/plugins/reference/ollama.md +0 -23
  478. package/docs/plugins/reference/open-prose.md +0 -19
  479. package/docs/plugins/reference/openai.md +0 -23
  480. package/docs/plugins/reference/opencode-go.md +0 -23
  481. package/docs/plugins/reference/opencode.md +0 -23
  482. package/docs/plugins/reference/openrouter.md +0 -23
  483. package/docs/plugins/reference/openshell.md +0 -19
  484. package/docs/plugins/reference/perplexity.md +0 -23
  485. package/docs/plugins/reference/pixverse.md +0 -23
  486. package/docs/plugins/reference/policy.md +0 -72
  487. package/docs/plugins/reference/qa-channel.md +0 -23
  488. package/docs/plugins/reference/qa-lab.md +0 -19
  489. package/docs/plugins/reference/qa-matrix.md +0 -19
  490. package/docs/plugins/reference/qianfan.md +0 -23
  491. package/docs/plugins/reference/qqbot.md +0 -23
  492. package/docs/plugins/reference/qwen.md +0 -23
  493. package/docs/plugins/reference/runway.md +0 -23
  494. package/docs/plugins/reference/searxng.md +0 -19
  495. package/docs/plugins/reference/senseaudio.md +0 -23
  496. package/docs/plugins/reference/sglang.md +0 -23
  497. package/docs/plugins/reference/signal.md +0 -23
  498. package/docs/plugins/reference/skill-workshop.md +0 -23
  499. package/docs/plugins/reference/slack.md +0 -23
  500. package/docs/plugins/reference/stepfun.md +0 -23
  501. package/docs/plugins/reference/synology-chat.md +0 -23
  502. package/docs/plugins/reference/synthetic.md +0 -23
  503. package/docs/plugins/reference/tavily.md +0 -23
  504. package/docs/plugins/reference/telegram.md +0 -23
  505. package/docs/plugins/reference/tencent.md +0 -23
  506. package/docs/plugins/reference/tlon.md +0 -23
  507. package/docs/plugins/reference/together.md +0 -23
  508. package/docs/plugins/reference/tokenjuice.md +0 -23
  509. package/docs/plugins/reference/tts-local-cli.md +0 -19
  510. package/docs/plugins/reference/twitch.md +0 -23
  511. package/docs/plugins/reference/venice.md +0 -23
  512. package/docs/plugins/reference/vercel-ai-gateway.md +0 -23
  513. package/docs/plugins/reference/vllm.md +0 -23
  514. package/docs/plugins/reference/voice-call.md +0 -23
  515. package/docs/plugins/reference/volcengine.md +0 -23
  516. package/docs/plugins/reference/voyage.md +0 -19
  517. package/docs/plugins/reference/vydra.md +0 -23
  518. package/docs/plugins/reference/web-readability.md +0 -19
  519. package/docs/plugins/reference/webhooks.md +0 -23
  520. package/docs/plugins/reference/whatsapp.md +0 -23
  521. package/docs/plugins/reference/workboard.md +0 -23
  522. package/docs/plugins/reference/xai.md +0 -23
  523. package/docs/plugins/reference/xiaomi.md +0 -23
  524. package/docs/plugins/reference/zai.md +0 -23
  525. package/docs/plugins/reference/zalo.md +0 -23
  526. package/docs/plugins/reference/zalouser.md +0 -24
  527. package/docs/plugins/reference.md +0 -145
  528. package/docs/plugins/sdk-agent-harness.md +0 -338
  529. package/docs/plugins/sdk-channel-inbound.md +0 -70
  530. package/docs/plugins/sdk-channel-ingress.md +0 -137
  531. package/docs/plugins/sdk-channel-message.md +0 -18
  532. package/docs/plugins/sdk-channel-outbound.md +0 -113
  533. package/docs/plugins/sdk-channel-plugins.md +0 -765
  534. package/docs/plugins/sdk-channel-turn.md +0 -9
  535. package/docs/plugins/sdk-entrypoints.md +0 -344
  536. package/docs/plugins/sdk-migration.md +0 -979
  537. package/docs/plugins/sdk-overview.md +0 -511
  538. package/docs/plugins/sdk-provider-plugins.md +0 -846
  539. package/docs/plugins/sdk-runtime.md +0 -676
  540. package/docs/plugins/sdk-setup.md +0 -550
  541. package/docs/plugins/sdk-subpaths.md +0 -391
  542. package/docs/plugins/sdk-testing.md +0 -403
  543. package/docs/plugins/skill-workshop.md +0 -713
  544. package/docs/plugins/tool-plugins.md +0 -411
  545. package/docs/plugins/voice-call.md +0 -942
  546. package/docs/plugins/webhooks.md +0 -192
  547. package/docs/plugins/workboard.md +0 -252
  548. package/docs/plugins/zalouser.md +0 -86
  549. package/docs/prose.md +0 -137
  550. package/docs/providers/alibaba.md +0 -158
  551. package/docs/providers/anthropic.md +0 -381
  552. package/docs/providers/arcee.md +0 -144
  553. package/docs/providers/azure-speech.md +0 -119
  554. package/docs/providers/bedrock-mantle.md +0 -211
  555. package/docs/providers/bedrock.md +0 -414
  556. package/docs/providers/cerebras.md +0 -130
  557. package/docs/providers/chutes.md +0 -153
  558. package/docs/providers/claude-max-api-proxy.md +0 -191
  559. package/docs/providers/cloudflare-ai-gateway.md +0 -119
  560. package/docs/providers/comfy.md +0 -362
  561. package/docs/providers/deepgram.md +0 -184
  562. package/docs/providers/deepinfra.md +0 -92
  563. package/docs/providers/deepseek.md +0 -146
  564. package/docs/providers/ds4.md +0 -309
  565. package/docs/providers/elevenlabs.md +0 -130
  566. package/docs/providers/fal.md +0 -240
  567. package/docs/providers/fireworks.md +0 -144
  568. package/docs/providers/github-copilot.md +0 -257
  569. package/docs/providers/gmi.md +0 -92
  570. package/docs/providers/google.md +0 -472
  571. package/docs/providers/gradium.md +0 -123
  572. package/docs/providers/groq.md +0 -171
  573. package/docs/providers/huggingface.md +0 -235
  574. package/docs/providers/index.md +0 -105
  575. package/docs/providers/inferrs.md +0 -272
  576. package/docs/providers/inworld.md +0 -120
  577. package/docs/providers/kilocode.md +0 -135
  578. package/docs/providers/litellm.md +0 -234
  579. package/docs/providers/lmstudio.md +0 -224
  580. package/docs/providers/minimax.md +0 -505
  581. package/docs/providers/mistral.md +0 -235
  582. package/docs/providers/models.md +0 -64
  583. package/docs/providers/moonshot.md +0 -413
  584. package/docs/providers/novita.md +0 -92
  585. package/docs/providers/nvidia.md +0 -158
  586. package/docs/providers/ollama-cloud.md +0 -115
  587. package/docs/providers/ollama.md +0 -1225
  588. package/docs/providers/openai.md +0 -1093
  589. package/docs/providers/opencode-go.md +0 -123
  590. package/docs/providers/opencode.md +0 -149
  591. package/docs/providers/openrouter.md +0 -349
  592. package/docs/providers/perplexity-provider.md +0 -123
  593. package/docs/providers/pixverse.md +0 -165
  594. package/docs/providers/qianfan.md +0 -132
  595. package/docs/providers/qwen-oauth.md +0 -115
  596. package/docs/providers/qwen.md +0 -364
  597. package/docs/providers/runway.md +0 -103
  598. package/docs/providers/senseaudio.md +0 -68
  599. package/docs/providers/sglang.md +0 -161
  600. package/docs/providers/stepfun.md +0 -229
  601. package/docs/providers/synthetic.md +0 -154
  602. package/docs/providers/tencent.md +0 -130
  603. package/docs/providers/together.md +0 -140
  604. package/docs/providers/venice.md +0 -312
  605. package/docs/providers/vercel-ai-gateway.md +0 -128
  606. package/docs/providers/vllm.md +0 -407
  607. package/docs/providers/volcengine.md +0 -199
  608. package/docs/providers/vydra.md +0 -180
  609. package/docs/providers/xai.md +0 -571
  610. package/docs/providers/xiaomi.md +0 -262
  611. package/docs/providers/zai.md +0 -224
  612. package/docs/refactor/access.md +0 -9
  613. package/docs/refactor/acp.md +0 -298
  614. package/docs/refactor/canvas.md +0 -131
  615. package/docs/refactor/database-first.md +0 -2256
  616. package/docs/refactor/ingress-core.md +0 -341
  617. package/docs/reference/AGENTS.default.md +0 -131
  618. package/docs/reference/RELEASING.md +0 -799
  619. package/docs/reference/api-usage-costs.md +0 -208
  620. package/docs/reference/application-modernization-plan.md +0 -208
  621. package/docs/reference/code-mode.md +0 -773
  622. package/docs/reference/credits.md +0 -33
  623. package/docs/reference/device-models.md +0 -50
  624. package/docs/reference/fengming-sdk-api-design.md +0 -390
  625. package/docs/reference/full-release-validation.md +0 -202
  626. package/docs/reference/memory-config.md +0 -604
  627. package/docs/reference/prompt-caching.md +0 -358
  628. package/docs/reference/release-performance-sweep.md +0 -360
  629. package/docs/reference/rich-output-protocol.md +0 -101
  630. package/docs/reference/rpc.md +0 -43
  631. package/docs/reference/secret-placeholder-conventions.md +0 -33
  632. package/docs/reference/secretref-credential-surface.md +0 -159
  633. package/docs/reference/secretref-user-supplied-credentials-matrix.json +0 -663
  634. package/docs/reference/session-management-compaction.md +0 -474
  635. package/docs/reference/templates/AGENTS.dev.md +0 -90
  636. package/docs/reference/templates/AGENTS.md +0 -227
  637. package/docs/reference/templates/BOOT.md +0 -16
  638. package/docs/reference/templates/BOOTSTRAP.md +0 -66
  639. package/docs/reference/templates/CLAUDE.md +0 -1
  640. package/docs/reference/templates/HEARTBEAT.md +0 -24
  641. package/docs/reference/templates/IDENTITY.dev.md +0 -52
  642. package/docs/reference/templates/IDENTITY.md +0 -34
  643. package/docs/reference/templates/SOUL.dev.md +0 -82
  644. package/docs/reference/templates/SOUL.md +0 -49
  645. package/docs/reference/templates/TOOLS.dev.md +0 -29
  646. package/docs/reference/templates/TOOLS.md +0 -51
  647. package/docs/reference/templates/USER.dev.md +0 -23
  648. package/docs/reference/templates/USER.md +0 -28
  649. package/docs/reference/test.md +0 -247
  650. package/docs/reference/token-use.md +0 -246
  651. package/docs/reference/transcript-hygiene.md +0 -214
  652. package/docs/reference/wizard.md +0 -252
  653. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +0 -101
  654. package/docs/security/THREAT-MODEL-ATLAS.md +0 -611
  655. package/docs/security/formal-verification.md +0 -170
  656. package/docs/security/incident-response.md +0 -59
  657. package/docs/security/network-proxy.md +0 -268
  658. package/docs/snippets/plugin-publish/minimal-fengming.plugin.json +0 -12
  659. package/docs/snippets/plugin-publish/minimal-package.json +0 -16
  660. package/docs/specs/claw-supervisor.md +0 -247
  661. package/docs/start/bootstrapping.md +0 -49
  662. package/docs/start/docs-directory.md +0 -69
  663. package/docs/start/fengming.md +0 -252
  664. package/docs/start/getting-started.md +0 -152
  665. package/docs/start/hubs.md +0 -201
  666. package/docs/start/lore.md +0 -223
  667. package/docs/start/onboarding-overview.md +0 -72
  668. package/docs/start/onboarding.md +0 -98
  669. package/docs/start/quickstart.md +0 -25
  670. package/docs/start/setup.md +0 -178
  671. package/docs/start/showcase.md +0 -363
  672. package/docs/start/wizard-cli-automation.md +0 -232
  673. package/docs/start/wizard-cli-reference.md +0 -331
  674. package/docs/start/wizard.md +0 -141
  675. package/docs/style.css +0 -137
  676. package/docs/superpowers/specs/2026-04-22-tweakcn-custom-theme-import-design.md +0 -316
  677. package/docs/tools/acp-agents-setup.md +0 -351
  678. package/docs/tools/acp-agents.md +0 -854
  679. package/docs/tools/agent-send.md +0 -130
  680. package/docs/tools/apply-patch.md +0 -64
  681. package/docs/tools/brave-search.md +0 -139
  682. package/docs/tools/browser-control.md +0 -391
  683. package/docs/tools/browser-linux-troubleshooting.md +0 -173
  684. package/docs/tools/browser-login.md +0 -77
  685. package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +0 -219
  686. package/docs/tools/browser.md +0 -810
  687. package/docs/tools/btw.md +0 -159
  688. package/docs/tools/capability-cookbook.md +0 -12
  689. package/docs/tools/clawhub.md +0 -5
  690. package/docs/tools/code-execution.md +0 -173
  691. package/docs/tools/creating-skills.md +0 -158
  692. package/docs/tools/diffs.md +0 -525
  693. package/docs/tools/duckduckgo-search.md +0 -109
  694. package/docs/tools/elevated.md +0 -128
  695. package/docs/tools/exa-search.md +0 -152
  696. package/docs/tools/exec-approvals-advanced.md +0 -444
  697. package/docs/tools/exec-approvals.md +0 -494
  698. package/docs/tools/exec.md +0 -285
  699. package/docs/tools/firecrawl.md +0 -155
  700. package/docs/tools/gemini-search.md +0 -114
  701. package/docs/tools/goal.md +0 -217
  702. package/docs/tools/grok-search.md +0 -129
  703. package/docs/tools/image-generation.md +0 -493
  704. package/docs/tools/index.md +0 -178
  705. package/docs/tools/kimi-search.md +0 -105
  706. package/docs/tools/llm-task.md +0 -137
  707. package/docs/tools/lobster.md +0 -365
  708. package/docs/tools/loop-detection.md +0 -154
  709. package/docs/tools/media-overview.md +0 -160
  710. package/docs/tools/minimax-search.md +0 -102
  711. package/docs/tools/multi-agent-sandbox-tools.md +0 -409
  712. package/docs/tools/music-generation.md +0 -372
  713. package/docs/tools/ollama-search.md +0 -153
  714. package/docs/tools/pdf.md +0 -213
  715. package/docs/tools/perplexity-search.md +0 -220
  716. package/docs/tools/plugin.md +0 -363
  717. package/docs/tools/reactions.md +0 -100
  718. package/docs/tools/searxng-search.md +0 -141
  719. package/docs/tools/skills-config.md +0 -195
  720. package/docs/tools/skills.md +0 -569
  721. package/docs/tools/slash-commands.md +0 -487
  722. package/docs/tools/steer.md +0 -77
  723. package/docs/tools/subagents.md +0 -651
  724. package/docs/tools/tavily.md +0 -162
  725. package/docs/tools/thinking.md +0 -142
  726. package/docs/tools/tokenjuice.md +0 -84
  727. package/docs/tools/tool-search.md +0 -269
  728. package/docs/tools/trajectory.md +0 -229
  729. package/docs/tools/tts.md +0 -1009
  730. package/docs/tools/video-generation.md +0 -555
  731. package/docs/tools/web-fetch.md +0 -210
  732. package/docs/tools/web.md +0 -461
  733. package/docs/tts.md +0 -11
  734. package/docs/vps.md +0 -139
  735. package/docs/web/control-ui.md +0 -512
  736. package/docs/web/dashboard.md +0 -107
  737. package/docs/web/index.md +0 -133
  738. package/docs/web/tui.md +0 -250
  739. package/docs/web/webchat.md +0 -102
  740. package/npm-shrinkwrap.json +0 -12861
  741. package/patches/.gitkeep +0 -0
  742. package/patches/@agentclientprotocol__claude-agent-acp@0.37.0.patch +0 -41
  743. package/pnpm-workspace.yaml +0 -120
  744. package/scripts/crabbox-wrapper.mjs +0 -2004
  745. package/scripts/lib/official-external-channel-catalog.json +0 -560
  746. package/scripts/lib/official-external-plugin-catalog.json +0 -264
  747. package/scripts/lib/official-external-provider-catalog.json +0 -158
  748. package/scripts/lib/package-dist-imports.mjs +0 -171
  749. package/scripts/npm-runner.mjs +0 -91
  750. package/scripts/postinstall-bundled-plugins.mjs +0 -978
  751. package/scripts/preinstall-package-manager-warning.mjs +0 -64
  752. package/scripts/prepare-git-hooks.mjs +0 -72
  753. package/scripts/windows-cmd-helpers.mjs +0 -22
  754. package/skills/batch/SKILL.md +0 -118
  755. package/skills/code-review/SKILL.md +0 -107
  756. package/skills/debug/SKILL.md +0 -83
  757. package/skills/loop/SKILL.md +0 -118
  758. package/skills/run/SKILL.md +0 -79
  759. package/skills/run-skill-generator/SKILL.md +0 -179
  760. package/skills/verify/SKILL.md +0 -103
  761. package/src/agents/templates/HEARTBEAT.md +0 -3
@@ -1,839 +0,0 @@
1
- ---
2
- summary: "Native iMessage support via imsg (JSON-RPC over stdio), with private API actions for replies, tapbacks, effects, attachments, and group management. Preferred for new FengMing iMessage setups when host requirements fit."
3
- read_when:
4
- - Setting up iMessage support
5
- - Debugging iMessage send/receive
6
- title: "iMessage"
7
- ---
8
-
9
- <Note>
10
- For FengMing iMessage deployments, use `imsg` on a signed-in macOS Messages host. If your Gateway runs on Linux or Windows, point `channels.imessage.cliPath` at an SSH wrapper that runs `imsg` on the Mac.
11
-
12
- **Gateway-downtime catchup is opt-in.** When enabled (`channels.imessage.catchup.enabled: true`), the gateway replays inbound messages that landed in `chat.db` while it was offline (crash, restart, Mac sleep) on next startup. Disabled by default — see [Catching up after gateway downtime](#catching-up-after-gateway-downtime). Closes [fengming#78649](https://github.com/fengming/fengming/issues/78649).
13
- </Note>
14
-
15
- <Warning>
16
- BlueBubbles support was removed. Migrate `channels.bluebubbles` configs to `channels.imessage`; FengMing supports iMessage through `imsg` only. Start with [BlueBubbles removal and the imsg iMessage path](/announcements/bluebubbles-imessage) for the short announcement, or [Coming from BlueBubbles](/channels/imessage-from-bluebubbles) for the full migration table.
17
- </Warning>
18
-
19
- Status: native external CLI integration. Gateway spawns `imsg rpc` and communicates over JSON-RPC on stdio (no separate daemon/port). Advanced actions require `imsg launch` and a successful private API probe.
20
-
21
- <CardGroup cols={3}>
22
- <Card title="Private API actions" icon="wand-sparkles" href="#private-api-actions">
23
- Replies, tapbacks, effects, attachments, and group management.
24
- </Card>
25
- <Card title="Pairing" icon="link" href="/channels/pairing">
26
- iMessage DMs default to pairing mode.
27
- </Card>
28
- <Card title="Remote Mac" icon="terminal" href="#remote-mac-over-ssh">
29
- Use an SSH wrapper when the Gateway is not running on the Messages Mac.
30
- </Card>
31
- <Card title="Configuration reference" icon="settings" href="/gateway/config-channels#imessage">
32
- Full iMessage field reference.
33
- </Card>
34
- </CardGroup>
35
-
36
- ## Quick setup
37
-
38
- <Tabs>
39
- <Tab title="Local Mac (fast path)">
40
- <Steps>
41
- <Step title="Install and verify imsg">
42
-
43
- ```bash
44
- brew install steipete/tap/imsg
45
- imsg rpc --help
46
- imsg launch
47
- fengming channels status --probe
48
- ```
49
-
50
- </Step>
51
-
52
- <Step title="Configure FengMing">
53
-
54
- ```json5
55
- {
56
- channels: {
57
- imessage: {
58
- enabled: true,
59
- cliPath: "/usr/local/bin/imsg",
60
- dbPath: "/Users/user/Library/Messages/chat.db",
61
- },
62
- },
63
- }
64
- ```
65
-
66
- </Step>
67
-
68
- <Step title="Start gateway">
69
-
70
- ```bash
71
- fengming gateway
72
- ```
73
-
74
- </Step>
75
-
76
- <Step title="Approve first DM pairing (default dmPolicy)">
77
-
78
- ```bash
79
- fengming pairing list imessage
80
- fengming pairing approve imessage <CODE>
81
- ```
82
-
83
- Pairing requests expire after 1 hour.
84
- </Step>
85
- </Steps>
86
-
87
- </Tab>
88
-
89
- <Tab title="Remote Mac over SSH">
90
- FengMing only requires a stdio-compatible `cliPath`, so you can point `cliPath` at a wrapper script that SSHes to a remote Mac and runs `imsg`.
91
-
92
- ```bash
93
- #!/usr/bin/env bash
94
- exec ssh -T gateway-host imsg "$@"
95
- ```
96
-
97
- Recommended config when attachments are enabled:
98
-
99
- ```json5
100
- {
101
- channels: {
102
- imessage: {
103
- enabled: true,
104
- cliPath: "~/.fengming/scripts/imsg-ssh",
105
- remoteHost: "user@gateway-host", // used for SCP attachment fetches
106
- includeAttachments: true,
107
- // Optional: override allowed attachment roots.
108
- // Defaults include /Users/*/Library/Messages/Attachments
109
- attachmentRoots: ["/Users/*/Library/Messages/Attachments"],
110
- remoteAttachmentRoots: ["/Users/*/Library/Messages/Attachments"],
111
- },
112
- },
113
- }
114
- ```
115
-
116
- If `remoteHost` is not set, FengMing attempts to auto-detect it by parsing the SSH wrapper script.
117
- `remoteHost` must be `host` or `user@host` (no spaces or SSH options).
118
- FengMing uses strict host-key checking for SCP, so the relay host key must already exist in `~/.ssh/known_hosts`.
119
- Attachment paths are validated against allowed roots (`attachmentRoots` / `remoteAttachmentRoots`).
120
-
121
- <Warning>
122
- Any `cliPath` wrapper or SSH proxy you put in front of `imsg` MUST behave like a transparent stdio pipe for long-lived JSON-RPC. FengMing exchanges small newline-framed JSON-RPC messages over the wrapper's stdin/stdout for the lifetime of the channel:
123
-
124
- - Forward each stdin chunk/line **as soon as bytes are available** — don't wait for EOF.
125
- - Forward each stdout chunk/line promptly in the reverse direction.
126
- - Preserve newlines.
127
- - Avoid fixed-size blocking reads (`read(4096)`, `cat | buffer`, default shell `read`) that can starve small frames.
128
- - Keep stderr separate from the JSON-RPC stdout stream.
129
-
130
- A wrapper that buffers stdin until a large block fills will produce symptoms that look like an iMessage outage — `imsg rpc timeout (chats.list)` or repeated channel restarts — even though `imsg rpc` itself is healthy. `ssh -T host imsg "$@"` (above) is safe because it forwards FengMing's `cliPath` arguments such as `rpc` and `--db`. Pipelines like `ssh host imsg | grep -v '^DEBUG'` are NOT — line-buffered tools can still hold frames; use `stdbuf -oL -eL` on every stage if you must filter.
131
- </Warning>
132
-
133
- </Tab>
134
- </Tabs>
135
-
136
- ## Requirements and permissions (macOS)
137
-
138
- - Messages must be signed in on the Mac running `imsg`.
139
- - Full Disk Access is required for the process context running FengMing/`imsg` (Messages DB access).
140
- - Automation permission is required to send messages through Messages.app.
141
- - For advanced actions (react / edit / unsend / threaded reply / effects / group ops), System Integrity Protection must be disabled — see [Enabling the imsg private API](#enabling-the-imsg-private-api) below. Basic text and media send/receive work without it.
142
-
143
- <Tip>
144
- Permissions are granted per process context. If gateway runs headless (LaunchAgent/SSH), run a one-time interactive command in that same context to trigger prompts:
145
-
146
- ```bash
147
- imsg chats --limit 1
148
- # or
149
- imsg send <handle> "test"
150
- ```
151
-
152
- </Tip>
153
-
154
- ## Enabling the imsg private API
155
-
156
- `imsg` ships in two operational modes:
157
-
158
- - **Basic mode** (default, no SIP changes needed): outbound text and media via `send`, inbound watch/history, chat list. This is what you get out of the box from a fresh `brew install steipete/tap/imsg` plus the standard macOS permissions above.
159
- - **Private API mode**: `imsg` injects a helper dylib into `Messages.app` to call internal `IMCore` functions. This is what unlocks `react`, `edit`, `unsend`, `reply` (threaded), `sendWithEffect`, `renameGroup`, `setGroupIcon`, `addParticipant`, `removeParticipant`, `leaveGroup`, plus typing indicators and read receipts.
160
-
161
- To reach the advanced action surface that this channel page documents, you need Private API mode. The `imsg` README is explicit about the requirement:
162
-
163
- > Advanced features such as `read`, `typing`, `launch`, bridge-backed rich send, message mutation, and chat management are opt-in. They require SIP to be disabled and a helper dylib to be injected into `Messages.app`. `imsg launch` refuses to inject when SIP is enabled.
164
-
165
- The helper-injection technique uses `imsg`'s own dylib to reach Messages private APIs. There is no third-party server or BlueBubbles runtime in the FengMing iMessage path.
166
-
167
- <Warning>
168
- **Disabling SIP is a real security tradeoff.** SIP is one of macOS's core protections against running modified system code; turning it off system-wide opens up additional attack surface and side effects. Notably, **disabling SIP on Apple Silicon Macs also disables the ability to install and run iOS apps on your Mac**.
169
-
170
- Treat this as a deliberate operational choice, not a default. If your threat model can't tolerate SIP being off, bundled iMessage is limited to basic mode — text and media send/receive only, no reactions / edit / unsend / effects / group ops.
171
- </Warning>
172
-
173
- ### Setup
174
-
175
- 1. **Install (or upgrade) `imsg`** on the Mac that runs Messages.app:
176
-
177
- ```bash
178
- brew install steipete/tap/imsg
179
- imsg --version
180
- imsg status --json
181
- ```
182
-
183
- The `imsg status --json` output reports `bridge_version`, `rpc_methods`, and per-method `selectors` so you can see what the current build supports before you start.
184
-
185
- 2. **Disable System Integrity Protection.** This is macOS-version-specific because the underlying Apple requirement depends on the OS and hardware:
186
- - **macOS 10.13–10.15 (Sierra–Catalina):** disable Library Validation via Terminal, reboot to Recovery Mode, run `csrutil disable`, restart.
187
- - **macOS 11+ (Big Sur and later), Intel:** Recovery Mode (or Internet Recovery), `csrutil disable`, restart.
188
- - **macOS 11+, Apple Silicon:** power-button startup sequence to enter Recovery; on recent macOS versions hold the **Left Shift** key when you click Continue, then `csrutil disable`. Virtual-machine setups follow a separate flow — take a VM snapshot first.
189
- - **macOS 26 / Tahoe:** library-validation policies and `imagent` private-entitlement checks have tightened further; `imsg` may need an updated build to keep up. If `imsg launch` injection or specific `selectors` start returning false after a macOS major upgrade, check `imsg`'s release notes before assuming the SIP step succeeded.
190
-
191
- Follow Apple's Recovery-mode flow for your Mac to disable SIP before running `imsg launch`.
192
-
193
- 3. **Inject the helper.** With SIP disabled and Messages.app signed in:
194
-
195
- ```bash
196
- imsg launch
197
- ```
198
-
199
- `imsg launch` refuses to inject when SIP is still enabled, so this also doubles as a confirmation that step 2 took.
200
-
201
- 4. **Verify the bridge from FengMing:**
202
-
203
- ```bash
204
- fengming channels status --probe
205
- ```
206
-
207
- The iMessage entry should report `works`, and `imsg status --json | jq '.selectors'` should show `retractMessagePart: true` plus whichever edit / typing / read selectors your macOS build exposes. The FengMing plugin per-method gating in `actions.ts` only advertises actions whose underlying selector is `true`, so the action surface you see in the agent's tool list reflects what the bridge can actually do on this host.
208
-
209
- If `fengming channels status --probe` reports the channel as `works` but specific actions throw "iMessage `<action>` requires the imsg private API bridge" at dispatch time, run `imsg launch` again — the helper can fall out (Messages.app restart, OS update, etc.) and the cached `available: true` status will keep advertising actions until the next probe refreshes.
210
-
211
- ### When you can't disable SIP
212
-
213
- If SIP-disabled isn't acceptable for your threat model:
214
-
215
- - `imsg` falls back to basic mode — text + media + receive only.
216
- - The FengMing plugin still advertises text/media send and inbound monitoring; it just hides `react`, `edit`, `unsend`, `reply`, `sendWithEffect`, and group ops from the action surface (per the per-method capability gate).
217
- - You can run a separate non-Apple-Silicon Mac (or a dedicated bot Mac) with SIP off for the iMessage workload, while keeping SIP enabled on your primary devices. See [Dedicated bot macOS user (separate iMessage identity)](#deployment-patterns) below.
218
-
219
- ## Access control and routing
220
-
221
- <Tabs>
222
- <Tab title="DM policy">
223
- `channels.imessage.dmPolicy` controls direct messages:
224
-
225
- - `pairing` (default)
226
- - `allowlist`
227
- - `open` (requires `allowFrom` to include `"*"`)
228
- - `disabled`
229
-
230
- Allowlist field: `channels.imessage.allowFrom`.
231
-
232
- Allowlist entries must identify senders: handles or static sender access groups (`accessGroup:<name>`). Use `channels.imessage.groupAllowFrom` for chat targets such as `chat_id:*`, `chat_guid:*`, or `chat_identifier:*`; use `channels.imessage.groups` for numeric `chat_id` registry keys.
233
-
234
- </Tab>
235
-
236
- <Tab title="Group policy + mentions">
237
- `channels.imessage.groupPolicy` controls group handling:
238
-
239
- - `allowlist` (default when configured)
240
- - `open`
241
- - `disabled`
242
-
243
- Group sender allowlist: `channels.imessage.groupAllowFrom`.
244
-
245
- `groupAllowFrom` entries can also reference static sender access groups (`accessGroup:<name>`).
246
-
247
- Runtime fallback: if `groupAllowFrom` is unset, iMessage group sender checks use `allowFrom`; set `groupAllowFrom` when DM and group admission should differ.
248
- Runtime note: if `channels.imessage` is completely missing, runtime falls back to `groupPolicy="allowlist"` and logs a warning (even if `channels.defaults.groupPolicy` is set).
249
-
250
- <Warning>
251
- Group routing has **two** allowlist gates running back-to-back, and both must pass:
252
-
253
- 1. **Sender / chat-target allowlist** (`channels.imessage.groupAllowFrom`) — handle, `chat_guid`, `chat_identifier`, or `chat_id`.
254
- 2. **Group registry** (`channels.imessage.groups`) — with `groupPolicy: "allowlist"`, this gate requires either a `groups: { "*": { ... } }` wildcard entry (sets `allowAll = true`), or an explicit per-`chat_id` entry under `groups`.
255
-
256
- If gate 2 has nothing in it, every group message is dropped. The plugin emits two `warn`-level signals at the default log level:
257
-
258
- - one-time per account at startup: `imessage: groupPolicy="allowlist" but channels.imessage.groups is empty for account "<id>"`
259
- - one-time per `chat_id` at runtime: `imessage: dropping group message from chat_id=<id> ...`
260
-
261
- DMs continue to work because they take a different code path.
262
-
263
- Minimum config to keep groups flowing under `groupPolicy: "allowlist"`:
264
-
265
- ```json5
266
- {
267
- channels: {
268
- imessage: {
269
- groupPolicy: "allowlist",
270
- groupAllowFrom: ["+15555550123"],
271
- groups: { "*": { "requireMention": true } },
272
- },
273
- },
274
- }
275
- ```
276
-
277
- If those `warn` lines appear in the gateway log, gate 2 is dropping — add the `groups` block.
278
- </Warning>
279
-
280
- Mention gating for groups:
281
-
282
- - iMessage has no native mention metadata
283
- - mention detection uses regex patterns (`agents.list[].groupChat.mentionPatterns`, fallback `messages.groupChat.mentionPatterns`)
284
- - with no configured patterns, mention gating cannot be enforced
285
-
286
- Control commands from authorized senders can bypass mention gating in groups.
287
-
288
- Per-group `systemPrompt`:
289
-
290
- Each entry under `channels.imessage.groups.*` accepts an optional `systemPrompt` string. The value is injected into the agent's system prompt on every turn that handles a message in that group. Resolution mirrors the per-group prompt resolution used by `channels.whatsapp.groups`:
291
-
292
- 1. **Group-specific system prompt** (`groups["<chat_id>"].systemPrompt`): used when the specific group entry exists in the map **and** its `systemPrompt` key is defined. If `systemPrompt` is an empty string (`""`) the wildcard is suppressed and no system prompt is applied to that group.
293
- 2. **Group wildcard system prompt** (`groups["*"].systemPrompt`): used when the specific group entry is absent from the map entirely, or when it exists but defines no `systemPrompt` key.
294
-
295
- ```json5
296
- {
297
- channels: {
298
- imessage: {
299
- groupPolicy: "allowlist",
300
- groupAllowFrom: ["+15555550123"],
301
- groups: {
302
- "*": { systemPrompt: "Use British spelling." },
303
- "8421": {
304
- requireMention: true,
305
- systemPrompt: "This is the on-call rotation chat. Keep replies under 3 sentences.",
306
- },
307
- "9907": {
308
- // explicit suppression: the wildcard "Use British spelling." does not apply here
309
- systemPrompt: "",
310
- },
311
- },
312
- },
313
- },
314
- }
315
- ```
316
-
317
- Per-group prompts only apply to group messages — direct messages in this channel are unaffected.
318
-
319
- </Tab>
320
-
321
- <Tab title="Sessions and deterministic replies">
322
- - DMs use direct routing; groups use group routing.
323
- - With default `session.dmScope=main`, iMessage DMs collapse into the agent main session.
324
- - Group sessions are isolated (`agent:<agentId>:imessage:group:<chat_id>`).
325
- - Replies route back to iMessage using originating channel/target metadata.
326
-
327
- Group-ish thread behavior:
328
-
329
- Some multi-participant iMessage threads can arrive with `is_group=false`.
330
- If that `chat_id` is explicitly configured under `channels.imessage.groups`, FengMing treats it as group traffic (group gating + group session isolation).
331
-
332
- </Tab>
333
- </Tabs>
334
-
335
- ## ACP conversation bindings
336
-
337
- Legacy iMessage chats can also be bound to ACP sessions.
338
-
339
- Fast operator flow:
340
-
341
- - Run `/acp spawn codex --bind here` inside the DM or allowed group chat.
342
- - Future messages in that same iMessage conversation route to the spawned ACP session.
343
- - `/new` and `/reset` reset the same bound ACP session in place.
344
- - `/acp close` closes the ACP session and removes the binding.
345
-
346
- Configured persistent bindings are supported through top-level `bindings[]` entries with `type: "acp"` and `match.channel: "imessage"`.
347
-
348
- `match.peer.id` can use:
349
-
350
- - normalized DM handle such as `+15555550123` or `user@example.com`
351
- - `chat_id:<id>` (recommended for stable group bindings)
352
- - `chat_guid:<guid>`
353
- - `chat_identifier:<identifier>`
354
-
355
- Example:
356
-
357
- ```json5
358
- {
359
- agents: {
360
- list: [
361
- {
362
- id: "codex",
363
- runtime: {
364
- type: "acp",
365
- acp: { agent: "codex", backend: "acpx", mode: "persistent" },
366
- },
367
- },
368
- ],
369
- },
370
- bindings: [
371
- {
372
- type: "acp",
373
- agentId: "codex",
374
- match: {
375
- channel: "imessage",
376
- accountId: "default",
377
- peer: { kind: "group", id: "chat_id:123" },
378
- },
379
- acp: { label: "codex-group" },
380
- },
381
- ],
382
- }
383
- ```
384
-
385
- See [ACP Agents](/tools/acp-agents) for shared ACP binding behavior.
386
-
387
- ## Deployment patterns
388
-
389
- <AccordionGroup>
390
- <Accordion title="Dedicated bot macOS user (separate iMessage identity)">
391
- Use a dedicated Apple ID and macOS user so bot traffic is isolated from your personal Messages profile.
392
-
393
- Typical flow:
394
-
395
- 1. Create/sign in a dedicated macOS user.
396
- 2. Sign into Messages with the bot Apple ID in that user.
397
- 3. Install `imsg` in that user.
398
- 4. Create SSH wrapper so FengMing can run `imsg` in that user context.
399
- 5. Point `channels.imessage.accounts.<id>.cliPath` and `.dbPath` to that user profile.
400
-
401
- First run may require GUI approvals (Automation + Full Disk Access) in that bot user session.
402
-
403
- </Accordion>
404
-
405
- <Accordion title="Remote Mac over Tailscale (example)">
406
- Common topology:
407
-
408
- - gateway runs on Linux/VM
409
- - iMessage + `imsg` runs on a Mac in your tailnet
410
- - `cliPath` wrapper uses SSH to run `imsg`
411
- - `remoteHost` enables SCP attachment fetches
412
-
413
- Example:
414
-
415
- ```json5
416
- {
417
- channels: {
418
- imessage: {
419
- enabled: true,
420
- cliPath: "~/.fengming/scripts/imsg-ssh",
421
- remoteHost: "bot@mac-mini.tailnet-1234.ts.net",
422
- includeAttachments: true,
423
- dbPath: "/Users/bot/Library/Messages/chat.db",
424
- },
425
- },
426
- }
427
- ```
428
-
429
- ```bash
430
- #!/usr/bin/env bash
431
- exec ssh -T bot@mac-mini.tailnet-1234.ts.net imsg "$@"
432
- ```
433
-
434
- Use SSH keys so both SSH and SCP are non-interactive.
435
- Ensure the host key is trusted first (for example `ssh bot@mac-mini.tailnet-1234.ts.net`) so `known_hosts` is populated.
436
-
437
- </Accordion>
438
-
439
- <Accordion title="Multi-account pattern">
440
- iMessage supports per-account config under `channels.imessage.accounts`.
441
-
442
- Each account can override fields such as `cliPath`, `dbPath`, `allowFrom`, `groupPolicy`, `mediaMaxMb`, history settings, and attachment root allowlists.
443
-
444
- </Accordion>
445
-
446
- <Accordion title="Direct-message history">
447
- Set `channels.imessage.dmHistoryLimit` to seed new direct-message sessions with recent decoded `imsg` history for that conversation. Use `channels.imessage.dms["<sender>"].historyLimit` for per-sender overrides, including `0` to disable history for a sender.
448
-
449
- iMessage DM history is fetched on demand from `imsg`. Leaving `dmHistoryLimit` unset disables global DM history seeding, but a positive per-sender `channels.imessage.dms["<sender>"].historyLimit` still enables seeding for that sender.
450
-
451
- </Accordion>
452
- </AccordionGroup>
453
-
454
- ## Media, chunking, and delivery targets
455
-
456
- <AccordionGroup>
457
- <Accordion title="Attachments and media">
458
- - inbound attachment ingestion is **off by default** — set `channels.imessage.includeAttachments: true` to forward photos, voice memos, video, and other attachments to the agent. With it disabled, attachment-only iMessages are dropped before reaching the agent and may produce no `Inbound message` log line at all.
459
- - remote attachment paths can be fetched via SCP when `remoteHost` is set
460
- - attachment paths must match allowed roots:
461
- - `channels.imessage.attachmentRoots` (local)
462
- - `channels.imessage.remoteAttachmentRoots` (remote SCP mode)
463
- - default root pattern: `/Users/*/Library/Messages/Attachments`
464
- - SCP uses strict host-key checking (`StrictHostKeyChecking=yes`)
465
- - outbound media size uses `channels.imessage.mediaMaxMb` (default 16 MB)
466
-
467
- </Accordion>
468
-
469
- <Accordion title="Outbound chunking">
470
- - text chunk limit: `channels.imessage.textChunkLimit` (default 4000)
471
- - chunk mode: `channels.imessage.chunkMode`
472
- - `length` (default)
473
- - `newline` (paragraph-first splitting)
474
-
475
- </Accordion>
476
-
477
- <Accordion title="Addressing formats">
478
- Preferred explicit targets:
479
-
480
- - `chat_id:123` (recommended for stable routing)
481
- - `chat_guid:...`
482
- - `chat_identifier:...`
483
-
484
- Handle targets are also supported:
485
-
486
- - `imessage:+1555...`
487
- - `sms:+1555...`
488
- - `user@example.com`
489
-
490
- ```bash
491
- imsg chats --limit 20
492
- ```
493
-
494
- </Accordion>
495
- </AccordionGroup>
496
-
497
- ## Private API actions
498
-
499
- When `imsg launch` is running and `fengming channels status --probe` reports `privateApi.available: true`, the message tool can use iMessage-native actions in addition to normal text sends.
500
-
501
- ```json5
502
- {
503
- channels: {
504
- imessage: {
505
- actions: {
506
- reactions: true,
507
- edit: true,
508
- unsend: true,
509
- reply: true,
510
- sendWithEffect: true,
511
- sendAttachment: true,
512
- renameGroup: true,
513
- setGroupIcon: true,
514
- addParticipant: true,
515
- removeParticipant: true,
516
- leaveGroup: true,
517
- },
518
- },
519
- },
520
- }
521
- ```
522
-
523
- <AccordionGroup>
524
- <Accordion title="Available actions">
525
- - **react**: Add/remove iMessage tapbacks (`messageId`, `emoji`, `remove`). Supported tapbacks map to love, like, dislike, laugh, emphasize, and question.
526
- - **reply**: Send a threaded reply to an existing message (`messageId`, `text` or `message`, plus `chatGuid`, `chatId`, `chatIdentifier`, or `to`).
527
- - **sendWithEffect**: Send text with an iMessage effect (`text` or `message`, `effect` or `effectId`).
528
- - **edit**: Edit a sent message on supported macOS/private API versions (`messageId`, `text` or `newText`).
529
- - **unsend**: Retract a sent message on supported macOS/private API versions (`messageId`).
530
- - **upload-file**: Send media/files (`buffer` as base64 or a hydrated `media`/`path`/`filePath`, `filename`, optional `asVoice`). Legacy alias: `sendAttachment`.
531
- - **renameGroup**, **setGroupIcon**, **addParticipant**, **removeParticipant**, **leaveGroup**: Manage group chats when the current target is a group conversation.
532
-
533
- </Accordion>
534
-
535
- <Accordion title="Message IDs">
536
- Inbound iMessage context includes both short `MessageSid` values and full message GUIDs when available. Short IDs are scoped to the recent in-memory reply cache and are checked against the current chat before use. If a short ID has expired or belongs to another chat, retry with the full `MessageSidFull`.
537
-
538
- </Accordion>
539
-
540
- <Accordion title="Capability detection">
541
- FengMing hides private API actions only when the cached probe status says the bridge is unavailable. If the status is unknown, actions remain visible and dispatch probes lazily so the first action can succeed after `imsg launch` without a separate manual status refresh.
542
-
543
- </Accordion>
544
-
545
- <Accordion title="Read receipts and typing">
546
- When the private API bridge is up, accepted inbound chats are marked read before dispatch and a typing bubble is shown to the sender while the agent generates. Disable read-marking with:
547
-
548
- ```json5
549
- {
550
- channels: {
551
- imessage: {
552
- sendReadReceipts: false,
553
- },
554
- },
555
- }
556
- ```
557
-
558
- Older `imsg` builds that pre-date the per-method capability list will gate off typing/read silently; FengMing logs a one-time warning per restart so the missing receipt is attributable.
559
-
560
- </Accordion>
561
-
562
- <Accordion title="Inbound tapbacks">
563
- FengMing subscribes to iMessage tapbacks and routes accepted reactions as system events instead of normal message text, so a user tapback does not trigger an ordinary reply loop.
564
-
565
- Notification mode is controlled by `channels.imessage.reactionNotifications`:
566
-
567
- - `"own"` (default): notify only when users react to bot-authored messages.
568
- - `"all"`: notify for all inbound tapbacks from authorized senders.
569
- - `"off"`: ignore inbound tapbacks.
570
-
571
- Per-account overrides use `channels.imessage.accounts.<id>.reactionNotifications`.
572
-
573
- </Accordion>
574
-
575
- <Accordion title="Approval reactions (👍 / 👎)">
576
- When `approvals.exec.enabled` or `approvals.plugin.enabled` is true and the request routes to iMessage, the gateway delivers an approval prompt natively and accepts a tapback to resolve it:
577
-
578
- - `👍` (Like tapback) → `allow-once`
579
- - `👎` (Dislike tapback) → `deny`
580
- - `allow-always` remains a manual fallback: send `/approve <id> allow-always` as a regular reply.
581
-
582
- Reaction handling requires the reacting user's handle to be an explicit approver. The approver list is read from `channels.imessage.allowFrom` (or `channels.imessage.accounts.<id>.allowFrom`); add the user's phone number in E.164 form or their Apple ID email. The wildcard entry `"*"` is honored but allows any sender to approve. The reaction shortcut intentionally bypasses `reactionNotifications`, `dmPolicy`, and `groupAllowFrom` because the explicit-approver allowlist is the only gate that matters for approval resolution.
583
-
584
- **Behavior change with this release:** When `channels.imessage.allowFrom` is non-empty, the `/approve <id> <decision>` text command is now authorized against that approver list (not the broader DM allowlist). Senders permitted on the DM allowlist but not in `allowFrom` will receive an explicit denial. Add every operator who should be able to approve via `/approve` (and via reactions) to `allowFrom` to preserve the previous behavior. When `allowFrom` is empty the legacy "same-chat fallback" stays in effect and `/approve` continues to authorize anyone the DM allowlist permits.
585
-
586
- Operator notes:
587
- - The reaction binding is stored both in memory (with TTL matched to the approval expiry) and in the gateway's persistent keyed store, so a tapback that lands shortly after a gateway restart still resolves the approval.
588
- - Cross-device `is_from_me=true` tapbacks (the operator's own reaction on a paired Apple device) are intentionally ignored so the bot cannot self-approve.
589
- - Legacy text-style tapbacks (`Liked "…"` plain text from very old Apple clients) cannot resolve approvals because they carry no message GUID; reaction resolution requires the structured tapback metadata that current macOS / iOS clients emit.
590
-
591
- </Accordion>
592
- </AccordionGroup>
593
-
594
- ## Config writes
595
-
596
- iMessage allows channel-initiated config writes by default (for `/config set|unset` when `commands.config: true`).
597
-
598
- Disable:
599
-
600
- ```json5
601
- {
602
- channels: {
603
- imessage: {
604
- configWrites: false,
605
- },
606
- },
607
- }
608
- ```
609
-
610
- <a id="coalescing-split-send-dms-command--url-in-one-composition"></a>
611
-
612
- ## Coalescing split-send DMs (command + URL in one composition)
613
-
614
- When a user types a command and a URL together — e.g. `Dump https://example.com/article` — Apple's Messages app splits the send into **two separate `chat.db` rows**:
615
-
616
- 1. A text message (`"Dump"`).
617
- 2. A URL-preview balloon (`"https://..."`) with OG-preview images as attachments.
618
-
619
- The two rows arrive at FengMing ~0.8-2.0 s apart on most setups. Without coalescing, the agent receives the command alone on turn 1, replies (often "send me the URL"), and only sees the URL on turn 2 — at which point the command context is already lost. This is Apple's send pipeline, not anything FengMing or `imsg` introduces.
620
-
621
- `channels.imessage.coalesceSameSenderDms` opts a DM into merging consecutive same-sender rows into a single agent turn. Group chats continue to dispatch per-message so multi-user turn structure is preserved.
622
-
623
- <Tabs>
624
- <Tab title="When to enable">
625
- Enable when:
626
-
627
- - You ship skills that expect `command + payload` in one message (dump, paste, save, queue, etc.).
628
- - Your users paste URLs, images, or long content alongside commands.
629
- - You can accept the added DM turn latency (see below).
630
-
631
- Leave disabled when:
632
-
633
- - You need minimum command latency for single-word DM triggers.
634
- - All your flows are one-shot commands without payload follow-ups.
635
-
636
- </Tab>
637
- <Tab title="Enabling">
638
- ```json5
639
- {
640
- channels: {
641
- imessage: {
642
- coalesceSameSenderDms: true, // opt in (default: false)
643
- },
644
- },
645
- }
646
- ```
647
-
648
- With the flag on and no explicit `messages.inbound.byChannel.imessage`, the debounce window widens to **2500 ms** (the legacy default is 0 ms — no debouncing). The wider window is required because Apple's split-send cadence of 0.8-2.0 s does not fit in a tighter default.
649
-
650
- To tune the window yourself:
651
-
652
- ```json5
653
- {
654
- messages: {
655
- inbound: {
656
- byChannel: {
657
- // 2500 ms works for most setups; raise to 4000 ms if your Mac is
658
- // slow or under memory pressure (observed gap can stretch past 2 s
659
- // then).
660
- imessage: 2500,
661
- },
662
- },
663
- },
664
- }
665
- ```
666
-
667
- </Tab>
668
- <Tab title="Trade-offs">
669
- - **Added latency for DM messages.** With the flag on, every DM (including standalone control commands and single-text follow-ups) waits up to the debounce window before dispatching, in case a payload row is coming. Group-chat messages keep instant dispatch.
670
- - **Merged output is bounded.** Merged text caps at 4000 chars with an explicit `…[truncated]` marker; attachments cap at 20; source entries cap at 10 (first-plus-latest retained beyond that). Every source GUID is tracked in `coalescedMessageGuids` for downstream telemetry.
671
- - **DM-only.** Group chats fall through to per-message dispatch so the bot stays responsive when multiple people are typing.
672
- - **Opt-in, per-channel.** Other channels (Telegram, WhatsApp, Slack, …) are unaffected. Legacy BlueBubbles configs that set `channels.bluebubbles.coalesceSameSenderDms` should migrate that value to `channels.imessage.coalesceSameSenderDms`.
673
-
674
- </Tab>
675
- </Tabs>
676
-
677
- ### Scenarios and what the agent sees
678
-
679
- | User composes | `chat.db` produces | Flag off (default) | Flag on + 2500 ms window |
680
- | ------------------------------------------------------------------ | --------------------- | --------------------------------------- | ----------------------------------------------------------------------- |
681
- | `Dump https://example.com` (one send) | 2 rows ~1 s apart | Two agent turns: "Dump" alone, then URL | One turn: merged text `Dump https://example.com` |
682
- | `Save this 📎image.jpg caption` (attachment + text) | 2 rows | Two turns (attachment dropped on merge) | One turn: text + image preserved |
683
- | `/status` (standalone command) | 1 row | Instant dispatch | **Wait up to window, then dispatch** |
684
- | URL pasted alone | 1 row | Instant dispatch | Instant dispatch (only one entry in bucket) |
685
- | Text + URL sent as two deliberate separate messages, minutes apart | 2 rows outside window | Two turns | Two turns (window expires between them) |
686
- | Rapid flood (>10 small DMs inside window) | N rows | N turns | One turn, bounded output (first + latest, text/attachment caps applied) |
687
- | Two people typing in a group chat | N rows from M senders | M+ turns (one per sender bucket) | M+ turns — group chats are not coalesced |
688
-
689
- ## Catching up after gateway downtime
690
-
691
- When the gateway is offline (crash, restart, Mac sleep, machine off), `imsg watch` resumes from the current `chat.db` state once the gateway comes back up — anything that arrived during the gap is, by default, never seen. Catchup replays those messages on the next startup so the agent does not silently miss inbound traffic.
692
-
693
- Catchup is **disabled by default**. Enable it per channel:
694
-
695
- ```ts
696
- channels: {
697
- imessage: {
698
- catchup: {
699
- enabled: true, // master switch (default: false)
700
- maxAgeMinutes: 120, // skip rows older than now - 2h (default: 120, clamp 1..720)
701
- perRunLimit: 50, // max rows replayed per startup (default: 50, clamp 1..500)
702
- firstRunLookbackMinutes: 30, // first run with no cursor: look back 30 min (default: 30)
703
- maxFailureRetries: 10, // give up on a wedged guid after 10 dispatch failures (default: 10)
704
- },
705
- },
706
- }
707
- ```
708
-
709
- ### How it runs
710
-
711
- One pass per `monitorIMessageProvider` startup, sequenced as `imsg launch` ready → `watch.subscribe` → `performIMessageCatchup` → live dispatch loop. Catchup itself uses `chats.list` + per-chat `messages.history` against the same JSON-RPC client used by `imsg watch`. Anything that arrives during the catchup pass flows through live dispatch normally; the existing inbound-dedupe cache absorbs any overlap with replayed rows.
712
-
713
- Each replayed row is fed through the live dispatch path (`evaluateIMessageInbound` + `dispatchInboundMessage`), so allowlists, group policy, debouncer, echo cache, and read receipts behave identically on replayed and live messages.
714
-
715
- ### Cursor and retry semantics
716
-
717
- Catchup keeps a per-account cursor at `<fengmingStateDir>/imessage/catchup/<account>__<hash>.json` (the FengMing state dir defaults to `~/.fengming`, overridable with `FENGMING_STATE_DIR`):
718
-
719
- ```json
720
- {
721
- "lastSeenMs": 1717900800000,
722
- "lastSeenRowid": 482910,
723
- "updatedAt": 1717900801234,
724
- "failureRetries": { "<guid>": 1 }
725
- }
726
- ```
727
-
728
- - The cursor advances on each successful dispatch and is held when a row's dispatch throws — the next startup retries the same row from the held cursor.
729
- - After the startup catchup query succeeds, later live-handled rows also advance the same cursor so a gateway restart does not replay messages that were already handled live. Live cursor writes do not jump past catchup failures that are still below `maxFailureRetries`.
730
- - After `maxFailureRetries` consecutive throws against the same `guid`, catchup logs a `warn` and force-advances the cursor past the wedged message so subsequent startups can make progress.
731
- - Already-given-up guids are skipped on sight (no dispatch attempt) on later runs and counted under `skippedGivenUp` in the run summary.
732
-
733
- ### Operator-visible signals
734
-
735
- ```
736
- imessage catchup: replayed=N skippedFromMe=… skippedGivenUp=… failed=… givenUp=… fetchedCount=…
737
- imessage catchup: giving up on guid=<guid> after <N> failures; advancing cursor past it
738
- imessage catchup: fetched <X> rows across chats, capped to perRunLimit=<Y>
739
- ```
740
-
741
- A `WARN ... capped to perRunLimit` line means a single startup did not drain the full backlog. Raise `perRunLimit` (max 500) if your gaps regularly exceed the default 50-row pass.
742
-
743
- ### When to leave it off
744
-
745
- - Gateway runs continuously with watchdog auto-restart and gaps are always < a few seconds — the default of off is fine.
746
- - DM volume is low and missed messages would not change agent behavior — the `firstRunLookbackMinutes` initial window can dispatch surprising old context on first enable.
747
-
748
- When you turn catchup on, the first startup with no cursor only looks back `firstRunLookbackMinutes` (30 min default), not the full `maxAgeMinutes` window — this avoids replaying a long history of pre-enable messages.
749
-
750
- ## Troubleshooting
751
-
752
- <AccordionGroup>
753
- <Accordion title="imsg not found or RPC unsupported">
754
- Validate the binary and RPC support:
755
-
756
- ```bash
757
- imsg rpc --help
758
- imsg status --json
759
- fengming channels status --probe
760
- ```
761
-
762
- If probe reports RPC unsupported, update `imsg`. If private API actions are unavailable, run `imsg launch` in the logged-in macOS user session and probe again. If the Gateway is not running on macOS, use the Remote Mac over SSH setup above instead of the default local `imsg` path.
763
-
764
- </Accordion>
765
-
766
- <Accordion title="Gateway is not running on macOS">
767
- The default `cliPath: "imsg"` must run on the Mac signed into Messages. On Linux or Windows, set `channels.imessage.cliPath` to a wrapper script that SSHes to that Mac and runs `imsg "$@"`.
768
-
769
- ```bash
770
- #!/usr/bin/env bash
771
- exec ssh -T messages-mac imsg "$@"
772
- ```
773
-
774
- Then run:
775
-
776
- ```bash
777
- fengming channels status --probe --channel imessage
778
- ```
779
-
780
- </Accordion>
781
-
782
- <Accordion title="DMs are ignored">
783
- Check:
784
-
785
- - `channels.imessage.dmPolicy`
786
- - `channels.imessage.allowFrom`
787
- - pairing approvals (`fengming pairing list imessage`)
788
-
789
- </Accordion>
790
-
791
- <Accordion title="Group messages are ignored">
792
- Check:
793
-
794
- - `channels.imessage.groupPolicy`
795
- - `channels.imessage.groupAllowFrom`
796
- - `channels.imessage.groups` allowlist behavior
797
- - mention pattern configuration (`agents.list[].groupChat.mentionPatterns`)
798
-
799
- </Accordion>
800
-
801
- <Accordion title="Remote attachments fail">
802
- Check:
803
-
804
- - `channels.imessage.remoteHost`
805
- - `channels.imessage.remoteAttachmentRoots`
806
- - SSH/SCP key auth from the gateway host
807
- - host key exists in `~/.ssh/known_hosts` on the gateway host
808
- - remote path readability on the Mac running Messages
809
-
810
- </Accordion>
811
-
812
- <Accordion title="macOS permission prompts were missed">
813
- Re-run in an interactive GUI terminal in the same user/session context and approve prompts:
814
-
815
- ```bash
816
- imsg chats --limit 1
817
- imsg send <handle> "test"
818
- ```
819
-
820
- Confirm Full Disk Access + Automation are granted for the process context that runs FengMing/`imsg`.
821
-
822
- </Accordion>
823
- </AccordionGroup>
824
-
825
- ## Configuration reference pointers
826
-
827
- - [Configuration reference - iMessage](/gateway/config-channels#imessage)
828
- - [Gateway configuration](/gateway/configuration)
829
- - [Pairing](/channels/pairing)
830
-
831
- ## Related
832
-
833
- - [Channels Overview](/channels) — all supported channels
834
- - [BlueBubbles removal and the imsg iMessage path](/announcements/bluebubbles-imessage) — announcement and migration summary
835
- - [Coming from BlueBubbles](/channels/imessage-from-bluebubbles) — config translation table and step-by-step cutover
836
- - [Pairing](/channels/pairing) — DM authentication and pairing flow
837
- - [Groups](/channels/groups) — group chat behavior and mention gating
838
- - [Channel Routing](/channels/channel-routing) — session routing for messages
839
- - [Security](/gateway/security) — access model and hardening