fengming 0.3.10 → 0.3.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (761) hide show
  1. package/dist/build-info.json +2 -2
  2. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  3. package/dist/cli-startup-metadata.json +8 -8
  4. package/dist/control-ui/assets/{activity-D-mnRThU.js → activity-wgT0-JR0.js} +2 -2
  5. package/dist/control-ui/assets/{agents-U_KSP5I_.js → agents-DG5PobrT.js} +2 -2
  6. package/dist/control-ui/assets/{channels-ohK9_G1O.js → channels-CX28oM42.js} +2 -2
  7. package/dist/control-ui/assets/{cron-6ZCzfU29.js → cron-B8ixwBqU.js} +2 -2
  8. package/dist/control-ui/assets/{debug-CSsDLg_s.js → debug-CnkYZUXy.js} +2 -2
  9. package/dist/control-ui/assets/{index-jUDczxhd.js → index-DQRZJKbO.js} +4 -4
  10. package/dist/control-ui/assets/{instances-782ZoDT4.js → instances-BE3mV1JC.js} +2 -2
  11. package/dist/control-ui/assets/{nodes-BMX16BKM.js → nodes-Cou4PWRX.js} +2 -2
  12. package/dist/control-ui/assets/{sessions-jLGSApYa.js → sessions-DpAaBT21.js} +2 -2
  13. package/dist/control-ui/assets/{skills-DweBwUhs.js → skills-DjA_j_20.js} +2 -2
  14. package/dist/control-ui/assets/{workboard-BsU-FXIo.js → workboard-BFnvbS0k.js} +2 -2
  15. package/dist/control-ui/index.html +1 -1
  16. package/dist/control-ui/sw.js +1 -1
  17. package/dist/gateway/protocol/index.d.ts +1 -1
  18. package/dist/{index-AZzJCgph.d.ts → index-DuDY3bCZ.d.ts} +2 -2
  19. package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
  20. package/dist/plugin-sdk/agent-config-primitives.d.ts +1 -1
  21. package/dist/plugin-sdk/{bundled-channel-config-schema-Dfn3b8sF.d.ts → bundled-channel-config-schema-BPFNnbwu.d.ts} +23 -23
  22. package/dist/plugin-sdk/bundled-channel-config-schema.d.ts +3 -3
  23. package/dist/plugin-sdk/channel-config-primitives.d.ts +2 -2
  24. package/dist/plugin-sdk/channel-config-schema-legacy.d.ts +3 -3
  25. package/dist/plugin-sdk/channel-config-schema.d.ts +2 -2
  26. package/dist/plugin-sdk/channel-core.d.ts +1 -1
  27. package/dist/plugin-sdk/channel-plugin-common.d.ts +1 -1
  28. package/dist/plugin-sdk/compat.d.ts +2 -2
  29. package/dist/plugin-sdk/{config-schema-DUddICQM.d.ts → config-schema-D7cABQ6o.d.ts} +1 -1
  30. package/dist/plugin-sdk/config-schema.d.ts +2 -2
  31. package/dist/plugin-sdk/core.d.ts +1 -1
  32. package/dist/plugin-sdk/discord.d.ts +2 -2
  33. package/dist/plugin-sdk/tts-runtime.d.ts +1 -1
  34. package/dist/plugin-sdk/{zod-schema.core-B4_b2R5K.d.ts → zod-schema.core-CwBNqcXp.d.ts} +1 -1
  35. package/package.json +4 -409
  36. package/CHANGELOG.md +0 -42
  37. package/THIRD_PARTY_NOTICES.md +0 -37
  38. package/docs/.i18n/README.md +0 -81
  39. package/docs/.i18n/ar-navigation.json +0 -18
  40. package/docs/.i18n/de-navigation.json +0 -18
  41. package/docs/.i18n/es-navigation.json +0 -18
  42. package/docs/.i18n/fr-navigation.json +0 -18
  43. package/docs/.i18n/glossary.ar.json +0 -78
  44. package/docs/.i18n/glossary.de.json +0 -78
  45. package/docs/.i18n/glossary.es.json +0 -78
  46. package/docs/.i18n/glossary.fa.json +0 -78
  47. package/docs/.i18n/glossary.fr.json +0 -78
  48. package/docs/.i18n/glossary.id.json +0 -78
  49. package/docs/.i18n/glossary.it.json +0 -78
  50. package/docs/.i18n/glossary.ja-JP.json +0 -98
  51. package/docs/.i18n/glossary.ko.json +0 -78
  52. package/docs/.i18n/glossary.nl.json +0 -78
  53. package/docs/.i18n/glossary.pl.json +0 -78
  54. package/docs/.i18n/glossary.pt-BR.json +0 -78
  55. package/docs/.i18n/glossary.th.json +0 -78
  56. package/docs/.i18n/glossary.tr.json +0 -78
  57. package/docs/.i18n/glossary.uk.json +0 -78
  58. package/docs/.i18n/glossary.vi.json +0 -78
  59. package/docs/.i18n/glossary.zh-CN.json +0 -1122
  60. package/docs/.i18n/glossary.zh-TW.json +0 -78
  61. package/docs/.i18n/id-navigation.json +0 -18
  62. package/docs/.i18n/it-navigation.json +0 -18
  63. package/docs/.i18n/ja-navigation.json +0 -18
  64. package/docs/.i18n/ko-navigation.json +0 -18
  65. package/docs/.i18n/pl-navigation.json +0 -18
  66. package/docs/.i18n/pt-BR-navigation.json +0 -18
  67. package/docs/.i18n/tr-navigation.json +0 -18
  68. package/docs/.i18n/translation-workflow.md +0 -111
  69. package/docs/.i18n/zh-Hans-navigation.json +0 -552
  70. package/docs/AGENTS.md +0 -36
  71. package/docs/CLAUDE.md +0 -1
  72. package/docs/agent-runtime-architecture.md +0 -48
  73. package/docs/announcements/bluebubbles-imessage.md +0 -79
  74. package/docs/auth-credential-semantics.md +0 -124
  75. package/docs/automation/auth-monitoring.md +0 -11
  76. package/docs/automation/clawflow.md +0 -12
  77. package/docs/automation/cron-jobs.md +0 -534
  78. package/docs/automation/cron-vs-heartbeat.md +0 -11
  79. package/docs/automation/gmail-pubsub.md +0 -11
  80. package/docs/automation/hooks.md +0 -387
  81. package/docs/automation/index.md +0 -135
  82. package/docs/automation/poll.md +0 -12
  83. package/docs/automation/standing-orders.md +0 -250
  84. package/docs/automation/taskflow.md +0 -155
  85. package/docs/automation/tasks.md +0 -374
  86. package/docs/automation/troubleshooting.md +0 -12
  87. package/docs/automation/webhook.md +0 -12
  88. package/docs/brave-search.md +0 -11
  89. package/docs/channels/access-groups.md +0 -201
  90. package/docs/channels/ambient-room-events.md +0 -214
  91. package/docs/channels/bot-loop-protection.md +0 -131
  92. package/docs/channels/broadcast-groups.md +0 -472
  93. package/docs/channels/channel-routing.md +0 -162
  94. package/docs/channels/clickclack.md +0 -138
  95. package/docs/channels/discord.md +0 -1758
  96. package/docs/channels/feishu.md +0 -650
  97. package/docs/channels/googlechat.md +0 -284
  98. package/docs/channels/group-messages.md +0 -95
  99. package/docs/channels/groups.md +0 -524
  100. package/docs/channels/imessage-from-bluebubbles.md +0 -259
  101. package/docs/channels/imessage.md +0 -839
  102. package/docs/channels/index.md +0 -64
  103. package/docs/channels/irc.md +0 -253
  104. package/docs/channels/line.md +0 -243
  105. package/docs/channels/location.md +0 -71
  106. package/docs/channels/matrix-migration.md +0 -370
  107. package/docs/channels/matrix-presentation.md +0 -77
  108. package/docs/channels/matrix-push-rules.md +0 -150
  109. package/docs/channels/matrix.md +0 -921
  110. package/docs/channels/mattermost.md +0 -542
  111. package/docs/channels/msteams.md +0 -1096
  112. package/docs/channels/nextcloud-talk.md +0 -176
  113. package/docs/channels/nostr.md +0 -253
  114. package/docs/channels/pairing.md +0 -214
  115. package/docs/channels/qqbot.md +0 -314
  116. package/docs/channels/signal.md +0 -417
  117. package/docs/channels/slack.md +0 -1623
  118. package/docs/channels/synology-chat.md +0 -187
  119. package/docs/channels/telegram.md +0 -1124
  120. package/docs/channels/tlon.md +0 -296
  121. package/docs/channels/troubleshooting.md +0 -162
  122. package/docs/channels/twitch.md +0 -431
  123. package/docs/channels/wechat.md +0 -171
  124. package/docs/channels/whatsapp.md +0 -796
  125. package/docs/channels/yuanbao.md +0 -416
  126. package/docs/channels/zalo.md +0 -253
  127. package/docs/channels/zalouser.md +0 -217
  128. package/docs/ci.md +0 -657
  129. package/docs/clawhub/publishing.md +0 -96
  130. package/docs/cli/acp.md +0 -370
  131. package/docs/cli/agent.md +0 -109
  132. package/docs/cli/agents.md +0 -253
  133. package/docs/cli/approvals.md +0 -190
  134. package/docs/cli/backup.md +0 -98
  135. package/docs/cli/browser.md +0 -307
  136. package/docs/cli/channels.md +0 -154
  137. package/docs/cli/clawbot.md +0 -25
  138. package/docs/cli/commitments.md +0 -90
  139. package/docs/cli/completion.md +0 -39
  140. package/docs/cli/config.md +0 -504
  141. package/docs/cli/configure.md +0 -77
  142. package/docs/cli/crestodian.md +0 -337
  143. package/docs/cli/cron.md +0 -304
  144. package/docs/cli/daemon.md +0 -67
  145. package/docs/cli/dashboard.md +0 -33
  146. package/docs/cli/devices.md +0 -240
  147. package/docs/cli/directory.md +0 -68
  148. package/docs/cli/dns.md +0 -53
  149. package/docs/cli/docs.md +0 -63
  150. package/docs/cli/doctor.md +0 -241
  151. package/docs/cli/flows.md +0 -52
  152. package/docs/cli/gateway.md +0 -572
  153. package/docs/cli/health.md +0 -43
  154. package/docs/cli/hooks.md +0 -345
  155. package/docs/cli/index.md +0 -400
  156. package/docs/cli/infer.md +0 -364
  157. package/docs/cli/logs.md +0 -68
  158. package/docs/cli/mcp.md +0 -529
  159. package/docs/cli/memory.md +0 -183
  160. package/docs/cli/message.md +0 -317
  161. package/docs/cli/migrate.md +0 -334
  162. package/docs/cli/models.md +0 -239
  163. package/docs/cli/node.md +0 -177
  164. package/docs/cli/nodes.md +0 -76
  165. package/docs/cli/onboard.md +0 -250
  166. package/docs/cli/pairing.md +0 -77
  167. package/docs/cli/path.md +0 -511
  168. package/docs/cli/plugins.md +0 -459
  169. package/docs/cli/policy.md +0 -886
  170. package/docs/cli/proxy.md +0 -89
  171. package/docs/cli/qr.md +0 -56
  172. package/docs/cli/reset.md +0 -39
  173. package/docs/cli/sandbox.md +0 -208
  174. package/docs/cli/secrets.md +0 -202
  175. package/docs/cli/security.md +0 -136
  176. package/docs/cli/sessions.md +0 -164
  177. package/docs/cli/setup.md +0 -59
  178. package/docs/cli/skills.md +0 -122
  179. package/docs/cli/status.md +0 -45
  180. package/docs/cli/system.md +0 -89
  181. package/docs/cli/tasks.md +0 -111
  182. package/docs/cli/transcripts.md +0 -151
  183. package/docs/cli/tui.md +0 -91
  184. package/docs/cli/uninstall.md +0 -44
  185. package/docs/cli/update.md +0 -243
  186. package/docs/cli/voicecall.md +0 -204
  187. package/docs/cli/webhooks.md +0 -117
  188. package/docs/cli/wiki.md +0 -256
  189. package/docs/concepts/active-memory.md +0 -856
  190. package/docs/concepts/agent-loop.md +0 -185
  191. package/docs/concepts/agent-runtimes.md +0 -276
  192. package/docs/concepts/agent-workspace.md +0 -230
  193. package/docs/concepts/agent.md +0 -140
  194. package/docs/concepts/architecture.md +0 -154
  195. package/docs/concepts/channel-docking.md +0 -145
  196. package/docs/concepts/commitments.md +0 -150
  197. package/docs/concepts/compaction.md +0 -203
  198. package/docs/concepts/context-engine.md +0 -347
  199. package/docs/concepts/context.md +0 -199
  200. package/docs/concepts/delegate-architecture.md +0 -319
  201. package/docs/concepts/dreaming.md +0 -264
  202. package/docs/concepts/experimental-features.md +0 -109
  203. package/docs/concepts/features.md +0 -91
  204. package/docs/concepts/fengming-sdk.md +0 -323
  205. package/docs/concepts/mantis-slack-desktop-runbook.md +0 -231
  206. package/docs/concepts/mantis.md +0 -744
  207. package/docs/concepts/markdown-formatting.md +0 -139
  208. package/docs/concepts/memory-builtin.md +0 -148
  209. package/docs/concepts/memory-honcho.md +0 -144
  210. package/docs/concepts/memory-qmd.md +0 -271
  211. package/docs/concepts/memory-search.md +0 -167
  212. package/docs/concepts/memory.md +0 -299
  213. package/docs/concepts/message-lifecycle-refactor.md +0 -1126
  214. package/docs/concepts/messages.md +0 -214
  215. package/docs/concepts/model-failover.md +0 -384
  216. package/docs/concepts/model-providers.md +0 -719
  217. package/docs/concepts/models.md +0 -371
  218. package/docs/concepts/multi-agent.md +0 -625
  219. package/docs/concepts/oauth.md +0 -198
  220. package/docs/concepts/parallel-specialist-lanes.md +0 -127
  221. package/docs/concepts/personal-agent-benchmark-pack.md +0 -74
  222. package/docs/concepts/presence.md +0 -117
  223. package/docs/concepts/progress-drafts.md +0 -406
  224. package/docs/concepts/qa-e2e-automation.md +0 -947
  225. package/docs/concepts/qa-matrix.md +0 -139
  226. package/docs/concepts/queue-steering.md +0 -90
  227. package/docs/concepts/queue.md +0 -136
  228. package/docs/concepts/retry.md +0 -86
  229. package/docs/concepts/session-pruning.md +0 -104
  230. package/docs/concepts/session-tool.md +0 -188
  231. package/docs/concepts/session.md +0 -164
  232. package/docs/concepts/soul.md +0 -116
  233. package/docs/concepts/streaming.md +0 -257
  234. package/docs/concepts/system-prompt.md +0 -328
  235. package/docs/concepts/timezone.md +0 -47
  236. package/docs/concepts/typebox.md +0 -309
  237. package/docs/concepts/typing-indicators.md +0 -88
  238. package/docs/concepts/usage-tracking.md +0 -66
  239. package/docs/date-time.md +0 -126
  240. package/docs/debug/node-issue.md +0 -90
  241. package/docs/diagnostics/flags.md +0 -182
  242. package/docs/docs.json +0 -1862
  243. package/docs/fengming-agent-runtime.md +0 -82
  244. package/docs/gateway/authentication.md +0 -256
  245. package/docs/gateway/background-process.md +0 -147
  246. package/docs/gateway/bonjour.md +0 -303
  247. package/docs/gateway/bridge-protocol.md +0 -97
  248. package/docs/gateway/cli-backends.md +0 -439
  249. package/docs/gateway/config-agents.md +0 -1525
  250. package/docs/gateway/config-channels.md +0 -945
  251. package/docs/gateway/config-tools.md +0 -774
  252. package/docs/gateway/configuration-examples.md +0 -704
  253. package/docs/gateway/configuration-reference.md +0 -1391
  254. package/docs/gateway/configuration.md +0 -739
  255. package/docs/gateway/diagnostics.md +0 -213
  256. package/docs/gateway/discovery.md +0 -154
  257. package/docs/gateway/doctor.md +0 -575
  258. package/docs/gateway/gateway-lock.md +0 -37
  259. package/docs/gateway/health.md +0 -73
  260. package/docs/gateway/heartbeat.md +0 -498
  261. package/docs/gateway/index.md +0 -383
  262. package/docs/gateway/local-model-services.md +0 -205
  263. package/docs/gateway/local-models.md +0 -355
  264. package/docs/gateway/logging.md +0 -149
  265. package/docs/gateway/multiple-gateways.md +0 -178
  266. package/docs/gateway/network-model.md +0 -15
  267. package/docs/gateway/openai-http-api.md +0 -378
  268. package/docs/gateway/openresponses-http-api.md +0 -347
  269. package/docs/gateway/openshell.md +0 -316
  270. package/docs/gateway/opentelemetry.md +0 -433
  271. package/docs/gateway/operator-scopes.md +0 -119
  272. package/docs/gateway/pairing.md +0 -207
  273. package/docs/gateway/prometheus.md +0 -249
  274. package/docs/gateway/protocol.md +0 -826
  275. package/docs/gateway/remote-gateway-readme.md +0 -169
  276. package/docs/gateway/remote.md +0 -280
  277. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +0 -148
  278. package/docs/gateway/sandboxing.md +0 -546
  279. package/docs/gateway/secrets-plan-contract.md +0 -159
  280. package/docs/gateway/secrets.md +0 -805
  281. package/docs/gateway/security/audit-checks.md +0 -127
  282. package/docs/gateway/security/exposure-runbook.md +0 -212
  283. package/docs/gateway/security/index.md +0 -1343
  284. package/docs/gateway/security/secure-file-operations.md +0 -76
  285. package/docs/gateway/security/shrinkwrap.md +0 -111
  286. package/docs/gateway/tailscale.md +0 -156
  287. package/docs/gateway/tools-invoke-http-api.md +0 -169
  288. package/docs/gateway/troubleshooting.md +0 -877
  289. package/docs/gateway/trusted-proxy-auth.md +0 -483
  290. package/docs/help/debugging.md +0 -341
  291. package/docs/help/environment.md +0 -233
  292. package/docs/help/faq-first-run.md +0 -870
  293. package/docs/help/faq-models.md +0 -556
  294. package/docs/help/faq.md +0 -2041
  295. package/docs/help/index.md +0 -39
  296. package/docs/help/scripts.md +0 -56
  297. package/docs/help/testing-live.md +0 -587
  298. package/docs/help/testing-updates-plugins.md +0 -299
  299. package/docs/help/testing.md +0 -977
  300. package/docs/help/troubleshooting.md +0 -449
  301. package/docs/index.md +0 -196
  302. package/docs/install/ansible.md +0 -233
  303. package/docs/install/azure.md +0 -315
  304. package/docs/install/bun.md +0 -59
  305. package/docs/install/clawdock.md +0 -112
  306. package/docs/install/development-channels.md +0 -148
  307. package/docs/install/digitalocean.md +0 -174
  308. package/docs/install/docker-vm-runtime.md +0 -154
  309. package/docs/install/docker.md +0 -564
  310. package/docs/install/exe-dev.md +0 -201
  311. package/docs/install/fly.md +0 -524
  312. package/docs/install/gcp.md +0 -418
  313. package/docs/install/hetzner.md +0 -285
  314. package/docs/install/hostinger.md +0 -98
  315. package/docs/install/index.md +0 -232
  316. package/docs/install/installer.md +0 -447
  317. package/docs/install/kubernetes.md +0 -196
  318. package/docs/install/macos-vm.md +0 -281
  319. package/docs/install/migrating-claude.md +0 -165
  320. package/docs/install/migrating-hermes.md +0 -178
  321. package/docs/install/migrating.md +0 -137
  322. package/docs/install/nix.md +0 -112
  323. package/docs/install/node.md +0 -142
  324. package/docs/install/northflank.mdx +0 -44
  325. package/docs/install/oracle.md +0 -218
  326. package/docs/install/podman.md +0 -216
  327. package/docs/install/railway.mdx +0 -92
  328. package/docs/install/raspberry-pi.md +0 -234
  329. package/docs/install/render.mdx +0 -167
  330. package/docs/install/uninstall.md +0 -131
  331. package/docs/install/updating.md +0 -284
  332. package/docs/install/upstash.md +0 -96
  333. package/docs/logging.md +0 -320
  334. package/docs/nav-tabs-underline.js +0 -100
  335. package/docs/network.md +0 -72
  336. package/docs/nodes/audio.md +0 -216
  337. package/docs/nodes/camera.md +0 -166
  338. package/docs/nodes/images.md +0 -77
  339. package/docs/nodes/index.md +0 -439
  340. package/docs/nodes/location-command.md +0 -102
  341. package/docs/nodes/media-understanding.md +0 -495
  342. package/docs/nodes/talk.md +0 -160
  343. package/docs/nodes/troubleshooting.md +0 -123
  344. package/docs/nodes/voicewake.md +0 -93
  345. package/docs/perplexity.md +0 -11
  346. package/docs/plan/codex-context-engine-harness.md +0 -624
  347. package/docs/plan/ui-channels.md +0 -284
  348. package/docs/platforms/digitalocean.md +0 -12
  349. package/docs/platforms/easyrunner.md +0 -109
  350. package/docs/platforms/index.md +0 -51
  351. package/docs/platforms/linux.md +0 -141
  352. package/docs/platforms/mac/bundled-gateway.md +0 -79
  353. package/docs/platforms/mac/canvas.md +0 -128
  354. package/docs/platforms/mac/child-process.md +0 -72
  355. package/docs/platforms/mac/dev-setup.md +0 -112
  356. package/docs/platforms/mac/health.md +0 -39
  357. package/docs/platforms/mac/icon.md +0 -36
  358. package/docs/platforms/mac/logging.md +0 -62
  359. package/docs/platforms/mac/menu-bar.md +0 -93
  360. package/docs/platforms/mac/peekaboo.md +0 -96
  361. package/docs/platforms/mac/permissions.md +0 -73
  362. package/docs/platforms/mac/remote.md +0 -123
  363. package/docs/platforms/mac/signing.md +0 -52
  364. package/docs/platforms/mac/skills.md +0 -43
  365. package/docs/platforms/mac/voice-overlay.md +0 -66
  366. package/docs/platforms/mac/voicewake.md +0 -73
  367. package/docs/platforms/mac/webchat.md +0 -54
  368. package/docs/platforms/mac/xpc.md +0 -66
  369. package/docs/platforms/oracle.md +0 -12
  370. package/docs/platforms/raspberry-pi.md +0 -13
  371. package/docs/platforms/windows.md +0 -286
  372. package/docs/plugins/adding-capabilities.md +0 -146
  373. package/docs/plugins/admin-http-rpc.md +0 -216
  374. package/docs/plugins/agent-tools.md +0 -13
  375. package/docs/plugins/architecture-internals.md +0 -1196
  376. package/docs/plugins/architecture.md +0 -483
  377. package/docs/plugins/building-extensions.md +0 -13
  378. package/docs/plugins/building-plugins.md +0 -335
  379. package/docs/plugins/bundles.md +0 -310
  380. package/docs/plugins/cli-backend-plugins.md +0 -310
  381. package/docs/plugins/codex-computer-use.md +0 -297
  382. package/docs/plugins/codex-harness-reference.md +0 -470
  383. package/docs/plugins/codex-harness-runtime.md +0 -268
  384. package/docs/plugins/codex-harness.md +0 -780
  385. package/docs/plugins/codex-native-plugins.md +0 -276
  386. package/docs/plugins/community.md +0 -77
  387. package/docs/plugins/compatibility.md +0 -167
  388. package/docs/plugins/copilot.md +0 -356
  389. package/docs/plugins/dependency-resolution.md +0 -176
  390. package/docs/plugins/google-meet.md +0 -1737
  391. package/docs/plugins/hooks.md +0 -484
  392. package/docs/plugins/install-overrides.md +0 -80
  393. package/docs/plugins/manage-plugins.md +0 -210
  394. package/docs/plugins/manifest.md +0 -1457
  395. package/docs/plugins/memory-lancedb.md +0 -385
  396. package/docs/plugins/memory-wiki.md +0 -529
  397. package/docs/plugins/message-presentation.md +0 -473
  398. package/docs/plugins/oc-path.md +0 -166
  399. package/docs/plugins/plugin-inventory.md +0 -189
  400. package/docs/plugins/plugin-permission-requests.md +0 -193
  401. package/docs/plugins/reference/acpx.md +0 -23
  402. package/docs/plugins/reference/admin-http-rpc.md +0 -23
  403. package/docs/plugins/reference/alibaba.md +0 -23
  404. package/docs/plugins/reference/amazon-bedrock-mantle.md +0 -23
  405. package/docs/plugins/reference/amazon-bedrock.md +0 -23
  406. package/docs/plugins/reference/anthropic-vertex.md +0 -19
  407. package/docs/plugins/reference/anthropic.md +0 -23
  408. package/docs/plugins/reference/arcee.md +0 -23
  409. package/docs/plugins/reference/azure-speech.md +0 -23
  410. package/docs/plugins/reference/bonjour.md +0 -19
  411. package/docs/plugins/reference/brave.md +0 -23
  412. package/docs/plugins/reference/browser.md +0 -23
  413. package/docs/plugins/reference/byteplus.md +0 -19
  414. package/docs/plugins/reference/canvas.md +0 -19
  415. package/docs/plugins/reference/cerebras.md +0 -23
  416. package/docs/plugins/reference/chutes.md +0 -23
  417. package/docs/plugins/reference/clickclack.md +0 -23
  418. package/docs/plugins/reference/cloudflare-ai-gateway.md +0 -23
  419. package/docs/plugins/reference/codex-supervisor.md +0 -27
  420. package/docs/plugins/reference/codex.md +0 -23
  421. package/docs/plugins/reference/comfy.md +0 -23
  422. package/docs/plugins/reference/copilot-proxy.md +0 -19
  423. package/docs/plugins/reference/copilot.md +0 -23
  424. package/docs/plugins/reference/deepgram.md +0 -23
  425. package/docs/plugins/reference/deepinfra.md +0 -23
  426. package/docs/plugins/reference/deepseek.md +0 -23
  427. package/docs/plugins/reference/diagnostics-otel.md +0 -19
  428. package/docs/plugins/reference/diagnostics-prometheus.md +0 -19
  429. package/docs/plugins/reference/diffs-language-pack.md +0 -19
  430. package/docs/plugins/reference/diffs.md +0 -19
  431. package/docs/plugins/reference/discord.md +0 -23
  432. package/docs/plugins/reference/document-extract.md +0 -23
  433. package/docs/plugins/reference/duckduckgo.md +0 -23
  434. package/docs/plugins/reference/elevenlabs.md +0 -23
  435. package/docs/plugins/reference/exa.md +0 -23
  436. package/docs/plugins/reference/fal.md +0 -23
  437. package/docs/plugins/reference/feishu.md +0 -23
  438. package/docs/plugins/reference/file-transfer.md +0 -19
  439. package/docs/plugins/reference/firecrawl.md +0 -23
  440. package/docs/plugins/reference/fireworks.md +0 -23
  441. package/docs/plugins/reference/github-copilot.md +0 -23
  442. package/docs/plugins/reference/gmi.md +0 -23
  443. package/docs/plugins/reference/google-meet.md +0 -23
  444. package/docs/plugins/reference/google.md +0 -23
  445. package/docs/plugins/reference/googlechat.md +0 -23
  446. package/docs/plugins/reference/gradium.md +0 -23
  447. package/docs/plugins/reference/groq.md +0 -23
  448. package/docs/plugins/reference/huggingface.md +0 -23
  449. package/docs/plugins/reference/imessage.md +0 -23
  450. package/docs/plugins/reference/inworld.md +0 -23
  451. package/docs/plugins/reference/irc.md +0 -23
  452. package/docs/plugins/reference/kilocode.md +0 -23
  453. package/docs/plugins/reference/kimi.md +0 -23
  454. package/docs/plugins/reference/line.md +0 -23
  455. package/docs/plugins/reference/litellm.md +0 -23
  456. package/docs/plugins/reference/llm-task.md +0 -19
  457. package/docs/plugins/reference/lmstudio.md +0 -23
  458. package/docs/plugins/reference/lobster.md +0 -19
  459. package/docs/plugins/reference/matrix.md +0 -23
  460. package/docs/plugins/reference/mattermost.md +0 -23
  461. package/docs/plugins/reference/memory-core.md +0 -19
  462. package/docs/plugins/reference/memory-lancedb.md +0 -23
  463. package/docs/plugins/reference/memory-wiki.md +0 -23
  464. package/docs/plugins/reference/microsoft-foundry.md +0 -19
  465. package/docs/plugins/reference/microsoft.md +0 -19
  466. package/docs/plugins/reference/migrate-claude.md +0 -19
  467. package/docs/plugins/reference/migrate-hermes.md +0 -19
  468. package/docs/plugins/reference/minimax.md +0 -23
  469. package/docs/plugins/reference/mistral.md +0 -23
  470. package/docs/plugins/reference/moonshot.md +0 -23
  471. package/docs/plugins/reference/msteams.md +0 -23
  472. package/docs/plugins/reference/nextcloud-talk.md +0 -23
  473. package/docs/plugins/reference/nostr.md +0 -23
  474. package/docs/plugins/reference/novita.md +0 -23
  475. package/docs/plugins/reference/nvidia.md +0 -23
  476. package/docs/plugins/reference/oc-path.md +0 -23
  477. package/docs/plugins/reference/ollama.md +0 -23
  478. package/docs/plugins/reference/open-prose.md +0 -19
  479. package/docs/plugins/reference/openai.md +0 -23
  480. package/docs/plugins/reference/opencode-go.md +0 -23
  481. package/docs/plugins/reference/opencode.md +0 -23
  482. package/docs/plugins/reference/openrouter.md +0 -23
  483. package/docs/plugins/reference/openshell.md +0 -19
  484. package/docs/plugins/reference/perplexity.md +0 -23
  485. package/docs/plugins/reference/pixverse.md +0 -23
  486. package/docs/plugins/reference/policy.md +0 -72
  487. package/docs/plugins/reference/qa-channel.md +0 -23
  488. package/docs/plugins/reference/qa-lab.md +0 -19
  489. package/docs/plugins/reference/qa-matrix.md +0 -19
  490. package/docs/plugins/reference/qianfan.md +0 -23
  491. package/docs/plugins/reference/qqbot.md +0 -23
  492. package/docs/plugins/reference/qwen.md +0 -23
  493. package/docs/plugins/reference/runway.md +0 -23
  494. package/docs/plugins/reference/searxng.md +0 -19
  495. package/docs/plugins/reference/senseaudio.md +0 -23
  496. package/docs/plugins/reference/sglang.md +0 -23
  497. package/docs/plugins/reference/signal.md +0 -23
  498. package/docs/plugins/reference/skill-workshop.md +0 -23
  499. package/docs/plugins/reference/slack.md +0 -23
  500. package/docs/plugins/reference/stepfun.md +0 -23
  501. package/docs/plugins/reference/synology-chat.md +0 -23
  502. package/docs/plugins/reference/synthetic.md +0 -23
  503. package/docs/plugins/reference/tavily.md +0 -23
  504. package/docs/plugins/reference/telegram.md +0 -23
  505. package/docs/plugins/reference/tencent.md +0 -23
  506. package/docs/plugins/reference/tlon.md +0 -23
  507. package/docs/plugins/reference/together.md +0 -23
  508. package/docs/plugins/reference/tokenjuice.md +0 -23
  509. package/docs/plugins/reference/tts-local-cli.md +0 -19
  510. package/docs/plugins/reference/twitch.md +0 -23
  511. package/docs/plugins/reference/venice.md +0 -23
  512. package/docs/plugins/reference/vercel-ai-gateway.md +0 -23
  513. package/docs/plugins/reference/vllm.md +0 -23
  514. package/docs/plugins/reference/voice-call.md +0 -23
  515. package/docs/plugins/reference/volcengine.md +0 -23
  516. package/docs/plugins/reference/voyage.md +0 -19
  517. package/docs/plugins/reference/vydra.md +0 -23
  518. package/docs/plugins/reference/web-readability.md +0 -19
  519. package/docs/plugins/reference/webhooks.md +0 -23
  520. package/docs/plugins/reference/whatsapp.md +0 -23
  521. package/docs/plugins/reference/workboard.md +0 -23
  522. package/docs/plugins/reference/xai.md +0 -23
  523. package/docs/plugins/reference/xiaomi.md +0 -23
  524. package/docs/plugins/reference/zai.md +0 -23
  525. package/docs/plugins/reference/zalo.md +0 -23
  526. package/docs/plugins/reference/zalouser.md +0 -24
  527. package/docs/plugins/reference.md +0 -145
  528. package/docs/plugins/sdk-agent-harness.md +0 -338
  529. package/docs/plugins/sdk-channel-inbound.md +0 -70
  530. package/docs/plugins/sdk-channel-ingress.md +0 -137
  531. package/docs/plugins/sdk-channel-message.md +0 -18
  532. package/docs/plugins/sdk-channel-outbound.md +0 -113
  533. package/docs/plugins/sdk-channel-plugins.md +0 -765
  534. package/docs/plugins/sdk-channel-turn.md +0 -9
  535. package/docs/plugins/sdk-entrypoints.md +0 -344
  536. package/docs/plugins/sdk-migration.md +0 -979
  537. package/docs/plugins/sdk-overview.md +0 -511
  538. package/docs/plugins/sdk-provider-plugins.md +0 -846
  539. package/docs/plugins/sdk-runtime.md +0 -676
  540. package/docs/plugins/sdk-setup.md +0 -550
  541. package/docs/plugins/sdk-subpaths.md +0 -391
  542. package/docs/plugins/sdk-testing.md +0 -403
  543. package/docs/plugins/skill-workshop.md +0 -713
  544. package/docs/plugins/tool-plugins.md +0 -411
  545. package/docs/plugins/voice-call.md +0 -942
  546. package/docs/plugins/webhooks.md +0 -192
  547. package/docs/plugins/workboard.md +0 -252
  548. package/docs/plugins/zalouser.md +0 -86
  549. package/docs/prose.md +0 -137
  550. package/docs/providers/alibaba.md +0 -158
  551. package/docs/providers/anthropic.md +0 -381
  552. package/docs/providers/arcee.md +0 -144
  553. package/docs/providers/azure-speech.md +0 -119
  554. package/docs/providers/bedrock-mantle.md +0 -211
  555. package/docs/providers/bedrock.md +0 -414
  556. package/docs/providers/cerebras.md +0 -130
  557. package/docs/providers/chutes.md +0 -153
  558. package/docs/providers/claude-max-api-proxy.md +0 -191
  559. package/docs/providers/cloudflare-ai-gateway.md +0 -119
  560. package/docs/providers/comfy.md +0 -362
  561. package/docs/providers/deepgram.md +0 -184
  562. package/docs/providers/deepinfra.md +0 -92
  563. package/docs/providers/deepseek.md +0 -146
  564. package/docs/providers/ds4.md +0 -309
  565. package/docs/providers/elevenlabs.md +0 -130
  566. package/docs/providers/fal.md +0 -240
  567. package/docs/providers/fireworks.md +0 -144
  568. package/docs/providers/github-copilot.md +0 -257
  569. package/docs/providers/gmi.md +0 -92
  570. package/docs/providers/google.md +0 -472
  571. package/docs/providers/gradium.md +0 -123
  572. package/docs/providers/groq.md +0 -171
  573. package/docs/providers/huggingface.md +0 -235
  574. package/docs/providers/index.md +0 -105
  575. package/docs/providers/inferrs.md +0 -272
  576. package/docs/providers/inworld.md +0 -120
  577. package/docs/providers/kilocode.md +0 -135
  578. package/docs/providers/litellm.md +0 -234
  579. package/docs/providers/lmstudio.md +0 -224
  580. package/docs/providers/minimax.md +0 -505
  581. package/docs/providers/mistral.md +0 -235
  582. package/docs/providers/models.md +0 -64
  583. package/docs/providers/moonshot.md +0 -413
  584. package/docs/providers/novita.md +0 -92
  585. package/docs/providers/nvidia.md +0 -158
  586. package/docs/providers/ollama-cloud.md +0 -115
  587. package/docs/providers/ollama.md +0 -1225
  588. package/docs/providers/openai.md +0 -1093
  589. package/docs/providers/opencode-go.md +0 -123
  590. package/docs/providers/opencode.md +0 -149
  591. package/docs/providers/openrouter.md +0 -349
  592. package/docs/providers/perplexity-provider.md +0 -123
  593. package/docs/providers/pixverse.md +0 -165
  594. package/docs/providers/qianfan.md +0 -132
  595. package/docs/providers/qwen-oauth.md +0 -115
  596. package/docs/providers/qwen.md +0 -364
  597. package/docs/providers/runway.md +0 -103
  598. package/docs/providers/senseaudio.md +0 -68
  599. package/docs/providers/sglang.md +0 -161
  600. package/docs/providers/stepfun.md +0 -229
  601. package/docs/providers/synthetic.md +0 -154
  602. package/docs/providers/tencent.md +0 -130
  603. package/docs/providers/together.md +0 -140
  604. package/docs/providers/venice.md +0 -312
  605. package/docs/providers/vercel-ai-gateway.md +0 -128
  606. package/docs/providers/vllm.md +0 -407
  607. package/docs/providers/volcengine.md +0 -199
  608. package/docs/providers/vydra.md +0 -180
  609. package/docs/providers/xai.md +0 -571
  610. package/docs/providers/xiaomi.md +0 -262
  611. package/docs/providers/zai.md +0 -224
  612. package/docs/refactor/access.md +0 -9
  613. package/docs/refactor/acp.md +0 -298
  614. package/docs/refactor/canvas.md +0 -131
  615. package/docs/refactor/database-first.md +0 -2256
  616. package/docs/refactor/ingress-core.md +0 -341
  617. package/docs/reference/AGENTS.default.md +0 -131
  618. package/docs/reference/RELEASING.md +0 -799
  619. package/docs/reference/api-usage-costs.md +0 -208
  620. package/docs/reference/application-modernization-plan.md +0 -208
  621. package/docs/reference/code-mode.md +0 -773
  622. package/docs/reference/credits.md +0 -33
  623. package/docs/reference/device-models.md +0 -50
  624. package/docs/reference/fengming-sdk-api-design.md +0 -390
  625. package/docs/reference/full-release-validation.md +0 -202
  626. package/docs/reference/memory-config.md +0 -604
  627. package/docs/reference/prompt-caching.md +0 -358
  628. package/docs/reference/release-performance-sweep.md +0 -360
  629. package/docs/reference/rich-output-protocol.md +0 -101
  630. package/docs/reference/rpc.md +0 -43
  631. package/docs/reference/secret-placeholder-conventions.md +0 -33
  632. package/docs/reference/secretref-credential-surface.md +0 -159
  633. package/docs/reference/secretref-user-supplied-credentials-matrix.json +0 -663
  634. package/docs/reference/session-management-compaction.md +0 -474
  635. package/docs/reference/templates/AGENTS.dev.md +0 -90
  636. package/docs/reference/templates/AGENTS.md +0 -227
  637. package/docs/reference/templates/BOOT.md +0 -16
  638. package/docs/reference/templates/BOOTSTRAP.md +0 -66
  639. package/docs/reference/templates/CLAUDE.md +0 -1
  640. package/docs/reference/templates/HEARTBEAT.md +0 -24
  641. package/docs/reference/templates/IDENTITY.dev.md +0 -52
  642. package/docs/reference/templates/IDENTITY.md +0 -34
  643. package/docs/reference/templates/SOUL.dev.md +0 -82
  644. package/docs/reference/templates/SOUL.md +0 -49
  645. package/docs/reference/templates/TOOLS.dev.md +0 -29
  646. package/docs/reference/templates/TOOLS.md +0 -51
  647. package/docs/reference/templates/USER.dev.md +0 -23
  648. package/docs/reference/templates/USER.md +0 -28
  649. package/docs/reference/test.md +0 -247
  650. package/docs/reference/token-use.md +0 -246
  651. package/docs/reference/transcript-hygiene.md +0 -214
  652. package/docs/reference/wizard.md +0 -252
  653. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +0 -101
  654. package/docs/security/THREAT-MODEL-ATLAS.md +0 -611
  655. package/docs/security/formal-verification.md +0 -170
  656. package/docs/security/incident-response.md +0 -59
  657. package/docs/security/network-proxy.md +0 -268
  658. package/docs/snippets/plugin-publish/minimal-fengming.plugin.json +0 -12
  659. package/docs/snippets/plugin-publish/minimal-package.json +0 -16
  660. package/docs/specs/claw-supervisor.md +0 -247
  661. package/docs/start/bootstrapping.md +0 -49
  662. package/docs/start/docs-directory.md +0 -69
  663. package/docs/start/fengming.md +0 -252
  664. package/docs/start/getting-started.md +0 -152
  665. package/docs/start/hubs.md +0 -201
  666. package/docs/start/lore.md +0 -223
  667. package/docs/start/onboarding-overview.md +0 -72
  668. package/docs/start/onboarding.md +0 -98
  669. package/docs/start/quickstart.md +0 -25
  670. package/docs/start/setup.md +0 -178
  671. package/docs/start/showcase.md +0 -363
  672. package/docs/start/wizard-cli-automation.md +0 -232
  673. package/docs/start/wizard-cli-reference.md +0 -331
  674. package/docs/start/wizard.md +0 -141
  675. package/docs/style.css +0 -137
  676. package/docs/superpowers/specs/2026-04-22-tweakcn-custom-theme-import-design.md +0 -316
  677. package/docs/tools/acp-agents-setup.md +0 -351
  678. package/docs/tools/acp-agents.md +0 -854
  679. package/docs/tools/agent-send.md +0 -130
  680. package/docs/tools/apply-patch.md +0 -64
  681. package/docs/tools/brave-search.md +0 -139
  682. package/docs/tools/browser-control.md +0 -391
  683. package/docs/tools/browser-linux-troubleshooting.md +0 -173
  684. package/docs/tools/browser-login.md +0 -77
  685. package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +0 -219
  686. package/docs/tools/browser.md +0 -810
  687. package/docs/tools/btw.md +0 -159
  688. package/docs/tools/capability-cookbook.md +0 -12
  689. package/docs/tools/clawhub.md +0 -5
  690. package/docs/tools/code-execution.md +0 -173
  691. package/docs/tools/creating-skills.md +0 -158
  692. package/docs/tools/diffs.md +0 -525
  693. package/docs/tools/duckduckgo-search.md +0 -109
  694. package/docs/tools/elevated.md +0 -128
  695. package/docs/tools/exa-search.md +0 -152
  696. package/docs/tools/exec-approvals-advanced.md +0 -444
  697. package/docs/tools/exec-approvals.md +0 -494
  698. package/docs/tools/exec.md +0 -285
  699. package/docs/tools/firecrawl.md +0 -155
  700. package/docs/tools/gemini-search.md +0 -114
  701. package/docs/tools/goal.md +0 -217
  702. package/docs/tools/grok-search.md +0 -129
  703. package/docs/tools/image-generation.md +0 -493
  704. package/docs/tools/index.md +0 -178
  705. package/docs/tools/kimi-search.md +0 -105
  706. package/docs/tools/llm-task.md +0 -137
  707. package/docs/tools/lobster.md +0 -365
  708. package/docs/tools/loop-detection.md +0 -154
  709. package/docs/tools/media-overview.md +0 -160
  710. package/docs/tools/minimax-search.md +0 -102
  711. package/docs/tools/multi-agent-sandbox-tools.md +0 -409
  712. package/docs/tools/music-generation.md +0 -372
  713. package/docs/tools/ollama-search.md +0 -153
  714. package/docs/tools/pdf.md +0 -213
  715. package/docs/tools/perplexity-search.md +0 -220
  716. package/docs/tools/plugin.md +0 -363
  717. package/docs/tools/reactions.md +0 -100
  718. package/docs/tools/searxng-search.md +0 -141
  719. package/docs/tools/skills-config.md +0 -195
  720. package/docs/tools/skills.md +0 -569
  721. package/docs/tools/slash-commands.md +0 -487
  722. package/docs/tools/steer.md +0 -77
  723. package/docs/tools/subagents.md +0 -651
  724. package/docs/tools/tavily.md +0 -162
  725. package/docs/tools/thinking.md +0 -142
  726. package/docs/tools/tokenjuice.md +0 -84
  727. package/docs/tools/tool-search.md +0 -269
  728. package/docs/tools/trajectory.md +0 -229
  729. package/docs/tools/tts.md +0 -1009
  730. package/docs/tools/video-generation.md +0 -555
  731. package/docs/tools/web-fetch.md +0 -210
  732. package/docs/tools/web.md +0 -461
  733. package/docs/tts.md +0 -11
  734. package/docs/vps.md +0 -139
  735. package/docs/web/control-ui.md +0 -512
  736. package/docs/web/dashboard.md +0 -107
  737. package/docs/web/index.md +0 -133
  738. package/docs/web/tui.md +0 -250
  739. package/docs/web/webchat.md +0 -102
  740. package/npm-shrinkwrap.json +0 -12861
  741. package/patches/.gitkeep +0 -0
  742. package/patches/@agentclientprotocol__claude-agent-acp@0.37.0.patch +0 -41
  743. package/pnpm-workspace.yaml +0 -120
  744. package/scripts/crabbox-wrapper.mjs +0 -2004
  745. package/scripts/lib/official-external-channel-catalog.json +0 -560
  746. package/scripts/lib/official-external-plugin-catalog.json +0 -264
  747. package/scripts/lib/official-external-provider-catalog.json +0 -158
  748. package/scripts/lib/package-dist-imports.mjs +0 -171
  749. package/scripts/npm-runner.mjs +0 -91
  750. package/scripts/postinstall-bundled-plugins.mjs +0 -978
  751. package/scripts/preinstall-package-manager-warning.mjs +0 -64
  752. package/scripts/prepare-git-hooks.mjs +0 -72
  753. package/scripts/windows-cmd-helpers.mjs +0 -22
  754. package/skills/batch/SKILL.md +0 -118
  755. package/skills/code-review/SKILL.md +0 -107
  756. package/skills/debug/SKILL.md +0 -83
  757. package/skills/loop/SKILL.md +0 -118
  758. package/skills/run/SKILL.md +0 -79
  759. package/skills/run-skill-generator/SKILL.md +0 -179
  760. package/skills/verify/SKILL.md +0 -103
  761. package/src/agents/templates/HEARTBEAT.md +0 -3
@@ -1,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)