fengming 0.3.9 → 0.3.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (763) hide show
  1. package/dist/build-info.json +2 -2
  2. package/dist/{bundled-channel-config-schema-DpdKMATU.d.ts → bundled-channel-config-schema-Bte--ZlY.d.ts} +26 -26
  3. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  4. package/dist/cli-startup-metadata.json +8 -8
  5. package/dist/control-ui/assets/{activity-B2W-IeAT.js → activity-wgT0-JR0.js} +2 -2
  6. package/dist/control-ui/assets/{agents-mRUyNVCz.js → agents-DG5PobrT.js} +2 -2
  7. package/dist/control-ui/assets/{channels-8QHOqBnt.js → channels-CX28oM42.js} +2 -2
  8. package/dist/control-ui/assets/{cron-H3unP_mO.js → cron-B8ixwBqU.js} +2 -2
  9. package/dist/control-ui/assets/{debug-CxLsQ9vH.js → debug-CnkYZUXy.js} +2 -2
  10. package/dist/control-ui/assets/{index-jtIYT0Eh.js → index-DQRZJKbO.js} +4 -4
  11. package/dist/control-ui/assets/{instances-B1JQeCRb.js → instances-BE3mV1JC.js} +2 -2
  12. package/dist/control-ui/assets/{nodes-RGOmq_1l.js → nodes-Cou4PWRX.js} +2 -2
  13. package/dist/control-ui/assets/{sessions-C2O-Jgpg.js → sessions-DpAaBT21.js} +2 -2
  14. package/dist/control-ui/assets/{skills-jyJOYA4I.js → skills-DjA_j_20.js} +2 -2
  15. package/dist/control-ui/assets/{workboard-uM_kK8cQ.js → workboard-BFnvbS0k.js} +2 -2
  16. package/dist/control-ui/index.html +1 -1
  17. package/dist/control-ui/sw.js +1 -1
  18. package/dist/gateway/protocol/index.d.ts +1 -1
  19. package/dist/{index-DhOQs6M_.d.ts → index-DuDY3bCZ.d.ts} +45 -45
  20. package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
  21. package/dist/plugin-sdk/agent-config-primitives.d.ts +1 -1
  22. package/dist/plugin-sdk/{bundled-channel-config-schema-Dfn3b8sF.d.ts → bundled-channel-config-schema-BPFNnbwu.d.ts} +23 -23
  23. package/dist/plugin-sdk/bundled-channel-config-schema.d.ts +3 -3
  24. package/dist/plugin-sdk/channel-config-primitives.d.ts +2 -2
  25. package/dist/plugin-sdk/channel-config-schema-legacy.d.ts +3 -3
  26. package/dist/plugin-sdk/channel-config-schema.d.ts +2 -2
  27. package/dist/plugin-sdk/channel-core.d.ts +1 -1
  28. package/dist/plugin-sdk/channel-plugin-common.d.ts +1 -1
  29. package/dist/plugin-sdk/compat.d.ts +2 -2
  30. package/dist/plugin-sdk/{config-schema-DUddICQM.d.ts → config-schema-D7cABQ6o.d.ts} +1 -1
  31. package/dist/plugin-sdk/config-schema.d.ts +4 -4
  32. package/dist/plugin-sdk/core.d.ts +1 -1
  33. package/dist/plugin-sdk/discord.d.ts +2 -2
  34. package/dist/plugin-sdk/tts-runtime.d.ts +1 -1
  35. package/dist/plugin-sdk/{zod-schema.core-B4_b2R5K.d.ts → zod-schema.core-CwBNqcXp.d.ts} +1 -1
  36. package/dist/{zod-schema.core-Cuz0lz6m.d.ts → zod-schema.core-BGLctDlK.d.ts} +1 -1
  37. package/package.json +7 -412
  38. package/CHANGELOG.md +0 -38
  39. package/THIRD_PARTY_NOTICES.md +0 -37
  40. package/docs/.i18n/README.md +0 -81
  41. package/docs/.i18n/ar-navigation.json +0 -18
  42. package/docs/.i18n/de-navigation.json +0 -18
  43. package/docs/.i18n/es-navigation.json +0 -18
  44. package/docs/.i18n/fr-navigation.json +0 -18
  45. package/docs/.i18n/glossary.ar.json +0 -78
  46. package/docs/.i18n/glossary.de.json +0 -78
  47. package/docs/.i18n/glossary.es.json +0 -78
  48. package/docs/.i18n/glossary.fa.json +0 -78
  49. package/docs/.i18n/glossary.fr.json +0 -78
  50. package/docs/.i18n/glossary.id.json +0 -78
  51. package/docs/.i18n/glossary.it.json +0 -78
  52. package/docs/.i18n/glossary.ja-JP.json +0 -98
  53. package/docs/.i18n/glossary.ko.json +0 -78
  54. package/docs/.i18n/glossary.nl.json +0 -78
  55. package/docs/.i18n/glossary.pl.json +0 -78
  56. package/docs/.i18n/glossary.pt-BR.json +0 -78
  57. package/docs/.i18n/glossary.th.json +0 -78
  58. package/docs/.i18n/glossary.tr.json +0 -78
  59. package/docs/.i18n/glossary.uk.json +0 -78
  60. package/docs/.i18n/glossary.vi.json +0 -78
  61. package/docs/.i18n/glossary.zh-CN.json +0 -1122
  62. package/docs/.i18n/glossary.zh-TW.json +0 -78
  63. package/docs/.i18n/id-navigation.json +0 -18
  64. package/docs/.i18n/it-navigation.json +0 -18
  65. package/docs/.i18n/ja-navigation.json +0 -18
  66. package/docs/.i18n/ko-navigation.json +0 -18
  67. package/docs/.i18n/pl-navigation.json +0 -18
  68. package/docs/.i18n/pt-BR-navigation.json +0 -18
  69. package/docs/.i18n/tr-navigation.json +0 -18
  70. package/docs/.i18n/translation-workflow.md +0 -111
  71. package/docs/.i18n/zh-Hans-navigation.json +0 -552
  72. package/docs/AGENTS.md +0 -36
  73. package/docs/CLAUDE.md +0 -1
  74. package/docs/agent-runtime-architecture.md +0 -48
  75. package/docs/announcements/bluebubbles-imessage.md +0 -79
  76. package/docs/auth-credential-semantics.md +0 -124
  77. package/docs/automation/auth-monitoring.md +0 -11
  78. package/docs/automation/clawflow.md +0 -12
  79. package/docs/automation/cron-jobs.md +0 -534
  80. package/docs/automation/cron-vs-heartbeat.md +0 -11
  81. package/docs/automation/gmail-pubsub.md +0 -11
  82. package/docs/automation/hooks.md +0 -387
  83. package/docs/automation/index.md +0 -135
  84. package/docs/automation/poll.md +0 -12
  85. package/docs/automation/standing-orders.md +0 -250
  86. package/docs/automation/taskflow.md +0 -155
  87. package/docs/automation/tasks.md +0 -374
  88. package/docs/automation/troubleshooting.md +0 -12
  89. package/docs/automation/webhook.md +0 -12
  90. package/docs/brave-search.md +0 -11
  91. package/docs/channels/access-groups.md +0 -201
  92. package/docs/channels/ambient-room-events.md +0 -214
  93. package/docs/channels/bot-loop-protection.md +0 -131
  94. package/docs/channels/broadcast-groups.md +0 -472
  95. package/docs/channels/channel-routing.md +0 -162
  96. package/docs/channels/clickclack.md +0 -138
  97. package/docs/channels/discord.md +0 -1758
  98. package/docs/channels/feishu.md +0 -650
  99. package/docs/channels/googlechat.md +0 -284
  100. package/docs/channels/group-messages.md +0 -95
  101. package/docs/channels/groups.md +0 -524
  102. package/docs/channels/imessage-from-bluebubbles.md +0 -259
  103. package/docs/channels/imessage.md +0 -839
  104. package/docs/channels/index.md +0 -64
  105. package/docs/channels/irc.md +0 -253
  106. package/docs/channels/line.md +0 -243
  107. package/docs/channels/location.md +0 -71
  108. package/docs/channels/matrix-migration.md +0 -370
  109. package/docs/channels/matrix-presentation.md +0 -77
  110. package/docs/channels/matrix-push-rules.md +0 -150
  111. package/docs/channels/matrix.md +0 -921
  112. package/docs/channels/mattermost.md +0 -542
  113. package/docs/channels/msteams.md +0 -1096
  114. package/docs/channels/nextcloud-talk.md +0 -176
  115. package/docs/channels/nostr.md +0 -253
  116. package/docs/channels/pairing.md +0 -214
  117. package/docs/channels/qqbot.md +0 -314
  118. package/docs/channels/signal.md +0 -417
  119. package/docs/channels/slack.md +0 -1623
  120. package/docs/channels/synology-chat.md +0 -187
  121. package/docs/channels/telegram.md +0 -1124
  122. package/docs/channels/tlon.md +0 -296
  123. package/docs/channels/troubleshooting.md +0 -162
  124. package/docs/channels/twitch.md +0 -431
  125. package/docs/channels/wechat.md +0 -171
  126. package/docs/channels/whatsapp.md +0 -796
  127. package/docs/channels/yuanbao.md +0 -416
  128. package/docs/channels/zalo.md +0 -253
  129. package/docs/channels/zalouser.md +0 -217
  130. package/docs/ci.md +0 -657
  131. package/docs/clawhub/publishing.md +0 -96
  132. package/docs/cli/acp.md +0 -370
  133. package/docs/cli/agent.md +0 -109
  134. package/docs/cli/agents.md +0 -253
  135. package/docs/cli/approvals.md +0 -190
  136. package/docs/cli/backup.md +0 -98
  137. package/docs/cli/browser.md +0 -307
  138. package/docs/cli/channels.md +0 -154
  139. package/docs/cli/clawbot.md +0 -25
  140. package/docs/cli/commitments.md +0 -90
  141. package/docs/cli/completion.md +0 -39
  142. package/docs/cli/config.md +0 -504
  143. package/docs/cli/configure.md +0 -77
  144. package/docs/cli/crestodian.md +0 -337
  145. package/docs/cli/cron.md +0 -304
  146. package/docs/cli/daemon.md +0 -67
  147. package/docs/cli/dashboard.md +0 -33
  148. package/docs/cli/devices.md +0 -240
  149. package/docs/cli/directory.md +0 -68
  150. package/docs/cli/dns.md +0 -53
  151. package/docs/cli/docs.md +0 -63
  152. package/docs/cli/doctor.md +0 -241
  153. package/docs/cli/flows.md +0 -52
  154. package/docs/cli/gateway.md +0 -572
  155. package/docs/cli/health.md +0 -43
  156. package/docs/cli/hooks.md +0 -345
  157. package/docs/cli/index.md +0 -400
  158. package/docs/cli/infer.md +0 -364
  159. package/docs/cli/logs.md +0 -68
  160. package/docs/cli/mcp.md +0 -529
  161. package/docs/cli/memory.md +0 -183
  162. package/docs/cli/message.md +0 -317
  163. package/docs/cli/migrate.md +0 -334
  164. package/docs/cli/models.md +0 -239
  165. package/docs/cli/node.md +0 -177
  166. package/docs/cli/nodes.md +0 -76
  167. package/docs/cli/onboard.md +0 -250
  168. package/docs/cli/pairing.md +0 -77
  169. package/docs/cli/path.md +0 -511
  170. package/docs/cli/plugins.md +0 -459
  171. package/docs/cli/policy.md +0 -886
  172. package/docs/cli/proxy.md +0 -89
  173. package/docs/cli/qr.md +0 -56
  174. package/docs/cli/reset.md +0 -39
  175. package/docs/cli/sandbox.md +0 -208
  176. package/docs/cli/secrets.md +0 -202
  177. package/docs/cli/security.md +0 -136
  178. package/docs/cli/sessions.md +0 -164
  179. package/docs/cli/setup.md +0 -59
  180. package/docs/cli/skills.md +0 -122
  181. package/docs/cli/status.md +0 -45
  182. package/docs/cli/system.md +0 -89
  183. package/docs/cli/tasks.md +0 -111
  184. package/docs/cli/transcripts.md +0 -151
  185. package/docs/cli/tui.md +0 -91
  186. package/docs/cli/uninstall.md +0 -44
  187. package/docs/cli/update.md +0 -243
  188. package/docs/cli/voicecall.md +0 -204
  189. package/docs/cli/webhooks.md +0 -117
  190. package/docs/cli/wiki.md +0 -256
  191. package/docs/concepts/active-memory.md +0 -856
  192. package/docs/concepts/agent-loop.md +0 -185
  193. package/docs/concepts/agent-runtimes.md +0 -276
  194. package/docs/concepts/agent-workspace.md +0 -230
  195. package/docs/concepts/agent.md +0 -140
  196. package/docs/concepts/architecture.md +0 -154
  197. package/docs/concepts/channel-docking.md +0 -145
  198. package/docs/concepts/commitments.md +0 -150
  199. package/docs/concepts/compaction.md +0 -203
  200. package/docs/concepts/context-engine.md +0 -347
  201. package/docs/concepts/context.md +0 -199
  202. package/docs/concepts/delegate-architecture.md +0 -319
  203. package/docs/concepts/dreaming.md +0 -264
  204. package/docs/concepts/experimental-features.md +0 -109
  205. package/docs/concepts/features.md +0 -91
  206. package/docs/concepts/fengming-sdk.md +0 -323
  207. package/docs/concepts/mantis-slack-desktop-runbook.md +0 -231
  208. package/docs/concepts/mantis.md +0 -744
  209. package/docs/concepts/markdown-formatting.md +0 -139
  210. package/docs/concepts/memory-builtin.md +0 -148
  211. package/docs/concepts/memory-honcho.md +0 -144
  212. package/docs/concepts/memory-qmd.md +0 -271
  213. package/docs/concepts/memory-search.md +0 -167
  214. package/docs/concepts/memory.md +0 -299
  215. package/docs/concepts/message-lifecycle-refactor.md +0 -1126
  216. package/docs/concepts/messages.md +0 -214
  217. package/docs/concepts/model-failover.md +0 -384
  218. package/docs/concepts/model-providers.md +0 -719
  219. package/docs/concepts/models.md +0 -371
  220. package/docs/concepts/multi-agent.md +0 -625
  221. package/docs/concepts/oauth.md +0 -198
  222. package/docs/concepts/parallel-specialist-lanes.md +0 -127
  223. package/docs/concepts/personal-agent-benchmark-pack.md +0 -74
  224. package/docs/concepts/presence.md +0 -117
  225. package/docs/concepts/progress-drafts.md +0 -406
  226. package/docs/concepts/qa-e2e-automation.md +0 -947
  227. package/docs/concepts/qa-matrix.md +0 -139
  228. package/docs/concepts/queue-steering.md +0 -90
  229. package/docs/concepts/queue.md +0 -136
  230. package/docs/concepts/retry.md +0 -86
  231. package/docs/concepts/session-pruning.md +0 -104
  232. package/docs/concepts/session-tool.md +0 -188
  233. package/docs/concepts/session.md +0 -164
  234. package/docs/concepts/soul.md +0 -116
  235. package/docs/concepts/streaming.md +0 -257
  236. package/docs/concepts/system-prompt.md +0 -328
  237. package/docs/concepts/timezone.md +0 -47
  238. package/docs/concepts/typebox.md +0 -309
  239. package/docs/concepts/typing-indicators.md +0 -88
  240. package/docs/concepts/usage-tracking.md +0 -66
  241. package/docs/date-time.md +0 -126
  242. package/docs/debug/node-issue.md +0 -90
  243. package/docs/diagnostics/flags.md +0 -182
  244. package/docs/docs.json +0 -1862
  245. package/docs/fengming-agent-runtime.md +0 -82
  246. package/docs/gateway/authentication.md +0 -256
  247. package/docs/gateway/background-process.md +0 -147
  248. package/docs/gateway/bonjour.md +0 -303
  249. package/docs/gateway/bridge-protocol.md +0 -97
  250. package/docs/gateway/cli-backends.md +0 -439
  251. package/docs/gateway/config-agents.md +0 -1525
  252. package/docs/gateway/config-channels.md +0 -945
  253. package/docs/gateway/config-tools.md +0 -774
  254. package/docs/gateway/configuration-examples.md +0 -704
  255. package/docs/gateway/configuration-reference.md +0 -1391
  256. package/docs/gateway/configuration.md +0 -739
  257. package/docs/gateway/diagnostics.md +0 -213
  258. package/docs/gateway/discovery.md +0 -154
  259. package/docs/gateway/doctor.md +0 -575
  260. package/docs/gateway/gateway-lock.md +0 -37
  261. package/docs/gateway/health.md +0 -73
  262. package/docs/gateway/heartbeat.md +0 -498
  263. package/docs/gateway/index.md +0 -383
  264. package/docs/gateway/local-model-services.md +0 -205
  265. package/docs/gateway/local-models.md +0 -355
  266. package/docs/gateway/logging.md +0 -149
  267. package/docs/gateway/multiple-gateways.md +0 -178
  268. package/docs/gateway/network-model.md +0 -15
  269. package/docs/gateway/openai-http-api.md +0 -378
  270. package/docs/gateway/openresponses-http-api.md +0 -347
  271. package/docs/gateway/openshell.md +0 -316
  272. package/docs/gateway/opentelemetry.md +0 -433
  273. package/docs/gateway/operator-scopes.md +0 -119
  274. package/docs/gateway/pairing.md +0 -207
  275. package/docs/gateway/prometheus.md +0 -249
  276. package/docs/gateway/protocol.md +0 -826
  277. package/docs/gateway/remote-gateway-readme.md +0 -169
  278. package/docs/gateway/remote.md +0 -280
  279. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +0 -148
  280. package/docs/gateway/sandboxing.md +0 -546
  281. package/docs/gateway/secrets-plan-contract.md +0 -159
  282. package/docs/gateway/secrets.md +0 -805
  283. package/docs/gateway/security/audit-checks.md +0 -127
  284. package/docs/gateway/security/exposure-runbook.md +0 -212
  285. package/docs/gateway/security/index.md +0 -1343
  286. package/docs/gateway/security/secure-file-operations.md +0 -76
  287. package/docs/gateway/security/shrinkwrap.md +0 -111
  288. package/docs/gateway/tailscale.md +0 -156
  289. package/docs/gateway/tools-invoke-http-api.md +0 -169
  290. package/docs/gateway/troubleshooting.md +0 -877
  291. package/docs/gateway/trusted-proxy-auth.md +0 -483
  292. package/docs/help/debugging.md +0 -341
  293. package/docs/help/environment.md +0 -233
  294. package/docs/help/faq-first-run.md +0 -870
  295. package/docs/help/faq-models.md +0 -556
  296. package/docs/help/faq.md +0 -2041
  297. package/docs/help/index.md +0 -39
  298. package/docs/help/scripts.md +0 -56
  299. package/docs/help/testing-live.md +0 -587
  300. package/docs/help/testing-updates-plugins.md +0 -299
  301. package/docs/help/testing.md +0 -977
  302. package/docs/help/troubleshooting.md +0 -449
  303. package/docs/index.md +0 -196
  304. package/docs/install/ansible.md +0 -233
  305. package/docs/install/azure.md +0 -315
  306. package/docs/install/bun.md +0 -59
  307. package/docs/install/clawdock.md +0 -112
  308. package/docs/install/development-channels.md +0 -148
  309. package/docs/install/digitalocean.md +0 -174
  310. package/docs/install/docker-vm-runtime.md +0 -154
  311. package/docs/install/docker.md +0 -564
  312. package/docs/install/exe-dev.md +0 -201
  313. package/docs/install/fly.md +0 -524
  314. package/docs/install/gcp.md +0 -418
  315. package/docs/install/hetzner.md +0 -285
  316. package/docs/install/hostinger.md +0 -98
  317. package/docs/install/index.md +0 -232
  318. package/docs/install/installer.md +0 -447
  319. package/docs/install/kubernetes.md +0 -196
  320. package/docs/install/macos-vm.md +0 -281
  321. package/docs/install/migrating-claude.md +0 -165
  322. package/docs/install/migrating-hermes.md +0 -178
  323. package/docs/install/migrating.md +0 -137
  324. package/docs/install/nix.md +0 -112
  325. package/docs/install/node.md +0 -142
  326. package/docs/install/northflank.mdx +0 -44
  327. package/docs/install/oracle.md +0 -218
  328. package/docs/install/podman.md +0 -216
  329. package/docs/install/railway.mdx +0 -92
  330. package/docs/install/raspberry-pi.md +0 -234
  331. package/docs/install/render.mdx +0 -167
  332. package/docs/install/uninstall.md +0 -131
  333. package/docs/install/updating.md +0 -284
  334. package/docs/install/upstash.md +0 -96
  335. package/docs/logging.md +0 -320
  336. package/docs/nav-tabs-underline.js +0 -100
  337. package/docs/network.md +0 -72
  338. package/docs/nodes/audio.md +0 -216
  339. package/docs/nodes/camera.md +0 -166
  340. package/docs/nodes/images.md +0 -77
  341. package/docs/nodes/index.md +0 -439
  342. package/docs/nodes/location-command.md +0 -102
  343. package/docs/nodes/media-understanding.md +0 -495
  344. package/docs/nodes/talk.md +0 -160
  345. package/docs/nodes/troubleshooting.md +0 -123
  346. package/docs/nodes/voicewake.md +0 -93
  347. package/docs/perplexity.md +0 -11
  348. package/docs/plan/codex-context-engine-harness.md +0 -624
  349. package/docs/plan/ui-channels.md +0 -284
  350. package/docs/platforms/digitalocean.md +0 -12
  351. package/docs/platforms/easyrunner.md +0 -109
  352. package/docs/platforms/index.md +0 -51
  353. package/docs/platforms/linux.md +0 -141
  354. package/docs/platforms/mac/bundled-gateway.md +0 -79
  355. package/docs/platforms/mac/canvas.md +0 -128
  356. package/docs/platforms/mac/child-process.md +0 -72
  357. package/docs/platforms/mac/dev-setup.md +0 -112
  358. package/docs/platforms/mac/health.md +0 -39
  359. package/docs/platforms/mac/icon.md +0 -36
  360. package/docs/platforms/mac/logging.md +0 -62
  361. package/docs/platforms/mac/menu-bar.md +0 -93
  362. package/docs/platforms/mac/peekaboo.md +0 -96
  363. package/docs/platforms/mac/permissions.md +0 -73
  364. package/docs/platforms/mac/remote.md +0 -123
  365. package/docs/platforms/mac/signing.md +0 -52
  366. package/docs/platforms/mac/skills.md +0 -43
  367. package/docs/platforms/mac/voice-overlay.md +0 -66
  368. package/docs/platforms/mac/voicewake.md +0 -73
  369. package/docs/platforms/mac/webchat.md +0 -54
  370. package/docs/platforms/mac/xpc.md +0 -66
  371. package/docs/platforms/oracle.md +0 -12
  372. package/docs/platforms/raspberry-pi.md +0 -13
  373. package/docs/platforms/windows.md +0 -286
  374. package/docs/plugins/adding-capabilities.md +0 -146
  375. package/docs/plugins/admin-http-rpc.md +0 -216
  376. package/docs/plugins/agent-tools.md +0 -13
  377. package/docs/plugins/architecture-internals.md +0 -1196
  378. package/docs/plugins/architecture.md +0 -483
  379. package/docs/plugins/building-extensions.md +0 -13
  380. package/docs/plugins/building-plugins.md +0 -335
  381. package/docs/plugins/bundles.md +0 -310
  382. package/docs/plugins/cli-backend-plugins.md +0 -310
  383. package/docs/plugins/codex-computer-use.md +0 -297
  384. package/docs/plugins/codex-harness-reference.md +0 -470
  385. package/docs/plugins/codex-harness-runtime.md +0 -268
  386. package/docs/plugins/codex-harness.md +0 -780
  387. package/docs/plugins/codex-native-plugins.md +0 -276
  388. package/docs/plugins/community.md +0 -77
  389. package/docs/plugins/compatibility.md +0 -167
  390. package/docs/plugins/copilot.md +0 -356
  391. package/docs/plugins/dependency-resolution.md +0 -176
  392. package/docs/plugins/google-meet.md +0 -1737
  393. package/docs/plugins/hooks.md +0 -484
  394. package/docs/plugins/install-overrides.md +0 -80
  395. package/docs/plugins/manage-plugins.md +0 -210
  396. package/docs/plugins/manifest.md +0 -1457
  397. package/docs/plugins/memory-lancedb.md +0 -385
  398. package/docs/plugins/memory-wiki.md +0 -529
  399. package/docs/plugins/message-presentation.md +0 -473
  400. package/docs/plugins/oc-path.md +0 -166
  401. package/docs/plugins/plugin-inventory.md +0 -189
  402. package/docs/plugins/plugin-permission-requests.md +0 -193
  403. package/docs/plugins/reference/acpx.md +0 -23
  404. package/docs/plugins/reference/admin-http-rpc.md +0 -23
  405. package/docs/plugins/reference/alibaba.md +0 -23
  406. package/docs/plugins/reference/amazon-bedrock-mantle.md +0 -23
  407. package/docs/plugins/reference/amazon-bedrock.md +0 -23
  408. package/docs/plugins/reference/anthropic-vertex.md +0 -19
  409. package/docs/plugins/reference/anthropic.md +0 -23
  410. package/docs/plugins/reference/arcee.md +0 -23
  411. package/docs/plugins/reference/azure-speech.md +0 -23
  412. package/docs/plugins/reference/bonjour.md +0 -19
  413. package/docs/plugins/reference/brave.md +0 -23
  414. package/docs/plugins/reference/browser.md +0 -23
  415. package/docs/plugins/reference/byteplus.md +0 -19
  416. package/docs/plugins/reference/canvas.md +0 -19
  417. package/docs/plugins/reference/cerebras.md +0 -23
  418. package/docs/plugins/reference/chutes.md +0 -23
  419. package/docs/plugins/reference/clickclack.md +0 -23
  420. package/docs/plugins/reference/cloudflare-ai-gateway.md +0 -23
  421. package/docs/plugins/reference/codex-supervisor.md +0 -27
  422. package/docs/plugins/reference/codex.md +0 -23
  423. package/docs/plugins/reference/comfy.md +0 -23
  424. package/docs/plugins/reference/copilot-proxy.md +0 -19
  425. package/docs/plugins/reference/copilot.md +0 -23
  426. package/docs/plugins/reference/deepgram.md +0 -23
  427. package/docs/plugins/reference/deepinfra.md +0 -23
  428. package/docs/plugins/reference/deepseek.md +0 -23
  429. package/docs/plugins/reference/diagnostics-otel.md +0 -19
  430. package/docs/plugins/reference/diagnostics-prometheus.md +0 -19
  431. package/docs/plugins/reference/diffs-language-pack.md +0 -19
  432. package/docs/plugins/reference/diffs.md +0 -19
  433. package/docs/plugins/reference/discord.md +0 -23
  434. package/docs/plugins/reference/document-extract.md +0 -23
  435. package/docs/plugins/reference/duckduckgo.md +0 -23
  436. package/docs/plugins/reference/elevenlabs.md +0 -23
  437. package/docs/plugins/reference/exa.md +0 -23
  438. package/docs/plugins/reference/fal.md +0 -23
  439. package/docs/plugins/reference/feishu.md +0 -23
  440. package/docs/plugins/reference/file-transfer.md +0 -19
  441. package/docs/plugins/reference/firecrawl.md +0 -23
  442. package/docs/plugins/reference/fireworks.md +0 -23
  443. package/docs/plugins/reference/github-copilot.md +0 -23
  444. package/docs/plugins/reference/gmi.md +0 -23
  445. package/docs/plugins/reference/google-meet.md +0 -23
  446. package/docs/plugins/reference/google.md +0 -23
  447. package/docs/plugins/reference/googlechat.md +0 -23
  448. package/docs/plugins/reference/gradium.md +0 -23
  449. package/docs/plugins/reference/groq.md +0 -23
  450. package/docs/plugins/reference/huggingface.md +0 -23
  451. package/docs/plugins/reference/imessage.md +0 -23
  452. package/docs/plugins/reference/inworld.md +0 -23
  453. package/docs/plugins/reference/irc.md +0 -23
  454. package/docs/plugins/reference/kilocode.md +0 -23
  455. package/docs/plugins/reference/kimi.md +0 -23
  456. package/docs/plugins/reference/line.md +0 -23
  457. package/docs/plugins/reference/litellm.md +0 -23
  458. package/docs/plugins/reference/llm-task.md +0 -19
  459. package/docs/plugins/reference/lmstudio.md +0 -23
  460. package/docs/plugins/reference/lobster.md +0 -19
  461. package/docs/plugins/reference/matrix.md +0 -23
  462. package/docs/plugins/reference/mattermost.md +0 -23
  463. package/docs/plugins/reference/memory-core.md +0 -19
  464. package/docs/plugins/reference/memory-lancedb.md +0 -23
  465. package/docs/plugins/reference/memory-wiki.md +0 -23
  466. package/docs/plugins/reference/microsoft-foundry.md +0 -19
  467. package/docs/plugins/reference/microsoft.md +0 -19
  468. package/docs/plugins/reference/migrate-claude.md +0 -19
  469. package/docs/plugins/reference/migrate-hermes.md +0 -19
  470. package/docs/plugins/reference/minimax.md +0 -23
  471. package/docs/plugins/reference/mistral.md +0 -23
  472. package/docs/plugins/reference/moonshot.md +0 -23
  473. package/docs/plugins/reference/msteams.md +0 -23
  474. package/docs/plugins/reference/nextcloud-talk.md +0 -23
  475. package/docs/plugins/reference/nostr.md +0 -23
  476. package/docs/plugins/reference/novita.md +0 -23
  477. package/docs/plugins/reference/nvidia.md +0 -23
  478. package/docs/plugins/reference/oc-path.md +0 -23
  479. package/docs/plugins/reference/ollama.md +0 -23
  480. package/docs/plugins/reference/open-prose.md +0 -19
  481. package/docs/plugins/reference/openai.md +0 -23
  482. package/docs/plugins/reference/opencode-go.md +0 -23
  483. package/docs/plugins/reference/opencode.md +0 -23
  484. package/docs/plugins/reference/openrouter.md +0 -23
  485. package/docs/plugins/reference/openshell.md +0 -19
  486. package/docs/plugins/reference/perplexity.md +0 -23
  487. package/docs/plugins/reference/pixverse.md +0 -23
  488. package/docs/plugins/reference/policy.md +0 -72
  489. package/docs/plugins/reference/qa-channel.md +0 -23
  490. package/docs/plugins/reference/qa-lab.md +0 -19
  491. package/docs/plugins/reference/qa-matrix.md +0 -19
  492. package/docs/plugins/reference/qianfan.md +0 -23
  493. package/docs/plugins/reference/qqbot.md +0 -23
  494. package/docs/plugins/reference/qwen.md +0 -23
  495. package/docs/plugins/reference/runway.md +0 -23
  496. package/docs/plugins/reference/searxng.md +0 -19
  497. package/docs/plugins/reference/senseaudio.md +0 -23
  498. package/docs/plugins/reference/sglang.md +0 -23
  499. package/docs/plugins/reference/signal.md +0 -23
  500. package/docs/plugins/reference/skill-workshop.md +0 -23
  501. package/docs/plugins/reference/slack.md +0 -23
  502. package/docs/plugins/reference/stepfun.md +0 -23
  503. package/docs/plugins/reference/synology-chat.md +0 -23
  504. package/docs/plugins/reference/synthetic.md +0 -23
  505. package/docs/plugins/reference/tavily.md +0 -23
  506. package/docs/plugins/reference/telegram.md +0 -23
  507. package/docs/plugins/reference/tencent.md +0 -23
  508. package/docs/plugins/reference/tlon.md +0 -23
  509. package/docs/plugins/reference/together.md +0 -23
  510. package/docs/plugins/reference/tokenjuice.md +0 -23
  511. package/docs/plugins/reference/tts-local-cli.md +0 -19
  512. package/docs/plugins/reference/twitch.md +0 -23
  513. package/docs/plugins/reference/venice.md +0 -23
  514. package/docs/plugins/reference/vercel-ai-gateway.md +0 -23
  515. package/docs/plugins/reference/vllm.md +0 -23
  516. package/docs/plugins/reference/voice-call.md +0 -23
  517. package/docs/plugins/reference/volcengine.md +0 -23
  518. package/docs/plugins/reference/voyage.md +0 -19
  519. package/docs/plugins/reference/vydra.md +0 -23
  520. package/docs/plugins/reference/web-readability.md +0 -19
  521. package/docs/plugins/reference/webhooks.md +0 -23
  522. package/docs/plugins/reference/whatsapp.md +0 -23
  523. package/docs/plugins/reference/workboard.md +0 -23
  524. package/docs/plugins/reference/xai.md +0 -23
  525. package/docs/plugins/reference/xiaomi.md +0 -23
  526. package/docs/plugins/reference/zai.md +0 -23
  527. package/docs/plugins/reference/zalo.md +0 -23
  528. package/docs/plugins/reference/zalouser.md +0 -24
  529. package/docs/plugins/reference.md +0 -145
  530. package/docs/plugins/sdk-agent-harness.md +0 -338
  531. package/docs/plugins/sdk-channel-inbound.md +0 -70
  532. package/docs/plugins/sdk-channel-ingress.md +0 -137
  533. package/docs/plugins/sdk-channel-message.md +0 -18
  534. package/docs/plugins/sdk-channel-outbound.md +0 -113
  535. package/docs/plugins/sdk-channel-plugins.md +0 -765
  536. package/docs/plugins/sdk-channel-turn.md +0 -9
  537. package/docs/plugins/sdk-entrypoints.md +0 -344
  538. package/docs/plugins/sdk-migration.md +0 -979
  539. package/docs/plugins/sdk-overview.md +0 -511
  540. package/docs/plugins/sdk-provider-plugins.md +0 -846
  541. package/docs/plugins/sdk-runtime.md +0 -676
  542. package/docs/plugins/sdk-setup.md +0 -550
  543. package/docs/plugins/sdk-subpaths.md +0 -391
  544. package/docs/plugins/sdk-testing.md +0 -403
  545. package/docs/plugins/skill-workshop.md +0 -713
  546. package/docs/plugins/tool-plugins.md +0 -411
  547. package/docs/plugins/voice-call.md +0 -942
  548. package/docs/plugins/webhooks.md +0 -192
  549. package/docs/plugins/workboard.md +0 -252
  550. package/docs/plugins/zalouser.md +0 -86
  551. package/docs/prose.md +0 -137
  552. package/docs/providers/alibaba.md +0 -158
  553. package/docs/providers/anthropic.md +0 -381
  554. package/docs/providers/arcee.md +0 -144
  555. package/docs/providers/azure-speech.md +0 -119
  556. package/docs/providers/bedrock-mantle.md +0 -211
  557. package/docs/providers/bedrock.md +0 -414
  558. package/docs/providers/cerebras.md +0 -130
  559. package/docs/providers/chutes.md +0 -153
  560. package/docs/providers/claude-max-api-proxy.md +0 -191
  561. package/docs/providers/cloudflare-ai-gateway.md +0 -119
  562. package/docs/providers/comfy.md +0 -362
  563. package/docs/providers/deepgram.md +0 -184
  564. package/docs/providers/deepinfra.md +0 -92
  565. package/docs/providers/deepseek.md +0 -146
  566. package/docs/providers/ds4.md +0 -309
  567. package/docs/providers/elevenlabs.md +0 -130
  568. package/docs/providers/fal.md +0 -240
  569. package/docs/providers/fireworks.md +0 -144
  570. package/docs/providers/github-copilot.md +0 -257
  571. package/docs/providers/gmi.md +0 -92
  572. package/docs/providers/google.md +0 -472
  573. package/docs/providers/gradium.md +0 -123
  574. package/docs/providers/groq.md +0 -171
  575. package/docs/providers/huggingface.md +0 -235
  576. package/docs/providers/index.md +0 -105
  577. package/docs/providers/inferrs.md +0 -272
  578. package/docs/providers/inworld.md +0 -120
  579. package/docs/providers/kilocode.md +0 -135
  580. package/docs/providers/litellm.md +0 -234
  581. package/docs/providers/lmstudio.md +0 -224
  582. package/docs/providers/minimax.md +0 -505
  583. package/docs/providers/mistral.md +0 -235
  584. package/docs/providers/models.md +0 -64
  585. package/docs/providers/moonshot.md +0 -413
  586. package/docs/providers/novita.md +0 -92
  587. package/docs/providers/nvidia.md +0 -158
  588. package/docs/providers/ollama-cloud.md +0 -115
  589. package/docs/providers/ollama.md +0 -1225
  590. package/docs/providers/openai.md +0 -1093
  591. package/docs/providers/opencode-go.md +0 -123
  592. package/docs/providers/opencode.md +0 -149
  593. package/docs/providers/openrouter.md +0 -349
  594. package/docs/providers/perplexity-provider.md +0 -123
  595. package/docs/providers/pixverse.md +0 -165
  596. package/docs/providers/qianfan.md +0 -132
  597. package/docs/providers/qwen-oauth.md +0 -115
  598. package/docs/providers/qwen.md +0 -364
  599. package/docs/providers/runway.md +0 -103
  600. package/docs/providers/senseaudio.md +0 -68
  601. package/docs/providers/sglang.md +0 -161
  602. package/docs/providers/stepfun.md +0 -229
  603. package/docs/providers/synthetic.md +0 -154
  604. package/docs/providers/tencent.md +0 -130
  605. package/docs/providers/together.md +0 -140
  606. package/docs/providers/venice.md +0 -312
  607. package/docs/providers/vercel-ai-gateway.md +0 -128
  608. package/docs/providers/vllm.md +0 -407
  609. package/docs/providers/volcengine.md +0 -199
  610. package/docs/providers/vydra.md +0 -180
  611. package/docs/providers/xai.md +0 -571
  612. package/docs/providers/xiaomi.md +0 -262
  613. package/docs/providers/zai.md +0 -224
  614. package/docs/refactor/access.md +0 -9
  615. package/docs/refactor/acp.md +0 -298
  616. package/docs/refactor/canvas.md +0 -131
  617. package/docs/refactor/database-first.md +0 -2256
  618. package/docs/refactor/ingress-core.md +0 -341
  619. package/docs/reference/AGENTS.default.md +0 -131
  620. package/docs/reference/RELEASING.md +0 -799
  621. package/docs/reference/api-usage-costs.md +0 -208
  622. package/docs/reference/application-modernization-plan.md +0 -208
  623. package/docs/reference/code-mode.md +0 -773
  624. package/docs/reference/credits.md +0 -33
  625. package/docs/reference/device-models.md +0 -50
  626. package/docs/reference/fengming-sdk-api-design.md +0 -390
  627. package/docs/reference/full-release-validation.md +0 -202
  628. package/docs/reference/memory-config.md +0 -604
  629. package/docs/reference/prompt-caching.md +0 -358
  630. package/docs/reference/release-performance-sweep.md +0 -360
  631. package/docs/reference/rich-output-protocol.md +0 -101
  632. package/docs/reference/rpc.md +0 -43
  633. package/docs/reference/secret-placeholder-conventions.md +0 -33
  634. package/docs/reference/secretref-credential-surface.md +0 -159
  635. package/docs/reference/secretref-user-supplied-credentials-matrix.json +0 -663
  636. package/docs/reference/session-management-compaction.md +0 -474
  637. package/docs/reference/templates/AGENTS.dev.md +0 -90
  638. package/docs/reference/templates/AGENTS.md +0 -227
  639. package/docs/reference/templates/BOOT.md +0 -16
  640. package/docs/reference/templates/BOOTSTRAP.md +0 -66
  641. package/docs/reference/templates/CLAUDE.md +0 -1
  642. package/docs/reference/templates/HEARTBEAT.md +0 -24
  643. package/docs/reference/templates/IDENTITY.dev.md +0 -52
  644. package/docs/reference/templates/IDENTITY.md +0 -34
  645. package/docs/reference/templates/SOUL.dev.md +0 -82
  646. package/docs/reference/templates/SOUL.md +0 -49
  647. package/docs/reference/templates/TOOLS.dev.md +0 -29
  648. package/docs/reference/templates/TOOLS.md +0 -51
  649. package/docs/reference/templates/USER.dev.md +0 -23
  650. package/docs/reference/templates/USER.md +0 -28
  651. package/docs/reference/test.md +0 -247
  652. package/docs/reference/token-use.md +0 -246
  653. package/docs/reference/transcript-hygiene.md +0 -214
  654. package/docs/reference/wizard.md +0 -252
  655. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +0 -101
  656. package/docs/security/THREAT-MODEL-ATLAS.md +0 -611
  657. package/docs/security/formal-verification.md +0 -170
  658. package/docs/security/incident-response.md +0 -59
  659. package/docs/security/network-proxy.md +0 -268
  660. package/docs/snippets/plugin-publish/minimal-fengming.plugin.json +0 -12
  661. package/docs/snippets/plugin-publish/minimal-package.json +0 -16
  662. package/docs/specs/claw-supervisor.md +0 -247
  663. package/docs/start/bootstrapping.md +0 -49
  664. package/docs/start/docs-directory.md +0 -69
  665. package/docs/start/fengming.md +0 -252
  666. package/docs/start/getting-started.md +0 -152
  667. package/docs/start/hubs.md +0 -201
  668. package/docs/start/lore.md +0 -223
  669. package/docs/start/onboarding-overview.md +0 -72
  670. package/docs/start/onboarding.md +0 -98
  671. package/docs/start/quickstart.md +0 -25
  672. package/docs/start/setup.md +0 -178
  673. package/docs/start/showcase.md +0 -363
  674. package/docs/start/wizard-cli-automation.md +0 -232
  675. package/docs/start/wizard-cli-reference.md +0 -331
  676. package/docs/start/wizard.md +0 -141
  677. package/docs/style.css +0 -137
  678. package/docs/superpowers/specs/2026-04-22-tweakcn-custom-theme-import-design.md +0 -316
  679. package/docs/tools/acp-agents-setup.md +0 -351
  680. package/docs/tools/acp-agents.md +0 -854
  681. package/docs/tools/agent-send.md +0 -130
  682. package/docs/tools/apply-patch.md +0 -64
  683. package/docs/tools/brave-search.md +0 -139
  684. package/docs/tools/browser-control.md +0 -391
  685. package/docs/tools/browser-linux-troubleshooting.md +0 -173
  686. package/docs/tools/browser-login.md +0 -77
  687. package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +0 -219
  688. package/docs/tools/browser.md +0 -810
  689. package/docs/tools/btw.md +0 -159
  690. package/docs/tools/capability-cookbook.md +0 -12
  691. package/docs/tools/clawhub.md +0 -5
  692. package/docs/tools/code-execution.md +0 -173
  693. package/docs/tools/creating-skills.md +0 -158
  694. package/docs/tools/diffs.md +0 -525
  695. package/docs/tools/duckduckgo-search.md +0 -109
  696. package/docs/tools/elevated.md +0 -128
  697. package/docs/tools/exa-search.md +0 -152
  698. package/docs/tools/exec-approvals-advanced.md +0 -444
  699. package/docs/tools/exec-approvals.md +0 -494
  700. package/docs/tools/exec.md +0 -285
  701. package/docs/tools/firecrawl.md +0 -155
  702. package/docs/tools/gemini-search.md +0 -114
  703. package/docs/tools/goal.md +0 -217
  704. package/docs/tools/grok-search.md +0 -129
  705. package/docs/tools/image-generation.md +0 -493
  706. package/docs/tools/index.md +0 -178
  707. package/docs/tools/kimi-search.md +0 -105
  708. package/docs/tools/llm-task.md +0 -137
  709. package/docs/tools/lobster.md +0 -365
  710. package/docs/tools/loop-detection.md +0 -154
  711. package/docs/tools/media-overview.md +0 -160
  712. package/docs/tools/minimax-search.md +0 -102
  713. package/docs/tools/multi-agent-sandbox-tools.md +0 -409
  714. package/docs/tools/music-generation.md +0 -372
  715. package/docs/tools/ollama-search.md +0 -153
  716. package/docs/tools/pdf.md +0 -213
  717. package/docs/tools/perplexity-search.md +0 -220
  718. package/docs/tools/plugin.md +0 -363
  719. package/docs/tools/reactions.md +0 -100
  720. package/docs/tools/searxng-search.md +0 -141
  721. package/docs/tools/skills-config.md +0 -195
  722. package/docs/tools/skills.md +0 -569
  723. package/docs/tools/slash-commands.md +0 -487
  724. package/docs/tools/steer.md +0 -77
  725. package/docs/tools/subagents.md +0 -651
  726. package/docs/tools/tavily.md +0 -162
  727. package/docs/tools/thinking.md +0 -142
  728. package/docs/tools/tokenjuice.md +0 -84
  729. package/docs/tools/tool-search.md +0 -269
  730. package/docs/tools/trajectory.md +0 -229
  731. package/docs/tools/tts.md +0 -1009
  732. package/docs/tools/video-generation.md +0 -555
  733. package/docs/tools/web-fetch.md +0 -210
  734. package/docs/tools/web.md +0 -461
  735. package/docs/tts.md +0 -11
  736. package/docs/vps.md +0 -139
  737. package/docs/web/control-ui.md +0 -512
  738. package/docs/web/dashboard.md +0 -107
  739. package/docs/web/index.md +0 -133
  740. package/docs/web/tui.md +0 -250
  741. package/docs/web/webchat.md +0 -102
  742. package/npm-shrinkwrap.json +0 -12861
  743. package/patches/.gitkeep +0 -0
  744. package/patches/@agentclientprotocol__claude-agent-acp@0.37.0.patch +0 -41
  745. package/pnpm-workspace.yaml +0 -120
  746. package/scripts/crabbox-wrapper.mjs +0 -2004
  747. package/scripts/lib/official-external-channel-catalog.json +0 -560
  748. package/scripts/lib/official-external-plugin-catalog.json +0 -264
  749. package/scripts/lib/official-external-provider-catalog.json +0 -158
  750. package/scripts/lib/package-dist-imports.mjs +0 -171
  751. package/scripts/npm-runner.mjs +0 -91
  752. package/scripts/postinstall-bundled-plugins.mjs +0 -978
  753. package/scripts/preinstall-package-manager-warning.mjs +0 -64
  754. package/scripts/prepare-git-hooks.mjs +0 -72
  755. package/scripts/windows-cmd-helpers.mjs +0 -22
  756. package/skills/batch/SKILL.md +0 -118
  757. package/skills/code-review/SKILL.md +0 -107
  758. package/skills/debug/SKILL.md +0 -83
  759. package/skills/loop/SKILL.md +0 -118
  760. package/skills/run/SKILL.md +0 -79
  761. package/skills/run-skill-generator/SKILL.md +0 -179
  762. package/skills/verify/SKILL.md +0 -103
  763. package/src/agents/templates/HEARTBEAT.md +0 -3
@@ -1,886 +0,0 @@
1
- ---
2
- summary: "CLI reference for `fengming policy` conformance checks"
3
- read_when:
4
- - You want to check FengMing settings against an authored policy.jsonc
5
- - You want policy findings in doctor lint
6
- - You need a policy attestation hash for audit evidence
7
- title: "Policy"
8
- ---
9
-
10
- # `fengming policy`
11
-
12
- `fengming policy` is provided by the bundled Policy plugin. Policy is an
13
- enterprise conformance layer over existing FengMing settings. It does not add a
14
- second configuration system. `policy.jsonc` defines authored requirements,
15
- FengMing observes the active workspace as evidence, and policy health checks
16
- report drift through `doctor --lint`. The final conformance signal is a clean
17
- `doctor --lint` run; policy contributes findings to that shared lint surface
18
- instead of creating a separate health gate.
19
-
20
- Policy currently manages configured channels, MCP servers, model providers,
21
- network SSRF posture, ingress/channel access posture, Gateway exposure posture, agent workspace posture,
22
- FengMing config secret provider/auth profile posture, and governed tool
23
- declarations. For example, IT or a workspace operator can record that Telegram
24
- is not an approved channel provider, restrict MCP servers and model refs to
25
- approved entries, require private-network fetch/browser access to remain
26
- disabled, require direct-message session isolation and channel ingress posture
27
- to stay within reviewed bounds, require Gateway bind/auth/HTTP exposure to stay within reviewed
28
- bounds, require agent workspace access and tool denies to stay in a reviewed
29
- posture, require FengMing config SecretRefs to use managed providers, require
30
- config auth profiles to carry provider/mode metadata, require governed tools to
31
- carry risk and sensitivity metadata, then use `doctor --lint` as the shared
32
- conformance gate.
33
-
34
- Use policy when a workspace needs a durable statement such as "these channels
35
- must not be enabled" or "governed tools must declare approval metadata" and a
36
- repeatable way to prove that FengMing still conforms to that statement. Use
37
- regular config and workspace docs alone when you only need local behavior and
38
- do not need policy findings or attestation output.
39
-
40
- ## Quick start
41
-
42
- Enable the bundled Policy plugin before first use:
43
-
44
- ```bash
45
- fengming plugins enable policy
46
- ```
47
-
48
- When policy is enabled, doctor can load policy health checks without activating
49
- arbitrary plugins. The plugin remains enabled if `policy.jsonc` is missing, so
50
- doctor can report the missing artifact.
51
-
52
- Policy is authored, not generated from the user's current settings. A minimal
53
- policy for channels, MCP servers, model providers, network posture, ingress/channel access, Gateway
54
- exposure, agent workspace posture, configured sandbox runtime posture, FengMing
55
- config secret provider/auth profile posture, and tool metadata looks like this:
56
-
57
- ```jsonc
58
- {
59
- "channels": {
60
- "denyRules": [
61
- {
62
- "id": "no-telegram",
63
- "when": { "provider": "telegram" },
64
- "reason": "Telegram is not approved for this workspace.",
65
- },
66
- ],
67
- },
68
- "mcp": {
69
- "servers": {
70
- "allow": ["docs"],
71
- "deny": ["untrusted"],
72
- },
73
- },
74
- "models": {
75
- "providers": {
76
- "allow": ["openai", "anthropic"],
77
- "deny": ["openrouter"],
78
- },
79
- },
80
- "network": {
81
- "privateNetwork": {
82
- "allow": false,
83
- },
84
- },
85
- "ingress": {
86
- "session": {
87
- "requireDmScope": "per-channel-peer",
88
- },
89
- "channels": {
90
- "allowDmPolicies": ["pairing", "allowlist", "disabled"],
91
- "denyOpenGroups": true,
92
- "requireMentionInGroups": true,
93
- },
94
- },
95
- "gateway": {
96
- "exposure": {
97
- "allowNonLoopbackBind": false,
98
- "allowTailscaleFunnel": false,
99
- },
100
- "auth": {
101
- "requireAuth": true,
102
- "requireExplicitRateLimit": true,
103
- },
104
- "controlUi": {
105
- "allowInsecure": false,
106
- },
107
- "remote": {
108
- "allow": false,
109
- },
110
- "http": {
111
- "denyEndpoints": ["chatCompletions", "responses"],
112
- "requireUrlAllowlists": true,
113
- },
114
- },
115
- "agents": {
116
- "workspace": {
117
- "allowedAccess": ["none", "ro"],
118
- "denyTools": ["exec", "process", "write", "edit", "apply_patch"],
119
- },
120
- },
121
- "secrets": {
122
- "requireManagedProviders": true,
123
- "denySources": ["exec"],
124
- "allowInsecureProviders": false,
125
- },
126
- "auth": {
127
- "profiles": {
128
- "requireMetadata": ["provider", "mode"],
129
- "allowModes": ["api_key", "token"],
130
- },
131
- },
132
- "tools": {
133
- "requireMetadata": ["risk", "sensitivity", "owner"],
134
- "profiles": {
135
- "allow": ["messaging", "minimal"],
136
- },
137
- "fs": {
138
- "requireWorkspaceOnly": true,
139
- },
140
- "exec": {
141
- "allowSecurity": ["deny", "allowlist"],
142
- "requireAsk": ["always"],
143
- "allowHosts": ["sandbox"],
144
- },
145
- "elevated": {
146
- "allow": false,
147
- },
148
- "denyTools": ["group:runtime", "group:fs"],
149
- },
150
- }
151
- ```
152
-
153
- The rules are the authority. A category block is only a namespace; checks run
154
- when a concrete rule is present. FengMing reads current `channels.*` settings
155
- `mcp.servers.*`, `models.providers.*`, selected agent model refs, network SSRF
156
- settings, direct-message session scope, channel DM policy, channel group policy,
157
- channel/group mention gates, Gateway bind/auth/Control UI/Tailscale/remote/HTTP
158
- posture, FengMing config agent sandbox workspace access and tool deny posture, config secret
159
- provider and SecretRef provenance, config auth profile metadata, configured
160
- global/per-agent tool posture, and `TOOLS.md` declarations as evidence, then
161
- reports observed state that does not conform. If a policy denies non-loopback
162
- Gateway binds, omit `gateway.bind` only when you
163
- are willing to review the runtime default; set `gateway.bind=loopback` for
164
- strict config conformance. For read-only agent posture, configure sandbox mode
165
- on the applicable defaults or agent and set `workspaceAccess` to `none` or
166
- `ro`; omitted or `off` sandbox mode does not satisfy a read-only/no-write
167
- policy. `agents.workspace.denyTools` supports `exec`, `process`, `write`,
168
- `edit`, and `apply_patch`; FengMing config `group:fs` covers file mutation tools
169
- and `group:runtime` covers shell/process tools. Tool posture policy observes
170
- `tools.profile`, `tools.allow`, `tools.alsoAllow`, `tools.deny`,
171
- `tools.fs.workspaceOnly`, `tools.exec.security`, `tools.exec.ask`,
172
- `tools.exec.host`, `tools.elevated.enabled`, and the same per-agent
173
- `agents.list[].tools.*` overrides. It does not read runtime/operator approval
174
- state such as exec-approvals.json, and it does not enforce tool calls at
175
- runtime. Secret evidence records
176
- provider/source posture and SecretRef metadata, never raw secret values. Policy
177
- does not read or attest per-agent credential stores such as `auth-profiles.json`;
178
- those stores remain owned by the existing auth and credential flows.
179
-
180
- ### Policy rule reference
181
-
182
- Each policy field below is optional. A check runs only when the matching rule is
183
- present in `policy.jsonc`. The observed state is existing FengMing config or
184
- workspace metadata; policy reports drift but does not rewrite runtime behavior
185
- unless a repair path is explicitly available and enabled.
186
-
187
- Policy overlays keep broad top-level rules global, then let named scope blocks
188
- add stricter normal policy sections for explicit selectors. A scope name is a
189
- descriptive bucket only; matching uses the selector values inside the scope.
190
- The overlay is additive: global claims still run, and a scoped claim can emit
191
- its own finding against the same observed config.
192
-
193
- #### Scoped overlays
194
-
195
- Use `scopes.<scopeName>` when one set of agents or channels needs stricter
196
- policy than the top-level baseline. Agent-scoped sections use `agentIds`, which
197
- supports `tools.*`, `agents.workspace.*`, and `sandbox.*`. Channel-scoped
198
- ingress uses `channelIds`, which supports `ingress.channels.*`. Unsupported
199
- sections are rejected instead of being ignored. If an `agentIds` entry is not
200
- present in `agents.list[]`, FengMing evaluates the scoped rule against inherited
201
- global/default posture for that runtime agent id.
202
-
203
- ```jsonc
204
- {
205
- "tools": {
206
- "exec": {
207
- "allowHosts": ["sandbox", "node"],
208
- },
209
- },
210
- "sandbox": {
211
- "requireMode": ["all", "non-main"],
212
- },
213
- "scopes": {
214
- "release-workspace": {
215
- "agentIds": ["release-agent", "review-agent"],
216
- "agents": {
217
- "workspace": {
218
- "allowedAccess": ["none", "ro"],
219
- },
220
- },
221
- },
222
- "release-lockdown": {
223
- "agentIds": ["release-agent"],
224
- "tools": {
225
- "exec": {
226
- "allowHosts": ["sandbox"],
227
- "allowSecurity": ["deny", "allowlist"],
228
- "requireAsk": ["always"],
229
- },
230
- "denyTools": ["exec", "process", "write", "edit", "apply_patch"],
231
- },
232
- "sandbox": {
233
- "requireMode": ["all"],
234
- "allowBackends": ["docker"],
235
- },
236
- },
237
- "shell-sandbox": {
238
- "agentIds": ["shell-agent"],
239
- "sandbox": {
240
- "allowBackends": ["openshell"],
241
- "containers": {
242
- "requireReadOnlyMounts": false,
243
- },
244
- },
245
- },
246
- "telegram-ingress": {
247
- "channelIds": ["telegram"],
248
- "ingress": {
249
- "channels": {
250
- "allowDmPolicies": ["pairing"],
251
- "denyOpenGroups": true,
252
- "requireMentionInGroups": true,
253
- },
254
- },
255
- },
256
- },
257
- }
258
- ```
259
-
260
- The same agent can appear in multiple scopes when each scope governs different
261
- fields, as shown above. A repeated scoped field for the same agent must be
262
- equally or more restrictive according to policy metadata; weaker duplicate
263
- claims are rejected. Strictness metadata treats allow-lists as subsets,
264
- deny-lists as supersets, and required booleans as fixed requirements.
265
-
266
- Container posture policy is evaluated only against evidence FengMing can
267
- observe for the matched agent. If an enabled `sandbox.containers.*` rule applies
268
- to an agent whose sandbox backend cannot expose that field, policy reports
269
- `policy/sandbox-container-posture-unobservable` instead of treating the claim as
270
- passing. Use separate `agentIds` scopes for agent groups that use different
271
- sandbox backends, and leave unsupported container rules unset or false for the
272
- groups where those fields cannot be observed.
273
-
274
- Top-level `ingress.session.requireDmScope` remains global because
275
- `session.dmScope` is not channel-attributable evidence.
276
-
277
- | Selector | Supported sections | Use when |
278
- | ------------ | ------------------------------------------ | ------------------------------------------------- |
279
- | `agentIds` | `tools`, `agents.workspace`, and `sandbox` | One or more runtime agents need stricter rules. |
280
- | `channelIds` | `ingress.channels` | One or more channels need stricter ingress rules. |
281
-
282
- Every scope present in `policy.jsonc` must be valid and enforceable.
283
-
284
- #### Channels
285
-
286
- | Policy field | Observed state | Use when |
287
- | ------------------------------------ | --------------------------------------- | ------------------------------------------------------------ |
288
- | `channels.denyRules[].when.provider` | `channels.*` provider and enabled state | Deny configured channels from a provider such as `telegram`. |
289
- | `channels.denyRules[].reason` | Finding message and repair hint context | Explain why the provider is denied. |
290
-
291
- #### MCP servers
292
-
293
- | Policy field | Observed state | Use when |
294
- | ------------------- | ------------------- | ---------------------------------------------------------- |
295
- | `mcp.servers.allow` | `mcp.servers.*` ids | Require every configured MCP server to be in an allowlist. |
296
- | `mcp.servers.deny` | `mcp.servers.*` ids | Deny specific configured MCP server ids. |
297
-
298
- #### Model providers
299
-
300
- | Policy field | Observed state | Use when |
301
- | ------------------------ | ------------------------------------------------ | ------------------------------------------------------------------------------- |
302
- | `models.providers.allow` | `models.providers.*` ids and selected model refs | Require configured providers and selected model refs to use approved providers. |
303
- | `models.providers.deny` | `models.providers.*` ids and selected model refs | Deny configured providers and selected model refs by provider id. |
304
-
305
- #### Network
306
-
307
- | Policy field | Observed state | Use when |
308
- | ------------------------------ | ----------------------------------- | ------------------------------------------------------------------ |
309
- | `network.privateNetwork.allow` | Private-network SSRF escape hatches | Set to `false` to require private-network access to stay disabled. |
310
-
311
- #### Ingress and channel access
312
-
313
- | Policy field | Observed state | Use when |
314
- | ----------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------------ |
315
- | `ingress.session.requireDmScope` | `session.dmScope` | Require a reviewed direct-message isolation scope. |
316
- | `ingress.channels.allowDmPolicies` | `channels.*.dmPolicy` and legacy channel DM policy fields | Allow only reviewed direct-message channel policies. |
317
- | `ingress.channels.denyOpenGroups` | Channel, account, and group ingress policy | Deny open group ingress for configured channels and accounts. |
318
- | `ingress.channels.requireMentionInGroups` | Channel, account, group, guild, and nested mention gate config | Require mention gates when group ingress is open or mention-gated. |
319
-
320
- #### Gateway
321
-
322
- | Policy field | Observed state | Use when |
323
- | --------------------------------------- | ---------------------------------------------- | ------------------------------------------------------------ |
324
- | `gateway.exposure.allowNonLoopbackBind` | `gateway.bind` | Set to `false` to require loopback Gateway binding. |
325
- | `gateway.exposure.allowTailscaleFunnel` | Tailscale serve/funnel Gateway posture | Set to `false` to deny Tailscale Funnel exposure. |
326
- | `gateway.auth.requireAuth` | `gateway.auth.mode` | Set to `true` to reject disabled Gateway auth. |
327
- | `gateway.auth.requireExplicitRateLimit` | `gateway.auth.rateLimit` | Set to `true` to require explicit auth rate-limit config. |
328
- | `gateway.controlUi.allowInsecure` | Control UI insecure auth/device/origin toggles | Set to `false` to deny insecure Control UI exposure toggles. |
329
- | `gateway.remote.allow` | Remote Gateway mode/config | Set to `false` to deny remote Gateway mode. |
330
- | `gateway.http.denyEndpoints` | Gateway HTTP API endpoints | Deny endpoint ids such as `chatCompletions` or `responses`. |
331
- | `gateway.http.requireUrlAllowlists` | Gateway HTTP URL-fetch inputs | Set to `true` to require URL allowlists on URL-fetch inputs. |
332
-
333
- #### Agent workspace
334
-
335
- | Policy field | Observed state | Use when |
336
- | -------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
337
- | `agents.workspace.allowedAccess` | `agents.defaults.sandbox.workspaceAccess` and `agents.list[].sandbox.workspaceAccess` | Allow only sandbox workspace access values such as `none` or `ro`. |
338
- | `agents.workspace.denyTools` | Global and per-agent tool deny config | Require workspace/runtime mutation tools such as `exec`, `process`, `write`, `edit`, or `apply_patch` to be denied. |
339
-
340
- #### Sandbox posture
341
-
342
- | Policy field | Observed state | Use when |
343
- | ----------------------------------------------------- | ------------------------------------------------------- | -------------------------------------------------------------- |
344
- | `sandbox.requireMode` | `agents.defaults.sandbox.mode` and per-agent mode | Allow only reviewed sandbox modes such as `all` or `non-main`. |
345
- | `sandbox.allowBackends` | `agents.defaults.sandbox.backend` and per-agent backend | Allow only reviewed sandbox backends such as `docker`. |
346
- | `sandbox.containers.denyHostNetwork` | Container-backed sandbox/browser network mode | Deny host network mode. |
347
- | `sandbox.containers.denyContainerNamespaceJoin` | Container-backed sandbox/browser network mode | Deny joining another container network namespace. |
348
- | `sandbox.containers.requireReadOnlyMounts` | Container-backed sandbox/browser mount mode | Require mounts to be read-only. |
349
- | `sandbox.containers.denyContainerRuntimeSocketMounts` | Container-backed sandbox/browser mount targets | Deny container runtime socket mounts. |
350
- | `sandbox.containers.denyUnconfinedProfiles` | Container security profile posture | Deny unconfined container security profiles. |
351
- | `sandbox.browser.requireCdpSourceRange` | Sandbox browser CDP source range | Require browser CDP exposure to declare a source range. |
352
-
353
- Policy treats missing `sandbox.mode` as the implicit default `off`, so
354
- `sandbox.requireMode` reports a fresh or unconfigured sandbox as outside an
355
- allowlist such as `["all"]`.
356
-
357
- #### Secrets
358
-
359
- | Policy field | Observed state | Use when |
360
- | --------------------------------- | -------------------------------------------------------- | ----------------------------------------------------------------------- |
361
- | `secrets.requireManagedProviders` | Config SecretRefs and `secrets.providers.*` declarations | Set to `true` to require SecretRefs to point at declared providers. |
362
- | `secrets.denySources` | Secret provider sources and SecretRef sources | Deny sources such as `exec`, `file`, or another configured source name. |
363
- | `secrets.allowInsecureProviders` | Insecure secret-provider posture flags | Set to `false` to reject providers that opt into insecure posture. |
364
-
365
- #### Auth profiles
366
-
367
- | Policy field | Observed state | Use when |
368
- | ------------------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------------ |
369
- | `auth.profiles.requireMetadata` | `auth.profiles.*` provider and mode metadata | Require metadata keys such as `provider` and `mode` on config auth profiles. |
370
- | `auth.profiles.allowModes` | `auth.profiles.*.mode` | Allow only supported auth profile modes such as `api_key`, `aws-sdk`, `oauth`, or `token`. |
371
-
372
- #### Tool metadata
373
-
374
- | Policy field | Observed state | Use when |
375
- | ----------------------- | -------------------------------- | ------------------------------------------------------------------------------------------ |
376
- | `tools.requireMetadata` | Governed `TOOLS.md` declarations | Require governed tools to declare metadata keys such as `risk`, `sensitivity`, or `owner`. |
377
-
378
- #### Tool posture
379
-
380
- | Policy field | Observed state | Use when |
381
- | ------------------------------- | ----------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
382
- | `tools.profiles.allow` | `tools.profile` and `agents.list[].tools.profile` | Allow only tool profile ids such as `minimal`, `messaging`, or `coding`. |
383
- | `tools.fs.requireWorkspaceOnly` | `tools.fs.workspaceOnly` and per-agent `tools.fs` overrides | Set to `true` to require workspace-only filesystem tool posture. |
384
- | `tools.exec.allowSecurity` | `tools.exec.security` and per-agent exec security | Allow only exec security modes such as `deny` or `allowlist`. |
385
- | `tools.exec.requireAsk` | `tools.exec.ask` and per-agent exec ask mode | Require approval posture such as `always`. |
386
- | `tools.exec.allowHosts` | `tools.exec.host` and per-agent exec host routing | Allow only exec host routing modes such as `sandbox`. |
387
- | `tools.elevated.allow` | `tools.elevated.enabled` and per-agent elevated posture | Set to `false` to require elevated tool mode to stay disabled. |
388
- | `tools.alsoAllow.expected` | `tools.alsoAllow` and per-agent `tools.alsoAllow` | Require exact `alsoAllow` entries and report missing or unexpected additive tool grants. |
389
- | `tools.denyTools` | `tools.deny` and `agents.list[].tools.deny` | Require configured tool deny lists to include tool ids or groups such as `group:runtime` and `group:fs`. |
390
-
391
- Run policy-only checks during authoring:
392
-
393
- ```bash
394
- fengming policy check
395
- fengming policy check --json
396
- fengming policy check --severity-min error
397
- ```
398
-
399
- `policy check` runs only the policy check set and emits evidence, findings, and
400
- attestation hashes. The same findings also appear in `fengming doctor --lint`
401
- when the Policy plugin is enabled.
402
-
403
- Compare an operator policy file to an authored baseline policy file:
404
-
405
- ```bash
406
- fengming policy compare --baseline official.policy.jsonc
407
- fengming policy compare --baseline official.policy.jsonc --policy policy.jsonc --json
408
- ```
409
-
410
- `policy compare` compares policy file syntax to policy file syntax. It does not
411
- inspect FengMing runtime state, evidence, credentials, or secrets. The command
412
- uses the same policy rule metadata that governs scoped overlays: allowlists must
413
- stay equal or narrower, denylists must stay equal or broader, required booleans
414
- must keep their required value, ordered strings must move only toward the more
415
- restrictive end of the configured order, and exact lists must match.
416
-
417
- The baseline file can be an organization-authored policy. The checked policy can
418
- use stricter values or add extra policy rules. A top-level checked rule can also
419
- satisfy a scoped baseline rule when it is equally or more restrictive because
420
- top-level policy applies broadly. Scope names do not need to match; scoped
421
- comparison is keyed by selector value such as `agentIds` or `channelIds` and by
422
- the policy field being checked.
423
-
424
- Example clean compare JSON output reports only policy-file comparison state:
425
-
426
- ```json
427
- {
428
- "ok": true,
429
- "baselinePath": "official.policy.jsonc",
430
- "policyPath": "policy.jsonc",
431
- "rulesChecked": 3,
432
- "findings": []
433
- }
434
- ```
435
-
436
- Example clean `policy check --json` output includes stable hashes that can be
437
- recorded by an operator or supervisor:
438
-
439
- ```json
440
- {
441
- "ok": true,
442
- "attestation": {
443
- "policy": {
444
- "path": "policy.jsonc",
445
- "hash": "sha256:..."
446
- },
447
- "workspace": {
448
- "scope": "policy",
449
- "hash": "sha256:..."
450
- },
451
- "findingsHash": "sha256:...",
452
- "attestationHash": "sha256:..."
453
- },
454
- "checksRun": 5,
455
- "checksSkipped": 0,
456
- "findings": []
457
- }
458
- ```
459
-
460
- ## Configure policy
461
-
462
- Policy config lives under `plugins.entries.policy.config`.
463
-
464
- ```jsonc
465
- {
466
- "plugins": {
467
- "entries": {
468
- "policy": {
469
- "enabled": true,
470
- "config": {
471
- "enabled": true,
472
- "path": "policy.jsonc",
473
- "workspaceRepairs": false,
474
- "expectedHash": "sha256:...",
475
- "expectedAttestationHash": "sha256:...",
476
- },
477
- },
478
- },
479
- },
480
- }
481
- ```
482
-
483
- | Setting | Purpose |
484
- | ------------------------- | --------------------------------------------------------------- |
485
- | `enabled` | Enable policy checks even before `policy.jsonc` exists. |
486
- | `workspaceRepairs` | Allow `doctor --fix` to edit policy-managed workspace settings. |
487
- | `expectedHash` | Optional hash-lock for the approved policy artifact. |
488
- | `expectedAttestationHash` | Optional hash-lock for the last accepted clean policy check. |
489
- | `path` | Workspace-relative location of the policy artifact. |
490
-
491
- Set `plugins.entries.policy.config.enabled` to `false` to disable policy checks
492
- for a workspace while leaving the plugin installed.
493
-
494
- Tool metadata requirements are authored in `policy.jsonc` with
495
- `tools.requireMetadata`, for example `["risk", "sensitivity", "owner"]`.
496
-
497
- ## Accept policy state
498
-
499
- Example JSON output:
500
-
501
- ```json
502
- {
503
- "ok": true,
504
- "attestation": {
505
- "checkedAt": "2026-05-10T20:00:00.000Z",
506
- "policy": {
507
- "path": "policy.jsonc",
508
- "hash": "sha256:..."
509
- },
510
- "workspace": {
511
- "scope": "policy",
512
- "hash": "sha256:..."
513
- },
514
- "findingsHash": "sha256:...",
515
- "attestationHash": "sha256:..."
516
- },
517
- "evidence": {
518
- "channels": [
519
- {
520
- "id": "telegram",
521
- "provider": "telegram",
522
- "source": "oc://fengming.config/channels/telegram",
523
- "enabled": false
524
- }
525
- ],
526
- "mcpServers": [
527
- {
528
- "id": "docs",
529
- "transport": "stdio",
530
- "source": "oc://fengming.config/mcp/servers/docs",
531
- "command": "npx"
532
- }
533
- ],
534
- "modelProviders": [
535
- {
536
- "id": "openai",
537
- "source": "oc://fengming.config/models/providers/openai"
538
- }
539
- ],
540
- "modelRefs": [
541
- {
542
- "ref": "openai/gpt-5.5",
543
- "provider": "openai",
544
- "model": "gpt-5.5",
545
- "source": "oc://fengming.config/agents/defaults/model"
546
- }
547
- ],
548
- "network": [
549
- {
550
- "id": "browser-private-network",
551
- "source": "oc://fengming.config/browser/ssrfPolicy/dangerouslyAllowPrivateNetwork",
552
- "value": false
553
- }
554
- ],
555
- "gatewayExposure": [
556
- {
557
- "id": "gateway-bind",
558
- "kind": "bind",
559
- "source": "oc://fengming.config/gateway/bind",
560
- "value": "loopback",
561
- "nonLoopback": false,
562
- "explicit": true
563
- }
564
- ],
565
- "agentWorkspace": [
566
- {
567
- "id": "agents-defaults-workspace-access",
568
- "kind": "workspaceAccess",
569
- "source": "oc://fengming.config/agents/defaults/sandbox/workspaceAccess",
570
- "scope": "defaults",
571
- "value": "ro",
572
- "sandboxMode": "all",
573
- "sandboxModeSource": "oc://fengming.config/agents/defaults/sandbox/mode",
574
- "sandboxEnabled": true,
575
- "explicit": true
576
- },
577
- {
578
- "id": "agents-defaults-tool-exec",
579
- "kind": "toolDeny",
580
- "source": "oc://fengming.config/tools/deny",
581
- "scope": "defaults",
582
- "tool": "exec",
583
- "denied": true,
584
- "explicit": true
585
- }
586
- ],
587
- "secrets": [
588
- {
589
- "id": "vault",
590
- "kind": "provider",
591
- "source": "oc://fengming.config/secrets/providers/vault",
592
- "providerSource": "env"
593
- },
594
- {
595
- "id": "oc://fengming.config/models/providers/openai/apiKey",
596
- "kind": "input",
597
- "source": "oc://fengming.config/models/providers/openai/apiKey",
598
- "provenance": "secretRef",
599
- "refSource": "env",
600
- "refProvider": "vault"
601
- }
602
- ],
603
- "authProfiles": [
604
- {
605
- "id": "github",
606
- "source": "oc://fengming.config/auth/profiles/github",
607
- "validMetadata": true,
608
- "provider": "github",
609
- "mode": "token"
610
- }
611
- ],
612
- "tools": [
613
- {
614
- "id": "deploy",
615
- "source": "oc://TOOLS.md/tools/deploy",
616
- "line": 12,
617
- "risk": "critical",
618
- "sensitivity": "restricted",
619
- "capabilities": ["IRREVERSIBLE_EXTERNAL"]
620
- }
621
- ]
622
- },
623
- "checksRun": 30,
624
- "checksSkipped": 0,
625
- "findings": []
626
- }
627
- ```
628
-
629
- The policy hash identifies the authored rule artifact. The evidence block
630
- records the observed FengMing state used by the policy checks. The
631
- `workspace.hash` value identifies that evidence payload for the checked scope.
632
- The findings hash identifies the exact finding set returned by the check.
633
- `checkedAt` records when the evaluation ran. The attestation hash identifies
634
- the stable claim: policy hash, evidence hash, findings hash, and whether the
635
- result was clean. It intentionally does not include `checkedAt`, so the same
636
- policy state produces the same attestation across repeated checks. Together,
637
- these form the audit tuple for this policy check.
638
-
639
- If a later gateway or supervisor uses policy to block, approve, or annotate a
640
- runtime action, it should record the attestation hash from the last clean policy
641
- check. `checkedAt` stays in JSON output for audit logs, but is not part of the
642
- stable attestation hash.
643
-
644
- Use this lifecycle when accepting policy state:
645
-
646
- 1. Author or review `policy.jsonc`.
647
- 2. Run `fengming policy check --json`.
648
- 3. If the result is clean, record `attestation.policy.hash` as `expectedHash`.
649
- 4. Record `attestation.attestationHash` as `expectedAttestationHash`.
650
- 5. Re-run `fengming doctor --lint` in CI or release gates.
651
-
652
- If policy rules change intentionally, update both accepted hashes from a clean
653
- check. If workspace settings change intentionally but policy stays the same,
654
- only `expectedAttestationHash` usually changes.
655
-
656
- Enabling or upgrading `agents.workspace` rules adds `agentWorkspace` evidence to
657
- the workspace hash and attestation hash. Operators should review the new
658
- evidence and refresh accepted attestation hashes after enabling these rules.
659
- Enabling or upgrading tool posture rules adds `toolPosture` evidence in the
660
- same way.
661
-
662
- `fengming policy watch` runs the same check repeatedly and reports when the
663
- current evidence no longer matches `expectedAttestationHash`:
664
-
665
- ```bash
666
- fengming policy watch --json
667
- ```
668
-
669
- Use `--once` in CI or scripts that only need one drift evaluation. Without
670
- `--once`, the command polls every two seconds by default; use `--interval-ms` to
671
- choose a different interval.
672
-
673
- ## Findings
674
-
675
- Policy currently verifies:
676
-
677
- | Check id | Finding |
678
- | ------------------------------------------------- | --------------------------------------------------------------------------------- |
679
- | `policy/policy-jsonc-missing` | Policy is enabled but `policy.jsonc` is missing. |
680
- | `policy/policy-jsonc-invalid` | Policy cannot be parsed or contains malformed rule entries. |
681
- | `policy/policy-hash-mismatch` | Policy does not match configured `expectedHash`. |
682
- | `policy/attestation-hash-mismatch` | Current policy evidence no longer matches the accepted attestation. |
683
- | `policy/policy-conformance-invalid` | A baseline or checked policy file has invalid comparison syntax. |
684
- | `policy/policy-conformance-missing` | A checked policy file is missing a rule required by the baseline policy file. |
685
- | `policy/policy-conformance-weaker` | A checked policy file has a weaker value than the baseline policy file. |
686
- | `policy/channels-denied-provider` | An enabled channel matches a channel deny rule. |
687
- | `policy/mcp-denied-server` | A configured MCP server is denied by policy. |
688
- | `policy/mcp-unapproved-server` | A configured MCP server is outside the allowlist. |
689
- | `policy/models-denied-provider` | A configured model provider or model ref uses a denied provider. |
690
- | `policy/models-unapproved-provider` | A configured model provider or model ref is outside the allowlist. |
691
- | `policy/network-private-access-enabled` | A private-network SSRF escape hatch is enabled when policy denies it. |
692
- | `policy/ingress-dm-policy-unapproved` | A channel DM policy is outside the policy allowlist. |
693
- | `policy/ingress-dm-scope-unapproved` | `session.dmScope` does not match the policy-required DM isolation scope. |
694
- | `policy/ingress-open-groups-denied` | A channel group policy is `open` while policy denies open group ingress. |
695
- | `policy/ingress-group-mention-required` | A channel or group entry disables mention gates while policy requires them. |
696
- | `policy/gateway-non-loopback-bind` | Gateway bind posture permits non-loopback exposure when policy denies it. |
697
- | `policy/gateway-auth-disabled` | Gateway authentication is disabled when policy requires auth. |
698
- | `policy/gateway-rate-limit-missing` | Gateway auth rate-limit posture is not explicit when policy requires it. |
699
- | `policy/gateway-control-ui-insecure` | Gateway Control UI insecure exposure toggles are enabled. |
700
- | `policy/gateway-tailscale-funnel` | Gateway Tailscale Funnel exposure is enabled when policy denies it. |
701
- | `policy/gateway-remote-enabled` | Gateway remote mode is active when policy denies it. |
702
- | `policy/gateway-http-endpoint-enabled` | A Gateway HTTP API endpoint is enabled while denied by policy. |
703
- | `policy/gateway-http-url-fetch-unrestricted` | Gateway HTTP URL-fetch input lacks a required URL allowlist. |
704
- | `policy/agents-workspace-access-denied` | Agent sandbox mode or workspace access is outside the policy allowlist. |
705
- | `policy/agents-tool-not-denied` | An agent or default config does not deny a tool required by policy. |
706
- | `policy/tools-profile-unapproved` | A configured global or per-agent tool profile is outside the allowlist. |
707
- | `policy/tools-fs-workspace-only-required` | Filesystem tools are not configured with workspace-only path posture. |
708
- | `policy/tools-exec-security-unapproved` | Exec security mode is outside the policy allowlist. |
709
- | `policy/tools-exec-ask-unapproved` | Exec ask mode is outside the policy allowlist. |
710
- | `policy/tools-exec-host-unapproved` | Exec host routing is outside the policy allowlist. |
711
- | `policy/tools-elevated-enabled` | Elevated tool mode is enabled when policy denies it. |
712
- | `policy/tools-also-allow-missing` | A configured `alsoAllow` list is missing an entry required by policy. |
713
- | `policy/tools-also-allow-unexpected` | A configured `alsoAllow` list includes an entry not expected by policy. |
714
- | `policy/tools-required-deny-missing` | A global or per-agent tool deny list does not include a required denied tool. |
715
- | `policy/sandbox-mode-unapproved` | Sandbox mode is outside the policy allowlist. |
716
- | `policy/sandbox-backend-unapproved` | Sandbox backend is outside the policy allowlist. |
717
- | `policy/sandbox-container-posture-unobservable` | A container posture rule is enabled for a backend that cannot observe it. |
718
- | `policy/sandbox-container-host-network-denied` | A container-backed sandbox or browser uses host network mode. |
719
- | `policy/sandbox-container-namespace-join-denied` | A container-backed sandbox or browser joins another container namespace. |
720
- | `policy/sandbox-container-mount-mode-required` | A container-backed sandbox or browser mount is not read-only. |
721
- | `policy/sandbox-container-runtime-socket-mount` | A container-backed sandbox or browser mount exposes the container runtime socket. |
722
- | `policy/sandbox-container-unconfined-profile` | Container sandbox profile is unconfined when policy denies it. |
723
- | `policy/sandbox-browser-cdp-source-range-missing` | Sandbox browser CDP source range is missing when policy requires one. |
724
- | `policy/secrets-unmanaged-provider` | A config SecretRef references a provider not declared under `secrets.providers`. |
725
- | `policy/secrets-denied-provider-source` | A config secret provider or SecretRef uses a source denied by policy. |
726
- | `policy/secrets-insecure-provider` | A secret provider opts into insecure posture when policy denies it. |
727
- | `policy/auth-profile-invalid-metadata` | A config auth profile is missing valid provider or mode metadata. |
728
- | `policy/auth-profile-unapproved-mode` | A config auth profile mode is outside the policy allowlist. |
729
- | `policy/tools-missing-risk-level` | A governed tool declaration is missing risk metadata. |
730
- | `policy/tools-unknown-risk-level` | A governed tool declaration uses an unknown risk value. |
731
- | `policy/tools-missing-sensitivity-token` | A governed tool declaration is missing sensitivity metadata. |
732
- | `policy/tools-missing-owner` | A governed tool declaration is missing owner metadata. |
733
- | `policy/tools-unknown-sensitivity-token` | A governed tool declaration uses an unknown sensitivity value. |
734
-
735
- Policy findings can include both `target` and `requirement`. `target` is the
736
- observed workspace thing that does not conform. `requirement` is the authored
737
- policy rule that made it a finding. Both values are addresses today, usually
738
- `oc://` paths, but the field names describe their policy role rather than the
739
- address format.
740
-
741
- Example JSON finding:
742
-
743
- ```json
744
- {
745
- "checkId": "policy/channels-denied-provider",
746
- "severity": "error",
747
- "message": "Channel 'telegram' uses denied provider 'telegram'.",
748
- "source": "policy",
749
- "path": "fengming config",
750
- "ocPath": "oc://fengming.config/channels/telegram",
751
- "target": "oc://fengming.config/channels/telegram",
752
- "requirement": "oc://policy.jsonc/channels/denyRules/#0",
753
- "fixHint": "Telegram is not approved for this workspace."
754
- }
755
- ```
756
-
757
- Example tool finding:
758
-
759
- ```json
760
- {
761
- "checkId": "policy/tools-missing-risk-level",
762
- "severity": "error",
763
- "message": "TOOLS.md tool 'deploy' has no explicit risk classification.",
764
- "source": "policy",
765
- "path": "TOOLS.md",
766
- "line": 12,
767
- "ocPath": "oc://TOOLS.md/tools/deploy",
768
- "target": "oc://TOOLS.md/tools/deploy",
769
- "requirement": "oc://policy.jsonc/tools/requireMetadata"
770
- }
771
- ```
772
-
773
- Example MCP finding:
774
-
775
- ```json
776
- {
777
- "checkId": "policy/mcp-unapproved-server",
778
- "severity": "error",
779
- "message": "MCP server 'remote' is not in the policy allowlist.",
780
- "source": "policy",
781
- "path": "fengming config",
782
- "ocPath": "oc://fengming.config/mcp/servers/remote",
783
- "target": "oc://fengming.config/mcp/servers/remote",
784
- "requirement": "oc://policy.jsonc/mcp/servers/allow"
785
- }
786
- ```
787
-
788
- Example model-provider finding:
789
-
790
- ```json
791
- {
792
- "checkId": "policy/models-unapproved-provider",
793
- "severity": "error",
794
- "message": "Model ref 'anthropic/claude-sonnet-4.7' uses unapproved provider 'anthropic'.",
795
- "source": "policy",
796
- "path": "fengming config",
797
- "ocPath": "oc://fengming.config/agents/defaults/model/fallbacks/#0",
798
- "target": "oc://fengming.config/agents/defaults/model/fallbacks/#0",
799
- "requirement": "oc://policy.jsonc/models/providers/allow"
800
- }
801
- ```
802
-
803
- Example network finding:
804
-
805
- ```json
806
- {
807
- "checkId": "policy/network-private-access-enabled",
808
- "severity": "error",
809
- "message": "Network setting 'browser-private-network' allows private-network access.",
810
- "source": "policy",
811
- "path": "fengming config",
812
- "ocPath": "oc://fengming.config/browser/ssrfPolicy/dangerouslyAllowPrivateNetwork",
813
- "target": "oc://fengming.config/browser/ssrfPolicy/dangerouslyAllowPrivateNetwork",
814
- "requirement": "oc://policy.jsonc/network/privateNetwork/allow"
815
- }
816
- ```
817
-
818
- Example Gateway exposure finding:
819
-
820
- ```json
821
- {
822
- "checkId": "policy/gateway-non-loopback-bind",
823
- "severity": "error",
824
- "message": "Gateway bind setting 'gateway-bind' permits non-loopback exposure.",
825
- "source": "policy",
826
- "path": "fengming config",
827
- "ocPath": "oc://fengming.config/gateway/bind",
828
- "target": "oc://fengming.config/gateway/bind",
829
- "requirement": "oc://policy.jsonc/gateway/exposure/allowNonLoopbackBind"
830
- }
831
- ```
832
-
833
- Example agent workspace finding:
834
-
835
- ```json
836
- {
837
- "checkId": "policy/agents-workspace-access-denied",
838
- "severity": "error",
839
- "message": "agents.defaults sandbox workspaceAccess 'rw' is not allowed by policy.",
840
- "source": "policy",
841
- "path": "fengming config",
842
- "ocPath": "oc://fengming.config/agents/defaults/sandbox/workspaceAccess",
843
- "target": "oc://fengming.config/agents/defaults/sandbox/workspaceAccess",
844
- "requirement": "oc://policy.jsonc/agents/workspace/allowedAccess"
845
- }
846
- ```
847
-
848
- ## Repair
849
-
850
- `doctor --lint` and `policy check` are read-only.
851
-
852
- `doctor --fix` only edits policy-managed workspace settings when
853
- `workspaceRepairs` is explicitly enabled. Without that opt-in, policy checks
854
- report what they would repair and leave settings unchanged.
855
-
856
- In this version, repair can disable channels that are enabled in FengMing config
857
- but denied by `channels.denyRules`. Enable `workspaceRepairs` only after the
858
- policy file has been reviewed, because a valid deny rule can turn off a
859
- configured channel:
860
-
861
- ```jsonc
862
- {
863
- "plugins": {
864
- "entries": {
865
- "policy": {
866
- "config": {
867
- "workspaceRepairs": true,
868
- },
869
- },
870
- },
871
- },
872
- }
873
- ```
874
-
875
- ## Exit codes
876
-
877
- | Command | `0` | `1` | `2` |
878
- | ---------------- | ------------------------------------------------------ | ------------------------------------------------------------------- | ---------------------------- |
879
- | `policy check` | No findings at the threshold. | One or more findings met the threshold. | Argument or runtime failure. |
880
- | `policy compare` | The policy file is at least as strict as the baseline. | The policy file is invalid, missing, or weaker than baseline rules. | Argument or runtime failure. |
881
- | `policy watch` | No findings and accepted hash is current. | Findings exist or accepted attestation is stale. | Argument or runtime failure. |
882
-
883
- ## Related
884
-
885
- - [Doctor lint mode](/cli/doctor#lint-mode)
886
- - [Path CLI](/cli/path)