@wjarka/cezarion 0.16.0 → 0.17.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/LICENSE +1 -0
- package/README.md +594 -207
- package/dist/agent-config/account-identity.d.ts +3 -19
- package/dist/agent-config/account-identity.js +8 -5
- package/dist/agent-config/account-identity.js.map +1 -1
- package/dist/agent-config/catalog.d.ts +3 -14
- package/dist/agent-config/catalog.js.map +1 -1
- package/dist/agent-config/files.d.ts +2 -6
- package/dist/agent-config/files.js +2 -6
- package/dist/agent-config/files.js.map +1 -1
- package/dist/agent-config/model-settings/types.d.ts +1 -1
- package/dist/agent-config/seed.d.ts +11 -3
- package/dist/agent-config/seed.js +52 -48
- package/dist/agent-config/seed.js.map +1 -1
- package/dist/agent-config/service.js +3 -2
- package/dist/agent-config/service.js.map +1 -1
- package/dist/agent-config/validate.d.ts +1 -4
- package/dist/agent-config/validate.js.map +1 -1
- package/dist/application-update/helper.d.ts +2 -2
- package/dist/application-update/helper.js +7 -12
- package/dist/application-update/helper.js.map +1 -1
- package/dist/application-update/launcher.d.ts +4 -0
- package/dist/application-update/launcher.js +18 -12
- package/dist/application-update/launcher.js.map +1 -1
- package/dist/application-update/service.d.ts +3 -3
- package/dist/application-update/service.js +1 -1
- package/dist/application-update/service.js.map +1 -1
- package/dist/archive-on-merge-setting.d.ts +15 -0
- package/dist/archive-on-merge-setting.js +14 -0
- package/dist/archive-on-merge-setting.js.map +1 -0
- package/dist/artifacts/cli.d.ts +8 -0
- package/dist/artifacts/cli.js +21 -2
- package/dist/artifacts/cli.js.map +1 -1
- package/dist/artifacts/resolve.js +2 -1
- package/dist/artifacts/resolve.js.map +1 -1
- package/dist/artifacts/store.js.map +1 -1
- package/dist/automations/automation-cli.d.ts +59 -0
- package/dist/automations/automation-cli.js +509 -0
- package/dist/automations/automation-cli.js.map +1 -0
- package/dist/automations/builtin-skill.d.ts +7 -0
- package/dist/automations/builtin-skill.js +14 -0
- package/dist/automations/builtin-skill.js.map +1 -0
- package/dist/automations/github-baseline.d.ts +3 -0
- package/dist/automations/github-baseline.js +17 -0
- package/dist/automations/github-baseline.js.map +1 -0
- package/dist/automations/github-poller.d.ts +23 -4
- package/dist/automations/github-poller.js +157 -88
- package/dist/automations/github-poller.js.map +1 -1
- package/dist/automations/prompts.d.ts +12 -0
- package/dist/automations/prompts.js +160 -0
- package/dist/automations/prompts.js.map +1 -0
- package/dist/automations/schedule-runner.d.ts +43 -24
- package/dist/automations/schedule-runner.js +207 -20
- package/dist/automations/schedule-runner.js.map +1 -1
- package/dist/automations/scheduler.d.ts +10 -2
- package/dist/automations/scheduler.js +200 -54
- package/dist/automations/scheduler.js.map +1 -1
- package/dist/automations/service.d.ts +777 -0
- package/dist/automations/service.js +444 -0
- package/dist/automations/service.js.map +1 -0
- package/dist/automations/store.d.ts +17 -7
- package/dist/automations/store.js +88 -17
- package/dist/automations/store.js.map +1 -1
- package/dist/automations/task-template.d.ts +7 -2
- package/dist/automations/task-template.js +93 -44
- package/dist/automations/task-template.js.map +1 -1
- package/dist/automations/tool-adapter.d.ts +6 -0
- package/dist/automations/tool-adapter.js +108 -0
- package/dist/automations/tool-adapter.js.map +1 -0
- package/dist/automations/types.d.ts +1 -405
- package/dist/automations/types.js +1 -218
- package/dist/automations/types.js.map +1 -1
- package/dist/autosave-cleanup.d.ts +26 -0
- package/dist/autosave-cleanup.js +87 -0
- package/dist/autosave-cleanup.js.map +1 -0
- package/dist/autosave-git.d.ts +3 -0
- package/dist/autosave-git.js +67 -35
- package/dist/autosave-git.js.map +1 -1
- package/dist/autosave-group.d.ts +8 -0
- package/dist/autosave-group.js +61 -0
- package/dist/autosave-group.js.map +1 -0
- package/dist/autosave-holders.d.ts +31 -4
- package/dist/autosave-holders.js +92 -7
- package/dist/autosave-holders.js.map +1 -1
- package/dist/autosave-windows.d.ts +14 -0
- package/dist/autosave-windows.js +36 -2
- package/dist/autosave-windows.js.map +1 -1
- package/dist/ci-wait/client.d.ts +20 -3
- package/dist/ci-wait/client.js +40 -44
- package/dist/ci-wait/client.js.map +1 -1
- package/dist/ci-wait/controller.d.ts +622 -36
- package/dist/ci-wait/controller.js +152 -20
- package/dist/ci-wait/controller.js.map +1 -1
- package/dist/ci-wait/errors.d.ts +19 -0
- package/dist/ci-wait/errors.js +180 -2
- package/dist/ci-wait/errors.js.map +1 -1
- package/dist/ci-wait/github.d.ts +25 -1
- package/dist/ci-wait/github.js +76 -9
- package/dist/ci-wait/github.js.map +1 -1
- package/dist/ci-wait/mcp.d.ts +0 -1
- package/dist/ci-wait/mcp.js +0 -2
- package/dist/ci-wait/mcp.js.map +1 -1
- package/dist/ci-wait/supervisor.d.ts +7 -0
- package/dist/ci-wait/supervisor.js +113 -17
- package/dist/ci-wait/supervisor.js.map +1 -1
- package/dist/ci-wait/tools.d.ts +536 -16
- package/dist/ci-wait/tools.js +165 -20
- package/dist/ci-wait/tools.js.map +1 -1
- package/dist/config.d.ts +3 -17
- package/dist/config.js +4 -60
- package/dist/config.js.map +1 -1
- package/dist/contract/active-provider.d.ts +12 -0
- package/dist/contract/agent-profiles.d.ts +2 -10
- package/dist/contract/ask-schema.d.ts +22 -4
- package/dist/contract/ask.d.ts +6 -4
- package/dist/contract/attachments.d.ts +35 -0
- package/dist/contract/attention.d.ts +46 -37
- package/dist/contract/automation-requests.d.ts +308 -0
- package/dist/contract/automation-schedule.d.ts +40 -11
- package/dist/contract/automation-storage.d.ts +512 -0
- package/dist/contract/automations.d.ts +421 -40
- package/dist/contract/ci-wait.d.ts +41 -4
- package/dist/contract/config-requests.d.ts +36 -0
- package/dist/contract/conversations.d.ts +24 -10
- package/dist/contract/defined.d.ts +8 -0
- package/dist/contract/delegation.d.ts +312 -8
- package/dist/contract/events.d.ts +24 -3
- package/dist/contract/github-requests.d.ts +26 -0
- package/dist/contract/github.d.ts +60 -27
- package/dist/contract/handoff.d.ts +43 -0
- package/dist/contract/health.d.ts +2 -2
- package/dist/contract/image-path.d.ts +6 -0
- package/dist/contract/index.d.ts +31 -0
- package/dist/contract/index.js +3756 -1525
- package/dist/contract/live-coordination.d.ts +158 -0
- package/dist/contract/live-limits.d.ts +8 -0
- package/dist/contract/live.d.ts +123 -0
- package/dist/contract/pending-ask.d.ts +58 -0
- package/dist/contract/permissions.d.ts +54 -0
- package/dist/contract/preview.d.ts +33 -0
- package/dist/contract/project-limits.d.ts +33 -0
- package/dist/contract/projects.d.ts +486 -20
- package/dist/contract/provider-requests.d.ts +77 -0
- package/dist/contract/query-requests.d.ts +52 -0
- package/dist/contract/repo-requests.d.ts +12 -0
- package/dist/contract/run-labels.d.ts +8 -0
- package/dist/contract/run-limits.d.ts +8 -0
- package/dist/contract/run-predicates.d.ts +32 -0
- package/dist/contract/run-requests.d.ts +33 -0
- package/dist/contract/run-search.d.ts +193 -0
- package/dist/contract/runs.d.ts +2232 -1894
- package/dist/contract/scheduled-tasks.d.ts +187 -0
- package/dist/contract/skills.d.ts +22 -772
- package/dist/contract/team-skill-ref.d.ts +10 -0
- package/dist/{core → contract}/tool-display.d.ts +4 -10
- package/dist/contract/ui-state-requests.d.ts +60 -0
- package/dist/contract/version.d.ts +3 -0
- package/dist/contract/voice.d.ts +213 -0
- package/dist/contract/waits.d.ts +1204 -0
- package/dist/contract/workflow-file.d.ts +37 -0
- package/dist/contract/workflow-requests.d.ts +7 -0
- package/dist/contract/workflows.d.ts +1 -2
- package/dist/contract/workspace.d.ts +34 -82
- package/dist/contract/zoned-time.d.ts +2 -11
- package/dist/core/agent-env.d.ts +4 -16
- package/dist/core/agent-env.js +14 -16
- package/dist/core/agent-env.js.map +1 -1
- package/dist/core/agent-profiles.d.ts +28 -40
- package/dist/core/agent-profiles.js +56 -51
- package/dist/core/agent-profiles.js.map +1 -1
- package/dist/core/agent-runner.d.ts +88 -44
- package/dist/core/agent-runner.js +17 -18
- package/dist/core/agent-runner.js.map +1 -1
- package/dist/core/ask.d.ts +3 -0
- package/dist/core/ask.js +12 -0
- package/dist/core/ask.js.map +1 -1
- package/dist/core/backend-detect.js +16 -2
- package/dist/core/backend-detect.js.map +1 -1
- package/dist/core/claude-cli-runner.d.ts +23 -4
- package/dist/core/claude-cli-runner.js +280 -76
- package/dist/core/claude-cli-runner.js.map +1 -1
- package/dist/core/claude-model-catalog.d.ts +2 -10
- package/dist/core/claude-model-catalog.js +2 -10
- package/dist/core/claude-model-catalog.js.map +1 -1
- package/dist/core/claude-ui-mapper.d.ts +2 -2
- package/dist/core/claude-ui-mapper.js +94 -2
- package/dist/core/claude-ui-mapper.js.map +1 -1
- package/dist/core/codex-app-server-runner.d.ts +3 -4
- package/dist/core/codex-app-server-runner.js +146 -51
- package/dist/core/codex-app-server-runner.js.map +1 -1
- package/dist/core/codex-app-server-transport.d.ts +4 -3
- package/dist/core/codex-app-server-transport.js +11 -7
- package/dist/core/codex-app-server-transport.js.map +1 -1
- package/dist/core/codex-approvals.d.ts +12 -0
- package/dist/core/codex-approvals.js +161 -0
- package/dist/core/codex-approvals.js.map +1 -0
- package/dist/core/codex-permissions.d.ts +1 -1
- package/dist/core/codex-ui-mapper.js +45 -1
- package/dist/core/codex-ui-mapper.js.map +1 -1
- package/dist/core/cursor-acp-runner.d.ts +1 -1
- package/dist/core/cursor-acp-runner.js +39 -15
- package/dist/core/cursor-acp-runner.js.map +1 -1
- package/dist/core/cursor-cli-flags.d.ts +19 -0
- package/dist/core/cursor-cli-flags.js +47 -0
- package/dist/core/cursor-cli-flags.js.map +1 -0
- package/dist/core/cursor-model-catalog.d.ts +22 -0
- package/dist/core/cursor-model-catalog.js +53 -24
- package/dist/core/cursor-model-catalog.js.map +1 -1
- package/dist/core/cursor-print-capabilities.d.ts +16 -0
- package/dist/core/cursor-print-capabilities.js +141 -0
- package/dist/core/cursor-print-capabilities.js.map +1 -0
- package/dist/core/cursor-print-process.d.ts +31 -0
- package/dist/core/cursor-print-process.js +117 -0
- package/dist/core/cursor-print-process.js.map +1 -0
- package/dist/core/cursor-print-runner.d.ts +31 -0
- package/dist/core/cursor-print-runner.js +555 -0
- package/dist/core/cursor-print-runner.js.map +1 -0
- package/dist/core/cursor-print-tool-catalog.d.ts +10 -0
- package/dist/core/cursor-print-tool-catalog.js +91 -0
- package/dist/core/cursor-print-tool-catalog.js.map +1 -0
- package/dist/core/cursor-print-ui-mapper.d.ts +47 -0
- package/dist/core/cursor-print-ui-mapper.js +553 -0
- package/dist/core/cursor-print-ui-mapper.js.map +1 -0
- package/dist/core/cursor-runner.d.ts +24 -0
- package/dist/core/cursor-runner.js +149 -0
- package/dist/core/cursor-runner.js.map +1 -0
- package/dist/core/cursor-ui-mapper.js +5 -2
- package/dist/core/cursor-ui-mapper.js.map +1 -1
- package/dist/core/defined.d.ts +1 -0
- package/dist/core/defined.js +2 -0
- package/dist/core/defined.js.map +1 -0
- package/dist/core/hook-items.d.ts +14 -0
- package/dist/core/hook-items.js +13 -0
- package/dist/core/hook-items.js.map +1 -0
- package/dist/core/host-model-catalog.d.ts +2 -9
- package/dist/core/host-model-catalog.js +2 -9
- package/dist/core/host-model-catalog.js.map +1 -1
- package/dist/core/managed-session.js +15 -3
- package/dist/core/managed-session.js.map +1 -1
- package/dist/core/model-identity.d.ts +4 -21
- package/dist/core/model-identity.js.map +1 -1
- package/dist/core/model-presets.d.ts +2 -13
- package/dist/core/model-presets.js +2 -13
- package/dist/core/model-presets.js.map +1 -1
- package/dist/core/omp-model-catalog.js.map +1 -1
- package/dist/core/omp-runner.d.ts +6 -7
- package/dist/core/omp-runner.js +92 -33
- package/dist/core/omp-runner.js.map +1 -1
- package/dist/core/omp-ui-mapper.js +1 -1
- package/dist/core/omp-ui-mapper.js.map +1 -1
- package/dist/core/opencode-model-catalog.js.map +1 -1
- package/dist/core/opencode-permissions.d.ts +52 -0
- package/dist/core/opencode-permissions.js +101 -0
- package/dist/core/opencode-permissions.js.map +1 -0
- package/dist/core/opencode-server-runner.d.ts +10 -9
- package/dist/core/opencode-server-runner.js +286 -28
- package/dist/core/opencode-server-runner.js.map +1 -1
- package/dist/core/opencode-session-error.d.ts +15 -7
- package/dist/core/opencode-session-error.js +25 -9
- package/dist/core/opencode-session-error.js.map +1 -1
- package/dist/core/opencode-ui-mapper.js +2 -2
- package/dist/core/opencode-ui-mapper.js.map +1 -1
- package/dist/core/pi-model-catalog.js.map +1 -1
- package/dist/core/pi-runner.d.ts +12 -4
- package/dist/core/pi-runner.js +171 -63
- package/dist/core/pi-runner.js.map +1 -1
- package/dist/core/pi-ui-mapper.js +1 -1
- package/dist/core/pi-ui-mapper.js.map +1 -1
- package/dist/core/process-usage.d.ts +5 -0
- package/dist/core/process-usage.js +24 -4
- package/dist/core/process-usage.js.map +1 -1
- package/dist/core/provider-auth.d.ts +16 -107
- package/dist/core/provider-auth.js +16 -132
- package/dist/core/provider-auth.js.map +1 -1
- package/dist/core/runner-factory.d.ts +4 -1
- package/dist/core/runner-factory.js +3 -3
- package/dist/core/runner-factory.js.map +1 -1
- package/dist/core/runner-runtime.d.ts +22 -0
- package/dist/core/runner-runtime.js +66 -5
- package/dist/core/runner-runtime.js.map +1 -1
- package/dist/core/runner-tool-grants.d.ts +21 -0
- package/dist/core/runner-tool-grants.js +64 -0
- package/dist/core/runner-tool-grants.js.map +1 -0
- package/dist/core/secret-redaction.d.ts +3 -20
- package/dist/core/secret-redaction.js +3 -20
- package/dist/core/secret-redaction.js.map +1 -1
- package/dist/core/session-process.d.ts +22 -2
- package/dist/core/session-process.js +170 -12
- package/dist/core/session-process.js.map +1 -1
- package/dist/core/shell-env.d.ts +2 -15
- package/dist/core/shell-env.js +2 -15
- package/dist/core/shell-env.js.map +1 -1
- package/dist/core/ui-events.d.ts +60 -47
- package/dist/core/ui-events.js +0 -23
- package/dist/core/ui-events.js.map +1 -1
- package/dist/core/usage-limit.js.map +1 -1
- package/dist/data-gitignore.js +3 -1
- package/dist/data-gitignore.js.map +1 -1
- package/dist/delegation/capacity.d.ts +4 -8
- package/dist/delegation/capacity.js +4 -8
- package/dist/delegation/capacity.js.map +1 -1
- package/dist/delegation/cli.js +123 -21
- package/dist/delegation/cli.js.map +1 -1
- package/dist/delegation/context.d.ts +19 -3
- package/dist/delegation/context.js +217 -22
- package/dist/delegation/context.js.map +1 -1
- package/dist/delegation/conversations.d.ts +4 -3
- package/dist/delegation/conversations.js +7 -5
- package/dist/delegation/conversations.js.map +1 -1
- package/dist/delegation/destroy-observation.d.ts +1 -1
- package/dist/delegation/destroy-observation.js.map +1 -1
- package/dist/delegation/effort.js.map +1 -1
- package/dist/delegation/execution-identity.d.ts +1 -1
- package/dist/delegation/execution-identity.js +41 -7
- package/dist/delegation/execution-identity.js.map +1 -1
- package/dist/delegation/idle-test-app.d.ts +4 -0
- package/dist/delegation/idle-test-app.js +174 -0
- package/dist/delegation/idle-test-app.js.map +1 -0
- package/dist/delegation/input.js.map +1 -1
- package/dist/delegation/park-notice.d.ts +42 -0
- package/dist/delegation/park-notice.js +71 -0
- package/dist/delegation/park-notice.js.map +1 -0
- package/dist/delegation/policy.d.ts +2 -0
- package/dist/delegation/policy.js +9 -1
- package/dist/delegation/policy.js.map +1 -1
- package/dist/delegation/process-liveness.d.ts +10 -15
- package/dist/delegation/process-liveness.js +11 -35
- package/dist/delegation/process-liveness.js.map +1 -1
- package/dist/delegation/provision.js +21 -19
- package/dist/delegation/provision.js.map +1 -1
- package/dist/delegation/questions.d.ts +3 -1
- package/dist/delegation/questions.js +10 -5
- package/dist/delegation/questions.js.map +1 -1
- package/dist/delegation/readiness.d.ts +2 -2
- package/dist/delegation/results.d.ts +4 -1
- package/dist/delegation/results.js +49 -18
- package/dist/delegation/results.js.map +1 -1
- package/dist/delegation/retry-backoff.d.ts +8 -0
- package/dist/delegation/retry-backoff.js +8 -0
- package/dist/delegation/retry-backoff.js.map +1 -1
- package/dist/delegation/routes.d.ts +114 -30
- package/dist/delegation/routes.js +4 -1
- package/dist/delegation/routes.js.map +1 -1
- package/dist/delegation/scratch-cleanup.d.ts +4 -5
- package/dist/delegation/scratch-cleanup.js +10 -8
- package/dist/delegation/scratch-cleanup.js.map +1 -1
- package/dist/delegation/service.d.ts +12 -4
- package/dist/delegation/service.js +76 -28
- package/dist/delegation/service.js.map +1 -1
- package/dist/delegation/transport.d.ts +154 -70
- package/dist/delegation/wait.d.ts +11 -0
- package/dist/delegation/wait.js +24 -0
- package/dist/delegation/wait.js.map +1 -1
- package/dist/delegation/windows-test-app.d.ts +5 -0
- package/dist/delegation/windows-test-app.js +63 -0
- package/dist/delegation/windows-test-app.js.map +1 -0
- package/dist/delegation/windows-workspace-identity.d.ts +3 -0
- package/dist/delegation/windows-workspace-identity.js +22 -0
- package/dist/delegation/windows-workspace-identity.js.map +1 -0
- package/dist/delegation/workspace.d.ts +5 -10
- package/dist/delegation/workspace.js +136 -75
- package/dist/delegation/workspace.js.map +1 -1
- package/dist/detached-process.d.ts +103 -0
- package/dist/detached-process.js +301 -0
- package/dist/detached-process.js.map +1 -0
- package/dist/discovery/catalog.d.ts +2 -1
- package/dist/discovery/catalog.js.map +1 -1
- package/dist/discovery/cli.js +3 -1
- package/dist/discovery/cli.js.map +1 -1
- package/dist/git-diff-base.d.ts +6 -61
- package/dist/git-diff-base.js +6 -70
- package/dist/git-diff-base.js.map +1 -1
- package/dist/git-index-copy.d.ts +4 -0
- package/dist/git-index-copy.js +10 -0
- package/dist/git-index-copy.js.map +1 -0
- package/dist/git-worktree-lock.d.ts +2 -4
- package/dist/git-worktree-lock.js +2 -4
- package/dist/git-worktree-lock.js.map +1 -1
- package/dist/git-worktree-release.d.ts +2 -2
- package/dist/git-worktree-release.js.map +1 -1
- package/dist/git-worktree.d.ts +47 -76
- package/dist/git-worktree.js +240 -94
- package/dist/git-worktree.js.map +1 -1
- package/dist/handoff.d.ts +51 -41
- package/dist/handoff.js +130 -78
- package/dist/handoff.js.map +1 -1
- package/dist/index.js +60 -39
- package/dist/index.js.map +1 -1
- package/dist/merge-observations.d.ts +13 -0
- package/dist/merge-observations.js +55 -0
- package/dist/merge-observations.js.map +1 -0
- package/dist/open-url.js +4 -14
- package/dist/open-url.js.map +1 -1
- package/dist/paths.d.ts +10 -13
- package/dist/paths.js +36 -17
- package/dist/paths.js.map +1 -1
- package/dist/planner.d.ts +2 -1
- package/dist/planner.js +9 -6
- package/dist/planner.js.map +1 -1
- package/dist/preview/agent-address.d.ts +34 -0
- package/dist/preview/agent-address.js +51 -0
- package/dist/preview/agent-address.js.map +1 -0
- package/dist/preview/agent-marker.d.ts +17 -0
- package/dist/preview/agent-marker.js +71 -0
- package/dist/preview/agent-marker.js.map +1 -0
- package/dist/preview/cdp-proxy.d.ts +54 -0
- package/dist/preview/cdp-proxy.js +151 -0
- package/dist/preview/cdp-proxy.js.map +1 -0
- package/dist/preview/cdp.d.ts +39 -3
- package/dist/preview/cdp.js +155 -57
- package/dist/preview/cdp.js.map +1 -1
- package/dist/preview/chromium.d.ts +18 -6
- package/dist/preview/chromium.js +112 -25
- package/dist/preview/chromium.js.map +1 -1
- package/dist/preview/dev-server.d.ts +1 -1
- package/dist/preview/dev-server.js +20 -44
- package/dist/preview/dev-server.js.map +1 -1
- package/dist/preview/host.d.ts +70 -3
- package/dist/preview/host.js +314 -28
- package/dist/preview/host.js.map +1 -1
- package/dist/preview/registration.d.ts +10 -5
- package/dist/preview/registration.js +2 -0
- package/dist/preview/registration.js.map +1 -1
- package/dist/preview/session.d.ts +2 -0
- package/dist/preview/session.js +10 -0
- package/dist/preview/session.js.map +1 -1
- package/dist/process-wait/exit-file.d.ts +29 -0
- package/dist/process-wait/exit-file.js +67 -0
- package/dist/process-wait/exit-file.js.map +1 -0
- package/dist/process-wait/supervisor.d.ts +30 -0
- package/dist/process-wait/supervisor.js +71 -0
- package/dist/process-wait/supervisor.js.map +1 -0
- package/dist/release/snapshot.d.ts +6 -6
- package/dist/runs/agent-tmpdir.d.ts +51 -36
- package/dist/runs/agent-tmpdir.js +389 -132
- package/dist/runs/agent-tmpdir.js.map +1 -1
- package/dist/runs/auto-name.d.ts +6 -6
- package/dist/runs/auto-name.js +1 -1
- package/dist/runs/auto-name.js.map +1 -1
- package/dist/runs/client-request.d.ts +3 -3
- package/dist/runs/client-request.js +3 -3
- package/dist/runs/client-request.js.map +1 -1
- package/dist/runs/delegation-state.d.ts +11 -2
- package/dist/runs/delegation-state.js.map +1 -1
- package/dist/runs/event-history-agent-context.d.ts +14 -0
- package/dist/runs/event-history-agent-context.js +105 -0
- package/dist/runs/event-history-agent-context.js.map +1 -0
- package/dist/runs/event-history-context.d.ts +15 -0
- package/dist/runs/event-history-context.js +109 -0
- package/dist/runs/event-history-context.js.map +1 -0
- package/dist/runs/event-history.d.ts +4 -1
- package/dist/runs/event-history.js +29 -130
- package/dist/runs/event-history.js.map +1 -1
- package/dist/runs/history-stream.d.ts +2 -0
- package/dist/runs/history-stream.js +62 -0
- package/dist/runs/history-stream.js.map +1 -0
- package/dist/runs/legacy-index.d.ts +6 -19
- package/dist/runs/legacy-index.js +6 -19
- package/dist/runs/legacy-index.js.map +1 -1
- package/dist/runs/live-item-snapshots.d.ts +13 -0
- package/dist/runs/live-item-snapshots.js +79 -0
- package/dist/runs/live-item-snapshots.js.map +1 -0
- package/dist/runs/loaded-run-healing.d.ts +3 -0
- package/dist/runs/loaded-run-healing.js +17 -0
- package/dist/runs/loaded-run-healing.js.map +1 -0
- package/dist/runs/outcome-commit.d.ts +98 -0
- package/dist/runs/outcome-commit.js +132 -0
- package/dist/runs/outcome-commit.js.map +1 -0
- package/dist/runs/pull-requests.d.ts +14 -0
- package/dist/runs/pull-requests.js +96 -0
- package/dist/runs/pull-requests.js.map +1 -0
- package/dist/runs/raw-record.d.ts +3 -15
- package/dist/runs/raw-record.js +3 -15
- package/dist/runs/raw-record.js.map +1 -1
- package/dist/runs/retention.d.ts +2 -2
- package/dist/runs/retention.js +7 -0
- package/dist/runs/retention.js.map +1 -1
- package/dist/runs/review-gate.d.ts +1 -1
- package/dist/runs/review-gate.js.map +1 -1
- package/dist/runs/run-claims.d.ts +2 -9
- package/dist/runs/run-claims.js.map +1 -1
- package/dist/runs/run-database.d.ts +29 -34
- package/dist/runs/run-database.js +124 -46
- package/dist/runs/run-database.js.map +1 -1
- package/dist/runs/run-index.d.ts +6 -25
- package/dist/runs/run-index.js +25 -38
- package/dist/runs/run-index.js.map +1 -1
- package/dist/runs/run-row.d.ts +5 -34
- package/dist/runs/run-row.js +13 -38
- package/dist/runs/run-row.js.map +1 -1
- package/dist/runs/store.d.ts +1597 -744
- package/dist/runs/store.js +1231 -739
- package/dist/runs/store.js.map +1 -1
- package/dist/runs/task-markers.d.ts +1 -0
- package/dist/runs/task-markers.js +5 -1
- package/dist/runs/task-markers.js.map +1 -1
- package/dist/runs/task-refs.d.ts +3 -3
- package/dist/runs/transcript-facts-fold.d.ts +64 -0
- package/dist/runs/transcript-facts-fold.js +109 -0
- package/dist/runs/transcript-facts-fold.js.map +1 -0
- package/dist/runs/transcript-facts-load.d.ts +11 -0
- package/dist/runs/transcript-facts-load.js +66 -0
- package/dist/runs/transcript-facts-load.js.map +1 -0
- package/dist/runs/transcript-facts-queue.d.ts +30 -0
- package/dist/runs/transcript-facts-queue.js +227 -0
- package/dist/runs/transcript-facts-queue.js.map +1 -0
- package/dist/runs/transcript-facts-worker.d.ts +15 -0
- package/dist/runs/transcript-facts-worker.js +26 -0
- package/dist/runs/transcript-facts-worker.js.map +1 -0
- package/dist/runs/transcript-facts.d.ts +13 -51
- package/dist/runs/transcript-facts.js +86 -202
- package/dist/runs/transcript-facts.js.map +1 -1
- package/dist/runs/ui-event-sink.d.ts +5 -30
- package/dist/runs/ui-event-sink.js +8 -30
- package/dist/runs/ui-event-sink.js.map +1 -1
- package/dist/runs/webhook.d.ts +104 -38
- package/dist/runs/webhook.js +180 -77
- package/dist/runs/webhook.js.map +1 -1
- package/dist/server/app-type.d.ts +2 -17
- package/dist/server/archive-on-merge.d.ts +35 -0
- package/dist/server/archive-on-merge.js +202 -0
- package/dist/server/archive-on-merge.js.map +1 -0
- package/dist/server/capabilities.d.ts +3 -15
- package/dist/server/capabilities.js +6 -19
- package/dist/server/capabilities.js.map +1 -1
- package/dist/server/checkout-progress.d.ts +10 -0
- package/dist/server/checkout-progress.js +27 -0
- package/dist/server/checkout-progress.js.map +1 -0
- package/dist/server/checkout.d.ts +10 -19
- package/dist/server/checkout.js +15 -45
- package/dist/server/checkout.js.map +1 -1
- package/dist/server/cockpit-ownership.d.ts +2 -0
- package/dist/server/cockpit-ownership.js +9 -0
- package/dist/server/cockpit-ownership.js.map +1 -1
- package/dist/server/cold-repo-handles.d.ts +2 -7
- package/dist/server/cold-repo-handles.js +2 -7
- package/dist/server/cold-repo-handles.js.map +1 -1
- package/dist/server/completion-actions.d.ts +30 -0
- package/dist/server/completion-actions.js +204 -0
- package/dist/server/completion-actions.js.map +1 -0
- package/dist/server/create-project.d.ts +71 -0
- package/dist/server/create-project.js +448 -0
- package/dist/server/create-project.js.map +1 -0
- package/dist/server/forge/github-filters.d.ts +7 -1
- package/dist/server/forge/github-filters.js +66 -51
- package/dist/server/forge/github-filters.js.map +1 -1
- package/dist/server/forge/github-merge-requirements.d.ts +18 -0
- package/dist/server/forge/github-merge-requirements.js +137 -0
- package/dist/server/forge/github-merge-requirements.js.map +1 -0
- package/dist/server/forge/github.d.ts +98 -111
- package/dist/server/forge/github.js +625 -306
- package/dist/server/forge/github.js.map +1 -1
- package/dist/server/forge/types.d.ts +25 -22
- package/dist/server/fs-browse.d.ts +3 -28
- package/dist/server/fs-browse.js.map +1 -1
- package/dist/server/git-changes.d.ts +5 -15
- package/dist/server/git-changes.js +3 -50
- package/dist/server/git-changes.js.map +1 -1
- package/dist/server/git.d.ts +3 -1
- package/dist/server/git.js +12 -0
- package/dist/server/git.js.map +1 -1
- package/dist/server/github.d.ts +1 -1
- package/dist/server/github.js +1 -1
- package/dist/server/github.js.map +1 -1
- package/dist/server/launch-key.d.ts +2 -4
- package/dist/server/launch-key.js +2 -4
- package/dist/server/launch-key.js.map +1 -1
- package/dist/server/live-routes.d.ts +68 -0
- package/dist/server/live-routes.js +147 -0
- package/dist/server/live-routes.js.map +1 -0
- package/dist/server/open-in-app.d.ts +4 -13
- package/dist/server/open-in-app.js +5 -41
- package/dist/server/open-in-app.js.map +1 -1
- package/dist/server/open-in-targets.d.ts +42 -0
- package/dist/server/open-in-targets.js +110 -0
- package/dist/server/open-in-targets.js.map +1 -0
- package/dist/server/open-in-terminal.d.ts +3 -0
- package/dist/server/open-in-terminal.js +6 -26
- package/dist/server/open-in-terminal.js.map +1 -1
- package/dist/server/preview-cdp-socket.d.ts +21 -0
- package/dist/server/preview-cdp-socket.js +112 -0
- package/dist/server/preview-cdp-socket.js.map +1 -0
- package/dist/server/preview-socket.d.ts +11 -11
- package/dist/server/preview-socket.js +22 -22
- package/dist/server/preview-socket.js.map +1 -1
- package/dist/server/preview-sockets.d.ts +14 -0
- package/dist/server/preview-sockets.js +18 -0
- package/dist/server/preview-sockets.js.map +1 -0
- package/dist/server/project-context.d.ts +54 -18
- package/dist/server/project-context.js +178 -5
- package/dist/server/project-context.js.map +1 -1
- package/dist/server/provider-action-gate.d.ts +0 -2
- package/dist/server/provider-action-gate.js +0 -21
- package/dist/server/provider-action-gate.js.map +1 -1
- package/dist/server/provider-auth-runtime.d.ts +3 -18
- package/dist/server/provider-auth-runtime.js +3 -18
- package/dist/server/provider-auth-runtime.js.map +1 -1
- package/dist/server/repo-branches.d.ts +3 -9
- package/dist/server/repo-branches.js +6 -22
- package/dist/server/repo-branches.js.map +1 -1
- package/dist/server/run-event-feed.d.ts +20 -0
- package/dist/server/run-event-feed.js +190 -0
- package/dist/server/run-event-feed.js.map +1 -0
- package/dist/server/server-deps.d.ts +37 -0
- package/dist/server/server-deps.js +114 -0
- package/dist/server/server-deps.js.map +1 -0
- package/dist/server/server.d.ts +14082 -11998
- package/dist/server/server.js +785 -1647
- package/dist/server/server.js.map +1 -1
- package/dist/server/start-run-options.d.ts +82 -0
- package/dist/server/start-run-options.js +111 -0
- package/dist/server/start-run-options.js.map +1 -0
- package/dist/server/validators.d.ts +3 -29
- package/dist/server/validators.js +1 -2
- package/dist/server/validators.js.map +1 -1
- package/dist/server/ws.d.ts +3 -23
- package/dist/server/ws.js +3 -23
- package/dist/server/ws.js.map +1 -1
- package/dist/server-install/engine.d.ts +6 -9
- package/dist/server-install/engine.js +2 -9
- package/dist/server-install/engine.js.map +1 -1
- package/dist/server-install/platforms/ubuntu-vps.d.ts +1 -1
- package/dist/server-install/state.d.ts +2 -4
- package/dist/server-install/state.js +2 -4
- package/dist/server-install/state.js.map +1 -1
- package/dist/server-install/steps.d.ts +2 -5
- package/dist/server-install/steps.js +3 -6
- package/dist/server-install/steps.js.map +1 -1
- package/dist/server-install/types.d.ts +3 -6
- package/dist/server-install/types.js +2 -5
- package/dist/server-install/types.js.map +1 -1
- package/dist/server-install/ui.d.ts +2 -8
- package/dist/server-install/ui.js +3 -3
- package/dist/server-install/ui.js.map +1 -1
- package/dist/session-context.d.ts +64 -0
- package/dist/session-context.js +264 -0
- package/dist/session-context.js.map +1 -0
- package/dist/skills-provision.d.ts +62 -0
- package/dist/skills-provision.js +325 -0
- package/dist/skills-provision.js.map +1 -0
- package/dist/skills-remote.d.ts +29 -27
- package/dist/skills-remote.js +236 -100
- package/dist/skills-remote.js.map +1 -1
- package/dist/skills.d.ts +25 -36
- package/dist/skills.js +43 -54
- package/dist/skills.js.map +1 -1
- package/dist/subcommands.d.ts +11 -0
- package/dist/subcommands.js +24 -0
- package/dist/subcommands.js.map +1 -0
- package/dist/task-cli/cli.js +78 -25
- package/dist/task-cli/cli.js.map +1 -1
- package/dist/task-cli/discovery.d.ts +4 -2
- package/dist/task-cli/discovery.js +14 -13
- package/dist/task-cli/discovery.js.map +1 -1
- package/dist/task-cli/hint.d.ts +20 -0
- package/dist/task-cli/hint.js +14 -0
- package/dist/task-cli/hint.js.map +1 -0
- package/dist/task-cli/http.d.ts +1 -0
- package/dist/task-cli/http.js +3 -1
- package/dist/task-cli/http.js.map +1 -1
- package/dist/task-cli/projections.d.ts +14 -11
- package/dist/task-cli/projections.js +15 -11
- package/dist/task-cli/projections.js.map +1 -1
- package/dist/task-cli/watch.d.ts +18 -10
- package/dist/task-cli/watch.js +128 -20
- package/dist/task-cli/watch.js.map +1 -1
- package/dist/ui-state.d.ts +17 -3
- package/dist/ui-state.js +56 -9
- package/dist/ui-state.js.map +1 -1
- package/dist/update-check.d.ts +0 -10
- package/dist/update-check.js +1 -16
- package/dist/update-check.js.map +1 -1
- package/dist/voice/decide.d.ts +32 -0
- package/dist/voice/decide.js +297 -0
- package/dist/voice/decide.js.map +1 -0
- package/dist/voice/decision-log.d.ts +52 -0
- package/dist/voice/decision-log.js +107 -0
- package/dist/voice/decision-log.js.map +1 -0
- package/dist/voice/engine.d.ts +119 -0
- package/dist/voice/engine.js +60 -0
- package/dist/voice/engine.js.map +1 -0
- package/dist/voice/fake-engine.d.ts +10 -0
- package/dist/voice/fake-engine.js +192 -0
- package/dist/voice/fake-engine.js.map +1 -0
- package/dist/voice/jev-engine.d.ts +17 -0
- package/dist/voice/jev-engine.js +110 -0
- package/dist/voice/jev-engine.js.map +1 -0
- package/dist/voice/pending-ask.d.ts +17 -0
- package/dist/voice/pending-ask.js +50 -0
- package/dist/voice/pending-ask.js.map +1 -0
- package/dist/voice/routes.d.ts +115 -0
- package/dist/voice/routes.js +91 -0
- package/dist/voice/routes.js.map +1 -0
- package/dist/voice/sentence.d.ts +21 -0
- package/dist/voice/sentence.js +61 -0
- package/dist/voice/sentence.js.map +1 -0
- package/dist/voice/thresholds.d.ts +28 -0
- package/dist/voice/thresholds.js +29 -0
- package/dist/voice/thresholds.js.map +1 -0
- package/dist/webhooks/cli.d.ts +18 -0
- package/dist/webhooks/cli.js +145 -0
- package/dist/webhooks/cli.js.map +1 -0
- package/dist/webhooks/prompt.d.ts +5 -0
- package/dist/webhooks/prompt.js +26 -0
- package/dist/webhooks/prompt.js.map +1 -0
- package/dist/workflows/active-run.d.ts +167 -0
- package/dist/workflows/active-run.js +21 -0
- package/dist/workflows/active-run.js.map +1 -0
- package/dist/workflows/continuation-admission.d.ts +913 -0
- package/dist/workflows/continuation-admission.js +265 -0
- package/dist/workflows/continuation-admission.js.map +1 -0
- package/dist/workflows/execution-account.d.ts +13 -0
- package/dist/workflows/execution-account.js +18 -0
- package/dist/workflows/execution-account.js.map +1 -0
- package/dist/workflows/input-acknowledgement.d.ts +152 -0
- package/dist/workflows/input-acknowledgement.js +38 -0
- package/dist/workflows/input-acknowledgement.js.map +1 -0
- package/dist/workflows/line-order.d.ts +5 -0
- package/dist/workflows/line-order.js +25 -0
- package/dist/workflows/line-order.js.map +1 -0
- package/dist/workflows/outcome-batches.d.ts +20 -0
- package/dist/workflows/outcome-batches.js +25 -0
- package/dist/workflows/outcome-batches.js.map +1 -0
- package/dist/workflows/question-routing.d.ts +8 -0
- package/dist/workflows/question-routing.js +18 -0
- package/dist/workflows/question-routing.js.map +1 -0
- package/dist/workflows/run-scheduling.d.ts +35 -0
- package/dist/workflows/run-scheduling.js +61 -0
- package/dist/workflows/run-scheduling.js.map +1 -0
- package/dist/workflows/run-states.d.ts +190 -0
- package/dist/workflows/run-states.js +295 -0
- package/dist/workflows/run-states.js.map +1 -0
- package/dist/workflows/run.d.ts +1296 -278
- package/dist/workflows/run.js +5730 -3265
- package/dist/workflows/run.js.map +1 -1
- package/dist/workflows/turn-end.d.ts +116 -0
- package/dist/workflows/turn-end.js +68 -0
- package/dist/workflows/turn-end.js.map +1 -0
- package/dist/workflows/types.d.ts +35 -130
- package/dist/workflows/types.js +47 -100
- package/dist/workflows/types.js.map +1 -1
- package/dist/workflows/waits.d.ts +74 -0
- package/dist/workflows/waits.js +197 -0
- package/dist/workflows/waits.js.map +1 -0
- package/dist/workspace/agent-accounts.d.ts +5 -38
- package/dist/workspace/agent-accounts.js +14 -40
- package/dist/workspace/agent-accounts.js.map +1 -1
- package/dist/workspace/agent-profiles.d.ts +40 -16
- package/dist/workspace/agent-profiles.js +77 -17
- package/dist/workspace/agent-profiles.js.map +1 -1
- package/dist/workspace/config.d.ts +48 -49
- package/dist/workspace/config.js +68 -72
- package/dist/workspace/config.js.map +1 -1
- package/dist/workspace/migrations.d.ts +3 -13
- package/dist/workspace/migrations.js.map +1 -1
- package/dist/workspace/projects-cli.d.ts +1 -1
- package/dist/workspace/projects-cli.js.map +1 -1
- package/dist/workspace/projects.d.ts +15 -18
- package/dist/workspace/projects.js +20 -16
- package/dist/workspace/projects.js.map +1 -1
- package/dist/workspace/semaphore.d.ts +11 -45
- package/dist/workspace/semaphore.js +6 -18
- package/dist/workspace/semaphore.js.map +1 -1
- package/dist/workspace/ui-state.d.ts +6 -4
- package/dist/workspace/ui-state.js +6 -4
- package/dist/workspace/ui-state.js.map +1 -1
- package/dist/workspace/webhooks.d.ts +40 -0
- package/dist/workspace/webhooks.js +146 -0
- package/dist/workspace/webhooks.js.map +1 -0
- package/dist/worktree-manifest.d.ts +165 -0
- package/dist/worktree-manifest.js +530 -0
- package/dist/worktree-manifest.js.map +1 -0
- package/dist/worktree-setup.js.map +1 -1
- package/package.json +6 -5
- package/scripts/benchmark-run-store-fixture.ts +7 -3
- package/scripts/check-pack.mjs +3 -1
- package/scripts/inline-contract.mjs +80 -27
- package/scripts/install-as-command.mjs +3 -1
- package/scripts/measure-transcript-facts-health.mjs +87 -0
- package/scripts/measure-transcript-facts-lag.mjs +68 -0
- package/scripts/mock-ci-tool.mjs +49 -6
- package/scripts/mock-claude-model-refusal.mjs +42 -0
- package/scripts/mock-claude.mjs +833 -591
- package/scripts/mock-codex-app-server.mjs +785 -418
- package/scripts/mock-cursor-acp.mjs +296 -125
- package/scripts/mock-cursor-print.mjs +256 -0
- package/scripts/mock-deferred-turn-start.mjs +16 -0
- package/scripts/mock-delivery-control.d.mts +23 -0
- package/scripts/mock-delivery-control.mjs +80 -0
- package/scripts/mock-env-record.mjs +11 -0
- package/scripts/mock-failure-control.d.mts +13 -0
- package/scripts/mock-failure-control.mjs +68 -0
- package/scripts/mock-multi-pr.mjs +7 -0
- package/scripts/mock-nudge.mjs +45 -0
- package/scripts/mock-omp-rpc.mjs +429 -255
- package/scripts/mock-opencode-serve.mjs +972 -557
- package/scripts/mock-pi-rpc.mjs +558 -331
- package/scripts/mock-runner-crash.mjs +18 -2
- package/scripts/mock-session-context.d.mts +5 -0
- package/scripts/mock-session-context.mjs +56 -0
- package/scripts/mock-silent-tail.mjs +10 -3
- package/scripts/pi-default-tools.mjs +22 -0
- package/scripts/pi-project-skills.mjs +59 -0
- package/scripts/probe-cursor-print.mjs +627 -0
- package/scripts/transcript-facts-fixture.mjs +53 -0
- package/scripts/voice-replay.ts +50 -0
- package/scripts/windows-workspace-identity.cs +208 -0
- package/scripts/windows-workspace-identity.ps1 +10 -0
- package/web/dist/assets/alert-dialog-DfctKUMw.js +1 -0
- package/web/dist/assets/button-CeupvoKG.js +41 -0
- package/web/dist/assets/centered-state-hDsyXrnH.js +1 -0
- package/web/dist/assets/cez-idle-D3aj_9lp.js +1 -0
- package/web/dist/assets/diff-BnIXZK3i2.js +3 -0
- package/web/dist/assets/diff-controls-GewpW9aF.js +1 -0
- package/web/dist/assets/diff-view-Byo7gpvW.js +11 -0
- package/web/dist/assets/dropdown-menu-COj_J5wd.js +6 -0
- package/web/dist/assets/eye-B8okNWXU.js +1 -0
- package/web/dist/assets/git-toolbar-DY0z0n4S.js +1 -0
- package/web/dist/assets/github-DwU6ALRK.js +1 -0
- package/web/dist/assets/{image-preview-FOEfqpZP.js → image-preview-C_t9q45f.js} +1 -1
- package/web/dist/assets/index-BOfE8pyD.js +34 -0
- package/web/dist/assets/index-D9HpsmdW.css +1 -0
- package/web/dist/assets/live-protocol-Uce2NwEX.js +64 -0
- package/web/dist/assets/live-worker-BizfZSoh.ts +33 -0
- package/web/dist/assets/markdown-BBDDg-4t.js +1 -0
- package/web/dist/assets/nav-row-styles-AoIhhIwf.js +1 -0
- package/web/dist/assets/popover-D56fhiXj.js +1 -0
- package/web/dist/assets/preview-pane-connected-BmVqfSU5.js +3 -0
- package/web/dist/assets/reference-chip-gQNk-4jc.js +1 -0
- package/web/dist/assets/repo-git-B5ECDUuv.js +1 -0
- package/web/dist/assets/{repo-git-CoKp-g9K.css → repo-git-DVXNOJDT.css} +1 -1
- package/web/dist/assets/run-header-C0Y1NvEM.js +2 -0
- package/web/dist/assets/run-header-CC7VUTg9.css +1 -0
- package/web/dist/assets/skills-DUeTkZ9z.js +1 -0
- package/web/dist/assets/status-dot-1PR0i69P.js +1 -0
- package/web/dist/assets/tab-link-DmWk4l5O.js +1 -0
- package/web/dist/assets/task-changes-DKZXuW89.js +1 -0
- package/web/dist/assets/task-commits-BZ6KxWdF.js +1 -0
- package/web/dist/assets/task-files-DlF7Apcn.js +2 -0
- package/web/dist/assets/task-github-item-CVPo3geZ.js +1 -0
- package/web/dist/assets/task-thread-DtQ6uGfQ.css +1 -0
- package/web/dist/assets/task-thread-mm4-ECyo.js +9 -0
- package/web/dist/assets/thread-state-CIw2BlhT.js +4 -0
- package/web/dist/assets/use-hand-to-agent-state-BCDjzHnG.js +1 -0
- package/web/dist/assets/use-hand-to-agent-state-C7esPJ-N.css +1 -0
- package/web/dist/assets/workflows-D8vYD-ql.js +7 -0
- package/web/dist/assets/zoomable-image-CxQSsfcn.js +1 -0
- package/web/dist/index.html +13 -17
- package/web/dist/live-worker.js +4 -0
- package/dist/core/tool-display.js +0 -179
- package/dist/core/tool-display.js.map +0 -1
- package/dist/runs/human-ask-summary.d.ts +0 -9
- package/dist/runs/human-ask-summary.js +0 -39
- package/dist/runs/human-ask-summary.js.map +0 -1
- package/dist/runs/run-search.d.ts +0 -29
- package/dist/runs/run-search.js +0 -63
- package/dist/runs/run-search.js.map +0 -1
- package/dist/skills-banner.d.ts +0 -22
- package/dist/skills-banner.js +0 -41
- package/dist/skills-banner.js.map +0 -1
- package/dist/skills-update.d.ts +0 -88
- package/dist/skills-update.js +0 -392
- package/dist/skills-update.js.map +0 -1
- package/dist/todos.d.ts +0 -48
- package/dist/todos.js +0 -201
- package/dist/todos.js.map +0 -1
- package/web/dist/assets/agent-accounts-CFOBMVHc.js +0 -1
- package/web/dist/assets/alert-dialog-BrpNUwMt.js +0 -1
- package/web/dist/assets/button-C_rd7CPp.js +0 -43
- package/web/dist/assets/compare-variants-D6WXhvXA.js +0 -1
- package/web/dist/assets/diff-DrEARXTV.js +0 -3
- package/web/dist/assets/diff-controls-B1-j7nFg.js +0 -1
- package/web/dist/assets/diff-view-DvGLjdTk.js +0 -6
- package/web/dist/assets/dropdown-menu-BegOZFrj.js +0 -1
- package/web/dist/assets/format-DpNe3S0A.js +0 -1
- package/web/dist/assets/git-toolbar-Cw4ljmhB.js +0 -1
- package/web/dist/assets/github-CfV5sqL0.js +0 -1
- package/web/dist/assets/index-DgWWlOLy.js +0 -13
- package/web/dist/assets/index-fBFnuvxu.css +0 -1
- package/web/dist/assets/nav-row-styles-vp2JbhuJ.js +0 -1
- package/web/dist/assets/popover-BohP6WTx.js +0 -1
- package/web/dist/assets/preview-pane-connected-qTA5KNoJ.js +0 -3
- package/web/dist/assets/preview-state-vuMviq6q.js +0 -1
- package/web/dist/assets/prompt-templates-Cubdut_C.js +0 -15
- package/web/dist/assets/repo-git-Cf4t5PD0.js +0 -1
- package/web/dist/assets/run-diff-BpkUW37Z.js +0 -3
- package/web/dist/assets/run-header-68WHf9wV.js +0 -1
- package/web/dist/assets/run-header-8GObNx6F.css +0 -1
- package/web/dist/assets/search-x-I9Q8pgUa.js +0 -1
- package/web/dist/assets/skills-DFBiAuJG.js +0 -1
- package/web/dist/assets/skills-DiVIgKeU.js +0 -1
- package/web/dist/assets/square-terminal-B6RYYieR.js +0 -1
- package/web/dist/assets/status-dot-CqTJHSP9.js +0 -1
- package/web/dist/assets/tab-link-B07Hu4QX.js +0 -1
- package/web/dist/assets/task-changes--lQF6EYf.js +0 -1
- package/web/dist/assets/task-commits-Cx0qy4DN.js +0 -1
- package/web/dist/assets/task-files-D50s-gKW.js +0 -2
- package/web/dist/assets/task-github-item-DaqmSwYT.js +0 -1
- package/web/dist/assets/task-thread-BPQ64lui.js +0 -7
- package/web/dist/assets/task-thread-zNE2Q9E-.css +0 -1
- package/web/dist/assets/textarea-D20O4Pw0.js +0 -1
- package/web/dist/assets/thread-state-DWcFMrvb.js +0 -4
- package/web/dist/assets/use-hand-to-agent-state-BLIGmwbd.css +0 -1
- package/web/dist/assets/use-hand-to-agent-state-Cy9eyyfL.js +0 -1
- package/web/dist/assets/utils-JsL3ZsJf.js +0 -64
- package/web/dist/assets/workflows-jwG7uxqi.js +0 -11
- package/web/dist/assets/zoomable-image-BJJ64KGc.js +0 -1
package/README.md
CHANGED
|
@@ -1,26 +1,31 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<picture>
|
|
4
|
+
<source media="(prefers-color-scheme: dark)" srcset="packages/web/public/cezarion-mark-dark.svg">
|
|
5
|
+
<img src="packages/web/public/cezarion-mark-light.svg" alt="" width="96" height="96">
|
|
6
|
+
</picture>
|
|
7
|
+
|
|
8
|
+
# Cezarion
|
|
4
9
|
|
|
5
10
|
**Parallel coding agents orchestrator** — a local cockpit for running and
|
|
6
11
|
tracking AI coding-agent tasks in your repo.
|
|
7
12
|
|
|
8
|
-
Type a task, pick a workflow and an agent — **Claude Code, Codex, OpenCode, pi or
|
|
9
|
-
(OpenCode, pi and OMP experimental), or a mix of them per step** — and watch it work live: steps, tool calls,
|
|
13
|
+
Type a task, pick a workflow and an agent — **Claude Code, Codex, OpenCode, Cursor, pi or
|
|
14
|
+
OMP (OpenCode, pi and OMP experimental), or a mix of them per step** — and watch it work live: steps, tool calls,
|
|
10
15
|
tokens, diffs, in a browser cockpit that runs entirely on your machine.
|
|
11
16
|
Your CLI logins, your `gh`, your files. No accounts, no database server, no cloud.
|
|
12
17
|
|
|
13
18
|
🔥 **Fire and forget.** Queue a stack of autonomous coding and maintenance
|
|
14
|
-
tasks and let them run —
|
|
19
|
+
tasks and let them run — Cezarion orchestrates them across isolated worktrees,
|
|
15
20
|
in parallel. Flip the **Autonomous** flag
|
|
16
21
|
and a run never stops to ask; it just finishes. Leave it on a VPS and you get
|
|
17
22
|
a dev team that's *always on* — a mobile-friendly cockpit you can check from
|
|
18
23
|
your phone, working your backlog while you're away.
|
|
19
24
|
|
|
20
|
-
[A look inside](#a-look-inside) · [What
|
|
25
|
+
[A look inside](#a-look-inside) · [What Cezarion does best](#what-cezarion-does-best-) · [What it solves](#what-it-solves) · [Who it's for](#who-its-for) · [Quick start](#quick-start) · [How it works](#how-it-works) · [Core concepts](#core-concepts) · [Cockpit tour](#cockpit-tour) · [Agent backends](#coding-agent-backends) · [Remote access](#remote-access-host-cezarion-on-a-server)
|
|
21
26
|
|
|
22
27
|
[](LICENSE)
|
|
23
|
-

|
|
24
29
|

|
|
25
30
|

|
|
26
31
|

|
|
@@ -49,7 +54,7 @@ cache entry, so the same command uses the new version on its next launch.
|
|
|
49
54
|
Update preparation and recovery state is generated under
|
|
50
55
|
`~/.cezar/application-updates/` (or `CEZ_HOME`).
|
|
51
56
|
Pinned npx invocations, source checkouts, npm links, and hosted deployments use
|
|
52
|
-
their existing manual update paths.
|
|
57
|
+
their existing manual update paths. Cezarion holds its own installation lock and
|
|
53
58
|
npm's npx lock during promotion; a separate manual `npm install` does not honor
|
|
54
59
|
those locks, so avoid one while an update is preparing or restarting.
|
|
55
60
|
|
|
@@ -57,34 +62,52 @@ those locks, so avoid one while an update is preparing or restarting.
|
|
|
57
62
|
|
|
58
63
|
Click any thumbnail for the full-size screenshot.
|
|
59
64
|
|
|
60
|
-
| Orchestrate parallel agents | Watch a run live |
|
|
61
|
-
|
|
62
|
-
| [](docs/screenshots/task-view.png) | [](docs/screenshots/live-run.png) |
|
|
68
|
+
| *Run and queue tasks in isolated worktrees, with live status and resource use.* | *Every step, tool call, token and screenshot streams as it happens.* |
|
|
69
|
+
| **Workflow builder** | **GitHub, one click away** |
|
|
70
|
+
| [](docs/screenshots/workflow-builder.png) | [](docs/screenshots/github-issues.png) |
|
|
71
|
+
| *Stitch skills and shell checks into a reusable YAML chain.* | *Hand an issue to an agent through your own `gh` login.* |
|
|
67
72
|
|
|
68
73
|
---
|
|
69
74
|
|
|
70
|
-
##
|
|
75
|
+
## Generated inbox removed
|
|
76
|
+
|
|
77
|
+
The generated follow-up Inbox is removed in the next breaking minor release, **0.17.0**
|
|
78
|
+
(hearsay-tools/cezarion#1543). There is no deprecation window for this removal.
|
|
79
|
+
Remove `CEZ_FOLLOWUPS` from your launch environment; it no longer enables anything.
|
|
80
|
+
Agents receive no suggestion-generation instructions or usable `CEZ_TODOS_FILE`.
|
|
81
|
+
The todo API routes, `todos` SSE events, `capabilities.followups`, and task-creation
|
|
82
|
+
fields `generateFollowups` and `todoId` are removed. Remove those fields from scripts
|
|
83
|
+
and automation templates. Historical run records remain readable and resumable.
|
|
84
|
+
Upgrades leave `.ai/cezar/todos.json` untouched. If that file exists, export its original
|
|
85
|
+
contents from the project directory with:
|
|
86
|
+
```bash
|
|
87
|
+
cp .ai/cezar/todos.json ./cezar-followups-export.json
|
|
88
|
+
```
|
|
89
|
+
Old Inbox URLs show this guidance. Create an ordinary task with **New task**, or use
|
|
90
|
+
an issue-authoring skill to record work in your tracker. Task **Notes**, the rolling
|
|
91
|
+
handoff journal, **Continue**, live follow-up messages, and `cez worker inbox` remain
|
|
92
|
+
available.
|
|
93
|
+
## What Cezarion does best 🏆
|
|
71
94
|
|
|
72
95
|
Plenty of tools wrap a single coding agent in a nicer window — a "Codex GUI", a
|
|
73
|
-
conductor-style app, one-agent front-ends.
|
|
96
|
+
conductor-style app, one-agent front-ends. Cezarion's bet is different. Three things
|
|
74
97
|
it does better than any of them:
|
|
75
98
|
|
|
76
99
|
- 🪶 **Genuinely zero config.** `npx cezarion` in your repo and you're running —
|
|
77
100
|
no wizard, no API keys, no env vars, no schema, no database server. It rides the
|
|
78
|
-
`claude` / `codex` / `opencode` / `pi` / `omp` logins and the `gh` you already have, and every
|
|
101
|
+
`claude` / `codex` / `opencode` / `agent` (Cursor) / `pi` / `omp` logins and the `gh` you already have, and every
|
|
79
102
|
missing piece degrades gracefully instead of blocking you.
|
|
80
|
-
- 🖥️ **Built for a server (VPS mode).**
|
|
103
|
+
- 🖥️ **Built for a server (VPS mode).** Cezarion is made to live on a **VPS, cloud,
|
|
81
104
|
or dedicated box** as an always-on janitor for your repo — headless-first, with
|
|
82
105
|
a mobile-friendly cockpit you drive from anywhere. It's a coding server you can
|
|
83
106
|
actually watch, not a desktop app bolted onto one machine.
|
|
84
|
-
- 🔀 **Parallel + autonomous orchestration.** The real edge:
|
|
107
|
+
- 🔀 **Parallel + autonomous orchestration.** The real edge: Cezarion runs **many
|
|
85
108
|
agents at once** in isolated worktrees, **queues** the overflow, and pushes each
|
|
86
109
|
one **autonomously** through skill playbooks — fire-and-forget. This is exactly
|
|
87
|
-
what single-agent GUIs don't do well: they babysit one agent, while
|
|
110
|
+
what single-agent GUIs don't do well: they babysit one agent, while Cezarion
|
|
88
111
|
orchestrates a whole team and drains your backlog while you're away.
|
|
89
112
|
|
|
90
113
|
---
|
|
@@ -93,41 +116,48 @@ it does better than any of them:
|
|
|
93
116
|
|
|
94
117
|
Most "AI coding agent" tooling makes you choose between a **terminal** you can't
|
|
95
118
|
see into once it's running, and a **cloud product** that wants your API key, your
|
|
96
|
-
code on their servers, and an account.
|
|
119
|
+
code on their servers, and an account. Cezarion is the third option: the agents run
|
|
97
120
|
locally under *your* subscription, a cockpit shows you exactly what they're doing,
|
|
98
121
|
and an orchestrator keeps a whole queue of them moving.
|
|
99
122
|
|
|
100
123
|
- 👀 **No visibility into a running agent.** A headless `claude` run is a black box
|
|
101
|
-
until it finishes.
|
|
124
|
+
until it finishes. Cezarion streams every step — agent text, each tool call and
|
|
102
125
|
its result, tokens and cost per step — live, and keeps the full replay.
|
|
103
126
|
- 🧩 **One agent, one working tree, one thing at a time.** Kick off a second task and
|
|
104
|
-
it fights the first over your files.
|
|
127
|
+
it fights the first over your files. Cezarion runs each task in its **own git
|
|
105
128
|
worktree**, so two (or three) agents work in parallel without stepping on
|
|
106
129
|
each other — or on the branch you're editing.
|
|
107
|
-
- 🗂️ **A backlog that needs babysitting.** Queue a stack of tasks and
|
|
130
|
+
- 🗂️ **A backlog that needs babysitting.** Queue a stack of tasks and Cezarion
|
|
108
131
|
**orchestrates** them: it runs up to your parallel limit and holds the rest in
|
|
109
132
|
an ordered queue. Point it at a GitHub issue and it runs straight on that, so
|
|
110
|
-
working the tracker down stops being a manual chore.
|
|
111
|
-
|
|
112
|
-
next tasks too — one click each.
|
|
133
|
+
working the tracker down stops being a manual chore. Create ordinary tasks for
|
|
134
|
+
the work you choose to run next.
|
|
113
135
|
- 🤖 **"Autonomous" means you still have to sit there.** Flip the **Autonomous**
|
|
114
136
|
flag and a run never parks to ask — it keeps going until the task is done. Pair
|
|
115
137
|
it with a **skill** (a Markdown playbook) and you've got fire-and-forget
|
|
116
138
|
automation: hand off "fix this", "upgrade that", "triage these" and walk away.
|
|
117
|
-
- ✅ **The agent finishes and you have to trust it.**
|
|
118
|
-
|
|
119
|
-
|
|
139
|
+
- ✅ **The agent finishes and you have to trust it.** Every task's diff stays on
|
|
140
|
+
its own branch: inspect it, send notes back into the same session, or push a
|
|
141
|
+
**draft PR**. Auto merge is off by default; each task can opt in to merge after Done.
|
|
142
|
+
Turn on the optional **review gate**
|
|
143
|
+
(`CEZ_REVIEW_GATE=1` or Settings → Agents) and a finished run with changes
|
|
144
|
+
waits in `review` for you.
|
|
120
145
|
- ♻️ **Losing a session when it fails.** Every run records its `claude` session id.
|
|
121
146
|
Take it over interactively in one click (`claude --resume <id>`), or continue it
|
|
122
|
-
in-process from the cockpit.
|
|
123
|
-
|
|
124
|
-
|
|
147
|
+
in-process from the cockpit. After a failure, Continue tells the agent which
|
|
148
|
+
step failed and gives its saved error before your message. Restart recovery
|
|
149
|
+
also explains the restart when replaying a saved message. Background commands
|
|
150
|
+
may have stopped; the agent is told to verify their state before restarting them.
|
|
151
|
+
- 🔀 **Locked into one agent vendor.** Most tools wed you to a single CLI. Cezarion
|
|
152
|
+
drives **Claude Code, Codex, OpenCode, Cursor, pi and OMP** (OpenCode, pi and OMP
|
|
153
|
+
experimental) through one runner seam — set a
|
|
125
154
|
default, pick a backend per task, or mix them inside one workflow (implement
|
|
126
|
-
with one agent, review with another) — and through **OpenCode**
|
|
127
|
-
a run at **open-source or local models**, not just the
|
|
155
|
+
with one agent, review with another) — and through **OpenCode**, **pi** or
|
|
156
|
+
**OMP** you can point a run at **open-source or local models**, not just the
|
|
157
|
+
big vendors. See
|
|
128
158
|
[Agent backends](#coding-agent-backends).
|
|
129
159
|
- 🖥️ **Close the laptop and the work stops.** A local agent only runs while your
|
|
130
|
-
machine is on and awake. Put
|
|
160
|
+
machine is on and awake. Put Cezarion on a **VPS, cloud box, or dedicated server**
|
|
131
161
|
and the cockpit becomes the GUI for an **always-on AI coding team** — kick off,
|
|
132
162
|
watch and steer tasks from your laptop or **phone**, on the train or between
|
|
133
163
|
meetings, while the agents keep grinding through the backlog back on the server.
|
|
@@ -143,7 +173,7 @@ and an orchestrator keeps a whole queue of them moving.
|
|
|
143
173
|
handing their code and keys to a SaaS — the agent runs on your subscription,
|
|
144
174
|
on your machine.
|
|
145
175
|
- **`claude` CLI power users** who love headless runs but want to *see* them,
|
|
146
|
-
|
|
176
|
+
and review a diff before it lands.
|
|
147
177
|
- **Anyone with a backlog** who'd rather queue three tasks into isolated worktrees
|
|
148
178
|
and pick the winners than babysit one terminal.
|
|
149
179
|
- **Teams with shared conventions** who want their playbooks (skills) pulled from
|
|
@@ -153,15 +183,20 @@ and an orchestrator keeps a whole queue of them moving.
|
|
|
153
183
|
|
|
154
184
|
## Quick start
|
|
155
185
|
|
|
156
|
-
**Prerequisites:** Node 24.
|
|
186
|
+
**Prerequisites:** Node 24.21.0+, at least one logged-in agent CLI — the
|
|
157
187
|
[`claude` CLI](https://github.com/anthropics/claude-code) (Pro/Max subscription),
|
|
158
|
-
the [`codex` CLI](https://github.com/openai/codex),
|
|
159
|
-
[OpenCode](https://opencode.ai)
|
|
188
|
+
the [`codex` CLI](https://github.com/openai/codex),
|
|
189
|
+
[OpenCode](https://opencode.ai), the
|
|
190
|
+
[Cursor CLI](https://cursor.com/docs/cli/installation) (`agent`),
|
|
191
|
+
[pi](https://github.com/badlogic/pi-mono), or
|
|
192
|
+
[OMP](https://github.com/can1357/oh-my-pi) — and, optionally, `git` and the
|
|
193
|
+
`gh` CLI.
|
|
160
194
|
|
|
161
195
|
```bash
|
|
162
196
|
cd your-repo
|
|
163
197
|
npx cezarion # start the cockpit for the current repo
|
|
164
198
|
# or: npx @wjarka/cezarion
|
|
199
|
+
|
|
165
200
|
```
|
|
166
201
|
|
|
167
202
|
The cockpit opens at `http://localhost:4321`. If the requested port is occupied,
|
|
@@ -181,7 +216,7 @@ npx cezarion init # scaffold .ai/ceza
|
|
|
181
216
|
```
|
|
182
217
|
|
|
183
218
|
Both the `cezarion` and `cez` commands are installed, so once it's on your PATH you
|
|
184
|
-
can run either. No API key is ever used —
|
|
219
|
+
can run either. No API key is ever used — Cezarion shells out to whichever agent
|
|
185
220
|
CLIs you are already logged into, `claude` by default.
|
|
186
221
|
|
|
187
222
|
> **Contributing?** [Local development](#local-development) shows how to get a
|
|
@@ -190,9 +225,9 @@ CLIs you are already logged into, `claude` by default.
|
|
|
190
225
|
|
|
191
226
|
> **Just kicking the tires?** Set `CEZ_DRY_RUN=1` to run against a bundled mock
|
|
192
227
|
> instead of the real CLI — the whole cockpit works with no `claude` login, so
|
|
193
|
-
> you can explore runs
|
|
228
|
+
> you can explore runs and diffs offline.
|
|
194
229
|
|
|
195
|
-
### Nightly builds — help us shape
|
|
230
|
+
### Nightly builds — help us shape Cezarion 🌙
|
|
196
231
|
|
|
197
232
|
Every night we publish the trunk to npm, so the features landing in the next
|
|
198
233
|
release are one command away:
|
|
@@ -201,10 +236,10 @@ release are one command away:
|
|
|
201
236
|
npx cezarion@nightly # everything merged as of last night
|
|
202
237
|
```
|
|
203
238
|
|
|
204
|
-
**Come build this with us.**
|
|
239
|
+
**Come build this with us.** Cezarion is shaped by the people who run it on real
|
|
205
240
|
repos: if you try a nightly and something feels wrong — a workflow that stalls, a
|
|
206
241
|
diff that reads badly, a runner that should exist — [open an
|
|
207
|
-
issue](https://github.com/
|
|
242
|
+
issue](https://github.com/hearsay-tools/cezarion/issues) and tell us. That feedback,
|
|
208
243
|
early, is worth more than a bug report six weeks after a release, and it is how
|
|
209
244
|
most of the features here got their final shape.
|
|
210
245
|
|
|
@@ -212,9 +247,9 @@ most of the features here got their final shape.
|
|
|
212
247
|
packaged-CLI e2e — the same gate a release runs) but it is *not* a release: it
|
|
213
248
|
can be rough, a flag or a screen may change under you, and something occasionally
|
|
214
249
|
breaks in a way no test caught. Nothing is at risk beyond your patience — every
|
|
215
|
-
task runs in its own git worktree and
|
|
250
|
+
task runs in its own git worktree and auto merge is off by default — but if you need a
|
|
216
251
|
boring day, stay on the stable release. Pin a nightly you liked with its exact
|
|
217
|
-
version (`npx cezarion
|
|
252
|
+
version (`npx cezarion@<nightly-version>` — the cockpit prints the
|
|
218
253
|
version it booted, and the date in it tells you how old the build is), and drop
|
|
219
254
|
back to stable any time with a plain `npx cezarion`.
|
|
220
255
|
|
|
@@ -238,11 +273,12 @@ resolves to the latest stable release.
|
|
|
238
273
|
|
|
239
274
|
## How it works
|
|
240
275
|
|
|
241
|
-
You describe a task.
|
|
276
|
+
You describe a task. Cezarion runs it as a **workflow** — an ordered list of agent
|
|
242
277
|
steps and shell checks — shelling out to your locally installed agent CLI
|
|
243
|
-
(Claude Code by default; Codex and
|
|
244
|
-
or per step). Each task gets its own git worktree; the
|
|
245
|
-
event live and
|
|
278
|
+
(Claude Code by default; Codex, OpenCode, Cursor, pi and OMP are drop-in
|
|
279
|
+
alternatives, per task or per step). Each task gets its own git worktree; the
|
|
280
|
+
cockpit streams every event live and leaves the diff on the task's branch for
|
|
281
|
+
you to inspect.
|
|
246
282
|
|
|
247
283
|
```
|
|
248
284
|
you type a task
|
|
@@ -253,11 +289,12 @@ event live and parks the run at a review gate when there's a diff to inspect.
|
|
|
253
289
|
└─────────────┘
|
|
254
290
|
│
|
|
255
291
|
▼
|
|
256
|
-
┌──────────────────────────────┐
|
|
257
|
-
│ git worktree per task │ │ agent CLI (your login)
|
|
258
|
-
│ (isolated branch, parallel) │◄───►│
|
|
259
|
-
└──────────────────────────────┘ │
|
|
260
|
-
│
|
|
292
|
+
┌──────────────────────────────┐ ┌────────────────────────────────┐
|
|
293
|
+
│ git worktree per task │ │ agent CLI (your login) │
|
|
294
|
+
│ (isolated branch, parallel) │◄───►│ claude · codex · opencode · │
|
|
295
|
+
└──────────────────────────────┘ │ cursor · pi · omp │
|
|
296
|
+
│ │ Bash open · no prompts │
|
|
297
|
+
│ └────────────────────────────────┘
|
|
261
298
|
│ agent text · tool calls · tool results · tokens · cost
|
|
262
299
|
▼
|
|
263
300
|
┌─────────────┐ SSE (replay + live) ┌──────────────────────────┐
|
|
@@ -266,13 +303,16 @@ event live and parks the run at a review gate when there's a diff to inspect.
|
|
|
266
303
|
│ ·Markdown │ │ Skills · Workflows │
|
|
267
304
|
└─────────────┘ └──────────────────────────┘
|
|
268
305
|
│
|
|
269
|
-
|
|
270
|
-
|
|
306
|
+
read the diff → send notes back ·
|
|
307
|
+
draft PR · finish
|
|
271
308
|
```
|
|
272
309
|
|
|
273
310
|
When a check fails, the workflow can loop back to an earlier step (bounded by
|
|
274
|
-
`max`) with the failing output appended to the retried agent's prompt.
|
|
275
|
-
|
|
311
|
+
`max`) with the failing output appended to the retried agent's prompt. By default,
|
|
312
|
+
a finished run's changes stay on its branch until you act on them. A task can opt
|
|
313
|
+
into merging its PR after Done, subject to current-head CI and GitHub rules.
|
|
314
|
+
With the optional review gate on, a run with changes rests in `review` instead
|
|
315
|
+
of `done`.
|
|
276
316
|
|
|
277
317
|
---
|
|
278
318
|
|
|
@@ -282,13 +322,14 @@ Three words, no jargon — **task**, **skill**, **chain**:
|
|
|
282
322
|
|
|
283
323
|
- 📋 **Tasks** are the unit of work. Every task is a **run**: `queued → running →
|
|
284
324
|
review / done / failed / cancelled`, with a live event log, per-step token and
|
|
285
|
-
cost usage, cancel/delete, and — for anything with a diff — a
|
|
325
|
+
cost usage, cancel/delete, and — for anything with a diff — a reviewable branch. Attach
|
|
286
326
|
screenshots, PDFs, `.txt` or `.md` files to the task (paperclip, ⌘V or drag-drop;
|
|
287
327
|
the agent gets each one as a real file on disk), or send follow-up messages into
|
|
288
328
|
the live session while it works.
|
|
289
329
|
- 📖 **Skills** are Markdown playbooks. Drop them in `.ai/skills/` or
|
|
290
|
-
`.ai/cezar/skills/`, or pull them from a shared **team skills repo**
|
|
291
|
-
git clone cached globally in `~/.cache/cez/`).
|
|
330
|
+
`.ai/cezar/skills/`, or pull them from a shared **team skills repo** you name
|
|
331
|
+
in `skillsRepos` (a bare git clone cached globally in `~/.cache/cez/`). There is no
|
|
332
|
+
default team repo, and each team skill has its own on/off switch per project. A workflow step references one by
|
|
292
333
|
`skill: <name>` and its body becomes the agent's extra system prompt — so you
|
|
293
334
|
shape *how* the agent reasons without touching code.
|
|
294
335
|
- 🔗 **Chains (workflows)** stitch steps into a pipeline: agent steps plus shell
|
|
@@ -297,9 +338,9 @@ Three words, no jargon — **task**, **skill**, **chain**:
|
|
|
297
338
|
AI draft a chain for your task that you review, trim and start. The built-in
|
|
298
339
|
`quick-task` (one agent step) works with zero setup.
|
|
299
340
|
|
|
300
|
-
|
|
341
|
+
The moves that make the cockpit worth the browser tab:
|
|
301
342
|
|
|
302
|
-
- 🗃️ **Queue + orchestration.** Start as many tasks as you like:
|
|
343
|
+
- 🗃️ **Queue + orchestration.** Start as many tasks as you like: Cezarion runs up to
|
|
303
344
|
`maxParallel` at once across every project (default **2**; a non-git directory
|
|
304
345
|
always runs one) and
|
|
305
346
|
holds the rest in a FIFO queue with visible positions (`#1`, `#2`, …). Cancel a
|
|
@@ -312,38 +353,44 @@ Five moves that make the cockpit worth the browser tab:
|
|
|
312
353
|
is *paused* — freeing its tree so the queue keeps advancing — and resumes on
|
|
313
354
|
demand. Event logs are append-only NDJSON and streamed rather than re-serialized,
|
|
314
355
|
and live UI deltas are coalesced so they never hit disk.
|
|
315
|
-
- 🪞 **Parallel variants (×2 / ×3).** Run the same task as competing agents in
|
|
316
|
-
separate worktrees, then compare their diffs side by side and **pick** one —
|
|
317
|
-
the losers are archived and their worktrees cleaned up.
|
|
318
356
|
- 🧹 **Bounded worktree disk.** Each task runs in its own full checkout, so a busy
|
|
319
|
-
cockpit would otherwise grow without limit.
|
|
357
|
+
cockpit would otherwise grow without limit. Cezarion keeps only the last
|
|
320
358
|
`worktreeRetention` **finished** worktrees on disk (default **10**; `0` =
|
|
321
359
|
unlimited) and reclaims the rest — directory only, the `cez/<id8>` branch is
|
|
322
360
|
always kept, so the work stays recoverable. Settings → Resources shows every
|
|
323
361
|
worktree's disk use with per-row delete and a **Reclaim now** button.
|
|
324
|
-
- 🛡️ **
|
|
325
|
-
|
|
326
|
-
|
|
362
|
+
- 🛡️ **You control merging.** Read a finished run's diff, type notes that go
|
|
363
|
+
straight back into the agent's session, or push a `gh pr create --draft`.
|
|
364
|
+
Auto merge is off by default and requires a task to opt in. The **review gate** is optional (`CEZ_REVIEW_GATE=1`, or
|
|
365
|
+
Settings → Agents): with it on, a successful run with changes parks in `review`
|
|
366
|
+
until you accept it. Autonomous runs always skip it.
|
|
367
|
+
- 🗂️ **Every project in one cockpit.** One `cez serve` hosts every repo you
|
|
368
|
+
register; the desktop rail switches between them, and **All tasks** shows every
|
|
369
|
+
project's tasks in one table. See
|
|
370
|
+
[Multiple projects, one cockpit](#multiple-projects-one-cockpit).
|
|
371
|
+
- 👥 **Owned workers (opt-in).** With `CEZ_DELEGATION=1`, a task's agent can spawn
|
|
372
|
+
its own tracked workers — on the same or another runner — message them, and
|
|
373
|
+
collect their diffs; you still review the result. See
|
|
374
|
+
[Owned workers](#owned-workers-opt-in).
|
|
327
375
|
- 📱 **Runs on your coding server, drives from your pocket.** The cockpit is a
|
|
328
|
-
responsive web app streaming over SSE, so the box running
|
|
376
|
+
responsive web app streaming over SSE, so the box running Cezarion can be a
|
|
329
377
|
**VPS, cloud, or dedicated server** you never sit in front of. Point a browser
|
|
330
378
|
— laptop or **phone** — at it and run an **always-on coding team** on the move:
|
|
331
|
-
start tasks, watch them live, and
|
|
379
|
+
start tasks, watch them live, and review their diffs from anywhere.
|
|
332
380
|
|
|
333
381
|
---
|
|
334
382
|
|
|
335
383
|
## Cockpit tour
|
|
336
384
|
|
|
337
|
-
|
|
385
|
+
Task and project views share one browser window and live updates over Server-Sent Events:
|
|
338
386
|
|
|
339
387
|
| View | What's in it |
|
|
340
388
|
|---|---|
|
|
341
389
|
| **Tasks** | Every task with its status, live event stream (agent text · tool calls · tool results · pasted/generated screenshots and file attachments), tokens and cost. Continue, cancel, open in terminal (`claude --resume`), review the diff, or push a draft PR. |
|
|
342
390
|
| **All tasks** | Every *registered project's* tasks in one table, filtered and grouped by tag, project, status or workflow — see [Grouping connected repositories](#grouping-connected-repositories-tags-and-the-all-tasks-page). Appears once a second project is registered. |
|
|
343
|
-
| **Inbox** | **Opt-in** (`CEZ_FOLLOWUPS=1`; hidden by default). Follow-ups an agent left behind (`todos.json`) — one click turns a suggestion into the next task, pre-wired to its suggested skill. Off, agents are never asked to leave follow-ups; each task's own **Notes** handoff journal is unaffected. |
|
|
344
391
|
| **Git** | Branch, working-tree status, diff vs HEAD, recent commits (click one for its inline patch + GitHub link), and the configurable base branch that worktrees fork from and PRs target. |
|
|
345
392
|
| **GitHub** | Open issues and PRs of the repo's origin, read through your logged-in `gh`. Hand an issue straight to the agent — pick a workflow and skills, one click runs it. |
|
|
346
|
-
| **Skills** | Local skills plus
|
|
393
|
+
| **Skills** | Local skills plus any team skills repos you configured, each team skill with a per-project switch, and a rendered body + prompt preview. Refresh pulls the latest from the remote. |
|
|
347
394
|
| **Workflows** | Build a chain by drag-ordering skills, save it as portable YAML, import/export, or delete. Built-ins always come back. |
|
|
348
395
|
| **Settings** | Appearance (dark/light theme, accent, density), agent backends, notifications, and the skills catalog. |
|
|
349
396
|
|
|
@@ -363,7 +410,7 @@ bypasses the server cache immediately and refreshes the selected thread too.
|
|
|
363
410
|
## Multiple projects, one cockpit
|
|
364
411
|
|
|
365
412
|
One `cez serve` hosts **every repo you work in**, not just the one you started
|
|
366
|
-
it in. Each repo
|
|
413
|
+
it in. Each repo Cezarion boots in registers itself in a per-user registry at
|
|
367
414
|
`~/.cezar/config.json` — the workspace file that also holds the global knobs
|
|
368
415
|
(the parallel cap, the memory ceiling, the browse root, and the checkout root). Nothing is added to
|
|
369
416
|
the repo: per-project state stays exactly where it was, in that repo's
|
|
@@ -376,7 +423,7 @@ Every view is project-scoped:
|
|
|
376
423
|
```
|
|
377
424
|
|
|
378
425
|
`<projectId>` is a slug derived from the folder name (`my-app`, then `my-app-2`
|
|
379
|
-
on a collision), and `/p/default/…` always means the project
|
|
426
|
+
on a collision), and `/p/default/…` always means the project Cezarion was started
|
|
380
427
|
in. The desktop rail selects the project. Its sidebar shows the project header,
|
|
381
428
|
view tabs and task list, ordered **Needs you → Finished → Working**.
|
|
382
429
|
Pins stay first within their status section and do not spend the default ten-row
|
|
@@ -396,6 +443,12 @@ composer names the project it will run in.
|
|
|
396
443
|
**Adding a project** — the **+** button on the desktop rail (or in the mobile
|
|
397
444
|
navigation drawer):
|
|
398
445
|
|
|
446
|
+
- ✨ **New project…** creates a git repository with one empty commit in the checkout
|
|
447
|
+
root and registers it. Optionally — only when you switch it on — it also creates a
|
|
448
|
+
**private** GitHub repository under your account or one of your organizations, empty or
|
|
449
|
+
from a GitHub template. If GitHub setup fails after the repository exists, the local
|
|
450
|
+
project is kept and the dialog shows the command that finishes it. A hosted cockpit
|
|
451
|
+
creates local projects only.
|
|
399
452
|
- 📂 **Open local folder…** browses from the configured browse root
|
|
400
453
|
(**Settings → Projects**, default `~/`) in a folder picker and
|
|
401
454
|
registers the folder you pick.
|
|
@@ -410,7 +463,7 @@ navigation drawer):
|
|
|
410
463
|
|
|
411
464
|
Removing a project (**Settings → Projects**) drops the registry entry only — the
|
|
412
465
|
repo and its `.ai/cezar/` are never touched, so re-adding it later finds all its
|
|
413
|
-
tasks intact. The project
|
|
466
|
+
tasks intact. The project Cezarion is currently serving can't be removed: it
|
|
414
467
|
re-registers itself at the next start.
|
|
415
468
|
|
|
416
469
|
**From the terminal** — the same registry, no cockpit required (handy over ssh):
|
|
@@ -456,9 +509,16 @@ list, detail pane and Hand to agent action stay in the main area. On mobile, the
|
|
|
456
509
|
GitHub tab opens the filter screen; selecting a row opens its list.
|
|
457
510
|
|
|
458
511
|
Has a task and No task yet use issue references from this project's non-archived
|
|
459
|
-
tasks, excluding references to other repositories.
|
|
460
|
-
|
|
461
|
-
|
|
512
|
+
tasks, excluding references to other repositories. The list loads 50 rows at a time
|
|
513
|
+
and loads the next page as you scroll toward its end. The tabs and All open show
|
|
514
|
+
GitHub's exact open totals. A preset count shows a `+` while more pages remain
|
|
515
|
+
unloaded, and a search count shows one when the search reaches its result limit;
|
|
516
|
+
an unavailable count is not shown as zero. Filtering by search, label, assignee or
|
|
517
|
+
board narrows the loaded rows; while it is on, the next page loads only when you press
|
|
518
|
+
Load more.
|
|
519
|
+
|
|
520
|
+
The `body` field on `GET /api/v1/github` list rows is deprecated. It is still sent,
|
|
521
|
+
and a later minor removes it; read an item's body from the comments route's `detail`. Views without their own navigation still show tasks in the sidebar.
|
|
462
522
|
|
|
463
523
|
Open an issue to see **Linked tasks (N)** beneath its heading. Each row opens a task
|
|
464
524
|
in the current project and shows its title, status and date, newest first. Archived
|
|
@@ -525,7 +585,7 @@ is that project's own Tasks page, which is a better version of the same answer
|
|
|
525
585
|
(live updates, the full column set, the composer). So picking a project *leaves*
|
|
526
586
|
for it rather than turning the global view into a worse local one.
|
|
527
587
|
|
|
528
|
-
Nothing else in
|
|
588
|
+
Nothing else in Cezarion reads tags, on purpose: a tag is a lens, not a permission,
|
|
529
589
|
a queue or a routing rule. Removing one changes what you see and nothing else.
|
|
530
590
|
|
|
531
591
|
> The page reads a workspace-wide index capped at the newest 200 tasks per
|
|
@@ -534,7 +594,7 @@ a queue or a routing rule. Removing one changes what you see and nothing else.
|
|
|
534
594
|
> Tasks page.
|
|
535
595
|
|
|
536
596
|
**Old page URLs keep working.** Every unprefixed page path — `/`, `/tasks/<id>`,
|
|
537
|
-
`/settings` — still answers, bound to the project
|
|
597
|
+
`/settings` — still answers, bound to the project Cezarion was started in; the
|
|
538
598
|
cockpit redirects flat paths to their `/p/<boot>/…` twin, so existing bookmarks
|
|
539
599
|
and bookmarklets need no change. The HTTP API is the exception: it moved to
|
|
540
600
|
`/api/v1/…` (see the CHANGELOG), so a script that calls it needs the extra
|
|
@@ -547,23 +607,70 @@ segment.
|
|
|
547
607
|
|
|
548
608
|
---
|
|
549
609
|
|
|
550
|
-
## Waiting for PR checks
|
|
551
|
-
|
|
552
|
-
An agent
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
610
|
+
## Waiting for PR checks, merges and timers
|
|
611
|
+
|
|
612
|
+
An agent waits on something outside its turn with `cezar_wait`. With `kind: "pr"` and
|
|
613
|
+
a GitHub PR URL in `pr`, Cezarion watches the PR outside the model: its checks
|
|
614
|
+
(`until: "checks"`, the default) or its merge (`until: "merge"`). The optional
|
|
615
|
+
`timeout_seconds` defaults to 1,800 and accepts 1–7,200. With `kind: "timer"`,
|
|
616
|
+
`seconds` (60–7,200) and an optional `note`, Cezarion wakes the agent at that time and
|
|
617
|
+
hands the note back. No authored configuration or worker delegation permission is
|
|
618
|
+
needed. A PR wait requires `gh`, access to the repository, and a supported GitHub
|
|
619
|
+
host; GitHub Enterprise hosts must already be recognized by the forge/auth
|
|
620
|
+
configuration. Tool startup itself makes no GitHub request. With **Monitoring
|
|
621
|
+
wake-up** turned off in **Settings → Resources**, `cezar_wait` refuses a timer
|
|
622
|
+
(`timers_disabled`); once the automatic-wake budget of 40 is spent, it refuses one
|
|
623
|
+
with `wake_budget_spent`, and a run with nothing else to wait on waits for you. The
|
|
624
|
+
budget is kept on the task, so a cockpit restart keeps it; a message from you or a
|
|
625
|
+
Continue starts it again.
|
|
626
|
+
|
|
627
|
+
A CI wait stays pending while any GitHub Actions workflow run on its captured
|
|
628
|
+
head commit is incomplete, even when a rerun temporarily hides that run's checks.
|
|
629
|
+
It checks again every 30 seconds within the original deadline. Once those runs
|
|
630
|
+
complete, it reads the checks again to decide the result. A result describes what
|
|
631
|
+
GitHub reported; it does not predict workflows that have not appeared yet or grant
|
|
632
|
+
merge approval.
|
|
633
|
+
|
|
634
|
+
A merge wait (`until: "merge"`, hearsay-tools/cezarion#1425) reads the PR's state at
|
|
635
|
+
once and then every 30 seconds within its deadline. It ends as `merged` only when
|
|
636
|
+
GitHub reports the PR merged, with the merge time and merge commit when GitHub gives
|
|
637
|
+
them, and as `closed` when the PR closed without merge. Green checks keep it open,
|
|
638
|
+
and so does a new head commit. A merge wait holds none of the four watcher slots, so
|
|
639
|
+
long merge waits never delay a checks wait. By default both targets also end as
|
|
640
|
+
`conflicting` when the PR has merge conflicts. Set `wake_on_conflict: false` when the
|
|
641
|
+
agent watches a PR it does not own, such as another agent's PR its work depends on:
|
|
642
|
+
it cannot resolve those conflicts. With `until: "checks"`, GitHub often runs no
|
|
643
|
+
workflows on a conflicting PR, so such a wait usually ends as `no_checks` or at its
|
|
644
|
+
deadline. A checks wait and a merge wait on the same PR are two waits.
|
|
645
|
+
|
|
646
|
+
The agent asks you with `cezar_ask`, a card of one to four questions in the ask
|
|
647
|
+
format. A question with two to four options shows them as choices; a question without
|
|
648
|
+
options is open, and the card shows a text box for your answer. The task reads Needs
|
|
649
|
+
you once the turn ends, and your next message answers it. `cezar_wait` takes PR waits,
|
|
650
|
+
worker waits and timers only, and points an agent that asks it for a human wait to `cezar_ask`. A run
|
|
651
|
+
has one question to you at a time, and the agent cannot cancel it once you have seen
|
|
652
|
+
it. The ask-marker card, a native question and `CEZ:MONITORING` with re-checks off
|
|
653
|
+
open the same kind of wait. When the work is
|
|
654
|
+
done and verified, the agent calls `cezar_done` (an optional `summary`), and the task
|
|
655
|
+
finishes at the end of that turn: its open waits are cancelled and the summary is
|
|
656
|
+
written as a note. `cezar_done` refuses while owned workers are live or uncollected,
|
|
657
|
+
a worker question is unanswered, a question to you is still pending, or the step is not
|
|
658
|
+
the workflow's last, and says what to do first. The `CEZ:DONE` line keeps working and finishes the same way. An
|
|
659
|
+
autonomous task does not wait for you until its automatic-wake budget is spent.
|
|
660
|
+
|
|
661
|
+
A run can have several waits open at once, up to 16. Each answer carries the
|
|
662
|
+
wait's id, its absolute deadline and the list of waits still open, and
|
|
663
|
+
`cezar_cancel_wait` closes one by its id. The agent ends its turn to wait, with no
|
|
664
|
+
marker required. The run is then `waiting`, and the pill reads **waiting for CI**,
|
|
665
|
+
**waiting for merge** or **monitoring** rather than Needs you. The header lists every open wait: **Waiting
|
|
666
|
+
for CI — owner/repo#N** or **Waiting for merge — owner/repo#N** with a PR link and the deadline, or **Next automatic check**
|
|
667
|
+
with its time and note. **CI result ready — waiting for capacity** means the
|
|
668
|
+
observation is owed to the agent and its wake turn has not started yet. A run parked
|
|
669
|
+
on CI or a timer keeps its agent slot, a monitoring slot when one is free, so the
|
|
670
|
+
wake usually starts at once. The older `CEZ:MONITORING` line and Claude's
|
|
671
|
+
`ScheduleWakeup` open a timer in the same list.
|
|
672
|
+
|
|
673
|
+
Cezarion reports passed, failed, cancelled or skipped checks, no checks, changed head,
|
|
567
674
|
timeout or an operational error. It watches the registered commit: a new PR head
|
|
568
675
|
is reported separately, and the agent decides whether to wait again. The first
|
|
569
676
|
observation runs immediately. Later check-status and PR-head polls run every 30
|
|
@@ -571,9 +678,22 @@ seconds, and no setting changes that interval. Four watchers run concurrently;
|
|
|
571
678
|
queued waits retain their original deadline. Results are bounded
|
|
572
679
|
observations, not merge approval or evidence that every expected workflow appeared.
|
|
573
680
|
The agent still decides its next action; CI success never completes the task or
|
|
574
|
-
accepts review. A
|
|
575
|
-
|
|
576
|
-
|
|
681
|
+
accepts review. A wait ends only when its own result arrives, its deadline passes,
|
|
682
|
+
or someone cancels it: the agent with `cezar_cancel_wait`, or Cezarion when the task
|
|
683
|
+
is stopped, finished, cancelled or deleted. A human message wakes the agent without
|
|
684
|
+
closing any wait, and every delivered turn ends with a list of the waits still open.
|
|
685
|
+
CI never answers a pending human question. If the agent's session fails or closes while a
|
|
686
|
+
result is owed, Cezarion retries the delivery after 15 and then 30 seconds; a third
|
|
687
|
+
failure marks the task failed and keeps the result. Continue delivers it, and Stop
|
|
688
|
+
discards it and leaves the task failed.
|
|
689
|
+
Controller recovery can replay an
|
|
690
|
+
observation after an ambiguous delivery checkpoint, identified by its stable
|
|
691
|
+
lifecycle input ID.
|
|
692
|
+
|
|
693
|
+
The deprecated `cezar_wait_for_ci` tool was removed (hearsay-tools/cezarion#1236):
|
|
694
|
+
call `cezar_wait` with `kind: "pr"` instead. `kind: "ci"` itself was replaced by
|
|
695
|
+
`kind: "pr"` (hearsay-tools/cezarion#1425) and is refused with a message that names
|
|
696
|
+
the new spelling.
|
|
577
697
|
|
|
578
698
|
The adapters are bundled for Claude (including `claude-cli`), Codex, OpenCode,
|
|
579
699
|
Cursor, Pi and OMP. Internal socket/capability environment values are runtime wiring,
|
|
@@ -594,7 +714,33 @@ Both commands return JSON. `runners` lists connection status (`connected`, `disc
|
|
|
594
714
|
|
|
595
715
|
For operators, the command finds the running cockpit for the current checkout; `--repo`, `--url`, and `CEZ_URL` work as they do for `cez task`. A missing cockpit returns an error and never starts a server. Inside a parent delegation session, the same command uses that session's authenticated controller, including headless runs. It rejects `--url` and `--repo` in that context and never falls back to a public cockpit after an authentication failure. Owned workers cannot use the private discovery route.
|
|
596
716
|
|
|
597
|
-
The catalog describes host default accounts, not every named account or the selections permitted by a task's model locks and workflow pins.
|
|
717
|
+
The catalog describes host default accounts, not every named account or the selections permitted by a task's model locks and workflow pins.
|
|
718
|
+
|
|
719
|
+
## Parallel variant removal
|
|
720
|
+
|
|
721
|
+
Parallel variants (×2/×3) are removed in the next breaking minor release (0.17).
|
|
722
|
+
The owner chose immediate removal without a deprecation window
|
|
723
|
+
(hearsay-tools/cezarion#1542). The composer starts one task. `POST /api/v1/runs`
|
|
724
|
+
refuses `variants: 2` or `3` with `400`; it never turns them into one candidate.
|
|
725
|
+
The old `variants: 1` spelling still means an ordinary run.
|
|
726
|
+
|
|
727
|
+
The compare page and its group routes are retired too (hearsay-tools/cezarion#1760).
|
|
728
|
+
Historical `groupId` and `variant` fields remain stored, and old variant runs list as
|
|
729
|
+
ordinary tasks. Old `/compare/:groupId` links, including project-scoped links, open the
|
|
730
|
+
task list. No retirement migration deletes runs, branches or worktrees;
|
|
731
|
+
normal retention and explicit cleanup still apply. Saved multi-candidate drafts and
|
|
732
|
+
automations offer **Use one task** before saving or launching. A saved automation with
|
|
733
|
+
`task.variants > 1` reports an error on launch; edit it to remove that field or set it to `1`.
|
|
734
|
+
|
|
735
|
+
For explicit comparison, ask a task: “Spawn two owned workers from the same committed
|
|
736
|
+
baseline. Try a minimal change and a structural approach. Collect both results and
|
|
737
|
+
compare their diffs. Show me the commits to choose from before integration and cleanup.”
|
|
738
|
+
The parent uses `cez worker spawn`, `collect` and `diff`, reviews the chosen commits,
|
|
739
|
+
integrates them with Git, then uses `cez worker destroy` for verified cleanup. Read
|
|
740
|
+
`diffSnapshot` from an available collection's JSON file rather than applying that file
|
|
741
|
+
as a patch. Collect each worker's latest settled revision before finishing. Owned workers
|
|
742
|
+
keep their ownership, isolation, resource limits and Git cleanup safeguards. There is
|
|
743
|
+
no one-click comparison page, automatic winner selection or automatic loser cleanup.
|
|
598
744
|
|
|
599
745
|
## Owned workers (opt-in)
|
|
600
746
|
|
|
@@ -604,8 +750,9 @@ The provisioned command has these forms (the session instructions supply the abs
|
|
|
604
750
|
|
|
605
751
|
```sh
|
|
606
752
|
cez worker spawn --baseline parent-head --request-id <UUID> 'Implement the assigned change'
|
|
607
|
-
cez worker spawn --baseline parent-head --request-id <UUID> --
|
|
753
|
+
cez worker spawn --baseline parent-head --request-id <UUID> --runner codex --effort high --context-file ./selected-context.txt 'Review the parser'
|
|
608
754
|
cez worker spawn --baseline parent-head --request-id <UUID> --workflow review 'Review the parser change'
|
|
755
|
+
cez worker list # All own workers, revisions and cleanup resources (fetches pages automatically)
|
|
609
756
|
cez worker inspect <worker-id>
|
|
610
757
|
cez worker steer <worker-id> 'Consider this additional constraint'
|
|
611
758
|
cez worker diff <worker-id>
|
|
@@ -627,17 +774,17 @@ cez worker stop <worker-id>
|
|
|
627
774
|
cez worker destroy <worker-id>
|
|
628
775
|
```
|
|
629
776
|
|
|
630
|
-
Use `cez worker --help` to list operations and flags, or `cez worker <operation> --help` for one operation. Explicit help prints human-readable text and exits successfully without an active delegation session. Commands otherwise return bounded JSON and a nonzero exit on failure or incomplete cleanup. Spawn requires a committed baseline (`parent-head` or an explicit ref) and pins its SHA at acceptance; dirty parent edits are excluded. Optional `--context '<text>'` or `--context-file <UTF-8-file>` supplies selected context, not the parent's conversation. The two flags are mutually exclusive, and combined task/context text is limited to 100,000 characters. The API also accepts up to 32 pinned-baseline file or parent-attachment references, with at most 8 MiB of copied attachments. Inspect reports worker-local input locations. Reuse a request ID only with the same task, baseline, context,
|
|
777
|
+
Use `cez worker --help` to list operations and flags, or `cez worker <operation> --help` for one operation. Explicit help prints human-readable text and exits successfully without an active delegation session. Commands otherwise return bounded JSON and a nonzero exit on failure or incomplete cleanup. Spawn requires a committed baseline (`parent-head` or an explicit ref) and pins its SHA at acceptance; dirty parent edits are excluded. Optional `--context '<text>'` or `--context-file <UTF-8-file>` supplies selected context, not the parent's conversation. The two flags are mutually exclusive, and combined task/context text is limited to 100,000 characters. The API also accepts up to 32 pinned-baseline file or parent-attachment references, with at most 8 MiB of copied attachments. Inspect reports worker-local input locations. Reuse a request ID only with the same task, baseline, context, runner, model, effort and workflow when retrying a lost response. `--runner` and its alias `--backend` count as the same field, so a retry may switch spelling. A parent holds at most 32 outstanding workers: accepted, live, or not yet verifiably destroyed. A verified destroy (`cez worker destroy`, or **Clean up** on a finished worker in the cockpit's Workers list) frees a slot; incomplete cleanup keeps its slot until a retry completes. A parent can create at most 1,024 workers in total; past that, start a new task. These limits bound disk resources and runaway spawning, not spending: a worker can be resumed with Continue, and destroying it does not undo charges already made. Cost stays bounded by `maxParallel` and by stopping the parent. There are at most 32 undelivered steering messages per worker.
|
|
631
778
|
|
|
632
|
-
An incomplete destroy reports the remaining resources and a reason.
|
|
779
|
+
An incomplete destroy reports the remaining resources and a reason. Cezarion retries that recorded request after a delay, including after the project's context recovers on server restart. It removes the owned checkout only after process termination and ownership are verified. If the reason persists, inspect the worker process, Git worktree lock and ownership receipt; correct the blocker and use `cez worker destroy <worker-id>` or the cockpit Destroy action to retry immediately. Cezarion leaves ambiguous or replaced resources in place for operator review.
|
|
633
780
|
|
|
634
|
-
`--workflow <name>` runs a catalog workflow inside the worker: the built-in `quick-task` or any `.ai/cezar/workflows/*.yaml` by name, with its agent and check steps, `skill:` bodies and `onFail` loops, so a repo's `review.yaml` becomes a dedicated reviewer. Omitted `--workflow` runs `quick-task` exactly as before. `--
|
|
781
|
+
`--workflow <name>` runs a catalog workflow inside the worker: the built-in `quick-task` or any `.ai/cezar/workflows/*.yaml` by name, with its agent and check steps, `skill:` bodies and `onFail` loops, so a repo's `review.yaml` becomes a dedicated reviewer. Omitted `--workflow` runs `quick-task` exactly as before. `--runner`, `--model` and `--effort` fill only the steps that leave those fields unset; a step's own `allowedTools`/`bashAllowlist` narrow the parent's grants and never widen them. An unknown name is refused. Agent steps may mix runners: at spawn every agent step is resolved and pinned separately, so an implement-with-codex, review-with-claude chain runs each step under its own runner, account, model, effort and grants. A step's optional `agentProfile` names the account it runs under (an id the registry does not know is refused); same-runner steps otherwise inherit the parent's account and other runners resolve their project/default one. Run-level columns show the first agent step.
|
|
635
782
|
|
|
636
783
|
Explicit default-account model pins are checked against a fresh, nonempty host catalog after account/model resolution and before a worker is created. Named accounts retain existing validation because a default-account catalog cannot disprove their model access. A miss returns `invalid_input`, available models with advertised efforts, and other runners listing the requested ID in `modelChoices`. Empty, stale, or unavailable discovery leaves existing selection validation in place. Accepted retries and omitted model defaults are unchanged.
|
|
637
784
|
|
|
638
|
-
Omitted `--
|
|
785
|
+
Omitted `--runner` inherits the parent's active runner. Same-runner workers inherit omitted model/account/effort; `--runner <claude|codex|opencode|pi|cursor|omp>` selecting another runner resolves that runner's project/default account and model without forwarding another provider's settings. `--backend` is a permanent alias of `--runner`; giving both with different values is refused as `invalid_input`. Worker `inspect` and `collect` still report the selected runner in a field named `backend`. `--model <model>` selects a supported model, subject to existing locks. `--effort <low|medium|high|xhigh|max>` pins reasoning effort on same-runner and mixed-runner spawn; omitted `--effort` still inherits the parent pin on same-runner spawn and drops it on mixed-runner spawn. Accepted identity and grants remain fixed across queuing, restart and Continue, including explicit empty grants. Changing or deleting an account registry entry does not rebind a worker. Missing accepted identity evidence or account homes, incompatible Claude state-file layouts, and conflicting later model locks refuse execution explicitly. Credentials and vendor configuration are never copied; each worker receives its own delegation credential, and unspecified native models stay unspecified.
|
|
639
786
|
|
|
640
|
-
Wait registers immediately. End the parent turn to release scheduler capacity;
|
|
787
|
+
Wait registers immediately. End the parent turn to release scheduler capacity; Cezarion resumes it on a selected settled outcome or the finite deadline. `any` is the default, `one` requires exactly one worker, and `all` waits for every selected worker. Review, completion, failure, cancellation with proven termination, and destruction are outcomes. Timeout defaults to 600 seconds (1–1800 accepted). `cancel-wait` is idempotent for the retained wait ID and cannot cancel a newer wait. Timeout and wait cancellation report partial outcomes and unresolved workers, never cancel workers, and never automatically re-wait. Steering is attributed agent input and cannot answer a pending human question.
|
|
641
788
|
|
|
642
789
|
Parents and owned workers can converse in both directions; a worker may address only its parent. `send --kind request` opens a reply obligation whose ID is the message ID; `send --kind progress` (or `progress`) does not. Follow-ups clarify an existing request; only an explicit correlated `reply` settles it as replied. Retry a message with the same ID and exact payload, including deadline duration; changed payloads are rejected. Acceptance, provider delivery, reply, and task completion are separate facts, visible in the task transcript and `conversation` JSON.
|
|
643
790
|
|
|
@@ -647,15 +794,13 @@ Messages reach a live recipient as soon as they are accepted, including mid-turn
|
|
|
647
794
|
|
|
648
795
|
Sending to a review or terminal participant without `--resume` reports `not-delivered` and `continuation-required`, with the reason and next command; the CLI exits 1. An active parent can use `worker send --resume` (request or progress) to continue its settled done/review/failed worker with that message as the new instruction. No human Continue is needed for this parent-controlled action. A retry with the same payload and ID never creates another continuation; changing a rejected send to use `--resume` requires a new ID. Stopped or destroyed workers need a new worker. Workers cannot resume parents, and conversation never answers a pending human question. Durable IDs deduplicate accepted queue entries and event replay, but a crash between provider acceptance and its durable delivery checkpoint can leave transport delivery ambiguous; this is not an exactly-once execution guarantee.
|
|
649
796
|
|
|
650
|
-
|
|
651
797
|
Collect returns the worker's execution revision, status/outcome, `settled` and `partial` flags, and typed availability for assistant summary, HEAD, bounded diff and artifact descriptors. Missing evidence is explicit; running output is partial. An available `diff.path` points to a **JSON result file** containing `{ result, diffSnapshot }`; its `diffSnapshot` field holds the patch. Read and review that field before applying any changes. The latest collected result is stored under the parent and survives restart. Collection acknowledges observation, not Git integration or successful work. Review desired worker commits and deliberately integrate them into the parent before destroying their worktrees/branches; there is no automatic merge.
|
|
652
798
|
|
|
653
799
|
Parent completion requires collection of every worker's latest settled execution revision. A worker Continue invalidates older readiness. An early completion attempt waits for outstanding workers and wakes the parent to inspect/collect; it does not silently finish on wake. While workers remain live, markerless replies, completion timeouts, and repeated premature completion park the parent as monitoring with the existing capped wakeups. Once workers settle, repeated completion without collecting their results retains attention. Human Finish also refuses unresolved/uncollected workers. If the parent is already under review, Continue the parent first, then Continue its worker. Human questions remain authoritative.
|
|
654
800
|
|
|
655
801
|
Stop requests cancellation; `stopping` does not prove termination. Destroy checkpoints obtainable results, waits up to 30 seconds for proven termination, and removes only verified owned resources. An `incomplete` response lists remaining resources; resolve the cause and retry explicitly. Cleanup order is: collect/integrate desired results, destroy owned resources, explicitly delete child histories through the cockpit/API, then delete parent history. Parent-owned summaries and bounded diff snapshots remain until parent deletion, including after child-history deletion; general artifact bytes are not archived. Branch/path strings and SHAs become historical descriptors after removal, not promises of available Git objects or files. The human cleanup endpoint `POST /api/v1/p/<projectId>/runs/<worker-id>/worker-destroy` stays available when delegation is disabled. The CLI bounds each HTTP request to 45 seconds and rejects endpoint/auth/origin overrides and redirects.
|
|
656
802
|
|
|
657
|
-
Provisioned sessions prefer
|
|
658
|
-
|
|
803
|
+
Provisioned sessions prefer Cezarion workers and suppress verified native delegation entry points through per-run adapter controls: Claude `Agent`, legacy `Task` and `Workflow` denies, Codex multi-agent feature overrides, OpenCode session `task` denies, and pi's known `subagent` extension exclusion. Claude skills and commands with `context: fork` are not blocked: Claude starts their subagent without checking those denies, and no setting turns forking off. See [the backend capability table](AGENT_PROTOCOL.md#governed-delegation-controls-d1) for tested versions and exemptions. Native workers are not tracked by Cezarion. Pi has no native delegation primitive or universal identifier for arbitrary custom delegation extensions; guidance does not enforce those cases. With delegation disabled or unavailable, ordinary tools/settings stay unchanged. The listener binds to `127.0.0.1`, including hosted cockpit mode. Its credentials authorize only the parent's own workers through that listener. This is cooperative local-agent supervision; same-user unrestricted shell and custom tools are not hard isolation. Workers cannot delegate or message peers through Cezarion. Review remains a human gate with no automatic acceptance. Never read, echo, forward, or persist the generated token.
|
|
659
804
|
|
|
660
805
|
## From the terminal: `cez task`
|
|
661
806
|
|
|
@@ -665,6 +810,16 @@ branch on, so nothing has to parse prose. It never starts a server: it finds the
|
|
|
665
810
|
project registry holds this checkout (ports 4321–4370; a task worktree resolves to its parent
|
|
666
811
|
project), or you point it at one with `--url` / `CEZ_URL`.
|
|
667
812
|
|
|
813
|
+
```text
|
|
814
|
+
cez task [--url <origin> | --repo <dir>] <operation> …
|
|
815
|
+
```
|
|
816
|
+
|
|
817
|
+
The shared `--url`, `--repo` and `--help`/`-h` flags also work before the operation;
|
|
818
|
+
`--url` and `--repo` accept both `--flag value` and `--flag=value`. A shared flag repeated
|
|
819
|
+
before the operation or on both sides is a usage error. Operation flags stay after the
|
|
820
|
+
operation. `cez task --help <operation>` shows that operation's help without discovery.
|
|
821
|
+
An explicit `--url` wins over `CEZ_URL`; `--repo` selects the checkout to discover.
|
|
822
|
+
|
|
668
823
|
```bash
|
|
669
824
|
id=$(cez task start --task-file - <<'EOF' | jq -r .id
|
|
670
825
|
Fix the `cez task` docs. Keep $(example) and "quotes" literal.
|
|
@@ -675,7 +830,7 @@ cez task list # currentStepId (ru
|
|
|
675
830
|
cez task status "$id" # slim JSON: status, attention, question, branch, handoffUrl…
|
|
676
831
|
cez task send "$id" 'Use the retry helper instead' # delivered live, queued before start
|
|
677
832
|
cez task send "$id" --resume 'Continue with the next step' # resumed: reopen a settled session
|
|
678
|
-
cez task log "$id" --follow --timeout-seconds 300 # JSON lines until it ends
|
|
833
|
+
cez task log "$id" --follow --timeout-seconds 300 # JSON lines until it needs you or ends
|
|
679
834
|
```
|
|
680
835
|
|
|
681
836
|
`list --status` accepts comma-separated values: `queued`, `running`, `waiting`, `review`,
|
|
@@ -707,42 +862,60 @@ execution, the agent uses the plain prompt and the run logs a note. CLI starts d
|
|
|
707
862
|
the cockpit composer's recent picks or skill-usage ranking.
|
|
708
863
|
Without either flag, `start` still runs `quick-task`.
|
|
709
864
|
|
|
865
|
+
`--runner <claude|codex|opencode|pi|cursor|omp>` picks the runner, as in a workflow step and
|
|
866
|
+
`cez discover --runner`; `--model` and `--effort` pin the rest. `--backend` is a permanent
|
|
867
|
+
alias of `--runner` with no warning. Giving both with different values exits 64.
|
|
868
|
+
|
|
869
|
+
`--archive-when-done` archives the task after **Done**. `--auto-merge-pr` merges its
|
|
870
|
+
PR after **Done** only when current-head CI and GitHub rules pass. It can mark a
|
|
871
|
+
draft PR ready. Both controls are off by default. They also appear as switches in
|
|
872
|
+
the task composer and task details. With both on, Cezarion merges before it archives;
|
|
873
|
+
without a PR, it archives on Done. Pending or blocked completion actions show their
|
|
874
|
+
reason in task details. Use `status <id> --full` to read the saved `archiveWhenDone`,
|
|
875
|
+
`autoMergePr` and `completionAction` fields. Existing task choices can be changed
|
|
876
|
+
through `PATCH /api/v1/p/:projectId/runs/:id` with the matching boolean fields.
|
|
877
|
+
|
|
710
878
|
`start` is retry-safe: it sends a request id (`--request-id <UUID>` to pick your own), and a
|
|
711
|
-
retry with the same id and
|
|
712
|
-
instead of starting a second.
|
|
879
|
+
retry with the same id and start options answers with the run the first one created
|
|
880
|
+
(`created: false`) instead of starting a second. Changing a completion control on that
|
|
881
|
+
retry is a payload conflict. Also: `list`, `stop`, `finish`, `diff [--stat]`, `open`.
|
|
713
882
|
Use `archive <id>` to hide a task from `list`, `unarchive <id>` to restore it, and
|
|
714
883
|
`list --all` to include archived tasks. `list` never shows owned workers, with or without
|
|
715
884
|
`--all`: they are steer targets of their parent task. Id-addressed commands (`status`, `wait`,
|
|
716
885
|
`send`, `log`, `stop`, …) still accept a worker's id. `archive-finished` sweeps finished tasks (not scheduled runs waiting on a usage limit, and not owned workers, which leave with their parent) and prints
|
|
717
886
|
`{"archived": count, "ids": [...], "pinnedIds": [...]}`. The single-task commands print `{"id": "…", "archived": true|false}`.
|
|
718
887
|
Exit codes:
|
|
719
|
-
`0` ok (`wait`/`start --wait`: the task ended `done`/`review` or stopped for attention), `1` task
|
|
888
|
+
`0` ok (`wait`/`start --wait`/`log --follow`: the task ended `done`/`review` or stopped for attention), `1` task
|
|
720
889
|
failed/cancelled or a message was not delivered, `2` no cockpit or the cockpit refused (its `error`
|
|
721
890
|
is passed through), `3` timed out, `64` usage error. `cez task --help` lists every flag.
|
|
722
891
|
|
|
723
|
-
**When a task needs you.** `status`, `list` and `
|
|
892
|
+
**When a task needs you.** `status`, `list`, `wait` and the final `log --follow` line carry `attention` and `attentionLabel`,
|
|
724
893
|
derived by the same function the cockpit's Needs You uses, so the CLI and the cockpit cannot
|
|
725
894
|
disagree. Read those rather than the raw status:
|
|
726
895
|
|
|
727
896
|
- `attention: waiting` (`attentionLabel` "needs you" / "needs review"), `error` or `permission`
|
|
728
|
-
means the task wants a human. A `waiting` task is attention **even when
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
`
|
|
733
|
-
|
|
897
|
+
means the task wants a human. A `waiting` task is attention **even when no question is
|
|
898
|
+
pending** — a finished turn parks the task for follow-up without a structured question —
|
|
899
|
+
unless its top open wait is CI or a timer (below). A pending question shows as `question`
|
|
900
|
+
on `status`, with the agent's Markdown context as `questionContext` when it sent one, and as
|
|
901
|
+
`waitingOn` `{ kind: 'human' }`; never clear a task on its absence alone.
|
|
902
|
+
- `attention: running` with `attentionLabel` "waiting for CI", "waiting for merge" or "monitoring"
|
|
903
|
+
(`status: waiting` with an open PR wait or timer in `waitingOn`) is neither settled nor attention: the agent is
|
|
904
|
+
still working on its own sub-agents or a watched command, whatever its last log line says.
|
|
734
905
|
- `attention: none` with "waiting on 2 workers" is a task parked on its own workers; it will wake
|
|
735
906
|
by itself.
|
|
736
907
|
|
|
737
|
-
`wait` and `
|
|
738
|
-
default); `--until settled` waits for a terminal status only — for
|
|
739
|
-
that wants an outcome:
|
|
908
|
+
`wait`, `start --wait` and `log --follow` stop as soon as a task needs you or ends
|
|
909
|
+
(`--until attention`, the default); `--until settled` waits for a terminal status only — for
|
|
910
|
+
`--autonomous` runs, or a bot that wants an outcome:
|
|
740
911
|
|
|
741
912
|
```bash
|
|
742
913
|
cez task wait "$id" # stops when the task needs you, or ends
|
|
743
914
|
cez task wait "$id" --until settled # done/review/failed/cancelled only
|
|
744
915
|
cez task start --task-file task.md --wait # returns as soon as the agent parks
|
|
745
916
|
cez task start --task-file task.md --wait --autonomous --until settled # runs to completion
|
|
917
|
+
cez task log "$id" --follow # streams until the task needs you, or ends
|
|
918
|
+
cez task log "$id" --follow --until settled # streams until done/review/failed/cancelled
|
|
746
919
|
```
|
|
747
920
|
|
|
748
921
|
*Migrating from `--until settled`.* Before 0.16, `wait` and `start --wait` defaulted to
|
|
@@ -752,13 +925,24 @@ parked within seconds. The default is now `attention`. A bot that polls for term
|
|
|
752
925
|
run in the `wait` output (and the `start --wait` object) now carries `attention` +
|
|
753
926
|
`attentionLabel`, and the output's top level says which `until` was in force, so a caller can tell
|
|
754
927
|
"parked for follow-up" (`status: waiting`, `attention: waiting`) from "finished" (`status: done`,
|
|
755
|
-
`attention: none`) without knowing
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
`
|
|
761
|
-
|
|
928
|
+
`attention: none`) without knowing Cezarion's status vocabulary.
|
|
929
|
+
|
|
930
|
+
*`log --follow` (#931).* `log --follow` used to stop on a terminal status only, so tailing an
|
|
931
|
+
interactive task streamed until `--timeout-seconds` and exited 3 after the agent had parked. It
|
|
932
|
+
now takes the same `--until` with the same `attention` default, judged by the same function as
|
|
933
|
+
`wait`; `--until` without `--follow` is a usage error. Every event is still printed before the
|
|
934
|
+
final line, which is now `{"id", "status", "attention", "attentionLabel", "until", "timedOut"}`. A
|
|
935
|
+
bot that tails to terminal state adds `--until settled`. `log` without `--follow` is unchanged.
|
|
936
|
+
|
|
937
|
+
**A bot that lives behind an HTTP endpoint** does not have to poll. Add a webhook (a name, a
|
|
938
|
+
description, a URL and an optional Bearer token) under **Webhooks** in the project's **Settings →
|
|
939
|
+
General** and turn on **Task notifications**. Every task that opts in then POSTs one delivery to
|
|
940
|
+
each such webhook when it enters a state that webhook selects: **Needs you**, **Failed**,
|
|
941
|
+
**Done** and **Cancelled** by default, plus **Running**, **Waiting for agents**, **Waiting on CI**,
|
|
942
|
+
**Waiting** (a timer) and **Any other wait** when you tick them. A question that puts the task in
|
|
943
|
+
Needs you is `task.question`; every other entry is `task.status`, and the body's `state` names the
|
|
944
|
+
state. `task.subscribed` (when it opts in, at start or on hand-off) and **Send test** always go out.
|
|
945
|
+
Each body carries the same slim projection `cez task status` prints, under `task`. `cez task start`
|
|
762
946
|
opts in whenever the project has a webhook (`--no-notify` to skip it); the cockpit's New task form
|
|
763
947
|
has a **Notify webhook** toggle; and a running task's **Hand off** button (or
|
|
764
948
|
`cez task notify <id> --message '…'`) turns it on later with a note for the bot. `notify` (and
|
|
@@ -768,6 +952,99 @@ the webhook only, never to the agent. Delivery is best-effort: 10 s timeout, 3 a
|
|
|
768
952
|
failure shows in the thread without touching the task. The token is stored in `~/.cezar` and never
|
|
769
953
|
sent back to a browser. Under `CEZ_DRY_RUN=1` nothing is sent; the payload is logged in the thread.
|
|
770
954
|
|
|
955
|
+
A project can hold several webhooks, each with its own states, and each body names the webhook it
|
|
956
|
+
went to under `webhook`. One failing webhook never delays or stops another.
|
|
957
|
+
|
|
958
|
+
### Reports from agents: `cez webhook`
|
|
959
|
+
|
|
960
|
+
Turn on **Let agents send reports** for a webhook, and agents in that project can send it a report
|
|
961
|
+
on demand: a friction report to a triage bot instead of a new GitHub issue, for example. Agents see
|
|
962
|
+
each such webhook's name and description in their system prompt, so write the description as
|
|
963
|
+
instructions ("Send friction you hit with tools here instead of filing a GitHub issue"). A webhook
|
|
964
|
+
without that switch cannot be reached this way.
|
|
965
|
+
|
|
966
|
+
```sh
|
|
967
|
+
cez webhook list # the webhooks open to agents
|
|
968
|
+
cez webhook send 'Friction reports' --message-file report.md --title 'Squeal skipped an edit'
|
|
969
|
+
cez webhook send <name|id> --message 'Short report' [--data '{"severity":"low"}']
|
|
970
|
+
```
|
|
971
|
+
|
|
972
|
+
The body is `event: "agent.report"` with `webhook`, `title`, the Markdown `message`, your `data`,
|
|
973
|
+
and the reporting task's `runId`, thread `url` and `task` projection. The command prints the
|
|
974
|
+
outcome as JSON and exits 0 delivered, 1 not delivered, 2 refused or no cockpit, 64 usage.
|
|
975
|
+
|
|
976
|
+
### Automations from a task: `cez automation`
|
|
977
|
+
|
|
978
|
+
`cez automation` creates and manages automations (see `CEZ_AUTOMATIONS=1`) on the cockpit that
|
|
979
|
+
runs the task, so an agent asked to "do X every morning" or "whenever a PR opens" sets up an
|
|
980
|
+
automation instead of a cron job. Like `cez task`, it prints one JSON object per invocation and
|
|
981
|
+
exits 0 ok, 1 check failed, 2 refused or no cockpit, 3 check timed out, 64 usage.
|
|
982
|
+
|
|
983
|
+
```sh
|
|
984
|
+
cez automation schema # the definition reference (needs no cockpit)
|
|
985
|
+
cez automation add --name 'Weekday triage' --cron '0 7 * * 1-5' --prompt 'Triage new issues'
|
|
986
|
+
cez automation add --name 'Review PRs' --on pull_request.opened --every 5m --label bug --prompt-file p.md
|
|
987
|
+
cez automation add --name 'Agent triage' --on issue.labeled --changed-label needs-agent --prompt 'Triage #{{github.number}}'
|
|
988
|
+
cez automation create --file def.json [--enable] # full JSON form; stdin when no flag is given
|
|
989
|
+
cez automation update <id> --json '{"task":{"prompt":"…"}}'
|
|
990
|
+
cez automation add --name 'Check the rollout' --at 2026-10-29T09:00 --tz Europe/Warsaw --prompt 'Check the rollout'
|
|
991
|
+
cez automation add --name 'Follow up' --in 7d --latest-start 6h --prompt 'Follow up on the migration'
|
|
992
|
+
cez automation check <id> [--execute] · run <id> · list [--archived include|only] · show <id> · enable <id> · pause <id> · cancel <id> · delete <id>
|
|
993
|
+
```
|
|
994
|
+
|
|
995
|
+
`add` and `create` send the same body and create the automation **paused** unless `--enable` is
|
|
996
|
+
given; `--cron` accepts the four shapes a schedule can take (daily, weekdays, one weekday, every N
|
|
997
|
+
hours) and anything else is a usage error pointing to the JSON form. `update` replaces each key
|
|
998
|
+
it is given, except `task`, which merges key by key (`null` removes one); it restates `enabled`
|
|
999
|
+
and echoes the revision it read, so a concurrent edit in the cockpit is refused (exit 2), never
|
|
1000
|
+
overwritten. Mutating commands print the automation's cockpit page as `url`.
|
|
1001
|
+
|
|
1002
|
+
`add` accepts `--archive-when-done` and `--auto-merge-pr` with the same behavior as
|
|
1003
|
+
`cez task start`. The JSON keys are `task.archiveWhenDone` and `task.autoMergePr`.
|
|
1004
|
+
Both are optional booleans and default to off. The automation editor has the same
|
|
1005
|
+
switches. Editing these choices affects future tasks only; it does not change tasks
|
|
1006
|
+
the automation already launched. Enabling an automation or making its tasks autonomous
|
|
1007
|
+
does not enable either completion control.
|
|
1008
|
+
|
|
1009
|
+
GitHub automations exclude events before enablement by default. Turn on **Include existing items**
|
|
1010
|
+
in the editor, pass `--include-existing` to `add`, or set `"filters": {"includeExisting": true,
|
|
1011
|
+
"lookbackDays": 7, "maxRecords": 25}` in a JSON definition to include older matches within the
|
|
1012
|
+
lookback (1–90 days). Turning this on for an enabled automation reopens that window on its next
|
|
1013
|
+
check. Changing only the lookback preserves the completed cursor; pause and re-enable to
|
|
1014
|
+
reopen the wider history window. Previously processed matches stay deduplicated across edits, pauses and restarts, and
|
|
1015
|
+
per-check limits still apply. Historical scans resume across checks and restarts when capped.
|
|
1016
|
+
GitHub search is limited to 1,000 items per window and label timelines to 100 events per item;
|
|
1017
|
+
reaching either limit reports an error with guidance to narrow the filters or lookback. **Test filter** previews the selected window independently of the
|
|
1018
|
+
execution cursor; it never launches tasks. For label triggers, the window applies to the label
|
|
1019
|
+
event's time, so a newly added label can match an old issue even with history off. Historical
|
|
1020
|
+
label discovery revisits the rolling window because later comments can move issues between pages;
|
|
1021
|
+
receipts prevent those repeated observations from launching duplicate tasks.
|
|
1022
|
+
|
|
1023
|
+
A **one-time schedule** (**Once** in the editor, `--at` or `--in` on `add`, `"schedule":
|
|
1024
|
+
{"type": "once", "at": "2026-10-29T09:00", "timeZone": "Europe/Warsaw"}` in JSON) starts one
|
|
1025
|
+
ordinary task at a wall-clock time in an explicit IANA zone. It is created paused like every
|
|
1026
|
+
automation; **Enable** arms it. When it is due, Cezarion starts the task and moves the schedule to
|
|
1027
|
+
**Archived** with a link to that task; **Run now** does the same at once, so it never runs twice.
|
|
1028
|
+
**Cancel** archives it without a task. An archived schedule cannot change, and the list hides it
|
|
1029
|
+
until you pick the **Archived** filter. Cezarion must be running at the due time. If it was not,
|
|
1030
|
+
the schedule starts on the next boot only within its **Latest start** (no limit by default; 10
|
|
1031
|
+
minutes to 30 days); after that it is marked **Missed** and stays until you edit, cancel or run it.
|
|
1032
|
+
A launch that fails marks it **Failed**, and nothing retries on its own; **Retry** or **Run now**
|
|
1033
|
+
relaunches the same receipt, so one schedule starts at most one task. Agents can create and manage
|
|
1034
|
+
one-time schedules with the `cezar_schedule_task` and `cezar_scheduled_tasks` tools, which exist
|
|
1035
|
+
only with `CEZ_AUTOMATIONS=1` and also create schedules paused unless the user asked for them to run.
|
|
1036
|
+
|
|
1037
|
+
Automation list counters use two windows. **Launched** counts every stored task with that
|
|
1038
|
+
automation's provenance, across definition revisions, including historical variants, completed and
|
|
1039
|
+
archived tasks. Restarting or compacting automation logs and receipts does not change it;
|
|
1040
|
+
deleting a task removes it from the count. **Matches**, **Duplicates** and **Errors** describe
|
|
1041
|
+
only that automation's latest 100 activity-log rows. Recent activity remains a separate log view.
|
|
1042
|
+
|
|
1043
|
+
The address comes from `CEZ_COCKPIT_URL` and `CEZ_PROJECT_ID`, which the cockpit puts in a task's
|
|
1044
|
+
environment. Without them, only an explicit `--url`, `--repo` or `CEZ_URL` looks for a cockpit;
|
|
1045
|
+
otherwise the command exits 2 and never starts a server. With automations off, the cockpit's `409`
|
|
1046
|
+
is relayed verbatim (exit 2).
|
|
1047
|
+
|
|
771
1048
|
## Workflow format
|
|
772
1049
|
|
|
773
1050
|
A workflow is a small YAML file in `.ai/cezar/workflows/`:
|
|
@@ -782,7 +1059,7 @@ steps:
|
|
|
782
1059
|
skill: project-conventions # optional — from .ai/skills or .ai/cezar/skills
|
|
783
1060
|
# model: opus # optional per-step model override
|
|
784
1061
|
# effort: high # optional per-step effort: low · medium · high · xhigh · max
|
|
785
|
-
# runner: codex # optional per-step backend: claude · codex · opencode · pi
|
|
1062
|
+
# runner: codex # optional per-step backend: claude · codex · opencode · cursor · pi · omp
|
|
786
1063
|
# timeoutMs: 7200000 # optional agent-step wall-clock cap (2 hours); 0 = no limit
|
|
787
1064
|
# allowedTools: [Read, Edit, Write, Grep, Glob, Bash]
|
|
788
1065
|
- id: verify
|
|
@@ -825,7 +1102,7 @@ skills: [reproduce, root-cause, implement, self-review]
|
|
|
825
1102
|
|
|
826
1103
|
## How it runs agents
|
|
827
1104
|
|
|
828
|
-
|
|
1105
|
+
Cezarion shells out to your locally installed, logged-in agent CLI —
|
|
829
1106
|
**your subscription, no API key**. With the default Claude Code backend that
|
|
830
1107
|
means headless `stream-json` mode, tool access via `--allowedTools`, with
|
|
831
1108
|
unapproved tools denied without prompting (`--permission-mode dontAsk`) inside
|
|
@@ -833,8 +1110,10 @@ the task's worktree — but note the zero-config default list (`Read`, `Edit`,
|
|
|
833
1110
|
`Write`, `Grep`, `Glob`, `Bash`) grants unrestricted `Bash` unless a step sets
|
|
834
1111
|
`bashAllowlist`, so treat a run as having full shell access in its worktree,
|
|
835
1112
|
not a sandboxed allowlist. Set `CEZ_APPROVAL_GATE=1` to opt into Claude's
|
|
836
|
-
interactive approval UI. Codex and
|
|
837
|
-
native protocols and don't honor `allowedTools` at all
|
|
1113
|
+
interactive approval UI. Codex, OpenCode and Cursor are driven through their
|
|
1114
|
+
own native protocols and don't honor `allowedTools` at all; OpenCode's own
|
|
1115
|
+
permission config decides what it asks. pi and OMP map `allowedTools` onto
|
|
1116
|
+
their own tool allowlists — see
|
|
838
1117
|
[Coding agent backends](#coding-agent-backends) for what each one actually
|
|
839
1118
|
locks down. Nothing runs on a server you don't own.
|
|
840
1119
|
|
|
@@ -845,29 +1124,31 @@ Useful environment variables:
|
|
|
845
1124
|
| `CEZ_DELEGATION=1` | Enable owned workers and the private loopback listener for this controller. Off by default; works with the cockpit and headless `cez run`. When disabled, terminal cleanup checkpoints skip conversation/wait history reconciliation; explicit recovery and cleanup termination safeguards remain active. Session instructions and credentials are automatic. |
|
|
846
1125
|
| `CEZ_DELEGATION_URL`, `CEZ_DELEGATION_TOKEN` | Internal generated session values; do not configure or copy them. Tokens rotate on Continue/restart and are revoked when the session/controller closes. |
|
|
847
1126
|
| `CEZ_URL` | Cockpit origin for `cez task` and operator `cez discover` (e.g. a hosted `CEZ_REMOTE` cockpit). Unset, they find the local cockpit serving this checkout on ports 4321–4370. Parent discovery uses its delegation controller instead. |
|
|
1127
|
+
| `CEZ_COCKPIT_URL`, `CEZ_PROJECT_ID` | Set by the cockpit in every agent's environment once it listens: the bound origin and the run's project. `cez automation` calls that address; a headless `cez run` sets neither. Do not configure them. |
|
|
848
1128
|
| `CEZ_DRY_RUN=1` | Use bundled mocks for all five agent backends — the cockpit works offline for demos and development. Explicit backend binary overrides still win. |
|
|
849
|
-
| `CEZ_AGENT_MODELS_LOCKED=1` | Globally lock each runner to the model configured in its native Claude/Codex/OpenCode settings while keeping runner selection available. Exact `1` also delegates authentication and provider enablement to those native agents, so
|
|
1129
|
+
| `CEZ_AGENT_MODELS_LOCKED=1` | Globally lock each runner to the model configured in its native Claude/Codex/OpenCode settings while keeping runner selection available. Exact `1` also delegates authentication and provider enablement to those native agents, so Cezarion skips its credential probes and provider-disable preferences. Existing Cezarion presets are preserved but ignored, and an environment change requires a restart. The config-file equivalent is `"modelsLocked": true` in global `~/.cezar/config.json` or one repository's `.ai/cezar/config.json`; config-file locks do not disable provider checks. |
|
|
850
1130
|
| `CEZ_APPROVAL_GATE=1` | Opt into Claude's interactive approval UI; by default, unapproved tools are denied without interrupting the run. Ignored when `CEZ_CLAUDE_PERMISSION_MODE` is a recognized value (`dontAsk`, `acceptEdits`, or `bypass`). |
|
|
851
1131
|
| `CEZ_CLAUDE_PERMISSION_MODE` | Claude agent-run permission flag: `dontAsk` (default), `acceptEdits`, or `bypass`. `bypass` passes `--dangerously-skip-permissions` and omits `--permission-mode`. Unset or unknown keeps today's `dontAsk` / `CEZ_APPROVAL_GATE` path. Provider verification commands are never given this flag. |
|
|
852
1132
|
| `CEZ_CLAUDE_SETTING_SOURCES` | When set, Claude agent runs also pass `--setting-sources <value>` (e.g. `user,project,local`). Unset or empty omits the flag. Provider verification is never given this flag. |
|
|
853
|
-
| `
|
|
854
|
-
| `CEZ_AUTOMATIONS=1` | Turn on **automations** (GitHub polls and schedules): the Automations view appears and
|
|
855
|
-
| `
|
|
1133
|
+
| `CEZ_ARCHIVE_ON_MERGE=1` | Archive settled task families after all associated pull requests merge. Off by default; only `1` enables this environment default. Saved project settings override global Tasks settings, which override the environment. Runs in the background while the cockpit is open, including unopened projects, without starting agents. Unarchive preserves restored tasks until a later merge. |
|
|
1134
|
+
| `CEZ_AUTOMATIONS=1` | Turn on **automations** (GitHub polls and schedules): the Automations view appears and Cezarion runs each enabled automation while it is open, launching an ordinary task per match or per occurrence. A schedule (daily, weekdays, weekly, every N hours, in the server's time zone, or once at a set time in a named zone) needs no GitHub remote; a GitHub automation polls on its interval. Off by default, and only the exact value `1` enables it — without it nothing polls or fires, the automations endpoints answer `409`, and the nav item is absent. Read at boot, so restart after changing it; definitions, receipts and high-watermarks are retained, so unsetting it and restarting restores the feature without migration or data loss. |
|
|
1135
|
+
| `CEZ_VOICE=1` | Turn on **voice mode** (experimental): the ⌘K palette understands a sentence such as “open the next finished task” or “answer yes”, and the server asks Jev (TypeSafe) to turn it into one action that the cockpit shows and runs. Needs `TYPESAFE_API_KEY` (read by the server only; `CEZ_DRY_RUN=1` uses a fake engine instead). Off by default, and only the exact value `1` enables it — without it the voice endpoints answer `409` and the palette is unchanged. Read at boot, so restart after changing it. |
|
|
1136
|
+
| `CEZ_PREVIEW=1` | Turn on **live preview** (experimental): agents register a dev server with the `cezar_preview_serve` tool, and the cockpit opens it in a headless Chromium on the host, docked next to the task. Cezarion first runs a registered command after you press Run and open. Agents can then use `cezar_preview_stop({ port, restart?: boolean })` to stop or restart their own Cezarion-started server with that unchanged approval; changed command, cwd or path needs Run and open again. Adopted servers cannot be stopped by this tool. Each agent session also gets `CEZ_PREVIEW_CDP_URL`, a cockpit address through which it drives the same browser (`agent-browser --cdp "$CEZ_PREVIEW_CDP_URL" --pin-tab …`) while you watch; Chromium itself opens no debug port. Off by default, and only the exact value `1` enables it — without it the tool is not listed, its route and the preview WebSocket refuse, and `capabilities.preview` is `false`. Read at boot, so restart after changing it. |
|
|
856
1137
|
| `CEZ_PREVIEW_NO_SANDBOX=1` | Launch the preview's Chromium with `--no-sandbox`. Off by default and never added automatically, not even for root or in a container; use it only where Chromium's sandbox cannot start, and only for pages you trust. Only the exact value `1` applies. Read at boot. |
|
|
857
|
-
| `CEZ_AUTOSAVE=1` | Re-enable the periodic (90 s) autosave commit in task worktrees. Off by default (open-mercato/cezar#471) — turn-end and pre-PR flushes always run, so branches still end complete. Every autosave names its trigger in the commit subject (`cezar autosave (periodic)` vs `(turn end)` / `(run finalize)` / `(pre-PR)`), so the flushes you keep are distinguishable from the timer you disabled. |
|
|
1138
|
+
| `CEZ_AUTOSAVE=1` | Re-enable the periodic (90 s) autosave commit in task worktrees. Off by default (open-mercato/cezar#471) — turn-end and pre-PR flushes always run, so branches still end complete. Every autosave names its trigger in the commit subject (`cezar autosave (periodic)` vs `(turn end)` / `(run finalize)` / `(pre-PR)`), so the flushes you keep are distinguishable from the timer you disabled. The turn-end / run-finalize flushes and the timer commit only while HEAD is the task's own `cez/<id8>` branch; on a branch the agent checked out they leave the work uncommitted, and the closing flush says so in the handoff's cezar records block, not its Progress log (hearsay-tools/cezarion#1004, hearsay-tools/cezarion#1809). A turn-end / run-finalize commit is reported there too, with its `git reset --soft` fold-back command, and the timer's commits share one line per run of consecutive periodic commits (count, first and latest sha), with no cockpit note. The pre-PR flush is unchanged. |
|
|
858
1139
|
| `CEZ_CLAUDE_BIN=/path/to/claude` | Override which `claude` binary is used. |
|
|
859
1140
|
| `CEZ_CODEX_BIN=/path/to/codex` | Override which `codex` binary is used. |
|
|
860
1141
|
| `CEZ_OPENCODE_BIN=/path/to/opencode` | Override which `opencode` binary is used. |
|
|
861
1142
|
| `CEZ_PI_BIN=/path/to/pi` | Override which `pi` binary is used. |
|
|
862
1143
|
| `CEZ_OMP_BIN=/path/to/omp` | Override which `omp` (Oh My Pi) binary is used. |
|
|
863
1144
|
| `CEZ_CURSOR_BIN=/path/to/agent` | Override the Cursor CLI (`agent`) executable. |
|
|
864
|
-
| `CLAUDE_CONFIG_DIR`, `CODEX_HOME` | The agents' **own** variables, honoured where the vendor documents one. Setting one moves that agent's **default account** — the config folder
|
|
1145
|
+
| `CLAUDE_CONFIG_DIR`, `CODEX_HOME`, `PI_CODING_AGENT_DIR`, `OMP_PROFILE` | The agents' **own** variables, honoured where the vendor documents one. Setting one moves that agent's **default account** — the config folder (for omp, the profile) Cezarion discovers. A *second* login of the same CLI is deliberately not an environment setting, since one process-wide value cannot differ per project: add it under **Settings → Agent accounts** and pick it per project. |
|
|
865
1146
|
| `CEZ_BROWSE_ROOT=~/` | Default root for **Add project → Open local folder…**. The picker cannot navigate above it; a saved workspace value overrides the environment default and must name an existing folder. |
|
|
866
|
-
| `CEZ_PROJECTS_DIR=~/cezar/projects` | Default destination for **Clone from GitHub**. Saved workspace settings override it, and missing directories are created recursively. |
|
|
867
|
-
| `
|
|
1147
|
+
| `CEZ_PROJECTS_DIR=~/cezar/projects` | Default destination for **Clone from GitHub** and **New project**. Saved workspace settings override it, and missing directories are created recursively. |
|
|
1148
|
+
| `CEZ_PROJECT_WARMUP=0` | Prepare each registered project only when it is first opened. By default the cockpit prepares every other registered project in the background once it listens, one at a time, most recently opened first: the run store opens and interrupted runs resume, so the first click on a project does not wait. A project another live cockpit serves is skipped. |
|
|
868
1149
|
| `CEZ_AUTONOMOUS_DEFAULT=0` | Seed the New Task Autonomous default (`0` or `1`). Without a seed, skills default on and workflows off; a saved global Resources setting overrides it. |
|
|
869
1150
|
| `CEZ_WORKTREE_DEFAULT=1` | Seed the New Task Worktree default (`0` or `1`). Without a seed, eligible runs default on; a saved global Resources setting overrides it. |
|
|
870
|
-
| `CEZ_DISABLE_REPO_LOCK=1` | **Dangerous escape hatch:** allow any run executing in the repository root — an explicit `worktree=false` run, non-Git degradation, or a continuation whose worktree cannot be restored — to proceed without
|
|
1151
|
+
| `CEZ_DISABLE_REPO_LOCK=1` | **Dangerous escape hatch:** allow any run executing in the repository root — an explicit `worktree=false` run, non-Git degradation, or a continuation whose worktree cannot be restored — to proceed without Cezarion’s repository-root lease. Agents can overwrite each other’s files or Git state; isolated worktree runs are unaffected. Off by default; only the exact value `1` enables it. |
|
|
871
1152
|
| `CEZ_SINGLE_PROJECT=1` | Opt into a launch-project-only cockpit: only the exact value `1` enables it. Project add, edit, checkout, folder browsing, and removal are refused and only the launch project is shown. Off by default; stored registry rows are retained, so unsetting it and restarting restores the full multi-project workspace without migration or data loss. |
|
|
872
1153
|
| `CEZ_HIDE_TOKEN_USAGE=1` | Hide raw input/output token counts throughout the browser cockpit while leaving backend-reported cost visible. Only the exact value `1` enables it; telemetry and API payloads are unchanged, and a restart is required after changing it. |
|
|
873
1154
|
| `CEZ_HIDE_COST=1` | Hide backend-reported monetary cost throughout the browser cockpit while leaving raw input/output token counts visible. Only the exact value `1` enables it; telemetry and API payloads are unchanged, and a restart is required after changing it. |
|
|
@@ -875,12 +1156,11 @@ Useful environment variables:
|
|
|
875
1156
|
| `GITHUB_TOKEN` | Fallback for GitHub reads/PRs when `gh` isn't authenticated. |
|
|
876
1157
|
| `CEZ_ENV_PASSTHROUGH=A,B` | Forward these extra host env vars to spawned agents. By default agents get a least-privilege env (safe shell/toolchain vars + the backend's own auth + `GITHUB_TOKEN` + `CEZ_*`), not your full environment — use this to add a var an agent needs. A dev server live preview starts gets the same env without the backend's auth and `GITHUB_TOKEN`, plus these names. |
|
|
877
1158
|
| `CEZ_AGENT_ENV_FULL=1` | Escape hatch: give spawned agents, and dev servers live preview starts, the full host environment (pre-hardening behavior). Off by default; only set it if you understand that this hands every host secret to the agent process. |
|
|
878
|
-
| `CEZ_AGENT_TMPDIR=0` | Stop giving each task its own temp directory and hand agents the host `TMPDIR` again (pre-open-mercato/cezar#785 behavior). On by default: every run gets `TMPDIR`/`TEMP`/`TMP` pointing at `.ai/cezar/tmp/<task-id
|
|
1159
|
+
| `CEZ_AGENT_TMPDIR=0` | Stop giving each task its own temp directory and hand agents the host `TMPDIR` again (pre-open-mercato/cezar#785 behavior). On by default: every run gets `TMPDIR`/`TEMP`/`TMP` pointing at `.ai/cezar/t/<task-id8>` (`.ai/cezar/tmp/<task-id>` before hearsay-tools/cezarion#1022), created and write-probed before the agent spawns, kept across session close, Continue, and restart while the task is live, and reaped at terminal completion or history deletion (hearsay-tools/cezarion#515) — and kept short enough for unix-socket paths: a checkout so deep that `.ai/cezar/t/<task-id8>` would leave no room under the kernel's socket-path limit for Chromium's singleton socket resolves it to a `cez-agent-…` directory under the system temp dir instead (hearsay-tools/cezarion#387), with its location recorded so host temp-environment changes cannot move live scratch. So concurrent tasks stop sharing one directory and a task refuses to start rather than run against a temp directory that silently swallows its shell output (see Troubleshooting below). Only an exact `0` disables it, and it disables the whole thing — the pre-spawn check included, so this stays an escape hatch you can actually take. |
|
|
879
1160
|
| `CEZ_REDACT_SECRETS=0` | Disable scrubbing of credential values/token shapes from the on-disk state (the NDJSON transcript and the free-text fields of the run records in `runs.db`). On by default; leave it on. Controller-generated delegation tokens are always scrubbed. Best-effort defense-in-depth, not a guarantee: it catches known token shapes and the values of your own secret-named env vars, so a credential in neither category can still get through. |
|
|
880
1161
|
| `CEZ_TITLE_UPDATES=0` | Turn off the live task-title refresh (namer re-runs on each turn end). The Settings → Agents toggle overrides this default. |
|
|
881
1162
|
| `CEZ_AUTONAME=0` | Disable ALL LLM task naming (creation + live) — titles stay heuristic (`437: /om-auto-review-pr`). Under `CEZ_DRY_RUN=1` naming is already off unless forced with `CEZ_AUTONAME=1`. |
|
|
882
1163
|
| `CEZ_REVIEW_GATE=1` | Turn ON the optional diff-first review gate (open-mercato/cezar#489): a successful, non-autonomous run with changes parks at `review` (Accept / Send back / Draft PR) instead of finishing. Off by default — changed runs settle to `done` with the diff left in the worktree. Only `1` enables. The Settings → Agents toggle overrides this; autonomous runs always skip it. |
|
|
883
|
-
| `CEZ_NO_BANNER=1` | Skip the `open-mercato/skills` banner on `cez serve` startup. (The cockpit no longer shows a banner — its skills now live on the Skills page's Manage panel — so this env var is the terminal banner's only switch.) |
|
|
884
1164
|
| `VITE_CEZ_API_BASE=http://localhost:4321` | **Build time only**, and only when the cockpit bundle is deployed apart from the service it talks to. Empty (the default) means "the origin that served this page", which is right for both normal cases: the CLI serves the bundle itself, and `npm run dev` proxies `/api` to the local service. A deployment that must be configured without a rebuild can put `<meta name="cez-api-base" content="…">` in the served HTML instead, which wins over this. |
|
|
885
1165
|
| `VITE_CEZ_E2E=1` | **Build time only.** The cockpit e2e suite sets this when it builds the bundle it drives. It pins `useNow` and every `refetchInterval` so a wait cannot span a 30s tick or a 4s poll. Leave unset for production. |
|
|
886
1166
|
|
|
@@ -904,8 +1184,8 @@ df -i "${TMPDIR:-/tmp}" # a tmpfs can exhaust inodes long before
|
|
|
904
1184
|
Under quota the file is *created* and the write then fails, so the backend reads
|
|
905
1185
|
back a zero-byte capture file and hands the agent an empty result.
|
|
906
1186
|
|
|
907
|
-
**Fix.** Since open-mercato/cezar#785
|
|
908
|
-
`.ai/cezar/
|
|
1187
|
+
**Fix.** Since open-mercato/cezar#785 Cezarion gives each task its own `TMPDIR` under
|
|
1188
|
+
`.ai/cezar/t/<task-id8>` and write-probes it before spawning, so a broken temp
|
|
909
1189
|
directory fails the task with `agent temp directory is not writable: …` on the
|
|
910
1190
|
task thread instead of corrupting its work. If you see that error, free space on
|
|
911
1191
|
the disk holding the repo. `CEZ_AGENT_TMPDIR=0` turns the whole mechanism off —
|
|
@@ -922,69 +1202,86 @@ with `TMPDIR=/tmp` set by hand, the same commands succeed. Tools like `tsx` bind
|
|
|
922
1202
|
`<tmpdir>/tsx-<uid>/<pid>.pipe`), and the kernel caps a socket path at 104–108
|
|
923
1203
|
bytes — a temp directory near that length leaves no room for the name.
|
|
924
1204
|
|
|
925
|
-
**Fix.** Since hearsay-tools/cezarion#387
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
1205
|
+
**Fix.** Since hearsay-tools/cezarion#387 Cezarion keeps each task's temp directory short
|
|
1206
|
+
enough for these sockets: at most 58 bytes since hearsay-tools/cezarion#1022, which
|
|
1207
|
+
leaves room for Chromium's `<tmpdir>/org.chromium.Chromium.XXXXXX/SingletonSocket`
|
|
1208
|
+
on macOS's 104-byte limit. The repo-local directory is `.ai/cezar/t/<task-id8>`
|
|
1209
|
+
(the first 8 characters of the task id), short enough for ordinary checkouts such
|
|
1210
|
+
as `/home/<user>/projects/<repo>`. A checkout deep enough to push it past the limit
|
|
1211
|
+
gets a short `cez-agent-…` directory under the system temp directory instead —
|
|
1212
|
+
still per-task, still write-probed before the agent spawns, still reaped when the
|
|
1213
|
+
run ends.
|
|
930
1214
|
`CEZ_AGENT_TMPDIR=0` reverts the whole mechanism to the host `TMPDIR`.
|
|
931
1215
|
|
|
932
1216
|
---
|
|
933
1217
|
|
|
934
1218
|
## Coding agent backends
|
|
935
1219
|
|
|
936
|
-
|
|
1220
|
+
Cezarion is not married to one vendor. Every agent step runs through a single
|
|
937
1221
|
`AgentRunner` seam with six built-in backends:
|
|
938
1222
|
|
|
939
|
-
| Backend | CLI | How
|
|
1223
|
+
| Backend | CLI | How Cezarion drives it | Tool access |
|
|
940
1224
|
|---|---|---|---|
|
|
941
1225
|
| **Claude Code** (default) | [`claude`](https://github.com/anthropics/claude-code) | Headless `stream-json` mode. | Per-tool `--allowedTools` (`bashAllowlist` scopes `Bash`); `dontAsk` denies unapproved tools without prompting (`CEZ_APPROVAL_GATE=1` → `acceptEdits` + approval UI; `CEZ_CLAUDE_PERMISSION_MODE=bypass` → `--dangerously-skip-permissions`). |
|
|
942
1226
|
| **Codex** | [`codex`](https://github.com/openai/codex) | `codex app-server` — JSON-RPC over stdio, the same transport the Codex IDE extensions use. | Ignores `allowedTools`; inherits managed permissions and Codex approval defaults. Confirmed unmanaged sessions use `danger-full-access`. `CEZ_CODEX_NETWORK=0` requires network restriction: unmanaged sessions use network-blocked `workspace-write`; managed filesystem rules remain intact, and an unconfirmed network restriction stops before any turn. If requirements discovery is unavailable, Codex permission defaults apply. |
|
|
943
|
-
| **OpenCode** _(experimental)_ | [`opencode`](https://opencode.ai) | `opencode serve` — a local HTTP server with an SSE event stream. | Ignores `allowedTools` entirely;
|
|
944
|
-
| **Cursor** | [`agent`](https://cursor.com/docs/cli/installation) |
|
|
945
|
-
| **pi** _(experimental)_ | [`pi`](https://github.com/badlogic/pi-mono) | Persistent `--mode rpc` over JSONL; models are picked with the `provider/model` convention. | Maps `allowedTools` onto pi
|
|
1227
|
+
| **OpenCode** _(experimental)_ | [`opencode`](https://opencode.ai) | `opencode serve` — a local HTTP server with an SSE event stream. | Ignores `allowedTools` entirely; OpenCode's own permission config governs. Cezarion answers OpenCode's built-in asks (outside-worktree reads, `.env` reads, the repeated-call guard) once, unless your config has a rule for that permission. Any other ask shows a permission card in the cockpit, and the run waits for your answer. |
|
|
1228
|
+
| **Cursor** | [`agent`](https://cursor.com/docs/cli/installation) | Qualified builds use resumable `--print --output-format stream-json` turns; other builds and legacy sessions use ACP. | Print mode admits marketplace plugins, including user and team plugins, and narrows known native delegation tools for governed runs. Per-run `allowedTools` and `bashAllowlist` are unsupported. |
|
|
1229
|
+
| **pi** _(experimental)_ | [`pi`](https://github.com/badlogic/pi-mono) | Persistent `--mode rpc` over JSONL; models are picked with the `provider/model` convention. | Maps `allowedTools` onto pi tool names. The default list, which adds the harness extras `Subagent`, `SubagentSupervisor` and `SubagentWait`, sends no allowlist: `--no-builtin-tools` plus a bundled extension that activates those built-ins, so MCP servers (`direct`, `codemode` and `deferred` exposure) and other pi extensions' tools stay callable. The six base tools alone, the list a worker inherits from a Claude parent, take the same path. A narrowed `allowedTools`, or one that names any tool outside that default set (an `mcp__` tool, `WebFetch` or a custom tool), uses pi's `--tools` allowlist, so a step that grants named tools reaches only those; a list that maps to nothing becomes `--no-tools` (or only the Cezarion tools). A configured `bashAllowlist` disables Bash because pi cannot express command-prefix rules. |
|
|
946
1230
|
| **OMP** _(experimental)_ | [`omp`](https://github.com/can1357/oh-my-pi) | Persistent `--mode rpc` over JSONL (Oh My Pi, a pi fork); models use the `provider/model` convention and are discovered from `omp models --json`. | Maps `allowedTools` onto OMP's `--tools` allowlist (`[]` becomes `--no-tools`); default sessions also pass `todo`, `lsp`, `ast_edit`, `task` and `wait`. A configured `bashAllowlist` disables `bash` because OMP cannot express command-prefix rules. |
|
|
947
1231
|
|
|
948
1232
|
> ⚠️ **OpenCode, pi and OMP support are experimental.** These runners work but are less
|
|
949
|
-
> battle-tested than the Claude Code and Codex backends, and OpenCode
|
|
950
|
-
>
|
|
951
|
-
> rough edges.
|
|
1233
|
+
> battle-tested than the Claude Code and Codex backends, and OpenCode ignores
|
|
1234
|
+
> `allowedTools` (its own permission config governs what it asks). Treat them as
|
|
1235
|
+
> previews and expect rough edges.
|
|
952
1236
|
|
|
953
|
-
On startup
|
|
1237
|
+
On startup Cezarion probes which CLIs are installed and the cockpit only offers
|
|
954
1238
|
the backends it found — install any one of the six and you're operational.
|
|
955
1239
|
|
|
956
1240
|
### Cursor CLI
|
|
957
1241
|
|
|
958
1242
|
Install [Cursor CLI](https://cursor.com/docs/cli/installation) and run `agent login`,
|
|
959
|
-
or set `CURSOR_API_KEY`.
|
|
960
|
-
its location. Select **Cursor** in the runner picker
|
|
1243
|
+
or set `CURSOR_API_KEY`. Cezarion discovers `agent` on PATH; `CEZ_CURSOR_BIN` overrides
|
|
1244
|
+
its location. Select **Cursor** in the runner picker. On build
|
|
1245
|
+
`2026.10.01-e373342` or newer, new sessions use print mode so marketplace plugins
|
|
1246
|
+
are available. Cezarion checks `agent --version` and the native tool catalog before
|
|
1247
|
+
the first turn; `agent --version` is also the quick way to check your installation.
|
|
1248
|
+
Cezarion starts the CLI with `--disable-auto-update`, so a task never updates it;
|
|
1249
|
+
update it yourself with `agent update`. Older builds, and a build missing a core
|
|
1250
|
+
tool, use ACP, which may not see marketplace plugins. Existing ACP
|
|
1251
|
+
sessions continue on ACP so their conversation history is preserved.
|
|
961
1252
|
A missing CLI leaves the other backends available. `CEZ_DRY_RUN=1` uses the mock.
|
|
962
|
-
Cursor
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
1253
|
+
Cursor questions from a plugin may be automatically skipped by print mode. Cezarion's
|
|
1254
|
+
own `CEZ:ASK` questions remain answerable in the cockpit; plugins that require
|
|
1255
|
+
native questions may not work fully. Project-local Claude plugin settings may
|
|
1256
|
+
not disable a user or team marketplace copy. A previously confirmed Cursor
|
|
1257
|
+
session ID can also lose history inside Cursor without an error; Cezarion resumes
|
|
1258
|
+
the recorded ID and checks that Cursor returns the same ID.
|
|
1259
|
+
Cursor provides no qualified token-usage telemetry; Cezarion leaves usage unavailable
|
|
1260
|
+
instead of estimating it. Cezarion discovers Cursor's canonical model IDs and advertised
|
|
1261
|
+
effort levels through its read-only ACP catalog. Print mode accepts those IDs and
|
|
1262
|
+
applies effort using a complete native parameter selection passed with `--model`,
|
|
1263
|
+
retaining the account catalog's defaults for other parameters. Advertised legacy
|
|
1264
|
+
print variants remain supported. ACP sessions apply `effort` or `reasoning` through
|
|
1265
|
+
session config options before prompting; an unsupported explicit effort fails
|
|
1266
|
+
instead of silently choosing another level.
|
|
969
1267
|
|
|
970
1268
|
Settings → Agent config exposes Cursor’s global `cli-config.json`, project
|
|
971
1269
|
`.cursor/cli.json` permissions, `.cursor/mcp.json`, and shared `AGENTS.md`.
|
|
972
1270
|
[Cursor’s configuration reference](https://cursor.com/docs/cli/reference/configuration)
|
|
973
1271
|
documents `CURSOR_CONFIG_DIR` and the Linux/BSD `XDG_CONFIG_HOME/cursor` override.
|
|
974
|
-
These select configuration;
|
|
1272
|
+
These select configuration; Cezarion does not offer alternate Cursor account profiles
|
|
975
1273
|
because a complete credential-and-session home override has not been verified.
|
|
976
1274
|
|
|
977
|
-
|
|
978
1275
|
### OMP (Oh My Pi)
|
|
979
1276
|
|
|
980
1277
|
Install [OMP](https://github.com/can1357/oh-my-pi) (`curl -fsSL https://omp.sh/install | sh`
|
|
981
|
-
installs a prebuilt binary; Bun is needed only for `--source`) and run `omp login`.
|
|
1278
|
+
installs a prebuilt binary; Bun is needed only for `--source`) and run `omp login`. Cezarion discovers `omp` on PATH;
|
|
982
1279
|
`CEZ_OMP_BIN` overrides its location. `omp` is a separate backend from `pi`: a host with
|
|
983
1280
|
both binaries keeps both, and `CEZ_PI_BIN` never selects OMP. Select **OMP** in the runner
|
|
984
1281
|
picker to use a persistent `--mode rpc` session. A missing CLI leaves the other backends
|
|
985
1282
|
available and shows OMP as unavailable. `CEZ_DRY_RUN=1` uses the mock.
|
|
986
1283
|
|
|
987
|
-
Agents ask questions through
|
|
1284
|
+
Agents ask questions through Cezarion's `CEZ:ASK` marker, and OMP's own sub-agents appear in the
|
|
988
1285
|
Agents drawer. Settings → Agent config exposes OMP's `config.yml`, `mcp.json` and
|
|
989
1286
|
`AGENTS.md` files. Named OMP profiles and accounts are not supported yet.
|
|
990
1287
|
|
|
@@ -1016,15 +1313,15 @@ steps:
|
|
|
1016
1313
|
onFail: { retry: implement, max: 2 }
|
|
1017
1314
|
```
|
|
1018
1315
|
|
|
1019
|
-
|
|
1020
|
-
|
|
1316
|
+
Owned workers can compare approaches in separate worktrees. Each worker has its own
|
|
1317
|
+
runner and model selection; see [Owned workers](#owned-workers-opt-in).
|
|
1021
1318
|
|
|
1022
1319
|
**Models come from your own machine.** For Claude, Codex, OpenCode, and Pi, the model picker
|
|
1023
|
-
is not a list
|
|
1320
|
+
is not a list Cezarion ships — it asks the installed CLI what it can actually run
|
|
1024
1321
|
(Claude stream-json `list_models`, `codex app-server`'s `model/list`,
|
|
1025
1322
|
`opencode models`, and `pi --list-models`), caches the answer in
|
|
1026
1323
|
memory for five minutes, and shows it. A model your provider rolled out
|
|
1027
|
-
yesterday is selectable without a
|
|
1324
|
+
yesterday is selectable without a Cezarion release, and one it retired stops being
|
|
1028
1325
|
offered. Claude discovery starts no model turn and uses safe mode with no session
|
|
1029
1326
|
persistence. It has a 15-second deadline and a 200-model cap, with child cleanup
|
|
1030
1327
|
on every outcome. Unsupported or unavailable Claude CLIs fall back to the
|
|
@@ -1040,9 +1337,9 @@ can slot in the same way.
|
|
|
1040
1337
|
|
|
1041
1338
|
---
|
|
1042
1339
|
|
|
1043
|
-
## Remote access (host
|
|
1340
|
+
## Remote access (host Cezarion on a server)
|
|
1044
1341
|
|
|
1045
|
-
|
|
1342
|
+
Cezarion runs on `localhost` by default. To reach the cockpit from another machine —
|
|
1046
1343
|
a shared team box, a VPS, your phone — put an **authenticated public front** in
|
|
1047
1344
|
front of it. The built-in installer does this interactively, per **platform
|
|
1048
1345
|
strategy**, and never escalates silently: every privileged command is printed
|
|
@@ -1054,6 +1351,7 @@ npx cezarion server-deploy --platform ubuntu-vps # roll out a new version (
|
|
|
1054
1351
|
npx cezarion server-uninstall --platform ubuntu-vps # reverse it
|
|
1055
1352
|
|
|
1056
1353
|
# host a SECOND cockpit for another domain on the same box (ubuntu-vps):
|
|
1354
|
+
|
|
1057
1355
|
npx cezarion server-install --platform ubuntu-vps --domain shop.example.com
|
|
1058
1356
|
```
|
|
1059
1357
|
|
|
@@ -1062,7 +1360,7 @@ On `ubuntu-vps` a single host can run several independent cockpits — add
|
|
|
1062
1360
|
new domain never resumes or clobbers the first install.
|
|
1063
1361
|
|
|
1064
1362
|
**Already running a reverse proxy?** If Dokploy, Coolify, Caddy or your own
|
|
1065
|
-
nginx already owns `:80/:443`,
|
|
1363
|
+
nginx already owns `:80/:443`, Cezarion's would fight it for the ports. Install the
|
|
1066
1364
|
service only and let your proxy front it:
|
|
1067
1365
|
|
|
1068
1366
|
```bash
|
|
@@ -1072,13 +1370,13 @@ npx cezarion server-install --platform ubuntu-vps \
|
|
|
1072
1370
|
|
|
1073
1371
|
`--bind-host` is only needed when the proxy runs in a **container** (Traefik
|
|
1074
1372
|
can't reach the host's loopback); a host-installed proxy uses the `127.0.0.1`
|
|
1075
|
-
default. In this mode **your proxy must enforce authentication** —
|
|
1373
|
+
default. In this mode **your proxy must enforce authentication** — Cezarion has
|
|
1076
1374
|
none of its own. [Details →](docs/server-install/ubuntu-vps.md#the-box-already-has-a-reverse-proxy-dokploy-coolify-caddy)
|
|
1077
1375
|
|
|
1078
1376
|
| Provider | `--platform` | Public front | Guide |
|
|
1079
1377
|
|----------|--------------|--------------|-------|
|
|
1080
1378
|
| Ubuntu / Debian VPS | `ubuntu-vps` | nginx + Let's Encrypt HTTPS, htpasswd login, systemd | [Step-by-step →](docs/server-install/ubuntu-vps.md) |
|
|
1081
|
-
| Ubuntu + existing proxy | `ubuntu-vps --external-proxy` | your Dokploy/Traefik/Caddy front;
|
|
1379
|
+
| Ubuntu + existing proxy | `ubuntu-vps --external-proxy` | your Dokploy/Traefik/Caddy front; Cezarion ships the service only | [Step-by-step →](docs/server-install/ubuntu-vps.md#the-box-already-has-a-reverse-proxy-dokploy-coolify-caddy) |
|
|
1082
1380
|
| macOS + ngrok | `macosx-ngrok` | ngrok tunnel + `--basic-auth`, launchd | [Step-by-step →](docs/server-install/macosx-ngrok.md) |
|
|
1083
1381
|
|
|
1084
1382
|
See the **[Remote access overview](docs/server-install/README.md)** for how it
|
|
@@ -1098,7 +1396,7 @@ For a deliverable outside the project, an agent must explicitly publish a snapsh
|
|
|
1098
1396
|
cez artifact publish /tmp/decision.md
|
|
1099
1397
|
```
|
|
1100
1398
|
|
|
1101
|
-
|
|
1399
|
+
Cezarion supplies the bundled command and task context to agent sessions automatically
|
|
1102
1400
|
(`CEZ_TASK_ID` and `CEZ_ARTIFACTS_DIR`; do not configure these yourself). The command
|
|
1103
1401
|
returns JSON with a Markdown link for the agent to share. When the owning project
|
|
1104
1402
|
is registered, the link keeps that project when copied or opened from another
|
|
@@ -1122,7 +1420,7 @@ never blocks startup):
|
|
|
1122
1420
|
|
|
1123
1421
|
```jsonc
|
|
1124
1422
|
{
|
|
1125
|
-
"skillsRepos": [{ "repo": "open-mercato/skills", "ref": "main" }]
|
|
1423
|
+
"skillsRepos": [], // team skills; none by default. Example: [{ "repo": "open-mercato/skills", "ref": "main" }]
|
|
1126
1424
|
// Team-skill repos are code-trusted: a skill body becomes an agent system prompt.
|
|
1127
1425
|
// Only owner/name, https/ssh URLs, or local paths (`/abs`, `./rel`, `~/dir`,
|
|
1128
1426
|
// `C:\dir`) are accepted — no ext::/fd:: transport helpers. Write a relative
|
|
@@ -1130,7 +1428,7 @@ never blocks startup):
|
|
|
1130
1428
|
// the source against a moving branch head — cezar verifies it resolves to
|
|
1131
1429
|
// exactly that commit, and reports it as `team.commit`.
|
|
1132
1430
|
"worktreeRetention": 10, // keep the last N finished worktrees on disk; 0 = unlimited (branch always kept)
|
|
1133
|
-
"defaultRunner": "claude", // agent backend: "claude" (default) · "codex" · "opencode" · "pi"
|
|
1431
|
+
"defaultRunner": "claude", // agent backend: "claude" (default) · "codex" · "opencode" · "cursor" · "pi" · "omp"
|
|
1134
1432
|
"modelsLocked": true, // optional: native per-runner model is fixed/read-only; runner stays selectable
|
|
1135
1433
|
"plannerModel": "sonnet", // model the "Plan first" button uses to draft chains
|
|
1136
1434
|
"baseBranch": "develop", // branch worktrees fork from + PRs target (also settable in the Git tab)
|
|
@@ -1155,12 +1453,34 @@ root — live once in `~/.cezar/config.json`, alongside the
|
|
|
1155
1453
|
[project registry](#multiple-projects-one-cockpit), and are edited from
|
|
1156
1454
|
**Settings → Resources** and **Settings → Projects**. A `maxParallel` left over
|
|
1157
1455
|
in a repo's `.ai/cezar/config.json` is imported into the workspace file the
|
|
1158
|
-
first time
|
|
1456
|
+
first time Cezarion boots there, and ignored afterwards.
|
|
1457
|
+
|
|
1458
|
+
### Session-start context
|
|
1459
|
+
|
|
1460
|
+
Every session Cezarion launches — a fresh step, a retry, **Continue**, recovery, an owned
|
|
1461
|
+
worker — opens with the run's whole handoff file, so the agent has its notes without a tool
|
|
1462
|
+
call. Add your own context, such as a vision document, with an optional
|
|
1463
|
+
`.ai/cezar/context.yaml`:
|
|
1464
|
+
|
|
1465
|
+
```yaml
|
|
1466
|
+
version: 1
|
|
1467
|
+
rules:
|
|
1468
|
+
- id: project-vision
|
|
1469
|
+
on: session_start
|
|
1470
|
+
target: both # parent · worker · both
|
|
1471
|
+
template: |
|
|
1472
|
+
Project vision:
|
|
1473
|
+
{{file:docs/vision.md}}
|
|
1474
|
+
```
|
|
1475
|
+
|
|
1476
|
+
The whole prefix is capped at 64 KiB, blocks that do not fit are skipped whole, and each launch
|
|
1477
|
+
logs which blocks it applied or skipped. See [docs/context-injection.md](docs/context-injection.md)
|
|
1478
|
+
for the variables, the limits and the error handling.
|
|
1159
1479
|
|
|
1160
1480
|
### Preparing new worktrees
|
|
1161
1481
|
|
|
1162
1482
|
Every task and worker runs in a fresh worktree, and a fresh worktree has nothing installed. Give
|
|
1163
|
-
the project a `worktreeSetup` and
|
|
1483
|
+
the project a `worktreeSetup` and Cezarion runs those commands in each new worktree before the
|
|
1164
1484
|
agent's first turn, so the agent (and anything that runs beside it, such as a test watcher)
|
|
1165
1485
|
starts in a ready tree:
|
|
1166
1486
|
|
|
@@ -1173,7 +1493,7 @@ starts in a ready tree:
|
|
|
1173
1493
|
```
|
|
1174
1494
|
|
|
1175
1495
|
Or edit it in **Settings → Worktrees → Prepare new worktrees**, one command per line. Only a
|
|
1176
|
-
cockpit on the machine running
|
|
1496
|
+
cockpit on the machine running Cezarion can change it: a hosted cockpit (`CEZ_REMOTE=1`) shows it
|
|
1177
1497
|
read-only, because these are commands the host runs.
|
|
1178
1498
|
|
|
1179
1499
|
- **When it runs.** In every new task worktree and every worker worktree, and again when Continue
|
|
@@ -1187,8 +1507,7 @@ read-only, because these are commands the host runs.
|
|
|
1187
1507
|
file under `HOME`). It also gets `CEZ_PROJECT_ROOT` (the main checkout, for copying untracked
|
|
1188
1508
|
files like `.env`) and `CEZ_TASK_ID`.
|
|
1189
1509
|
- **What you see.** The task thread shows a "Ran `<command>`" card per command with its output
|
|
1190
|
-
(the last 20 KB) and a line with the outcome and duration
|
|
1191
|
-
file.
|
|
1510
|
+
(the last 20 KB) and a line with the outcome and duration.
|
|
1192
1511
|
- **What the agent sees.** Its first message says what ran, so it doesn't repeat the install.
|
|
1193
1512
|
If a command fails or times out, the agent still starts and its first message names the
|
|
1194
1513
|
command, the exit code and the end of the output, so it can fix the cause or work around it.
|
|
@@ -1209,9 +1528,9 @@ Without the key nothing runs, exactly as before. Examples:
|
|
|
1209
1528
|
|
|
1210
1529
|
### Editing the agents' own config (Settings → Agent config)
|
|
1211
1530
|
|
|
1212
|
-
|
|
1213
|
-
behaves — the raw config files Claude, Codex and
|
|
1214
|
-
MCP, and memory. In the multi-project cockpit the section is project-scoped:
|
|
1531
|
+
Cezarion picks *which* agent runs; **Settings → Agent config** lets you edit *how* it
|
|
1532
|
+
behaves — the raw config files Claude, Codex, OpenCode, Cursor, pi and OMP read
|
|
1533
|
+
for settings, MCP, and memory. In the multi-project cockpit the section is project-scoped:
|
|
1215
1534
|
repo-relative files resolve from the selected project's root, while user-scope
|
|
1216
1535
|
files continue to resolve from the agent's home.
|
|
1217
1536
|
|
|
@@ -1227,17 +1546,26 @@ hosted cockpit (`CEZ_REMOTE=1`) is read-only and never serves home-file contents
|
|
|
1227
1546
|
End-to-end, from a fresh clone to a global `cez` command you can run in **any**
|
|
1228
1547
|
repo on your machine — no npm publish required.
|
|
1229
1548
|
|
|
1230
|
-
**1. Prerequisites** — Node 24.
|
|
1549
|
+
**1. Prerequisites** — Node 24.21.0+ and `git` (plus at least one logged-in agent CLI,
|
|
1231
1550
|
as in [Quick start](#quick-start)).
|
|
1232
1551
|
|
|
1233
1552
|
**2. Clone & install**
|
|
1234
1553
|
|
|
1235
1554
|
```bash
|
|
1236
|
-
git clone https://github.com/
|
|
1237
|
-
cd
|
|
1238
|
-
npm install
|
|
1555
|
+
git clone https://github.com/hearsay-tools/cezarion.git
|
|
1556
|
+
cd cezarion
|
|
1557
|
+
npm install --global pnpm@12.11.2
|
|
1558
|
+
pnpm install --frozen-lockfile
|
|
1239
1559
|
```
|
|
1240
1560
|
|
|
1561
|
+
Dependency installation uses pnpm 12.11.2 (pinned in `packageManager`) and
|
|
1562
|
+
`pnpm-lock.yaml`. Use pnpm for dependency changes; keep npm for the existing
|
|
1563
|
+
build/test scripts. Workspace dependencies are linked locally and esbuild's
|
|
1564
|
+
install hook is approved in `pnpm-workspace.yaml`. The store uses hardlinks when
|
|
1565
|
+
the checkout and store share a filesystem. Publishing and end-user installation
|
|
1566
|
+
continue to use npm. For this repository's Worktrees setup, use
|
|
1567
|
+
`pnpm install --frozen-lockfile` after the checked-out base branch contains the migration.
|
|
1568
|
+
|
|
1241
1569
|
**3. Build** — compiles the api-client and the server (`tsc → packages/cezar/dist/`) and the cockpit
|
|
1242
1570
|
(`vite build → packages/cezar/web/dist/`), then runs the pack gate:
|
|
1243
1571
|
|
|
@@ -1251,6 +1579,7 @@ your PATH pointing at *this checkout*:
|
|
|
1251
1579
|
```bash
|
|
1252
1580
|
npm run install-as-command # live link (default) — see the change loop below
|
|
1253
1581
|
# or: npm run install-as-command:global # self-contained snapshot copy
|
|
1582
|
+
|
|
1254
1583
|
```
|
|
1255
1584
|
|
|
1256
1585
|
Now `cd` into any other repo and run it:
|
|
@@ -1298,6 +1627,7 @@ npm run typecheck # refresh server declarations, then check all four workspac
|
|
|
1298
1627
|
npm run typecheck:web # refresh server declarations, then check web sources
|
|
1299
1628
|
npm test # vitest — server + cockpit unit suites
|
|
1300
1629
|
npm run test:changed # iteration only: tests related to branch + working-tree changes
|
|
1630
|
+
pnpm metrics <file> # function complexity; add --test <test-file> for coverage and CRAP
|
|
1301
1631
|
npm run test:unit # node:test — fast core-module tests
|
|
1302
1632
|
npm run test:package # pack/install and exercise the built CLI
|
|
1303
1633
|
npm run test:e2e # real-browser cockpit suite (agent-browser)
|
|
@@ -1308,6 +1638,63 @@ The four-lane local browser run needs roughly 8 GiB of RAM at peak. It keeps CI'
|
|
|
1308
1638
|
serial-per-shard policy unchanged. See [cockpit E2E testing](packages/web/e2e/README.md#full-local-suite-in-four-lanes)
|
|
1309
1639
|
for lane isolation, logs, and cleanup.
|
|
1310
1640
|
|
|
1641
|
+
Calculate metrics for one JavaScript or TypeScript file, or select a function:
|
|
1642
|
+
|
|
1643
|
+
```bash
|
|
1644
|
+
pnpm metrics packages/contract/src/attention.ts
|
|
1645
|
+
pnpm metrics packages/contract/src/attention.ts --function deriveAttention
|
|
1646
|
+
pnpm --silent metrics packages/contract/src/attention.ts --line 150 --json
|
|
1647
|
+
pnpm metrics packages/contract/src/attention.ts --function deriveAttention --test packages/contract/src/attention.test.ts
|
|
1648
|
+
pnpm metrics packages/contract/src/attention.ts --coverage coverage/coverage-final.json
|
|
1649
|
+
```
|
|
1650
|
+
|
|
1651
|
+
Complexity follows ESLint's classic convention, including short-circuit operators,
|
|
1652
|
+
optional chaining, default parameters and each non-default switch case. Functions,
|
|
1653
|
+
methods and arrow functions have separate scores. Module and class initialization
|
|
1654
|
+
are excluded. Use `Class.method` or `--line` when a name is ambiguous.
|
|
1655
|
+
|
|
1656
|
+
CRAP is `C² × (1 − coverage)³ + C`, using executable line coverage within each
|
|
1657
|
+
function body. This is the line-coverage variant; the original proposal used
|
|
1658
|
+
basis-path coverage. An empty function uses its call counter. Missing coverage
|
|
1659
|
+
shows `unavailable`, or `null` for CRAP in JSON. It never assumes zero coverage.
|
|
1660
|
+
The command discovers `coverage/coverage-final.json` from the source directory
|
|
1661
|
+
up to the checkout root, then the current directory. An explicit `--coverage`
|
|
1662
|
+
selects an Istanbul JSON report. Reports older than the source leave CRAP unavailable;
|
|
1663
|
+
reports must describe the current source, so regenerate them after source changes.
|
|
1664
|
+
|
|
1665
|
+
Repeat `--test` to collect coverage from several Vitest test files. This runs only
|
|
1666
|
+
the supplied tests in the unit projects, with two workers and a ten-minute limit.
|
|
1667
|
+
Coverage files are temporary and are removed after the calculation. A failed test
|
|
1668
|
+
run exits nonzero and produces no scores. Without `--test`, no tests run. Test logs
|
|
1669
|
+
go to stderr, so `--json` stdout contains only the report. This tool belongs to the
|
|
1670
|
+
checkout and is available after the normal dependency installation. Use
|
|
1671
|
+
`pnpm --silent metrics ... --json` to also suppress pnpm's command banner.
|
|
1672
|
+
|
|
1673
|
+
The tool is bundled in the [check-code-quality skill](.ai/skills/check-code-quality/SKILL.md).
|
|
1674
|
+
Ask an agent to measure a file, function or module for a scoped stats report.
|
|
1675
|
+
That path uses available coverage and reports missing CRAP without starting the
|
|
1676
|
+
PR process. Ask explicitly for fresh coverage when needed.
|
|
1677
|
+
|
|
1678
|
+
The skill's pre-PR path selects changed functions, fixes small problems, and files larger
|
|
1679
|
+
inherited refactors as `code-quality-improvement` issues. The scan report defines
|
|
1680
|
+
the limits: CRAP 30 and complexity 20. Scores equal to a limit pass. Copy the
|
|
1681
|
+
whole skill directory to use the tool in another repository.
|
|
1682
|
+
|
|
1683
|
+
Run the complete pre-PR measurement with the bundled command:
|
|
1684
|
+
|
|
1685
|
+
```bash
|
|
1686
|
+
node .ai/skills/check-code-quality/scripts/check.mjs --base origin/main \
|
|
1687
|
+
--runner node --test scripts/metrics.test.mjs --test scripts/changed-functions.test.mjs \
|
|
1688
|
+
--test scripts/quality-check.test.mjs --node-import scripts/test-git-env.mjs \
|
|
1689
|
+
--output .ai/analysis/code-quality.md
|
|
1690
|
+
```
|
|
1691
|
+
|
|
1692
|
+
Select relevant tests for the changes. For Vitest, use `--runner vitest` and
|
|
1693
|
+
`--project` where needed. The command collects coverage once for all changed
|
|
1694
|
+
functions and writes Markdown plus JSON. Exit codes distinguish a pass (0),
|
|
1695
|
+
exceeded limits (1), and incomplete measurement (2). See the skill for how to
|
|
1696
|
+
resolve findings before opening a PR.
|
|
1697
|
+
|
|
1311
1698
|
For iteration, run affected test files or `npm run test:changed` (inspect with
|
|
1312
1699
|
`-- --plan`; override the local main comparison with `-- --base=<ref>`).
|
|
1313
1700
|
The changed-test command includes staged, unstaged and untracked changes and
|
|
@@ -1317,12 +1704,12 @@ for targeted browser commands and the final-gate/evidence-reuse policy.
|
|
|
1317
1704
|
|
|
1318
1705
|
Both `npm run typecheck:web` and
|
|
1319
1706
|
`npm run typecheck -w @open-mercato/cezar-web` rebuild server declarations from
|
|
1320
|
-
the current checkout before checking web sources. Run `
|
|
1707
|
+
the current checkout before checking web sources. Run `pnpm install --frozen-lockfile` in each new
|
|
1321
1708
|
worktree first. The full `npm run typecheck` starts with the web check, so it
|
|
1322
1709
|
prepares declarations once before checking the remaining workspaces. Calling
|
|
1323
1710
|
`tsc --noEmit` directly skips this preparation and can consume stale declarations.
|
|
1324
1711
|
|
|
1325
|
-
CI runs
|
|
1712
|
+
CI runs three duration-balanced Vitest shards alongside the build and package checks.
|
|
1326
1713
|
See [CI verification](docs/sdlc/ci.md) for the job graph and local commands.
|
|
1327
1714
|
|
|
1328
1715
|
The stack is deliberately small: **TypeScript** (strict, ESM), **Hono** + SSE for
|
|
@@ -1335,4 +1722,4 @@ Every module is meant to be read in one sitting.
|
|
|
1335
1722
|
|
|
1336
1723
|
## License
|
|
1337
1724
|
|
|
1338
|
-
**MIT** © Patryk Lewczuk — full text in [LICENSE](LICENSE).
|
|
1725
|
+
**MIT** © Patryk Lewczuk (original cezar) and Wiktor Jarka (Cezarion) — full text in [LICENSE](LICENSE).
|