@b00dea/cockpit 0.0.0-bootstrap.0 → 0.1.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/CHANGELOG.md +375 -0
- package/LICENSE +21 -0
- package/README.md +21 -1
- package/bin/cockpit.mjs +33 -0
- package/cockpit.schema.json +2574 -0
- package/dist/autonomy.d.ts +44 -0
- package/dist/autonomy.js +156 -0
- package/dist/bounded-read.d.ts +14 -0
- package/dist/bounded-read.js +42 -0
- package/dist/browser/commands.d.ts +62 -0
- package/dist/browser/commands.js +349 -0
- package/dist/browser/package-paths.d.ts +1 -0
- package/dist/browser/package-paths.js +6 -0
- package/dist/browser/proxy.d.ts +22 -0
- package/dist/browser/proxy.js +37 -0
- package/dist/browser/runtime.d.ts +117 -0
- package/dist/browser/runtime.js +183 -0
- package/dist/browser/surfaces.d.ts +141 -0
- package/dist/browser/surfaces.js +556 -0
- package/dist/browser/ui-gate.d.ts +15 -0
- package/dist/browser/ui-gate.js +18 -0
- package/dist/cli-guard.d.ts +5 -0
- package/dist/cli-guard.js +71 -0
- package/dist/cli-main.d.ts +139 -0
- package/dist/cli-main.js +1405 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.js +16 -0
- package/dist/command-table.d.ts +113 -0
- package/dist/command-table.js +512 -0
- package/dist/config/load.d.ts +171 -0
- package/dist/config/load.js +345 -0
- package/dist/config/sibling-toml.d.ts +48 -0
- package/dist/config/sibling-toml.js +160 -0
- package/dist/config/surface-tools-toml.d.ts +9 -0
- package/dist/config/surface-tools-toml.js +37 -0
- package/dist/config/verified-write.d.ts +43 -0
- package/dist/config/verified-write.js +89 -0
- package/dist/diagnostics.d.ts +26 -0
- package/dist/diagnostics.js +335 -0
- package/dist/emit.d.ts +22 -0
- package/dist/emit.js +43 -0
- package/dist/entrypoint-kinds.d.ts +3 -0
- package/dist/entrypoint-kinds.js +11 -0
- package/dist/environment/application/destructive.d.ts +6 -0
- package/dist/environment/application/destructive.js +425 -0
- package/dist/environment/application/doctor.d.ts +89 -0
- package/dist/environment/application/doctor.js +235 -0
- package/dist/environment/application/guard.d.ts +43 -0
- package/dist/environment/application/guard.js +622 -0
- package/dist/environment/application/health.d.ts +134 -0
- package/dist/environment/application/health.js +379 -0
- package/dist/environment/application/lifecycle-context.d.ts +228 -0
- package/dist/environment/application/lifecycle-context.js +154 -0
- package/dist/environment/application/lifecycle-state.d.ts +25 -0
- package/dist/environment/application/lifecycle-state.js +201 -0
- package/dist/environment/application/lifecycle.d.ts +17 -0
- package/dist/environment/application/lifecycle.js +729 -0
- package/dist/environment/application/logs.d.ts +45 -0
- package/dist/environment/application/logs.js +127 -0
- package/dist/environment/application/setup.d.ts +129 -0
- package/dist/environment/application/setup.js +741 -0
- package/dist/environment/application/shared.d.ts +11 -0
- package/dist/environment/application/shared.js +61 -0
- package/dist/environment/claims.d.ts +389 -0
- package/dist/environment/claims.js +1709 -0
- package/dist/environment/codex-hook-trust.d.ts +11 -0
- package/dist/environment/codex-hook-trust.js +185 -0
- package/dist/environment/compose-environment.d.ts +1 -0
- package/dist/environment/compose-environment.js +6 -0
- package/dist/environment/compose-ownership.d.ts +21 -0
- package/dist/environment/compose-ownership.js +117 -0
- package/dist/environment/compose-topology.d.ts +117 -0
- package/dist/environment/compose-topology.js +413 -0
- package/dist/environment/contract.d.ts +489 -0
- package/dist/environment/contract.js +761 -0
- package/dist/environment/declaration.d.ts +14 -0
- package/dist/environment/declaration.js +39 -0
- package/dist/environment/destructive-composition.d.ts +29 -0
- package/dist/environment/destructive-composition.js +333 -0
- package/dist/environment/docker-daemon.d.ts +30 -0
- package/dist/environment/docker-daemon.js +78 -0
- package/dist/environment/docker-endpoint.d.ts +10 -0
- package/dist/environment/docker-endpoint.js +19 -0
- package/dist/environment/env-schema-observation.d.ts +46 -0
- package/dist/environment/env-schema-observation.js +241 -0
- package/dist/environment/evidence.d.ts +136 -0
- package/dist/environment/evidence.js +437 -0
- package/dist/environment/executable.d.ts +26 -0
- package/dist/environment/executable.js +167 -0
- package/dist/environment/generated-application/authorities.d.ts +5 -0
- package/dist/environment/generated-application/authorities.js +61 -0
- package/dist/environment/generated-application/bootstrap-skill.d.ts +16 -0
- package/dist/environment/generated-application/bootstrap-skill.js +328 -0
- package/dist/environment/generated-application/check.d.ts +13 -0
- package/dist/environment/generated-application/check.js +189 -0
- package/dist/environment/generated-application/custom-surface.d.ts +26 -0
- package/dist/environment/generated-application/custom-surface.js +289 -0
- package/dist/environment/generated-application/prepare.d.ts +29 -0
- package/dist/environment/generated-application/prepare.js +276 -0
- package/dist/environment/generated-application/publication.d.ts +33 -0
- package/dist/environment/generated-application/publication.js +547 -0
- package/dist/environment/generated-application/shared.d.ts +484 -0
- package/dist/environment/generated-application/shared.js +349 -0
- package/dist/environment/generated-application/surface-observation.d.ts +4 -0
- package/dist/environment/generated-application/surface-observation.js +69 -0
- package/dist/environment/generated-application/surface-outputs.d.ts +71 -0
- package/dist/environment/generated-application/surface-outputs.js +389 -0
- package/dist/environment/generated-application/surfaces.d.ts +3 -0
- package/dist/environment/generated-application/surfaces.js +699 -0
- package/dist/environment/generated-application/sync.d.ts +6 -0
- package/dist/environment/generated-application/sync.js +109 -0
- package/dist/environment/git-observation.d.ts +183 -0
- package/dist/environment/git-observation.js +544 -0
- package/dist/environment/health-composition.d.ts +11 -0
- package/dist/environment/health-composition.js +628 -0
- package/dist/environment/host-observation.d.ts +56 -0
- package/dist/environment/host-observation.js +52 -0
- package/dist/environment/identity.d.ts +48 -0
- package/dist/environment/identity.js +85 -0
- package/dist/environment/init-application.d.ts +308 -0
- package/dist/environment/init-application.js +697 -0
- package/dist/environment/install-policy-observation.d.ts +71 -0
- package/dist/environment/install-policy-observation.js +284 -0
- package/dist/environment/install-policy.d.ts +48 -0
- package/dist/environment/install-policy.js +96 -0
- package/dist/environment/instance.d.ts +33 -0
- package/dist/environment/instance.js +122 -0
- package/dist/environment/instruction-pointer.d.ts +19 -0
- package/dist/environment/instruction-pointer.js +144 -0
- package/dist/environment/lifecycle-composition.d.ts +29 -0
- package/dist/environment/lifecycle-composition.js +675 -0
- package/dist/environment/lifecycle-stage.d.ts +115 -0
- package/dist/environment/lifecycle-stage.js +398 -0
- package/dist/environment/lifecycle.d.ts +75 -0
- package/dist/environment/lifecycle.js +354 -0
- package/dist/environment/logs.d.ts +132 -0
- package/dist/environment/logs.js +519 -0
- package/dist/environment/observations.d.ts +46 -0
- package/dist/environment/observations.js +344 -0
- package/dist/environment/operator-application.d.ts +50 -0
- package/dist/environment/operator-application.js +155 -0
- package/dist/environment/ports.d.ts +182 -0
- package/dist/environment/ports.js +1205 -0
- package/dist/environment/posture-observation.d.ts +68 -0
- package/dist/environment/posture-observation.js +253 -0
- package/dist/environment/read-composition.d.ts +27 -0
- package/dist/environment/read-composition.js +352 -0
- package/dist/environment/readiness-composition.d.ts +38 -0
- package/dist/environment/readiness-composition.js +130 -0
- package/dist/environment/reclaim.d.ts +333 -0
- package/dist/environment/reclaim.js +1835 -0
- package/dist/environment/repository-identity.d.ts +13 -0
- package/dist/environment/repository-identity.js +108 -0
- package/dist/environment/runtime-measurement-record.d.ts +38 -0
- package/dist/environment/runtime-measurement-record.js +111 -0
- package/dist/environment/runtime-measurement.d.ts +27 -0
- package/dist/environment/runtime-measurement.js +224 -0
- package/dist/environment/runtime-probe-residue.d.ts +43 -0
- package/dist/environment/runtime-probe-residue.js +148 -0
- package/dist/environment/runtime-probe.d.ts +72 -0
- package/dist/environment/runtime-probe.js +725 -0
- package/dist/environment/runtime.d.ts +505 -0
- package/dist/environment/runtime.js +2335 -0
- package/dist/environment/seed.d.ts +16 -0
- package/dist/environment/seed.js +43 -0
- package/dist/environment/selftest-application.d.ts +86 -0
- package/dist/environment/selftest-application.js +713 -0
- package/dist/environment/sensitive.d.ts +3 -0
- package/dist/environment/sensitive.js +48 -0
- package/dist/environment/setup-observation.d.ts +62 -0
- package/dist/environment/setup-observation.js +1473 -0
- package/dist/environment/setup.d.ts +43 -0
- package/dist/environment/setup.js +176 -0
- package/dist/environment/sibling-instructions.d.ts +33 -0
- package/dist/environment/sibling-instructions.js +224 -0
- package/dist/environment/sibling-registration.d.ts +45 -0
- package/dist/environment/sibling-registration.js +538 -0
- package/dist/environment/state.d.ts +371 -0
- package/dist/environment/state.js +2013 -0
- package/dist/environment/templates.d.ts +140 -0
- package/dist/environment/templates.js +685 -0
- package/dist/environment/tool-registration.d.ts +9 -0
- package/dist/environment/tool-registration.js +96 -0
- package/dist/environment/upgrade-application.d.ts +19 -0
- package/dist/environment/upgrade-application.js +175 -0
- package/dist/environment-exec/execute.d.ts +102 -0
- package/dist/environment-exec/execute.js +1175 -0
- package/dist/environment-exec/libexec-program.d.ts +6 -0
- package/dist/environment-exec/libexec-program.js +22 -0
- package/dist/environment-exec/verified-digest.d.ts +4 -0
- package/dist/environment-exec/verified-digest.js +16 -0
- package/dist/exact-keys.d.ts +7 -0
- package/dist/exact-keys.js +15 -0
- package/dist/fix-catalogue.d.ts +32 -0
- package/dist/fix-catalogue.js +60 -0
- package/dist/freshness.d.ts +29 -0
- package/dist/freshness.js +75 -0
- package/dist/generated-environment/adopt.d.ts +16 -0
- package/dist/generated-environment/adopt.js +275 -0
- package/dist/generated-environment/command.d.ts +47 -0
- package/dist/generated-environment/command.js +75 -0
- package/dist/generated-environment/transaction.d.ts +186 -0
- package/dist/generated-environment/transaction.js +1770 -0
- package/dist/grading/evaluate.d.ts +71 -0
- package/dist/grading/evaluate.js +403 -0
- package/dist/grading/grade.d.ts +33 -0
- package/dist/grading/grade.js +57 -0
- package/dist/guards/evaluator.d.ts +113 -0
- package/dist/guards/evaluator.js +1226 -0
- package/dist/guards/harness-adapter.d.ts +17 -0
- package/dist/guards/harness-adapter.js +57 -0
- package/dist/guards/host.d.ts +8 -0
- package/dist/guards/host.js +10 -0
- package/dist/guards/invocation-parser.d.ts +66 -0
- package/dist/guards/invocation-parser.js +595 -0
- package/dist/guards/local-identity.d.ts +40 -0
- package/dist/guards/local-identity.js +123 -0
- package/dist/guards/policy-pin.d.ts +13 -0
- package/dist/guards/policy-pin.js +175 -0
- package/dist/guards/protected-locations.d.ts +62 -0
- package/dist/guards/protected-locations.js +461 -0
- package/dist/guards/read-only.d.ts +37 -0
- package/dist/guards/read-only.js +315 -0
- package/dist/init/command.d.ts +40 -0
- package/dist/init/command.js +310 -0
- package/dist/init/derive.d.ts +51 -0
- package/dist/init/derive.js +715 -0
- package/dist/init/draft.d.ts +138 -0
- package/dist/init/draft.js +1205 -0
- package/dist/init/render.d.ts +35 -0
- package/dist/init/render.js +82 -0
- package/dist/init/scaffold.d.ts +53 -0
- package/dist/init/scaffold.js +121 -0
- package/dist/invocation.d.ts +13 -0
- package/dist/invocation.js +20 -0
- package/dist/package-metadata.d.ts +9 -0
- package/dist/package-metadata.js +19 -0
- package/dist/readiness.d.ts +53 -0
- package/dist/readiness.js +88 -0
- package/dist/references/named.d.ts +24 -0
- package/dist/references/named.js +27 -0
- package/dist/refusal.d.ts +15 -0
- package/dist/refusal.js +7 -0
- package/dist/registry-derivation.d.ts +31 -0
- package/dist/registry-derivation.js +32 -0
- package/dist/registry-resolve/command.d.ts +47 -0
- package/dist/registry-resolve/command.js +226 -0
- package/dist/registry-resolve/registry.d.ts +68 -0
- package/dist/registry-resolve/registry.js +292 -0
- package/dist/registry-resolve/render-shell.d.ts +18 -0
- package/dist/registry-resolve/render-shell.js +36 -0
- package/dist/repair.d.ts +29 -0
- package/dist/repair.js +8 -0
- package/dist/schema-json.d.ts +1 -0
- package/dist/schema-json.js +177 -0
- package/dist/schema.d.ts +1322 -0
- package/dist/schema.js +934 -0
- package/dist/setup/command.d.ts +4 -0
- package/dist/setup/command.js +4 -0
- package/dist/sha256.d.ts +1 -0
- package/dist/sha256.js +4 -0
- package/dist/surfaces/adoption.d.ts +41 -0
- package/dist/surfaces/adoption.js +217 -0
- package/dist/surfaces/consumer-instructions.d.ts +20 -0
- package/dist/surfaces/consumer-instructions.js +43 -0
- package/dist/surfaces/contract.d.ts +42 -0
- package/dist/surfaces/contract.js +169 -0
- package/dist/surfaces/core-declarations.d.ts +24 -0
- package/dist/surfaces/core-declarations.js +79 -0
- package/dist/surfaces/development-markers.d.ts +1 -0
- package/dist/surfaces/development-markers.js +18 -0
- package/dist/surfaces/generator-adapter.d.ts +71 -0
- package/dist/surfaces/generator-adapter.js +809 -0
- package/dist/surfaces/harness-registry.d.ts +180 -0
- package/dist/surfaces/harness-registry.js +117 -0
- package/dist/surfaces/mcp.d.ts +95 -0
- package/dist/surfaces/mcp.js +186 -0
- package/dist/surfaces/merge.d.ts +30 -0
- package/dist/surfaces/merge.js +105 -0
- package/dist/surfaces/ownership.d.ts +190 -0
- package/dist/surfaces/ownership.js +795 -0
- package/dist/surfaces/projection.d.ts +136 -0
- package/dist/surfaces/projection.js +681 -0
- package/dist/surfaces/render.d.ts +118 -0
- package/dist/surfaces/render.js +633 -0
- package/dist/surfaces/restrictions.d.ts +130 -0
- package/dist/surfaces/restrictions.js +447 -0
- package/dist/surfaces/selftest.d.ts +162 -0
- package/dist/surfaces/selftest.js +393 -0
- package/dist/surfaces/skill-contract.d.ts +85 -0
- package/dist/surfaces/skill-contract.js +449 -0
- package/dist/surfaces/sync.d.ts +57 -0
- package/dist/surfaces/sync.js +164 -0
- package/dist/team-metadata.d.ts +41 -0
- package/dist/team-metadata.js +512 -0
- package/dist/testing/gates.d.ts +91 -0
- package/dist/testing/gates.js +182 -0
- package/dist/testing/hooks.d.ts +59 -0
- package/dist/testing/hooks.js +139 -0
- package/dist/testing/verdict.d.ts +29 -0
- package/dist/testing/verdict.js +62 -0
- package/dist/work-orders/application.d.ts +99 -0
- package/dist/work-orders/application.js +383 -0
- package/dist/work-orders/composition.d.ts +124 -0
- package/dist/work-orders/composition.js +1010 -0
- package/dist/work-orders/contract.d.ts +61 -0
- package/dist/work-orders/contract.js +122 -0
- package/dist/work-orders/store.d.ts +158 -0
- package/dist/work-orders/store.js +197 -0
- package/docs/README.md +65 -0
- package/docs/architecture.md +136 -0
- package/docs/capability-matrix.md +50 -0
- package/docs/cli-reference.md +599 -0
- package/docs/command-list.md +51 -0
- package/docs/compose-patterns.md +99 -0
- package/docs/concepts.md +171 -0
- package/docs/configuration-essentials.md +172 -0
- package/docs/configuration-reference.md +621 -0
- package/docs/environment.md +760 -0
- package/docs/extending.md +43 -0
- package/docs/faq.md +111 -0
- package/docs/getting-started.md +608 -0
- package/docs/harness-surfaces.md +433 -0
- package/docs/joining-a-team.md +76 -0
- package/docs/release-policy.md +49 -0
- package/docs/safety-and-autonomy.md +419 -0
- package/docs/troubleshooting.md +361 -0
- package/docs/tutorial.md +170 -0
- package/docs/work-and-browser.md +254 -0
- package/libexec/browser-operation.cjs +186 -0
- package/libexec/fence-marker.cjs +101 -0
- package/libexec/fence-marker.d.cts +24 -0
- package/libexec/fenced-group-runner.cjs +77 -0
- package/libexec/fenced-supervisor.cjs +137 -0
- package/libexec/generated-filesystem.cjs +731 -0
- package/libexec/install-filesystem.cjs +225 -0
- package/libexec/rulesync-generator.NOTICE.md +1112 -0
- package/libexec/rulesync-generator.cjs +743 -0
- package/libexec/surface-generator-worker.cjs +266 -0
- package/libexec/surface-output-reader.cjs +99 -0
- package/libexec/surface-scratch-cleanup.cjs +14 -0
- package/libexec/validate-harness-evidence.d.mts +183 -0
- package/libexec/validate-harness-evidence.mjs +1312 -0
- package/package.json +76 -1
- package/surfaces/README.md +33 -0
- package/surfaces/agents/evaluator.agent.md +76 -0
- package/surfaces/guards/bash-guard.sh +48 -0
- package/surfaces/guards/claude.adapter.json +25 -0
- package/surfaces/guards/codex.adapter.json +24 -0
- package/surfaces/guards/opencode.adapter.json +25 -0
- package/surfaces/references/browser.md +63 -0
- package/surfaces/references/test-data-and-personas.md +84 -0
- package/surfaces/references/testing-tiers.md +11 -0
- package/surfaces/skills/cockpit-browser.skill.md +54 -0
- package/surfaces/skills/cockpit-explain.skill.md +32 -0
- package/surfaces/skills/cockpit-fix.skill.md +37 -0
- package/surfaces/skills/cockpit-setup.skill.md +39 -0
- package/surfaces/skills/cockpit-work.skill.md +34 -0
- package/surfaces/skills/collection.json +5 -0
- package/surfaces/skills/procedures/explain.md +61 -0
- package/surfaces/skills/procedures/fix.md +81 -0
- package/surfaces/skills/procedures/setup.md +379 -0
- package/surfaces/skills/procedures/work.md +105 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Architecture and design
|
|
2
|
+
|
|
3
|
+
This page is for integrators and contributors who want the reasoning behind cockpit: the problem it
|
|
4
|
+
solves, the design decisions that follow, and where in the source to extend it. The fields and
|
|
5
|
+
commands themselves are in the generated [configuration reference](configuration-reference.md) and
|
|
6
|
+
[CLI reference](cli-reference.md).
|
|
7
|
+
|
|
8
|
+
## The problem cockpit solves
|
|
9
|
+
|
|
10
|
+
Agent work across several repositories of one product fails in predictable, mechanical ways:
|
|
11
|
+
|
|
12
|
+
1. **No shared environment.** Each agent sees one checkout. Nothing boots the product it is
|
|
13
|
+
changing, so "it works" means "it compiles".
|
|
14
|
+
2. **File access is not instruction.** Granting an agent a sibling directory does not tell it
|
|
15
|
+
what that repository is, how it is tested, or which commands are safe there.
|
|
16
|
+
3. **Guards do not carry across tools.** A hook written for one harness does nothing in another,
|
|
17
|
+
and each harness spells permissions differently.
|
|
18
|
+
4. **Environments collide.** Two agents on one machine fight over ports, volumes and the right to
|
|
19
|
+
stop the stack.
|
|
20
|
+
5. **Completion is self-reported.** The session that did the work also declares it done.
|
|
21
|
+
|
|
22
|
+
There are three ways to respond. A planning tool describes the work and leaves the environment
|
|
23
|
+
to you. A sandbox isolates the agent from your machine, and from the product. cockpit boots the
|
|
24
|
+
product the agent is editing, from the checkouts it is editing, and gives every harness the same
|
|
25
|
+
rules about it.
|
|
26
|
+
|
|
27
|
+
## Design decisions
|
|
28
|
+
|
|
29
|
+
### Two axes: mount and acquire
|
|
30
|
+
|
|
31
|
+
A sibling declares how the stack uses it (`mount`) separately from how it reaches disk
|
|
32
|
+
(`acquire`). Neither is derived from the other. Collapsing them produces a preflight that reports
|
|
33
|
+
healthy while the stack mounts the wrong checkout, or none.
|
|
34
|
+
|
|
35
|
+
### Configuration that parses does something
|
|
36
|
+
|
|
37
|
+
Every schema field is consumed by code. A field that is accepted and then ignored reads as a
|
|
38
|
+
control the next person relies on, so it is a defect. Where a harness offers no
|
|
39
|
+
mechanism for a restriction, cockpit emits nothing and records the feature as `unavailable`
|
|
40
|
+
rather than writing a setting that binds nothing.
|
|
41
|
+
|
|
42
|
+
### Generated files are committed and drift-checked
|
|
43
|
+
|
|
44
|
+
Generated surfaces and Compose files are written into your repository, committed, and compared
|
|
45
|
+
byte for byte by `cockpit check`. This sits between vendoring (copies that silently go stale) and
|
|
46
|
+
a hidden runtime dependency (nothing to review). You can read every line an agent will load, and
|
|
47
|
+
CI fails when a line changes without the configuration changing.
|
|
48
|
+
|
|
49
|
+
### TypeScript decides, shell runs the hooks
|
|
50
|
+
|
|
51
|
+
Configuration, validation, codegen, drift and state live in the TypeScript CLI, and every child
|
|
52
|
+
process goes through one executor. Guards and hooks stay in shell, because every harness invokes
|
|
53
|
+
them directly on each tool call and they must behave identically under all of them with no
|
|
54
|
+
interpreter start-up cost.
|
|
55
|
+
|
|
56
|
+
### Leases, locks and destruction
|
|
57
|
+
|
|
58
|
+
These rules came from failures on shared machines:
|
|
59
|
+
|
|
60
|
+
- **Ports are leased, not derived.** Two checkouts of one product would compute the same port from
|
|
61
|
+
the same configuration. A lease records who holds each port family.
|
|
62
|
+
- **Locks are directory creations.** Creating a directory either succeeds or fails atomically, and
|
|
63
|
+
a process that dies leaves the directory behind for inspection instead of a half-written file.
|
|
64
|
+
- **Unknown is not dead.** A lock or holder whose liveness cannot be established is reported, not
|
|
65
|
+
stolen. Age alone never justifies removing it.
|
|
66
|
+
- **Classification overrides intent.** Destructive commands act only on resources whose cockpit
|
|
67
|
+
labels and records match, so "just delete it" cannot be expressed. The question cockpit asks
|
|
68
|
+
is "can I account for everything I am about to destroy?", not "does this look dangerous?".
|
|
69
|
+
|
|
70
|
+
### Why the evaluator is independent
|
|
71
|
+
|
|
72
|
+
Self-assessment is overconfident: an agent that wrote the code also wrote the account of it. The
|
|
73
|
+
evaluator is a separate subagent that reruns the declared verification commands, grades each
|
|
74
|
+
acceptance criterion from that output, and may abstain when the output is not enough to decide. Abstention
|
|
75
|
+
is a valid result; it is what turns a likely false pass into a visible gap.
|
|
76
|
+
|
|
77
|
+
### Prior art
|
|
78
|
+
|
|
79
|
+
Spec and workflow tools also generate files into repositories. cockpit adds three things they
|
|
80
|
+
typically lack: a drift check against installed generated files, a `--dry-run` preview of every
|
|
81
|
+
write, and CLI and configuration references generated from the source so they cannot go stale.
|
|
82
|
+
|
|
83
|
+
## Non-goals
|
|
84
|
+
|
|
85
|
+
- **Not a planner.** cockpit does not decide what work to do. Pair it with a spec or workflow tool.
|
|
86
|
+
- **Not a sandbox.** It does not isolate an agent from your machine; see
|
|
87
|
+
[Safety and autonomy](safety-and-autonomy.md).
|
|
88
|
+
- **No telemetry.** The only network request cockpit makes itself is `doctor` reading the latest
|
|
89
|
+
published version from the npm registry, skipped when `CI` or `NO_UPDATE_NOTIFIER` is set.
|
|
90
|
+
- **Not a monorepo or build-system replacement.** It can manage one repository or several, but
|
|
91
|
+
delegates each repository's build and dependency graph to that repository's own tools.
|
|
92
|
+
- **No per-test containers.** One stack per checkout, shared across the agent's work.
|
|
93
|
+
|
|
94
|
+
## Processing path
|
|
95
|
+
|
|
96
|
+
Configuration is declared and loaded, the environment is observed, policy code decides, the
|
|
97
|
+
environment application orders the work, and the shared executor runs child processes.
|
|
98
|
+
Postchecks verify results before command handlers print them. The
|
|
99
|
+
[Cockpit evidence boundary](concepts.md#cockpit-evidence-boundary) applies at every step: a
|
|
100
|
+
parsed declaration is not an observation, a dispatched command is not a successful postcheck,
|
|
101
|
+
and a generated file does not show that its harness loaded it.
|
|
102
|
+
|
|
103
|
+
## Surface overlays
|
|
104
|
+
|
|
105
|
+
Use a [Cockpit surface overlay](concepts.md#cockpit-surface-overlay) for product-specific rules,
|
|
106
|
+
subagents, skills and hooks. Overlay merging belongs to `packages/cockpit/src/surfaces/merge.ts`;
|
|
107
|
+
rendering continues through the existing surface code, and publication stays within
|
|
108
|
+
[Cockpit generated ownership](concepts.md#cockpit-generated-ownership).
|
|
109
|
+
[Ownership and extension](harness-surfaces.md#ownership-and-extension) covers the `replaces` rule
|
|
110
|
+
and the review procedure.
|
|
111
|
+
|
|
112
|
+
## Guards
|
|
113
|
+
|
|
114
|
+
Extend policy in `packages/cockpit/src/guards/evaluator.ts`, then adapt its decision through the
|
|
115
|
+
per-harness adapters. Do not interpret guard policy in shell or rebuild it in a CLI
|
|
116
|
+
handler. A harness mechanism that has not been probed beside a deliberately broken control stays
|
|
117
|
+
`instructed` or `unavailable`; see [Capability states](harness-surfaces.md#capability-states).
|
|
118
|
+
|
|
119
|
+
## Runtime behavior
|
|
120
|
+
|
|
121
|
+
Add a public command to `packages/cockpit/src/command-table.ts`, bind it in
|
|
122
|
+
`packages/cockpit/src/cli.ts`, and order environment work through the environment application
|
|
123
|
+
(`packages/cockpit/src/environment/application/`). Every child process crosses
|
|
124
|
+
`packages/cockpit/src/environment-exec/execute.ts`; health and lifecycle verdicts stay in their
|
|
125
|
+
existing modules. Add a schema field only together with the code that consumes it.
|
|
126
|
+
|
|
127
|
+
The runtime sequence and recovery rules are in [Environment](environment.md). A new diagnostic
|
|
128
|
+
needs one actionable remedy in [Troubleshooting](troubleshooting.md).
|
|
129
|
+
|
|
130
|
+
## Harnesses
|
|
131
|
+
|
|
132
|
+
A custom harness declares one row for every feature, with the evidence described in
|
|
133
|
+
[Custom harnesses](harness-surfaces.md#custom-harnesses). Probe the exact harness version beside
|
|
134
|
+
a deliberately broken control before changing a capability claim. Repository tests verify
|
|
135
|
+
cockpit's side of the contract; native loading and enforcement need their own check through
|
|
136
|
+
`cockpit selftest`.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Capability matrix
|
|
2
|
+
|
|
3
|
+
<!-- Generated by `npm run references`; edit its sources, not this file. -->
|
|
4
|
+
|
|
5
|
+
<!-- Source manifest: 94a3b5d0068e28fa3dc3ce7751dd8e3dc2d35d7a5e067980a8b09ff479f3ea7a -->
|
|
6
|
+
|
|
7
|
+
This generated page is for users checking what cockpit actually enforces in each agent tool. Each cell holds one of four states:
|
|
8
|
+
|
|
9
|
+
- `enforced`: a dated run of the real tool, beside a deliberately broken control, showed it refusing the forbidden operation.
|
|
10
|
+
- `instructed`: cockpit writes the guidance or setting, but nothing makes the agent follow it.
|
|
11
|
+
- `generated`: cockpit writes the files, but nobody has checked that the tool even loads them.
|
|
12
|
+
- `unavailable`: cockpit writes nothing for this cell.
|
|
13
|
+
|
|
14
|
+
Only a dated run of the real tool changes a state; writing a file or passing cockpit's own tests never does.
|
|
15
|
+
|
|
16
|
+
Written says whether `sync` writes the tool's files for a cockpit.toml that lists no tools: the tools whose guard firing is measured are the default `[surfaces] tools`, and any other tool is written only once listed (`npx --no cockpit tool add <tool> --config <your cockpit.toml>`).
|
|
17
|
+
|
|
18
|
+
Guard firing is the generated hook refusing a protected operation. Instruction loading is the tool reading the guidance cockpit writes for it, including the guides of sibling repositories. Skills are the tool loading the skills cockpit renders: `cockpit-setup`, `cockpit-explain`, `cockpit-fix` and `cockpit-work`. The session-start check is the tool running `cockpit check` as a session starts and showing its drift report to the agent.
|
|
19
|
+
|
|
20
|
+
| Tool | Written | Guard firing | Instruction loading | Skills | Session-start check |
|
|
21
|
+
| --- | --- | --- | --- | --- | --- |
|
|
22
|
+
| Claude Code (`claudecode`) | by default | enforced | instructed | instructed | instructed |
|
|
23
|
+
| Codex (`codexcli`) | by default | enforced (needs a person) | instructed | instructed | instructed (needs a person) |
|
|
24
|
+
| OpenCode (`opencode`) | by default | enforced | instructed | instructed | unavailable |
|
|
25
|
+
| Cursor (`cursor`) | when listed | unavailable | generated | generated | unavailable |
|
|
26
|
+
| Grok Build (`grokcli`) | when listed | unavailable | generated | generated | unavailable |
|
|
27
|
+
|
|
28
|
+
## Measurements
|
|
29
|
+
|
|
30
|
+
Each line gives the date and tool version of the run and what it showed.
|
|
31
|
+
|
|
32
|
+
- Claude Code, guard firing (2026-11-01, version 2.1.316): with the exact push pre-allowed by permissions, the hook refused git push to a protected branch and the remote stayed empty while git status ran; the same checkout without the hook pushed.
|
|
33
|
+
- Codex, guard firing (2026-11-01, version 0.165.0): only after a person trusts the hook: untrusted, Codex skipped it and git push ran; trusted (forced with --dangerously-bypass-hook-trust), it refused the push. Trust is per machine and cockpit doctor warns until it is given.
|
|
34
|
+
- OpenCode, guard firing (2026-11-01, version 1.19.4): the plugin refused git push and a native read of a secrets file while an unprotected read stayed allowed; before read was routed through the guard, the same read returned the file.
|
|
35
|
+
- Claude Code, instruction loading (2026-11-03, version 2.1.317): in a workspace Claude Code had not trusted, a sibling guide copied into the root AGENTS.md that CLAUDE.md imports loaded, with or without Claude Code's user option for reading AGENTS.md, while the undeclared sibling's guide and the decoy did not; nothing loaded through a committed CLAUDE.md @-import of a link to the guide or of its relative path, through permissions.additionalDirectories with CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD in the settings env (ignored until a person trusts the workspace), or through --add-dir with that variable set.
|
|
36
|
+
- Codex, instruction loading (2026-11-03, version 0.166.0): a sibling guide copied into the root AGENTS.md loaded while the undeclared sibling's guide and the decoy did not; nothing loaded through a line in AGENTS.md telling the agent to read a link to the guide, through --add-dir naming the sibling, or through project_doc_fallback_filenames naming the link, and Codex dropped the end of a project AGENTS.md past 32 KiB.
|
|
37
|
+
- OpenCode, instruction loading (2026-11-03, version 1.19.5): a sibling guide copied into the root AGENTS.md loaded, as did a guide named through a link in the opencode.jsonc instructions list, while the undeclared sibling's guide and the decoy did not.
|
|
38
|
+
- Claude Code, session-start check (2026-11-03, version 2.1.317): a SessionStart hook in .claude/settings.json ran under claude -p and the agent quoted its stdout back, while a hook under a misspelled event name never ran and Claude Code named it as ignored.
|
|
39
|
+
- Codex, session-start check (2026-11-03, version 0.166.0): only after a person trusts the hook, as for the guard: a trusted SessionStart hook in .codex/hooks.json ran under codex exec and the agent quoted its stdout back, while a hook under a misspelled event name never ran.
|
|
40
|
+
|
|
41
|
+
## Without a measurement
|
|
42
|
+
|
|
43
|
+
- Guard firing in Cursor and Grok Build: no guard adapter is checked in, so cockpit generates no guard hook.
|
|
44
|
+
- Instruction loading in Cursor: cockpit's instructions and the sibling guides it copies reach Cursor only through the root AGENTS.md, and .cursor/rules holds only rules overlays; no run of the tool beside a broken control has shown that it loads either.
|
|
45
|
+
- Instruction loading in Grok Build: cockpit writes the files, but no run of the tool beside a broken control has shown that it loads them.
|
|
46
|
+
- Skills in Claude Code (`.claude/skills`), Codex (`.agents/skills`) and OpenCode (`.opencode/skills`): a person has not yet reviewed whether the tool loads and triggers them as written.
|
|
47
|
+
- Skills in Cursor (`.cursor/skills`) and Grok Build (`.grok/skills`): cockpit writes the files, but no run of the tool beside a broken control has shown that it loads them.
|
|
48
|
+
- Session-start check in OpenCode: OpenCode 1.19.5 delivers session.created to a plugin, but no run has shown a plugin putting text in the agent's context, so cockpit generates no session-start check.
|
|
49
|
+
- Session-start check in Cursor and Grok Build: cockpit generates no hook for this tool.
|
|
50
|
+
- Browser native transports (the playwright MCP tools and the pinned Playwright CLI) in Claude Code, Codex and OpenCode: cockpit declares them and the browser skill says each still needs a person's paired call beside a broken control; no cockpit command runs or records that call, so the browser commands drive the browser through cockpit's own project client instead.
|