fengming 0.3.9 → 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 (763) hide show
  1. package/dist/build-info.json +2 -2
  2. package/dist/{bundled-channel-config-schema-DpdKMATU.d.ts → bundled-channel-config-schema-Bte--ZlY.d.ts} +26 -26
  3. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  4. package/dist/cli-startup-metadata.json +8 -8
  5. package/dist/control-ui/assets/{activity-B2W-IeAT.js → activity-wgT0-JR0.js} +2 -2
  6. package/dist/control-ui/assets/{agents-mRUyNVCz.js → agents-DG5PobrT.js} +2 -2
  7. package/dist/control-ui/assets/{channels-8QHOqBnt.js → channels-CX28oM42.js} +2 -2
  8. package/dist/control-ui/assets/{cron-H3unP_mO.js → cron-B8ixwBqU.js} +2 -2
  9. package/dist/control-ui/assets/{debug-CxLsQ9vH.js → debug-CnkYZUXy.js} +2 -2
  10. package/dist/control-ui/assets/{index-jtIYT0Eh.js → index-DQRZJKbO.js} +4 -4
  11. package/dist/control-ui/assets/{instances-B1JQeCRb.js → instances-BE3mV1JC.js} +2 -2
  12. package/dist/control-ui/assets/{nodes-RGOmq_1l.js → nodes-Cou4PWRX.js} +2 -2
  13. package/dist/control-ui/assets/{sessions-C2O-Jgpg.js → sessions-DpAaBT21.js} +2 -2
  14. package/dist/control-ui/assets/{skills-jyJOYA4I.js → skills-DjA_j_20.js} +2 -2
  15. package/dist/control-ui/assets/{workboard-uM_kK8cQ.js → workboard-BFnvbS0k.js} +2 -2
  16. package/dist/control-ui/index.html +1 -1
  17. package/dist/control-ui/sw.js +1 -1
  18. package/dist/gateway/protocol/index.d.ts +1 -1
  19. package/dist/{index-DhOQs6M_.d.ts → index-DuDY3bCZ.d.ts} +45 -45
  20. package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
  21. package/dist/plugin-sdk/agent-config-primitives.d.ts +1 -1
  22. package/dist/plugin-sdk/{bundled-channel-config-schema-Dfn3b8sF.d.ts → bundled-channel-config-schema-BPFNnbwu.d.ts} +23 -23
  23. package/dist/plugin-sdk/bundled-channel-config-schema.d.ts +3 -3
  24. package/dist/plugin-sdk/channel-config-primitives.d.ts +2 -2
  25. package/dist/plugin-sdk/channel-config-schema-legacy.d.ts +3 -3
  26. package/dist/plugin-sdk/channel-config-schema.d.ts +2 -2
  27. package/dist/plugin-sdk/channel-core.d.ts +1 -1
  28. package/dist/plugin-sdk/channel-plugin-common.d.ts +1 -1
  29. package/dist/plugin-sdk/compat.d.ts +2 -2
  30. package/dist/plugin-sdk/{config-schema-DUddICQM.d.ts → config-schema-D7cABQ6o.d.ts} +1 -1
  31. package/dist/plugin-sdk/config-schema.d.ts +4 -4
  32. package/dist/plugin-sdk/core.d.ts +1 -1
  33. package/dist/plugin-sdk/discord.d.ts +2 -2
  34. package/dist/plugin-sdk/tts-runtime.d.ts +1 -1
  35. package/dist/plugin-sdk/{zod-schema.core-B4_b2R5K.d.ts → zod-schema.core-CwBNqcXp.d.ts} +1 -1
  36. package/dist/{zod-schema.core-Cuz0lz6m.d.ts → zod-schema.core-BGLctDlK.d.ts} +1 -1
  37. package/package.json +7 -412
  38. package/CHANGELOG.md +0 -38
  39. package/THIRD_PARTY_NOTICES.md +0 -37
  40. package/docs/.i18n/README.md +0 -81
  41. package/docs/.i18n/ar-navigation.json +0 -18
  42. package/docs/.i18n/de-navigation.json +0 -18
  43. package/docs/.i18n/es-navigation.json +0 -18
  44. package/docs/.i18n/fr-navigation.json +0 -18
  45. package/docs/.i18n/glossary.ar.json +0 -78
  46. package/docs/.i18n/glossary.de.json +0 -78
  47. package/docs/.i18n/glossary.es.json +0 -78
  48. package/docs/.i18n/glossary.fa.json +0 -78
  49. package/docs/.i18n/glossary.fr.json +0 -78
  50. package/docs/.i18n/glossary.id.json +0 -78
  51. package/docs/.i18n/glossary.it.json +0 -78
  52. package/docs/.i18n/glossary.ja-JP.json +0 -98
  53. package/docs/.i18n/glossary.ko.json +0 -78
  54. package/docs/.i18n/glossary.nl.json +0 -78
  55. package/docs/.i18n/glossary.pl.json +0 -78
  56. package/docs/.i18n/glossary.pt-BR.json +0 -78
  57. package/docs/.i18n/glossary.th.json +0 -78
  58. package/docs/.i18n/glossary.tr.json +0 -78
  59. package/docs/.i18n/glossary.uk.json +0 -78
  60. package/docs/.i18n/glossary.vi.json +0 -78
  61. package/docs/.i18n/glossary.zh-CN.json +0 -1122
  62. package/docs/.i18n/glossary.zh-TW.json +0 -78
  63. package/docs/.i18n/id-navigation.json +0 -18
  64. package/docs/.i18n/it-navigation.json +0 -18
  65. package/docs/.i18n/ja-navigation.json +0 -18
  66. package/docs/.i18n/ko-navigation.json +0 -18
  67. package/docs/.i18n/pl-navigation.json +0 -18
  68. package/docs/.i18n/pt-BR-navigation.json +0 -18
  69. package/docs/.i18n/tr-navigation.json +0 -18
  70. package/docs/.i18n/translation-workflow.md +0 -111
  71. package/docs/.i18n/zh-Hans-navigation.json +0 -552
  72. package/docs/AGENTS.md +0 -36
  73. package/docs/CLAUDE.md +0 -1
  74. package/docs/agent-runtime-architecture.md +0 -48
  75. package/docs/announcements/bluebubbles-imessage.md +0 -79
  76. package/docs/auth-credential-semantics.md +0 -124
  77. package/docs/automation/auth-monitoring.md +0 -11
  78. package/docs/automation/clawflow.md +0 -12
  79. package/docs/automation/cron-jobs.md +0 -534
  80. package/docs/automation/cron-vs-heartbeat.md +0 -11
  81. package/docs/automation/gmail-pubsub.md +0 -11
  82. package/docs/automation/hooks.md +0 -387
  83. package/docs/automation/index.md +0 -135
  84. package/docs/automation/poll.md +0 -12
  85. package/docs/automation/standing-orders.md +0 -250
  86. package/docs/automation/taskflow.md +0 -155
  87. package/docs/automation/tasks.md +0 -374
  88. package/docs/automation/troubleshooting.md +0 -12
  89. package/docs/automation/webhook.md +0 -12
  90. package/docs/brave-search.md +0 -11
  91. package/docs/channels/access-groups.md +0 -201
  92. package/docs/channels/ambient-room-events.md +0 -214
  93. package/docs/channels/bot-loop-protection.md +0 -131
  94. package/docs/channels/broadcast-groups.md +0 -472
  95. package/docs/channels/channel-routing.md +0 -162
  96. package/docs/channels/clickclack.md +0 -138
  97. package/docs/channels/discord.md +0 -1758
  98. package/docs/channels/feishu.md +0 -650
  99. package/docs/channels/googlechat.md +0 -284
  100. package/docs/channels/group-messages.md +0 -95
  101. package/docs/channels/groups.md +0 -524
  102. package/docs/channels/imessage-from-bluebubbles.md +0 -259
  103. package/docs/channels/imessage.md +0 -839
  104. package/docs/channels/index.md +0 -64
  105. package/docs/channels/irc.md +0 -253
  106. package/docs/channels/line.md +0 -243
  107. package/docs/channels/location.md +0 -71
  108. package/docs/channels/matrix-migration.md +0 -370
  109. package/docs/channels/matrix-presentation.md +0 -77
  110. package/docs/channels/matrix-push-rules.md +0 -150
  111. package/docs/channels/matrix.md +0 -921
  112. package/docs/channels/mattermost.md +0 -542
  113. package/docs/channels/msteams.md +0 -1096
  114. package/docs/channels/nextcloud-talk.md +0 -176
  115. package/docs/channels/nostr.md +0 -253
  116. package/docs/channels/pairing.md +0 -214
  117. package/docs/channels/qqbot.md +0 -314
  118. package/docs/channels/signal.md +0 -417
  119. package/docs/channels/slack.md +0 -1623
  120. package/docs/channels/synology-chat.md +0 -187
  121. package/docs/channels/telegram.md +0 -1124
  122. package/docs/channels/tlon.md +0 -296
  123. package/docs/channels/troubleshooting.md +0 -162
  124. package/docs/channels/twitch.md +0 -431
  125. package/docs/channels/wechat.md +0 -171
  126. package/docs/channels/whatsapp.md +0 -796
  127. package/docs/channels/yuanbao.md +0 -416
  128. package/docs/channels/zalo.md +0 -253
  129. package/docs/channels/zalouser.md +0 -217
  130. package/docs/ci.md +0 -657
  131. package/docs/clawhub/publishing.md +0 -96
  132. package/docs/cli/acp.md +0 -370
  133. package/docs/cli/agent.md +0 -109
  134. package/docs/cli/agents.md +0 -253
  135. package/docs/cli/approvals.md +0 -190
  136. package/docs/cli/backup.md +0 -98
  137. package/docs/cli/browser.md +0 -307
  138. package/docs/cli/channels.md +0 -154
  139. package/docs/cli/clawbot.md +0 -25
  140. package/docs/cli/commitments.md +0 -90
  141. package/docs/cli/completion.md +0 -39
  142. package/docs/cli/config.md +0 -504
  143. package/docs/cli/configure.md +0 -77
  144. package/docs/cli/crestodian.md +0 -337
  145. package/docs/cli/cron.md +0 -304
  146. package/docs/cli/daemon.md +0 -67
  147. package/docs/cli/dashboard.md +0 -33
  148. package/docs/cli/devices.md +0 -240
  149. package/docs/cli/directory.md +0 -68
  150. package/docs/cli/dns.md +0 -53
  151. package/docs/cli/docs.md +0 -63
  152. package/docs/cli/doctor.md +0 -241
  153. package/docs/cli/flows.md +0 -52
  154. package/docs/cli/gateway.md +0 -572
  155. package/docs/cli/health.md +0 -43
  156. package/docs/cli/hooks.md +0 -345
  157. package/docs/cli/index.md +0 -400
  158. package/docs/cli/infer.md +0 -364
  159. package/docs/cli/logs.md +0 -68
  160. package/docs/cli/mcp.md +0 -529
  161. package/docs/cli/memory.md +0 -183
  162. package/docs/cli/message.md +0 -317
  163. package/docs/cli/migrate.md +0 -334
  164. package/docs/cli/models.md +0 -239
  165. package/docs/cli/node.md +0 -177
  166. package/docs/cli/nodes.md +0 -76
  167. package/docs/cli/onboard.md +0 -250
  168. package/docs/cli/pairing.md +0 -77
  169. package/docs/cli/path.md +0 -511
  170. package/docs/cli/plugins.md +0 -459
  171. package/docs/cli/policy.md +0 -886
  172. package/docs/cli/proxy.md +0 -89
  173. package/docs/cli/qr.md +0 -56
  174. package/docs/cli/reset.md +0 -39
  175. package/docs/cli/sandbox.md +0 -208
  176. package/docs/cli/secrets.md +0 -202
  177. package/docs/cli/security.md +0 -136
  178. package/docs/cli/sessions.md +0 -164
  179. package/docs/cli/setup.md +0 -59
  180. package/docs/cli/skills.md +0 -122
  181. package/docs/cli/status.md +0 -45
  182. package/docs/cli/system.md +0 -89
  183. package/docs/cli/tasks.md +0 -111
  184. package/docs/cli/transcripts.md +0 -151
  185. package/docs/cli/tui.md +0 -91
  186. package/docs/cli/uninstall.md +0 -44
  187. package/docs/cli/update.md +0 -243
  188. package/docs/cli/voicecall.md +0 -204
  189. package/docs/cli/webhooks.md +0 -117
  190. package/docs/cli/wiki.md +0 -256
  191. package/docs/concepts/active-memory.md +0 -856
  192. package/docs/concepts/agent-loop.md +0 -185
  193. package/docs/concepts/agent-runtimes.md +0 -276
  194. package/docs/concepts/agent-workspace.md +0 -230
  195. package/docs/concepts/agent.md +0 -140
  196. package/docs/concepts/architecture.md +0 -154
  197. package/docs/concepts/channel-docking.md +0 -145
  198. package/docs/concepts/commitments.md +0 -150
  199. package/docs/concepts/compaction.md +0 -203
  200. package/docs/concepts/context-engine.md +0 -347
  201. package/docs/concepts/context.md +0 -199
  202. package/docs/concepts/delegate-architecture.md +0 -319
  203. package/docs/concepts/dreaming.md +0 -264
  204. package/docs/concepts/experimental-features.md +0 -109
  205. package/docs/concepts/features.md +0 -91
  206. package/docs/concepts/fengming-sdk.md +0 -323
  207. package/docs/concepts/mantis-slack-desktop-runbook.md +0 -231
  208. package/docs/concepts/mantis.md +0 -744
  209. package/docs/concepts/markdown-formatting.md +0 -139
  210. package/docs/concepts/memory-builtin.md +0 -148
  211. package/docs/concepts/memory-honcho.md +0 -144
  212. package/docs/concepts/memory-qmd.md +0 -271
  213. package/docs/concepts/memory-search.md +0 -167
  214. package/docs/concepts/memory.md +0 -299
  215. package/docs/concepts/message-lifecycle-refactor.md +0 -1126
  216. package/docs/concepts/messages.md +0 -214
  217. package/docs/concepts/model-failover.md +0 -384
  218. package/docs/concepts/model-providers.md +0 -719
  219. package/docs/concepts/models.md +0 -371
  220. package/docs/concepts/multi-agent.md +0 -625
  221. package/docs/concepts/oauth.md +0 -198
  222. package/docs/concepts/parallel-specialist-lanes.md +0 -127
  223. package/docs/concepts/personal-agent-benchmark-pack.md +0 -74
  224. package/docs/concepts/presence.md +0 -117
  225. package/docs/concepts/progress-drafts.md +0 -406
  226. package/docs/concepts/qa-e2e-automation.md +0 -947
  227. package/docs/concepts/qa-matrix.md +0 -139
  228. package/docs/concepts/queue-steering.md +0 -90
  229. package/docs/concepts/queue.md +0 -136
  230. package/docs/concepts/retry.md +0 -86
  231. package/docs/concepts/session-pruning.md +0 -104
  232. package/docs/concepts/session-tool.md +0 -188
  233. package/docs/concepts/session.md +0 -164
  234. package/docs/concepts/soul.md +0 -116
  235. package/docs/concepts/streaming.md +0 -257
  236. package/docs/concepts/system-prompt.md +0 -328
  237. package/docs/concepts/timezone.md +0 -47
  238. package/docs/concepts/typebox.md +0 -309
  239. package/docs/concepts/typing-indicators.md +0 -88
  240. package/docs/concepts/usage-tracking.md +0 -66
  241. package/docs/date-time.md +0 -126
  242. package/docs/debug/node-issue.md +0 -90
  243. package/docs/diagnostics/flags.md +0 -182
  244. package/docs/docs.json +0 -1862
  245. package/docs/fengming-agent-runtime.md +0 -82
  246. package/docs/gateway/authentication.md +0 -256
  247. package/docs/gateway/background-process.md +0 -147
  248. package/docs/gateway/bonjour.md +0 -303
  249. package/docs/gateway/bridge-protocol.md +0 -97
  250. package/docs/gateway/cli-backends.md +0 -439
  251. package/docs/gateway/config-agents.md +0 -1525
  252. package/docs/gateway/config-channels.md +0 -945
  253. package/docs/gateway/config-tools.md +0 -774
  254. package/docs/gateway/configuration-examples.md +0 -704
  255. package/docs/gateway/configuration-reference.md +0 -1391
  256. package/docs/gateway/configuration.md +0 -739
  257. package/docs/gateway/diagnostics.md +0 -213
  258. package/docs/gateway/discovery.md +0 -154
  259. package/docs/gateway/doctor.md +0 -575
  260. package/docs/gateway/gateway-lock.md +0 -37
  261. package/docs/gateway/health.md +0 -73
  262. package/docs/gateway/heartbeat.md +0 -498
  263. package/docs/gateway/index.md +0 -383
  264. package/docs/gateway/local-model-services.md +0 -205
  265. package/docs/gateway/local-models.md +0 -355
  266. package/docs/gateway/logging.md +0 -149
  267. package/docs/gateway/multiple-gateways.md +0 -178
  268. package/docs/gateway/network-model.md +0 -15
  269. package/docs/gateway/openai-http-api.md +0 -378
  270. package/docs/gateway/openresponses-http-api.md +0 -347
  271. package/docs/gateway/openshell.md +0 -316
  272. package/docs/gateway/opentelemetry.md +0 -433
  273. package/docs/gateway/operator-scopes.md +0 -119
  274. package/docs/gateway/pairing.md +0 -207
  275. package/docs/gateway/prometheus.md +0 -249
  276. package/docs/gateway/protocol.md +0 -826
  277. package/docs/gateway/remote-gateway-readme.md +0 -169
  278. package/docs/gateway/remote.md +0 -280
  279. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +0 -148
  280. package/docs/gateway/sandboxing.md +0 -546
  281. package/docs/gateway/secrets-plan-contract.md +0 -159
  282. package/docs/gateway/secrets.md +0 -805
  283. package/docs/gateway/security/audit-checks.md +0 -127
  284. package/docs/gateway/security/exposure-runbook.md +0 -212
  285. package/docs/gateway/security/index.md +0 -1343
  286. package/docs/gateway/security/secure-file-operations.md +0 -76
  287. package/docs/gateway/security/shrinkwrap.md +0 -111
  288. package/docs/gateway/tailscale.md +0 -156
  289. package/docs/gateway/tools-invoke-http-api.md +0 -169
  290. package/docs/gateway/troubleshooting.md +0 -877
  291. package/docs/gateway/trusted-proxy-auth.md +0 -483
  292. package/docs/help/debugging.md +0 -341
  293. package/docs/help/environment.md +0 -233
  294. package/docs/help/faq-first-run.md +0 -870
  295. package/docs/help/faq-models.md +0 -556
  296. package/docs/help/faq.md +0 -2041
  297. package/docs/help/index.md +0 -39
  298. package/docs/help/scripts.md +0 -56
  299. package/docs/help/testing-live.md +0 -587
  300. package/docs/help/testing-updates-plugins.md +0 -299
  301. package/docs/help/testing.md +0 -977
  302. package/docs/help/troubleshooting.md +0 -449
  303. package/docs/index.md +0 -196
  304. package/docs/install/ansible.md +0 -233
  305. package/docs/install/azure.md +0 -315
  306. package/docs/install/bun.md +0 -59
  307. package/docs/install/clawdock.md +0 -112
  308. package/docs/install/development-channels.md +0 -148
  309. package/docs/install/digitalocean.md +0 -174
  310. package/docs/install/docker-vm-runtime.md +0 -154
  311. package/docs/install/docker.md +0 -564
  312. package/docs/install/exe-dev.md +0 -201
  313. package/docs/install/fly.md +0 -524
  314. package/docs/install/gcp.md +0 -418
  315. package/docs/install/hetzner.md +0 -285
  316. package/docs/install/hostinger.md +0 -98
  317. package/docs/install/index.md +0 -232
  318. package/docs/install/installer.md +0 -447
  319. package/docs/install/kubernetes.md +0 -196
  320. package/docs/install/macos-vm.md +0 -281
  321. package/docs/install/migrating-claude.md +0 -165
  322. package/docs/install/migrating-hermes.md +0 -178
  323. package/docs/install/migrating.md +0 -137
  324. package/docs/install/nix.md +0 -112
  325. package/docs/install/node.md +0 -142
  326. package/docs/install/northflank.mdx +0 -44
  327. package/docs/install/oracle.md +0 -218
  328. package/docs/install/podman.md +0 -216
  329. package/docs/install/railway.mdx +0 -92
  330. package/docs/install/raspberry-pi.md +0 -234
  331. package/docs/install/render.mdx +0 -167
  332. package/docs/install/uninstall.md +0 -131
  333. package/docs/install/updating.md +0 -284
  334. package/docs/install/upstash.md +0 -96
  335. package/docs/logging.md +0 -320
  336. package/docs/nav-tabs-underline.js +0 -100
  337. package/docs/network.md +0 -72
  338. package/docs/nodes/audio.md +0 -216
  339. package/docs/nodes/camera.md +0 -166
  340. package/docs/nodes/images.md +0 -77
  341. package/docs/nodes/index.md +0 -439
  342. package/docs/nodes/location-command.md +0 -102
  343. package/docs/nodes/media-understanding.md +0 -495
  344. package/docs/nodes/talk.md +0 -160
  345. package/docs/nodes/troubleshooting.md +0 -123
  346. package/docs/nodes/voicewake.md +0 -93
  347. package/docs/perplexity.md +0 -11
  348. package/docs/plan/codex-context-engine-harness.md +0 -624
  349. package/docs/plan/ui-channels.md +0 -284
  350. package/docs/platforms/digitalocean.md +0 -12
  351. package/docs/platforms/easyrunner.md +0 -109
  352. package/docs/platforms/index.md +0 -51
  353. package/docs/platforms/linux.md +0 -141
  354. package/docs/platforms/mac/bundled-gateway.md +0 -79
  355. package/docs/platforms/mac/canvas.md +0 -128
  356. package/docs/platforms/mac/child-process.md +0 -72
  357. package/docs/platforms/mac/dev-setup.md +0 -112
  358. package/docs/platforms/mac/health.md +0 -39
  359. package/docs/platforms/mac/icon.md +0 -36
  360. package/docs/platforms/mac/logging.md +0 -62
  361. package/docs/platforms/mac/menu-bar.md +0 -93
  362. package/docs/platforms/mac/peekaboo.md +0 -96
  363. package/docs/platforms/mac/permissions.md +0 -73
  364. package/docs/platforms/mac/remote.md +0 -123
  365. package/docs/platforms/mac/signing.md +0 -52
  366. package/docs/platforms/mac/skills.md +0 -43
  367. package/docs/platforms/mac/voice-overlay.md +0 -66
  368. package/docs/platforms/mac/voicewake.md +0 -73
  369. package/docs/platforms/mac/webchat.md +0 -54
  370. package/docs/platforms/mac/xpc.md +0 -66
  371. package/docs/platforms/oracle.md +0 -12
  372. package/docs/platforms/raspberry-pi.md +0 -13
  373. package/docs/platforms/windows.md +0 -286
  374. package/docs/plugins/adding-capabilities.md +0 -146
  375. package/docs/plugins/admin-http-rpc.md +0 -216
  376. package/docs/plugins/agent-tools.md +0 -13
  377. package/docs/plugins/architecture-internals.md +0 -1196
  378. package/docs/plugins/architecture.md +0 -483
  379. package/docs/plugins/building-extensions.md +0 -13
  380. package/docs/plugins/building-plugins.md +0 -335
  381. package/docs/plugins/bundles.md +0 -310
  382. package/docs/plugins/cli-backend-plugins.md +0 -310
  383. package/docs/plugins/codex-computer-use.md +0 -297
  384. package/docs/plugins/codex-harness-reference.md +0 -470
  385. package/docs/plugins/codex-harness-runtime.md +0 -268
  386. package/docs/plugins/codex-harness.md +0 -780
  387. package/docs/plugins/codex-native-plugins.md +0 -276
  388. package/docs/plugins/community.md +0 -77
  389. package/docs/plugins/compatibility.md +0 -167
  390. package/docs/plugins/copilot.md +0 -356
  391. package/docs/plugins/dependency-resolution.md +0 -176
  392. package/docs/plugins/google-meet.md +0 -1737
  393. package/docs/plugins/hooks.md +0 -484
  394. package/docs/plugins/install-overrides.md +0 -80
  395. package/docs/plugins/manage-plugins.md +0 -210
  396. package/docs/plugins/manifest.md +0 -1457
  397. package/docs/plugins/memory-lancedb.md +0 -385
  398. package/docs/plugins/memory-wiki.md +0 -529
  399. package/docs/plugins/message-presentation.md +0 -473
  400. package/docs/plugins/oc-path.md +0 -166
  401. package/docs/plugins/plugin-inventory.md +0 -189
  402. package/docs/plugins/plugin-permission-requests.md +0 -193
  403. package/docs/plugins/reference/acpx.md +0 -23
  404. package/docs/plugins/reference/admin-http-rpc.md +0 -23
  405. package/docs/plugins/reference/alibaba.md +0 -23
  406. package/docs/plugins/reference/amazon-bedrock-mantle.md +0 -23
  407. package/docs/plugins/reference/amazon-bedrock.md +0 -23
  408. package/docs/plugins/reference/anthropic-vertex.md +0 -19
  409. package/docs/plugins/reference/anthropic.md +0 -23
  410. package/docs/plugins/reference/arcee.md +0 -23
  411. package/docs/plugins/reference/azure-speech.md +0 -23
  412. package/docs/plugins/reference/bonjour.md +0 -19
  413. package/docs/plugins/reference/brave.md +0 -23
  414. package/docs/plugins/reference/browser.md +0 -23
  415. package/docs/plugins/reference/byteplus.md +0 -19
  416. package/docs/plugins/reference/canvas.md +0 -19
  417. package/docs/plugins/reference/cerebras.md +0 -23
  418. package/docs/plugins/reference/chutes.md +0 -23
  419. package/docs/plugins/reference/clickclack.md +0 -23
  420. package/docs/plugins/reference/cloudflare-ai-gateway.md +0 -23
  421. package/docs/plugins/reference/codex-supervisor.md +0 -27
  422. package/docs/plugins/reference/codex.md +0 -23
  423. package/docs/plugins/reference/comfy.md +0 -23
  424. package/docs/plugins/reference/copilot-proxy.md +0 -19
  425. package/docs/plugins/reference/copilot.md +0 -23
  426. package/docs/plugins/reference/deepgram.md +0 -23
  427. package/docs/plugins/reference/deepinfra.md +0 -23
  428. package/docs/plugins/reference/deepseek.md +0 -23
  429. package/docs/plugins/reference/diagnostics-otel.md +0 -19
  430. package/docs/plugins/reference/diagnostics-prometheus.md +0 -19
  431. package/docs/plugins/reference/diffs-language-pack.md +0 -19
  432. package/docs/plugins/reference/diffs.md +0 -19
  433. package/docs/plugins/reference/discord.md +0 -23
  434. package/docs/plugins/reference/document-extract.md +0 -23
  435. package/docs/plugins/reference/duckduckgo.md +0 -23
  436. package/docs/plugins/reference/elevenlabs.md +0 -23
  437. package/docs/plugins/reference/exa.md +0 -23
  438. package/docs/plugins/reference/fal.md +0 -23
  439. package/docs/plugins/reference/feishu.md +0 -23
  440. package/docs/plugins/reference/file-transfer.md +0 -19
  441. package/docs/plugins/reference/firecrawl.md +0 -23
  442. package/docs/plugins/reference/fireworks.md +0 -23
  443. package/docs/plugins/reference/github-copilot.md +0 -23
  444. package/docs/plugins/reference/gmi.md +0 -23
  445. package/docs/plugins/reference/google-meet.md +0 -23
  446. package/docs/plugins/reference/google.md +0 -23
  447. package/docs/plugins/reference/googlechat.md +0 -23
  448. package/docs/plugins/reference/gradium.md +0 -23
  449. package/docs/plugins/reference/groq.md +0 -23
  450. package/docs/plugins/reference/huggingface.md +0 -23
  451. package/docs/plugins/reference/imessage.md +0 -23
  452. package/docs/plugins/reference/inworld.md +0 -23
  453. package/docs/plugins/reference/irc.md +0 -23
  454. package/docs/plugins/reference/kilocode.md +0 -23
  455. package/docs/plugins/reference/kimi.md +0 -23
  456. package/docs/plugins/reference/line.md +0 -23
  457. package/docs/plugins/reference/litellm.md +0 -23
  458. package/docs/plugins/reference/llm-task.md +0 -19
  459. package/docs/plugins/reference/lmstudio.md +0 -23
  460. package/docs/plugins/reference/lobster.md +0 -19
  461. package/docs/plugins/reference/matrix.md +0 -23
  462. package/docs/plugins/reference/mattermost.md +0 -23
  463. package/docs/plugins/reference/memory-core.md +0 -19
  464. package/docs/plugins/reference/memory-lancedb.md +0 -23
  465. package/docs/plugins/reference/memory-wiki.md +0 -23
  466. package/docs/plugins/reference/microsoft-foundry.md +0 -19
  467. package/docs/plugins/reference/microsoft.md +0 -19
  468. package/docs/plugins/reference/migrate-claude.md +0 -19
  469. package/docs/plugins/reference/migrate-hermes.md +0 -19
  470. package/docs/plugins/reference/minimax.md +0 -23
  471. package/docs/plugins/reference/mistral.md +0 -23
  472. package/docs/plugins/reference/moonshot.md +0 -23
  473. package/docs/plugins/reference/msteams.md +0 -23
  474. package/docs/plugins/reference/nextcloud-talk.md +0 -23
  475. package/docs/plugins/reference/nostr.md +0 -23
  476. package/docs/plugins/reference/novita.md +0 -23
  477. package/docs/plugins/reference/nvidia.md +0 -23
  478. package/docs/plugins/reference/oc-path.md +0 -23
  479. package/docs/plugins/reference/ollama.md +0 -23
  480. package/docs/plugins/reference/open-prose.md +0 -19
  481. package/docs/plugins/reference/openai.md +0 -23
  482. package/docs/plugins/reference/opencode-go.md +0 -23
  483. package/docs/plugins/reference/opencode.md +0 -23
  484. package/docs/plugins/reference/openrouter.md +0 -23
  485. package/docs/plugins/reference/openshell.md +0 -19
  486. package/docs/plugins/reference/perplexity.md +0 -23
  487. package/docs/plugins/reference/pixverse.md +0 -23
  488. package/docs/plugins/reference/policy.md +0 -72
  489. package/docs/plugins/reference/qa-channel.md +0 -23
  490. package/docs/plugins/reference/qa-lab.md +0 -19
  491. package/docs/plugins/reference/qa-matrix.md +0 -19
  492. package/docs/plugins/reference/qianfan.md +0 -23
  493. package/docs/plugins/reference/qqbot.md +0 -23
  494. package/docs/plugins/reference/qwen.md +0 -23
  495. package/docs/plugins/reference/runway.md +0 -23
  496. package/docs/plugins/reference/searxng.md +0 -19
  497. package/docs/plugins/reference/senseaudio.md +0 -23
  498. package/docs/plugins/reference/sglang.md +0 -23
  499. package/docs/plugins/reference/signal.md +0 -23
  500. package/docs/plugins/reference/skill-workshop.md +0 -23
  501. package/docs/plugins/reference/slack.md +0 -23
  502. package/docs/plugins/reference/stepfun.md +0 -23
  503. package/docs/plugins/reference/synology-chat.md +0 -23
  504. package/docs/plugins/reference/synthetic.md +0 -23
  505. package/docs/plugins/reference/tavily.md +0 -23
  506. package/docs/plugins/reference/telegram.md +0 -23
  507. package/docs/plugins/reference/tencent.md +0 -23
  508. package/docs/plugins/reference/tlon.md +0 -23
  509. package/docs/plugins/reference/together.md +0 -23
  510. package/docs/plugins/reference/tokenjuice.md +0 -23
  511. package/docs/plugins/reference/tts-local-cli.md +0 -19
  512. package/docs/plugins/reference/twitch.md +0 -23
  513. package/docs/plugins/reference/venice.md +0 -23
  514. package/docs/plugins/reference/vercel-ai-gateway.md +0 -23
  515. package/docs/plugins/reference/vllm.md +0 -23
  516. package/docs/plugins/reference/voice-call.md +0 -23
  517. package/docs/plugins/reference/volcengine.md +0 -23
  518. package/docs/plugins/reference/voyage.md +0 -19
  519. package/docs/plugins/reference/vydra.md +0 -23
  520. package/docs/plugins/reference/web-readability.md +0 -19
  521. package/docs/plugins/reference/webhooks.md +0 -23
  522. package/docs/plugins/reference/whatsapp.md +0 -23
  523. package/docs/plugins/reference/workboard.md +0 -23
  524. package/docs/plugins/reference/xai.md +0 -23
  525. package/docs/plugins/reference/xiaomi.md +0 -23
  526. package/docs/plugins/reference/zai.md +0 -23
  527. package/docs/plugins/reference/zalo.md +0 -23
  528. package/docs/plugins/reference/zalouser.md +0 -24
  529. package/docs/plugins/reference.md +0 -145
  530. package/docs/plugins/sdk-agent-harness.md +0 -338
  531. package/docs/plugins/sdk-channel-inbound.md +0 -70
  532. package/docs/plugins/sdk-channel-ingress.md +0 -137
  533. package/docs/plugins/sdk-channel-message.md +0 -18
  534. package/docs/plugins/sdk-channel-outbound.md +0 -113
  535. package/docs/plugins/sdk-channel-plugins.md +0 -765
  536. package/docs/plugins/sdk-channel-turn.md +0 -9
  537. package/docs/plugins/sdk-entrypoints.md +0 -344
  538. package/docs/plugins/sdk-migration.md +0 -979
  539. package/docs/plugins/sdk-overview.md +0 -511
  540. package/docs/plugins/sdk-provider-plugins.md +0 -846
  541. package/docs/plugins/sdk-runtime.md +0 -676
  542. package/docs/plugins/sdk-setup.md +0 -550
  543. package/docs/plugins/sdk-subpaths.md +0 -391
  544. package/docs/plugins/sdk-testing.md +0 -403
  545. package/docs/plugins/skill-workshop.md +0 -713
  546. package/docs/plugins/tool-plugins.md +0 -411
  547. package/docs/plugins/voice-call.md +0 -942
  548. package/docs/plugins/webhooks.md +0 -192
  549. package/docs/plugins/workboard.md +0 -252
  550. package/docs/plugins/zalouser.md +0 -86
  551. package/docs/prose.md +0 -137
  552. package/docs/providers/alibaba.md +0 -158
  553. package/docs/providers/anthropic.md +0 -381
  554. package/docs/providers/arcee.md +0 -144
  555. package/docs/providers/azure-speech.md +0 -119
  556. package/docs/providers/bedrock-mantle.md +0 -211
  557. package/docs/providers/bedrock.md +0 -414
  558. package/docs/providers/cerebras.md +0 -130
  559. package/docs/providers/chutes.md +0 -153
  560. package/docs/providers/claude-max-api-proxy.md +0 -191
  561. package/docs/providers/cloudflare-ai-gateway.md +0 -119
  562. package/docs/providers/comfy.md +0 -362
  563. package/docs/providers/deepgram.md +0 -184
  564. package/docs/providers/deepinfra.md +0 -92
  565. package/docs/providers/deepseek.md +0 -146
  566. package/docs/providers/ds4.md +0 -309
  567. package/docs/providers/elevenlabs.md +0 -130
  568. package/docs/providers/fal.md +0 -240
  569. package/docs/providers/fireworks.md +0 -144
  570. package/docs/providers/github-copilot.md +0 -257
  571. package/docs/providers/gmi.md +0 -92
  572. package/docs/providers/google.md +0 -472
  573. package/docs/providers/gradium.md +0 -123
  574. package/docs/providers/groq.md +0 -171
  575. package/docs/providers/huggingface.md +0 -235
  576. package/docs/providers/index.md +0 -105
  577. package/docs/providers/inferrs.md +0 -272
  578. package/docs/providers/inworld.md +0 -120
  579. package/docs/providers/kilocode.md +0 -135
  580. package/docs/providers/litellm.md +0 -234
  581. package/docs/providers/lmstudio.md +0 -224
  582. package/docs/providers/minimax.md +0 -505
  583. package/docs/providers/mistral.md +0 -235
  584. package/docs/providers/models.md +0 -64
  585. package/docs/providers/moonshot.md +0 -413
  586. package/docs/providers/novita.md +0 -92
  587. package/docs/providers/nvidia.md +0 -158
  588. package/docs/providers/ollama-cloud.md +0 -115
  589. package/docs/providers/ollama.md +0 -1225
  590. package/docs/providers/openai.md +0 -1093
  591. package/docs/providers/opencode-go.md +0 -123
  592. package/docs/providers/opencode.md +0 -149
  593. package/docs/providers/openrouter.md +0 -349
  594. package/docs/providers/perplexity-provider.md +0 -123
  595. package/docs/providers/pixverse.md +0 -165
  596. package/docs/providers/qianfan.md +0 -132
  597. package/docs/providers/qwen-oauth.md +0 -115
  598. package/docs/providers/qwen.md +0 -364
  599. package/docs/providers/runway.md +0 -103
  600. package/docs/providers/senseaudio.md +0 -68
  601. package/docs/providers/sglang.md +0 -161
  602. package/docs/providers/stepfun.md +0 -229
  603. package/docs/providers/synthetic.md +0 -154
  604. package/docs/providers/tencent.md +0 -130
  605. package/docs/providers/together.md +0 -140
  606. package/docs/providers/venice.md +0 -312
  607. package/docs/providers/vercel-ai-gateway.md +0 -128
  608. package/docs/providers/vllm.md +0 -407
  609. package/docs/providers/volcengine.md +0 -199
  610. package/docs/providers/vydra.md +0 -180
  611. package/docs/providers/xai.md +0 -571
  612. package/docs/providers/xiaomi.md +0 -262
  613. package/docs/providers/zai.md +0 -224
  614. package/docs/refactor/access.md +0 -9
  615. package/docs/refactor/acp.md +0 -298
  616. package/docs/refactor/canvas.md +0 -131
  617. package/docs/refactor/database-first.md +0 -2256
  618. package/docs/refactor/ingress-core.md +0 -341
  619. package/docs/reference/AGENTS.default.md +0 -131
  620. package/docs/reference/RELEASING.md +0 -799
  621. package/docs/reference/api-usage-costs.md +0 -208
  622. package/docs/reference/application-modernization-plan.md +0 -208
  623. package/docs/reference/code-mode.md +0 -773
  624. package/docs/reference/credits.md +0 -33
  625. package/docs/reference/device-models.md +0 -50
  626. package/docs/reference/fengming-sdk-api-design.md +0 -390
  627. package/docs/reference/full-release-validation.md +0 -202
  628. package/docs/reference/memory-config.md +0 -604
  629. package/docs/reference/prompt-caching.md +0 -358
  630. package/docs/reference/release-performance-sweep.md +0 -360
  631. package/docs/reference/rich-output-protocol.md +0 -101
  632. package/docs/reference/rpc.md +0 -43
  633. package/docs/reference/secret-placeholder-conventions.md +0 -33
  634. package/docs/reference/secretref-credential-surface.md +0 -159
  635. package/docs/reference/secretref-user-supplied-credentials-matrix.json +0 -663
  636. package/docs/reference/session-management-compaction.md +0 -474
  637. package/docs/reference/templates/AGENTS.dev.md +0 -90
  638. package/docs/reference/templates/AGENTS.md +0 -227
  639. package/docs/reference/templates/BOOT.md +0 -16
  640. package/docs/reference/templates/BOOTSTRAP.md +0 -66
  641. package/docs/reference/templates/CLAUDE.md +0 -1
  642. package/docs/reference/templates/HEARTBEAT.md +0 -24
  643. package/docs/reference/templates/IDENTITY.dev.md +0 -52
  644. package/docs/reference/templates/IDENTITY.md +0 -34
  645. package/docs/reference/templates/SOUL.dev.md +0 -82
  646. package/docs/reference/templates/SOUL.md +0 -49
  647. package/docs/reference/templates/TOOLS.dev.md +0 -29
  648. package/docs/reference/templates/TOOLS.md +0 -51
  649. package/docs/reference/templates/USER.dev.md +0 -23
  650. package/docs/reference/templates/USER.md +0 -28
  651. package/docs/reference/test.md +0 -247
  652. package/docs/reference/token-use.md +0 -246
  653. package/docs/reference/transcript-hygiene.md +0 -214
  654. package/docs/reference/wizard.md +0 -252
  655. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +0 -101
  656. package/docs/security/THREAT-MODEL-ATLAS.md +0 -611
  657. package/docs/security/formal-verification.md +0 -170
  658. package/docs/security/incident-response.md +0 -59
  659. package/docs/security/network-proxy.md +0 -268
  660. package/docs/snippets/plugin-publish/minimal-fengming.plugin.json +0 -12
  661. package/docs/snippets/plugin-publish/minimal-package.json +0 -16
  662. package/docs/specs/claw-supervisor.md +0 -247
  663. package/docs/start/bootstrapping.md +0 -49
  664. package/docs/start/docs-directory.md +0 -69
  665. package/docs/start/fengming.md +0 -252
  666. package/docs/start/getting-started.md +0 -152
  667. package/docs/start/hubs.md +0 -201
  668. package/docs/start/lore.md +0 -223
  669. package/docs/start/onboarding-overview.md +0 -72
  670. package/docs/start/onboarding.md +0 -98
  671. package/docs/start/quickstart.md +0 -25
  672. package/docs/start/setup.md +0 -178
  673. package/docs/start/showcase.md +0 -363
  674. package/docs/start/wizard-cli-automation.md +0 -232
  675. package/docs/start/wizard-cli-reference.md +0 -331
  676. package/docs/start/wizard.md +0 -141
  677. package/docs/style.css +0 -137
  678. package/docs/superpowers/specs/2026-04-22-tweakcn-custom-theme-import-design.md +0 -316
  679. package/docs/tools/acp-agents-setup.md +0 -351
  680. package/docs/tools/acp-agents.md +0 -854
  681. package/docs/tools/agent-send.md +0 -130
  682. package/docs/tools/apply-patch.md +0 -64
  683. package/docs/tools/brave-search.md +0 -139
  684. package/docs/tools/browser-control.md +0 -391
  685. package/docs/tools/browser-linux-troubleshooting.md +0 -173
  686. package/docs/tools/browser-login.md +0 -77
  687. package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +0 -219
  688. package/docs/tools/browser.md +0 -810
  689. package/docs/tools/btw.md +0 -159
  690. package/docs/tools/capability-cookbook.md +0 -12
  691. package/docs/tools/clawhub.md +0 -5
  692. package/docs/tools/code-execution.md +0 -173
  693. package/docs/tools/creating-skills.md +0 -158
  694. package/docs/tools/diffs.md +0 -525
  695. package/docs/tools/duckduckgo-search.md +0 -109
  696. package/docs/tools/elevated.md +0 -128
  697. package/docs/tools/exa-search.md +0 -152
  698. package/docs/tools/exec-approvals-advanced.md +0 -444
  699. package/docs/tools/exec-approvals.md +0 -494
  700. package/docs/tools/exec.md +0 -285
  701. package/docs/tools/firecrawl.md +0 -155
  702. package/docs/tools/gemini-search.md +0 -114
  703. package/docs/tools/goal.md +0 -217
  704. package/docs/tools/grok-search.md +0 -129
  705. package/docs/tools/image-generation.md +0 -493
  706. package/docs/tools/index.md +0 -178
  707. package/docs/tools/kimi-search.md +0 -105
  708. package/docs/tools/llm-task.md +0 -137
  709. package/docs/tools/lobster.md +0 -365
  710. package/docs/tools/loop-detection.md +0 -154
  711. package/docs/tools/media-overview.md +0 -160
  712. package/docs/tools/minimax-search.md +0 -102
  713. package/docs/tools/multi-agent-sandbox-tools.md +0 -409
  714. package/docs/tools/music-generation.md +0 -372
  715. package/docs/tools/ollama-search.md +0 -153
  716. package/docs/tools/pdf.md +0 -213
  717. package/docs/tools/perplexity-search.md +0 -220
  718. package/docs/tools/plugin.md +0 -363
  719. package/docs/tools/reactions.md +0 -100
  720. package/docs/tools/searxng-search.md +0 -141
  721. package/docs/tools/skills-config.md +0 -195
  722. package/docs/tools/skills.md +0 -569
  723. package/docs/tools/slash-commands.md +0 -487
  724. package/docs/tools/steer.md +0 -77
  725. package/docs/tools/subagents.md +0 -651
  726. package/docs/tools/tavily.md +0 -162
  727. package/docs/tools/thinking.md +0 -142
  728. package/docs/tools/tokenjuice.md +0 -84
  729. package/docs/tools/tool-search.md +0 -269
  730. package/docs/tools/trajectory.md +0 -229
  731. package/docs/tools/tts.md +0 -1009
  732. package/docs/tools/video-generation.md +0 -555
  733. package/docs/tools/web-fetch.md +0 -210
  734. package/docs/tools/web.md +0 -461
  735. package/docs/tts.md +0 -11
  736. package/docs/vps.md +0 -139
  737. package/docs/web/control-ui.md +0 -512
  738. package/docs/web/dashboard.md +0 -107
  739. package/docs/web/index.md +0 -133
  740. package/docs/web/tui.md +0 -250
  741. package/docs/web/webchat.md +0 -102
  742. package/npm-shrinkwrap.json +0 -12861
  743. package/patches/.gitkeep +0 -0
  744. package/patches/@agentclientprotocol__claude-agent-acp@0.37.0.patch +0 -41
  745. package/pnpm-workspace.yaml +0 -120
  746. package/scripts/crabbox-wrapper.mjs +0 -2004
  747. package/scripts/lib/official-external-channel-catalog.json +0 -560
  748. package/scripts/lib/official-external-plugin-catalog.json +0 -264
  749. package/scripts/lib/official-external-provider-catalog.json +0 -158
  750. package/scripts/lib/package-dist-imports.mjs +0 -171
  751. package/scripts/npm-runner.mjs +0 -91
  752. package/scripts/postinstall-bundled-plugins.mjs +0 -978
  753. package/scripts/preinstall-package-manager-warning.mjs +0 -64
  754. package/scripts/prepare-git-hooks.mjs +0 -72
  755. package/scripts/windows-cmd-helpers.mjs +0 -22
  756. package/skills/batch/SKILL.md +0 -118
  757. package/skills/code-review/SKILL.md +0 -107
  758. package/skills/debug/SKILL.md +0 -83
  759. package/skills/loop/SKILL.md +0 -118
  760. package/skills/run/SKILL.md +0 -79
  761. package/skills/run-skill-generator/SKILL.md +0 -179
  762. package/skills/verify/SKILL.md +0 -103
  763. package/src/agents/templates/HEARTBEAT.md +0 -3
@@ -1,1525 +0,0 @@
1
- ---
2
- summary: "Agent defaults, multi-agent routing, session, messages, and talk config"
3
- read_when:
4
- - Tuning agent defaults (models, thinking, workspace, heartbeat, media, skills)
5
- - Configuring multi-agent routing and bindings
6
- - Adjusting session, message delivery, and talk-mode behavior
7
- title: "Configuration — agents"
8
- ---
9
-
10
- Agent-scoped configuration keys under `agents.*`, `multiAgent.*`, `session.*`,
11
- `messages.*`, and `talk.*`. For channels, tools, gateway runtime, and other
12
- top-level keys, see [Configuration reference](/gateway/configuration-reference).
13
-
14
- ## Agent defaults
15
-
16
- ### `agents.defaults.workspace`
17
-
18
- Default: `FENGMING_WORKSPACE_DIR` when set, otherwise `~/.fengming/workspace`.
19
-
20
- ```json5
21
- {
22
- agents: { defaults: { workspace: "~/.fengming/workspace" } },
23
- }
24
- ```
25
-
26
- An explicit `agents.defaults.workspace` value takes precedence over
27
- `FENGMING_WORKSPACE_DIR`. Use the environment variable to point default agents
28
- at a mounted workspace when you do not want to write that path into config.
29
-
30
- ### `agents.defaults.repoRoot`
31
-
32
- Optional repository root shown in the system prompt's Runtime line. If unset, FengMing auto-detects by walking upward from the workspace.
33
-
34
- ```json5
35
- {
36
- agents: { defaults: { repoRoot: "~/Projects/fengming" } },
37
- }
38
- ```
39
-
40
- ### `agents.defaults.skills`
41
-
42
- Optional default skill allowlist for agents that do not set
43
- `agents.list[].skills`.
44
-
45
- ```json5
46
- {
47
- agents: {
48
- defaults: { skills: ["github", "weather"] },
49
- list: [
50
- { id: "writer" }, // inherits github, weather
51
- { id: "docs", skills: ["docs-search"] }, // replaces defaults
52
- { id: "locked-down", skills: [] }, // no skills
53
- ],
54
- },
55
- }
56
- ```
57
-
58
- - Omit `agents.defaults.skills` for unrestricted skills by default.
59
- - Omit `agents.list[].skills` to inherit the defaults.
60
- - Set `agents.list[].skills: []` for no skills.
61
- - A non-empty `agents.list[].skills` list is the final set for that agent; it
62
- does not merge with defaults.
63
-
64
- ### `agents.defaults.skipBootstrap`
65
-
66
- Disables automatic creation of workspace bootstrap files (`AGENTS.md`, `SOUL.md`, `TOOLS.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md`, `BOOTSTRAP.md`).
67
-
68
- ```json5
69
- {
70
- agents: { defaults: { skipBootstrap: true } },
71
- }
72
- ```
73
-
74
- ### `agents.defaults.skipOptionalBootstrapFiles`
75
-
76
- Skips creation of selected optional workspace files while still writing required bootstrap files. Valid values: `SOUL.md`, `USER.md`, `HEARTBEAT.md`, and `IDENTITY.md`.
77
-
78
- ```json5
79
- {
80
- agents: {
81
- defaults: {
82
- skipOptionalBootstrapFiles: ["SOUL.md", "USER.md"],
83
- },
84
- },
85
- }
86
- ```
87
-
88
- ### `agents.defaults.contextInjection`
89
-
90
- Controls when workspace bootstrap files are injected into the system prompt. Default: `"always"`.
91
-
92
- - `"continuation-skip"`: safe continuation turns (after a completed assistant response) skip workspace bootstrap re-injection, reducing prompt size. Heartbeat runs and post-compaction retries still rebuild context.
93
- - `"never"`: disable workspace bootstrap and context-file injection on every turn. Use this only for agents that fully own their prompt lifecycle (custom context engines, native runtimes that build their own context, or specialized bootstrap-free workflows). Heartbeat and compaction-recovery turns also skip injection.
94
-
95
- ```json5
96
- {
97
- agents: { defaults: { contextInjection: "continuation-skip" } },
98
- }
99
- ```
100
-
101
- Per-agent override: `agents.list[].contextInjection`. Omitted values inherit
102
- `agents.defaults.contextInjection`.
103
-
104
- ### `agents.defaults.bootstrapMaxChars`
105
-
106
- Max characters per workspace bootstrap file before truncation. Default: `12000`.
107
-
108
- ```json5
109
- {
110
- agents: { defaults: { bootstrapMaxChars: 12000 } },
111
- }
112
- ```
113
-
114
- Per-agent override: `agents.list[].bootstrapMaxChars`. Omitted values inherit
115
- `agents.defaults.bootstrapMaxChars`.
116
-
117
- ### `agents.defaults.bootstrapTotalMaxChars`
118
-
119
- Max total characters injected across all workspace bootstrap files. Default: `60000`.
120
-
121
- ```json5
122
- {
123
- agents: { defaults: { bootstrapTotalMaxChars: 60000 } },
124
- }
125
- ```
126
-
127
- Per-agent override: `agents.list[].bootstrapTotalMaxChars`. Omitted values
128
- inherit `agents.defaults.bootstrapTotalMaxChars`.
129
-
130
- ### Per-agent bootstrap profile overrides
131
-
132
- Use per-agent bootstrap profile overrides when one agent needs different prompt
133
- injection behavior from the shared defaults. Omitted fields inherit from
134
- `agents.defaults`.
135
-
136
- ```json5
137
- {
138
- agents: {
139
- defaults: {
140
- contextInjection: "continuation-skip",
141
- bootstrapMaxChars: 12000,
142
- bootstrapTotalMaxChars: 60000,
143
- },
144
- list: [
145
- {
146
- id: "strict-worker",
147
- contextInjection: "always",
148
- bootstrapMaxChars: 50000,
149
- bootstrapTotalMaxChars: 300000,
150
- },
151
- ],
152
- },
153
- }
154
- ```
155
-
156
- ### `agents.defaults.bootstrapPromptTruncationWarning`
157
-
158
- Controls the agent-visible system-prompt notice when bootstrap context is truncated.
159
- Default: `"always"`.
160
-
161
- - `"off"`: never inject truncation notice text into the system prompt.
162
- - `"once"`: inject a concise notice once per unique truncation signature.
163
- - `"always"`: inject a concise notice on every run when truncation exists (recommended).
164
-
165
- Detailed raw/injected counts and config tuning fields stay in diagnostics such
166
- as context/status reports and logs; routine WebChat user/runtime context only
167
- gets the concise recovery notice.
168
-
169
- ```json5
170
- {
171
- agents: { defaults: { bootstrapPromptTruncationWarning: "always" } }, // off | once | always
172
- }
173
- ```
174
-
175
- ### Context budget ownership map
176
-
177
- FengMing has multiple high-volume prompt/context budgets, and they are
178
- intentionally split by subsystem instead of all flowing through one generic
179
- knob.
180
-
181
- - `agents.defaults.bootstrapMaxChars` /
182
- `agents.defaults.bootstrapTotalMaxChars`:
183
- normal workspace bootstrap injection.
184
- - `agents.defaults.startupContext.*`:
185
- one-shot reset/startup model-run prelude, including recent daily
186
- `memory/*.md` files. Bare chat `/new` and `/reset` commands are
187
- acknowledged without invoking the model.
188
- - `skills.limits.*`:
189
- the compact skills list injected into the system prompt.
190
- - `agents.defaults.contextLimits.*`:
191
- bounded runtime excerpts and injected runtime-owned blocks.
192
- - `memory.qmd.limits.*`:
193
- indexed memory-search snippet and injection sizing.
194
-
195
- Use the matching per-agent override only when one agent needs a different
196
- budget:
197
-
198
- - `agents.list[].skillsLimits.maxSkillsPromptChars`
199
- - `agents.list[].contextInjection`
200
- - `agents.list[].bootstrapMaxChars`
201
- - `agents.list[].bootstrapTotalMaxChars`
202
- - `agents.list[].contextLimits.*`
203
-
204
- #### `agents.defaults.startupContext`
205
-
206
- Controls the first-turn startup prelude injected on reset/startup model runs.
207
- Bare chat `/new` and `/reset` commands acknowledge the reset without invoking
208
- the model, so they do not load this prelude.
209
-
210
- ```json5
211
- {
212
- agents: {
213
- defaults: {
214
- startupContext: {
215
- enabled: true,
216
- applyOn: ["new", "reset"],
217
- dailyMemoryDays: 2,
218
- maxFileBytes: 16384,
219
- maxFileChars: 1200,
220
- maxTotalChars: 2800,
221
- },
222
- },
223
- },
224
- }
225
- ```
226
-
227
- #### `agents.defaults.contextLimits`
228
-
229
- Shared defaults for bounded runtime context surfaces.
230
-
231
- ```json5
232
- {
233
- agents: {
234
- defaults: {
235
- contextLimits: {
236
- memoryGetMaxChars: 12000,
237
- memoryGetDefaultLines: 120,
238
- postCompactionMaxChars: 1800,
239
- },
240
- },
241
- },
242
- }
243
- ```
244
-
245
- - `memoryGetMaxChars`: default `memory_get` excerpt cap before truncation
246
- metadata and continuation notice are added.
247
- - `memoryGetDefaultLines`: default `memory_get` line window when `lines` is
248
- omitted.
249
- - `toolResultMaxChars`: advanced live tool-result ceiling used for persisted
250
- results and overflow recovery. Leave unset for the model-context auto cap:
251
- `16000` chars below 100K tokens, `32000` chars at 100K+ tokens, and `64000`
252
- chars at 200K+ tokens. The effective cap is still limited to about 30% of the
253
- model context window. `fengming doctor --deep` prints the effective cap, and
254
- doctor warns only when an explicit override is stale or has no effect.
255
- - `postCompactionMaxChars`: AGENTS.md excerpt cap used during post-compaction
256
- refresh injection.
257
-
258
- #### `agents.list[].contextLimits`
259
-
260
- Per-agent override for the shared `contextLimits` knobs. Omitted fields inherit
261
- from `agents.defaults.contextLimits`.
262
-
263
- ```json5
264
- {
265
- agents: {
266
- defaults: {
267
- contextLimits: {
268
- memoryGetMaxChars: 12000,
269
- },
270
- },
271
- list: [
272
- {
273
- id: "tiny-local",
274
- contextLimits: {
275
- memoryGetMaxChars: 6000,
276
- toolResultMaxChars: 8000, // advanced ceiling for this agent
277
- },
278
- },
279
- ],
280
- },
281
- }
282
- ```
283
-
284
- #### `skills.limits.maxSkillsPromptChars`
285
-
286
- Global cap for the compact skills list injected into the system prompt. This
287
- does not affect reading `SKILL.md` files on demand.
288
-
289
- ```json5
290
- {
291
- skills: {
292
- limits: {
293
- maxSkillsPromptChars: 18000,
294
- },
295
- },
296
- }
297
- ```
298
-
299
- #### `agents.list[].skillsLimits.maxSkillsPromptChars`
300
-
301
- Per-agent override for the skills prompt budget.
302
-
303
- ```json5
304
- {
305
- agents: {
306
- list: [
307
- {
308
- id: "tiny-local",
309
- skillsLimits: {
310
- maxSkillsPromptChars: 6000,
311
- },
312
- },
313
- ],
314
- },
315
- }
316
- ```
317
-
318
- ### `agents.defaults.imageMaxDimensionPx`
319
-
320
- Max pixel size for the longest image side in transcript/tool image blocks before provider calls.
321
- Default: `1200`.
322
-
323
- Lower values usually reduce vision-token usage and request payload size for screenshot-heavy runs.
324
- Higher values preserve more visual detail.
325
-
326
- ```json5
327
- {
328
- agents: { defaults: { imageMaxDimensionPx: 1200 } },
329
- }
330
- ```
331
-
332
- ### `agents.defaults.imageQuality`
333
-
334
- Image-tool compression/detail preference for images loaded from file paths, URLs, and media references.
335
- Default: `auto`.
336
-
337
- FengMing adapts the resize ladder to the selected image model. For example, Claude Opus 4.8, OpenAI GPT-5.5, Qwen VL, and hosted Llama 4 vision models can use larger images than older/default high-detail vision paths, while multi-image turns are compressed more aggressively in `auto` mode to control token and latency cost.
338
-
339
- Values:
340
-
341
- - `auto`: adapt to model limits and image count.
342
- - `efficient`: prefer smaller images for lower token and byte usage.
343
- - `balanced`: use the standard middle-ground ladder.
344
- - `high`: preserve more detail for screenshots, diagrams, and document images.
345
-
346
- ```json5
347
- {
348
- agents: { defaults: { imageQuality: "auto" } },
349
- }
350
- ```
351
-
352
- ### `agents.defaults.userTimezone`
353
-
354
- Timezone for system prompt context (not message timestamps). Falls back to host timezone.
355
-
356
- ```json5
357
- {
358
- agents: { defaults: { userTimezone: "America/Chicago" } },
359
- }
360
- ```
361
-
362
- ### `agents.defaults.timeFormat`
363
-
364
- Time format in system prompt. Default: `auto` (OS preference).
365
-
366
- ```json5
367
- {
368
- agents: { defaults: { timeFormat: "auto" } }, // auto | 12 | 24
369
- }
370
- ```
371
-
372
- ### `agents.defaults.model`
373
-
374
- ```json5
375
- {
376
- agents: {
377
- defaults: {
378
- models: {
379
- "anthropic/claude-opus-4-6": { alias: "opus" },
380
- "minimax/MiniMax-M2.7": { alias: "minimax" },
381
- },
382
- model: {
383
- primary: "anthropic/claude-opus-4-6",
384
- fallbacks: ["minimax/MiniMax-M2.7"],
385
- },
386
- imageModel: {
387
- primary: "openrouter/qwen/qwen-2.5-vl-72b-instruct:free",
388
- fallbacks: ["openrouter/google/gemini-2.0-flash-vision:free"],
389
- },
390
- imageGenerationModel: {
391
- primary: "openai/gpt-image-2",
392
- fallbacks: ["google/gemini-3.1-flash-image-preview"],
393
- },
394
- videoGenerationModel: {
395
- primary: "qwen/wan2.6-t2v",
396
- fallbacks: ["qwen/wan2.6-i2v"],
397
- },
398
- pdfModel: {
399
- primary: "anthropic/claude-opus-4-6",
400
- fallbacks: ["openai/gpt-5.4-mini"],
401
- },
402
- params: { cacheRetention: "long" }, // global default provider params
403
- pdfMaxBytesMb: 10,
404
- pdfMaxPages: 20,
405
- thinkingDefault: "low",
406
- verboseDefault: "off",
407
- toolProgressDetail: "explain",
408
- reasoningDefault: "off",
409
- elevatedDefault: "on",
410
- timeoutSeconds: 600,
411
- mediaMaxMb: 5,
412
- contextTokens: 200000,
413
- maxConcurrent: 3,
414
- },
415
- },
416
- }
417
- ```
418
-
419
- - `model`: accepts either a string (`"provider/model"`) or an object (`{ primary, fallbacks }`).
420
- - String form sets only the primary model.
421
- - Object form sets primary plus ordered failover models.
422
- - `imageModel`: accepts either a string (`"provider/model"`) or an object (`{ primary, fallbacks }`).
423
- - Used by the `image` tool path as its vision-model config.
424
- - Also used as fallback routing when the selected/default model cannot accept image input.
425
- - Prefer explicit `provider/model` refs. Bare IDs are accepted for compatibility; if a bare ID uniquely matches a configured image-capable entry in `models.providers.*.models`, FengMing qualifies it to that provider. Ambiguous configured matches require an explicit provider prefix.
426
- - `imageGenerationModel`: accepts either a string (`"provider/model"`) or an object (`{ primary, fallbacks }`).
427
- - Used by the shared image-generation capability and any future tool/plugin surface that generates images.
428
- - Typical values: `google/gemini-3.1-flash-image-preview` for native Gemini image generation, `fal/fal-ai/flux/dev` for fal, `openai/gpt-image-2` for OpenAI Images, or `openai/gpt-image-1.5` for transparent-background OpenAI PNG/WebP output.
429
- - If you select a provider/model directly, configure matching provider auth too (for example `GEMINI_API_KEY` or `GOOGLE_API_KEY` for `google/*`, `OPENAI_API_KEY` or OpenAI Codex OAuth for `openai/gpt-image-2` / `openai/gpt-image-1.5`, `FAL_KEY` for `fal/*`).
430
- - If omitted, `image_generate` can still infer an auth-backed provider default. It tries the current default provider first, then the remaining registered image-generation providers in provider-id order.
431
- - `musicGenerationModel`: accepts either a string (`"provider/model"`) or an object (`{ primary, fallbacks }`).
432
- - Used by the shared music-generation capability and the built-in `music_generate` tool.
433
- - Typical values: `google/lyria-3-clip-preview`, `google/lyria-3-pro-preview`, or `minimax/music-2.6`.
434
- - If omitted, `music_generate` can still infer an auth-backed provider default. It tries the current default provider first, then the remaining registered music-generation providers in provider-id order.
435
- - If you select a provider/model directly, configure the matching provider auth/API key too.
436
- - `videoGenerationModel`: accepts either a string (`"provider/model"`) or an object (`{ primary, fallbacks }`).
437
- - Used by the shared video-generation capability and the built-in `video_generate` tool.
438
- - Typical values: `qwen/wan2.6-t2v`, `qwen/wan2.6-i2v`, `qwen/wan2.6-r2v`, `qwen/wan2.6-r2v-flash`, or `qwen/wan2.7-r2v`.
439
- - If omitted, `video_generate` can still infer an auth-backed provider default. It tries the current default provider first, then the remaining registered video-generation providers in provider-id order.
440
- - If you select a provider/model directly, configure the matching provider auth/API key too.
441
- - The bundled Qwen video-generation provider supports up to 1 output video, 1 input image, 4 input videos, 10 seconds duration, and provider-level `size`, `aspectRatio`, `resolution`, `audio`, and `watermark` options.
442
- - `pdfModel`: accepts either a string (`"provider/model"`) or an object (`{ primary, fallbacks }`).
443
- - Used by the `pdf` tool for model routing.
444
- - If omitted, the PDF tool falls back to `imageModel`, then to the resolved session/default model.
445
- - `pdfMaxBytesMb`: default PDF size limit for the `pdf` tool when `maxBytesMb` is not passed at call time.
446
- - `pdfMaxPages`: default maximum pages considered by extraction fallback mode in the `pdf` tool.
447
- - `verboseDefault`: default verbose level for agents. Values: `"off"`, `"on"`, `"full"`. Default: `"off"`.
448
- - `toolProgressDetail`: detail mode for `/verbose` tool summaries and progress-draft tool lines. Values: `"explain"` (default, compact human labels) or `"raw"` (append raw command/detail when available). Per-agent `agents.list[].toolProgressDetail` overrides this default.
449
- - `reasoningDefault`: default reasoning visibility for agents. Values: `"off"`, `"on"`, `"stream"`. Per-agent `agents.list[].reasoningDefault` overrides this default. Configured reasoning defaults are only applied for owners, authorized senders, or operator-admin gateway contexts when no per-message or session reasoning override is set.
450
- - `elevatedDefault`: default elevated-output level for agents. Values: `"off"`, `"on"`, `"ask"`, `"full"`. Default: `"on"`.
451
- - `model.primary`: format `provider/model` (e.g. `openai/gpt-5.5` for OpenAI API-key or Codex OAuth access). If you omit the provider, FengMing tries an alias first, then a unique configured-provider match for that exact model id, and only then falls back to the configured default provider (deprecated compatibility behavior, so prefer explicit `provider/model`). If that provider no longer exposes the configured default model, FengMing falls back to the first configured provider/model instead of surfacing a stale removed-provider default.
452
- - `models`: the configured model catalog and allowlist for `/model`. Each entry can include `alias` (shortcut) and `params` (provider-specific, for example `temperature`, `maxTokens`, `cacheRetention`, `context1m`, `responsesServerCompaction`, `responsesCompactThreshold`, OpenRouter `provider` routing, `chat_template_kwargs`, `extra_body`/`extraBody`).
453
- - Use `provider/*` entries such as `"openai/*": {}` or `"vllm/*": {}` to show all discovered models for selected providers without manually listing every model id.
454
- - Add `agentRuntime` to a `provider/*` entry when every dynamically discovered model for that provider should use the same runtime. Exact `provider/model` runtime policy still wins over the wildcard.
455
- - Safe edits: use `fengming config set agents.defaults.models '<json>' --strict-json --merge` to add entries. `config set` refuses replacements that would remove existing allowlist entries unless you pass `--replace`.
456
- - Provider-scoped configure/onboarding flows merge selected provider models into this map and preserve unrelated providers already configured.
457
- - For direct OpenAI Responses models, server-side compaction is enabled automatically. Use `params.responsesServerCompaction: false` to stop injecting `context_management`, or `params.responsesCompactThreshold` to override the threshold. See [OpenAI server-side compaction](/providers/openai#server-side-compaction-responses-api).
458
- - `params`: global default provider parameters applied to all models. Set at `agents.defaults.params` (e.g. `{ cacheRetention: "long" }`).
459
- - `params` merge precedence (config): `agents.defaults.params` (global base) is overridden by `agents.defaults.models["provider/model"].params` (per-model), then `agents.list[].params` (matching agent id) overrides by key. See [Prompt Caching](/reference/prompt-caching) for details.
460
- - `models.providers.openrouter.params.provider`: OpenRouter-wide default provider-routing policy. FengMing forwards this to OpenRouter's request `provider` object; per-model `agents.defaults.models["openrouter/<model>"].params.provider` and agent params override by key. See [OpenRouter provider routing](/providers/openrouter#advanced-configuration).
461
- - `params.extra_body`/`params.extraBody`: advanced pass-through JSON merged into `api: "openai-completions"` request bodies for OpenAI-compatible proxies. If it collides with generated request keys, the extra body wins; non-native completions routes still strip OpenAI-only `store` afterward.
462
- - `params.chat_template_kwargs`: vLLM/OpenAI-compatible chat-template arguments merged into top-level `api: "openai-completions"` request bodies. For `vllm/nemotron-3-*` with thinking off, the bundled vLLM plugin automatically sends `enable_thinking: false` and `force_nonempty_content: true`; explicit `chat_template_kwargs` override generated defaults, and `extra_body.chat_template_kwargs` still has final precedence. Configured vLLM Qwen and Nemotron thinking models expose binary `/think` choices (`off`, `on`) instead of the multi-level effort ladder.
463
- - `compat.thinkingFormat`: OpenAI-compatible thinking payload style. Use `"together"` for Together-style `reasoning.enabled`, `"qwen"` for Qwen-style top-level `enable_thinking`, or `"qwen-chat-template"` for `chat_template_kwargs.enable_thinking` on Qwen-family backends that support request-level chat-template kwargs, such as vLLM. FengMing maps disabled thinking to `false` and enabled thinking to `true`, and configured vLLM Qwen models expose binary `/think` choices for these formats.
464
- - `compat.supportedReasoningEfforts`: per-model OpenAI-compatible reasoning effort list. Include `"xhigh"` for custom endpoints that truly accept it; FengMing then exposes `/think xhigh` in command menus, Gateway session rows, session patch validation, agent CLI validation, and `llm-task` validation for that configured provider/model. Use `compat.reasoningEffortMap` when the backend wants a provider-specific value for a canonical level.
465
- - `params.preserveThinking`: Z.AI-only opt-in for preserved thinking. When enabled and thinking is on, FengMing sends `thinking.clear_thinking: false` and replays prior `reasoning_content`; see [Z.AI thinking and preserved thinking](/providers/zai#thinking-and-preserved-thinking).
466
- - `localService`: optional provider-level process manager for local/self-hosted model servers. When the selected model belongs to that provider, FengMing probes `healthUrl` (or `baseUrl + "/models"`), starts `command` with `args` if the endpoint is down, waits up to `readyTimeoutMs`, then sends the model request. `command` must be an absolute path. `idleStopMs: 0` keeps the process alive until FengMing exits; a positive value stops the FengMing-spawned process after that many idle milliseconds. See [Local model services](/gateway/local-model-services).
467
- - Runtime policy belongs on providers or models, not on `agents.defaults`. Use `models.providers.<provider>.agentRuntime` for provider-wide rules or `agents.defaults.models["provider/model"].agentRuntime` / `agents.list[].models["provider/model"].agentRuntime` for model-specific rules. OpenAI agent models on the official OpenAI provider select Codex by default.
468
- - Config writers that mutate these fields (for example `/models set`, `/models set-image`, and fallback add/remove commands) save canonical object form and preserve existing fallback lists when possible.
469
- - `maxConcurrent`: max parallel agent runs across sessions (each session still serialized). Default: 4.
470
-
471
- ### Runtime policy
472
-
473
- ```json5
474
- {
475
- models: {
476
- providers: {
477
- openai: {
478
- agentRuntime: { id: "codex" },
479
- },
480
- },
481
- },
482
- agents: {
483
- defaults: {
484
- model: "openai/gpt-5.5",
485
- models: {
486
- "anthropic/claude-opus-4-8": {
487
- agentRuntime: { id: "claude-cli" },
488
- },
489
- "vllm/*": {
490
- agentRuntime: { id: "fengming" },
491
- },
492
- },
493
- },
494
- },
495
- }
496
- ```
497
-
498
- - `id`: `"auto"`, `"fengming"`, a registered plugin harness id, or a supported CLI backend alias. The bundled Codex plugin registers `codex`; the bundled Anthropic plugin provides the `claude-cli` CLI backend.
499
- - `id: "auto"` lets registered plugin harnesses claim supported turns and uses FengMing when no harness matches. An explicit plugin runtime such as `id: "codex"` requires that harness and fails closed if it is unavailable or fails.
500
- - `id: "pi"` is accepted only as a deprecated alias for `fengming` to preserve shipped configs from v2026.5.22 and earlier. New config should use `fengming`.
501
- - Runtime precedence is exact model policy first (`agents.list[].models["provider/model"]`, `agents.defaults.models["provider/model"]`, or `models.providers.<provider>.models[]`), then `agents.list[]` / `agents.defaults.models["provider/*"]`, then provider-wide policy at `models.providers.<provider>.agentRuntime`.
502
- - Whole-agent runtime keys are legacy. `agents.defaults.agentRuntime`, `agents.list[].agentRuntime`, session runtime pins, and `FENGMING_AGENT_RUNTIME` are ignored by runtime selection. Run `fengming doctor --fix` to remove stale values.
503
- - OpenAI agent models use the Codex harness by default; provider/model `agentRuntime.id: "codex"` remains valid when you want to make that explicit.
504
- - For Claude CLI deployments, prefer `model: "anthropic/claude-opus-4-8"` plus model-scoped `agentRuntime.id: "claude-cli"`. Legacy `claude-cli/claude-opus-4-7` model refs still work for compatibility, but new config should keep provider/model selection canonical and put the execution backend in provider/model runtime policy.
505
- - This only controls text agent-turn execution. Media generation, vision, PDF, music, video, and TTS still use their provider/model settings.
506
-
507
- **Built-in alias shorthands** (only apply when the model is in `agents.defaults.models`):
508
-
509
- | Alias | Model |
510
- | ------------------- | ------------------------------- |
511
- | `opus` | `anthropic/claude-opus-4-6` |
512
- | `sonnet` | `anthropic/claude-sonnet-4-6` |
513
- | `gpt` | `openai/gpt-5.5` |
514
- | `gpt-mini` | `openai/gpt-5.4-mini` |
515
- | `gpt-nano` | `openai/gpt-5.4-nano` |
516
- | `gemini` | `google/gemini-3.1-pro-preview` |
517
- | `gemini-flash` | `google/gemini-3-flash-preview` |
518
- | `gemini-flash-lite` | `google/gemini-3.1-flash-lite` |
519
-
520
- Your configured aliases always win over defaults.
521
-
522
- Z.AI GLM-4.x models automatically enable thinking mode unless you set `--thinking off` or define `agents.defaults.models["zai/<model>"].params.thinking` yourself.
523
- Z.AI models enable `tool_stream` by default for tool call streaming. Set `agents.defaults.models["zai/<model>"].params.tool_stream` to `false` to disable it.
524
- Anthropic Claude Opus 4.8 keeps thinking off by default in FengMing; when adaptive thinking is explicitly enabled, Anthropic's provider-owned effort default is `high`. Claude 4.6 models default to `adaptive` when no explicit thinking level is set.
525
-
526
- ### `agents.defaults.cliBackends`
527
-
528
- Optional CLI backends for text-only fallback runs (no tool calls). Useful as a backup when API providers fail.
529
-
530
- ```json5
531
- {
532
- agents: {
533
- defaults: {
534
- cliBackends: {
535
- "claude-cli": {
536
- command: "/opt/homebrew/bin/claude",
537
- },
538
- "my-cli": {
539
- command: "my-cli",
540
- args: ["--json"],
541
- output: "json",
542
- modelArg: "--model",
543
- sessionArg: "--session",
544
- sessionMode: "existing",
545
- systemPromptArg: "--system",
546
- // Or use systemPromptFileArg when the CLI accepts a prompt file flag.
547
- systemPromptWhen: "first",
548
- imageArg: "--image",
549
- imageMode: "repeat",
550
- },
551
- },
552
- },
553
- },
554
- }
555
- ```
556
-
557
- - CLI backends are text-first; tools are always disabled.
558
- - Sessions supported when `sessionArg` is set.
559
- - Image pass-through supported when `imageArg` accepts file paths.
560
- - `reseedFromRawTranscriptWhenUncompacted: true` lets a backend recover safe
561
- invalidated sessions from a bounded raw FengMing transcript tail before the
562
- first compaction summary exists. Auth profile or credential-epoch changes
563
- still never raw-reseed.
564
-
565
- ### `agents.defaults.promptOverlays`
566
-
567
- Provider-independent prompt overlays applied by model family on FengMing-assembled prompt surfaces. GPT-5-family model ids receive the shared behavior contract across FengMing/provider routes; `personality` controls only the friendly interaction-style layer. Native Codex app-server routes keep Codex-owned base/model instructions instead of this FengMing GPT-5 overlay, and FengMing disables Codex's built-in personality for native threads.
568
-
569
- ```json5
570
- {
571
- agents: {
572
- defaults: {
573
- promptOverlays: {
574
- gpt5: {
575
- personality: "friendly", // friendly | on | off
576
- },
577
- },
578
- },
579
- },
580
- }
581
- ```
582
-
583
- - `"friendly"` (default) and `"on"` enable the friendly interaction-style layer.
584
- - `"off"` disables only the friendly layer; the tagged GPT-5 behavior contract remains enabled.
585
- - Legacy `plugins.entries.openai.config.personality` is still read when this shared setting is unset.
586
-
587
- ### `agents.defaults.heartbeat`
588
-
589
- Periodic heartbeat runs.
590
-
591
- ```json5
592
- {
593
- agents: {
594
- defaults: {
595
- heartbeat: {
596
- every: "30m", // 0m disables
597
- model: "openai/gpt-5.4-mini",
598
- includeReasoning: false,
599
- includeSystemPromptSection: true, // default: true; false omits the Heartbeat section from the system prompt
600
- lightContext: false, // default: false; true keeps only HEARTBEAT.md from workspace bootstrap files
601
- isolatedSession: false, // default: false; true runs each heartbeat in a fresh session (no conversation history)
602
- skipWhenBusy: false, // default: false; true also waits for this agent's subagent/nested lanes
603
- session: "main",
604
- to: "+15555550123",
605
- directPolicy: "allow", // allow (default) | block
606
- target: "none", // default: none | options: last | whatsapp | telegram | discord | ...
607
- prompt: "Read HEARTBEAT.md if it exists...",
608
- ackMaxChars: 300,
609
- suppressToolErrorWarnings: false,
610
- timeoutSeconds: 45,
611
- },
612
- },
613
- },
614
- }
615
- ```
616
-
617
- - `every`: duration string (ms/s/m/h). Default: `30m` (API-key auth) or `1h` (OAuth auth). Set to `0m` to disable.
618
- - `includeSystemPromptSection`: when false, omits the Heartbeat section from the system prompt and skips `HEARTBEAT.md` injection into bootstrap context. Default: `true`.
619
- - `suppressToolErrorWarnings`: when true, suppresses tool error warning payloads during heartbeat runs.
620
- - `timeoutSeconds`: maximum time in seconds allowed for a heartbeat agent turn before it is aborted. Leave unset to use `agents.defaults.timeoutSeconds` when set, otherwise the heartbeat cadence capped at 600 seconds.
621
- - `directPolicy`: direct/DM delivery policy. `allow` (default) permits direct-target delivery. `block` suppresses direct-target delivery and emits `reason=dm-blocked`.
622
- - `lightContext`: when true, heartbeat runs use lightweight bootstrap context and keep only `HEARTBEAT.md` from workspace bootstrap files.
623
- - `isolatedSession`: when true, each heartbeat runs in a fresh session with no prior conversation history. Same isolation pattern as cron `sessionTarget: "isolated"`. Reduces per-heartbeat token cost from ~100K to ~2-5K tokens.
624
- - `skipWhenBusy`: when true, heartbeat runs defer on that agent's extra busy lanes: its own session-keyed subagent or nested command work. Cron lanes always defer heartbeats, even without this flag.
625
- - Per-agent: set `agents.list[].heartbeat`. When any agent defines `heartbeat`, **only those agents** run heartbeats.
626
- - Heartbeats run full agent turns — shorter intervals burn more tokens.
627
-
628
- ### `agents.defaults.compaction`
629
-
630
- ```json5
631
- {
632
- agents: {
633
- defaults: {
634
- compaction: {
635
- mode: "safeguard", // default | safeguard
636
- provider: "my-provider", // id of a registered compaction provider plugin (optional)
637
- timeoutSeconds: 900,
638
- reserveTokensFloor: 24000,
639
- keepRecentTokens: 50000,
640
- identifierPolicy: "strict", // strict | off | custom
641
- identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // used when identifierPolicy=custom
642
- qualityGuard: { enabled: true, maxRetries: 1 },
643
- midTurnPrecheck: { enabled: false }, // optional tool-loop pressure check
644
- postCompactionSections: ["Session Startup", "Red Lines"], // opt in to AGENTS.md section reinjection
645
- model: "openrouter/anthropic/claude-sonnet-4-6", // optional compaction-only model override
646
- truncateAfterCompaction: true, // rotate to a smaller successor JSONL after compaction
647
- maxActiveTranscriptBytes: "20mb", // optional preflight local compaction trigger
648
- notifyUser: true, // send brief notices when compaction starts and completes (default: false)
649
- memoryFlush: {
650
- enabled: true,
651
- model: "ollama/qwen3:8b", // optional memory-flush-only model override
652
- softThresholdTokens: 6000,
653
- systemPrompt: "Session nearing compaction. Store durable memories now.",
654
- prompt: "Write any lasting notes to memory/YYYY-MM-DD.md; reply with the exact silent token NO_REPLY if nothing to store.",
655
- },
656
- },
657
- },
658
- },
659
- }
660
- ```
661
-
662
- - `mode`: `default` or `safeguard` (chunked summarization for long histories). See [Compaction](/concepts/compaction).
663
- - `provider`: id of a registered compaction provider plugin. When set, the provider's `summarize()` is called instead of built-in LLM summarization. Falls back to built-in on failure. Setting a provider forces `mode: "safeguard"`. See [Compaction](/concepts/compaction).
664
- - `timeoutSeconds`: maximum seconds allowed for a single compaction operation before FengMing aborts it. Default: `900`.
665
- - `keepRecentTokens`: agent cut-point budget for keeping the most recent transcript tail verbatim. Manual `/compact` honors this when explicitly set; otherwise manual compaction is a hard checkpoint.
666
- - `identifierPolicy`: `strict` (default), `off`, or `custom`. `strict` prepends built-in opaque identifier retention guidance during compaction summarization.
667
- - `identifierInstructions`: optional custom identifier-preservation text used when `identifierPolicy=custom`.
668
- - `qualityGuard`: retry-on-malformed-output checks for safeguard summaries. Enabled by default in safeguard mode; set `enabled: false` to skip the audit.
669
- - `midTurnPrecheck`: optional tool-loop pressure check. When `enabled: true`, FengMing checks context pressure after tool results are appended and before the next model call. If the context no longer fits, it aborts the current attempt before submitting the prompt and reuses the existing precheck recovery path to truncate tool results or compact and retry. Works with both `default` and `safeguard` compaction modes. Default: disabled.
670
- - `postCompactionSections`: optional AGENTS.md H2/H3 section names to re-inject after compaction. Reinjection is disabled when unset or set to `[]`. Explicitly setting `["Session Startup", "Red Lines"]` enables that pair and preserves the legacy `Every Session`/`Safety` fallback. Enable this only when the extra context is worth the risk of duplicating project guidance already captured in the compaction summary.
671
- - `model`: optional `provider/model-id` override for compaction summarization only. Use this when the main session should keep one model but compaction summaries should run on another; when unset, compaction uses the session's primary model.
672
- - `maxActiveTranscriptBytes`: optional byte threshold (`number` or strings like `"20mb"`) that triggers normal local compaction before a run when the active JSONL grows past the threshold. Requires `truncateAfterCompaction` so successful compaction can rotate to a smaller successor transcript. Disabled when unset or `0`.
673
- - `notifyUser`: when `true`, sends brief notices to the user when compaction starts and when it completes (for example, "Compacting context..." and "Compaction complete"). Disabled by default to keep compaction silent.
674
- - `memoryFlush`: silent agentic turn before auto-compaction to store durable memories. Set `model` to an exact provider/model such as `ollama/qwen3:8b` when this housekeeping turn should stay on a local model; the override does not inherit the active session fallback chain. Skipped when workspace is read-only.
675
-
676
- ### `agents.defaults.runRetries`
677
-
678
- Outer run loop retry iteration boundaries for the embedded agent runtime to prevent infinite execution loops during failure recovery. Note that this setting currently only applies to the embedded agent runtime, not ACP or CLI runtimes.
679
-
680
- ```json5
681
- {
682
- agents: {
683
- defaults: {
684
- runRetries: {
685
- base: 24,
686
- perProfile: 8,
687
- min: 32,
688
- max: 160,
689
- },
690
- },
691
- list: [
692
- {
693
- id: "main",
694
- runRetries: { max: 50 }, // optional per-agent overrides
695
- },
696
- ],
697
- },
698
- }
699
- ```
700
-
701
- - `base`: base number of run retry iterations for the outer run loop. Default: `24`.
702
- - `perProfile`: additional run retry iterations granted per fallback profile candidate. Default: `8`.
703
- - `min`: minimum absolute limit for run retry iterations. Default: `32`.
704
- - `max`: maximum absolute limit for run retry iterations to prevent runaway execution. Default: `160`.
705
-
706
- ### `agents.defaults.contextPruning`
707
-
708
- Prunes **old tool results** from in-memory context before sending to the LLM. Does **not** modify session history on disk.
709
-
710
- ```json5
711
- {
712
- agents: {
713
- defaults: {
714
- contextPruning: {
715
- mode: "cache-ttl", // off | cache-ttl
716
- ttl: "1h", // duration (ms/s/m/h), default unit: minutes
717
- keepLastAssistants: 3,
718
- softTrimRatio: 0.3,
719
- hardClearRatio: 0.5,
720
- minPrunableToolChars: 50000,
721
- softTrim: { maxChars: 4000, headChars: 1500, tailChars: 1500 },
722
- hardClear: { enabled: true, placeholder: "[Old tool result content cleared]" },
723
- tools: { deny: ["browser", "canvas"] },
724
- },
725
- },
726
- },
727
- }
728
- ```
729
-
730
- <Accordion title="cache-ttl mode behavior">
731
-
732
- - `mode: "cache-ttl"` enables pruning passes.
733
- - `ttl` controls how often pruning can run again (after the last cache touch).
734
- - Pruning soft-trims oversized tool results first, then hard-clears older tool results if needed.
735
- - `softTrimRatio` and `hardClearRatio` accept values from `0.0` through `1.0`; config validation rejects values outside that range.
736
-
737
- **Soft-trim** keeps beginning + end and inserts `...` in the middle.
738
-
739
- **Hard-clear** replaces the entire tool result with the placeholder.
740
-
741
- Notes:
742
-
743
- - Image blocks are never trimmed/cleared.
744
- - Ratios are character-based (approximate), not exact token counts.
745
- - If fewer than `keepLastAssistants` assistant messages exist, pruning is skipped.
746
-
747
- </Accordion>
748
-
749
- See [Session Pruning](/concepts/session-pruning) for behavior details.
750
-
751
- ### Block streaming
752
-
753
- ```json5
754
- {
755
- agents: {
756
- defaults: {
757
- blockStreamingDefault: "off", // on | off
758
- blockStreamingBreak: "text_end", // text_end | message_end
759
- blockStreamingChunk: { minChars: 800, maxChars: 1200 },
760
- blockStreamingCoalesce: { idleMs: 1000 },
761
- humanDelay: { mode: "natural" }, // off | natural | custom (use minMs/maxMs)
762
- },
763
- },
764
- }
765
- ```
766
-
767
- - Non-Telegram channels require explicit `*.blockStreaming: true` to enable block replies.
768
- - Channel overrides: `channels.<channel>.blockStreamingCoalesce` (and per-account variants). Signal/Slack/Discord/Google Chat default `minChars: 1500`.
769
- - `humanDelay`: randomized pause between block replies. `natural` = 800–2500ms. Per-agent override: `agents.list[].humanDelay`.
770
-
771
- See [Streaming](/concepts/streaming) for behavior + chunking details.
772
-
773
- ### Typing indicators
774
-
775
- ```json5
776
- {
777
- agents: {
778
- defaults: {
779
- typingMode: "instant", // never | instant | thinking | message
780
- typingIntervalSeconds: 6,
781
- },
782
- },
783
- }
784
- ```
785
-
786
- - Defaults: `instant` for direct chats/mentions, `message` for unmentioned group chats.
787
- - Per-session overrides: `session.typingMode`, `session.typingIntervalSeconds`.
788
-
789
- See [Typing Indicators](/concepts/typing-indicators).
790
-
791
- <a id="agentsdefaultssandbox"></a>
792
-
793
- ### `agents.defaults.sandbox`
794
-
795
- Optional sandboxing for the embedded agent. See [Sandboxing](/gateway/sandboxing) for the full guide.
796
-
797
- ```json5
798
- {
799
- agents: {
800
- defaults: {
801
- sandbox: {
802
- mode: "non-main", // off | non-main | all
803
- backend: "docker", // docker | ssh | openshell
804
- scope: "agent", // session | agent | shared
805
- workspaceAccess: "none", // none | ro | rw
806
- workspaceRoot: "~/.fengming/sandboxes",
807
- docker: {
808
- image: "fengming-sandbox:bookworm-slim",
809
- containerPrefix: "fengming-sbx-",
810
- workdir: "/workspace",
811
- readOnlyRoot: true,
812
- tmpfs: ["/tmp", "/var/tmp", "/run"],
813
- network: "none",
814
- user: "1000:1000",
815
- capDrop: ["ALL"],
816
- env: { LANG: "C.UTF-8" },
817
- setupCommand: "apt-get update && apt-get install -y git curl jq",
818
- pidsLimit: 256,
819
- memory: "1g",
820
- memorySwap: "2g",
821
- cpus: 1,
822
- ulimits: {
823
- nofile: { soft: 1024, hard: 2048 },
824
- nproc: 256,
825
- },
826
- seccompProfile: "/path/to/seccomp.json",
827
- apparmorProfile: "fengming-sandbox",
828
- dns: ["1.1.1.1", "8.8.8.8"],
829
- extraHosts: ["internal.service:10.0.0.5"],
830
- binds: ["/home/user/source:/source:rw"],
831
- },
832
- ssh: {
833
- target: "user@gateway-host:22",
834
- command: "ssh",
835
- workspaceRoot: "/tmp/fengming-sandboxes",
836
- strictHostKeyChecking: true,
837
- updateHostKeys: true,
838
- identityFile: "~/.ssh/id_ed25519",
839
- certificateFile: "~/.ssh/id_ed25519-cert.pub",
840
- knownHostsFile: "~/.ssh/known_hosts",
841
- // SecretRefs / inline contents also supported:
842
- // identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" },
843
- // certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" },
844
- // knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" },
845
- },
846
- browser: {
847
- enabled: false,
848
- image: "fengming-sandbox-browser:bookworm-slim",
849
- network: "fengming-sandbox-browser",
850
- cdpPort: 9222,
851
- cdpSourceRange: "172.21.0.1/32",
852
- vncPort: 5900,
853
- noVncPort: 6080,
854
- headless: false,
855
- enableNoVnc: true,
856
- allowHostControl: false,
857
- autoStart: true,
858
- autoStartTimeoutMs: 12000,
859
- },
860
- prune: {
861
- idleHours: 24,
862
- maxAgeDays: 7,
863
- },
864
- },
865
- },
866
- },
867
- tools: {
868
- sandbox: {
869
- tools: {
870
- allow: [
871
- "exec",
872
- "process",
873
- "read",
874
- "write",
875
- "edit",
876
- "apply_patch",
877
- "sessions_list",
878
- "sessions_history",
879
- "sessions_send",
880
- "sessions_spawn",
881
- "session_status",
882
- ],
883
- deny: ["browser", "canvas", "nodes", "cron", "discord", "gateway"],
884
- },
885
- },
886
- },
887
- }
888
- ```
889
-
890
- <Accordion title="Sandbox details">
891
-
892
- **Backend:**
893
-
894
- - `docker`: local Docker runtime (default)
895
- - `ssh`: generic SSH-backed remote runtime
896
- - `openshell`: OpenShell runtime
897
-
898
- When `backend: "openshell"` is selected, runtime-specific settings move to
899
- `plugins.entries.openshell.config`.
900
-
901
- **SSH backend config:**
902
-
903
- - `target`: SSH target in `user@host[:port]` form
904
- - `command`: SSH client command (default: `ssh`)
905
- - `workspaceRoot`: absolute remote root used for per-scope workspaces
906
- - `identityFile` / `certificateFile` / `knownHostsFile`: existing local files passed to OpenSSH
907
- - `identityData` / `certificateData` / `knownHostsData`: inline contents or SecretRefs that FengMing materializes into temp files at runtime
908
- - `strictHostKeyChecking` / `updateHostKeys`: OpenSSH host-key policy knobs
909
-
910
- **SSH auth precedence:**
911
-
912
- - `identityData` wins over `identityFile`
913
- - `certificateData` wins over `certificateFile`
914
- - `knownHostsData` wins over `knownHostsFile`
915
- - SecretRef-backed `*Data` values are resolved from the active secrets runtime snapshot before the sandbox session starts
916
-
917
- **SSH backend behavior:**
918
-
919
- - seeds the remote workspace once after create or recreate
920
- - then keeps the remote SSH workspace canonical
921
- - routes `exec`, file tools, and media paths over SSH
922
- - does not sync remote changes back to the host automatically
923
- - does not support sandbox browser containers
924
-
925
- **Workspace access:**
926
-
927
- - `none`: per-scope sandbox workspace under `~/.fengming/sandboxes`
928
- - `ro`: sandbox workspace at `/workspace`, agent workspace mounted read-only at `/agent`
929
- - `rw`: agent workspace mounted read/write at `/workspace`
930
-
931
- **Scope:**
932
-
933
- - `session`: per-session container + workspace
934
- - `agent`: one container + workspace per agent (default)
935
- - `shared`: shared container and workspace (no cross-session isolation)
936
-
937
- **OpenShell plugin config:**
938
-
939
- ```json5
940
- {
941
- plugins: {
942
- entries: {
943
- openshell: {
944
- enabled: true,
945
- config: {
946
- mode: "mirror", // mirror | remote
947
- from: "fengming",
948
- remoteWorkspaceDir: "/sandbox",
949
- remoteAgentWorkspaceDir: "/agent",
950
- gateway: "lab", // optional
951
- gatewayEndpoint: "https://lab.example", // optional
952
- policy: "strict", // optional OpenShell policy id
953
- providers: ["openai"], // optional
954
- autoProviders: true,
955
- timeoutSeconds: 120,
956
- },
957
- },
958
- },
959
- },
960
- }
961
- ```
962
-
963
- **OpenShell mode:**
964
-
965
- - `mirror`: seed remote from local before exec, sync back after exec; local workspace stays canonical
966
- - `remote`: seed remote once when the sandbox is created, then keep the remote workspace canonical
967
-
968
- In `remote` mode, host-local edits made outside FengMing are not synced into the sandbox automatically after the seed step.
969
- Transport is SSH into the OpenShell sandbox, but the plugin owns sandbox lifecycle and optional mirror sync.
970
-
971
- **`setupCommand`** runs once after container creation (via `sh -lc`). Needs network egress, writable root, root user.
972
-
973
- **Containers default to `network: "none"`** — set to `"bridge"` (or a custom bridge network) if the agent needs outbound access.
974
- `"host"` is blocked. `"container:<id>"` is blocked by default unless you explicitly set
975
- `sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (break-glass).
976
- Codex app-server turns in an active FengMing sandbox use this same egress setting for their native code-mode network access.
977
-
978
- **Inbound attachments** are staged into `media/inbound/*` in the active workspace.
979
-
980
- **`docker.binds`** mounts additional host directories; global and per-agent binds are merged.
981
-
982
- **Sandboxed browser** (`sandbox.browser.enabled`): Chromium + CDP in a container. noVNC URL injected into system prompt. Does not require `browser.enabled` in `fengming.json`.
983
- noVNC observer access uses VNC auth by default and FengMing emits a short-lived token URL (instead of exposing the password in the shared URL).
984
-
985
- - `allowHostControl: false` (default) blocks sandboxed sessions from targeting the host browser.
986
- - `network` defaults to `fengming-sandbox-browser` (dedicated bridge network). Set to `bridge` only when you explicitly want global bridge connectivity.
987
- - `cdpSourceRange` optionally restricts CDP ingress at the container edge to a CIDR range (for example `172.21.0.1/32`).
988
- - `sandbox.browser.binds` mounts additional host directories into the sandbox browser container only. When set (including `[]`), it replaces `docker.binds` for the browser container.
989
- - Launch defaults are defined in `scripts/sandbox-browser-entrypoint.sh` and tuned for container hosts:
990
- - `--remote-debugging-address=127.0.0.1`
991
- - `--remote-debugging-port=<derived from FENGMING_BROWSER_CDP_PORT>`
992
- - `--user-data-dir=${HOME}/.chrome`
993
- - `--no-first-run`
994
- - `--no-default-browser-check`
995
- - `--disable-3d-apis`
996
- - `--disable-gpu`
997
- - `--disable-software-rasterizer`
998
- - `--disable-dev-shm-usage`
999
- - `--disable-background-networking`
1000
- - `--disable-features=TranslateUI`
1001
- - `--disable-breakpad`
1002
- - `--disable-crash-reporter`
1003
- - `--renderer-process-limit=2`
1004
- - `--no-zygote`
1005
- - `--metrics-recording-only`
1006
- - `--disable-extensions` (default enabled)
1007
- - `--disable-3d-apis`, `--disable-software-rasterizer`, and `--disable-gpu` are
1008
- enabled by default and can be disabled with
1009
- `FENGMING_BROWSER_DISABLE_GRAPHICS_FLAGS=0` if WebGL/3D usage requires it.
1010
- - `FENGMING_BROWSER_DISABLE_EXTENSIONS=0` re-enables extensions if your workflow
1011
- depends on them.
1012
- - `--renderer-process-limit=2` can be changed with
1013
- `FENGMING_BROWSER_RENDERER_PROCESS_LIMIT=<N>`; set `0` to use Chromium's
1014
- default process limit.
1015
- - plus `--no-sandbox` when `noSandbox` is enabled.
1016
- - Defaults are the container image baseline; use a custom browser image with a custom
1017
- entrypoint to change container defaults.
1018
-
1019
- </Accordion>
1020
-
1021
- Browser sandboxing and `sandbox.docker.binds` are Docker-only.
1022
-
1023
- Build images (from a source checkout):
1024
-
1025
- ```bash
1026
- scripts/sandbox-setup.sh # main sandbox image
1027
- scripts/sandbox-browser-setup.sh # optional browser image
1028
- ```
1029
-
1030
- For npm installs without a source checkout, see [Sandboxing § Images and setup](/gateway/sandboxing#images-and-setup) for inline `docker build` commands.
1031
-
1032
- ### `agents.list` (per-agent overrides)
1033
-
1034
- Use `agents.list[].tts` to give an agent its own TTS provider, voice, model,
1035
- style, or auto-TTS mode. The agent block deep-merges over global
1036
- `messages.tts`, so shared credentials can stay in one place while individual
1037
- agents override only the voice or provider fields they need. The active agent's
1038
- override applies to automatic spoken replies, `/tts audio`, `/tts status`, and
1039
- the `tts` agent tool. See [Text-to-speech](/tools/tts#per-agent-voice-overrides)
1040
- for provider examples and precedence.
1041
-
1042
- ```json5
1043
- {
1044
- agents: {
1045
- list: [
1046
- {
1047
- id: "main",
1048
- default: true,
1049
- name: "Main Agent",
1050
- workspace: "~/.fengming/workspace",
1051
- agentDir: "~/.fengming/agents/main/agent",
1052
- model: "anthropic/claude-opus-4-6", // or { primary, fallbacks }
1053
- thinkingDefault: "high", // per-agent thinking level override
1054
- reasoningDefault: "on", // per-agent reasoning visibility override
1055
- fastModeDefault: false, // per-agent fast mode override
1056
- params: { cacheRetention: "none" }, // overrides matching defaults.models params by key
1057
- tts: {
1058
- providers: {
1059
- elevenlabs: { speakerVoiceId: "EXAVITQu4vr4xnSDxMaL" },
1060
- },
1061
- },
1062
- skills: ["docs-search"], // replaces agents.defaults.skills when set
1063
- identity: {
1064
- name: "Samantha",
1065
- theme: "helpful sloth",
1066
- emoji: "🦥",
1067
- avatar: "avatars/samantha.png",
1068
- },
1069
- groupChat: { mentionPatterns: ["@fengming"] },
1070
- sandbox: { mode: "off" },
1071
- runtime: {
1072
- type: "acp",
1073
- acp: {
1074
- agent: "codex",
1075
- backend: "acpx",
1076
- mode: "persistent",
1077
- cwd: "/workspace/fengming",
1078
- },
1079
- },
1080
- subagents: { allowAgents: ["*"] },
1081
- tools: {
1082
- profile: "coding",
1083
- allow: ["browser"],
1084
- deny: ["canvas"],
1085
- elevated: { enabled: true },
1086
- },
1087
- },
1088
- ],
1089
- },
1090
- }
1091
- ```
1092
-
1093
- - `id`: stable agent id (required).
1094
- - `default`: when multiple are set, first wins (warning logged). If none set, first list entry is default.
1095
- - `model`: string form sets a strict per-agent primary with no model fallback; object form `{ primary }` is also strict unless you add `fallbacks`. Use `{ primary, fallbacks: [...] }` to opt that agent into fallback, or `{ primary, fallbacks: [] }` to make strict behavior explicit. Cron jobs that only override `primary` still inherit default fallbacks unless you set `fallbacks: []`.
1096
- - `params`: per-agent stream params merged over the selected model entry in `agents.defaults.models`. Use this for agent-specific overrides like `cacheRetention`, `temperature`, or `maxTokens` without duplicating the whole model catalog.
1097
- - `tts`: optional per-agent text-to-speech overrides. The block deep-merges over `messages.tts`, so keep shared provider credentials and fallback policy in `messages.tts` and set only persona-specific values such as provider, voice, model, style, or auto mode here.
1098
- - `skills`: optional per-agent skill allowlist. If omitted, the agent inherits `agents.defaults.skills` when set; an explicit list replaces defaults instead of merging, and `[]` means no skills.
1099
- - `thinkingDefault`: optional per-agent default thinking level (`off | minimal | low | medium | high | xhigh | adaptive | max`). Overrides `agents.defaults.thinkingDefault` for this agent when no per-message or session override is set. The selected provider/model profile controls which values are valid; for Google Gemini, `adaptive` keeps provider-owned dynamic thinking (`thinkingLevel` omitted on Gemini 3/3.1, `thinkingBudget: -1` on Gemini 2.5).
1100
- - `reasoningDefault`: optional per-agent default reasoning visibility (`on | off | stream`). Overrides `agents.defaults.reasoningDefault` for this agent when no per-message or session reasoning override is set.
1101
- - `fastModeDefault`: optional per-agent default for fast mode (`true | false`). Applies when no per-message or session fast-mode override is set.
1102
- - `models`: optional per-agent model catalog/runtime overrides keyed by full `provider/model` ids. Use `models["provider/model"].agentRuntime` for per-agent runtime exceptions.
1103
- - `runtime`: optional per-agent runtime descriptor. Use `type: "acp"` with `runtime.acp` defaults (`agent`, `backend`, `mode`, `cwd`) when the agent should default to ACP harness sessions.
1104
- - `identity.avatar`: workspace-relative path, `http(s)` URL, or `data:` URI.
1105
- - `identity` derives defaults: `ackReaction` from `emoji`, `mentionPatterns` from `name`/`emoji`.
1106
- - `subagents.allowAgents`: allowlist of configured agent ids for explicit `sessions_spawn.agentId` targets (`["*"]` = any configured target; default: same agent only). Include the requester id when self-targeted `agentId` calls should be allowed. Stale entries whose agent config was deleted are rejected by `sessions_spawn` and omitted from `agents_list`; run `fengming doctor --fix` to clean them up, or add a minimal `agents.list[]` entry if that target should remain spawnable while inheriting defaults.
1107
- - Sandbox inheritance guard: if the requester session is sandboxed, `sessions_spawn` rejects targets that would run unsandboxed.
1108
- - `subagents.requireAgentId`: when true, block `sessions_spawn` calls that omit `agentId` (forces explicit profile selection; default: false).
1109
-
1110
- ---
1111
-
1112
- ## Multi-agent routing
1113
-
1114
- Run multiple isolated agents inside one Gateway. See [Multi-Agent](/concepts/multi-agent).
1115
-
1116
- ```json5
1117
- {
1118
- agents: {
1119
- list: [
1120
- { id: "home", default: true, workspace: "~/.fengming/workspace-home" },
1121
- { id: "work", workspace: "~/.fengming/workspace-work" },
1122
- ],
1123
- },
1124
- bindings: [
1125
- { agentId: "home", match: { channel: "whatsapp", accountId: "personal" } },
1126
- { agentId: "work", match: { channel: "whatsapp", accountId: "biz" } },
1127
- ],
1128
- }
1129
- ```
1130
-
1131
- ### Binding match fields
1132
-
1133
- - `type` (optional): `route` for normal routing (missing type defaults to route), `acp` for persistent ACP conversation bindings.
1134
- - `match.channel` (required)
1135
- - `match.accountId` (optional; `*` = any account; omitted = default account)
1136
- - `match.peer` (optional; `{ kind: direct|group|channel, id }`)
1137
- - `match.guildId` / `match.teamId` (optional; channel-specific)
1138
- - `acp` (optional; only for `type: "acp"`): `{ mode, label, cwd, backend }`
1139
-
1140
- **Deterministic match order:**
1141
-
1142
- 1. `match.peer`
1143
- 2. `match.guildId`
1144
- 3. `match.teamId`
1145
- 4. `match.accountId` (exact, no peer/guild/team)
1146
- 5. `match.accountId: "*"` (channel-wide)
1147
- 6. Default agent
1148
-
1149
- Within each tier, the first matching `bindings` entry wins.
1150
-
1151
- For `type: "acp"` entries, FengMing resolves by exact conversation identity (`match.channel` + account + `match.peer.id`) and does not use the route binding tier order above.
1152
-
1153
- ### Per-agent access profiles
1154
-
1155
- <Accordion title="Full access (no sandbox)">
1156
-
1157
- ```json5
1158
- {
1159
- agents: {
1160
- list: [
1161
- {
1162
- id: "personal",
1163
- workspace: "~/.fengming/workspace-personal",
1164
- sandbox: { mode: "off" },
1165
- },
1166
- ],
1167
- },
1168
- }
1169
- ```
1170
-
1171
- </Accordion>
1172
-
1173
- <Accordion title="Read-only tools + workspace">
1174
-
1175
- ```json5
1176
- {
1177
- agents: {
1178
- list: [
1179
- {
1180
- id: "family",
1181
- workspace: "~/.fengming/workspace-family",
1182
- sandbox: { mode: "all", scope: "agent", workspaceAccess: "ro" },
1183
- tools: {
1184
- allow: [
1185
- "read",
1186
- "sessions_list",
1187
- "sessions_history",
1188
- "sessions_send",
1189
- "sessions_spawn",
1190
- "session_status",
1191
- ],
1192
- deny: ["write", "edit", "apply_patch", "exec", "process", "browser"],
1193
- },
1194
- },
1195
- ],
1196
- },
1197
- }
1198
- ```
1199
-
1200
- </Accordion>
1201
-
1202
- <Accordion title="No filesystem access (messaging only)">
1203
-
1204
- ```json5
1205
- {
1206
- agents: {
1207
- list: [
1208
- {
1209
- id: "public",
1210
- workspace: "~/.fengming/workspace-public",
1211
- sandbox: { mode: "all", scope: "agent", workspaceAccess: "none" },
1212
- tools: {
1213
- allow: [
1214
- "sessions_list",
1215
- "sessions_history",
1216
- "sessions_send",
1217
- "sessions_spawn",
1218
- "session_status",
1219
- "whatsapp",
1220
- "telegram",
1221
- "slack",
1222
- "discord",
1223
- "gateway",
1224
- ],
1225
- deny: [
1226
- "read",
1227
- "write",
1228
- "edit",
1229
- "apply_patch",
1230
- "exec",
1231
- "process",
1232
- "browser",
1233
- "canvas",
1234
- "nodes",
1235
- "cron",
1236
- "gateway",
1237
- "image",
1238
- ],
1239
- },
1240
- },
1241
- ],
1242
- },
1243
- }
1244
- ```
1245
-
1246
- </Accordion>
1247
-
1248
- See [Multi-Agent Sandbox & Tools](/tools/multi-agent-sandbox-tools) for precedence details.
1249
-
1250
- ---
1251
-
1252
- ## Session
1253
-
1254
- ```json5
1255
- {
1256
- session: {
1257
- scope: "per-sender",
1258
- dmScope: "main", // main | per-peer | per-channel-peer | per-account-channel-peer
1259
- identityLinks: {
1260
- alice: ["telegram:123456789", "discord:987654321012345678"],
1261
- },
1262
- reset: {
1263
- mode: "daily", // daily | idle
1264
- atHour: 4,
1265
- idleMinutes: 60,
1266
- },
1267
- resetByType: {
1268
- thread: { mode: "daily", atHour: 4 },
1269
- direct: { mode: "idle", idleMinutes: 240 },
1270
- group: { mode: "idle", idleMinutes: 120 },
1271
- },
1272
- resetTriggers: ["/new", "/reset"],
1273
- store: "~/.fengming/agents/{agentId}/sessions/sessions.json",
1274
- maintenance: {
1275
- mode: "warn", // warn | enforce
1276
- pruneAfter: "30d",
1277
- maxEntries: 500,
1278
- resetArchiveRetention: "30d", // duration or false
1279
- maxDiskBytes: "500mb", // optional hard budget
1280
- highWaterBytes: "400mb", // optional cleanup target
1281
- },
1282
- threadBindings: {
1283
- enabled: true,
1284
- idleHours: 24, // default inactivity auto-unfocus in hours (`0` disables)
1285
- maxAgeHours: 0, // default hard max age in hours (`0` disables)
1286
- },
1287
- mainKey: "main", // legacy (runtime always uses "main")
1288
- agentToAgent: { maxPingPongTurns: 5 },
1289
- sendPolicy: {
1290
- rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }],
1291
- default: "allow",
1292
- },
1293
- },
1294
- }
1295
- ```
1296
-
1297
- <Accordion title="Session field details">
1298
-
1299
- - **`scope`**: base session grouping strategy for group-chat contexts.
1300
- - `per-sender` (default): each sender gets an isolated session within a channel context.
1301
- - `global`: all participants in a channel context share a single session (use only when shared context is intended).
1302
- - **`dmScope`**: how DMs are grouped.
1303
- - `main`: all DMs share the main session.
1304
- - `per-peer`: isolate by sender id across channels.
1305
- - `per-channel-peer`: isolate per channel + sender (recommended for multi-user inboxes).
1306
- - `per-account-channel-peer`: isolate per account + channel + sender (recommended for multi-account).
1307
- - **`identityLinks`**: map canonical ids to provider-prefixed peers for cross-channel session sharing. Dock commands such as `/dock_discord` use the same map to switch the active session's reply route to another linked channel peer; see [Channel docking](/concepts/channel-docking).
1308
- - **`reset`**: primary reset policy. `daily` resets at `atHour` local time; `idle` resets after `idleMinutes`. When both configured, whichever expires first wins. Daily reset freshness uses the session row's `sessionStartedAt`; idle reset freshness uses `lastInteractionAt`. Background/system-event writes such as heartbeat, cron wakeups, exec notifications, and gateway bookkeeping can update `updatedAt`, but they do not keep daily/idle sessions fresh.
1309
- - **`resetByType`**: per-type overrides (`direct`, `group`, `thread`). Legacy `dm` accepted as alias for `direct`.
1310
- - **`mainKey`**: legacy field. Runtime always uses `"main"` for the main direct-chat bucket.
1311
- - **`agentToAgent.maxPingPongTurns`**: maximum reply-back turns between agents during agent-to-agent exchanges (integer, range: `0`-`20`, default: `5`). `0` disables ping-pong chaining.
1312
- - **`sendPolicy`**: match by `channel`, `chatType` (`direct|group|channel`, with legacy `dm` alias), `keyPrefix`, or `rawKeyPrefix`. First deny wins.
1313
- - **`maintenance`**: session-store cleanup + retention controls.
1314
- - `mode`: `warn` emits warnings only; `enforce` applies cleanup.
1315
- - `pruneAfter`: age cutoff for stale entries (default `30d`).
1316
- - `maxEntries`: maximum number of entries in `sessions.json` (default `500`). Runtime writes batch cleanup with a small high-water buffer for production-sized caps; `fengming sessions cleanup --enforce` applies the cap immediately.
1317
- - `rotateBytes`: deprecated and ignored; `fengming doctor --fix` removes it from older configs.
1318
- - `resetArchiveRetention`: retention for `*.reset.<timestamp>` transcript archives. Defaults to `pruneAfter`; set `false` to disable.
1319
- - `maxDiskBytes`: optional sessions-directory disk budget. In `warn` mode it logs warnings; in `enforce` mode it removes oldest artifacts/sessions first.
1320
- - `highWaterBytes`: optional target after budget cleanup. Defaults to `80%` of `maxDiskBytes`.
1321
- - **`threadBindings`**: global defaults for thread-bound session features.
1322
- - `enabled`: master default switch (providers can override; Discord uses `channels.discord.threadBindings.enabled`)
1323
- - `idleHours`: default inactivity auto-unfocus in hours (`0` disables; providers can override)
1324
- - `maxAgeHours`: default hard max age in hours (`0` disables; providers can override)
1325
- - `spawnSessions`: default gate for creating thread-bound work sessions from `sessions_spawn` and ACP thread spawns. Defaults to `true` when thread bindings are enabled; providers/accounts can override.
1326
- - `defaultSpawnContext`: default native subagent context for thread-bound spawns (`"fork"` or `"isolated"`). Defaults to `"fork"`.
1327
-
1328
- </Accordion>
1329
-
1330
- ---
1331
-
1332
- ## Messages
1333
-
1334
- ```json5
1335
- {
1336
- messages: {
1337
- responsePrefix: "🦞", // or "auto"
1338
- ackReaction: "👀",
1339
- ackReactionScope: "group-mentions", // group-mentions | group-all | direct | all
1340
- removeAckAfterReply: false,
1341
- queue: {
1342
- mode: "followup", // steer | followup | collect | interrupt
1343
- debounceMs: 500,
1344
- cap: 20,
1345
- drop: "summarize", // old | new | summarize
1346
- byChannel: {
1347
- whatsapp: "followup",
1348
- telegram: "followup",
1349
- },
1350
- },
1351
- inbound: {
1352
- debounceMs: 2000, // 0 disables
1353
- byChannel: {
1354
- whatsapp: 5000,
1355
- slack: 1500,
1356
- },
1357
- },
1358
- },
1359
- }
1360
- ```
1361
-
1362
- ### Response prefix
1363
-
1364
- Per-channel/account overrides: `channels.<channel>.responsePrefix`, `channels.<channel>.accounts.<id>.responsePrefix`.
1365
-
1366
- Resolution (most specific wins): account → channel → global. `""` disables and stops cascade. `"auto"` derives `[{identity.name}]`.
1367
-
1368
- **Template variables:**
1369
-
1370
- | Variable | Description | Example |
1371
- | ----------------- | ---------------------- | --------------------------- |
1372
- | `{model}` | Short model name | `claude-opus-4-6` |
1373
- | `{modelFull}` | Full model identifier | `anthropic/claude-opus-4-6` |
1374
- | `{provider}` | Provider name | `anthropic` |
1375
- | `{thinkingLevel}` | Current thinking level | `high`, `low`, `off` |
1376
- | `{identity.name}` | Agent identity name | (same as `"auto"`) |
1377
-
1378
- Variables are case-insensitive. `{think}` is an alias for `{thinkingLevel}`.
1379
-
1380
- ### Ack reaction
1381
-
1382
- - Defaults to active agent's `identity.emoji`, otherwise `"👀"`. Set `""` to disable.
1383
- - Per-channel overrides: `channels.<channel>.ackReaction`, `channels.<channel>.accounts.<id>.ackReaction`.
1384
- - Resolution order: account → channel → `messages.ackReaction` → identity fallback.
1385
- - Scope: `group-mentions` (default), `group-all`, `direct`, `all`.
1386
- - `removeAckAfterReply`: removes ack after reply on reaction-capable channels such as Slack, Discord, Telegram, WhatsApp, and iMessage.
1387
- - `messages.statusReactions.enabled`: enables lifecycle status reactions on Slack, Discord, Telegram, and WhatsApp.
1388
- On Slack and Discord, unset keeps status reactions enabled when ack reactions are active.
1389
- On Telegram and WhatsApp, set it explicitly to `true` to enable lifecycle status reactions.
1390
- - `messages.statusReactions.emojis`: overrides lifecycle emoji keys:
1391
- `queued`, `thinking`, `compacting`, `tool`, `coding`, `web`, `deploy`, `build`,
1392
- `concierge`, `done`, `error`, `stallSoft`, and `stallHard`.
1393
- Telegram only allows a fixed reaction set, so unsupported configured emoji fall back
1394
- to the nearest supported status variant for that chat.
1395
-
1396
- ### Inbound debounce
1397
-
1398
- Batches rapid text-only messages from the same sender into a single agent turn. Media/attachments flush immediately. Control commands bypass debouncing.
1399
-
1400
- ### TTS (text-to-speech)
1401
-
1402
- ```json5
1403
- {
1404
- messages: {
1405
- tts: {
1406
- auto: "always", // off | always | inbound | tagged
1407
- mode: "final", // final | all
1408
- provider: "elevenlabs",
1409
- summaryModel: "openai/gpt-5.4-mini",
1410
- modelOverrides: { enabled: true },
1411
- maxTextLength: 4000,
1412
- timeoutMs: 30000,
1413
- prefsPath: "~/.fengming/settings/tts.json",
1414
- providers: {
1415
- elevenlabs: {
1416
- apiKey: "elevenlabs_api_key",
1417
- baseUrl: "https://api.elevenlabs.io",
1418
- speakerVoiceId: "voice_id",
1419
- modelId: "eleven_multilingual_v2",
1420
- seed: 42,
1421
- applyTextNormalization: "auto",
1422
- languageCode: "en",
1423
- voiceSettings: {
1424
- stability: 0.5,
1425
- similarityBoost: 0.75,
1426
- style: 0.0,
1427
- useSpeakerBoost: true,
1428
- speed: 1.0,
1429
- },
1430
- },
1431
- microsoft: {
1432
- speakerVoice: "en-US-AvaMultilingualNeural",
1433
- lang: "en-US",
1434
- outputFormat: "audio-24khz-48kbitrate-mono-mp3",
1435
- },
1436
- openai: {
1437
- apiKey: "openai_api_key",
1438
- baseUrl: "https://api.openai.com/v1",
1439
- model: "gpt-4o-mini-tts",
1440
- speakerVoice: "alloy",
1441
- },
1442
- },
1443
- },
1444
- },
1445
- }
1446
- ```
1447
-
1448
- - `auto` controls the default auto-TTS mode: `off`, `always`, `inbound`, or `tagged`. `/tts on|off` can override local prefs, and `/tts status` shows the effective state.
1449
- - `summaryModel` overrides `agents.defaults.model.primary` for auto-summary.
1450
- - `modelOverrides` is enabled by default; `modelOverrides.allowProvider` defaults to `false` (opt-in).
1451
- - API keys fall back to `ELEVENLABS_API_KEY`/`XI_API_KEY` and `OPENAI_API_KEY`.
1452
- - Bundled speech providers are plugin-owned. If `plugins.allow` is set, include each TTS provider plugin you want to use, for example `microsoft` for Edge TTS. The legacy `edge` provider id is accepted as an alias for `microsoft`.
1453
- - `providers.openai.baseUrl` overrides the OpenAI TTS endpoint. Resolution order is config, then `OPENAI_TTS_BASE_URL`, then `https://api.openai.com/v1`.
1454
- - When `providers.openai.baseUrl` points to a non-OpenAI endpoint, FengMing treats it as an OpenAI-compatible TTS server and relaxes model/voice validation.
1455
-
1456
- ---
1457
-
1458
- ## Talk
1459
-
1460
- Defaults for Talk mode (macOS/iOS/Android).
1461
-
1462
- ```json5
1463
- {
1464
- talk: {
1465
- provider: "elevenlabs",
1466
- providers: {
1467
- elevenlabs: {
1468
- speakerVoiceId: "elevenlabs_voice_id",
1469
- voiceAliases: {
1470
- Clawd: "EXAVITQu4vr4xnSDxMaL",
1471
- Roger: "CwhRBWXzGAHq8TQ4Fs17",
1472
- },
1473
- modelId: "eleven_v3",
1474
- outputFormat: "mp3_44100_128",
1475
- apiKey: "elevenlabs_api_key",
1476
- },
1477
- mlx: {
1478
- modelId: "mlx-community/Soprano-80M-bf16",
1479
- },
1480
- system: {},
1481
- },
1482
- consultThinkingLevel: "low",
1483
- consultFastMode: true,
1484
- speechLocale: "ru-RU",
1485
- silenceTimeoutMs: 1500,
1486
- interruptOnSpeech: true,
1487
- realtime: {
1488
- provider: "openai",
1489
- providers: {
1490
- openai: {
1491
- model: "gpt-realtime-2",
1492
- speakerVoice: "cedar",
1493
- },
1494
- },
1495
- instructions: "Speak warmly and keep answers brief.",
1496
- mode: "realtime",
1497
- transport: "webrtc",
1498
- brain: "agent-consult",
1499
- },
1500
- },
1501
- }
1502
- ```
1503
-
1504
- - `talk.provider` must match a key in `talk.providers` when multiple Talk providers are configured.
1505
- - Legacy flat Talk keys (`talk.voiceId`, `talk.voiceAliases`, `talk.modelId`, `talk.outputFormat`, `talk.apiKey`) are compatibility-only. Run `fengming doctor --fix` to rewrite persisted config into `talk.providers.<provider>`.
1506
- - Voice IDs fall back to `ELEVENLABS_VOICE_ID` or `SAG_VOICE_ID`.
1507
- - `providers.*.apiKey` accepts plaintext strings or SecretRef objects.
1508
- - `ELEVENLABS_API_KEY` fallback applies only when no Talk API key is configured.
1509
- - `providers.*.voiceAliases` lets Talk directives use friendly names.
1510
- - `providers.mlx.modelId` selects the Hugging Face repo used by the macOS local MLX helper. If omitted, macOS uses `mlx-community/Soprano-80M-bf16`.
1511
- - macOS MLX playback runs through the bundled `fengming-mlx-tts` helper when present, or an executable on `PATH`; `FENGMING_MLX_TTS_BIN` overrides the helper path for development.
1512
- - `consultThinkingLevel` controls the thinking level for the full FengMing agent run behind Control UI Talk realtime `fengming_agent_consult` calls. Leave unset to preserve normal session/model behavior.
1513
- - `consultFastMode` sets a one-shot fast-mode override for Control UI Talk realtime consults without changing the session's normal fast-mode setting.
1514
- - `speechLocale` sets the BCP 47 locale id used by iOS/macOS Talk speech recognition. Leave unset to use the device default.
1515
- - `silenceTimeoutMs` controls how long Talk mode waits after user silence before it sends the transcript. Unset keeps the platform default pause window (`700 ms on macOS and Android, 900 ms on iOS`).
1516
- - `realtime.instructions` appends provider-facing system instructions to FengMing's built-in realtime prompt, so voice style can be configured without losing default `fengming_agent_consult` guidance.
1517
- - `realtime.consultRouting` controls Gateway relay fallback when the realtime provider produces a final user transcript without `fengming_agent_consult`: `provider-direct` preserves direct provider replies, while `force-agent-consult` routes the finalized request through FengMing.
1518
-
1519
- ---
1520
-
1521
- ## Related
1522
-
1523
- - [Configuration reference](/gateway/configuration-reference) — all other config keys
1524
- - [Configuration](/gateway/configuration) — common tasks and quick setup
1525
- - [Configuration examples](/gateway/configuration-examples)