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,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)