@wardby/cli 0.7.0 → 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 (367) hide show
  1. package/.env.example +5 -5
  2. package/README.md +6 -1
  3. package/deploy/local/docker-compose.quickstart-coding.yml +11 -0
  4. package/dist/claude-coding-worker/driver.d.ts +12 -0
  5. package/dist/claude-coding-worker/driver.js +29 -7
  6. package/dist/claude-coding-worker/main.js +5 -1
  7. package/dist/claude-coding-worker/sdk.js +17 -1
  8. package/dist/claude-plugin/command.d.ts +64 -0
  9. package/dist/claude-plugin/command.js +379 -0
  10. package/dist/cli-help.d.ts +1 -1
  11. package/dist/cli-help.js +2 -1
  12. package/dist/cli.js +71 -3
  13. package/dist/coding/code-host.d.ts +16 -0
  14. package/dist/coding/code-host.js +60 -0
  15. package/dist/coding/mcp-token.d.ts +12 -0
  16. package/dist/coding/mcp-token.js +26 -0
  17. package/dist/coding/protocol.js +2 -0
  18. package/dist/coding/redact.js +6 -1
  19. package/dist/coding/transcript/recorder.d.ts +5 -4
  20. package/dist/coding/transcript/recorder.js +3 -9
  21. package/dist/coding-worker/debug-trace.d.ts +3 -1
  22. package/dist/coding-worker/debug-trace.js +4 -2
  23. package/dist/coding-worker/driver.js +8 -1
  24. package/dist/coding-worker/main.js +5 -1
  25. package/dist/coding-worker/mcp-config.d.ts +27 -0
  26. package/dist/coding-worker/mcp-config.js +32 -0
  27. package/dist/coding-worker/sdk.d.ts +36 -0
  28. package/dist/coding-worker/sdk.js +28 -1
  29. package/dist/coding-worker/types.d.ts +4 -0
  30. package/dist/config/mcp-call-limit.d.ts +8 -0
  31. package/dist/config/mcp-call-limit.js +18 -0
  32. package/dist/config/mcp-servers.d.ts +8 -0
  33. package/dist/config/mcp-servers.js +12 -0
  34. package/dist/config/test-simulators.d.ts +10 -0
  35. package/dist/config/test-simulators.js +28 -0
  36. package/dist/config/tool-timeout.d.ts +1 -0
  37. package/dist/config/tool-timeout.js +18 -0
  38. package/dist/core/coding-mcp.d.ts +36 -0
  39. package/dist/core/coding-mcp.js +253 -0
  40. package/dist/core/coding-repository.d.ts +46 -0
  41. package/dist/core/coding-repository.js +92 -0
  42. package/dist/core/delegation-slots.d.ts +27 -0
  43. package/dist/core/delegation-slots.js +44 -0
  44. package/dist/core/dispatch.d.ts +6 -2
  45. package/dist/core/dispatch.js +39 -11
  46. package/dist/core/engine-native.d.ts +2 -0
  47. package/dist/core/engine-native.js +13 -0
  48. package/dist/core/error-code.js +2 -0
  49. package/dist/core/grants.d.ts +28 -3
  50. package/dist/core/grants.js +46 -4
  51. package/dist/core/host-events.js +7 -3
  52. package/dist/core/host-status.js +2 -2
  53. package/dist/core/issue-status.js +4 -3
  54. package/dist/core/listen-address.d.ts +10 -0
  55. package/dist/core/listen-address.js +14 -0
  56. package/dist/core/mark-ready.d.ts +1 -1
  57. package/dist/core/mark-ready.js +1 -1
  58. package/dist/core/mcp-client/client.d.ts +47 -0
  59. package/dist/core/mcp-client/client.js +141 -0
  60. package/dist/core/mcp-client/jsonrpc.d.ts +15 -0
  61. package/dist/core/mcp-client/jsonrpc.js +54 -0
  62. package/dist/core/mcp-client/results.d.ts +13 -0
  63. package/dist/core/mcp-client/results.js +42 -0
  64. package/dist/core/mcp-servers.d.ts +90 -0
  65. package/dist/core/mcp-servers.js +230 -0
  66. package/dist/core/mcp-tools.d.ts +108 -0
  67. package/dist/core/mcp-tools.js +287 -0
  68. package/dist/core/merge-order-check.js +38 -19
  69. package/dist/core/notification-dispatcher.js +2 -1
  70. package/dist/core/power-idle.d.ts +8 -2
  71. package/dist/core/power-idle.js +17 -3
  72. package/dist/core/power.d.ts +5 -0
  73. package/dist/core/power.js +5 -0
  74. package/dist/core/related-pull-requests.js +26 -10
  75. package/dist/core/retention-days.d.ts +5 -0
  76. package/dist/core/retention-days.js +14 -0
  77. package/dist/core/review-fix.js +2 -2
  78. package/dist/core/review-host-tools.js +3 -1
  79. package/dist/core/run-steps/config.d.ts +25 -0
  80. package/dist/core/run-steps/config.js +40 -0
  81. package/dist/core/run-steps/control-chars.d.ts +16 -0
  82. package/dist/core/run-steps/control-chars.js +26 -0
  83. package/dist/core/run-steps/detail.d.ts +32 -0
  84. package/dist/core/run-steps/detail.js +240 -0
  85. package/dist/core/run-steps/extract.d.ts +52 -0
  86. package/dist/core/run-steps/extract.js +467 -0
  87. package/dist/core/run-steps/ingress.d.ts +51 -0
  88. package/dist/core/run-steps/ingress.js +160 -0
  89. package/dist/core/run-steps/last-step.d.ts +15 -0
  90. package/dist/core/run-steps/last-step.js +35 -0
  91. package/dist/core/run-steps/native.d.ts +48 -0
  92. package/dist/core/run-steps/native.js +164 -0
  93. package/dist/core/run-steps/seen.d.ts +16 -0
  94. package/dist/core/run-steps/seen.js +35 -0
  95. package/dist/core/run-steps/summarize.d.ts +57 -0
  96. package/dist/core/run-steps/summarize.js +304 -0
  97. package/dist/core/run-steps/sweep.d.ts +21 -0
  98. package/dist/core/run-steps/sweep.js +41 -0
  99. package/dist/core/run-steps/types.d.ts +89 -0
  100. package/dist/core/run-steps/types.js +39 -0
  101. package/dist/core/run-steps/wire.d.ts +35 -0
  102. package/dist/core/run-steps/wire.js +47 -0
  103. package/dist/core/run-steps/writer.d.ts +49 -0
  104. package/dist/core/run-steps/writer.js +279 -0
  105. package/dist/core/runner.d.ts +70 -16
  106. package/dist/core/runner.js +296 -74
  107. package/dist/core/secret-broker-config.d.ts +2 -0
  108. package/dist/core/secret-broker-config.js +1 -1
  109. package/dist/core/secret-guard.d.ts +5 -2
  110. package/dist/core/secret-guard.js +22 -7
  111. package/dist/core/secrets.d.ts +11 -1
  112. package/dist/core/secrets.js +27 -1
  113. package/dist/core/serializable-retry.d.ts +18 -0
  114. package/dist/core/serializable-retry.js +43 -0
  115. package/dist/core/tool-admin.d.ts +5 -1
  116. package/dist/core/tool-admin.js +7 -2
  117. package/dist/core/tool-names.d.ts +13 -0
  118. package/dist/core/tool-names.js +20 -0
  119. package/dist/core/webhooks.d.ts +4 -0
  120. package/dist/core/webhooks.js +68 -49
  121. package/dist/core/workflow-run-events.js +2 -1
  122. package/dist/generated/prisma/browser.d.ts +39 -0
  123. package/dist/generated/prisma/client.d.ts +39 -0
  124. package/dist/generated/prisma/commonInputTypes.d.ts +80 -50
  125. package/dist/generated/prisma/enums.d.ts +6 -0
  126. package/dist/generated/prisma/enums.js +5 -0
  127. package/dist/generated/prisma/internal/class.d.ts +77 -0
  128. package/dist/generated/prisma/internal/class.js +4 -4
  129. package/dist/generated/prisma/internal/prismaNamespace.d.ts +632 -1
  130. package/dist/generated/prisma/internal/prismaNamespace.js +94 -3
  131. package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +98 -0
  132. package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +94 -3
  133. package/dist/generated/prisma/models/Agent.d.ts +372 -1
  134. package/dist/generated/prisma/models/AgentMcpServer.d.ts +1412 -0
  135. package/dist/generated/prisma/models/AgentMcpServer.js +1 -0
  136. package/dist/generated/prisma/models/AgentRepository.d.ts +40 -1
  137. package/dist/generated/prisma/models/AuthUser.d.ts +1 -1
  138. package/dist/generated/prisma/models/CodingAgentProfile.d.ts +0 -7
  139. package/dist/generated/prisma/models/CodingProxySession.d.ts +159 -2
  140. package/dist/generated/prisma/models/CodingRun.d.ts +76 -1
  141. package/dist/generated/prisma/models/HostProvider.d.ts +2176 -0
  142. package/dist/generated/prisma/models/HostProvider.js +1 -0
  143. package/dist/generated/prisma/models/HostProviderCredential.d.ts +1285 -0
  144. package/dist/generated/prisma/models/HostProviderCredential.js +1 -0
  145. package/dist/generated/prisma/models/HostProviderOperation.d.ts +1470 -0
  146. package/dist/generated/prisma/models/HostProviderOperation.js +1 -0
  147. package/dist/generated/prisma/models/HostProviderTrustedAccount.d.ts +1145 -0
  148. package/dist/generated/prisma/models/HostProviderTrustedAccount.js +1 -0
  149. package/dist/generated/prisma/models/McpServer.d.ts +1500 -0
  150. package/dist/generated/prisma/models/McpServer.js +1 -0
  151. package/dist/generated/prisma/models/NativeGatewayCall.d.ts +39 -1
  152. package/dist/generated/prisma/models/Principal.d.ts +167 -0
  153. package/dist/generated/prisma/models/ResourceGrant.d.ts +1 -1
  154. package/dist/generated/prisma/models/Run.d.ts +503 -1
  155. package/dist/generated/prisma/models/RunStep.d.ts +1453 -0
  156. package/dist/generated/prisma/models/RunStep.js +1 -0
  157. package/dist/generated/prisma/models/Secret.d.ts +387 -0
  158. package/dist/generated/prisma/models/Tool.d.ts +223 -1
  159. package/dist/generated/prisma/models.d.ts +7 -0
  160. package/dist/help/search.js +12 -3
  161. package/dist/help-index.json +812 -52
  162. package/dist/import/create.js +16 -1
  163. package/dist/import/neutral-schema.d.ts +1 -0
  164. package/dist/import/neutral-schema.js +2 -0
  165. package/dist/mcp/auth/access.d.ts +1 -0
  166. package/dist/mcp/auth/grants-cli.d.ts +6 -4
  167. package/dist/mcp/auth/grants-cli.js +42 -3
  168. package/dist/mcp/auth/resource-server.d.ts +3 -1
  169. package/dist/mcp/auth/resource-server.js +17 -2
  170. package/dist/mcp/context.d.ts +6 -0
  171. package/dist/mcp/index.js +21 -0
  172. package/dist/mcp/tools/agents.js +135 -20
  173. package/dist/mcp/tools/grants.js +66 -28
  174. package/dist/mcp/tools/host-providers.d.ts +2 -0
  175. package/dist/mcp/tools/host-providers.js +215 -0
  176. package/dist/mcp/tools/mcp-servers.d.ts +26 -0
  177. package/dist/mcp/tools/mcp-servers.js +481 -0
  178. package/dist/mcp/tools/power.js +2 -2
  179. package/dist/mcp/tools/repositories.js +50 -10
  180. package/dist/mcp/tools/run-access.d.ts +7 -0
  181. package/dist/mcp/tools/run-access.js +14 -0
  182. package/dist/mcp/tools/run-steps.d.ts +16 -0
  183. package/dist/mcp/tools/run-steps.js +85 -0
  184. package/dist/mcp/tools/runs.js +186 -18
  185. package/dist/mcp/tools/secret-elicitation.d.ts +2 -0
  186. package/dist/mcp/tools/secret-elicitation.js +25 -2
  187. package/dist/mcp/tools/secrets.js +38 -4
  188. package/dist/mcp/tools/tools.d.ts +6 -4
  189. package/dist/mcp/tools/tools.js +40 -8
  190. package/dist/mcp/tools/trigger.js +28 -6
  191. package/dist/mcp/transport/http-limits.d.ts +2 -0
  192. package/dist/mcp/transport/http-limits.js +6 -2
  193. package/dist/mcp/webhooks/ingress.js +10 -0
  194. package/dist/native-worker/gateway-server.d.ts +18 -1
  195. package/dist/native-worker/gateway-server.js +38 -9
  196. package/dist/native-worker/gateway.d.ts +5 -0
  197. package/dist/native-worker/gateway.js +13 -1
  198. package/dist/native-worker/http-server.d.ts +6 -4
  199. package/dist/native-worker/http-server.js +53 -8
  200. package/dist/native-worker/ledger.d.ts +6 -2
  201. package/dist/native-worker/ledger.js +5 -4
  202. package/dist/native-worker/protocol.d.ts +1 -0
  203. package/dist/native-worker/protocol.js +4 -1
  204. package/dist/providers/coding-proxy/capability-hash.d.ts +2 -0
  205. package/dist/providers/coding-proxy/capability-hash.js +5 -0
  206. package/dist/providers/coding-proxy/mcp-route.d.ts +34 -0
  207. package/dist/providers/coding-proxy/mcp-route.js +166 -0
  208. package/dist/providers/coding-proxy/memory-ledger.d.ts +2 -0
  209. package/dist/providers/coding-proxy/memory-ledger.js +16 -0
  210. package/dist/providers/coding-proxy/prisma-ledger.d.ts +1 -0
  211. package/dist/providers/coding-proxy/prisma-ledger.js +36 -2
  212. package/dist/providers/coding-proxy/proxy.d.ts +33 -1
  213. package/dist/providers/coding-proxy/proxy.js +266 -75
  214. package/dist/providers/coding-proxy/run-step-forwarder.d.ts +42 -0
  215. package/dist/providers/coding-proxy/run-step-forwarder.js +206 -0
  216. package/dist/providers/coding-proxy/runtime.d.ts +13 -0
  217. package/dist/providers/coding-proxy/runtime.js +87 -4
  218. package/dist/providers/coding-proxy/server.d.ts +3 -0
  219. package/dist/providers/coding-proxy/server.js +10 -0
  220. package/dist/providers/coding-proxy/types.d.ts +18 -0
  221. package/dist/providers/engine/types.d.ts +26 -0
  222. package/dist/providers/executor/composition.js +5 -0
  223. package/dist/providers/executor/container.d.ts +47 -1
  224. package/dist/providers/executor/container.js +84 -8
  225. package/dist/providers/host-tools/invoke.d.ts +37 -0
  226. package/dist/providers/host-tools/invoke.js +117 -0
  227. package/dist/providers/host-tools/operations.d.ts +65 -0
  228. package/dist/providers/host-tools/operations.js +149 -0
  229. package/dist/providers/host-tools/registry.d.ts +79 -0
  230. package/dist/providers/host-tools/registry.js +362 -0
  231. package/dist/providers/host-tools/request-guard.d.ts +17 -0
  232. package/dist/providers/host-tools/request-guard.js +99 -0
  233. package/dist/providers/host-tools/self-test.d.ts +64 -0
  234. package/dist/providers/host-tools/self-test.js +142 -0
  235. package/dist/providers/jobs/docker-isolation.d.ts +2 -2
  236. package/dist/providers/jobs/docker-isolation.js +30 -8
  237. package/dist/providers/jobs/docker.d.ts +8 -0
  238. package/dist/providers/jobs/docker.js +33 -9
  239. package/dist/providers/jobs/kubernetes-isolation.d.ts +3 -1
  240. package/dist/providers/jobs/kubernetes-isolation.js +15 -2
  241. package/dist/providers/jobs/kubernetes.d.ts +13 -0
  242. package/dist/providers/jobs/kubernetes.js +28 -5
  243. package/dist/providers/jobs/types.d.ts +6 -0
  244. package/dist/providers/review-host/types.d.ts +6 -4
  245. package/dist/providers/review-host/types.js +1 -1
  246. package/dist/providers/vcs/git.d.ts +6 -2
  247. package/dist/providers/vcs/git.js +15 -4
  248. package/dist/providers/vcs/github.d.ts +2 -71
  249. package/dist/providers/vcs/github.js +8 -11
  250. package/dist/providers/vcs/index.d.ts +1 -1
  251. package/dist/providers/vcs/index.js +1 -1
  252. package/dist/providers/vcs/remote.d.ts +4 -0
  253. package/dist/providers/vcs/remote.js +7 -1
  254. package/dist/providers/vcs/routing.d.ts +12 -6
  255. package/dist/providers/vcs/routing.js +21 -6
  256. package/dist/providers/vcs/types.d.ts +71 -3
  257. package/dist/quickstart/index.d.ts +5 -0
  258. package/dist/quickstart/index.js +21 -0
  259. package/dist/quickstart-images.json +1 -1
  260. package/dist/sandbox/eval-core.d.ts +12 -2
  261. package/dist/sandbox/eval-core.js +20 -4
  262. package/dist/sandbox/host-functions.d.ts +4 -0
  263. package/dist/sandbox/host-functions.js +7 -2
  264. package/dist/sandbox/limits.d.ts +4 -1
  265. package/dist/sandbox/limits.js +4 -1
  266. package/dist/sandbox/run-in-sandbox.d.ts +6 -0
  267. package/dist/sandbox/run-in-sandbox.js +14 -2
  268. package/dist/sandbox/safe-fetch.d.ts +2 -0
  269. package/dist/sandbox/safe-fetch.js +1 -1
  270. package/dist/sandbox/secret-broker.d.ts +1 -0
  271. package/dist/sandbox/secret-broker.js +1 -1
  272. package/dist/sandbox/tool-timeout.d.ts +32 -0
  273. package/dist/sandbox/tool-timeout.js +52 -0
  274. package/dist/sandbox/user-tool.d.ts +8 -1
  275. package/dist/sandbox/user-tool.js +9 -3
  276. package/dist/serve.js +26 -18
  277. package/dist/viewer/api-schema.d.ts +66 -0
  278. package/dist/viewer/api-schema.js +31 -0
  279. package/dist/viewer/graph.js +2 -1
  280. package/dist/viewer/openapi.js +2 -1
  281. package/dist/viewer/run-detail.d.ts +2 -0
  282. package/dist/viewer/run-detail.js +26 -1
  283. package/dist/wardby-bin.js +5 -0
  284. package/docs/README.md +11 -1
  285. package/docs/agent-recipes.md +37 -4
  286. package/docs/architecture-runtime.md +1 -1
  287. package/docs/claude-code-plugin.md +208 -0
  288. package/docs/code-review-agents.md +6 -0
  289. package/docs/coding-agent-setup.md +94 -1
  290. package/docs/coding-worker-byo-images.md +4 -2
  291. package/docs/coding-worker-isolation.md +94 -7
  292. package/docs/debugging-agent-runs.md +354 -0
  293. package/docs/getting-started-gke.md +33 -11
  294. package/docs/getting-started-identity-provider.md +43 -37
  295. package/docs/getting-started.md +8 -0
  296. package/docs/host-providers.md +294 -0
  297. package/docs/mcp-servers.md +263 -0
  298. package/docs/native-sandbox.md +31 -9
  299. package/docs/security-deployment.md +161 -31
  300. package/docs/tool-secrets.md +3 -0
  301. package/docs/viewer-api.md +27 -12
  302. package/docs/viewer-api.openapi.yml +78 -2
  303. package/help/admin-viewer.md +5 -0
  304. package/help/agent-recipes.md +33 -2
  305. package/help/brokered-secrets.md +3 -0
  306. package/help/build-claude-code-image.md +1 -1
  307. package/help/claude-code-run-pane.md +63 -0
  308. package/help/deploy-gke.md +5 -0
  309. package/help/errors/coding-mcp-gateway-unavailable.md +46 -0
  310. package/help/errors/coding-mcp-pins-unavailable.md +35 -0
  311. package/help/errors/database-auth-invalid.md +1 -1
  312. package/help/errors/host-provider-error.md +40 -0
  313. package/help/errors/host-tool-failed.md +36 -0
  314. package/help/errors/mcp-call-limit.md +22 -0
  315. package/help/errors/mcp-call-timeout.md +22 -0
  316. package/help/errors/mcp-server-auth-failed.md +22 -0
  317. package/help/errors/mcp-server-credentials-unavailable.md +45 -0
  318. package/help/errors/mcp-server-error.md +28 -0
  319. package/help/errors/mcp-server-unreachable.md +22 -0
  320. package/help/errors/mcp-servers-off.md +21 -0
  321. package/help/errors/mcp-tool-not-allowed.md +26 -0
  322. package/help/errors/mcp-tool-removed.md +22 -0
  323. package/help/errors/mcp-unavailable.md +25 -0
  324. package/help/errors/native-sandbox-capacity.md +1 -1
  325. package/help/errors/native-sandbox-deadline-exceeded.md +1 -1
  326. package/help/errors/native-sandbox-docker-failed.md +1 -1
  327. package/help/errors/native-sandbox-gateway-error.md +1 -1
  328. package/help/errors/native-sandbox-gateway-unavailable.md +1 -1
  329. package/help/errors/native-sandbox-image-not-pinned.md +1 -1
  330. package/help/errors/native-sandbox-isolation-mismatch.md +1 -1
  331. package/help/errors/native-sandbox-network-unenforced.md +1 -1
  332. package/help/errors/native-sandbox-requires-catalog.md +1 -1
  333. package/help/errors/native-sandbox-unavailable.md +1 -1
  334. package/help/errors/native-sandbox-warm-delivery-failed.md +1 -1
  335. package/help/errors/native-sandbox-worker-exited.md +1 -1
  336. package/help/errors/native-sandbox-worker-lost.md +1 -1
  337. package/help/errors/native-sandbox-worker-unready.md +1 -1
  338. package/help/errors/repository-not-listed.md +36 -0
  339. package/help/errors/repository-required.md +36 -0
  340. package/help/errors/tool-timeout.md +38 -0
  341. package/help/host-providers.md +40 -0
  342. package/help/identity-and-access.md +4 -1
  343. package/help/low-power-mode.md +19 -8
  344. package/help/mcp-servers.md +73 -0
  345. package/help/mcp.md +9 -2
  346. package/help/native-capabilities.md +27 -1
  347. package/help/native-sandbox.md +1 -1
  348. package/help/operating-agents.md +16 -0
  349. package/help/related-pull-requests.md +7 -3
  350. package/help/repo-instructions-and-skills.md +3 -1
  351. package/help/resume-runs-locally.md +7 -0
  352. package/help/run-steps.md +140 -0
  353. package/help/stop-run.md +1 -1
  354. package/help/troubleshooting/coding-workers.md +9 -1
  355. package/help/troubleshooting/debugging-agent-runs.md +29 -0
  356. package/package.json +2 -1
  357. package/prisma/migrations/20261102000000_host_providers/migration.sql +56 -0
  358. package/prisma/migrations/20261104000000_coding_agent_repository_list/migration.sql +5 -0
  359. package/prisma/migrations/20261106000000_tool_timeout/migration.sql +4 -0
  360. package/prisma/migrations/20261107000000_mcp_servers/migration.sql +33 -0
  361. package/prisma/migrations/20261108000000_coding_mcp/migration.sql +5 -0
  362. package/prisma/migrations/20261109000000_task_run_index/migration.sql +3 -0
  363. package/prisma/migrations/20261110000000_run_steps/migration.sql +26 -0
  364. package/prisma/migrations/20261111000000_run_steps_viewer_notify/migration.sql +59 -0
  365. package/prisma/migrations/20261112000000_run_steps_detail/migration.sql +9 -0
  366. package/prisma/schema.prisma +211 -14
  367. package/scripts/git-askpass.sh +1 -1
@@ -0,0 +1,36 @@
1
+ ---
2
+ id: errors/repository-required
3
+ title: Repository required (repository_required)
4
+ summary: A coding agent with several repositories was asked to work without being told which one; pass repository, or use continuePriorRun.
5
+ audience: operator
6
+ tags: [error, coding-agents, repository_required, repository, link_repository, delegation]
7
+ appliesTo: ">=0.8.0"
8
+ ---
9
+
10
+ # Repository required
11
+
12
+ `repository_required` means a coding agent has more than its default repository
13
+ (it has write links without triggers added with `link_repository`), and the
14
+ request did not say which one to work in. Nothing was started.
15
+
16
+ A `delegate_to_<name>` call to such a sub-agent must name a repository. The
17
+ exception is a follow-up: with `continuePriorRun`, the run works in the
18
+ repository of the run it continues. The message lists the repositories on the
19
+ agent's list.
20
+
21
+ ## What to do
22
+
23
+ - Pass `repository` on the call, using one of the listed repositories, for
24
+ example `your-org/your-repo`.
25
+ - Tell the lead agent in its system prompt which repository each kind of
26
+ change belongs to.
27
+ - If the agent should only work in one repository, remove the extra ones with
28
+ `unlink_repository`.
29
+
30
+ On `trigger_agent` and webhooks, leaving `repository` out uses the default
31
+ repository (`codingProfile.repository`) and is not an error. Webhooks use the
32
+ body field `wardbyRepository`.
33
+
34
+ See [Repository not on the agent's list](repository-not-listed.md),
35
+ [Agent recipes](../agent-recipes.md) and the operator guide
36
+ `docs/coding-agent-setup.md`, section "A coding agent's repositories".
@@ -0,0 +1,38 @@
1
+ ---
2
+ id: errors/tool-timeout
3
+ title: A tool call ran out of time (timeout, fetch_cancelled_or_timeout)
4
+ summary: A sandboxed tool call hit its time limit; raise the tool's timeoutMs, up to the server's WARDBY_TOOL_MAX_TIMEOUT_MS.
5
+ audience: developer
6
+ tags: [timeout, timeoutMs, wall-time, fetch_cancelled_or_timeout, sleep_limit, WARDBY_TOOL_MAX_TIMEOUT_MS]
7
+ appliesTo: ">=0.8.0"
8
+ ---
9
+
10
+ # A tool call ran out of time
11
+
12
+ ## What happened
13
+
14
+ A tool's result was `{"error":"timeout","message":"Exceeded the 10000ms wall-time limit. ..."}`.
15
+ The call ran longer than the tool's time limit, so it was stopped. The run goes on: only this call
16
+ failed. The message names the limit. Without `timeoutMs` a tool has 10 seconds.
17
+
18
+ Related results:
19
+
20
+ - `fetch_cancelled_or_timeout` from inside the tool: a `fetch` was aborted because the call ran
21
+ out of time or the run stopped.
22
+ - `sleep_limit`: the tool asked to wait longer than its own limit.
23
+ - `{"error":"cancelled"}`: the run was stopped while the call was running.
24
+
25
+ ## What to do
26
+
27
+ 1. Check how long the API the tool calls really takes.
28
+ 2. Give the tool a longer limit with `update_tool` (`timeoutMs`, in milliseconds), or
29
+ `wardby tool update <tool> --timeout-ms <ms>`.
30
+ 3. Test it with `dry_run_tool` and the same `timeoutMs`.
31
+
32
+ `timeoutMs` can't exceed the server's `WARDBY_TOOL_MAX_TIMEOUT_MS` (default `300000`); a larger
33
+ value is refused with an error naming the ceiling. If you need more, ask the operator to raise it.
34
+ If the operator lowers the ceiling, a tool with a larger `timeoutMs` runs with the ceiling.
35
+
36
+ Runs that started before the change keep the limit they loaded; the next run uses the new one.
37
+
38
+ See [Use native agents, tools, and data](../native-capabilities.md#tool-time-limits).
@@ -0,0 +1,40 @@
1
+ ---
2
+ id: host-providers
3
+ title: Add a code host with your own tools (host providers)
4
+ summary: Register a code host implemented by custom tools, approve changes to them, and test them with read-only calls. Agents can't use a provider yet.
5
+ audience: operator
6
+ tags: [host provider, register_host_provider, approve_host_provider_tools, hosts:admin, host-manager]
7
+ appliesTo: >=0.8.0
8
+ ---
9
+
10
+ # Host providers
11
+
12
+ A host provider adds a code host using your own custom tools. This release lets you register
13
+ a provider, approve its tools and test them. Agents can't use a registered provider yet.
14
+
15
+ You need the `hosts:admin` scope and a role that grants it (`admin` or `host-manager`). See
16
+ [Identity and access](identity-and-access.md).
17
+
18
+ 1. Write one tool per operation with `create_tool`.
19
+ 2. Broker each credential with `set_secret_broker`, allowing the API hosts and the git host. The
20
+ permission credential needs only the API hosts ([Brokered secrets](brokered-secrets.md)).
21
+ 3. Call `register_host_provider`. No restart is needed today, because agents can't use a provider
22
+ yet; a new provider will need one once they can. A refusal has a
23
+ [`host_provider_*` code](errors/host-provider-error.md).
24
+ 4. Call `test_host_provider` to check each read-only tool. Failures have
25
+ [fixed codes](errors/host-tool-failed.md).
26
+
27
+ `update_tool` changes nothing until you call `approve_host_provider_tools`, a new `timeoutMs`
28
+ included. See which tools have changes with `get_host_provider`.
29
+
30
+ A bound tool reaches only the provider's API hosts, inside one repository's path, and Wardby
31
+ follows no redirects; the tool must fetch the `Location` itself. Any host manager can read and re-register any
32
+ provider.
33
+
34
+ Replacing a secret a provider uses, or changing its broker config, needs `hosts:admin` as well as
35
+ `secrets:write`. A webhook secret stays at 16 characters or more.
36
+
37
+ Keep provider credentials unattached: an agent's own tools can use an attached one without the
38
+ provider's path guard.
39
+
40
+ See [docs/host-providers.md](../docs/host-providers.md) for the full guide.
@@ -21,7 +21,7 @@ audience, and the granted Wardby scopes in `scope` or `scp`.
21
21
 
22
22
  Scopes authorize normal operations such as managing agents, runs, tools,
23
23
  datastores, secrets, webhooks, budgets, packages, services, memory, and
24
- models. Six sensitive permissions have an additional role requirement:
24
+ models. Seven sensitive permissions have an additional role requirement:
25
25
 
26
26
  - `agents:admin` requires the Wardby `admin` role.
27
27
  - `packages:approve` requires the `admin` or `package-approver` role.
@@ -31,6 +31,9 @@ models. Six sensitive permissions have an additional role requirement:
31
31
  - `models:admin` requires the `admin` or `model-manager` role. It adds,
32
32
  overrides, disables, and resets model catalog entries; see
33
33
  [Models and pricing](models.md).
34
+ - `hosts:admin` requires the `admin` or `host-manager` role. It registers host
35
+ providers, approves their tools and, with `secrets:write`, replaces their secrets; see
36
+ [Host providers](../docs/host-providers.md).
34
37
  - `power:manage` requires the `admin` role. It reads low-power state and
35
38
  sleeps the coding proxy and native gateway now (`power_status`,
36
39
  `power_sleep`); see
@@ -3,7 +3,7 @@ id: low-power-mode
3
3
  title: Low power mode on GKE
4
4
  summary: Low power mode: scale the coding proxy and native gateway to zero when idle to cut the cost of a lightly used GKE deployment, and what changes when they wake.
5
5
  audience: operator
6
- tags: [gke, cost, low-power, scale-to-zero, kubernetes, autoscaling, idle, power_sleep, power_status, sleep now, power:manage]
6
+ tags: [gke, cost, low-power, scale-to-zero, kubernetes, autoscaling, idle, power_sleep, power_status, sleep now, power:manage, mcp, coding-agents]
7
7
  appliesTo: ">=0.6.0"
8
8
  ---
9
9
 
@@ -38,14 +38,20 @@ only when `WARDBY_LOW_POWER=1`.
38
38
  - **Sleep.** Every minute the scheduler leader scales the coding proxy
39
39
  (`wardby-coding-proxy`) or native gateway (`wardby-native-gateway`) to 0 when
40
40
  nothing is pending or running for it and nothing finished within the idle
41
- window. The gateway also needs no active session. Either target sleeps only
41
+ window. For the gateway that means sandbox runs and coding runs with MCP
42
+ tools, and it also needs no active session. Either target sleeps only
42
43
  once at least one idle window has passed since it was last woken (annotation
43
44
  `wardby.io/power-woke-at`) and since the control plane started, whichever is
44
45
  later. The check repeats just before scaling. Log: `power: proxy slept (idle 30m)`.
45
46
  - **Wake.** A coding run scales the proxy to 1 and waits for a ready endpoint;
46
- a sandbox run does the same for the gateway. The wait is at least 5 minutes.
47
- A `KUBERNETES_READY_TIMEOUT_MS` (proxy) or `NATIVE_SANDBOX_READY_TIMEOUT_MS`
48
- (gateway) above that, set on the control-plane Deployment, raises it. Expect
47
+ a sandbox run does the same for the gateway. A coding run with MCP tools
48
+ wakes both at once, because its MCP calls go through the gateway; if the
49
+ gateway does not wake it fails before launch with
50
+ [`coding_failure_mcp_gateway_unavailable`](errors/coding-mcp-gateway-unavailable.md).
51
+ The wait is at least 5 minutes.
52
+ A `KUBERNETES_READY_TIMEOUT_MS` (the proxy, and the gateway wake of a coding
53
+ run) or `NATIVE_SANDBOX_READY_TIMEOUT_MS` (the gateway wake of a sandbox run)
54
+ above that, set on the control-plane Deployment, raises it. Expect
49
55
  about 1 to 2 minutes extra on a cold node. Log: `power: proxy woke`. A
50
56
  sandbox run woken this way may then wait for a gVisor node for its worker
51
57
  pod, so its first model call can come several minutes after it started. From
@@ -71,15 +77,17 @@ Pass `target: "proxy"` or `target: "gateway"` to sleep one; omit it for both.
71
77
 
72
78
  - It scales the target to 0 at once, ignoring the idle window and the woke-at
73
79
  grace.
74
- - It never stops a run. A target with a pending or running run, or for the
75
- gateway an active gateway session, stays up, and its run ids are returned:
80
+ - It never stops a run. A target with a pending or running run (for the
81
+ gateway, a sandbox run or a coding run with MCP tools), or for the gateway an
82
+ active gateway session, stays up, and its run ids are returned:
76
83
  `{ "slept": ["proxy"], "blocked": [{ "target": "gateway", "runIds": ["..."] }] }`.
77
84
  Recently finished runs do not block it.
78
85
  - The next run wakes the target as usual.
79
86
  - Each call is logged with `event: "power.sleep"` and the caller's principal.
80
87
 
81
88
  `power_status` returns, for each target, `replicas`, `ready`, `wokeAt` and
82
- `blockers` (the run ids keeping it busy).
89
+ `blockers` (the run ids keeping it busy; for the gateway these include
90
+ pending or running coding runs with MCP tools).
83
91
 
84
92
  Both tools need the `power:manage` scope, which only the `admin` role grants
85
93
  (see [Identity and access](identity-and-access.md)). With the mode off,
@@ -111,6 +119,9 @@ full table.
111
119
 
112
120
  - [`low_power_wake_timeout`](errors/low-power-wake-timeout.md): the target did
113
121
  not become ready in time, or its Deployment does not exist.
122
+ - [`coding_failure_mcp_gateway_unavailable`](errors/coding-mcp-gateway-unavailable.md):
123
+ a coding run with MCP tools failed before launch because the gateway did not
124
+ wake.
114
125
  - `native_sandbox_launch_abandoned` (0.7.0 and later): a sandbox run was
115
126
  stopped while the gateway woke, so no worker pod was made.
116
127
  - [`low_power_disabled`](errors/low-power-disabled.md): `power_sleep` was
@@ -0,0 +1,73 @@
1
+ ---
2
+ id: mcp-servers
3
+ title: Remote MCP server tools for native and coding agents
4
+ summary: Register a remote MCP server, then attach an allowlist of its tools to a native, Claude Code or Codex agent; credentials stay in brokered secrets.
5
+ audience: operator
6
+ tags: [mcp, mcp server, coding-agent, codex, register_mcp_server, attach_mcp_server, readOnlyHint, WARDBY_MCP_SERVERS]
7
+ appliesTo: ">=0.8.0"
8
+ ---
9
+
10
+ # Remote MCP server tools for native and coding agents
11
+
12
+ A native, Claude Code or Codex agent can call tools from a remote MCP server (Streamable HTTP, HTTPS only).
13
+
14
+ 1. Create a [brokered secret](brokered-secrets.md) for the server's host, for example
15
+ `Authorization: Bearer {value}`.
16
+ 2. `register_mcp_server` with a `name`, the `url` (`https://mcp.example.com/mcp`) and
17
+ `secretNames`. Wardby saves the server's tool list.
18
+ 3. `attach_mcp_server` with the agent, the server and `allowedTools` (exact names, at least one).
19
+ The agent sees each as `<server name>__<tool name>`.
20
+ 4. After the server changes its tools, `refresh_mcp_server` applies the new list at once. Allowed
21
+ tools the server dropped show as `missingTools` in `get_agent`.
22
+
23
+ Each call has `callTimeoutMs` (default `30000`, at most `WARDBY_TOOL_MAX_TIMEOUT_MS`, and never
24
+ past the run's deadline). Results are untrusted input; the allowlist is the control. stdio servers
25
+ and OAuth are not supported.
26
+
27
+ `WARDBY_MCP_SERVERS` is `owners` (default), `admins` (registering needs `hosts:admin`) or `off`
28
+ (only `detach_mcp_server` and `delete_mcp_server` still work, for cleanup).
29
+
30
+ Each call opens a fresh MCP session, so a server that keeps state between calls in one session
31
+ won't see it. Arguments that aren't a JSON object return `invalid_arguments`.
32
+
33
+ ## Coding agents
34
+
35
+ `attach_mcp_server` also takes a Claude Code or Codex agent. Its run reaches the tools only through
36
+ the coding proxy and the native gateway; the worker never sees the server's URL or secrets.
37
+
38
+ - Claude Code agents see each tool as `mcp__wardby_mcp__<server name>__<tool name>` and may use any
39
+ allowed tool.
40
+ - Codex agents may use only tools the server marks `readOnlyHint: true`. Wardby checks this when
41
+ you attach, when a run loads and on every call. Repository code in a Codex run can read the run's
42
+ MCP token, so a Codex agent must not be given tools that change things. `readOnlyHint` is the
43
+ server's claim, which Wardby can't verify, so the allowlist stays your control.
44
+ - A run may make `WARDBY_MCP_MAX_CALLS_PER_RUN` calls (default `100`, failed calls count); more are
45
+ refused with [`mcp_call_limit`](errors/mcp-call-limit.md).
46
+ - The proxy needs `WARDBY_MCP_GATEWAY_URL`. Without it coding agents get no MCP tools
47
+ ([`mcp_unavailable`](errors/mcp-unavailable.md)).
48
+ - MCP for coding agents needs this release's Claude worker image and a new Codex driver image.
49
+ Older images get no MCP tools, and runs don't fail.
50
+ - A repository's MCP configuration is still never loaded.
51
+ - Codex models that use tool search load MCP tools on demand. They need this release's coding
52
+ proxy; an older one refuses their requests with `openai_tool_not_allowed:tool_search`.
53
+ - Switching an agent to Codex with `update_agent` keeps its attachments, but tools not marked
54
+ read-only won't reach Codex runs; the result's `warnings` names them.
55
+ - The proxy gives up on a coding run's MCP call after 5 minutes, whatever
56
+ `WARDBY_TOOL_MAX_TIMEOUT_MS` says ([`mcp_unavailable`](errors/mcp-unavailable.md)).
57
+
58
+ Share a server with `grant_access` (`resourceType: "mcp_server"`; needs the `agents:write` scope,
59
+ registering needs `tools:write`). `use` lets the grantee attach it, and its tools then run with your
60
+ secrets. Revoking the grant, or lowering it to `read`, detaches the server from the grantee's agents
61
+ at once, and their runs' next call is refused with `mcp_tool_not_allowed`.
62
+
63
+ Errors a call can return: [`mcp_server_unreachable`](errors/mcp-server-unreachable.md),
64
+ [`mcp_server_auth_failed`](errors/mcp-server-auth-failed.md),
65
+ [`mcp_server_credentials_unavailable`](errors/mcp-server-credentials-unavailable.md),
66
+ [`mcp_server_error`](errors/mcp-server-error.md),
67
+ [`mcp_tool_not_allowed`](errors/mcp-tool-not-allowed.md),
68
+ [`mcp_tool_removed`](errors/mcp-tool-removed.md),
69
+ [`mcp_call_timeout`](errors/mcp-call-timeout.md),
70
+ [`mcp_servers_off`](errors/mcp-servers-off.md), and for coding agents
71
+ [`mcp_call_limit`](errors/mcp-call-limit.md) and [`mcp_unavailable`](errors/mcp-unavailable.md).
72
+
73
+ Full guide: [Remote MCP servers](../docs/mcp-servers.md).
package/help/mcp.md CHANGED
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  id: mcp-access
3
- title: Connect an MCP client
3
+ title: Connect a client to Wardby
4
4
  summary: Use Wardby's local stdio or protected HTTP MCP transport safely.
5
5
  audience: developer
6
6
  tags: [mcp, oauth, codex, claude-code]
7
7
  appliesTo: >=0.2.1
8
8
  ---
9
9
 
10
- # Connect an MCP client
10
+ # Connect a client to Wardby
11
11
 
12
12
  For local use, `wardby quickstart` can register the local stdio MCP server with
13
13
  Codex or Claude Code. Local stdio trusts the local operator.
@@ -28,3 +28,10 @@ offline catalog as `wardby help`; they expose no instance data or credentials.
28
28
 
29
29
  See [`docs/getting-started-identity-provider.md`](../docs/getting-started-identity-provider.md)
30
30
  for the supported self-hosted and delegated identity-provider setup.
31
+
32
+ From Wardby 0.8.0, Claude Code can show your runs in a pane beside the chat
33
+ through the `wardby-runs` plugin: run `wardby claude-plugin install`, then
34
+ `/wardby-runs`. Search help for "claude code plugin" (article
35
+ `claude-code-run-pane`, Wardby 0.8.0 and later).
36
+
37
+ To follow what a run is doing, call `get_run_steps` (article `run-steps`).
@@ -3,7 +3,7 @@ id: native-capabilities
3
3
  title: Use native agents, tools, and data
4
4
  summary: Attach scoped tools, secrets, datastores, memory, schedules, and sub-agents to a native Wardby agent.
5
5
  audience: developer
6
- tags: [agents, tools, secrets, datastores, memory, schedules, subagents, zod, paramsZod, create_tool, dry_run_tool]
6
+ tags: [agents, tools, secrets, datastores, memory, schedules, subagents, zod, create_tool, dry_run_tool, timeoutMs, mcp]
7
7
  appliesTo: >=0.2.1
8
8
  ---
9
9
 
@@ -48,11 +48,37 @@ rewrite the schema with the Zod 4 API (for example `z.looseObject()` for
48
48
  `.nonstrict()`, `z.string().optional()` for `z.ostring()`, and `z.ipv4()` or
49
49
  `z.ipv6()` for `.ip()`), dry-run it again, and save it with `update_tool`.
50
50
 
51
+ ## Tool time limits
52
+
53
+ Wardby 0.8.0 and later. Each call of a tool has 10 seconds by default. A tool that calls a slow API can
54
+ ask for more with `timeoutMs` (milliseconds, at least `1000`) on `create_tool`,
55
+ `update_tool` or `dry_run_tool`, or `--timeout-ms` on `wardby tool create` and
56
+ `wardby tool update`. Pass `timeoutMs: null` to `update_tool` (or
57
+ `--timeout-ms default` to `wardby tool update`) to go back to the default.
58
+
59
+ - The limit covers the whole call. Each `fetch` may run until the limit, and a
60
+ timer (`setTimeout`) can't be set for longer than it.
61
+ - The server's `WARDBY_TOOL_MAX_TIMEOUT_MS` (default `300000`, five minutes)
62
+ caps it. A larger `timeoutMs` is refused with an error naming the ceiling. If
63
+ the operator lowers the ceiling later, existing tools run with the ceiling.
64
+ - A run keeps the value it loaded, as it does the tool's code.
65
+ - A call never outlasts its run: stopping the run aborts it, and a sandboxed
66
+ run's deadline cuts it off.
67
+ - `list_tools` and `get_agent` show each tool's `timeoutMs` (`null` means the
68
+ default).
69
+
70
+ Test a slow tool with `dry_run_tool` and the same `timeoutMs` before you attach
71
+ it. A call that runs out of time fails with a `timeout` error; the help article
72
+ `errors/tool-timeout` explains what to do.
73
+
51
74
  Use a budget or shared budget group on every agent, and inspect runs before
52
75
  expanding its access. An access grant is intentional delegation: use it only
53
76
  when an owner permits one agent to use another resource. Creating or changing
54
77
  tools, secrets, datastores, schedules, webhooks, memory, and budget groups
55
78
  requires the matching MCP scope.
56
79
 
80
+ Native agents can also call tools from remote MCP servers; see
81
+ [Remote MCP servers](../docs/mcp-servers.md) (0.8.0+).
82
+
57
83
  See [Operate agents](operating-agents.md) for run and budget management, and
58
84
  [`README.md`](../README.md) for the feature overview and MCP operations.
@@ -4,7 +4,7 @@ title: Run native agents in a sandbox
4
4
  summary: Turn on sandbox mode so a native agent's turn loop and tools run in a single-use, credential-free Docker container or Kubernetes pod behind a native gateway.
5
5
  audience: operator
6
6
  tags: [native-agents, sandbox, isolation, docker, kubernetes, native-gateway, security, warm-pool]
7
- appliesTo: ">=0.5.4"
7
+ appliesTo: ">=0.6.0"
8
8
  ---
9
9
 
10
10
  # Run native agents in a sandbox
@@ -32,6 +32,22 @@ A running run's cost, token counts, and turn count update after each model
32
32
  call, so `get_run` and `list_runs` show spend so far rather than zero until the
33
33
  run finishes.
34
34
 
35
+ To see your runs across every agent, call `list_runs` without an `agentId`
36
+ (Wardby 0.8.0 and later). Each row names its agent and leaves out the final
37
+ text; `active: true` keeps pending and running runs, and `since` (an ISO time)
38
+ keeps runs that started or finished since then plus any still active. You see
39
+ every run of the agents you own and only the runs you started on the others.
40
+ `list_agents` with `summary: true` returns just each agent's id, name, kind,
41
+ model, coding provider, budget, owner and your access, without the full
42
+ configuration.
43
+
44
+ From Wardby 0.8.0, `get_run` and `list_runs` without an `agentId` also return
45
+ `triggerInfo` (the pull request or issue that started the run, and whether it
46
+ was a review or a mention), `outcomes` (pull requests opened, comments, checks)
47
+ and `serviceReadiness` (each coding-run service's state). They use the admin
48
+ viewer API's shapes. Match one run's pull-request outcome to another run's
49
+ trigger to follow a pull request through its review and fix rounds.
50
+
35
51
  To stop a run that is pending, queued, or running (for example one a schedule
36
52
  started that you did not want), call `stop_run` with its id. It ends as
37
53
  `cancelled`, along with the sub-agent runs it still has in flight. Search help
@@ -128,15 +128,19 @@ such hints: a fix round's task names only its own pull request. Merged and
128
128
  closed pull requests are never listed as continuable: a change there needs a
129
129
  new pull request, which joins the set once it is recorded.
130
130
 
131
+ When the sub-agent is a coding agent with a list of repositories, a
132
+ follow-up delegation passes `continuePriorRun` and takes its repository from
133
+ that run, so it needs no `repository` of its own.
134
+
131
135
  Give your own delivery or router agent's system prompt a line such as:
132
136
 
133
137
  Continue the pull request you were asked about, and any listed open
134
138
  sibling the change requires; never open a new pull request in a
135
139
  repository that already has an open sibling for this request.
136
140
 
137
- The usual limits still apply: `maxDelegationsPerRun` and never delegating to
138
- the same sub-agent twice in one run; every push to a sibling pull request
139
- gets its own review; fix rounds are capped per pull request and only one
141
+ The usual limits still apply: `maxDelegationsPerRun` and delegating to each
142
+ sub-agent and repository at most once per run; every push to a sibling pull
143
+ request gets its own review; fix rounds are capped per pull request and only one
140
144
  runs at a time on a pull request; and a continuation only ever reaches a
141
145
  sub-agent that shares the same owner as the one asked to continue it.
142
146
 
@@ -4,7 +4,7 @@ title: Repository instructions and skills in coding runs
4
4
  summary: What AGENTS.md, CLAUDE.md, and repo skills a coding run loads, and how to turn repo skills off per agent with codingProfile.repoSkills.
5
5
  audience: all
6
6
  tags: [coding, skills, repoSkills, claudeBareMode, CLAUDE.md, AGENTS.md, SKILL.md, codex, claude-code]
7
- appliesTo: ">=0.5.4"
7
+ appliesTo: ">=0.6.0"
8
8
  ---
9
9
 
10
10
  # Repository instructions and skills in coding runs
@@ -81,6 +81,8 @@ never loaded in either mode.
81
81
 
82
82
  ## See also
83
83
 
84
+ - [Remote MCP servers](../docs/mcp-servers.md) (0.8.0+) are for native agents only; a coding run loads no
85
+ MCP configuration.
84
86
  - [Choose a native or coding agent](creating-agents.md) for `codingProfile`
85
87
  basics and the other fields it accepts.
86
88
  - [Bring-Your-Own Coding-Worker Images](../docs/coding-worker-byo-images.md)
@@ -49,6 +49,10 @@ blob store nothing is stored, and `update_agent` warns you.
49
49
  (default 10 MiB, at most 64 MiB). Each run records a status (`stored`,
50
50
  `too_large`, `not_captured` or `failed`) with a reason code.
51
51
 
52
+ For a short line-per-step record of any run, without a blob store and without
53
+ continuing it, see `run-steps`; from 0.9.0 its `detail` level is a lighter way to
54
+ see tool output without a transcript.
55
+
52
56
  ## Who can read it
53
57
 
54
58
  Transcripts are stored from the first run with `sessionResume` on. Anyone
@@ -129,3 +133,6 @@ or its runs fail at input with `worker_input_failed`.
129
133
 
130
134
  Full setup: [Resume a run locally](../docs/coding-agent-setup.md#resume-a-run-locally).
131
135
  See also [Choose a native or coding agent](help://creating-agents).
136
+
137
+ The `wardby-runs` Claude Code plugin can start the import from a run's detail
138
+ (**Continue locally**); see `claude-code-run-pane` (Wardby 0.8.0 and later).
@@ -0,0 +1,140 @@
1
+ ---
2
+ id: run-steps
3
+ title: See what a run is doing (run steps)
4
+ summary: Wardby records each run's steps, one line per tool call or model message, so you can follow a running run and read what a finished one did with get_run_steps. Run steps detail adds tool output.
5
+ audience: operator
6
+ tags: [run steps, claude code run steps, get_run_steps, what is my run doing, WARDBY_RUN_STEPS, viewer step event]
7
+ appliesTo: >=0.9.0
8
+ ---
9
+
10
+ # See what a run is doing
11
+
12
+ Wardby records the steps of a run while it runs:
13
+
14
+ - one line for each **tool call**: the tool, and its command, file or first
15
+ argument, cut to about 100 characters, with its status once the result is
16
+ back (`ok`, `error`, or `exit N` for a command that exited with code N);
17
+ - one line for what the **model said**, cut to about 120 characters.
18
+
19
+ ## Levels
20
+
21
+ | Level | Tool input | Tool result | Model text |
22
+ | --------- | -------------------- | --------------------------------------- | -------------------- |
23
+ | `off` | - | - | - |
24
+ | `summary` | about 100 characters | status only (`ok`, `error`, `exit N`) | about 120 characters |
25
+ | `detail` | up to about 4 KB | status and the last ~2 KB of its output | up to about 8 KB |
26
+
27
+ At `summary`, the default, tool output is never recorded. At `detail` each step
28
+ also keeps a **detail** text, at most 16 KB. When the output is cut at the
29
+ start, the partial first line is dropped if it ends within 256 characters;
30
+ otherwise only the first 256 characters are dropped, so a long single-line
31
+ output, such as a JSON result, keeps about its last 1.8 KB. At every level,
32
+ terminal escape sequences (colour codes, links, clipboard writes, title changes)
33
+ and every other control character except line breaks and tabs are removed from
34
+ step text before it is stored.
35
+
36
+ A run's level is the lower of two settings, fixed when the run is dispatched (a
37
+ change reaches later runs only; lowering the ceiling also stops detail for runs
38
+ already in flight):
39
+
40
+ - the instance's ceiling, `WARDBY_RUN_STEPS` (default `summary`);
41
+ - the agent's `runSteps` (`off`, `summary` or `detail`), set by the agent's
42
+ owner with `create_agent` or `update_agent`. Unset counts as `summary`. Set
43
+ `null` to clear it.
44
+
45
+ So `detail` needs both the operator and the agent's owner. If `runSteps` asks
46
+ for more than the instance allows, the value is stored, `update_agent` and
47
+ `get_agent` say so in `warnings`, and runs record at the ceiling.
48
+
49
+ > **Warning: `detail` stores tool output.** Before a step is stored, every
50
+ > secret value the run was given is removed and anything shaped like a token or
51
+ > key is masked. A secret that exists only inside a repository file, or another
52
+ > source the run read, and that matches no known shape, is not known to Wardby
53
+ > and can remain in the detail text. That is why detail is off unless both the
54
+ > operator and the agent's owner ask for it. Turn it on only for agents whose
55
+ > tool output you are prepared to keep for the retention period.
56
+
57
+ Steps are recorded for native runs (in the control plane and on the native
58
+ sandbox) and for Claude Code and Codex runs. Every agent's shell command shows
59
+ as `Bash`: a native agent's `run_command`, Claude Code's command tool, and
60
+ Codex's `exec_command`, `shell`, `local_shell` and `shell_command`. Another tool
61
+ shows under its own name (for example `apply_patch`), and a remote MCP tool as
62
+ `mcp:<tool>`.
63
+
64
+ A Claude Code or Codex run's final answer is one `said` step: the start of the
65
+ summary it returned (the pull request description), or `Finished` with the
66
+ outcome (for example `Finished: changes ready`) when it returned none.
67
+
68
+ For Claude Code and Codex runs, the coding proxy reads the steps from the
69
+ model's replies after relaying them and posts them to the server, which needs a
70
+ listener for them: `WARDBY_RUN_STEPS_LISTEN` on `wardby serve` and
71
+ `WARDBY_RUN_STEPS_URL` on the proxy. The reference GKE manifests set both; the
72
+ kind overlay sets only `WARDBY_RUN_STEPS_URL`, so set
73
+ `WARDBY_RUN_STEPS_LISTEN` on the host's `wardby serve`. Without either, coding
74
+ runs record no steps; native runs are not affected. A slow or unreachable listener loses steps; it never slows the run.
75
+
76
+ ## Read the steps
77
+
78
+ - `get_run_steps` with `runId` lists a run's steps, oldest first, 50 at a time
79
+ (`limit`, at most 200). `next` is what to pass as `after` for the next page.
80
+ To follow a running run, call it again every few seconds with `after` set to
81
+ the last `seq` you have.
82
+ - `get_run` and `list_runs` (without `agentId`) include `lastStep`, the run's
83
+ newest step as one line, for example `Bash: npm test (exit 1)`.
84
+ - The `wardby-runs` Claude Code pane shows a running run's last steps and a
85
+ finished run's steps; see `claude-code-run-pane`.
86
+ - The admin viewer API sends a `step` event on `/admin/api/events` for each
87
+ step and status, and `GET /admin/api/runs/<id>` lists the run's newest 200
88
+ steps (see `admin-viewer`). The Wardby Viewer app shows them in a **Steps**
89
+ section of a run's detail.
90
+
91
+ At `detail`, `get_run_steps` also returns each step's `detail` to the agent's
92
+ owner and to the person who started the run (and to the stdio operator); anyone
93
+ else, including an admin who does not own the agent, gets the lines only. `lastStep`, the admin viewer API
94
+ and its `step` events never include detail.
95
+
96
+ You can read a run's steps when you can read the run with `get_run`.
97
+
98
+ A run records at most 2,000 steps. Later steps are not recorded; `dropped`
99
+ counts them.
100
+
101
+ ## Secrets
102
+
103
+ Before a step is stored, Wardby removes every secret value the run's agent has
104
+ (its attached secrets, readable or brokered, and its MCP servers' secrets), the
105
+ run's own capability and registry token, and
106
+ anything shaped like a token or key. A command that echoes a secret shows
107
+ `[REDACTED]` in its place.
108
+
109
+ ## Retention
110
+
111
+ Steps, and their detail, are deleted `RUN_STEP_RETENTION_DAYS` after they are
112
+ recorded (default 30). A change applies to steps recorded after it. `get_run_steps` reports `expired` when a run finished more than
113
+ `RUN_STEP_RETENTION_DAYS` ago and has no steps left.
114
+
115
+ ## Settings
116
+
117
+ | Variable | Default | What it does |
118
+ | ------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
119
+ | `WARDBY_RUN_STEPS` | `summary` | `off` records no steps; `summary` the lines above; `detail` allows agents whose `runSteps` is `detail` to record detail. The ceiling for every run. Any other value stops start-up. |
120
+ | `RUN_STEP_RETENTION_DAYS` | `30` | Days to keep a step, a whole number from 1 to 3650. Any other value stops start-up. |
121
+ | `WARDBY_RUN_STEPS_LISTEN` | unset | On `wardby serve` only: `host:port` (or `:port`) of the listener the coding proxy posts coding runs' steps to. Unset: no listener. |
122
+ | `WARDBY_RUN_STEPS_URL` | unset | On the coding proxy: the listener's origin, for example `http://<server host>:8792`, with no credentials or path. Unset: coding runs record no steps. |
123
+
124
+ Set `WARDBY_RUN_STEPS` (including `detail`) and `RUN_STEP_RETENTION_DAYS` on
125
+ every process that writes steps: `wardby serve`,
126
+ `wardby scheduler`, `wardby run`, `wardby mcp` and `wardby native-gateway`. The
127
+ coding proxy reads `WARDBY_RUN_STEPS` too: with `off`, or with
128
+ `WARDBY_RUN_STEPS_URL` unset, no step text leaves the proxy. For a coding
129
+ run's steps use `wardby serve` (the only process that runs the listener), not
130
+ the stdio `wardby mcp`.
131
+
132
+ For coding runs at `detail`, set `WARDBY_RUN_STEPS=detail` on the coding proxy
133
+ too: below `detail`, the proxy never sends any tool output to the server.
134
+
135
+ The listener is a second network path into the server, from the coding proxy
136
+ only; keep it off any load balancer. See
137
+ [Run steps](../docs/security-deployment.md#run-steps) for how to restrict it.
138
+
139
+ The full guide is
140
+ [Debugging agent runs](../docs/debugging-agent-runs.md#run-steps).
package/help/stop-run.md CHANGED
@@ -28,7 +28,7 @@ in its `stopRequestReason` (and, for a native run, in its `error`).
28
28
  | The run is | `stop_run` |
29
29
  | ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
30
30
  | Pending, or a coding run queued for a slot | Ends it now. It never starts. |
31
- | A running native run in the control plane | Ends it now; the run stops at its next step (the model turn or tool call already under way finishes first). |
31
+ | A running native run in the control plane | Ends it now; the run stops at its next step. A model turn already under way finishes first; a tool call already under way is aborted within a few seconds. |
32
32
  | A running native run in the sandbox | Ends it now and ends its gateway session, so the worker's next call is refused and it exits. A worker still running after a short grace (5 seconds) is killed and removed; a warm pool worker is never reused. |
33
33
  | A running coding run | Ends it, cancels its model proxy session, and stops and removes its worker. It opens or updates no pull request afterwards. |
34
34
  | Already finished (any other status) | Changes nothing and returns its status. Calling `stop_run` again is safe. |
@@ -3,7 +3,7 @@ id: troubleshooting/coding-workers
3
3
  title: Troubleshoot coding workers
4
4
  summary: Investigate coding-worker setup, isolation preflight, and safe failure handling.
5
5
  audience: operator
6
- tags: [coding-agents, quota, coding_queue_timeout, docker, kubernetes, isolation, services, debug-trace, debugTraceMinutes, debugTraceMaxMb, maxOutputTokens, output-tokens, claude-code, codex, memory, CODING_MEMORY_MB, CODING_CPUS, out-of-memory]
6
+ tags: [coding-agents, get_run, request, requestUnavailable, quota, coding_queue_timeout, docker, kubernetes, isolation, services, debug-trace, debugTraceMinutes, debugTraceMaxMb, maxOutputTokens, output-tokens, claude-code, codex, memory, CODING_MEMORY_MB, CODING_CPUS, out-of-memory]
7
7
  appliesTo: >=0.2.1
8
8
  ---
9
9
 
@@ -95,6 +95,14 @@ commands run in a tool-runner container limited to at most 512 MiB and 0.25 CPU.
95
95
  3. For a Claude Code agent with heavy checks, run it on Codex instead, since raising
96
96
  the pod's memory doesn't raise the tool runner's limit.
97
97
 
98
+ ## See what a run was asked to do
99
+
100
+ From Wardby 0.8.0, `get_run` returns a coding run's `request`: the task it
101
+ received from `trigger_agent`, a webhook or a lead, without the agent's standing
102
+ instructions. Use it to check what a lead told a coding agent. The agent's secret
103
+ values and token-shaped values are masked. If the secrets can't be read, you get
104
+ `requestUnavailable: true` instead of the text.
105
+
98
106
  ## Debug trace
99
107
 
100
108
  When a run's fixed error code or a slow run doesn't say enough, an admin can