@provos/ironcurtain 0.7.2 → 0.9.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 (259) hide show
  1. package/README.md +29 -100
  2. package/dist/auth/auth-command.d.ts +15 -0
  3. package/dist/auth/auth-command.js +424 -0
  4. package/dist/auth/auth-command.js.map +1 -0
  5. package/dist/auth/oauth-flow.d.ts +46 -0
  6. package/dist/auth/oauth-flow.js +279 -0
  7. package/dist/auth/oauth-flow.js.map +1 -0
  8. package/dist/auth/oauth-provider.d.ts +55 -0
  9. package/dist/auth/oauth-provider.js +73 -0
  10. package/dist/auth/oauth-provider.js.map +1 -0
  11. package/dist/auth/oauth-registry.d.ts +34 -0
  12. package/dist/auth/oauth-registry.js +69 -0
  13. package/dist/auth/oauth-registry.js.map +1 -0
  14. package/dist/auth/oauth-token-provider.d.ts +52 -0
  15. package/dist/auth/oauth-token-provider.js +159 -0
  16. package/dist/auth/oauth-token-provider.js.map +1 -0
  17. package/dist/auth/oauth-token-store.d.ts +30 -0
  18. package/dist/auth/oauth-token-store.js +93 -0
  19. package/dist/auth/oauth-token-store.js.map +1 -0
  20. package/dist/auth/providers/google-scopes.d.ts +35 -0
  21. package/dist/auth/providers/google-scopes.js +183 -0
  22. package/dist/auth/providers/google-scopes.js.map +1 -0
  23. package/dist/auth/providers/google.d.ts +2 -0
  24. package/dist/auth/providers/google.js +28 -0
  25. package/dist/auth/providers/google.js.map +1 -0
  26. package/dist/cli.js +6 -0
  27. package/dist/cli.js.map +1 -1
  28. package/dist/config/config-command.js +39 -1
  29. package/dist/config/config-command.js.map +1 -1
  30. package/dist/config/constitution-readonly.md +14 -11
  31. package/dist/config/constitution-user-base.md +15 -0
  32. package/dist/config/first-start.js +4 -1
  33. package/dist/config/first-start.js.map +1 -1
  34. package/dist/config/generated/test-scenarios.json +1 -1
  35. package/dist/config/generated/tool-annotations.json +10617 -296
  36. package/dist/config/generated-readonly/compiled-policy.json +787 -244
  37. package/dist/config/index.d.ts +2 -2
  38. package/dist/config/index.js +8 -0
  39. package/dist/config/index.js.map +1 -1
  40. package/dist/config/mcp-servers.json +31 -2
  41. package/dist/config/paths.d.ts +20 -0
  42. package/dist/config/paths.js +43 -0
  43. package/dist/config/paths.js.map +1 -1
  44. package/dist/config/types.d.ts +8 -0
  45. package/dist/config/user-config.d.ts +29 -0
  46. package/dist/config/user-config.js +30 -0
  47. package/dist/config/user-config.js.map +1 -1
  48. package/dist/cron/constitution-generator.d.ts +2 -1
  49. package/dist/cron/constitution-generator.js +35 -36
  50. package/dist/cron/constitution-generator.js.map +1 -1
  51. package/dist/cron/headless-transport.d.ts +4 -0
  52. package/dist/cron/headless-transport.js +1 -1
  53. package/dist/cron/headless-transport.js.map +1 -1
  54. package/dist/daemon/ironcurtain-daemon.js +7 -1
  55. package/dist/daemon/ironcurtain-daemon.js.map +1 -1
  56. package/dist/docker/adapters/claude-code.js +32 -5
  57. package/dist/docker/adapters/claude-code.js.map +1 -1
  58. package/dist/docker/agent-adapter.d.ts +40 -0
  59. package/dist/docker/claude-md-seed.d.ts +27 -0
  60. package/dist/docker/claude-md-seed.js +42 -0
  61. package/dist/docker/claude-md-seed.js.map +1 -0
  62. package/dist/docker/docker-agent-session.d.ts +3 -1
  63. package/dist/docker/docker-agent-session.js +51 -28
  64. package/dist/docker/docker-agent-session.js.map +1 -1
  65. package/dist/docker/docker-infrastructure.d.ts +15 -1
  66. package/dist/docker/docker-infrastructure.js +105 -9
  67. package/dist/docker/docker-infrastructure.js.map +1 -1
  68. package/dist/docker/docker-manager.d.ts +2 -0
  69. package/dist/docker/docker-manager.js +9 -1
  70. package/dist/docker/docker-manager.js.map +1 -1
  71. package/dist/docker/mitm-proxy.d.ts +65 -0
  72. package/dist/docker/mitm-proxy.js +288 -31
  73. package/dist/docker/mitm-proxy.js.map +1 -1
  74. package/dist/docker/package-types.d.ts +127 -0
  75. package/dist/docker/package-types.js +8 -0
  76. package/dist/docker/package-types.js.map +1 -0
  77. package/dist/docker/package-validator.d.ts +41 -0
  78. package/dist/docker/package-validator.js +90 -0
  79. package/dist/docker/package-validator.js.map +1 -0
  80. package/dist/docker/platform.d.ts +6 -6
  81. package/dist/docker/platform.js +8 -6
  82. package/dist/docker/platform.js.map +1 -1
  83. package/dist/docker/proxy-tools.d.ts +80 -0
  84. package/dist/docker/proxy-tools.js +248 -0
  85. package/dist/docker/proxy-tools.js.map +1 -0
  86. package/dist/docker/pty-session.d.ts +15 -0
  87. package/dist/docker/pty-session.js +253 -73
  88. package/dist/docker/pty-session.js.map +1 -1
  89. package/dist/docker/pty-types.d.ts +28 -0
  90. package/dist/docker/pty-types.js +2 -0
  91. package/dist/docker/pty-types.js.map +1 -1
  92. package/dist/docker/registry-proxy.d.ts +142 -0
  93. package/dist/docker/registry-proxy.js +856 -0
  94. package/dist/docker/registry-proxy.js.map +1 -0
  95. package/dist/escalation/escalation-watcher.d.ts +3 -1
  96. package/dist/escalation/escalation-watcher.js +6 -2
  97. package/dist/escalation/escalation-watcher.js.map +1 -1
  98. package/dist/escalation/listener-command.js +24 -10
  99. package/dist/escalation/listener-command.js.map +1 -1
  100. package/dist/escalation/listener-lock.d.ts +5 -0
  101. package/dist/escalation/listener-lock.js +14 -0
  102. package/dist/escalation/listener-lock.js.map +1 -1
  103. package/dist/index.js +16 -3
  104. package/dist/index.js.map +1 -1
  105. package/dist/memory/auto-save.d.ts +25 -0
  106. package/dist/memory/auto-save.js +89 -0
  107. package/dist/memory/auto-save.js.map +1 -0
  108. package/dist/memory/memory-annotations.d.ts +47 -0
  109. package/dist/memory/memory-annotations.js +87 -0
  110. package/dist/memory/memory-annotations.js.map +1 -0
  111. package/dist/memory/memory-prompt.d.ts +12 -0
  112. package/dist/memory/memory-prompt.js +20 -0
  113. package/dist/memory/memory-prompt.js.map +1 -0
  114. package/dist/memory/resolve-memory-path.d.ts +20 -0
  115. package/dist/memory/resolve-memory-path.js +30 -0
  116. package/dist/memory/resolve-memory-path.js.map +1 -0
  117. package/dist/mux/mux-app.d.ts +4 -0
  118. package/dist/mux/mux-app.js +246 -28
  119. package/dist/mux/mux-app.js.map +1 -1
  120. package/dist/mux/mux-command.d.ts +2 -2
  121. package/dist/mux/mux-command.js +14 -22
  122. package/dist/mux/mux-command.js.map +1 -1
  123. package/dist/mux/mux-escalation-manager.d.ts +9 -3
  124. package/dist/mux/mux-escalation-manager.js +69 -19
  125. package/dist/mux/mux-escalation-manager.js.map +1 -1
  126. package/dist/mux/mux-input-handler.d.ts +59 -3
  127. package/dist/mux/mux-input-handler.js +270 -32
  128. package/dist/mux/mux-input-handler.js.map +1 -1
  129. package/dist/mux/mux-renderer.d.ts +19 -1
  130. package/dist/mux/mux-renderer.js +466 -11
  131. package/dist/mux/mux-renderer.js.map +1 -1
  132. package/dist/mux/persona-scanner.d.ts +19 -0
  133. package/dist/mux/persona-scanner.js +53 -0
  134. package/dist/mux/persona-scanner.js.map +1 -0
  135. package/dist/mux/pty-bridge.d.ts +8 -0
  136. package/dist/mux/pty-bridge.js +19 -1
  137. package/dist/mux/pty-bridge.js.map +1 -1
  138. package/dist/mux/session-scanner.d.ts +18 -0
  139. package/dist/mux/session-scanner.js +65 -0
  140. package/dist/mux/session-scanner.js.map +1 -0
  141. package/dist/mux/types.d.ts +36 -1
  142. package/dist/mux/types.js +14 -1
  143. package/dist/mux/types.js.map +1 -1
  144. package/dist/persona/persona-command.js +130 -93
  145. package/dist/persona/persona-command.js.map +1 -1
  146. package/dist/persona/persona-prompt.d.ts +7 -7
  147. package/dist/persona/persona-prompt.js +14 -29
  148. package/dist/persona/persona-prompt.js.map +1 -1
  149. package/dist/persona/resolve.js +5 -2
  150. package/dist/persona/resolve.js.map +1 -1
  151. package/dist/pipeline/annotate.js +1 -7
  152. package/dist/pipeline/annotate.js.map +1 -1
  153. package/dist/pipeline/compile.d.ts +5 -2
  154. package/dist/pipeline/compile.js +23 -11
  155. package/dist/pipeline/compile.js.map +1 -1
  156. package/dist/pipeline/constitution-compiler.d.ts +302 -3
  157. package/dist/pipeline/constitution-compiler.js +285 -23
  158. package/dist/pipeline/constitution-compiler.js.map +1 -1
  159. package/dist/pipeline/generate-with-repair.d.ts +2 -2
  160. package/dist/pipeline/generate-with-repair.js +2 -2
  161. package/dist/pipeline/handwritten-scenarios.d.ts +20 -7
  162. package/dist/pipeline/handwritten-scenarios.js +20 -41
  163. package/dist/pipeline/handwritten-scenarios.js.map +1 -1
  164. package/dist/pipeline/list-resolver.d.ts +18 -20
  165. package/dist/pipeline/list-resolver.js +28 -36
  166. package/dist/pipeline/list-resolver.js.map +1 -1
  167. package/dist/pipeline/pipeline-runner.d.ts +102 -13
  168. package/dist/pipeline/pipeline-runner.js +497 -237
  169. package/dist/pipeline/pipeline-runner.js.map +1 -1
  170. package/dist/pipeline/pipeline-shared.d.ts +7 -9
  171. package/dist/pipeline/pipeline-shared.js +8 -18
  172. package/dist/pipeline/pipeline-shared.js.map +1 -1
  173. package/dist/pipeline/policy-verifier.d.ts +32 -5
  174. package/dist/pipeline/policy-verifier.js +137 -8
  175. package/dist/pipeline/policy-verifier.js.map +1 -1
  176. package/dist/pipeline/proxy-mcp-connections.d.ts +25 -0
  177. package/dist/pipeline/proxy-mcp-connections.js +121 -0
  178. package/dist/pipeline/proxy-mcp-connections.js.map +1 -0
  179. package/dist/pipeline/refresh-lists.js +21 -13
  180. package/dist/pipeline/refresh-lists.js.map +1 -1
  181. package/dist/pipeline/scenario-generator.d.ts +29 -49
  182. package/dist/pipeline/scenario-generator.js +180 -143
  183. package/dist/pipeline/scenario-generator.js.map +1 -1
  184. package/dist/pipeline/scenario-schema-validator.d.ts +51 -0
  185. package/dist/pipeline/scenario-schema-validator.js +132 -0
  186. package/dist/pipeline/scenario-schema-validator.js.map +1 -0
  187. package/dist/pipeline/tool-annotator.d.ts +9 -8
  188. package/dist/pipeline/tool-annotator.js +48 -95
  189. package/dist/pipeline/tool-annotator.js.map +1 -1
  190. package/dist/pipeline/types.d.ts +31 -24
  191. package/dist/sandbox/index.d.ts +26 -10
  192. package/dist/sandbox/index.js +151 -40
  193. package/dist/sandbox/index.js.map +1 -1
  194. package/dist/servers/fetch-server.js +10 -5
  195. package/dist/servers/fetch-server.js.map +1 -1
  196. package/dist/session/agent-session.d.ts +8 -20
  197. package/dist/session/agent-session.js +22 -70
  198. package/dist/session/agent-session.js.map +1 -1
  199. package/dist/session/base-transport.d.ts +17 -1
  200. package/dist/session/base-transport.js +25 -1
  201. package/dist/session/base-transport.js.map +1 -1
  202. package/dist/session/cli-transport.d.ts +5 -0
  203. package/dist/session/cli-transport.js +48 -25
  204. package/dist/session/cli-transport.js.map +1 -1
  205. package/dist/session/index.d.ts +25 -1
  206. package/dist/session/index.js +57 -8
  207. package/dist/session/index.js.map +1 -1
  208. package/dist/session/prompts.js +8 -9
  209. package/dist/session/prompts.js.map +1 -1
  210. package/dist/session/session-manager.d.ts +6 -0
  211. package/dist/session/session-manager.js +12 -0
  212. package/dist/session/session-manager.js.map +1 -1
  213. package/dist/session/types.d.ts +11 -1
  214. package/dist/session/types.js.map +1 -1
  215. package/dist/session/workspace-validation.js +37 -6
  216. package/dist/session/workspace-validation.js.map +1 -1
  217. package/dist/signal/signal-bot-daemon.js +24 -8
  218. package/dist/signal/signal-bot-daemon.js.map +1 -1
  219. package/dist/signal/signal-transport.d.ts +5 -2
  220. package/dist/signal/signal-transport.js +3 -3
  221. package/dist/signal/signal-transport.js.map +1 -1
  222. package/dist/trusted-process/approval-whitelist.d.ts +117 -0
  223. package/dist/trusted-process/approval-whitelist.js +237 -0
  224. package/dist/trusted-process/approval-whitelist.js.map +1 -0
  225. package/dist/trusted-process/gworkspace-credentials.d.ts +40 -0
  226. package/dist/trusted-process/gworkspace-credentials.js +45 -0
  227. package/dist/trusted-process/gworkspace-credentials.js.map +1 -0
  228. package/dist/trusted-process/index.d.ts +11 -1
  229. package/dist/trusted-process/index.js +83 -53
  230. package/dist/trusted-process/index.js.map +1 -1
  231. package/dist/trusted-process/mcp-proxy-server.d.ts +23 -0
  232. package/dist/trusted-process/mcp-proxy-server.js +409 -94
  233. package/dist/trusted-process/mcp-proxy-server.js.map +1 -1
  234. package/dist/trusted-process/policy-engine.d.ts +12 -3
  235. package/dist/trusted-process/policy-engine.js +33 -23
  236. package/dist/trusted-process/policy-engine.js.map +1 -1
  237. package/dist/trusted-process/policy-types.d.ts +17 -0
  238. package/dist/trusted-process/sandbox-integration.d.ts +23 -0
  239. package/dist/trusted-process/sandbox-integration.js +115 -3
  240. package/dist/trusted-process/sandbox-integration.js.map +1 -1
  241. package/dist/trusted-process/token-file-refresher.d.ts +69 -0
  242. package/dist/trusted-process/token-file-refresher.js +120 -0
  243. package/dist/trusted-process/token-file-refresher.js.map +1 -0
  244. package/dist/types/argument-roles.d.ts +7 -1
  245. package/dist/types/argument-roles.js +50 -0
  246. package/dist/types/argument-roles.js.map +1 -1
  247. package/dist/types/audit.d.ts +11 -0
  248. package/docker/Dockerfile.base +22 -0
  249. package/docker/Dockerfile.base.arm64 +44 -4
  250. package/docker/Dockerfile.claude-code +2 -2
  251. package/docker/entrypoint-claude-code.sh +24 -6
  252. package/package.json +8 -2
  253. package/src/config/constitution-user-base.md +15 -0
  254. package/src/config/generated/test-scenarios.json +1 -1
  255. package/src/config/generated/tool-annotations.json +10617 -296
  256. package/src/config/mcp-servers.json +31 -2
  257. package/dist/pipeline/mcp-connections.d.ts +0 -16
  258. package/dist/pipeline/mcp-connections.js +0 -61
  259. package/dist/pipeline/mcp-connections.js.map +0 -1
@@ -13,11 +13,11 @@ USER codespace
13
13
 
14
14
  # Pre-seed Claude Code config so it skips interactive prompts:
15
15
  # - .claude.json: marks onboarding complete (skips login flow)
16
- # - .claude/settings.json: accepts bypass-permissions mode (skips confirmation dialog)
16
+ # - .claude/settings.json: accepts bypass-permissions mode, skips web fetch preflight
17
17
  RUN mkdir -p /home/codespace/.claude && \
18
18
  echo '{"hasCompletedOnboarding":true,"numStartups":1,"projects":{"/workspace":{"allowedTools":[],"hasTrustDialogAccepted":true}}}' \
19
19
  > /home/codespace/.claude.json && \
20
- echo '{"permissions":{"allow":[],"deny":[]},"skipDangerousModePermissionPrompt":true}' \
20
+ echo '{"permissions":{"allow":[],"deny":[]},"skipDangerousModePermissionPrompt":true,"skipWebFetchPreflight":true}' \
21
21
  > /home/codespace/.claude/settings.json
22
22
 
23
23
  ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
@@ -13,7 +13,13 @@ fi
13
13
 
14
14
  # Pre-seed .claude.json so Claude Code skips onboarding, trusts /workspace,
15
15
  # and doesn't prompt for API key approval.
16
- cat > "$HOME/.claude.json" <<'EOJSON'
16
+ # On resume, restore the previous session's .claude.json from the state dir
17
+ # (it contains conversation metadata that --continue needs).
18
+ SAVED_CLAUDE_JSON="$HOME/.claude/.claude.json.saved"
19
+ if [ -n "$IRONCURTAIN_RESUME_FLAGS" ] && [ -f "$SAVED_CLAUDE_JSON" ]; then
20
+ cp "$SAVED_CLAUDE_JSON" "$HOME/.claude.json"
21
+ else
22
+ cat > "$HOME/.claude.json" <<'EOJSON'
17
23
  {
18
24
  "hasCompletedOnboarding": true,
19
25
  "numStartups": 1,
@@ -25,19 +31,23 @@ cat > "$HOME/.claude.json" <<'EOJSON'
25
31
  }
26
32
  }
27
33
  EOJSON
34
+ fi
28
35
 
29
36
  # Configure settings.json:
30
37
  # - skipDangerousModePermissionPrompt: suppresses the bypass-permissions warning
38
+ # - skipWebFetchPreflight: bypasses domain safety check that fails in proxied env
39
+ # - env.HTTPS_PROXY: ensures Claude Code's WebFetch routes through the MITM proxy
31
40
  # Auth mode determines how Claude Code gets its API credentials:
32
41
  # - OAuth mode (CLAUDE_CODE_OAUTH_TOKEN set): Claude Code reads the token from
33
42
  # this env var directly -- no apiKeyHelper needed.
34
43
  # - API key mode: apiKeyHelper echoes the fake key so Claude Code skips the
35
44
  # custom API key approval dialog entirely.
45
+ # Always written (even on resume) because auth mode is runtime-specific.
36
46
  mkdir -p "$HOME/.claude"
37
47
 
38
48
  if [ -n "$CLAUDE_CODE_OAUTH_TOKEN" ]; then
39
49
  # OAuth mode: Claude Code reads the token from env var directly.
40
- cat > "$HOME/.claude/settings.json" <<'EOSETTINGS'
50
+ cat > "$HOME/.claude/settings.json" <<EOSETTINGS
41
51
  {
42
52
  "permissions": {
43
53
  "allow": [],
@@ -45,12 +55,16 @@ if [ -n "$CLAUDE_CODE_OAUTH_TOKEN" ]; then
45
55
  "additionalDirectories": [],
46
56
  "defaultMode": "bypassPermissions"
47
57
  },
48
- "skipDangerousModePermissionPrompt": true
58
+ "skipDangerousModePermissionPrompt": true,
59
+ "skipWebFetchPreflight": true,
60
+ "env": {
61
+ "HTTPS_PROXY": "${HTTPS_PROXY}"
62
+ }
49
63
  }
50
64
  EOSETTINGS
51
65
  else
52
66
  # API key mode: apiKeyHelper echoes the fake key at runtime.
53
- cat > "$HOME/.claude/settings.json" <<'EOSETTINGS'
67
+ cat > "$HOME/.claude/settings.json" <<EOSETTINGS
54
68
  {
55
69
  "permissions": {
56
70
  "allow": [],
@@ -58,8 +72,12 @@ else
58
72
  "additionalDirectories": [],
59
73
  "defaultMode": "bypassPermissions"
60
74
  },
61
- "apiKeyHelper": "echo $IRONCURTAIN_API_KEY",
62
- "skipDangerousModePermissionPrompt": true
75
+ "apiKeyHelper": "echo \$IRONCURTAIN_API_KEY",
76
+ "skipDangerousModePermissionPrompt": true,
77
+ "skipWebFetchPreflight": true,
78
+ "env": {
79
+ "HTTPS_PROXY": "${HTTPS_PROXY}"
80
+ }
63
81
  }
64
82
  EOSETTINGS
65
83
  fi
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@provos/ironcurtain",
3
- "version": "0.7.2",
3
+ "version": "0.9.0",
4
4
  "type": "module",
5
5
  "description": "Secure agent runtime with trusted process mediation",
6
6
  "license": "Apache-2.0",
@@ -25,6 +25,9 @@
25
25
  "trusted-process",
26
26
  "model-context-protocol"
27
27
  ],
28
+ "workspaces": [
29
+ "packages/*"
30
+ ],
28
31
  "engines": {
29
32
  "node": ">=22.0.0 <26"
30
33
  },
@@ -49,6 +52,7 @@
49
52
  "start": "tsx src/cli.ts start",
50
53
  "annotate-tools": "tsx src/cli.ts annotate-tools",
51
54
  "compile-policy": "tsx src/cli.ts compile-policy",
55
+ "compile-policy:readonly": "tsx src/cli.ts compile-policy --no-mcp --constitution src/config/constitution-readonly.md --output-dir src/config/generated-readonly",
52
56
  "customize-policy": "tsx src/cli.ts customize-policy",
53
57
  "bot": "tsx src/cli.ts bot",
54
58
  "config": "tsx src/cli.ts config",
@@ -66,11 +70,12 @@
66
70
  "@ai-sdk/anthropic": "^3.0.49",
67
71
  "@ai-sdk/google": "^3.0.33",
68
72
  "@ai-sdk/openai": "^3.0.36",
69
- "@anthropic-ai/sandbox-runtime": "^0.0.39",
73
+ "@anthropic-ai/sandbox-runtime": "^0.0.42",
70
74
  "@clack/prompts": "^1.0.1",
71
75
  "@cyanheads/git-mcp-server": "^2.8.4",
72
76
  "@modelcontextprotocol/sdk": "^1.27.1",
73
77
  "@mozilla/readability": "^0.6.0",
78
+ "@provos/memory-mcp-server": "^0.1.3",
74
79
  "@utcp/code-mode": "^1.2.11",
75
80
  "@utcp/mcp": "^1.1.1",
76
81
  "@xterm/headless": "^6.0.0",
@@ -81,6 +86,7 @@
81
86
  "jsdom": "^28.1.0",
82
87
  "marked": "^15.0.12",
83
88
  "marked-terminal": "^7.3.0",
89
+ "minimatch": "^10.2.1",
84
90
  "node-forge": "^1.3.3",
85
91
  "ora": "^9.3.0",
86
92
  "shell-quote": "^1.8.3",
@@ -11,3 +11,18 @@
11
11
  - The agent may fetch web content from popular development sites.
12
12
  - The agent may freely list, search, and read GitHub resources (issues, pull requests, repositories, code, comments, reviews) without human approval.
13
13
  - Creating, updating, closing, or deleting GitHub resources (issues, PRs, comments, reviews, branches, files, repositories) requires human approval.
14
+
15
+ ## Google Workspace
16
+
17
+ ### Principle: Read-First, Write-with-Approval
18
+ - Reading emails, calendar events, drive files, docs, and sheets is generally safe.
19
+ - Sending emails, creating/modifying calendar events, and editing documents require human approval.
20
+ - Deleting emails, calendar events, or Drive files is a destructive operation requiring explicit approval.
21
+
22
+ ### Principle: No Bulk Operations Without Oversight
23
+ - Batch operations (e.g., batch_modify_labels, batch email operations) affect many items simultaneously.
24
+ - These should be escalated regardless of the individual operation's safety level.
25
+
26
+ ### Principle: Respect Privacy Boundaries
27
+ - The agent should not read private calendar details or email content without clear task relevance.
28
+ - Sharing permissions on Drive files (drive_share_file) must always be escalated.
@@ -262,7 +262,7 @@
262
262
  "arguments": {}
263
263
  },
264
264
  "expectedDecision": "allow",
265
- "reasoning": "list_allowed_directories has sideEffects=false and requires no path arguments, so it is always permitted.",
265
+ "reasoning": "list_allowed_directories requires no path arguments, so it is always permitted.",
266
266
  "source": "generated"
267
267
  },
268
268
  {