@xoxoai/checkmate 0.6.7 → 0.7.1
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/README.md +54 -257
- package/dist/checkmate.js +13375 -0
- package/package.json +30 -94
- package/plugin/.claude-plugin/plugin.json +10 -0
- package/plugin/bin/checkmate.ts +3 -0
- package/plugin/contracts/finding.schema.json +78 -0
- package/plugin/contracts/gap.schema.json +56 -0
- package/plugin/contracts/plan-candidate.schema.json +103 -0
- package/plugin/contracts/plan-delta.schema.json +63 -0
- package/plugin/contracts/plan-patch.schema.json +116 -0
- package/plugin/contracts/plan-request.schema.json +108 -0
- package/plugin/contracts/plan.schema.json +313 -0
- package/plugin/contracts/profile.schema.json +154 -0
- package/plugin/contracts/response.schema.json +25 -0
- package/plugin/contracts/result.schema.json +410 -0
- package/plugin/dist/checkmate.js +13012 -0
- package/plugin/package.json +4 -0
- package/plugin/references/browser.md +35 -0
- package/plugin/references/http.md +30 -0
- package/plugin/references/workflow.md +122 -0
- package/plugin/skills/execute/SKILL.md +92 -0
- package/plugin/skills/plan/SKILL.md +94 -0
- package/plugin/skills/report/SKILL.md +28 -0
- package/plugin/skills/revise/SKILL.md +43 -0
- package/plugin/skills/setup/SKILL.md +82 -0
- package/plugin/skills/status/SKILL.md +20 -0
- package/plugin/skills/ui/SKILL.md +26 -0
- package/plugin/src/actor.ts +21 -0
- package/plugin/src/cli.ts +1133 -0
- package/plugin/src/contracts.ts +342 -0
- package/plugin/src/index.ts +52 -0
- package/plugin/src/plans.ts +1028 -0
- package/plugin/src/render.ts +544 -0
- package/plugin/src/runs.ts +868 -0
- package/plugin/src/store.ts +384 -0
- package/plugin/src/targets.ts +205 -0
- package/plugin/src/types.ts +319 -0
- package/plugin/src/ui/assets/client.js +501 -0
- package/plugin/src/ui/assets/favicon.svg +1 -0
- package/plugin/src/ui/assets/fonts/inter-OFL.txt +93 -0
- package/plugin/src/ui/assets/fonts/inter.woff2 +0 -0
- package/plugin/src/ui/assets/fonts/jetbrains-mono-OFL.txt +93 -0
- package/plugin/src/ui/assets/fonts/jetbrains-mono.woff2 +0 -0
- package/plugin/src/ui/assets/fonts/space-grotesk-OFL.txt +93 -0
- package/plugin/src/ui/assets/fonts/space-grotesk.woff2 +0 -0
- package/plugin/src/ui/assets/style.css +1926 -0
- package/plugin/src/ui/edit.ts +305 -0
- package/plugin/src/ui/forms.ts +209 -0
- package/plugin/src/ui/html.ts +130 -0
- package/plugin/src/ui/layout.ts +198 -0
- package/plugin/src/ui/lists.ts +645 -0
- package/plugin/src/ui/plan.ts +577 -0
- package/plugin/src/ui/run.ts +489 -0
- package/plugin/src/ui/server.ts +684 -0
- package/plugin/src/validators.d.ts +13 -0
- package/plugin/src/validators.js +1 -0
- package/plugin/src/views.ts +839 -0
- package/bin/checkmate.js +0 -13
- package/dist/ai/client.d.ts +0 -64
- package/dist/ai/client.d.ts.map +0 -1
- package/dist/ai/client.js +0 -313
- package/dist/ai/client.js.map +0 -1
- package/dist/ai/message-handler.d.ts +0 -9
- package/dist/ai/message-handler.d.ts.map +0 -1
- package/dist/ai/message-handler.js +0 -50
- package/dist/ai/message-handler.js.map +0 -1
- package/dist/ai/message-history.d.ts +0 -17
- package/dist/ai/message-history.d.ts.map +0 -1
- package/dist/ai/message-history.js +0 -45
- package/dist/ai/message-history.js.map +0 -1
- package/dist/ai/prompts.d.ts +0 -4
- package/dist/ai/prompts.d.ts.map +0 -1
- package/dist/ai/prompts.js +0 -24
- package/dist/ai/prompts.js.map +0 -1
- package/dist/ai/rate-limit-policy.d.ts +0 -9
- package/dist/ai/rate-limit-policy.d.ts.map +0 -1
- package/dist/ai/rate-limit-policy.js +0 -34
- package/dist/ai/rate-limit-policy.js.map +0 -1
- package/dist/ai/tool-response-handler.d.ts +0 -16
- package/dist/ai/tool-response-handler.d.ts.map +0 -1
- package/dist/ai/tool-response-handler.js +0 -85
- package/dist/ai/tool-response-handler.js.map +0 -1
- package/dist/ai/turn-processor.d.ts +0 -34
- package/dist/ai/turn-processor.d.ts.map +0 -1
- package/dist/ai/turn-processor.js +0 -107
- package/dist/ai/turn-processor.js.map +0 -1
- package/dist/api/allocate-run-identity.d.ts +0 -8
- package/dist/api/allocate-run-identity.d.ts.map +0 -1
- package/dist/api/allocate-run-identity.js +0 -10
- package/dist/api/allocate-run-identity.js.map +0 -1
- package/dist/api/execute-prepared-run.d.ts +0 -22
- package/dist/api/execute-prepared-run.d.ts.map +0 -1
- package/dist/api/execute-prepared-run.js +0 -184
- package/dist/api/execute-prepared-run.js.map +0 -1
- package/dist/api/index.d.ts +0 -25
- package/dist/api/index.d.ts.map +0 -1
- package/dist/api/index.js +0 -69
- package/dist/api/index.js.map +0 -1
- package/dist/api/prepare-run.d.ts +0 -44
- package/dist/api/prepare-run.d.ts.map +0 -1
- package/dist/api/prepare-run.js +0 -261
- package/dist/api/prepare-run.js.map +0 -1
- package/dist/cli/diagnostic-relay.d.ts +0 -6
- package/dist/cli/diagnostic-relay.d.ts.map +0 -1
- package/dist/cli/diagnostic-relay.js +0 -6
- package/dist/cli/diagnostic-relay.js.map +0 -1
- package/dist/cli/main.d.ts +0 -21
- package/dist/cli/main.d.ts.map +0 -1
- package/dist/cli/main.js +0 -166
- package/dist/cli/main.js.map +0 -1
- package/dist/cli/protocol.d.ts +0 -57
- package/dist/cli/protocol.d.ts.map +0 -1
- package/dist/cli/protocol.js +0 -116
- package/dist/cli/protocol.js.map +0 -1
- package/dist/cli/reconcile-result.d.ts +0 -13
- package/dist/cli/reconcile-result.d.ts.map +0 -1
- package/dist/cli/reconcile-result.js +0 -300
- package/dist/cli/reconcile-result.js.map +0 -1
- package/dist/cli/run-parent.d.ts +0 -37
- package/dist/cli/run-parent.d.ts.map +0 -1
- package/dist/cli/run-parent.js +0 -491
- package/dist/cli/run-parent.js.map +0 -1
- package/dist/cli/signals.d.ts +0 -36
- package/dist/cli/signals.d.ts.map +0 -1
- package/dist/cli/signals.js +0 -85
- package/dist/cli/signals.js.map +0 -1
- package/dist/cli/static-commands.d.ts +0 -11
- package/dist/cli/static-commands.d.ts.map +0 -1
- package/dist/cli/static-commands.js +0 -83
- package/dist/cli/static-commands.js.map +0 -1
- package/dist/cli/worker-stream-guard.d.ts +0 -20
- package/dist/cli/worker-stream-guard.d.ts.map +0 -1
- package/dist/cli/worker-stream-guard.js +0 -41
- package/dist/cli/worker-stream-guard.js.map +0 -1
- package/dist/cli/worker.d.ts +0 -3
- package/dist/cli/worker.d.ts.map +0 -1
- package/dist/cli/worker.js +0 -111
- package/dist/cli/worker.js.map +0 -1
- package/dist/config/ingestion.d.ts +0 -58
- package/dist/config/ingestion.d.ts.map +0 -1
- package/dist/config/ingestion.js +0 -283
- package/dist/config/ingestion.js.map +0 -1
- package/dist/config/manifest.d.ts +0 -20
- package/dist/config/manifest.d.ts.map +0 -1
- package/dist/config/manifest.js +0 -91
- package/dist/config/manifest.js.map +0 -1
- package/dist/config/model-egress.d.ts +0 -10
- package/dist/config/model-egress.d.ts.map +0 -1
- package/dist/config/model-egress.js +0 -62
- package/dist/config/model-egress.js.map +0 -1
- package/dist/config/package-resolution.d.ts +0 -4
- package/dist/config/package-resolution.d.ts.map +0 -1
- package/dist/config/package-resolution.js +0 -24
- package/dist/config/package-resolution.js.map +0 -1
- package/dist/config/policy.d.ts +0 -44
- package/dist/config/policy.d.ts.map +0 -1
- package/dist/config/policy.js +0 -141
- package/dist/config/policy.js.map +0 -1
- package/dist/config/record.d.ts +0 -4
- package/dist/config/record.d.ts.map +0 -1
- package/dist/config/record.js +0 -10
- package/dist/config/record.js.map +0 -1
- package/dist/config/secrets.d.ts +0 -11
- package/dist/config/secrets.d.ts.map +0 -1
- package/dist/config/secrets.js +0 -42
- package/dist/config/secrets.js.map +0 -1
- package/dist/contracts/diagnostics.d.ts +0 -4
- package/dist/contracts/diagnostics.d.ts.map +0 -1
- package/dist/contracts/diagnostics.js +0 -31
- package/dist/contracts/diagnostics.js.map +0 -1
- package/dist/contracts/serialize.d.ts +0 -2
- package/dist/contracts/serialize.d.ts.map +0 -1
- package/dist/contracts/serialize.js +0 -90
- package/dist/contracts/serialize.js.map +0 -1
- package/dist/contracts/types.d.ts +0 -316
- package/dist/contracts/types.d.ts.map +0 -1
- package/dist/contracts/types.js +0 -74
- package/dist/contracts/types.js.map +0 -1
- package/dist/contracts/validator.d.ts +0 -8
- package/dist/contracts/validator.d.ts.map +0 -1
- package/dist/contracts/validator.js +0 -71
- package/dist/contracts/validator.js.map +0 -1
- package/dist/driver.d.ts +0 -97
- package/dist/driver.d.ts.map +0 -1
- package/dist/driver.js +0 -24
- package/dist/driver.js.map +0 -1
- package/dist/drivers/descriptor.d.ts +0 -15
- package/dist/drivers/descriptor.d.ts.map +0 -1
- package/dist/drivers/descriptor.js +0 -122
- package/dist/drivers/descriptor.js.map +0 -1
- package/dist/drivers/loader.d.ts +0 -18
- package/dist/drivers/loader.d.ts.map +0 -1
- package/dist/drivers/loader.js +0 -97
- package/dist/drivers/loader.js.map +0 -1
- package/dist/drivers/web/checkmate-driver.json +0 -47
- package/dist/drivers/web/index.d.ts +0 -6
- package/dist/drivers/web/index.d.ts.map +0 -1
- package/dist/drivers/web/index.js +0 -27
- package/dist/drivers/web/index.js.map +0 -1
- package/dist/drivers/web/session.d.ts +0 -25
- package/dist/drivers/web/session.d.ts.map +0 -1
- package/dist/drivers/web/session.js +0 -132
- package/dist/drivers/web/session.js.map +0 -1
- package/dist/drivers/web/tools/network-request-recorder.d.ts +0 -46
- package/dist/drivers/web/tools/network-request-recorder.d.ts.map +0 -1
- package/dist/drivers/web/tools/network-request-recorder.js +0 -164
- package/dist/drivers/web/tools/network-request-recorder.js.map +0 -1
- package/dist/drivers/web/tools/screenshot-service.d.ts +0 -10
- package/dist/drivers/web/tools/screenshot-service.d.ts.map +0 -1
- package/dist/drivers/web/tools/screenshot-service.js +0 -23
- package/dist/drivers/web/tools/screenshot-service.js.map +0 -1
- package/dist/drivers/web/tools/snapshot-filter/index.d.ts +0 -4
- package/dist/drivers/web/tools/snapshot-filter/index.d.ts.map +0 -1
- package/dist/drivers/web/tools/snapshot-filter/index.js +0 -4
- package/dist/drivers/web/tools/snapshot-filter/index.js.map +0 -1
- package/dist/drivers/web/tools/snapshot-filter/semantic-scorer.d.ts +0 -15
- package/dist/drivers/web/tools/snapshot-filter/semantic-scorer.d.ts.map +0 -1
- package/dist/drivers/web/tools/snapshot-filter/semantic-scorer.js +0 -99
- package/dist/drivers/web/tools/snapshot-filter/semantic-scorer.js.map +0 -1
- package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.d.ts +0 -5
- package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.d.ts.map +0 -1
- package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.js +0 -56
- package/dist/drivers/web/tools/snapshot-filter/snapshot-filter.js.map +0 -1
- package/dist/drivers/web/tools/snapshot-filter/tree-reconstructor.d.ts +0 -3
- package/dist/drivers/web/tools/snapshot-filter/tree-reconstructor.d.ts.map +0 -1
- package/dist/drivers/web/tools/snapshot-filter/tree-reconstructor.js +0 -85
- package/dist/drivers/web/tools/snapshot-filter/tree-reconstructor.js.map +0 -1
- package/dist/drivers/web/tools/snapshot-service.d.ts +0 -31
- package/dist/drivers/web/tools/snapshot-service.d.ts.map +0 -1
- package/dist/drivers/web/tools/snapshot-service.js +0 -96
- package/dist/drivers/web/tools/snapshot-service.js.map +0 -1
- package/dist/drivers/web/tools/tool.d.ts +0 -76
- package/dist/drivers/web/tools/tool.d.ts.map +0 -1
- package/dist/drivers/web/tools/tool.js +0 -562
- package/dist/drivers/web/tools/tool.js.map +0 -1
- package/dist/drivers/web/tools/transient-state-tracker.d.ts +0 -26
- package/dist/drivers/web/tools/transient-state-tracker.d.ts.map +0 -1
- package/dist/drivers/web/tools/transient-state-tracker.js +0 -301
- package/dist/drivers/web/tools/transient-state-tracker.js.map +0 -1
- package/dist/drivers/web/tools/types.d.ts +0 -11
- package/dist/drivers/web/tools/types.d.ts.map +0 -1
- package/dist/drivers/web/tools/types.js +0 -2
- package/dist/drivers/web/tools/types.js.map +0 -1
- package/dist/evidence/atomic-file.d.ts +0 -23
- package/dist/evidence/atomic-file.d.ts.map +0 -1
- package/dist/evidence/atomic-file.js +0 -104
- package/dist/evidence/atomic-file.js.map +0 -1
- package/dist/evidence/layout.d.ts +0 -30
- package/dist/evidence/layout.d.ts.map +0 -1
- package/dist/evidence/layout.js +0 -152
- package/dist/evidence/layout.js.map +0 -1
- package/dist/evidence/retention.d.ts +0 -5
- package/dist/evidence/retention.d.ts.map +0 -1
- package/dist/evidence/retention.js +0 -10
- package/dist/evidence/retention.js.map +0 -1
- package/dist/evidence/store.d.ts +0 -101
- package/dist/evidence/store.d.ts.map +0 -1
- package/dist/evidence/store.js +0 -375
- package/dist/evidence/store.js.map +0 -1
- package/dist/evidence/terminal-finalizer.d.ts +0 -19
- package/dist/evidence/terminal-finalizer.d.ts.map +0 -1
- package/dist/evidence/terminal-finalizer.js +0 -56
- package/dist/evidence/terminal-finalizer.js.map +0 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -12
- package/dist/index.js.map +0 -1
- package/dist/logging/invocation-logger.d.ts +0 -4
- package/dist/logging/invocation-logger.d.ts.map +0 -1
- package/dist/logging/invocation-logger.js +0 -25
- package/dist/logging/invocation-logger.js.map +0 -1
- package/dist/logging/level-logger.d.ts +0 -11
- package/dist/logging/level-logger.d.ts.map +0 -1
- package/dist/logging/level-logger.js +0 -82
- package/dist/logging/level-logger.js.map +0 -1
- package/dist/logging/types.d.ts +0 -8
- package/dist/logging/types.d.ts.map +0 -1
- package/dist/logging/types.js +0 -7
- package/dist/logging/types.js.map +0 -1
- package/dist/redaction/diagnostic-sanitizer.d.ts +0 -7
- package/dist/redaction/diagnostic-sanitizer.d.ts.map +0 -1
- package/dist/redaction/diagnostic-sanitizer.js +0 -42
- package/dist/redaction/diagnostic-sanitizer.js.map +0 -1
- package/dist/redaction/redactor.d.ts +0 -40
- package/dist/redaction/redactor.d.ts.map +0 -1
- package/dist/redaction/redactor.js +0 -176
- package/dist/redaction/redactor.js.map +0 -1
- package/dist/redaction/scrub.d.ts +0 -29
- package/dist/redaction/scrub.d.ts.map +0 -1
- package/dist/redaction/scrub.js +0 -54
- package/dist/redaction/scrub.js.map +0 -1
- package/dist/runtime/config.d.ts +0 -16
- package/dist/runtime/config.d.ts.map +0 -1
- package/dist/runtime/config.js +0 -2
- package/dist/runtime/config.js.map +0 -1
- package/dist/runtime/driver-boundary.d.ts +0 -16
- package/dist/runtime/driver-boundary.d.ts.map +0 -1
- package/dist/runtime/driver-boundary.js +0 -71
- package/dist/runtime/driver-boundary.js.map +0 -1
- package/dist/runtime/driver-session.d.ts +0 -9
- package/dist/runtime/driver-session.d.ts.map +0 -1
- package/dist/runtime/driver-session.js +0 -64
- package/dist/runtime/driver-session.js.map +0 -1
- package/dist/runtime/internal-step-evidence.d.ts +0 -30
- package/dist/runtime/internal-step-evidence.d.ts.map +0 -1
- package/dist/runtime/internal-step-evidence.js +0 -82
- package/dist/runtime/internal-step-evidence.js.map +0 -1
- package/dist/runtime/result-adapter.d.ts +0 -9
- package/dist/runtime/result-adapter.d.ts.map +0 -1
- package/dist/runtime/result-adapter.js +0 -77
- package/dist/runtime/result-adapter.js.map +0 -1
- package/dist/runtime/runner.d.ts +0 -43
- package/dist/runtime/runner.d.ts.map +0 -1
- package/dist/runtime/runner.js +0 -72
- package/dist/runtime/runner.js.map +0 -1
- package/dist/runtime/scenario-control.d.ts +0 -40
- package/dist/runtime/scenario-control.d.ts.map +0 -1
- package/dist/runtime/scenario-control.js +0 -94
- package/dist/runtime/scenario-control.js.map +0 -1
- package/dist/runtime/scenario-runner.d.ts +0 -41
- package/dist/runtime/scenario-runner.d.ts.map +0 -1
- package/dist/runtime/scenario-runner.js +0 -274
- package/dist/runtime/scenario-runner.js.map +0 -1
- package/dist/runtime/scenario-state.d.ts +0 -55
- package/dist/runtime/scenario-state.d.ts.map +0 -1
- package/dist/runtime/scenario-state.js +0 -128
- package/dist/runtime/scenario-state.js.map +0 -1
- package/dist/runtime/step-execution.d.ts +0 -27
- package/dist/runtime/step-execution.d.ts.map +0 -1
- package/dist/runtime/step-execution.js +0 -143
- package/dist/runtime/step-execution.js.map +0 -1
- package/dist/runtime/text.d.ts +0 -10
- package/dist/runtime/text.d.ts.map +0 -1
- package/dist/runtime/text.js +0 -25
- package/dist/runtime/text.js.map +0 -1
- package/dist/runtime/types.d.ts +0 -53
- package/dist/runtime/types.d.ts.map +0 -1
- package/dist/runtime/types.js +0 -2
- package/dist/runtime/types.js.map +0 -1
- package/dist/runtime/usage-tracker.d.ts +0 -37
- package/dist/runtime/usage-tracker.d.ts.map +0 -1
- package/dist/runtime/usage-tracker.js +0 -110
- package/dist/runtime/usage-tracker.js.map +0 -1
- package/dist/tools/define-agent-tool.d.ts +0 -20
- package/dist/tools/define-agent-tool.d.ts.map +0 -1
- package/dist/tools/define-agent-tool.js +0 -30
- package/dist/tools/define-agent-tool.js.map +0 -1
- package/dist/tools/dispatcher.d.ts +0 -19
- package/dist/tools/dispatcher.d.ts.map +0 -1
- package/dist/tools/dispatcher.js +0 -91
- package/dist/tools/dispatcher.js.map +0 -1
- package/dist/tools/loop-detector.d.ts +0 -27
- package/dist/tools/loop-detector.d.ts.map +0 -1
- package/dist/tools/loop-detector.js +0 -76
- package/dist/tools/loop-detector.js.map +0 -1
- package/dist/tools/registry.d.ts +0 -19
- package/dist/tools/registry.d.ts.map +0 -1
- package/dist/tools/registry.js +0 -54
- package/dist/tools/registry.js.map +0 -1
- package/dist/tools/step/result-tool.d.ts +0 -7
- package/dist/tools/step/result-tool.d.ts.map +0 -1
- package/dist/tools/step/result-tool.js +0 -34
- package/dist/tools/step/result-tool.js.map +0 -1
- package/dist/tools/tool-contract.d.ts +0 -3
- package/dist/tools/tool-contract.d.ts.map +0 -1
- package/dist/tools/tool-contract.js +0 -2
- package/dist/tools/tool-contract.js.map +0 -1
- package/dist/tools/types.d.ts +0 -210
- package/dist/tools/types.d.ts.map +0 -1
- package/dist/tools/types.js +0 -4
- package/dist/tools/types.js.map +0 -1
- package/docs/CLI.md +0 -59
- package/docs/CONFIGURATION.md +0 -105
- package/docs/DRIVERS.md +0 -79
- package/docs/EVIDENCE.md +0 -64
- package/schemas/checkmate-config.v1.json +0 -176
- package/schemas/describe-result.v1.json +0 -414
- package/schemas/driver-descriptor.v1.json +0 -66
- package/schemas/run-request.v1.json +0 -67
- package/schemas/run-result.v1.json +0 -333
- package/schemas/validation-result.v1.json +0 -86
package/README.md
CHANGED
|
@@ -1,294 +1,91 @@
|
|
|
1
1
|
#### □ □ ■ □
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
# Checkmate
|
|
4
|
+
|
|
5
|
+
### The QA system of record for an agent software factory.
|
|
4
6
|
|
|
5
7
|
[](https://www.npmjs.com/package/@xoxoai/checkmate)
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
It turns a ticket into executable requirements, finds the gaps, drives test runs, and keeps the evidence and every decision in one auditable database. The factory runs the agents and builds the code. Checkmate keeps the record that they all read.
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
<img src="https://raw.githubusercontent.com/dawiddiwad/checkmate/v0.7.1/docs/img/onboarding.gif" alt="One ticket in two synced views. Top: a ring with four stations, the planner and the oracle on the top edge, the factory and QA on the bottom edge, the Checkmate record in the centre, and a human badge for the review UI below. An amber path on the left edge goes from QA back to the planner: new gaps or a plan change give a new revision. Below: the same steps on a swimlane timeline with lanes for the planner, the oracle, QA, and the factory, and a Checkmate record lane at the bottom. Iteration 1: the planner writes plan@1 with open gaps G1 to G3, the oracle answers them, the planner writes plan@2, and the oracle approves it. An early QA run fails three of four tests, with defects F1 to F3 and run gap G4. Iteration 2: the factory builds b2, and QA retests: three tests pass and defect F4 is found. A human edits the plan in the review UI to add G4 as plan@3, the oracle answers G4, the planner writes plan@4, and the oracle approves it. Iteration 3: the factory builds c3, QA retests and all four tests pass, and the oracle accepts the result. The animation ends with solo mode in Claude Code." width="100%"/>
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
The **oracle** answers gaps, approves plans, and accepts results. It is a product-owner agent or a human.<br/>
|
|
14
|
+
Checkmate does not start, schedule, or message agents, and it does not change code. Your factory does.
|
|
12
15
|
|
|
13
|
-
##
|
|
16
|
+
## Actors
|
|
14
17
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
| Role | What it does | What it writes to the record |
|
|
19
|
+
| ------- | --------------------------------------------------------------- | ------------------------------------------- |
|
|
20
|
+
| Planner | Turns a ticket into tests. Records the gaps. | Plan revisions and gaps |
|
|
21
|
+
| Oracle | Answers gaps. Approves plans. Accepts results. | Decisions |
|
|
22
|
+
| QA | Runs the tests, early and again on each new build. | Runs, evidence, defects, and new gaps |
|
|
23
|
+
| Factory | Runs the agents and their sandboxes. Builds and fixes the code. | Only what its commands record, such as runs |
|
|
18
24
|
|
|
19
|
-
|
|
25
|
+
A human can make the oracle's decisions at any time in the review UI.
|
|
20
26
|
|
|
21
|
-
|
|
27
|
+
## Highlights
|
|
22
28
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
"driver": {
|
|
29
|
-
"id": "web",
|
|
30
|
-
"target": {
|
|
31
|
-
"baseUrl": "https://staging.example.test"
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
"policy": "ci",
|
|
35
|
-
"steps": [
|
|
36
|
-
{
|
|
37
|
-
"id": "start checkout",
|
|
38
|
-
"action": "Add a product to the cart",
|
|
39
|
-
"expect": "The checkout page is displayed"
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
"id": "apply promo",
|
|
43
|
-
"action": "Apply promotion code SPRING25",
|
|
44
|
-
"expect": "The order total is reduced by 25%"
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
"id": "verify total",
|
|
48
|
-
"action": "Proceed to the payment step",
|
|
49
|
-
"expect": "The order total reflects the applied promotion"
|
|
50
|
-
}
|
|
51
|
-
]
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
```
|
|
29
|
+
- **Shared QA record.** Everything lives in `.checkmate/checkmate.db`. Payloads go through stdin, no temporary files.
|
|
30
|
+
- **Built for a factory.** `plan open` takes `--objective` and `--source`. Early runs pick the ready tests. Gaps found during a run go into the plan with `gap answer` or `plan adopt-gaps`. Small edits use `plan edit --patch`. A retest replaces the earlier run in the inbox.
|
|
31
|
+
- **The caller is the Oracle.** Policy `return_to_oracle`, startup owner `factory`, and the assertion field `checkKind`.
|
|
32
|
+
- **The review UI inside the plugin.** No npm install is needed for `/checkmate:ui`. Lists are paged, sorted, and filtered as you type. Plans can be edited, and reports download as HTML, Markdown, or JSON.
|
|
33
|
+
- **Aware of the caller's harness tools.** A target lists the CLI tools, MCP servers, and skills that the factory provides. Claude Code still owns the permissions.
|
|
55
34
|
|
|
56
|
-
|
|
35
|
+
## The review UI
|
|
57
36
|
|
|
58
|
-
|
|
59
|
-
checkmate run scenario.json
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
Checkmate writes one JSON result to stdout. Outcomes distinguish application, model, infrastructure, and invalid-invocation failures.
|
|
37
|
+
<img src="https://raw.githubusercontent.com/dawiddiwad/checkmate/a5a2c17f7014a95563758b19258f19c7298d355a/docs/img/ui/inbox.jpg" alt="Inbox with a plan gap, a gap from a run, a plan to approve, and a result to accept" width="100%"/>
|
|
63
38
|
|
|
64
39
|
<details>
|
|
65
|
-
<summary>
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
{
|
|
71
|
-
"kind": "run-result",
|
|
72
|
-
"schemaVersion": 1,
|
|
73
|
-
"runId": "0123456789abcdef",
|
|
74
|
-
"scenarioId": "checkout spring promo",
|
|
75
|
-
"status": "passed",
|
|
76
|
-
"category": "passed",
|
|
77
|
-
"reason": "scenario-complete",
|
|
78
|
-
"targetMutation": "possibly-mutated",
|
|
79
|
-
"startedAt": "2026-09-04T12:00:00.000Z",
|
|
80
|
-
"durationMs": 12600,
|
|
81
|
-
"driver": { "id": "web", "contractVersion": 1 },
|
|
82
|
-
"policy": {
|
|
83
|
-
"id": "ci",
|
|
84
|
-
"effectiveLimits": {
|
|
85
|
-
"scenarioTimeoutMs": 180000,
|
|
86
|
-
"stepTimeoutMs": 120000,
|
|
87
|
-
"turnsPerStep": 20,
|
|
88
|
-
"requestTimeoutMs": 60000,
|
|
89
|
-
"maxRetries": 3,
|
|
90
|
-
"loopMaxRepetitions": 5,
|
|
91
|
-
"cleanupTimeoutMs": 10000,
|
|
92
|
-
"budgetTokens": 200000
|
|
93
|
-
}
|
|
94
|
-
},
|
|
95
|
-
"usage": {
|
|
96
|
-
"promptTokens": 3600,
|
|
97
|
-
"cachedPromptTokens": 1200,
|
|
98
|
-
"completionTokens": 300,
|
|
99
|
-
"totalTokens": 3900,
|
|
100
|
-
"state": "complete"
|
|
101
|
-
},
|
|
102
|
-
"steps": [
|
|
103
|
-
{
|
|
104
|
-
"id": "start checkout",
|
|
105
|
-
"status": "passed",
|
|
106
|
-
"category": "app",
|
|
107
|
-
"reason": "met-expectation",
|
|
108
|
-
"actual": "The checkout page displays one product with a $40 order total.",
|
|
109
|
-
"turns": 3,
|
|
110
|
-
"durationMs": 4000,
|
|
111
|
-
"usage": { "promptTokens": 1200, "cachedPromptTokens": 400, "completionTokens": 100, "totalTokens": 1300 },
|
|
112
|
-
"toolCalls": [
|
|
113
|
-
{
|
|
114
|
-
"turn": 1,
|
|
115
|
-
"driverId": "web",
|
|
116
|
-
"name": "browser_click_or_hover",
|
|
117
|
-
"arguments": { "ref": "e12", "name": "Add to cart", "hover": false, "goal": "Add a product to the cart" },
|
|
118
|
-
"status": "ok"
|
|
119
|
-
},
|
|
120
|
-
{
|
|
121
|
-
"turn": 2,
|
|
122
|
-
"driverId": "web",
|
|
123
|
-
"name": "browser_click_or_hover",
|
|
124
|
-
"arguments": { "ref": "e18", "name": "Checkout", "hover": false, "goal": "Open the checkout page" },
|
|
125
|
-
"status": "ok"
|
|
126
|
-
}
|
|
127
|
-
]
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
"id": "apply promo",
|
|
131
|
-
"status": "passed",
|
|
132
|
-
"category": "app",
|
|
133
|
-
"reason": "met-expectation",
|
|
134
|
-
"actual": "SPRING25 is applied and the order total is reduced from $40 to $30.",
|
|
135
|
-
"turns": 3,
|
|
136
|
-
"durationMs": 4000,
|
|
137
|
-
"usage": { "promptTokens": 1200, "cachedPromptTokens": 400, "completionTokens": 100, "totalTokens": 1300 },
|
|
138
|
-
"toolCalls": [
|
|
139
|
-
{
|
|
140
|
-
"turn": 1,
|
|
141
|
-
"driverId": "web",
|
|
142
|
-
"name": "browser_type_or_select",
|
|
143
|
-
"arguments": {
|
|
144
|
-
"elements": [
|
|
145
|
-
{ "ref": "e24", "name": "Promotion code", "text": "SPRING25", "clear": true, "select": false }
|
|
146
|
-
],
|
|
147
|
-
"goal": "Enter the promotion code"
|
|
148
|
-
},
|
|
149
|
-
"status": "ok"
|
|
150
|
-
},
|
|
151
|
-
{
|
|
152
|
-
"turn": 2,
|
|
153
|
-
"driverId": "web",
|
|
154
|
-
"name": "browser_click_or_hover",
|
|
155
|
-
"arguments": { "ref": "e25", "name": "Apply", "hover": false, "goal": "Apply the promotion code" },
|
|
156
|
-
"status": "ok"
|
|
157
|
-
}
|
|
158
|
-
]
|
|
159
|
-
},
|
|
160
|
-
{
|
|
161
|
-
"id": "verify total",
|
|
162
|
-
"status": "passed",
|
|
163
|
-
"category": "app",
|
|
164
|
-
"reason": "met-expectation",
|
|
165
|
-
"actual": "The payment step displays the discounted order total of $30.",
|
|
166
|
-
"turns": 2,
|
|
167
|
-
"durationMs": 4000,
|
|
168
|
-
"usage": { "promptTokens": 1200, "cachedPromptTokens": 400, "completionTokens": 100, "totalTokens": 1300 },
|
|
169
|
-
"toolCalls": [
|
|
170
|
-
{
|
|
171
|
-
"turn": 1,
|
|
172
|
-
"driverId": "web",
|
|
173
|
-
"name": "browser_click_or_hover",
|
|
174
|
-
"arguments": {
|
|
175
|
-
"ref": "e30",
|
|
176
|
-
"name": "Continue to payment",
|
|
177
|
-
"hover": false,
|
|
178
|
-
"goal": "Verify the discounted total at the payment step"
|
|
179
|
-
},
|
|
180
|
-
"status": "ok"
|
|
181
|
-
}
|
|
182
|
-
]
|
|
183
|
-
}
|
|
184
|
-
],
|
|
185
|
-
"evidence": { "state": "complete", "references": [] },
|
|
186
|
-
"diagnostics": []
|
|
187
|
-
}
|
|
188
|
-
```
|
|
40
|
+
<summary>More screenshots</summary>
|
|
41
|
+
<img src="https://raw.githubusercontent.com/dawiddiwad/checkmate/a5a2c17f7014a95563758b19258f19c7298d355a/docs/img/ui/plans.jpg" alt="Plans list with the Loop column showing each plan's state and who it waits on" width="100%"/>
|
|
42
|
+
<img src="https://raw.githubusercontent.com/dawiddiwad/checkmate/a5a2c17f7014a95563758b19258f19c7298d355a/docs/img/ui/run-gap.jpg" alt="Run page with a defect, its evidence, and a new gap with the Answer and Bring into plan buttons" width="100%"/>
|
|
43
|
+
<img src="https://raw.githubusercontent.com/dawiddiwad/checkmate/a5a2c17f7014a95563758b19258f19c7298d355a/docs/img/ui/plan.jpg" alt="Plan page with the loop state pill: needs answers, waits on oracle" width="100%"/>
|
|
44
|
+
<img src="https://raw.githubusercontent.com/dawiddiwad/checkmate/a5a2c17f7014a95563758b19258f19c7298d355a/docs/img/ui/run.jpg" alt="Full run page with tests, evidence, the defect, the new gap, and coverage" width="100%"/>
|
|
189
45
|
|
|
190
46
|
</details>
|
|
191
47
|
|
|
192
|
-
##
|
|
193
|
-
|
|
194
|
-
Execution is configured through `checkmate.config.json`.
|
|
48
|
+
## Team mode
|
|
195
49
|
|
|
196
|
-
|
|
50
|
+
### QA CLI for your Factory
|
|
197
51
|
|
|
198
|
-
|
|
199
|
-
<summary>Example Configuration</summary>
|
|
52
|
+
Install the CLI with `npm i -g @xoxoai/checkmate@^0.7.0` and set up a target with `checkmate target open` and `checkmate delegate setup`. Then the factory opens a plan for each ticket, lets the planner write it, and reads what waits for the oracle:
|
|
200
53
|
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
"defaultPolicy": "ci",
|
|
206
|
-
"secretBindings": {
|
|
207
|
-
"openai-api-key": {
|
|
208
|
-
"source": "environment",
|
|
209
|
-
"name": "CHECKMATE_OPENAI_API_KEY"
|
|
210
|
-
}
|
|
211
|
-
},
|
|
212
|
-
"policies": {
|
|
213
|
-
"ci": {
|
|
214
|
-
"modelEgress": {
|
|
215
|
-
"provider": {
|
|
216
|
-
"id": "openai",
|
|
217
|
-
"model": "gpt-5-mini",
|
|
218
|
-
"apiKeyBinding": "openai-api-key"
|
|
219
|
-
},
|
|
220
|
-
"textRedaction": "on",
|
|
221
|
-
"allowOpaque": false,
|
|
222
|
-
"maxStepBytes": 1048576,
|
|
223
|
-
"maxMessageBytes": 262144
|
|
224
|
-
},
|
|
225
|
-
"bounds": {
|
|
226
|
-
"scenarioTimeoutMs": 180000,
|
|
227
|
-
"stepTimeoutMs": 120000,
|
|
228
|
-
"turnsPerStep": 20,
|
|
229
|
-
"requestTimeoutMs": 60000,
|
|
230
|
-
"maxRetries": 3,
|
|
231
|
-
"loopMaxRepetitions": 5,
|
|
232
|
-
"cleanupTimeoutMs": 10000,
|
|
233
|
-
"budgetTokens": 200000
|
|
234
|
-
},
|
|
235
|
-
"evidence": {
|
|
236
|
-
"retention": "retain-on-failure",
|
|
237
|
-
"redaction": "on",
|
|
238
|
-
"allowOpaque": false
|
|
239
|
-
},
|
|
240
|
-
"drivers": {
|
|
241
|
-
"web": {
|
|
242
|
-
"settings": {
|
|
243
|
-
"headless": true,
|
|
244
|
-
"logLevel": "off",
|
|
245
|
-
"logsAsEvidence": false,
|
|
246
|
-
"snapshotFilter": false
|
|
247
|
-
},
|
|
248
|
-
"tools": { "allowed": ["*"] }
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
},
|
|
253
|
-
"drivers": {
|
|
254
|
-
"web": {
|
|
255
|
-
"package": "@xoxoai/checkmate/driver-web",
|
|
256
|
-
"secrets": {}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
}
|
|
54
|
+
```sh
|
|
55
|
+
checkmate plan open checkout --target shop@1 --objective "Verify checkout totals." --source docs/checkout.md
|
|
56
|
+
checkmate delegate plan checkout --allow Read --allow Bash
|
|
57
|
+
checkmate inbox
|
|
260
58
|
```
|
|
261
59
|
|
|
262
|
-
|
|
60
|
+
To give requirements or plan tools, send the request as JSON on standard input ([Plan request](https://github.com/dawiddiwad/checkmate/blob/v0.7.1/docs/CONFIGURATION.md#plan-request)). `checkmate status checkout` says where the ticket is in the loop and who it waits on. Your factory can read the record with `status`, `inbox`, `log`, `query` (read-only), and `export --format json`. [The factory loop](https://github.com/dawiddiwad/checkmate/blob/v0.7.1/docs/WORKFLOW.md#factory-loop) shows each step, from the early red run to acceptance.
|
|
263
61
|
|
|
264
|
-
##
|
|
62
|
+
## Solo mode
|
|
265
63
|
|
|
266
|
-
|
|
64
|
+
### Plugin for your Claude Code
|
|
267
65
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
The included `web` driver is a simple reference implementation. Other domains can be integrated through the same public driver contract.
|
|
271
|
-
|
|
272
|
-
## Commands
|
|
66
|
+
You are the oracle. Test your own work, or verify the work of a teammate. Install the plugin with `/plugin marketplace add dawiddiwad/checkmate` and `/plugin install checkmate@checkmate`. It does not need the npm CLI.
|
|
273
67
|
|
|
274
68
|
```text
|
|
275
|
-
checkmate
|
|
276
|
-
checkmate
|
|
277
|
-
checkmate
|
|
278
|
-
checkmate
|
|
279
|
-
checkmate --version
|
|
69
|
+
/checkmate:setup shop at http://127.0.0.1:4173, browser, operations read_catalog and create_order
|
|
70
|
+
/checkmate:plan checkout for shop@1: verify checkout totals from docs/checkout.md
|
|
71
|
+
/checkmate:ui
|
|
72
|
+
/checkmate:status checkout
|
|
280
73
|
```
|
|
281
74
|
|
|
282
|
-
|
|
75
|
+
[The full path in Claude Code](https://github.com/dawiddiwad/checkmate/blob/v0.7.1/docs/WORKFLOW.md#in-claude-code): setup, plan, review, revise, execute, and report.
|
|
76
|
+
|
|
77
|
+
Both modes need Claude Code and Node.js 24.12.0 or later. Team mode also needs a logged-in `claude` command. For browser tests, install Playwright CLI: `npm i -g @playwright/cli`.
|
|
283
78
|
|
|
284
79
|
## Docs
|
|
285
80
|
|
|
286
|
-
[
|
|
287
|
-
[
|
|
288
|
-
[
|
|
289
|
-
[
|
|
290
|
-
[
|
|
81
|
+
- [Workflow](https://github.com/dawiddiwad/checkmate/blob/v0.7.1/docs/WORKFLOW.md): each stage and decision, the factory loop, and sub-agents
|
|
82
|
+
- [CLI](https://github.com/dawiddiwad/checkmate/blob/v0.7.1/docs/CLI.md): commands, statuses, delegated stages, and the review UI
|
|
83
|
+
- [Configuration](https://github.com/dawiddiwad/checkmate/blob/v0.7.1/docs/CONFIGURATION.md): targets, plans, policies, runtime gaps, and the actor
|
|
84
|
+
- [Evidence and outcomes](https://github.com/dawiddiwad/checkmate/blob/v0.7.1/docs/EVIDENCE.md): assertions, evidence, outcomes, coverage, and reports
|
|
85
|
+
- [Validation](https://github.com/dawiddiwad/checkmate/blob/v0.7.1/docs/VALIDATION.md): what the tests and the live run check
|
|
86
|
+
- [Examples](https://github.com/dawiddiwad/checkmate/blob/v0.7.1/docs/examples/README.md): plans and runs exported from a live run
|
|
87
|
+
- [Development](https://github.com/dawiddiwad/checkmate/blob/v0.7.1/docs/DEVELOPMENT.md): build, test, release, and the media of this page
|
|
291
88
|
|
|
292
89
|
## License
|
|
293
90
|
|
|
294
|
-
[MIT](LICENSE)
|
|
91
|
+
[MIT](https://github.com/dawiddiwad/checkmate/blob/v0.7.1/LICENSE)
|