@provos/ironcurtain 0.10.0 → 0.12.0

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 (660) hide show
  1. package/README.md +68 -14
  2. package/dist/auth/oauth-provider.js +1 -4
  3. package/dist/auth/oauth-provider.js.map +1 -1
  4. package/dist/cli-help.d.ts +12 -0
  5. package/dist/cli-help.js +21 -0
  6. package/dist/cli-help.js.map +1 -1
  7. package/dist/cli.js +46 -6
  8. package/dist/cli.js.map +1 -1
  9. package/dist/config/agent-model-guard.d.ts +14 -0
  10. package/dist/config/agent-model-guard.js +24 -0
  11. package/dist/config/agent-model-guard.js.map +1 -0
  12. package/dist/config/config-command.js +277 -7
  13. package/dist/config/config-command.js.map +1 -1
  14. package/dist/config/first-start.js +62 -7
  15. package/dist/config/first-start.js.map +1 -1
  16. package/dist/config/generated/compiled-policy.json +528 -161
  17. package/dist/config/generated/test-scenarios.json +4810 -170
  18. package/dist/config/generated/tool-annotations.json +34 -47
  19. package/dist/config/index.d.ts +58 -0
  20. package/dist/config/index.js +97 -15
  21. package/dist/config/index.js.map +1 -1
  22. package/dist/config/mcp-servers.json +2 -2
  23. package/dist/config/model-provider.d.ts +9 -0
  24. package/dist/config/model-provider.js +13 -0
  25. package/dist/config/model-provider.js.map +1 -1
  26. package/dist/config/paths.d.ts +217 -0
  27. package/dist/config/paths.js +363 -14
  28. package/dist/config/paths.js.map +1 -1
  29. package/dist/config/types.d.ts +7 -1
  30. package/dist/config/user-config.d.ts +101 -6
  31. package/dist/config/user-config.js +145 -31
  32. package/dist/config/user-config.js.map +1 -1
  33. package/dist/config/validate-policy-dir.d.ts +10 -0
  34. package/dist/config/validate-policy-dir.js +59 -0
  35. package/dist/config/validate-policy-dir.js.map +1 -0
  36. package/dist/cron/job-commands.js +22 -2
  37. package/dist/cron/job-commands.js.map +1 -1
  38. package/dist/cron/types.d.ts +16 -2
  39. package/dist/cron/types.js +1 -3
  40. package/dist/cron/types.js.map +1 -1
  41. package/dist/daemon/daemon-command.js +30 -7
  42. package/dist/daemon/daemon-command.js.map +1 -1
  43. package/dist/daemon/ironcurtain-daemon.d.ts +62 -1
  44. package/dist/daemon/ironcurtain-daemon.js +231 -8
  45. package/dist/daemon/ironcurtain-daemon.js.map +1 -1
  46. package/dist/daemon-client/daemon-client.d.ts +123 -0
  47. package/dist/daemon-client/daemon-client.js +324 -0
  48. package/dist/daemon-client/daemon-client.js.map +1 -0
  49. package/dist/docker/adapters/claude-code.js +194 -20
  50. package/dist/docker/adapters/claude-code.js.map +1 -1
  51. package/dist/docker/adapters/codex.d.ts +9 -0
  52. package/dist/docker/adapters/codex.js +297 -0
  53. package/dist/docker/adapters/codex.js.map +1 -0
  54. package/dist/docker/adapters/goose.d.ts +12 -11
  55. package/dist/docker/adapters/goose.js +80 -27
  56. package/dist/docker/adapters/goose.js.map +1 -1
  57. package/dist/docker/agent-adapter.d.ts +183 -5
  58. package/dist/docker/agent-adapter.js +16 -0
  59. package/dist/docker/agent-adapter.js.map +1 -1
  60. package/dist/docker/agent-registry.js +5 -0
  61. package/dist/docker/agent-registry.js.map +1 -1
  62. package/dist/docker/apple-container-manager.d.ts +49 -0
  63. package/dist/docker/apple-container-manager.js +464 -0
  64. package/dist/docker/apple-container-manager.js.map +1 -0
  65. package/dist/docker/code-mode-proxy.d.ts +38 -0
  66. package/dist/docker/code-mode-proxy.js +6 -1
  67. package/dist/docker/code-mode-proxy.js.map +1 -1
  68. package/dist/docker/container-lifecycle.d.ts +2 -2
  69. package/dist/docker/container-lifecycle.js.map +1 -1
  70. package/dist/docker/container-runtime.d.ts +29 -0
  71. package/dist/docker/container-runtime.js +76 -0
  72. package/dist/docker/container-runtime.js.map +1 -0
  73. package/dist/docker/docker-agent-session.d.ts +113 -62
  74. package/dist/docker/docker-agent-session.js +271 -294
  75. package/dist/docker/docker-agent-session.js.map +1 -1
  76. package/dist/docker/docker-infrastructure.d.ts +428 -26
  77. package/dist/docker/docker-infrastructure.js +1005 -70
  78. package/dist/docker/docker-infrastructure.js.map +1 -1
  79. package/dist/docker/docker-manager.d.ts +58 -3
  80. package/dist/docker/docker-manager.js +378 -33
  81. package/dist/docker/docker-manager.js.map +1 -1
  82. package/dist/docker/docker-probe.d.ts +45 -0
  83. package/dist/docker/docker-probe.js +86 -0
  84. package/dist/docker/docker-probe.js.map +1 -0
  85. package/dist/docker/docker-progress-sink.d.ts +43 -0
  86. package/dist/docker/docker-progress-sink.js +299 -0
  87. package/dist/docker/docker-progress-sink.js.map +1 -0
  88. package/dist/docker/mitm-proxy.d.ts +135 -1
  89. package/dist/docker/mitm-proxy.js +611 -25
  90. package/dist/docker/mitm-proxy.js.map +1 -1
  91. package/dist/docker/network-topology.d.ts +81 -0
  92. package/dist/docker/network-topology.js +160 -0
  93. package/dist/docker/network-topology.js.map +1 -0
  94. package/dist/docker/oauth-credentials.d.ts +59 -3
  95. package/dist/docker/oauth-credentials.js +181 -14
  96. package/dist/docker/oauth-credentials.js.map +1 -1
  97. package/dist/docker/oauth-token-manager.js +2 -2
  98. package/dist/docker/oauth-token-manager.js.map +1 -1
  99. package/dist/docker/orientation.d.ts +1 -1
  100. package/dist/docker/package-types.d.ts +1 -1
  101. package/dist/docker/provider-config.d.ts +78 -3
  102. package/dist/docker/provider-config.js +295 -31
  103. package/dist/docker/provider-config.js.map +1 -1
  104. package/dist/docker/provision-lock.d.ts +46 -0
  105. package/dist/docker/provision-lock.js +152 -0
  106. package/dist/docker/provision-lock.js.map +1 -0
  107. package/dist/docker/proxy-tools.d.ts +0 -2
  108. package/dist/docker/proxy-tools.js +2 -7
  109. package/dist/docker/proxy-tools.js.map +1 -1
  110. package/dist/docker/pty-session.d.ts +64 -1
  111. package/dist/docker/pty-session.js +306 -104
  112. package/dist/docker/pty-session.js.map +1 -1
  113. package/dist/docker/pty-types.d.ts +0 -2
  114. package/dist/docker/pty-types.js +0 -2
  115. package/dist/docker/pty-types.js.map +1 -1
  116. package/dist/docker/registry-proxy.d.ts +46 -0
  117. package/dist/docker/registry-proxy.js +255 -1
  118. package/dist/docker/registry-proxy.js.map +1 -1
  119. package/dist/docker/resource-limits.d.ts +134 -0
  120. package/dist/docker/resource-limits.js +203 -0
  121. package/dist/docker/resource-limits.js.map +1 -0
  122. package/dist/docker/spawn-with-idle-timeout.d.ts +39 -0
  123. package/dist/docker/spawn-with-idle-timeout.js +152 -0
  124. package/dist/docker/spawn-with-idle-timeout.js.map +1 -0
  125. package/dist/docker/sse-extractor.d.ts +51 -0
  126. package/dist/docker/sse-extractor.js +303 -0
  127. package/dist/docker/sse-extractor.js.map +1 -0
  128. package/dist/docker/token-stream-bus.d.ts +83 -0
  129. package/dist/docker/token-stream-bus.js +98 -0
  130. package/dist/docker/token-stream-bus.js.map +1 -0
  131. package/dist/docker/token-stream-types.d.ts +71 -0
  132. package/dist/docker/token-stream-types.js +8 -0
  133. package/dist/docker/token-stream-types.js.map +1 -0
  134. package/dist/docker/trajectory-capture.d.ts +79 -0
  135. package/dist/docker/trajectory-capture.js +521 -0
  136. package/dist/docker/trajectory-capture.js.map +1 -0
  137. package/dist/docker/trajectory-reassembler.d.ts +286 -0
  138. package/dist/docker/trajectory-reassembler.js +990 -0
  139. package/dist/docker/trajectory-reassembler.js.map +1 -0
  140. package/dist/docker/trajectory-tap.d.ts +100 -0
  141. package/dist/docker/trajectory-tap.js +410 -0
  142. package/dist/docker/trajectory-tap.js.map +1 -0
  143. package/dist/docker/trajectory-types.d.ts +187 -0
  144. package/dist/docker/trajectory-types.js +43 -0
  145. package/dist/docker/trajectory-types.js.map +1 -0
  146. package/dist/docker/types.d.ts +105 -12
  147. package/dist/doctor/checks.d.ts +171 -0
  148. package/dist/doctor/checks.js +598 -0
  149. package/dist/doctor/checks.js.map +1 -0
  150. package/dist/doctor/doctor-command.d.ts +29 -0
  151. package/dist/doctor/doctor-command.js +190 -0
  152. package/dist/doctor/doctor-command.js.map +1 -0
  153. package/dist/doctor/mcp-liveness.d.ts +28 -0
  154. package/dist/doctor/mcp-liveness.js +92 -0
  155. package/dist/doctor/mcp-liveness.js.map +1 -0
  156. package/dist/doctor/oauth-checks.d.ts +23 -0
  157. package/dist/doctor/oauth-checks.js +157 -0
  158. package/dist/doctor/oauth-checks.js.map +1 -0
  159. package/dist/doctor/output.d.ts +26 -0
  160. package/dist/doctor/output.js +82 -0
  161. package/dist/doctor/output.js.map +1 -0
  162. package/dist/escalation/listener-command.js +0 -3
  163. package/dist/escalation/listener-command.js.map +1 -1
  164. package/dist/event-bus/typed-event-bus.d.ts +26 -0
  165. package/dist/event-bus/typed-event-bus.js +35 -0
  166. package/dist/event-bus/typed-event-bus.js.map +1 -0
  167. package/dist/index.js +54 -21
  168. package/dist/index.js.map +1 -1
  169. package/dist/logger.js +31 -2
  170. package/dist/logger.js.map +1 -1
  171. package/dist/memory/auto-save.d.ts +18 -4
  172. package/dist/memory/auto-save.js +46 -6
  173. package/dist/memory/auto-save.js.map +1 -1
  174. package/dist/memory/memory-policy.d.ts +41 -0
  175. package/dist/memory/memory-policy.js +36 -0
  176. package/dist/memory/memory-policy.js.map +1 -0
  177. package/dist/mux/mux-app.d.ts +2 -0
  178. package/dist/mux/mux-app.js +1 -0
  179. package/dist/mux/mux-app.js.map +1 -1
  180. package/dist/mux/mux-command.d.ts +10 -1
  181. package/dist/mux/mux-command.js +74 -40
  182. package/dist/mux/mux-command.js.map +1 -1
  183. package/dist/mux/mux-renderer.js +2 -12
  184. package/dist/mux/mux-renderer.js.map +1 -1
  185. package/dist/mux/pty-bridge.d.ts +2 -0
  186. package/dist/mux/pty-bridge.js +3 -0
  187. package/dist/mux/pty-bridge.js.map +1 -1
  188. package/dist/mux/session-scanner.js +1 -2
  189. package/dist/mux/session-scanner.js.map +1 -1
  190. package/dist/{pipeline → observability}/llm-logger.d.ts +8 -3
  191. package/dist/{pipeline → observability}/llm-logger.js +8 -3
  192. package/dist/observability/llm-logger.js.map +1 -0
  193. package/dist/observe/observe-command.d.ts +12 -0
  194. package/dist/observe/observe-command.js +285 -0
  195. package/dist/observe/observe-command.js.map +1 -0
  196. package/dist/observe/observe-renderer.d.ts +24 -0
  197. package/dist/observe/observe-renderer.js +87 -0
  198. package/dist/observe/observe-renderer.js.map +1 -0
  199. package/dist/observe/observe-tui-rain.d.ts +42 -0
  200. package/dist/observe/observe-tui-rain.js +531 -0
  201. package/dist/observe/observe-tui-rain.js.map +1 -0
  202. package/dist/observe/observe-tui-text-panel.d.ts +46 -0
  203. package/dist/observe/observe-tui-text-panel.js +525 -0
  204. package/dist/observe/observe-tui-text-panel.js.map +1 -0
  205. package/dist/observe/observe-tui-types.d.ts +270 -0
  206. package/dist/observe/observe-tui-types.js +200 -0
  207. package/dist/observe/observe-tui-types.js.map +1 -0
  208. package/dist/observe/observe-tui-word-scorer.d.ts +143 -0
  209. package/dist/observe/observe-tui-word-scorer.js +572 -0
  210. package/dist/observe/observe-tui-word-scorer.js.map +1 -0
  211. package/dist/observe/observe-tui.d.ts +59 -0
  212. package/dist/observe/observe-tui.js +592 -0
  213. package/dist/observe/observe-tui.js.map +1 -0
  214. package/dist/persona/broad-policy-validator.d.ts +95 -0
  215. package/dist/persona/broad-policy-validator.js +171 -0
  216. package/dist/persona/broad-policy-validator.js.map +1 -0
  217. package/dist/persona/compile-persona-policy.d.ts +54 -2
  218. package/dist/persona/compile-persona-policy.js +29 -4
  219. package/dist/persona/compile-persona-policy.js.map +1 -1
  220. package/dist/persona/event-bus-progress-reporter.d.ts +57 -0
  221. package/dist/persona/event-bus-progress-reporter.js +66 -0
  222. package/dist/persona/event-bus-progress-reporter.js.map +1 -0
  223. package/dist/persona/memory-gate.d.ts +19 -0
  224. package/dist/persona/memory-gate.js +33 -0
  225. package/dist/persona/memory-gate.js.map +1 -0
  226. package/dist/persona/persona-command.js +77 -72
  227. package/dist/persona/persona-command.js.map +1 -1
  228. package/dist/persona/persona-compile-orchestrator.d.ts +101 -0
  229. package/dist/persona/persona-compile-orchestrator.js +504 -0
  230. package/dist/persona/persona-compile-orchestrator.js.map +1 -0
  231. package/dist/persona/persona-service.d.ts +137 -0
  232. package/dist/persona/persona-service.js +263 -0
  233. package/dist/persona/persona-service.js.map +1 -0
  234. package/dist/persona/policy-mutation-audit.d.ts +109 -0
  235. package/dist/persona/policy-mutation-audit.js +179 -0
  236. package/dist/persona/policy-mutation-audit.js.map +1 -0
  237. package/dist/persona/resolve.d.ts +22 -0
  238. package/dist/persona/resolve.js +45 -2
  239. package/dist/persona/resolve.js.map +1 -1
  240. package/dist/persona/rule-delta.d.ts +30 -0
  241. package/dist/persona/rule-delta.js +82 -0
  242. package/dist/persona/rule-delta.js.map +1 -0
  243. package/dist/persona/types.d.ts +28 -0
  244. package/dist/pipeline/annotate.js +10 -2
  245. package/dist/pipeline/annotate.js.map +1 -1
  246. package/dist/pipeline/compile.js +14 -2
  247. package/dist/pipeline/compile.js.map +1 -1
  248. package/dist/pipeline/constitution-compiler.d.ts +25 -14
  249. package/dist/pipeline/constitution-compiler.js +107 -38
  250. package/dist/pipeline/constitution-compiler.js.map +1 -1
  251. package/dist/pipeline/dynamic-list-types.d.ts +3 -6
  252. package/dist/pipeline/dynamic-list-types.js +3 -16
  253. package/dist/pipeline/dynamic-list-types.js.map +1 -1
  254. package/dist/pipeline/pipeline-runner.d.ts +63 -4
  255. package/dist/pipeline/pipeline-runner.js +242 -94
  256. package/dist/pipeline/pipeline-runner.js.map +1 -1
  257. package/dist/pipeline/pipeline-shared.d.ts +33 -4
  258. package/dist/pipeline/pipeline-shared.js +79 -19
  259. package/dist/pipeline/pipeline-shared.js.map +1 -1
  260. package/dist/pipeline/policy-verifier.js +16 -3
  261. package/dist/pipeline/policy-verifier.js.map +1 -1
  262. package/dist/pipeline/proxy-mcp-connections.js +17 -2
  263. package/dist/pipeline/proxy-mcp-connections.js.map +1 -1
  264. package/dist/pipeline/refresh-lists.js +3 -5
  265. package/dist/pipeline/refresh-lists.js.map +1 -1
  266. package/dist/pipeline/scenario-generator.d.ts +4 -8
  267. package/dist/pipeline/scenario-generator.js +13 -46
  268. package/dist/pipeline/scenario-generator.js.map +1 -1
  269. package/dist/sandbox/index.d.ts +29 -0
  270. package/dist/sandbox/index.js +351 -119
  271. package/dist/sandbox/index.js.map +1 -1
  272. package/dist/sandbox/ironcurtain-protocol.d.ts +52 -0
  273. package/dist/sandbox/ironcurtain-protocol.js +185 -0
  274. package/dist/sandbox/ironcurtain-protocol.js.map +1 -0
  275. package/dist/session/agent-session.d.ts +6 -0
  276. package/dist/session/agent-session.js +16 -5
  277. package/dist/session/agent-session.js.map +1 -1
  278. package/dist/session/cli-transport.js +0 -6
  279. package/dist/session/cli-transport.js.map +1 -1
  280. package/dist/session/index.d.ts +35 -14
  281. package/dist/session/index.js +333 -130
  282. package/dist/session/index.js.map +1 -1
  283. package/dist/session/preflight.d.ts +21 -13
  284. package/dist/session/preflight.js +227 -88
  285. package/dist/session/preflight.js.map +1 -1
  286. package/dist/session/prompts.d.ts +2 -5
  287. package/dist/session/prompts.js.map +1 -1
  288. package/dist/session/session-manager.d.ts +61 -6
  289. package/dist/session/session-manager.js +72 -10
  290. package/dist/session/session-manager.js.map +1 -1
  291. package/dist/session/session-metadata.d.ts +21 -5
  292. package/dist/session/session-metadata.js +34 -12
  293. package/dist/session/session-metadata.js.map +1 -1
  294. package/dist/session/types.d.ts +320 -5
  295. package/dist/session/types.js +57 -1
  296. package/dist/session/types.js.map +1 -1
  297. package/dist/signal/bot-command.js +6 -1
  298. package/dist/signal/bot-command.js.map +1 -1
  299. package/dist/signal/setup-signal.js +13 -21
  300. package/dist/signal/setup-signal.js.map +1 -1
  301. package/dist/signal/signal-bot-daemon.d.ts +16 -1
  302. package/dist/signal/signal-bot-daemon.js +39 -27
  303. package/dist/signal/signal-bot-daemon.js.map +1 -1
  304. package/dist/signal/signal-container.d.ts +3 -3
  305. package/dist/signal/signal-container.js +9 -3
  306. package/dist/signal/signal-container.js.map +1 -1
  307. package/dist/skills/discovery.d.ts +77 -0
  308. package/dist/skills/discovery.js +206 -0
  309. package/dist/skills/discovery.js.map +1 -0
  310. package/dist/skills/index.d.ts +4 -0
  311. package/dist/skills/index.js +3 -0
  312. package/dist/skills/index.js.map +1 -0
  313. package/dist/skills/staging.d.ts +28 -0
  314. package/dist/skills/staging.js +68 -0
  315. package/dist/skills/staging.js.map +1 -0
  316. package/dist/skills/types.d.ts +46 -0
  317. package/dist/skills/types.js +2 -0
  318. package/dist/skills/types.js.map +1 -0
  319. package/dist/trusted-process/approval-whitelist.d.ts +0 -2
  320. package/dist/trusted-process/approval-whitelist.js +17 -17
  321. package/dist/trusted-process/approval-whitelist.js.map +1 -1
  322. package/dist/trusted-process/async-mutex.d.ts +32 -0
  323. package/dist/trusted-process/async-mutex.js +50 -0
  324. package/dist/trusted-process/async-mutex.js.map +1 -0
  325. package/dist/trusted-process/audit-log.d.ts +38 -1
  326. package/dist/trusted-process/audit-log.js +82 -13
  327. package/dist/trusted-process/audit-log.js.map +1 -1
  328. package/dist/trusted-process/call-circuit-breaker.d.ts +6 -0
  329. package/dist/trusted-process/call-circuit-breaker.js +23 -3
  330. package/dist/trusted-process/call-circuit-breaker.js.map +1 -1
  331. package/dist/trusted-process/container-command.d.ts +35 -0
  332. package/dist/trusted-process/container-command.js +49 -0
  333. package/dist/trusted-process/container-command.js.map +1 -0
  334. package/dist/trusted-process/control-server.d.ts +101 -0
  335. package/dist/trusted-process/control-server.js +282 -0
  336. package/dist/trusted-process/control-server.js.map +1 -0
  337. package/dist/trusted-process/domain-utils.d.ts +6 -6
  338. package/dist/trusted-process/domain-utils.js +7 -23
  339. package/dist/trusted-process/domain-utils.js.map +1 -1
  340. package/dist/trusted-process/error-prefixes.d.ts +16 -0
  341. package/dist/trusted-process/error-prefixes.js +17 -0
  342. package/dist/trusted-process/error-prefixes.js.map +1 -0
  343. package/dist/trusted-process/index.d.ts +40 -23
  344. package/dist/trusted-process/index.js +131 -225
  345. package/dist/trusted-process/index.js.map +1 -1
  346. package/dist/trusted-process/list-matcher.d.ts +17 -0
  347. package/dist/trusted-process/list-matcher.js +31 -0
  348. package/dist/trusted-process/list-matcher.js.map +1 -0
  349. package/dist/trusted-process/mcp-client-manager.d.ts +35 -6
  350. package/dist/trusted-process/mcp-client-manager.js +40 -45
  351. package/dist/trusted-process/mcp-client-manager.js.map +1 -1
  352. package/dist/trusted-process/mcp-proxy-server.d.ts +31 -120
  353. package/dist/trusted-process/mcp-proxy-server.js +201 -660
  354. package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
  355. package/dist/trusted-process/policy-engine.d.ts +16 -4
  356. package/dist/trusted-process/policy-engine.js +103 -47
  357. package/dist/trusted-process/policy-engine.js.map +1 -1
  358. package/dist/trusted-process/policy-roots.d.ts +6 -0
  359. package/dist/trusted-process/policy-roots.js +20 -0
  360. package/dist/trusted-process/policy-roots.js.map +1 -1
  361. package/dist/trusted-process/sandbox-integration.d.ts +12 -0
  362. package/dist/trusted-process/sandbox-integration.js +18 -0
  363. package/dist/trusted-process/sandbox-integration.js.map +1 -1
  364. package/dist/trusted-process/tcp-server-transport.d.ts +12 -1
  365. package/dist/trusted-process/tcp-server-transport.js +9 -1
  366. package/dist/trusted-process/tcp-server-transport.js.map +1 -1
  367. package/dist/trusted-process/tool-call-coordinator.d.ts +283 -0
  368. package/dist/trusted-process/tool-call-coordinator.js +592 -0
  369. package/dist/trusted-process/tool-call-coordinator.js.map +1 -0
  370. package/dist/trusted-process/tool-call-pipeline.d.ts +213 -0
  371. package/dist/trusted-process/tool-call-pipeline.js +832 -0
  372. package/dist/trusted-process/tool-call-pipeline.js.map +1 -0
  373. package/dist/trusted-process/tool-description-hints.d.ts +1 -1
  374. package/dist/types/argument-roles.d.ts +1 -1
  375. package/dist/types/argument-roles.js +14 -1
  376. package/dist/types/argument-roles.js.map +1 -1
  377. package/dist/types/audit.d.ts +9 -0
  378. package/dist/{session → types}/errors.d.ts +8 -2
  379. package/dist/{session → types}/errors.js +8 -2
  380. package/dist/types/errors.js.map +1 -0
  381. package/dist/types/reserved-servers.d.ts +11 -0
  382. package/dist/types/reserved-servers.js +12 -0
  383. package/dist/types/reserved-servers.js.map +1 -0
  384. package/dist/types/server-listing.d.ts +14 -0
  385. package/dist/types/server-listing.js +2 -0
  386. package/dist/types/server-listing.js.map +1 -0
  387. package/dist/types/slug.d.ts +2 -0
  388. package/dist/types/slug.js +2 -0
  389. package/dist/types/slug.js.map +1 -1
  390. package/dist/types/url-normalize.d.ts +16 -0
  391. package/dist/types/url-normalize.js +33 -0
  392. package/dist/types/url-normalize.js.map +1 -0
  393. package/dist/util/atomic-write.d.ts +31 -0
  394. package/dist/util/atomic-write.js +43 -0
  395. package/dist/util/atomic-write.js.map +1 -0
  396. package/dist/utils/error-message.d.ts +8 -0
  397. package/dist/utils/error-message.js +11 -0
  398. package/dist/utils/error-message.js.map +1 -0
  399. package/dist/utils/exec-error.d.ts +19 -0
  400. package/dist/utils/exec-error.js +16 -0
  401. package/dist/utils/exec-error.js.map +1 -0
  402. package/dist/utils/is-plain-object.d.ts +7 -0
  403. package/dist/utils/is-plain-object.js +12 -0
  404. package/dist/utils/is-plain-object.js.map +1 -0
  405. package/dist/utils/preflight-checks.d.ts +16 -0
  406. package/dist/utils/preflight-checks.js +178 -0
  407. package/dist/utils/preflight-checks.js.map +1 -0
  408. package/dist/web-ui/__tests__/json-rpc-dispatch.test.d.ts +7 -0
  409. package/dist/web-ui/__tests__/json-rpc-dispatch.test.js +725 -0
  410. package/dist/web-ui/__tests__/json-rpc-dispatch.test.js.map +1 -0
  411. package/dist/web-ui/conn-registry.d.ts +14 -0
  412. package/dist/web-ui/conn-registry.js +25 -0
  413. package/dist/web-ui/conn-registry.js.map +1 -0
  414. package/dist/web-ui/dispatch/escalation-dispatch.d.ts +7 -0
  415. package/dist/web-ui/dispatch/escalation-dispatch.js +52 -0
  416. package/dist/web-ui/dispatch/escalation-dispatch.js.map +1 -0
  417. package/dist/web-ui/dispatch/job-dispatch.d.ts +8 -0
  418. package/dist/web-ui/dispatch/job-dispatch.js +83 -0
  419. package/dist/web-ui/dispatch/job-dispatch.js.map +1 -0
  420. package/dist/web-ui/dispatch/persona-dispatch.d.ts +50 -0
  421. package/dist/web-ui/dispatch/persona-dispatch.js +269 -0
  422. package/dist/web-ui/dispatch/persona-dispatch.js.map +1 -0
  423. package/dist/web-ui/dispatch/session-dispatch.d.ts +9 -0
  424. package/dist/web-ui/dispatch/session-dispatch.js +219 -0
  425. package/dist/web-ui/dispatch/session-dispatch.js.map +1 -0
  426. package/dist/web-ui/dispatch/token-stream-dispatch.d.ts +15 -0
  427. package/dist/web-ui/dispatch/token-stream-dispatch.js +55 -0
  428. package/dist/web-ui/dispatch/token-stream-dispatch.js.map +1 -0
  429. package/dist/web-ui/dispatch/types.d.ts +54 -0
  430. package/dist/web-ui/dispatch/types.js +72 -0
  431. package/dist/web-ui/dispatch/types.js.map +1 -0
  432. package/dist/web-ui/dispatch/workflow-dispatch.d.ts +103 -0
  433. package/dist/web-ui/dispatch/workflow-dispatch.js +1036 -0
  434. package/dist/web-ui/dispatch/workflow-dispatch.js.map +1 -0
  435. package/dist/web-ui/json-rpc-dispatch.d.ts +12 -0
  436. package/dist/web-ui/json-rpc-dispatch.js +34 -0
  437. package/dist/web-ui/json-rpc-dispatch.js.map +1 -0
  438. package/dist/web-ui/state-graph.d.ts +13 -0
  439. package/dist/web-ui/state-graph.js +82 -0
  440. package/dist/web-ui/state-graph.js.map +1 -0
  441. package/dist/web-ui/token-stream-bridge.d.ts +76 -0
  442. package/dist/web-ui/token-stream-bridge.js +265 -0
  443. package/dist/web-ui/token-stream-bridge.js.map +1 -0
  444. package/dist/web-ui/web-event-bus.d.ts +176 -0
  445. package/dist/web-ui/web-event-bus.js +19 -0
  446. package/dist/web-ui/web-event-bus.js.map +1 -0
  447. package/dist/web-ui/web-session-transport.d.ts +31 -0
  448. package/dist/web-ui/web-session-transport.js +109 -0
  449. package/dist/web-ui/web-session-transport.js.map +1 -0
  450. package/dist/web-ui/web-ui-server.d.ts +90 -0
  451. package/dist/web-ui/web-ui-server.js +477 -0
  452. package/dist/web-ui/web-ui-server.js.map +1 -0
  453. package/dist/web-ui/web-ui-types.d.ts +418 -0
  454. package/dist/web-ui/web-ui-types.js +32 -0
  455. package/dist/web-ui/web-ui-types.js.map +1 -0
  456. package/dist/web-ui/ws-utils.d.ts +5 -0
  457. package/dist/web-ui/ws-utils.js +12 -0
  458. package/dist/web-ui/ws-utils.js.map +1 -0
  459. package/dist/web-ui-static/assets/index-BD5U6ILh.css +1 -0
  460. package/dist/web-ui-static/assets/index-FMsHWEfK.js +79 -0
  461. package/dist/web-ui-static/assets/orbitron-latin-700-normal-4jsRXGGJ.woff2 +0 -0
  462. package/dist/web-ui-static/assets/orbitron-latin-700-normal-DmYOh-W9.woff +0 -0
  463. package/dist/web-ui-static/index.html +14 -0
  464. package/dist/workflow/artifacts.d.ts +59 -0
  465. package/dist/workflow/artifacts.js +188 -0
  466. package/dist/workflow/artifacts.js.map +1 -0
  467. package/dist/workflow/checkpoint-selection.d.ts +34 -0
  468. package/dist/workflow/checkpoint-selection.js +48 -0
  469. package/dist/workflow/checkpoint-selection.js.map +1 -0
  470. package/dist/workflow/checkpoint.d.ts +35 -0
  471. package/dist/workflow/checkpoint.js +84 -0
  472. package/dist/workflow/checkpoint.js.map +1 -0
  473. package/dist/workflow/cli-shared.d.ts +62 -0
  474. package/dist/workflow/cli-shared.js +117 -0
  475. package/dist/workflow/cli-shared.js.map +1 -0
  476. package/dist/workflow/cli-support.d.ts +92 -0
  477. package/dist/workflow/cli-support.js +421 -0
  478. package/dist/workflow/cli-support.js.map +1 -0
  479. package/dist/workflow/container-snapshots.d.ts +29 -0
  480. package/dist/workflow/container-snapshots.js +137 -0
  481. package/dist/workflow/container-snapshots.js.map +1 -0
  482. package/dist/workflow/daemon-gate-commands.d.ts +21 -0
  483. package/dist/workflow/daemon-gate-commands.js +599 -0
  484. package/dist/workflow/daemon-gate-commands.js.map +1 -0
  485. package/dist/workflow/definition-loader.d.ts +32 -0
  486. package/dist/workflow/definition-loader.js +56 -0
  487. package/dist/workflow/definition-loader.js.map +1 -0
  488. package/dist/workflow/discovery.d.ts +107 -0
  489. package/dist/workflow/discovery.js +263 -0
  490. package/dist/workflow/discovery.js.map +1 -0
  491. package/dist/workflow/errors.d.ts +66 -0
  492. package/dist/workflow/errors.js +49 -0
  493. package/dist/workflow/errors.js.map +1 -0
  494. package/dist/workflow/guards.d.ts +8 -0
  495. package/dist/workflow/guards.js +38 -0
  496. package/dist/workflow/guards.js.map +1 -0
  497. package/dist/workflow/lane-template.d.ts +89 -0
  498. package/dist/workflow/lane-template.js +141 -0
  499. package/dist/workflow/lane-template.js.map +1 -0
  500. package/dist/workflow/lint-integration.d.ts +64 -0
  501. package/dist/workflow/lint-integration.js +56 -0
  502. package/dist/workflow/lint-integration.js.map +1 -0
  503. package/dist/workflow/lint.d.ts +72 -0
  504. package/dist/workflow/lint.js +593 -0
  505. package/dist/workflow/lint.js.map +1 -0
  506. package/dist/workflow/machine-builder.d.ts +178 -0
  507. package/dist/workflow/machine-builder.js +678 -0
  508. package/dist/workflow/machine-builder.js.map +1 -0
  509. package/dist/workflow/message-log.d.ts +99 -0
  510. package/dist/workflow/message-log.js +40 -0
  511. package/dist/workflow/message-log.js.map +1 -0
  512. package/dist/workflow/orchestrator.d.ts +954 -0
  513. package/dist/workflow/orchestrator.js +3594 -0
  514. package/dist/workflow/orchestrator.js.map +1 -0
  515. package/dist/workflow/prompt-builder.d.ts +39 -0
  516. package/dist/workflow/prompt-builder.js +243 -0
  517. package/dist/workflow/prompt-builder.js.map +1 -0
  518. package/dist/workflow/run-state-command.d.ts +9 -0
  519. package/dist/workflow/run-state-command.js +414 -0
  520. package/dist/workflow/run-state-command.js.map +1 -0
  521. package/dist/workflow/run-state-debug-capture.d.ts +40 -0
  522. package/dist/workflow/run-state-debug-capture.js +101 -0
  523. package/dist/workflow/run-state-debug-capture.js.map +1 -0
  524. package/dist/workflow/status-parser.d.ts +68 -0
  525. package/dist/workflow/status-parser.js +274 -0
  526. package/dist/workflow/status-parser.js.map +1 -0
  527. package/dist/workflow/types.d.ts +598 -0
  528. package/dist/workflow/types.js +85 -0
  529. package/dist/workflow/types.js.map +1 -0
  530. package/dist/workflow/validate.d.ts +80 -0
  531. package/dist/workflow/validate.js +788 -0
  532. package/dist/workflow/validate.js.map +1 -0
  533. package/dist/workflow/workflow-command.d.ts +9 -0
  534. package/dist/workflow/workflow-command.js +670 -0
  535. package/dist/workflow/workflow-command.js.map +1 -0
  536. package/dist/workflow/workflow-discovery.d.ts +27 -0
  537. package/dist/workflow/workflow-discovery.js +121 -0
  538. package/dist/workflow/workflow-discovery.js.map +1 -0
  539. package/dist/workflow/workflow-manager.d.ts +156 -0
  540. package/dist/workflow/workflow-manager.js +359 -0
  541. package/dist/workflow/workflow-manager.js.map +1 -0
  542. package/dist/workflow/workflows/design-and-code/README.md +50 -0
  543. package/dist/workflow/workflows/design-and-code/workflow.yaml +169 -0
  544. package/dist/workflow/workflows/deterministic-eval-smoke/scripts/format_report.js +29 -0
  545. package/dist/workflow/workflows/deterministic-eval-smoke/scripts/package.json +5 -0
  546. package/dist/workflow/workflows/deterministic-eval-smoke/scripts/requirements.txt +1 -0
  547. package/dist/workflow/workflows/deterministic-eval-smoke/scripts/run_eval.py +41 -0
  548. package/dist/workflow/workflows/deterministic-eval-smoke/workflow.yaml +57 -0
  549. package/dist/workflow/workflows/deterministic-verdict-smoke/scripts/classify.py +18 -0
  550. package/dist/workflow/workflows/deterministic-verdict-smoke/workflow.yaml +51 -0
  551. package/dist/workflow/workflows/evolve/scripts/LICENSE +201 -0
  552. package/dist/workflow/workflows/evolve/scripts/README.md +314 -0
  553. package/dist/workflow/workflows/evolve/scripts/evolve-brief +16 -0
  554. package/dist/workflow/workflows/evolve/scripts/evolve-cognition +16 -0
  555. package/dist/workflow/workflows/evolve/scripts/evolve-db +16 -0
  556. package/dist/workflow/workflows/evolve/scripts/evolve-eval +16 -0
  557. package/dist/workflow/workflows/evolve/scripts/evolve-files +16 -0
  558. package/dist/workflow/workflows/evolve/scripts/evolve-summary +16 -0
  559. package/dist/workflow/workflows/evolve/scripts/evolve_core/__init__.py +14 -0
  560. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/__init__.py +17 -0
  561. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/base.py +21 -0
  562. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/factory.py +90 -0
  563. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/greedy.py +17 -0
  564. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/island.py +316 -0
  565. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/random.py +18 -0
  566. package/dist/workflow/workflows/evolve/scripts/evolve_core/algorithms/ucb1.py +55 -0
  567. package/dist/workflow/workflows/evolve/scripts/evolve_core/best_snapshot.py +62 -0
  568. package/dist/workflow/workflows/evolve/scripts/evolve_core/cli.py +752 -0
  569. package/dist/workflow/workflows/evolve/scripts/evolve_core/cognition.py +127 -0
  570. package/dist/workflow/workflows/evolve/scripts/evolve_core/database.py +218 -0
  571. package/dist/workflow/workflows/evolve/scripts/evolve_core/diff.py +57 -0
  572. package/dist/workflow/workflows/evolve/scripts/evolve_core/embedding.py +84 -0
  573. package/dist/workflow/workflows/evolve/scripts/evolve_core/file_lock.py +45 -0
  574. package/dist/workflow/workflows/evolve/scripts/evolve_core/run_state.py +343 -0
  575. package/dist/workflow/workflows/evolve/scripts/evolve_core/sampling_config.py +173 -0
  576. package/dist/workflow/workflows/evolve/scripts/evolve_core/structures.py +93 -0
  577. package/dist/workflow/workflows/evolve/scripts/evolve_core/vector_index.py +191 -0
  578. package/dist/workflow/workflows/evolve/scripts/evolve_result.py +1503 -0
  579. package/dist/workflow/workflows/evolve/scripts/requirements.txt +2 -0
  580. package/dist/workflow/workflows/evolve/workflow.yaml +646 -0
  581. package/dist/workflow/workflows/test-email-summary/skills/email-formatting/SKILL.md +55 -0
  582. package/dist/workflow/workflows/test-email-summary/skills/gmail-query-syntax/SKILL.md +63 -0
  583. package/dist/workflow/workflows/test-email-summary/skills/json-schema-emails/SKILL.md +41 -0
  584. package/dist/workflow/workflows/test-email-summary/skills/json-schema-emails/schema.json +34 -0
  585. package/dist/workflow/workflows/test-email-summary/skills/summary-style-guide/SKILL.md +51 -0
  586. package/dist/workflow/workflows/test-email-summary/workflow.yaml +90 -0
  587. package/dist/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +206 -0
  588. package/dist/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +167 -0
  589. package/dist/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +189 -0
  590. package/dist/workflow/workflows/vuln-discovery/workflow.yaml +925 -0
  591. package/dist/workflow/worktree.d.ts +43 -0
  592. package/dist/workflow/worktree.js +106 -0
  593. package/dist/workflow/worktree.js.map +1 -0
  594. package/docker/Dockerfile.base +31 -0
  595. package/docker/Dockerfile.base.arm64 +27 -0
  596. package/docker/Dockerfile.claude-code +3 -1
  597. package/docker/Dockerfile.codex +17 -0
  598. package/docker/Dockerfile.goose +3 -1
  599. package/docker/entrypoint-claude-code.sh +7 -0
  600. package/docker/entrypoint-codex.sh +42 -0
  601. package/docker/entrypoint-goose.sh +6 -0
  602. package/docker/entrypoint-uid-remap.sh +93 -0
  603. package/package.json +27 -11
  604. package/packages/web-ui/README.md +113 -0
  605. package/packages/web-ui/docs/workflow-state-machine.png +0 -0
  606. package/src/config/generated/compiled-policy.json +528 -161
  607. package/src/config/generated/test-scenarios.json +4810 -170
  608. package/src/config/generated/tool-annotations.json +34 -47
  609. package/src/config/mcp-servers.json +2 -2
  610. package/src/workflow/workflows/design-and-code/README.md +50 -0
  611. package/src/workflow/workflows/design-and-code/workflow.yaml +169 -0
  612. package/src/workflow/workflows/deterministic-eval-smoke/scripts/format_report.js +29 -0
  613. package/src/workflow/workflows/deterministic-eval-smoke/scripts/package.json +5 -0
  614. package/src/workflow/workflows/deterministic-eval-smoke/scripts/requirements.txt +1 -0
  615. package/src/workflow/workflows/deterministic-eval-smoke/scripts/run_eval.py +41 -0
  616. package/src/workflow/workflows/deterministic-eval-smoke/workflow.yaml +57 -0
  617. package/src/workflow/workflows/deterministic-verdict-smoke/scripts/classify.py +18 -0
  618. package/src/workflow/workflows/deterministic-verdict-smoke/workflow.yaml +51 -0
  619. package/src/workflow/workflows/evolve/scripts/LICENSE +201 -0
  620. package/src/workflow/workflows/evolve/scripts/README.md +314 -0
  621. package/src/workflow/workflows/evolve/scripts/evolve-brief +16 -0
  622. package/src/workflow/workflows/evolve/scripts/evolve-cognition +16 -0
  623. package/src/workflow/workflows/evolve/scripts/evolve-db +16 -0
  624. package/src/workflow/workflows/evolve/scripts/evolve-eval +16 -0
  625. package/src/workflow/workflows/evolve/scripts/evolve-files +16 -0
  626. package/src/workflow/workflows/evolve/scripts/evolve-summary +16 -0
  627. package/src/workflow/workflows/evolve/scripts/evolve_core/__init__.py +14 -0
  628. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/__init__.py +17 -0
  629. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/base.py +21 -0
  630. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/factory.py +90 -0
  631. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/greedy.py +17 -0
  632. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/island.py +316 -0
  633. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/random.py +18 -0
  634. package/src/workflow/workflows/evolve/scripts/evolve_core/algorithms/ucb1.py +55 -0
  635. package/src/workflow/workflows/evolve/scripts/evolve_core/best_snapshot.py +62 -0
  636. package/src/workflow/workflows/evolve/scripts/evolve_core/cli.py +752 -0
  637. package/src/workflow/workflows/evolve/scripts/evolve_core/cognition.py +127 -0
  638. package/src/workflow/workflows/evolve/scripts/evolve_core/database.py +218 -0
  639. package/src/workflow/workflows/evolve/scripts/evolve_core/diff.py +57 -0
  640. package/src/workflow/workflows/evolve/scripts/evolve_core/embedding.py +84 -0
  641. package/src/workflow/workflows/evolve/scripts/evolve_core/file_lock.py +45 -0
  642. package/src/workflow/workflows/evolve/scripts/evolve_core/run_state.py +343 -0
  643. package/src/workflow/workflows/evolve/scripts/evolve_core/sampling_config.py +173 -0
  644. package/src/workflow/workflows/evolve/scripts/evolve_core/structures.py +93 -0
  645. package/src/workflow/workflows/evolve/scripts/evolve_core/vector_index.py +191 -0
  646. package/src/workflow/workflows/evolve/scripts/evolve_result.py +1503 -0
  647. package/src/workflow/workflows/evolve/scripts/requirements.txt +2 -0
  648. package/src/workflow/workflows/evolve/workflow.yaml +646 -0
  649. package/src/workflow/workflows/test-email-summary/skills/email-formatting/SKILL.md +55 -0
  650. package/src/workflow/workflows/test-email-summary/skills/gmail-query-syntax/SKILL.md +63 -0
  651. package/src/workflow/workflows/test-email-summary/skills/json-schema-emails/SKILL.md +41 -0
  652. package/src/workflow/workflows/test-email-summary/skills/json-schema-emails/schema.json +34 -0
  653. package/src/workflow/workflows/test-email-summary/skills/summary-style-guide/SKILL.md +51 -0
  654. package/src/workflow/workflows/test-email-summary/workflow.yaml +90 -0
  655. package/src/workflow/workflows/vuln-discovery/skills/harness-design-fuzzing/SKILL.md +206 -0
  656. package/src/workflow/workflows/vuln-discovery/skills/memory-safety-c-cpp/SKILL.md +167 -0
  657. package/src/workflow/workflows/vuln-discovery/skills/vulnerability-triage/SKILL.md +189 -0
  658. package/src/workflow/workflows/vuln-discovery/workflow.yaml +925 -0
  659. package/dist/pipeline/llm-logger.js.map +0 -1
  660. package/dist/session/errors.js.map +0 -1
@@ -1,322 +1,686 @@
1
1
  {
2
- "generatedAt": "2026-02-28T01:50:08.635Z",
3
- "constitutionHash": "8e2f1144f44b0f864e70b161e6abf898bf7ac7540e2aeb6df11abbbbfcb9c34c",
4
- "inputHash": "97a4159c0149574f357fdac5b8046d3ea51006a4e8a3c5f1a3cf0ab3afdcd6e6",
2
+ "generatedAt": "2026-04-26T21:38:47.257Z",
3
+ "constitutionHash": "bbf15ed2068f7fba533653b20c0a3d81dd11c9d292fdcbea4780506c29397d26",
4
+ "inputHash": "109fe1f6b130d1e85d7669fd4ea6733cd99ac0ca0f2547d53e808a51555b5705",
5
5
  "rules": [
6
6
  {
7
- "name": "allow-downloads-read",
8
- "description": "Allow reading files within the Downloads folder.",
7
+ "name": "allow-web-search",
8
+ "description": "Allow web searches via the web_search tool.",
9
+ "principle": "The agent may perform web searches to find information.",
10
+ "if": {
11
+ "server": [
12
+ "fetch"
13
+ ],
14
+ "tool": [
15
+ "web_search"
16
+ ]
17
+ },
18
+ "then": "allow",
19
+ "reason": "Constitution explicitly permits the agent to perform web searches."
20
+ },
21
+ {
22
+ "name": "allow-fetch-news-sites",
23
+ "description": "Allow fetching web content from popular news sites.",
24
+ "principle": "The agent may fetch web content from popular news sites.",
25
+ "if": {
26
+ "server": [
27
+ "fetch"
28
+ ],
29
+ "tool": [
30
+ "http_fetch"
31
+ ],
32
+ "domains": {
33
+ "roles": [
34
+ "fetch-url"
35
+ ],
36
+ "allowed": [
37
+ "@popular-news-sites"
38
+ ]
39
+ }
40
+ },
41
+ "then": "allow",
42
+ "reason": "Constitution explicitly permits fetching content from popular news sites."
43
+ },
44
+ {
45
+ "name": "allow-fetch-development-sites",
46
+ "description": "Allow fetching web content from popular development sites.",
47
+ "principle": "The agent may fetch web content from popular development sites.",
48
+ "if": {
49
+ "server": [
50
+ "fetch"
51
+ ],
52
+ "tool": [
53
+ "http_fetch"
54
+ ],
55
+ "domains": {
56
+ "roles": [
57
+ "fetch-url"
58
+ ],
59
+ "allowed": [
60
+ "@popular-development-sites"
61
+ ]
62
+ }
63
+ },
64
+ "then": "allow",
65
+ "reason": "Constitution explicitly permits fetching content from popular development sites."
66
+ },
67
+ {
68
+ "name": "escalate-fetch-other-urls",
69
+ "description": "Escalate HTTP fetch requests to URLs not explicitly permitted.",
70
+ "principle": "Human oversight: Operations outside explicitly permitted domains require human approval.",
71
+ "if": {
72
+ "server": [
73
+ "fetch"
74
+ ],
75
+ "tool": [
76
+ "http_fetch"
77
+ ]
78
+ },
79
+ "then": "escalate",
80
+ "reason": "Fetching from domains not explicitly permitted requires human approval per least-privilege principle."
81
+ },
82
+ {
83
+ "name": "allow-read-downloads",
84
+ "description": "Allow reading files in the Downloads folder.",
9
85
  "principle": "The agent is allowed to read, write and delete content in the Downloads folder.",
10
86
  "if": {
87
+ "roles": [
88
+ "read-path"
89
+ ],
90
+ "server": [
91
+ "filesystem"
92
+ ],
11
93
  "paths": {
12
94
  "roles": [
13
95
  "read-path"
14
96
  ],
15
- "within": "/mnt/c/Users/provo/Downloads"
97
+ "within": "~/Downloads"
16
98
  }
17
99
  },
18
100
  "then": "allow",
19
101
  "reason": "Policy explicitly permits reading in the Downloads folder."
20
102
  },
21
103
  {
22
- "name": "allow-downloads-write",
23
- "description": "Allow writing files within the Downloads folder.",
104
+ "name": "allow-write-downloads",
105
+ "description": "Allow writing files in the Downloads folder.",
24
106
  "principle": "The agent is allowed to read, write and delete content in the Downloads folder.",
25
107
  "if": {
108
+ "roles": [
109
+ "write-path"
110
+ ],
111
+ "server": [
112
+ "filesystem"
113
+ ],
26
114
  "paths": {
27
115
  "roles": [
28
116
  "write-path"
29
117
  ],
30
- "within": "/mnt/c/Users/provo/Downloads"
118
+ "within": "~/Downloads"
31
119
  }
32
120
  },
33
121
  "then": "allow",
34
122
  "reason": "Policy explicitly permits writing in the Downloads folder."
35
123
  },
36
124
  {
37
- "name": "allow-downloads-delete",
38
- "description": "Allow deleting files within the Downloads folder.",
125
+ "name": "allow-delete-downloads",
126
+ "description": "Allow delete operations (including move source) within the Downloads folder.",
39
127
  "principle": "The agent is allowed to read, write and delete content in the Downloads folder.",
40
128
  "if": {
129
+ "roles": [
130
+ "delete-path"
131
+ ],
132
+ "server": [
133
+ "filesystem"
134
+ ],
41
135
  "paths": {
42
136
  "roles": [
43
137
  "delete-path"
44
138
  ],
45
- "within": "/mnt/c/Users/provo/Downloads"
139
+ "within": "~/Downloads"
46
140
  }
47
141
  },
48
142
  "then": "allow",
49
- "reason": "Policy explicitly permits deletion in the Downloads folder."
143
+ "reason": "Policy explicitly permits deleting in the Downloads folder."
50
144
  },
51
145
  {
52
- "name": "allow-documents-read",
53
- "description": "Allow reading documents in the Users document folder.",
146
+ "name": "allow-read-documents",
147
+ "description": "Allow reading files in the user's Documents folder.",
54
148
  "principle": "The agent is allowed to read documents in the Users document folder.",
55
149
  "if": {
150
+ "roles": [
151
+ "read-path"
152
+ ],
153
+ "server": [
154
+ "filesystem"
155
+ ],
56
156
  "paths": {
57
157
  "roles": [
58
158
  "read-path"
59
159
  ],
60
- "within": "/home/provos/Documents"
160
+ "within": "~/Documents"
61
161
  }
62
162
  },
63
163
  "then": "allow",
64
- "reason": "Policy explicitly permits reading in the Documents folder."
164
+ "reason": "Policy explicitly permits reading the user's Documents folder."
65
165
  },
66
166
  {
67
- "name": "escalate-documents-write",
68
- "description": "Escalate write operations targeting the Documents folder since only reads are permitted there.",
69
- "principle": "Least privilege: The agent may only access resources explicitly permitted by policy.",
167
+ "name": "allow-list-allowed-directories",
168
+ "description": "Allow listing the permitted directories (no path argument, always safe).",
169
+ "principle": "Least privilege: agent may access resources explicitly permitted.",
70
170
  "if": {
71
- "paths": {
72
- "roles": [
73
- "write-path"
74
- ],
75
- "within": "/home/provos/Documents"
76
- }
171
+ "server": [
172
+ "filesystem"
173
+ ],
174
+ "tool": [
175
+ "list_allowed_directories"
176
+ ]
177
+ },
178
+ "then": "allow",
179
+ "reason": "Listing allowed directories is a safe metadata-only operation."
180
+ },
181
+ {
182
+ "name": "escalate-move-with-delete-outside-permitted",
183
+ "description": "Escalate move operations whose source (delete-path) is outside permitted areas.",
184
+ "principle": "No destruction: delete operations outside the sandbox are never permitted unless explicitly approved.",
185
+ "if": {
186
+ "server": [
187
+ "filesystem"
188
+ ],
189
+ "tool": [
190
+ "move_file"
191
+ ]
77
192
  },
78
193
  "then": "escalate",
79
- "reason": "Only reads are explicitly permitted in the Documents folder; writes require human approval."
194
+ "reason": "Move carries a delete-path role; any move not fully covered by sandbox/Downloads structural rules requires human approval."
80
195
  },
81
196
  {
82
- "name": "escalate-move-with-delete-outside-sandbox",
83
- "description": "Escalate move operations whose source (delete-path) is outside the Downloads folder, since deletes outside permitted areas require human oversight.",
84
- "principle": "No destruction: Delete operations outside the sandbox are never permitted unless explicitly granted.",
197
+ "name": "escalate-write-outside-permitted",
198
+ "description": "Escalate writes to paths outside the sandbox and Downloads folder.",
199
+ "principle": "Human oversight: operations outside the sandbox require explicit human approval.",
85
200
  "if": {
86
201
  "roles": [
87
- "delete-path"
202
+ "write-path"
88
203
  ],
89
204
  "server": [
90
205
  "filesystem"
91
206
  ]
92
207
  },
93
208
  "then": "escalate",
94
- "reason": "Any delete-path argument outside the sandbox or Downloads folder requires human approval before proceeding."
209
+ "reason": "Writes outside structurally-allowed areas (sandbox, Downloads) require human approval."
95
210
  },
96
211
  {
97
- "name": "escalate-filesystem-write-outside-permitted",
98
- "description": "Escalate filesystem writes outside explicitly permitted directories.",
99
- "principle": "Least privilege: The agent may only access resources explicitly permitted by policy.",
212
+ "name": "escalate-read-outside-permitted",
213
+ "description": "Escalate read operations targeting paths outside the sandbox, Downloads, and Documents folders.",
214
+ "principle": "Least privilege: agent may only access resources explicitly permitted.",
100
215
  "if": {
101
216
  "roles": [
102
- "write-path"
217
+ "read-path"
103
218
  ],
104
219
  "server": [
105
220
  "filesystem"
106
221
  ]
107
222
  },
108
223
  "then": "escalate",
109
- "reason": "Writes outside the sandbox, Downloads, or Documents require human approval."
224
+ "reason": "Reads outside explicitly permitted folders require human judgment rather than outright denial."
110
225
  },
111
226
  {
112
- "name": "allow-git-local-read",
113
- "description": "Allow local git read operations (log, status, diff, show, blame, etc.) within any path.",
114
- "principle": "The agent is allowed to perform all local read and write git operations within the sandbox.",
227
+ "name": "allow-git-wrapup-instructions",
228
+ "description": "Allow fetching git wrap-up instructions as they have no path or remote roles.",
229
+ "principle": "Least privilege: returning workflow instructions is a safe read-only operation with no resource access.",
115
230
  "if": {
231
+ "server": [
232
+ "git"
233
+ ],
234
+ "tool": [
235
+ "git_wrapup_instructions"
236
+ ]
237
+ },
238
+ "then": "allow",
239
+ "reason": "git_wrapup_instructions has no path or network roles and is always safe to execute."
240
+ },
241
+ {
242
+ "name": "allow-git-clear-working-dir",
243
+ "description": "Allow clearing the session working directory setting as it has no path or remote roles.",
244
+ "principle": "Least privilege: clearing a session setting is a safe local administrative operation.",
245
+ "if": {
246
+ "server": [
247
+ "git"
248
+ ],
116
249
  "tool": [
117
- "git_status",
118
- "git_log",
119
- "git_diff",
120
- "git_show",
121
- "git_blame",
122
- "git_reflog",
123
- "git_changelog_analyze",
124
- "git_wrapup_instructions",
125
250
  "git_clear_working_dir"
126
251
  ]
127
252
  },
128
253
  "then": "allow",
129
- "reason": "Read-only git operations are explicitly permitted as local operations."
254
+ "reason": "Clearing the working directory session setting carries no path or remote access and is always safe."
130
255
  },
131
256
  {
132
- "name": "allow-git-set-working-dir",
133
- "description": "Allow setting the git working directory.",
134
- "principle": "The agent is allowed to perform all local read and write git operations within the sandbox.",
257
+ "name": "allow-git-set-working-dir-downloads",
258
+ "description": "Allow setting the git working directory to a path within the Downloads folder.",
259
+ "principle": "The agent is allowed to read, write and delete content in the Downloads folder.",
135
260
  "if": {
261
+ "server": [
262
+ "git"
263
+ ],
136
264
  "tool": [
137
265
  "git_set_working_dir"
138
- ]
266
+ ],
267
+ "paths": {
268
+ "roles": [
269
+ "read-path",
270
+ "write-path"
271
+ ],
272
+ "within": "~/Downloads"
273
+ }
139
274
  },
140
275
  "then": "allow",
141
- "reason": "Setting the working directory is a local read operation with no side effects outside the sandbox."
276
+ "reason": "Setting the working directory to Downloads is permitted since the agent has full read/write access there."
142
277
  },
143
278
  {
144
- "name": "allow-git-local-write-history",
145
- "description": "Allow local git write-history operations (commit, merge, rebase, reset, checkout, cherry-pick, stash, tag, branch, add, init, worktree) within the sandbox.",
146
- "principle": "The agent is allowed to perform all local read and write git operations within the sandbox.",
279
+ "name": "allow-git-init-in-downloads",
280
+ "description": "Allow initializing a new git repository within the Downloads folder.",
281
+ "principle": "The agent is allowed to read, write and delete content in the Downloads folder.",
147
282
  "if": {
283
+ "server": [
284
+ "git"
285
+ ],
148
286
  "tool": [
149
- "git_add",
150
- "git_commit",
151
- "git_merge",
152
- "git_rebase",
153
- "git_reset",
154
- "git_checkout",
155
- "git_cherry_pick",
156
- "git_stash",
157
- "git_tag",
158
- "git_branch",
159
- "git_init",
160
- "git_worktree",
161
- "git_remote"
162
- ]
287
+ "git_init"
288
+ ],
289
+ "paths": {
290
+ "roles": [
291
+ "write-path"
292
+ ],
293
+ "within": "~/Downloads"
294
+ }
163
295
  },
164
296
  "then": "allow",
165
- "reason": "Local git write operations are explicitly permitted within the sandbox."
297
+ "reason": "Creating a new git repo within Downloads is permitted since the agent has full write access there."
166
298
  },
167
299
  {
168
- "name": "allow-git-clean-within-sandbox",
169
- "description": "Allow git clean operations (removing untracked files) within the sandbox.",
170
- "principle": "The agent is allowed to perform all local read and write git operations within the sandbox.",
300
+ "name": "allow-git-read-ops-in-downloads",
301
+ "description": "Allow read-only git operations on repositories within the Downloads folder.",
302
+ "principle": "The agent is allowed to read, write and delete content in the Downloads folder.",
171
303
  "if": {
304
+ "server": [
305
+ "git"
306
+ ],
172
307
  "tool": [
173
- "git_clean"
174
- ]
308
+ "git_blame",
309
+ "git_diff",
310
+ "git_log",
311
+ "git_reflog",
312
+ "git_show",
313
+ "git_status",
314
+ "git_changelog_analyze"
315
+ ],
316
+ "paths": {
317
+ "roles": [
318
+ "read-path"
319
+ ],
320
+ "within": "~/Downloads"
321
+ }
175
322
  },
176
323
  "then": "allow",
177
- "reason": "Git clean is a local operation permitted within the sandbox; sandbox containment invariant ensures it stays within bounds."
324
+ "reason": "Read-only git tools on paths within Downloads are explicitly permitted."
178
325
  },
179
326
  {
180
- "name": "escalate-write-history-outside-sandbox",
181
- "description": "Escalate git history-modifying operations when the repository path is outside the sandbox.",
182
- "principle": "Human oversight: Operations outside the sandbox require explicit human approval.",
327
+ "name": "allow-git-add-in-downloads",
328
+ "description": "Allow git add within the Downloads folder.",
329
+ "principle": "The agent is allowed to read, write and delete content in the Downloads folder.",
183
330
  "if": {
184
- "roles": [
185
- "write-history"
186
- ]
331
+ "server": [
332
+ "git"
333
+ ],
334
+ "tool": [
335
+ "git_add"
336
+ ],
337
+ "paths": {
338
+ "roles": [
339
+ "read-path",
340
+ "write-history"
341
+ ],
342
+ "within": "~/Downloads"
343
+ }
187
344
  },
188
- "then": "escalate",
189
- "reason": "Git operations that modify history outside the sandbox require human approval."
345
+ "then": "allow",
346
+ "reason": "Staging files within Downloads is permitted since the agent has full write access there."
190
347
  },
191
348
  {
192
- "name": "escalate-delete-history-outside-sandbox",
193
- "description": "Escalate git ref-deletion operations when the repository path is outside the sandbox.",
194
- "principle": "Human oversight: Operations outside the sandbox require explicit human approval.",
349
+ "name": "allow-git-commit-in-downloads",
350
+ "description": "Allow git commit within the Downloads folder.",
351
+ "principle": "The agent is allowed to read, write and delete content in the Downloads folder.",
195
352
  "if": {
196
- "roles": [
197
- "delete-history"
198
- ]
353
+ "server": [
354
+ "git"
355
+ ],
356
+ "tool": [
357
+ "git_commit"
358
+ ],
359
+ "paths": {
360
+ "roles": [
361
+ "read-path",
362
+ "write-history"
363
+ ],
364
+ "within": "~/Downloads"
365
+ }
199
366
  },
200
- "then": "escalate",
201
- "reason": "Git operations that delete refs outside the sandbox require human approval."
367
+ "then": "allow",
368
+ "reason": "Committing within Downloads is permitted since the agent has full write access there."
202
369
  },
203
370
  {
204
- "name": "escalate-git-push",
205
- "description": "Escalate git push operations as they interact with remote repositories.",
206
- "principle": "The agent must ask for human approval for all other git operations.",
371
+ "name": "allow-git-branch-in-downloads",
372
+ "description": "Allow git branch operations within the Downloads folder.",
373
+ "principle": "The agent is allowed to read, write and delete content in the Downloads folder.",
207
374
  "if": {
375
+ "server": [
376
+ "git"
377
+ ],
208
378
  "tool": [
209
- "git_push"
210
- ]
379
+ "git_branch"
380
+ ],
381
+ "paths": {
382
+ "roles": [
383
+ "read-path",
384
+ "write-history",
385
+ "delete-history"
386
+ ],
387
+ "within": "~/Downloads"
388
+ }
211
389
  },
212
- "then": "escalate",
213
- "reason": "Git push is a remote operation that requires explicit human approval."
390
+ "then": "allow",
391
+ "reason": "All branch operations (list, create, rename, delete) within Downloads are permitted."
214
392
  },
215
393
  {
216
- "name": "escalate-git-pull",
217
- "description": "Escalate git pull operations as they interact with remote repositories.",
218
- "principle": "The agent must ask for human approval for all other git operations.",
394
+ "name": "allow-git-checkout-in-downloads",
395
+ "description": "Allow git checkout within the Downloads folder.",
396
+ "principle": "The agent is allowed to read, write and delete content in the Downloads folder.",
219
397
  "if": {
398
+ "server": [
399
+ "git"
400
+ ],
220
401
  "tool": [
221
- "git_pull"
222
- ]
402
+ "git_checkout"
403
+ ],
404
+ "paths": {
405
+ "roles": [
406
+ "read-path",
407
+ "write-history",
408
+ "write-path"
409
+ ],
410
+ "within": "~/Downloads"
411
+ }
223
412
  },
224
- "then": "escalate",
225
- "reason": "Git pull is a remote operation that requires explicit human approval."
413
+ "then": "allow",
414
+ "reason": "Checkout operations within Downloads are permitted since the agent has full access there."
226
415
  },
227
416
  {
228
- "name": "escalate-git-fetch",
229
- "description": "Escalate git fetch operations as they interact with remote repositories.",
230
- "principle": "The agent must ask for human approval for all other git operations.",
417
+ "name": "allow-git-cherry-pick-in-downloads",
418
+ "description": "Allow git cherry-pick within the Downloads folder.",
419
+ "principle": "The agent is allowed to read, write and delete content in the Downloads folder.",
231
420
  "if": {
421
+ "server": [
422
+ "git"
423
+ ],
232
424
  "tool": [
233
- "git_fetch"
234
- ]
425
+ "git_cherry_pick"
426
+ ],
427
+ "paths": {
428
+ "roles": [
429
+ "read-path",
430
+ "write-history"
431
+ ],
432
+ "within": "~/Downloads"
433
+ }
235
434
  },
236
- "then": "escalate",
237
- "reason": "Git fetch is a remote operation that requires explicit human approval."
435
+ "then": "allow",
436
+ "reason": "Cherry-pick within Downloads is permitted since the agent has full write access there."
238
437
  },
239
438
  {
240
- "name": "escalate-git-clone",
241
- "description": "Escalate git clone operations as they interact with remote repositories.",
242
- "principle": "The agent must ask for human approval for all other git operations.",
439
+ "name": "allow-git-merge-in-downloads",
440
+ "description": "Allow git merge within the Downloads folder.",
441
+ "principle": "The agent is allowed to read, write and delete content in the Downloads folder.",
243
442
  "if": {
443
+ "server": [
444
+ "git"
445
+ ],
244
446
  "tool": [
245
- "git_clone"
246
- ]
447
+ "git_merge"
448
+ ],
449
+ "paths": {
450
+ "roles": [
451
+ "read-path",
452
+ "write-history"
453
+ ],
454
+ "within": "~/Downloads"
455
+ }
247
456
  },
248
- "then": "escalate",
249
- "reason": "Git clone is a remote operation that requires explicit human approval."
457
+ "then": "allow",
458
+ "reason": "Merge within Downloads is permitted since the agent has full write access there."
250
459
  },
251
460
  {
252
- "name": "allow-web-search",
253
- "description": "Allow web search operations.",
254
- "principle": "The agent may perform web searches to find information.",
461
+ "name": "allow-git-rebase-in-downloads",
462
+ "description": "Allow git rebase within the Downloads folder.",
463
+ "principle": "The agent is allowed to read, write and delete content in the Downloads folder.",
255
464
  "if": {
465
+ "server": [
466
+ "git"
467
+ ],
256
468
  "tool": [
257
- "web_search"
258
- ]
469
+ "git_rebase"
470
+ ],
471
+ "paths": {
472
+ "roles": [
473
+ "read-path",
474
+ "write-history"
475
+ ],
476
+ "within": "~/Downloads"
477
+ }
259
478
  },
260
479
  "then": "allow",
261
- "reason": "Web searches are explicitly permitted by policy."
480
+ "reason": "Rebase within Downloads is permitted since the agent has full write access there."
262
481
  },
263
482
  {
264
- "name": "allow-fetch-news-sites",
265
- "description": "Allow fetching content from popular news sites.",
266
- "principle": "The agent may fetch web content from popular news sites.",
483
+ "name": "allow-git-reset-in-downloads",
484
+ "description": "Allow git reset within the Downloads folder.",
485
+ "principle": "The agent is allowed to read, write and delete content in the Downloads folder.",
267
486
  "if": {
487
+ "server": [
488
+ "git"
489
+ ],
268
490
  "tool": [
269
- "http_fetch"
491
+ "git_reset"
270
492
  ],
271
- "domains": {
493
+ "paths": {
272
494
  "roles": [
273
- "fetch-url"
495
+ "read-path",
496
+ "write-history"
274
497
  ],
275
- "allowed": [
276
- "@popular-news-sites"
277
- ]
498
+ "within": "~/Downloads"
278
499
  }
279
500
  },
280
501
  "then": "allow",
281
- "reason": "Fetching from popular news sites is explicitly permitted."
502
+ "reason": "Reset within Downloads is permitted since the agent has full write access there."
282
503
  },
283
504
  {
284
- "name": "allow-fetch-development-sites",
285
- "description": "Allow fetching content from popular development sites.",
286
- "principle": "The agent may fetch web content from popular development sites.",
505
+ "name": "allow-git-stash-in-downloads",
506
+ "description": "Allow all git stash operations within the Downloads folder.",
507
+ "principle": "The agent is allowed to read, write and delete content in the Downloads folder.",
287
508
  "if": {
509
+ "server": [
510
+ "git"
511
+ ],
288
512
  "tool": [
289
- "http_fetch"
513
+ "git_stash"
290
514
  ],
291
- "domains": {
515
+ "paths": {
292
516
  "roles": [
293
- "fetch-url"
517
+ "read-path",
518
+ "write-history",
519
+ "delete-history"
294
520
  ],
295
- "allowed": [
296
- "@popular-development-sites"
297
- ]
521
+ "within": "~/Downloads"
298
522
  }
299
523
  },
300
524
  "then": "allow",
301
- "reason": "Fetching from popular development sites is explicitly permitted."
525
+ "reason": "All stash modes including drop/clear are permitted within Downloads since the agent has full read/write/delete access."
302
526
  },
303
527
  {
304
- "name": "escalate-fetch-other-urls",
305
- "description": "Escalate HTTP fetch requests to domains not on the approved lists.",
306
- "principle": "Least privilege: The agent may only access resources explicitly permitted by policy.",
528
+ "name": "allow-git-tag-in-downloads",
529
+ "description": "Allow all git tag operations within the Downloads folder.",
530
+ "principle": "The agent is allowed to read, write and delete content in the Downloads folder.",
307
531
  "if": {
532
+ "server": [
533
+ "git"
534
+ ],
308
535
  "tool": [
309
- "http_fetch"
536
+ "git_tag"
537
+ ],
538
+ "paths": {
539
+ "roles": [
540
+ "read-path",
541
+ "write-history",
542
+ "delete-history"
543
+ ],
544
+ "within": "~/Downloads"
545
+ }
546
+ },
547
+ "then": "allow",
548
+ "reason": "All tag operations including deletion are permitted within Downloads since the agent has full access there."
549
+ },
550
+ {
551
+ "name": "allow-git-remote-in-downloads",
552
+ "description": "Allow all git remote management operations within the Downloads folder.",
553
+ "principle": "The agent is allowed to read, write and delete content in the Downloads folder.",
554
+ "if": {
555
+ "server": [
556
+ "git"
557
+ ],
558
+ "tool": [
559
+ "git_remote"
560
+ ],
561
+ "paths": {
562
+ "roles": [
563
+ "read-path",
564
+ "write-history",
565
+ "delete-history"
566
+ ],
567
+ "within": "~/Downloads"
568
+ }
569
+ },
570
+ "then": "allow",
571
+ "reason": "Local remote config operations (list, add, remove, rename, set-url) within Downloads are permitted."
572
+ },
573
+ {
574
+ "name": "allow-git-clean-in-downloads",
575
+ "description": "Allow git clean operations within the Downloads folder.",
576
+ "principle": "The agent is allowed to read, write and delete content in the Downloads folder.",
577
+ "if": {
578
+ "server": [
579
+ "git"
580
+ ],
581
+ "tool": [
582
+ "git_clean"
583
+ ],
584
+ "paths": {
585
+ "roles": [
586
+ "read-path",
587
+ "delete-path"
588
+ ],
589
+ "within": "~/Downloads"
590
+ }
591
+ },
592
+ "then": "allow",
593
+ "reason": "Clean operations including file deletion are permitted within Downloads since the agent has full access there."
594
+ },
595
+ {
596
+ "name": "allow-git-worktree-list-in-downloads",
597
+ "description": "Allow listing git worktrees for a repository within the Downloads folder.",
598
+ "principle": "The agent is allowed to read, write and delete content in the Downloads folder.",
599
+ "if": {
600
+ "server": [
601
+ "git"
602
+ ],
603
+ "tool": [
604
+ "git_worktree"
605
+ ],
606
+ "paths": {
607
+ "roles": [
608
+ "read-path"
609
+ ],
610
+ "within": "~/Downloads"
611
+ }
612
+ },
613
+ "then": "allow",
614
+ "reason": "Listing worktrees (read-only, mode=list) within Downloads is permitted; other worktree modes with write/delete roles fall through to deny."
615
+ },
616
+ {
617
+ "name": "escalate-git-push",
618
+ "description": "Require human approval for all git push operations.",
619
+ "principle": "The agent must ask for human approval for all other git operations.",
620
+ "if": {
621
+ "server": [
622
+ "git"
623
+ ],
624
+ "tool": [
625
+ "git_push"
626
+ ]
627
+ },
628
+ "then": "escalate",
629
+ "reason": "Push is a remote network operation and always requires human approval per policy."
630
+ },
631
+ {
632
+ "name": "escalate-git-pull",
633
+ "description": "Require human approval for all git pull operations.",
634
+ "principle": "The agent must ask for human approval for all other git operations.",
635
+ "if": {
636
+ "server": [
637
+ "git"
638
+ ],
639
+ "tool": [
640
+ "git_pull"
641
+ ]
642
+ },
643
+ "then": "escalate",
644
+ "reason": "Pull is a remote network operation and always requires human approval per policy."
645
+ },
646
+ {
647
+ "name": "escalate-git-fetch",
648
+ "description": "Require human approval for all git fetch operations.",
649
+ "principle": "The agent must ask for human approval for all other git operations.",
650
+ "if": {
651
+ "server": [
652
+ "git"
653
+ ],
654
+ "tool": [
655
+ "git_fetch"
656
+ ]
657
+ },
658
+ "then": "escalate",
659
+ "reason": "Fetch is a remote network operation and always requires human approval per policy."
660
+ },
661
+ {
662
+ "name": "escalate-git-clone",
663
+ "description": "Require human approval for all git clone operations.",
664
+ "principle": "The agent must ask for human approval for all other git operations.",
665
+ "if": {
666
+ "server": [
667
+ "git"
668
+ ],
669
+ "tool": [
670
+ "git_clone"
310
671
  ]
311
672
  },
312
673
  "then": "escalate",
313
- "reason": "Fetching from non-approved domains requires human approval."
674
+ "reason": "Clone is a remote network operation and always requires human approval per policy."
314
675
  },
315
676
  {
316
- "name": "allow-github-read",
317
- "description": "Allow read-only GitHub operations without human approval.",
677
+ "name": "github-read-operations-allow",
678
+ "description": "Allow all read-only GitHub operations (listing, searching, reading issues, PRs, repositories, code, comments, reviews).",
318
679
  "principle": "The agent may freely list, search, and read GitHub resources without human approval.",
319
680
  "if": {
681
+ "server": [
682
+ "github"
683
+ ],
320
684
  "tool": [
321
685
  "get_commit",
322
686
  "get_file_contents",
@@ -344,13 +708,16 @@
344
708
  ]
345
709
  },
346
710
  "then": "allow",
347
- "reason": "Read-only GitHub operations are explicitly permitted without human approval."
711
+ "reason": "These are purely read-only GitHub operations explicitly permitted without approval by the user policy."
348
712
  },
349
713
  {
350
- "name": "escalate-github-write",
351
- "description": "Escalate GitHub mutation operations that create, update, close, or delete resources.",
714
+ "name": "github-write-operations-escalate",
715
+ "description": "Require human approval for all GitHub write, update, create, close, or delete operations.",
352
716
  "principle": "Creating, updating, closing, or deleting GitHub resources requires human approval.",
353
717
  "if": {
718
+ "server": [
719
+ "github"
720
+ ],
354
721
  "tool": [
355
722
  "add_comment_to_pending_review",
356
723
  "add_issue_comment",
@@ -373,7 +740,7 @@
373
740
  ]
374
741
  },
375
742
  "then": "escalate",
376
- "reason": "GitHub write/mutation operations require explicit human approval per policy."
743
+ "reason": "These operations create, modify, or delete GitHub resources and require explicit human approval per user policy."
377
744
  }
378
745
  ],
379
746
  "listDefinitions": [
@@ -381,14 +748,14 @@
381
748
  "name": "popular-news-sites",
382
749
  "type": "domains",
383
750
  "principle": "The agent may fetch web content from popular news sites.",
384
- "generationPrompt": "List the domains of approximately 50 popular and widely-recognized news websites, including major international outlets, national newspapers, wire services, and digital-native news organizations (e.g., bbc.com, nytimes.com, reuters.com, theguardian.com, apnews.com, cnn.com, washingtonpost.com, etc.).",
751
+ "generationPrompt": "List the domains of approximately 30 popular and well-known news websites (e.g., major national newspapers, international news agencies, and widely-read online news outlets).",
385
752
  "requiresMcp": false
386
753
  },
387
754
  {
388
755
  "name": "popular-development-sites",
389
756
  "type": "domains",
390
757
  "principle": "The agent may fetch web content from popular development sites.",
391
- "generationPrompt": "List the domains of approximately 50 popular software development websites and resources, including documentation hosts, package registries, developer communities, code hosting platforms, and technical reference sites (e.g., github.com, stackoverflow.com, developer.mozilla.org, docs.python.org, npmjs.com, pypi.org, rust-lang.org, golang.org, docs.microsoft.com, kubernetes.io, etc.).",
758
+ "generationPrompt": "List the domains of approximately 30 popular software development and programming reference websites (e.g., documentation hosts, package registries, developer forums, code hosting platforms, and technical reference sites).",
392
759
  "requiresMcp": false
393
760
  }
394
761
  ]