@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.
- package/.env.example +5 -5
- package/README.md +6 -1
- package/deploy/local/docker-compose.quickstart-coding.yml +11 -0
- package/dist/claude-coding-worker/driver.d.ts +12 -0
- package/dist/claude-coding-worker/driver.js +29 -7
- package/dist/claude-coding-worker/main.js +5 -1
- package/dist/claude-coding-worker/sdk.js +17 -1
- package/dist/claude-plugin/command.d.ts +64 -0
- package/dist/claude-plugin/command.js +379 -0
- package/dist/cli-help.d.ts +1 -1
- package/dist/cli-help.js +2 -1
- package/dist/cli.js +71 -3
- package/dist/coding/code-host.d.ts +16 -0
- package/dist/coding/code-host.js +60 -0
- package/dist/coding/mcp-token.d.ts +12 -0
- package/dist/coding/mcp-token.js +26 -0
- package/dist/coding/protocol.js +2 -0
- package/dist/coding/redact.js +6 -1
- package/dist/coding/transcript/recorder.d.ts +5 -4
- package/dist/coding/transcript/recorder.js +3 -9
- package/dist/coding-worker/debug-trace.d.ts +3 -1
- package/dist/coding-worker/debug-trace.js +4 -2
- package/dist/coding-worker/driver.js +8 -1
- package/dist/coding-worker/main.js +5 -1
- package/dist/coding-worker/mcp-config.d.ts +27 -0
- package/dist/coding-worker/mcp-config.js +32 -0
- package/dist/coding-worker/sdk.d.ts +36 -0
- package/dist/coding-worker/sdk.js +28 -1
- package/dist/coding-worker/types.d.ts +4 -0
- package/dist/config/mcp-call-limit.d.ts +8 -0
- package/dist/config/mcp-call-limit.js +18 -0
- package/dist/config/mcp-servers.d.ts +8 -0
- package/dist/config/mcp-servers.js +12 -0
- package/dist/config/test-simulators.d.ts +10 -0
- package/dist/config/test-simulators.js +28 -0
- package/dist/config/tool-timeout.d.ts +1 -0
- package/dist/config/tool-timeout.js +18 -0
- package/dist/core/coding-mcp.d.ts +36 -0
- package/dist/core/coding-mcp.js +253 -0
- package/dist/core/coding-repository.d.ts +46 -0
- package/dist/core/coding-repository.js +92 -0
- package/dist/core/delegation-slots.d.ts +27 -0
- package/dist/core/delegation-slots.js +44 -0
- package/dist/core/dispatch.d.ts +6 -2
- package/dist/core/dispatch.js +39 -11
- package/dist/core/engine-native.d.ts +2 -0
- package/dist/core/engine-native.js +13 -0
- package/dist/core/error-code.js +2 -0
- package/dist/core/grants.d.ts +28 -3
- package/dist/core/grants.js +46 -4
- package/dist/core/host-events.js +7 -3
- package/dist/core/host-status.js +2 -2
- package/dist/core/issue-status.js +4 -3
- package/dist/core/listen-address.d.ts +10 -0
- package/dist/core/listen-address.js +14 -0
- package/dist/core/mark-ready.d.ts +1 -1
- package/dist/core/mark-ready.js +1 -1
- package/dist/core/mcp-client/client.d.ts +47 -0
- package/dist/core/mcp-client/client.js +141 -0
- package/dist/core/mcp-client/jsonrpc.d.ts +15 -0
- package/dist/core/mcp-client/jsonrpc.js +54 -0
- package/dist/core/mcp-client/results.d.ts +13 -0
- package/dist/core/mcp-client/results.js +42 -0
- package/dist/core/mcp-servers.d.ts +90 -0
- package/dist/core/mcp-servers.js +230 -0
- package/dist/core/mcp-tools.d.ts +108 -0
- package/dist/core/mcp-tools.js +287 -0
- package/dist/core/merge-order-check.js +38 -19
- package/dist/core/notification-dispatcher.js +2 -1
- package/dist/core/power-idle.d.ts +8 -2
- package/dist/core/power-idle.js +17 -3
- package/dist/core/power.d.ts +5 -0
- package/dist/core/power.js +5 -0
- package/dist/core/related-pull-requests.js +26 -10
- package/dist/core/retention-days.d.ts +5 -0
- package/dist/core/retention-days.js +14 -0
- package/dist/core/review-fix.js +2 -2
- package/dist/core/review-host-tools.js +3 -1
- package/dist/core/run-steps/config.d.ts +25 -0
- package/dist/core/run-steps/config.js +40 -0
- package/dist/core/run-steps/control-chars.d.ts +16 -0
- package/dist/core/run-steps/control-chars.js +26 -0
- package/dist/core/run-steps/detail.d.ts +32 -0
- package/dist/core/run-steps/detail.js +240 -0
- package/dist/core/run-steps/extract.d.ts +52 -0
- package/dist/core/run-steps/extract.js +467 -0
- package/dist/core/run-steps/ingress.d.ts +51 -0
- package/dist/core/run-steps/ingress.js +160 -0
- package/dist/core/run-steps/last-step.d.ts +15 -0
- package/dist/core/run-steps/last-step.js +35 -0
- package/dist/core/run-steps/native.d.ts +48 -0
- package/dist/core/run-steps/native.js +164 -0
- package/dist/core/run-steps/seen.d.ts +16 -0
- package/dist/core/run-steps/seen.js +35 -0
- package/dist/core/run-steps/summarize.d.ts +57 -0
- package/dist/core/run-steps/summarize.js +304 -0
- package/dist/core/run-steps/sweep.d.ts +21 -0
- package/dist/core/run-steps/sweep.js +41 -0
- package/dist/core/run-steps/types.d.ts +89 -0
- package/dist/core/run-steps/types.js +39 -0
- package/dist/core/run-steps/wire.d.ts +35 -0
- package/dist/core/run-steps/wire.js +47 -0
- package/dist/core/run-steps/writer.d.ts +49 -0
- package/dist/core/run-steps/writer.js +279 -0
- package/dist/core/runner.d.ts +70 -16
- package/dist/core/runner.js +296 -74
- package/dist/core/secret-broker-config.d.ts +2 -0
- package/dist/core/secret-broker-config.js +1 -1
- package/dist/core/secret-guard.d.ts +5 -2
- package/dist/core/secret-guard.js +22 -7
- package/dist/core/secrets.d.ts +11 -1
- package/dist/core/secrets.js +27 -1
- package/dist/core/serializable-retry.d.ts +18 -0
- package/dist/core/serializable-retry.js +43 -0
- package/dist/core/tool-admin.d.ts +5 -1
- package/dist/core/tool-admin.js +7 -2
- package/dist/core/tool-names.d.ts +13 -0
- package/dist/core/tool-names.js +20 -0
- package/dist/core/webhooks.d.ts +4 -0
- package/dist/core/webhooks.js +68 -49
- package/dist/core/workflow-run-events.js +2 -1
- package/dist/generated/prisma/browser.d.ts +39 -0
- package/dist/generated/prisma/client.d.ts +39 -0
- package/dist/generated/prisma/commonInputTypes.d.ts +80 -50
- package/dist/generated/prisma/enums.d.ts +6 -0
- package/dist/generated/prisma/enums.js +5 -0
- package/dist/generated/prisma/internal/class.d.ts +77 -0
- package/dist/generated/prisma/internal/class.js +4 -4
- package/dist/generated/prisma/internal/prismaNamespace.d.ts +632 -1
- package/dist/generated/prisma/internal/prismaNamespace.js +94 -3
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +98 -0
- package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +94 -3
- package/dist/generated/prisma/models/Agent.d.ts +372 -1
- package/dist/generated/prisma/models/AgentMcpServer.d.ts +1412 -0
- package/dist/generated/prisma/models/AgentMcpServer.js +1 -0
- package/dist/generated/prisma/models/AgentRepository.d.ts +40 -1
- package/dist/generated/prisma/models/AuthUser.d.ts +1 -1
- package/dist/generated/prisma/models/CodingAgentProfile.d.ts +0 -7
- package/dist/generated/prisma/models/CodingProxySession.d.ts +159 -2
- package/dist/generated/prisma/models/CodingRun.d.ts +76 -1
- package/dist/generated/prisma/models/HostProvider.d.ts +2176 -0
- package/dist/generated/prisma/models/HostProvider.js +1 -0
- package/dist/generated/prisma/models/HostProviderCredential.d.ts +1285 -0
- package/dist/generated/prisma/models/HostProviderCredential.js +1 -0
- package/dist/generated/prisma/models/HostProviderOperation.d.ts +1470 -0
- package/dist/generated/prisma/models/HostProviderOperation.js +1 -0
- package/dist/generated/prisma/models/HostProviderTrustedAccount.d.ts +1145 -0
- package/dist/generated/prisma/models/HostProviderTrustedAccount.js +1 -0
- package/dist/generated/prisma/models/McpServer.d.ts +1500 -0
- package/dist/generated/prisma/models/McpServer.js +1 -0
- package/dist/generated/prisma/models/NativeGatewayCall.d.ts +39 -1
- package/dist/generated/prisma/models/Principal.d.ts +167 -0
- package/dist/generated/prisma/models/ResourceGrant.d.ts +1 -1
- package/dist/generated/prisma/models/Run.d.ts +503 -1
- package/dist/generated/prisma/models/RunStep.d.ts +1453 -0
- package/dist/generated/prisma/models/RunStep.js +1 -0
- package/dist/generated/prisma/models/Secret.d.ts +387 -0
- package/dist/generated/prisma/models/Tool.d.ts +223 -1
- package/dist/generated/prisma/models.d.ts +7 -0
- package/dist/help/search.js +12 -3
- package/dist/help-index.json +812 -52
- package/dist/import/create.js +16 -1
- package/dist/import/neutral-schema.d.ts +1 -0
- package/dist/import/neutral-schema.js +2 -0
- package/dist/mcp/auth/access.d.ts +1 -0
- package/dist/mcp/auth/grants-cli.d.ts +6 -4
- package/dist/mcp/auth/grants-cli.js +42 -3
- package/dist/mcp/auth/resource-server.d.ts +3 -1
- package/dist/mcp/auth/resource-server.js +17 -2
- package/dist/mcp/context.d.ts +6 -0
- package/dist/mcp/index.js +21 -0
- package/dist/mcp/tools/agents.js +135 -20
- package/dist/mcp/tools/grants.js +66 -28
- package/dist/mcp/tools/host-providers.d.ts +2 -0
- package/dist/mcp/tools/host-providers.js +215 -0
- package/dist/mcp/tools/mcp-servers.d.ts +26 -0
- package/dist/mcp/tools/mcp-servers.js +481 -0
- package/dist/mcp/tools/power.js +2 -2
- package/dist/mcp/tools/repositories.js +50 -10
- package/dist/mcp/tools/run-access.d.ts +7 -0
- package/dist/mcp/tools/run-access.js +14 -0
- package/dist/mcp/tools/run-steps.d.ts +16 -0
- package/dist/mcp/tools/run-steps.js +85 -0
- package/dist/mcp/tools/runs.js +186 -18
- package/dist/mcp/tools/secret-elicitation.d.ts +2 -0
- package/dist/mcp/tools/secret-elicitation.js +25 -2
- package/dist/mcp/tools/secrets.js +38 -4
- package/dist/mcp/tools/tools.d.ts +6 -4
- package/dist/mcp/tools/tools.js +40 -8
- package/dist/mcp/tools/trigger.js +28 -6
- package/dist/mcp/transport/http-limits.d.ts +2 -0
- package/dist/mcp/transport/http-limits.js +6 -2
- package/dist/mcp/webhooks/ingress.js +10 -0
- package/dist/native-worker/gateway-server.d.ts +18 -1
- package/dist/native-worker/gateway-server.js +38 -9
- package/dist/native-worker/gateway.d.ts +5 -0
- package/dist/native-worker/gateway.js +13 -1
- package/dist/native-worker/http-server.d.ts +6 -4
- package/dist/native-worker/http-server.js +53 -8
- package/dist/native-worker/ledger.d.ts +6 -2
- package/dist/native-worker/ledger.js +5 -4
- package/dist/native-worker/protocol.d.ts +1 -0
- package/dist/native-worker/protocol.js +4 -1
- package/dist/providers/coding-proxy/capability-hash.d.ts +2 -0
- package/dist/providers/coding-proxy/capability-hash.js +5 -0
- package/dist/providers/coding-proxy/mcp-route.d.ts +34 -0
- package/dist/providers/coding-proxy/mcp-route.js +166 -0
- package/dist/providers/coding-proxy/memory-ledger.d.ts +2 -0
- package/dist/providers/coding-proxy/memory-ledger.js +16 -0
- package/dist/providers/coding-proxy/prisma-ledger.d.ts +1 -0
- package/dist/providers/coding-proxy/prisma-ledger.js +36 -2
- package/dist/providers/coding-proxy/proxy.d.ts +33 -1
- package/dist/providers/coding-proxy/proxy.js +266 -75
- package/dist/providers/coding-proxy/run-step-forwarder.d.ts +42 -0
- package/dist/providers/coding-proxy/run-step-forwarder.js +206 -0
- package/dist/providers/coding-proxy/runtime.d.ts +13 -0
- package/dist/providers/coding-proxy/runtime.js +87 -4
- package/dist/providers/coding-proxy/server.d.ts +3 -0
- package/dist/providers/coding-proxy/server.js +10 -0
- package/dist/providers/coding-proxy/types.d.ts +18 -0
- package/dist/providers/engine/types.d.ts +26 -0
- package/dist/providers/executor/composition.js +5 -0
- package/dist/providers/executor/container.d.ts +47 -1
- package/dist/providers/executor/container.js +84 -8
- package/dist/providers/host-tools/invoke.d.ts +37 -0
- package/dist/providers/host-tools/invoke.js +117 -0
- package/dist/providers/host-tools/operations.d.ts +65 -0
- package/dist/providers/host-tools/operations.js +149 -0
- package/dist/providers/host-tools/registry.d.ts +79 -0
- package/dist/providers/host-tools/registry.js +362 -0
- package/dist/providers/host-tools/request-guard.d.ts +17 -0
- package/dist/providers/host-tools/request-guard.js +99 -0
- package/dist/providers/host-tools/self-test.d.ts +64 -0
- package/dist/providers/host-tools/self-test.js +142 -0
- package/dist/providers/jobs/docker-isolation.d.ts +2 -2
- package/dist/providers/jobs/docker-isolation.js +30 -8
- package/dist/providers/jobs/docker.d.ts +8 -0
- package/dist/providers/jobs/docker.js +33 -9
- package/dist/providers/jobs/kubernetes-isolation.d.ts +3 -1
- package/dist/providers/jobs/kubernetes-isolation.js +15 -2
- package/dist/providers/jobs/kubernetes.d.ts +13 -0
- package/dist/providers/jobs/kubernetes.js +28 -5
- package/dist/providers/jobs/types.d.ts +6 -0
- package/dist/providers/review-host/types.d.ts +6 -4
- package/dist/providers/review-host/types.js +1 -1
- package/dist/providers/vcs/git.d.ts +6 -2
- package/dist/providers/vcs/git.js +15 -4
- package/dist/providers/vcs/github.d.ts +2 -71
- package/dist/providers/vcs/github.js +8 -11
- package/dist/providers/vcs/index.d.ts +1 -1
- package/dist/providers/vcs/index.js +1 -1
- package/dist/providers/vcs/remote.d.ts +4 -0
- package/dist/providers/vcs/remote.js +7 -1
- package/dist/providers/vcs/routing.d.ts +12 -6
- package/dist/providers/vcs/routing.js +21 -6
- package/dist/providers/vcs/types.d.ts +71 -3
- package/dist/quickstart/index.d.ts +5 -0
- package/dist/quickstart/index.js +21 -0
- package/dist/quickstart-images.json +1 -1
- package/dist/sandbox/eval-core.d.ts +12 -2
- package/dist/sandbox/eval-core.js +20 -4
- package/dist/sandbox/host-functions.d.ts +4 -0
- package/dist/sandbox/host-functions.js +7 -2
- package/dist/sandbox/limits.d.ts +4 -1
- package/dist/sandbox/limits.js +4 -1
- package/dist/sandbox/run-in-sandbox.d.ts +6 -0
- package/dist/sandbox/run-in-sandbox.js +14 -2
- package/dist/sandbox/safe-fetch.d.ts +2 -0
- package/dist/sandbox/safe-fetch.js +1 -1
- package/dist/sandbox/secret-broker.d.ts +1 -0
- package/dist/sandbox/secret-broker.js +1 -1
- package/dist/sandbox/tool-timeout.d.ts +32 -0
- package/dist/sandbox/tool-timeout.js +52 -0
- package/dist/sandbox/user-tool.d.ts +8 -1
- package/dist/sandbox/user-tool.js +9 -3
- package/dist/serve.js +26 -18
- package/dist/viewer/api-schema.d.ts +66 -0
- package/dist/viewer/api-schema.js +31 -0
- package/dist/viewer/graph.js +2 -1
- package/dist/viewer/openapi.js +2 -1
- package/dist/viewer/run-detail.d.ts +2 -0
- package/dist/viewer/run-detail.js +26 -1
- package/dist/wardby-bin.js +5 -0
- package/docs/README.md +11 -1
- package/docs/agent-recipes.md +37 -4
- package/docs/architecture-runtime.md +1 -1
- package/docs/claude-code-plugin.md +208 -0
- package/docs/code-review-agents.md +6 -0
- package/docs/coding-agent-setup.md +94 -1
- package/docs/coding-worker-byo-images.md +4 -2
- package/docs/coding-worker-isolation.md +94 -7
- package/docs/debugging-agent-runs.md +354 -0
- package/docs/getting-started-gke.md +33 -11
- package/docs/getting-started-identity-provider.md +43 -37
- package/docs/getting-started.md +8 -0
- package/docs/host-providers.md +294 -0
- package/docs/mcp-servers.md +263 -0
- package/docs/native-sandbox.md +31 -9
- package/docs/security-deployment.md +161 -31
- package/docs/tool-secrets.md +3 -0
- package/docs/viewer-api.md +27 -12
- package/docs/viewer-api.openapi.yml +78 -2
- package/help/admin-viewer.md +5 -0
- package/help/agent-recipes.md +33 -2
- package/help/brokered-secrets.md +3 -0
- package/help/build-claude-code-image.md +1 -1
- package/help/claude-code-run-pane.md +63 -0
- package/help/deploy-gke.md +5 -0
- package/help/errors/coding-mcp-gateway-unavailable.md +46 -0
- package/help/errors/coding-mcp-pins-unavailable.md +35 -0
- package/help/errors/database-auth-invalid.md +1 -1
- package/help/errors/host-provider-error.md +40 -0
- package/help/errors/host-tool-failed.md +36 -0
- package/help/errors/mcp-call-limit.md +22 -0
- package/help/errors/mcp-call-timeout.md +22 -0
- package/help/errors/mcp-server-auth-failed.md +22 -0
- package/help/errors/mcp-server-credentials-unavailable.md +45 -0
- package/help/errors/mcp-server-error.md +28 -0
- package/help/errors/mcp-server-unreachable.md +22 -0
- package/help/errors/mcp-servers-off.md +21 -0
- package/help/errors/mcp-tool-not-allowed.md +26 -0
- package/help/errors/mcp-tool-removed.md +22 -0
- package/help/errors/mcp-unavailable.md +25 -0
- package/help/errors/native-sandbox-capacity.md +1 -1
- package/help/errors/native-sandbox-deadline-exceeded.md +1 -1
- package/help/errors/native-sandbox-docker-failed.md +1 -1
- package/help/errors/native-sandbox-gateway-error.md +1 -1
- package/help/errors/native-sandbox-gateway-unavailable.md +1 -1
- package/help/errors/native-sandbox-image-not-pinned.md +1 -1
- package/help/errors/native-sandbox-isolation-mismatch.md +1 -1
- package/help/errors/native-sandbox-network-unenforced.md +1 -1
- package/help/errors/native-sandbox-requires-catalog.md +1 -1
- package/help/errors/native-sandbox-unavailable.md +1 -1
- package/help/errors/native-sandbox-warm-delivery-failed.md +1 -1
- package/help/errors/native-sandbox-worker-exited.md +1 -1
- package/help/errors/native-sandbox-worker-lost.md +1 -1
- package/help/errors/native-sandbox-worker-unready.md +1 -1
- package/help/errors/repository-not-listed.md +36 -0
- package/help/errors/repository-required.md +36 -0
- package/help/errors/tool-timeout.md +38 -0
- package/help/host-providers.md +40 -0
- package/help/identity-and-access.md +4 -1
- package/help/low-power-mode.md +19 -8
- package/help/mcp-servers.md +73 -0
- package/help/mcp.md +9 -2
- package/help/native-capabilities.md +27 -1
- package/help/native-sandbox.md +1 -1
- package/help/operating-agents.md +16 -0
- package/help/related-pull-requests.md +7 -3
- package/help/repo-instructions-and-skills.md +3 -1
- package/help/resume-runs-locally.md +7 -0
- package/help/run-steps.md +140 -0
- package/help/stop-run.md +1 -1
- package/help/troubleshooting/coding-workers.md +9 -1
- package/help/troubleshooting/debugging-agent-runs.md +29 -0
- package/package.json +2 -1
- package/prisma/migrations/20261102000000_host_providers/migration.sql +56 -0
- package/prisma/migrations/20261104000000_coding_agent_repository_list/migration.sql +5 -0
- package/prisma/migrations/20261106000000_tool_timeout/migration.sql +4 -0
- package/prisma/migrations/20261107000000_mcp_servers/migration.sql +33 -0
- package/prisma/migrations/20261108000000_coding_mcp/migration.sql +5 -0
- package/prisma/migrations/20261109000000_task_run_index/migration.sql +3 -0
- package/prisma/migrations/20261110000000_run_steps/migration.sql +26 -0
- package/prisma/migrations/20261111000000_run_steps_viewer_notify/migration.sql +59 -0
- package/prisma/migrations/20261112000000_run_steps_detail/migration.sql +9 -0
- package/prisma/schema.prisma +211 -14
- package/scripts/git-askpass.sh +1 -1
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
# Debugging an agent run
|
|
2
|
+
|
|
3
|
+
You can triage most agent problems yourself with the Wardby MCP and GitHub. Only
|
|
4
|
+
some failures need someone with server logs.
|
|
5
|
+
|
|
6
|
+
## Start here
|
|
7
|
+
|
|
8
|
+
Find the run with `list_runs`, then read it with `get_run`. Then go to the section
|
|
9
|
+
for what you see.
|
|
10
|
+
|
|
11
|
+
```mermaid
|
|
12
|
+
flowchart TD
|
|
13
|
+
start["Find the run: list_runs, then get_run"]
|
|
14
|
+
start --> none["No run started<br/>Check the repo links and triggers"]
|
|
15
|
+
start --> failed["Failed or refused<br/>Read failureCategory and the final text"]
|
|
16
|
+
start --> nopr["Succeeded, no PR<br/>Read outcome in codingResult"]
|
|
17
|
+
start --> missed["PR, but it missed<br/>Read the diff and the review"]
|
|
18
|
+
none --> nopull["See: No pull request appeared"]
|
|
19
|
+
nopr --> nopull
|
|
20
|
+
failed --> runfailed["See: The run failed"]
|
|
21
|
+
missed --> didntfix["See: The agent didn't fix what you expected"]
|
|
22
|
+
runfailed -- still unexplained --> operator["See: When you need an operator"]
|
|
23
|
+
nopr -- why it decided that --> transcript["See: Run transcripts"]
|
|
24
|
+
missed -- why it decided that --> transcript
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## What you can use without server access
|
|
28
|
+
|
|
29
|
+
These all work through the Wardby MCP or GitHub, and you only see runs you have
|
|
30
|
+
access to.
|
|
31
|
+
|
|
32
|
+
| Tool | What it tells you |
|
|
33
|
+
| --------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
34
|
+
| `list_runs` (agent id, optional `status`) | An agent's recent runs: status, trigger, cost, turns, final text, and which run started it |
|
|
35
|
+
| `list_runs` without an agent id (from 0.8.0) | Your runs across every agent, each with `agentName`; no final text. `active: true` or `since` (ISO time) narrow it |
|
|
36
|
+
| `get_run` (run id) | One run in full, adding `failureCategory`, `diagnosticId`, `codingResult.outcome`, `request`, budget events and package refusals |
|
|
37
|
+
| `triggerInfo`, `outcomes`, `serviceReadiness` (from 0.8.0, on `get_run` and on `list_runs` without an agent id) | What started the run (the pull request and whether it was a review or a mention, the issue, the schedule or the lead), what it produced (pull requests opened, comments, checks) and each service's state, in the admin viewer API's shapes. Follow a pull request from the run that opened it through its review and fix rounds by matching one run's outcome to the next run's trigger |
|
|
38
|
+
| `get_agent`, `list_repositories`, `list_subagents` | How the agent is set up: prompt, model, budget, repo links and triggers, sub-agents |
|
|
39
|
+
| `search_help`, `get_help_article` | Help for an error code or failure category |
|
|
40
|
+
| `cost_report` | What runs cost, when spend is the question |
|
|
41
|
+
| `get_run_steps` (from 0.9.0) | The run's steps, one line per tool call or model message, live while it runs; see [Run steps](#run-steps) |
|
|
42
|
+
| `get_run_transcript` | The run's conversation, for Claude Code runs with `sessionResume` on |
|
|
43
|
+
| `stop_run` | Stops a run that's stuck |
|
|
44
|
+
| The PR, issue or Jira ticket | The diff, CI, the review, and the comment the run posted |
|
|
45
|
+
|
|
46
|
+
From Wardby 0.8.0, `list_agents` with `summary: true` returns each agent's id,
|
|
47
|
+
name, kind, model, coding provider, budget, owner and your access, without the
|
|
48
|
+
prompt and coding profile. Admins (the `admin` role, `admin:view` scope) can add
|
|
49
|
+
`all: true` to `list_agents` or `list_runs` to see every agent or run in the
|
|
50
|
+
deployment.
|
|
51
|
+
|
|
52
|
+
Admins can also use the [Wardby Viewer](viewer-api.md), a desktop app showing runs,
|
|
53
|
+
sub-agent trees, triggers and outcomes for every owner.
|
|
54
|
+
|
|
55
|
+
## The run failed
|
|
56
|
+
|
|
57
|
+
Call `get_run` and read `status`, `error`, `failureCategory` and the final text. A
|
|
58
|
+
failed coding run's `error` looks like
|
|
59
|
+
`coding_failure_repo_access:coding_diag_…`: the middle part is the stage that
|
|
60
|
+
failed, and the ID is what an operator searches for.
|
|
61
|
+
|
|
62
|
+
| What you see | Likely cause | What to do |
|
|
63
|
+
| ------------------------------- | --------------------------------------------------------- | -------------------------------------------------------------------- |
|
|
64
|
+
| `repo_access` | The agent's owner lost access, or a repo link was removed | Check `list_repositories` and the owner's GitHub access |
|
|
65
|
+
| `repo_access_unavailable` | GitHub couldn't be reached reliably | Try again later |
|
|
66
|
+
| `workspace` | Often a workspace disk size above the server's limit | Lower `workspaceDiskMb`, or ask an operator to raise the limit |
|
|
67
|
+
| `executor` while running checks | The run may have run out of memory, among other causes | Reduce what the checks run; send the ID to an operator if it repeats |
|
|
68
|
+
| `merge_conflict` | The branch conflicts with its target | Read the `merge-conflict` help article |
|
|
69
|
+
| `service_unready` | A service the run needs, such as Postgres, didn't start | Check `.wardby/services.yaml` and the agent's `services` |
|
|
70
|
+
| `coding_turn_limit` | The run used all its turns | Raise `maxTurns` or narrow the task |
|
|
71
|
+
| `budgetEvents`, or `refused` | The run, run tree or budget group ran out of money | Raise the budget or check spend with `cost_report` |
|
|
72
|
+
| `packageRefusals` | A package isn't allowed or is too new | Add it to `packageAllowlist`, or wait out the release age limit |
|
|
73
|
+
|
|
74
|
+
For anything else, call `search_help` with the code or category. If that doesn't
|
|
75
|
+
explain it, see [When you need an operator](#when-you-need-an-operator).
|
|
76
|
+
|
|
77
|
+
**Prompt for Claude Code:**
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
Wardby run <run id> failed. Why, and what can I do about it?
|
|
81
|
+
If it needs server logs, give me the diagnosticId.
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## No pull request appeared
|
|
85
|
+
|
|
86
|
+
First find out whether a run started, using `list_runs` on the lead or router,
|
|
87
|
+
then on the coding agent.
|
|
88
|
+
|
|
89
|
+
| What `list_runs` shows | What it means | What to do |
|
|
90
|
+
| -------------------------------- | ---------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
|
|
91
|
+
| No new run | The request never started anything: nothing is linked with that trigger, or the person doesn't have access | Check `list_repositories` on the router. Only one agent per repo can hold the `mention` trigger |
|
|
92
|
+
| Lead ran, no coding run under it | The lead chose not to delegate | Read the lead's final text, which should say why |
|
|
93
|
+
| Coding run failed or was refused | See [The run failed](#the-run-failed) | |
|
|
94
|
+
| Coding run succeeded, with no PR | Check `codingResult.outcome` in `get_run` | See below |
|
|
95
|
+
|
|
96
|
+
| `outcome` | Meaning |
|
|
97
|
+
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
98
|
+
| `no_changes` | The agent changed nothing. Its final text should say why: the request may be vague or already done. On Claude Code, the transcript shows how it decided |
|
|
99
|
+
| `budget_exhausted` | It ran out of money before finishing. Raise the budget or narrow the task |
|
|
100
|
+
| `branch_pushed` | A local repo: there's a branch, and no PR by design |
|
|
101
|
+
|
|
102
|
+
A mention can also get no reply at all. If a server sets
|
|
103
|
+
`WARDBY_MENTION_EXPLANATIONS=false`, a mention that starts nothing stays silent. An
|
|
104
|
+
operator can look for `mention ignored` or `mention declined` in the server log.
|
|
105
|
+
|
|
106
|
+
**Prompt for Claude Code:**
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
I asked Wardby agent <agent name> to <request> in <your-org/your-repo>,
|
|
110
|
+
and no pull request appeared. Why?
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## The agent didn't fix what you expected
|
|
114
|
+
|
|
115
|
+
The run succeeded, so most of what you need is on the PR and the run, with no
|
|
116
|
+
server logs involved. Check these in order:
|
|
117
|
+
|
|
118
|
+
1. **The diff:** what actually changed.
|
|
119
|
+
2. **The PR description:** the run's final text, including what it says it tested.
|
|
120
|
+
If it says the tests weren't run, trust CI.
|
|
121
|
+
3. **The review:** whether your review check caught the miss.
|
|
122
|
+
4. **The request:** whether the issue or mention said what you meant.
|
|
123
|
+
5. **The task the agent received:** `request` in `get_run` (from Wardby 0.8.0). On a
|
|
124
|
+
delegated run, this shows what the lead told the coding agent.
|
|
125
|
+
6. **The transcript:** why it decided that. This is only for Claude Code runs with
|
|
126
|
+
`sessionResume` on.
|
|
127
|
+
|
|
128
|
+
The usual causes are a vague request, a lead that dropped something when it rewrote
|
|
129
|
+
the request, a repo rule missing from `AGENTS.md`, or a fix aimed at the symptom it
|
|
130
|
+
was told about.
|
|
131
|
+
|
|
132
|
+
**To fix it,** comment on the PR, mentioning the App, with what's wrong. The
|
|
133
|
+
follow-up pushes to the same branch and PR, so you don't start again. If the same
|
|
134
|
+
miss keeps happening, add the rule to `AGENTS.md` so future runs follow it.
|
|
135
|
+
|
|
136
|
+
**Prompt for Claude Code:**
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
PR <PR URL> from Wardby didn't do what I expected: <what you expected>.
|
|
140
|
+
Where did it go wrong? Draft a follow-up comment, but don't post it.
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Run steps
|
|
144
|
+
|
|
145
|
+
While a run runs, Wardby records its steps: one line for each tool call (the
|
|
146
|
+
tool, and its command, file or first argument, cut to about 100 characters) with
|
|
147
|
+
its status once the result is back (`ok`, `error`, or `exit N`), and one line for
|
|
148
|
+
what the model said (cut to about 120 characters). At the default level, tool
|
|
149
|
+
output and full text are never recorded; see Levels below. Steps are recorded
|
|
150
|
+
for native runs (in the control plane and on the native sandbox) and for Claude Code and Codex runs. Every agent's
|
|
151
|
+
shell command shows as `Bash` (a native `run_command`, Claude Code's command tool,
|
|
152
|
+
Codex's `exec_command`, `shell`, `local_shell` and `shell_command`), another tool
|
|
153
|
+
under its own name (for example `apply_patch`), and a remote MCP tool as
|
|
154
|
+
`mcp:<tool>`. A Claude Code or Codex run's final answer is one `said` step: the
|
|
155
|
+
start of the summary it returned, or `Finished` with the outcome (for example
|
|
156
|
+
`Finished: changes ready`) when it returned none.
|
|
157
|
+
|
|
158
|
+
For Claude Code and Codex, the coding proxy reads the steps from the model's
|
|
159
|
+
replies after relaying them and posts them to the server's run-steps listener
|
|
160
|
+
(`POST /internal/run-steps`). A slow or unreachable listener loses steps, never
|
|
161
|
+
slows the run. Without the two settings in the table below, coding runs record no
|
|
162
|
+
steps; native runs are unaffected. Steps for a Claude Code or Codex run need the
|
|
163
|
+
listener, which only `wardby serve` runs.
|
|
164
|
+
|
|
165
|
+
**Levels.**
|
|
166
|
+
|
|
167
|
+
| Level | Tool input | Tool result | Model text |
|
|
168
|
+
| --------- | -------------------- | --------------------------------------- | -------------------- |
|
|
169
|
+
| `off` | - | - | - |
|
|
170
|
+
| `summary` | about 100 characters | status only (`ok`, `error`, `exit N`) | about 120 characters |
|
|
171
|
+
| `detail` | up to about 4 KB | status and the last ~2 KB of its output | up to about 8 KB |
|
|
172
|
+
|
|
173
|
+
At `summary`, the default, tool output is never recorded. At `detail` each step
|
|
174
|
+
also keeps a **detail** text, at most 16 KB. When the output is cut at the
|
|
175
|
+
start, the partial first line is dropped if it ends within 256 characters;
|
|
176
|
+
otherwise only the first 256 characters are dropped, so a long single-line
|
|
177
|
+
output, such as a JSON result, keeps about its last 1.8 KB. At every level,
|
|
178
|
+
terminal escape sequences (colour codes, links, clipboard writes, title changes)
|
|
179
|
+
and every other control character except line breaks and tabs are removed from
|
|
180
|
+
step text before it is stored.
|
|
181
|
+
|
|
182
|
+
A run's level is the lower of two settings, fixed when the run is dispatched (a
|
|
183
|
+
change reaches later runs only; lowering the ceiling also stops detail for runs
|
|
184
|
+
already in flight):
|
|
185
|
+
|
|
186
|
+
- the instance's ceiling, `WARDBY_RUN_STEPS` (default `summary`);
|
|
187
|
+
- the agent's `runSteps` (`off`, `summary` or `detail`), set by the agent's
|
|
188
|
+
owner with `create_agent` or `update_agent`. Unset counts as `summary`. Set
|
|
189
|
+
`null` to clear it.
|
|
190
|
+
|
|
191
|
+
So `detail` needs both the operator and the agent's owner. If `runSteps` asks
|
|
192
|
+
for more than the instance allows, the value is stored, `update_agent` and
|
|
193
|
+
`get_agent` say so in `warnings`, and runs record at the ceiling.
|
|
194
|
+
|
|
195
|
+
> **Warning: `detail` stores tool output.** Before a step is stored, every
|
|
196
|
+
> secret value the run was given is removed and anything shaped like a token or
|
|
197
|
+
> key is masked. A secret that exists only inside a repository file, or another
|
|
198
|
+
> source the run read, and that matches no known shape, is not known to Wardby
|
|
199
|
+
> and can remain in the detail text. That is why detail is off unless both the
|
|
200
|
+
> operator and the agent's owner ask for it. Turn it on only for agents whose
|
|
201
|
+
> tool output you are prepared to keep for the retention period.
|
|
202
|
+
|
|
203
|
+
**Reading them.** `get_run_steps` (`runId`, optional `after` and `limit`) lists
|
|
204
|
+
them oldest first, 50 at a time and at most 200; pass the last `seq` you have as
|
|
205
|
+
`after` to get only newer ones. `get_run` and `list_runs` without `agentId`
|
|
206
|
+
include `lastStep`, the newest step as one line. Access is the same as
|
|
207
|
+
`get_run`'s. At `detail`, `get_run_steps` also returns each step's `detail` to the agent's
|
|
208
|
+
owner and to the person who started the run (and to the stdio operator); anyone
|
|
209
|
+
else, including an admin who does not own the agent, gets the lines only.
|
|
210
|
+
`lastStep`, the admin viewer API and its `step` events never include detail.
|
|
211
|
+
The `wardby-runs` Claude Code pane shows them (see
|
|
212
|
+
[Claude Code plugin](claude-code-plugin.md#using-the-pane)); the admin viewer API
|
|
213
|
+
sends a `step` event for each one and lists a run's newest 200 in its detail
|
|
214
|
+
(see [Viewer API](viewer-api.md)), and the Wardby Viewer app shows them in a
|
|
215
|
+
**Steps** section.
|
|
216
|
+
|
|
217
|
+
**Limits.** A run records at most 2,000 steps; `dropped` in `get_run_steps`
|
|
218
|
+
counts the rest.
|
|
219
|
+
|
|
220
|
+
**Secrets.** Every step is redacted before it is stored: every secret value of
|
|
221
|
+
the run's agent (attached secrets, readable or brokered, and its MCP servers'
|
|
222
|
+
secrets), the run's own capability and its registry token are replaced with
|
|
223
|
+
`[REDACTED]`, then anything shaped like a token or key.
|
|
224
|
+
If the agent's secrets can't be read at that moment, the step is not stored.
|
|
225
|
+
|
|
226
|
+
**Retention.** Steps are deleted `RUN_STEP_RETENTION_DAYS` after they are
|
|
227
|
+
recorded. The scheduler leader deletes expired steps at most every ten minutes. `get_run_steps` reports
|
|
228
|
+
`expired` when a run finished more than `RUN_STEP_RETENTION_DAYS` ago and has no
|
|
229
|
+
steps left.
|
|
230
|
+
|
|
231
|
+
| Variable | Read by | Default | Meaning |
|
|
232
|
+
| ------------------------- | --------------------------------------------------------------------------------------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
233
|
+
| `WARDBY_RUN_STEPS` | `wardby serve`, `wardby scheduler`, `wardby run`, `wardby mcp`, `wardby native-gateway`, the coding proxy | `summary` | `off` records nothing; `summary` records the lines above; `detail` allows agents whose `runSteps` is `detail` to record detail. The ceiling for every run. Any other value stops start-up. |
|
|
234
|
+
| `RUN_STEP_RETENTION_DAYS` | `wardby serve`, `wardby scheduler`, `wardby run`, `wardby mcp`, `wardby native-gateway` | `30` | Days to keep a step, a whole number from 1 to 3650. A change applies to steps recorded after it. Any other value stops start-up. |
|
|
235
|
+
| `WARDBY_RUN_STEPS_LISTEN` | `wardby serve` | unset | `host:port` or `:port` of the run-steps listener the coding proxy posts coding runs' steps to. Unset: no listener. An invalid value stops start-up. |
|
|
236
|
+
| `WARDBY_RUN_STEPS_URL` | the coding proxy | unset | The listener's origin, for example `http://<server host>:8792`: `http` or `https`, no credentials, path, query or fragment. Unset: coding runs record no steps. An invalid value stops start-up. |
|
|
237
|
+
|
|
238
|
+
The coding proxy also reads `WARDBY_RUN_STEPS`: with `off`, or with
|
|
239
|
+
`WARDBY_RUN_STEPS_URL` unset, no step text leaves the proxy. For coding runs at
|
|
240
|
+
`detail`, set `WARDBY_RUN_STEPS=detail` on the proxy too: below `detail`, the
|
|
241
|
+
proxy never sends any tool output to the server. Set `WARDBY_RUN_STEPS=detail`
|
|
242
|
+
on every process that writes steps (`wardby serve`, the scheduler, the native
|
|
243
|
+
gateway and `wardby run`). The listener is a
|
|
244
|
+
second network path into the server; see
|
|
245
|
+
[Run steps in Security deployment](security-deployment.md#run-steps) for how to
|
|
246
|
+
restrict it.
|
|
247
|
+
|
|
248
|
+
**Upgrading.** The release adds the `RunStep` table, the `Run.stepsDropped`
|
|
249
|
+
column, `Agent.runSteps`, `Run.runStepsLevel` and
|
|
250
|
+
`CodingProxySession.runStepsLevel`; apply the migrations with
|
|
251
|
+
`prisma migrate deploy` as with any upgrade. Runs started before the upgrade
|
|
252
|
+
record at most `summary`.
|
|
253
|
+
|
|
254
|
+
## Run transcripts
|
|
255
|
+
|
|
256
|
+
A transcript is the run's conversation: the messages, the tool calls and their
|
|
257
|
+
results, and the files and skills the agent loaded. You can get it yourself,
|
|
258
|
+
without server access, on Claude Code agents.
|
|
259
|
+
|
|
260
|
+
**To turn it on,** set `codingProfile.sessionResume` to `true` with `update_agent`.
|
|
261
|
+
It's off by default and has to be turned on for each agent. It only applies to runs
|
|
262
|
+
started afterward, so an earlier failure has no transcript. The server also needs a
|
|
263
|
+
blob store, set in the environment of the process that launches coding runs:
|
|
264
|
+
`BLOB_STORE` set to `local`, `gcs` or `s3`, plus `BLOB_STORE_LOCAL_DIR`,
|
|
265
|
+
`BLOB_STORE_GCS_BUCKET`, or `BLOB_STORE_S3_BUCKET` and `BLOB_STORE_S3_REGION`.
|
|
266
|
+
Without `BLOB_STORE`, no transcript is stored.
|
|
267
|
+
|
|
268
|
+
**To read one,** call `get_run_transcript` with the run ID. It returns a download
|
|
269
|
+
link that works for 10 minutes and a command. Run `npx @wardby/cli@latest resume -`
|
|
270
|
+
in a clone of the repo and paste the link, which also lets you continue the session
|
|
271
|
+
on your machine.
|
|
272
|
+
|
|
273
|
+
| Transcripts | |
|
|
274
|
+
| ------------------ | ------------------------------------------------------------------------------ |
|
|
275
|
+
| **Who can read** | Anyone who can read the run: the person who triggered it and the agent's owner |
|
|
276
|
+
| **Stored for** | Runs that finish, fail, or stop at their budget |
|
|
277
|
+
| **Not stored for** | Runs stopped with `stop_run` or ended by their timeout |
|
|
278
|
+
| **Removed** | Thinking blocks, the system prompt, the worker's environment, account details |
|
|
279
|
+
| **Redacted** | The agent's attached secrets and the run's own tokens |
|
|
280
|
+
| **Not available** | On Codex agents |
|
|
281
|
+
|
|
282
|
+
Redaction removes secret values, not other sensitive text, so a transcript includes
|
|
283
|
+
what the agent saw in the repo and in command output. Turn this on only for agents
|
|
284
|
+
whose runs you're comfortable sharing with everyone who can read them.
|
|
285
|
+
|
|
286
|
+
**Prompts for Claude Code:**
|
|
287
|
+
|
|
288
|
+
To turn it on:
|
|
289
|
+
|
|
290
|
+
```
|
|
291
|
+
Turn on transcripts for Wardby agent <agent name>.
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
To get one:
|
|
295
|
+
|
|
296
|
+
```
|
|
297
|
+
Get me the transcript for Wardby run <run id>.
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
See [Resume Claude Code runs locally](../help/resume-runs-locally.md) for more.
|
|
301
|
+
|
|
302
|
+
## When you need an operator
|
|
303
|
+
|
|
304
|
+
Ask someone with server access when `get_run` and help don't explain a failure. The
|
|
305
|
+
specific reason for a failed coding run is written only to the server log, under
|
|
306
|
+
its `diagnosticId`.
|
|
307
|
+
|
|
308
|
+
**Send them:** the run ID, the `diagnosticId`, the repo, and what you expected to
|
|
309
|
+
happen.
|
|
310
|
+
|
|
311
|
+
**What the operator can do:**
|
|
312
|
+
|
|
313
|
+
1. Search the control-plane log for the `diagnosticId`, which holds the real reason.
|
|
314
|
+
2. If that isn't enough, turn on the
|
|
315
|
+
[debug trace](coding-worker-isolation.md#debug-trace) with `debugTraceMinutes`
|
|
316
|
+
and reproduce the failure.
|
|
317
|
+
|
|
318
|
+
The debug trace won't help you directly. Only admins can turn it on, it only covers
|
|
319
|
+
runs started afterward, and its output goes to the run's worker log, which you can't
|
|
320
|
+
read. It can include prompts and repo content, so it isn't exposed through MCP.
|
|
321
|
+
|
|
322
|
+
**What the trace holds:** the agent's whole stream, the commands it ran with their
|
|
323
|
+
output (Claude Code), final usage and duration, and stream failures in full.
|
|
324
|
+
Token-shaped values are redacted. It stops at 2 MiB per run by default.
|
|
325
|
+
|
|
326
|
+
**What MCP gives you:** the trace itself isn't available through MCP. You can only
|
|
327
|
+
turn it on or off with `update_agent` (admin role), see when it expires with
|
|
328
|
+
`get_agent` (`debugTraceUntil`), and see whether a run was traced with `get_run`
|
|
329
|
+
(`debugTrace: true`).
|
|
330
|
+
|
|
331
|
+
**Prompt to try first.** Paste this into any client connected to the Wardby MCP:
|
|
332
|
+
|
|
333
|
+
```
|
|
334
|
+
Wardby run <run id> didn't do what I expected. What happened, and what can I do?
|
|
335
|
+
If it needs server logs, give me the diagnosticId.
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
## Known gaps
|
|
339
|
+
|
|
340
|
+
Two things can't be answered without server access yet.
|
|
341
|
+
|
|
342
|
+
| Gap | Why it matters | What you can do |
|
|
343
|
+
| --------------------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------- |
|
|
344
|
+
| The specific reason a coding run failed | You get the stage, such as `executor`, but not why | Send the `diagnosticId` to an operator |
|
|
345
|
+
| Why a mention got no reply | With explanations off, a declined mention leaves no reply and no run | Turn explanations on where that's acceptable: `true` is the default |
|
|
346
|
+
|
|
347
|
+
**To turn explanations on,** an operator removes
|
|
348
|
+
`WARDBY_MENTION_EXPLANATIONS=false` from the server's settings, or sets it to
|
|
349
|
+
`true`, then redeploys. Once on, the GitHub App replies to say why a mention started
|
|
350
|
+
nothing. On a public repo, anyone who can read that comment can see what is or isn't
|
|
351
|
+
linked there.
|
|
352
|
+
|
|
353
|
+
Run transcripts are limited to Claude Code runs with `sessionResume` on, so they
|
|
354
|
+
don't help on Codex agents.
|
|
@@ -218,6 +218,13 @@ App replying to say why a mention started nothing; pass it to `up.sh` on every
|
|
|
218
218
|
run, the same way. See
|
|
219
219
|
[What a linked review agent does](code-review-agents.md#what-a-linked-review-agent-does).
|
|
220
220
|
|
|
221
|
+
`WARDBY_RUN_STEPS` (`off`, `summary` or `detail`) and `RUN_STEP_RETENTION_DAYS`
|
|
222
|
+
(1 to 3650) are optional, not secrets. Pass them to `up.sh` on every run, the
|
|
223
|
+
same way; unset keeps the server defaults (`summary`, 30 days). `up.sh` adds the
|
|
224
|
+
ceiling to the control plane, the coding proxy and the native gateway, and the
|
|
225
|
+
retention to the control plane and the native gateway. See
|
|
226
|
+
[Run steps](debugging-agent-runs.md#run-steps).
|
|
227
|
+
|
|
221
228
|
Generate `SECRET_APP_KEY` with:
|
|
222
229
|
|
|
223
230
|
```sh
|
|
@@ -401,9 +408,10 @@ server answers `415`, because it checks the content type before the token.
|
|
|
401
408
|
Create the first self-hosted login credential. It is printed once.
|
|
402
409
|
`--role admin` makes this operator account an admin. Only admins can use all
|
|
403
410
|
the privileged operations: `make_owner`, BYO `workerImageRef`, package
|
|
404
|
-
approval, service catalog changes,
|
|
405
|
-
`package-approver` can approve packages only, a
|
|
406
|
-
the service catalog only,
|
|
411
|
+
approval, service catalog changes, model catalog changes, and host providers
|
|
412
|
+
(`hosts:admin`). A `package-approver` can approve packages only, a
|
|
413
|
+
`service-manager` can change the service catalog only, a `model-manager` can
|
|
414
|
+
change the model catalog only, and a `host-manager` can manage host providers
|
|
407
415
|
only. Users created without `--role` have no roles. See
|
|
408
416
|
[roles and privileged operations](security-deployment.md#roles-and-privileged-operations).
|
|
409
417
|
|
|
@@ -454,6 +462,14 @@ Desktop includes it). The images build concurrently, and the stages that only
|
|
|
454
462
|
compile JavaScript run on your machine's own architecture, so building the
|
|
455
463
|
`linux/amd64` images from an arm64 machine emulates only what actually ships.
|
|
456
464
|
|
|
465
|
+
`up.sh` adds the cluster to your kubeconfig and makes it the current context, as
|
|
466
|
+
`gcloud container clusters get-credentials` does. From then on it works from its
|
|
467
|
+
own one-cluster copy of that context, so switching contexts in another terminal
|
|
468
|
+
while a deploy runs doesn't send its later steps to a different cluster. The
|
|
469
|
+
copy is readable only by you and is removed when `up.sh` exits. Don't run two
|
|
470
|
+
deploys of the same cluster at once: the second stops at its first Helm step
|
|
471
|
+
with `another operation (install/upgrade/rollback) is in progress`.
|
|
472
|
+
|
|
457
473
|
A control-plane restart is designed not to drop requests, at the cost of a
|
|
458
474
|
slower rollout. A new pod must stay Ready for three minutes before the old one
|
|
459
475
|
is retired, because the load balancer can take well over a minute to start
|
|
@@ -585,7 +601,7 @@ delete the class and re-run `up.sh` to change them.
|
|
|
585
601
|
|
|
586
602
|
### Native sandbox
|
|
587
603
|
|
|
588
|
-
Native sandbox requires Wardby 0.
|
|
604
|
+
Native sandbox requires Wardby 0.6.0 or later.
|
|
589
605
|
|
|
590
606
|
`up.sh` deploys everything the [native sandbox](native-sandbox.md) needs on
|
|
591
607
|
this cluster. It builds and pushes the `native-worker` image, checks it (Node is
|
|
@@ -655,8 +671,9 @@ control plane 1.
|
|
|
655
671
|
**Sleeping.** Every minute the scheduler leader scales the coding proxy
|
|
656
672
|
(`wardby-coding-proxy`) to 0 when no coding run is pending or running and none
|
|
657
673
|
finished within the idle window. It scales the native gateway
|
|
658
|
-
(`wardby-native-gateway`) to 0 when no sandbox native run
|
|
659
|
-
recently finished and the gateway has no
|
|
674
|
+
(`wardby-native-gateway`) to 0 when no sandbox native run and no coding run with
|
|
675
|
+
MCP tools is pending, running or recently finished, and the gateway has no
|
|
676
|
+
active session. Either target sleeps
|
|
660
677
|
only once at least one idle window has passed since it was last woken (recorded
|
|
661
678
|
in its `wardby.io/power-woke-at` annotation) and since the control plane
|
|
662
679
|
started, whichever is later. The condition is checked again immediately before
|
|
@@ -664,10 +681,14 @@ scaling. The control plane
|
|
|
664
681
|
logs `power: proxy slept (idle 30m)`.
|
|
665
682
|
|
|
666
683
|
**Waking.** Starting a coding run scales the proxy to 1 and waits for a ready
|
|
667
|
-
endpoint. Starting a sandbox run does the same for the gateway
|
|
684
|
+
endpoint. Starting a sandbox run does the same for the gateway, and so does starting a
|
|
685
|
+
coding run with MCP tools, whose MCP calls go through the gateway (0.9.0 and later): it wakes the
|
|
686
|
+
proxy and gateway at once and fails before launch with
|
|
687
|
+
[`coding_failure_mcp_gateway_unavailable`](../help/errors/coding-mcp-gateway-unavailable.md)
|
|
688
|
+
if the gateway does not wake. The wait is at
|
|
668
689
|
least 5 minutes, because a cold Autopilot node can add 1 to 2 minutes of
|
|
669
|
-
start-up; a `KUBERNETES_READY_TIMEOUT_MS` (proxy) or
|
|
670
|
-
`NATIVE_SANDBOX_READY_TIMEOUT_MS` (gateway) above 5 minutes, set on the
|
|
690
|
+
start-up; a `KUBERNETES_READY_TIMEOUT_MS` (the proxy, and the gateway wake of a coding run) or
|
|
691
|
+
`NATIVE_SANDBOX_READY_TIMEOUT_MS` (the gateway wake of a sandbox run) above 5 minutes, set on the
|
|
671
692
|
control-plane Deployment, raises it to that value. The first coding run after a
|
|
672
693
|
control-plane restart also runs the cluster preflight canary, because start-up
|
|
673
694
|
preflight is deferred while the proxy sleeps (`kubernetes_preflight_deferred`).
|
|
@@ -689,8 +710,9 @@ the Viewer shows any such leftover as an old replica rather than a failure.
|
|
|
689
710
|
**Sleeping now.** To skip the idle window (for example right after a test), an
|
|
690
711
|
admin calls the MCP tool `power_sleep`, optionally with `target` set to `proxy`
|
|
691
712
|
or `gateway` (default both). It scales the target to 0 at once, but never stops
|
|
692
|
-
a run: a target with a pending or running run
|
|
693
|
-
|
|
713
|
+
a run: a target with a pending or running run (for the gateway, a sandbox run
|
|
714
|
+
or a coding run with MCP tools), or for the gateway an active gateway session,
|
|
715
|
+
is left up and its run ids are returned under `blocked`.
|
|
694
716
|
Recently finished runs do not block it. The next run wakes the target as usual.
|
|
695
717
|
`power_status` shows each target's replicas, readiness, last wake time and
|
|
696
718
|
blocking run ids. Both tools need the `power:manage` scope, which only the
|
|
@@ -54,26 +54,27 @@ access tokens for that audience.
|
|
|
54
54
|
|
|
55
55
|
Create these scopes in the provider:
|
|
56
56
|
|
|
57
|
-
| Scope | Capability
|
|
58
|
-
| --------------------- |
|
|
59
|
-
| `agents:read` | Inspect agents, models, runs, memory, and attached resources.
|
|
60
|
-
| `agents:write` | Create and modify agents, schedules, and sub-agent relationships.
|
|
61
|
-
| `runs:trigger` | Start agent runs.
|
|
62
|
-
| `tools:write` | Create, attach, and manage tools.
|
|
63
|
-
| `datastore:write` | Create, attach, query, and modify datastores.
|
|
64
|
-
| `secrets:write` | Create, attach, rotate, and remove secret bindings.
|
|
65
|
-
| `webhooks:write` | Create and manage webhook triggers.
|
|
66
|
-
| `budget_groups:write` | Create and manage shared budget groups.
|
|
67
|
-
| `packages:approve` | Approve coding agents' package allowlists.
|
|
68
|
-
| `services:manage` | Create, update and delete coding-run service catalog entries.
|
|
69
|
-
| `agents:admin` | Reassign agent ownership, BYO worker images; admins only.
|
|
70
|
-
| `memory:write` | Set and delete agent memory entries.
|
|
71
|
-
| `admin:view` | Read every owner's runs through the admin viewer API; admins only.
|
|
72
|
-
| `models:admin` | Add, override, disable and reset model catalog entries.
|
|
73
|
-
| `power:manage` | Read low-power state and sleep the proxy/gateway now; admins only.
|
|
57
|
+
| Scope | Capability |
|
|
58
|
+
| --------------------- | ------------------------------------------------------------------------------- |
|
|
59
|
+
| `agents:read` | Inspect agents, models, runs, memory, and attached resources. |
|
|
60
|
+
| `agents:write` | Create and modify agents, schedules, and sub-agent relationships. |
|
|
61
|
+
| `runs:trigger` | Start agent runs. |
|
|
62
|
+
| `tools:write` | Create, attach, and manage tools. |
|
|
63
|
+
| `datastore:write` | Create, attach, query, and modify datastores. |
|
|
64
|
+
| `secrets:write` | Create, attach, rotate, and remove secret bindings. |
|
|
65
|
+
| `webhooks:write` | Create and manage webhook triggers. |
|
|
66
|
+
| `budget_groups:write` | Create and manage shared budget groups. |
|
|
67
|
+
| `packages:approve` | Approve coding agents' package allowlists. |
|
|
68
|
+
| `services:manage` | Create, update and delete coding-run service catalog entries. |
|
|
69
|
+
| `agents:admin` | Reassign agent ownership, BYO worker images; admins only. |
|
|
70
|
+
| `memory:write` | Set and delete agent memory entries. |
|
|
71
|
+
| `admin:view` | Read every owner's runs through the admin viewer API; admins only. |
|
|
72
|
+
| `models:admin` | Add, override, disable and reset model catalog entries. |
|
|
73
|
+
| `power:manage` | Read low-power state and sleep the proxy/gateway now; admins only. |
|
|
74
|
+
| `hosts:admin` | Register host providers and approve their tools; admins and host managers only. |
|
|
74
75
|
|
|
75
76
|
MCP clients discover this list from Wardby's protected-resource metadata and
|
|
76
|
-
may request every advertised scope. Define all
|
|
77
|
+
may request every advertised scope. Define all sixteen in the provider even when
|
|
77
78
|
policy grants a particular client or user only a subset. Ensure granted scopes
|
|
78
79
|
are emitted in the access token's `scope` or `scp` claim; defining them only in
|
|
79
80
|
the provider UI is not sufficient.
|
|
@@ -97,24 +98,29 @@ every advertised scope fail with `invalid_scope`.
|
|
|
97
98
|
deployment, define it in the provider too and map it like `agents:admin`;
|
|
98
99
|
otherwise clients that request every advertised scope fail with `invalid_scope`.
|
|
99
100
|
|
|
101
|
+
`hosts:admin` was added after `power:manage`. When you upgrade an existing
|
|
102
|
+
deployment, define it in the provider too and map it like `agents:admin`;
|
|
103
|
+
otherwise clients that request every advertised scope fail with `invalid_scope`.
|
|
104
|
+
|
|
100
105
|
### Wardby roles
|
|
101
106
|
|
|
102
107
|
A scope only delegates. `agents:admin`, `packages:approve`, `services:manage`,
|
|
103
|
-
`admin:view`, `models:admin` and `
|
|
108
|
+
`admin:view`, `models:admin`, `power:manage` and `hosts:admin` take effect only for a caller who also holds a Wardby role that grants them:
|
|
104
109
|
|
|
105
|
-
| Wardby role | Grants
|
|
106
|
-
| ------------------ |
|
|
107
|
-
| `admin` | `agents:admin` (`make_owner`, BYO `workerImageRef`), `packages:approve`, `services:manage`, `admin:view` (read every owner's runs, see [viewer-api.md](viewer-api.md)), `models:admin` (model catalog) and `power:manage` (`power_status`, `power_sleep`; see [getting-started-gke.md](getting-started-gke.md#low-power-mode)) |
|
|
108
|
-
| `package-approver` | `packages:approve` (package allowlist and policy approval)
|
|
109
|
-
| `service-manager` | `services:manage` (coding-run service catalog changes)
|
|
110
|
-
| `model-manager` | `models:admin` (model catalog changes: `set_model`, `disable_model`, `reset_model`; see [models.md](models.md))
|
|
110
|
+
| Wardby role | Grants |
|
|
111
|
+
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
112
|
+
| `admin` | `agents:admin` (`make_owner`, BYO `workerImageRef`), `packages:approve`, `services:manage`, `admin:view` (read every owner's runs, see [viewer-api.md](viewer-api.md)), `models:admin` (model catalog), `hosts:admin` (host providers) and `power:manage` (`power_status`, `power_sleep`; see [getting-started-gke.md](getting-started-gke.md#low-power-mode)) |
|
|
113
|
+
| `package-approver` | `packages:approve` (package allowlist and policy approval) |
|
|
114
|
+
| `service-manager` | `services:manage` (coding-run service catalog changes) |
|
|
115
|
+
| `model-manager` | `models:admin` (model catalog changes: `set_model`, `disable_model`, `reset_model`; see [models.md](models.md)) |
|
|
116
|
+
| `host-manager` | `hosts:admin` (`register_host_provider`, `approve_host_provider_tools`, `test_host_provider`; see [host-providers.md](host-providers.md)) |
|
|
111
117
|
|
|
112
118
|
The roles come from a claim in the caller's **access token**, which you map to
|
|
113
119
|
Wardby roles:
|
|
114
120
|
|
|
115
121
|
```dotenv
|
|
116
122
|
AUTH_ROLE_CLAIM=groups # claim name or dotted path
|
|
117
|
-
AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager,wardby-models=model-manager
|
|
123
|
+
AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager,wardby-models=model-manager,wardby-hosts=host-manager
|
|
118
124
|
```
|
|
119
125
|
|
|
120
126
|
Wardby looks up `AUTH_ROLE_CLAIM` in two steps:
|
|
@@ -162,20 +168,20 @@ their next token.
|
|
|
162
168
|
|
|
163
169
|
Provider examples:
|
|
164
170
|
|
|
165
|
-
- **Okta** (custom authorization server): create
|
|
166
|
-
`wardby-packages`, `wardby-services` and `wardby-
|
|
171
|
+
- **Okta** (custom authorization server): create five groups, `wardby-admin`,
|
|
172
|
+
`wardby-packages`, `wardby-services`, `wardby-models` and `wardby-hosts`. Add a `groups` claim
|
|
167
173
|
to the access token, filtered to those groups. Set `AUTH_ROLE_CLAIM=groups` and
|
|
168
|
-
`AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager,wardby-models=model-manager`.
|
|
174
|
+
`AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager,wardby-models=model-manager,wardby-hosts=host-manager`.
|
|
169
175
|
Optionally, add access policy rules so only those groups can obtain
|
|
170
|
-
`agents:admin`, `packages:approve`, `services:manage`, `admin:view`, `models:admin` and `
|
|
171
|
-
- **FusionAuth:** create
|
|
172
|
-
`package-approver`, `service-manager` and `
|
|
176
|
+
`agents:admin`, `packages:approve`, `services:manage`, `admin:view`, `models:admin`, `power:manage` and `hosts:admin`.
|
|
177
|
+
- **FusionAuth:** create five application roles, `admin`,
|
|
178
|
+
`package-approver`, `service-manager`, `model-manager` and `host-manager`. They appear in the
|
|
173
179
|
access token's top-level `roles` claim. Set `AUTH_ROLE_CLAIM=roles` and
|
|
174
|
-
`AUTH_ROLE_MAP=admin=admin,package-approver=package-approver,service-manager=service-manager,model-manager=model-manager`.
|
|
180
|
+
`AUTH_ROLE_MAP=admin=admin,package-approver=package-approver,service-manager=service-manager,model-manager=model-manager,host-manager=host-manager`.
|
|
175
181
|
- **Keycloak:** create realm roles such as `wardby-admin`, `wardby-packages`,
|
|
176
|
-
`wardby-services` and `wardby-
|
|
182
|
+
`wardby-services`, `wardby-models` and `wardby-hosts`. Realm roles appear under
|
|
177
183
|
`realm_access.roles`. Set `AUTH_ROLE_CLAIM=realm_access.roles` and
|
|
178
|
-
`AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager,wardby-models=model-manager`.
|
|
184
|
+
`AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager,wardby-models=model-manager,wardby-hosts=host-manager`.
|
|
179
185
|
For client roles, use `resource_access.<client-id>.roles`. The
|
|
180
186
|
[local Keycloak harness](../deploy/keycloak-test/README.md) sets this up.
|
|
181
187
|
- **Auth0:** add the user's roles to the access token as a namespaced custom
|
|
@@ -236,7 +242,7 @@ AUTH_JWKS_URI=https://identity.example.com/your-tenant/.well-known/jwks.json
|
|
|
236
242
|
AUTH_AUDIENCE=https://wardby.example.com/mcp
|
|
237
243
|
# Optional: Wardby roles (see "Wardby roles" above).
|
|
238
244
|
AUTH_ROLE_CLAIM=groups
|
|
239
|
-
AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager,wardby-models=model-manager
|
|
245
|
+
AUTH_ROLE_MAP=wardby-admin=admin,wardby-packages=package-approver,wardby-services=service-manager,wardby-models=model-manager,wardby-hosts=host-manager
|
|
240
246
|
```
|
|
241
247
|
|
|
242
248
|
Copy `AUTH_ISSUER` exactly from the token's `iss` claim or the provider's
|
|
@@ -272,7 +278,7 @@ Confirm that:
|
|
|
272
278
|
|
|
273
279
|
- `resource` is the canonical MCP URI;
|
|
274
280
|
- `authorization_servers` contains the external issuer; and
|
|
275
|
-
- `scopes_supported` contains all
|
|
281
|
+
- `scopes_supported` contains all sixteen Wardby scopes.
|
|
276
282
|
|
|
277
283
|
An unauthenticated MCP request must return `401` with a `WWW-Authenticate`
|
|
278
284
|
challenge pointing back to that metadata document.
|
package/docs/getting-started.md
CHANGED
|
@@ -238,6 +238,13 @@ After connecting, try:
|
|
|
238
238
|
> List my Wardby agents, show the latest run and its actual cost, then create a
|
|
239
239
|
> new agent with a maximum budget of $0.50. Do not run it yet.
|
|
240
240
|
|
|
241
|
+
From Wardby 0.8.0, Claude Code can also show your runs in a pane beside the
|
|
242
|
+
chat. With `--client claude` or `both`, quickstart offers to install it
|
|
243
|
+
(`--claude-plugin` installs it unattended, `--no-claude-plugin` skips the
|
|
244
|
+
question); otherwise run `npx @wardby/cli@latest claude-plugin install`, then
|
|
245
|
+
`/wardby-runs`. `wardby doctor` reports whether it is set up. See the
|
|
246
|
+
[Claude Code plugin](claude-code-plugin.md) guide.
|
|
247
|
+
|
|
241
248
|
### Reasoning effort
|
|
242
249
|
|
|
243
250
|
A native agent can set `effort` (`low`, `medium`, `high`, `xhigh`, or `max`)
|
|
@@ -464,6 +471,7 @@ help article.
|
|
|
464
471
|
## Next steps
|
|
465
472
|
|
|
466
473
|
- [Agent recipes](agent-recipes.md)
|
|
474
|
+
- [Claude Code plugin](claude-code-plugin.md): your runs beside the chat (0.8.0+)
|
|
467
475
|
- [Runtime architecture](architecture-runtime.md)
|
|
468
476
|
- [Coding-agent setup](coding-agent-setup.md) and its
|
|
469
477
|
[local repositories](coding-agent-setup.md#local-repositories) section
|