agentera 3.0.0-dev.14 → 3.0.0-dev.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/README.md +43 -22
  2. package/bundle/.codex-plugin/plugin.json +92 -0
  3. package/bundle/.cursor/agents/agentera.md +7 -0
  4. package/bundle/.cursor/hooks.json +32 -0
  5. package/bundle/.cursor-plugin/plugin.json +34 -0
  6. package/bundle/.github/hooks/postToolUse.json +9 -0
  7. package/bundle/.github/hooks/preToolUse.json +8 -0
  8. package/bundle/.github/hooks/sessionEnd.json +8 -0
  9. package/bundle/.github/hooks/sessionStart.json +8 -0
  10. package/bundle/.github/plugin/plugin.json +7 -0
  11. package/bundle/.opencode/agents/agentera.md +12 -0
  12. package/bundle/.opencode/commands/agentera.md +5 -0
  13. package/bundle/.opencode/package.json +31 -0
  14. package/bundle/.opencode/plugins/agentera.js +820 -0
  15. package/bundle/CHANGELOG.md +1075 -0
  16. package/bundle/DESIGN.md +233 -0
  17. package/bundle/LICENSE +201 -0
  18. package/bundle/README.md +137 -0
  19. package/bundle/UPGRADE.md +188 -0
  20. package/bundle/agents/openai.yaml +87 -0
  21. package/bundle/extract-corpus-parity.json +2 -4
  22. package/bundle/hooks/codex-hooks.json +31 -0
  23. package/bundle/hooks/codex-plugin-hooks.json +31 -0
  24. package/bundle/plugin.json +13 -0
  25. package/bundle/references/adapters/cursor.md +50 -40
  26. package/bundle/references/adapters/opencode.md +22 -23
  27. package/bundle/references/adapters/package-manifest-interface-model.yaml +36 -43
  28. package/bundle/references/adapters/package-registry.yaml +19 -52
  29. package/bundle/references/adapters/package-surface-characterization.md +61 -47
  30. package/bundle/references/adapters/runtime-adapter-characterization.md +44 -79
  31. package/bundle/references/adapters/runtime-adapter-registry.yaml +7 -169
  32. package/bundle/references/adapters/runtime-feature-parity.md +99 -167
  33. package/bundle/references/adapters/runtime-lifecycle-adapters.yaml +288 -0
  34. package/bundle/references/adapters/runtime-lifecycle-authority.yaml +73 -0
  35. package/bundle/references/adapters/runtime-lifecycle-operation-contract.yaml +83 -0
  36. package/bundle/references/adapters/runtime-retired-resources.yaml +33 -0
  37. package/bundle/references/analysis/benchmark.md +5 -5
  38. package/bundle/references/analysis/startup-measurement-contract.yaml +19 -8
  39. package/bundle/references/cli/bundle-skill-vocabulary.yaml +2 -2
  40. package/bundle/references/cli/vocabulary-index.yaml +1 -1
  41. package/bundle/references/cli/vocabulary.md +7 -7
  42. package/bundle/skills/agentera/SKILL.md +43 -2
  43. package/bundle/skills/agentera/references/contract.md +10 -3
  44. package/bundle/skills/agentera/schemas/artifacts/decisions.yaml +1 -1
  45. package/bundle/skills/agentera/schemas/artifacts/experiments.yaml +1 -1
  46. package/bundle/skills/agentera/schemas/artifacts/health.yaml +1 -1
  47. package/bundle/skills/agentera/schemas/artifacts/progress.yaml +1 -1
  48. package/dist/analytics/extractCorpus/cli.js +19 -5
  49. package/dist/analytics/extractCorpus/cli.js.map +1 -1
  50. package/dist/analytics/extractCorpus/copilotSessions.js +6 -3
  51. package/dist/analytics/extractCorpus/copilotSessions.js.map +1 -1
  52. package/dist/analytics/extractCorpus/core.js +40 -11
  53. package/dist/analytics/extractCorpus/core.js.map +1 -1
  54. package/dist/analytics/extractCorpus/corpus.js +39 -16
  55. package/dist/analytics/extractCorpus/corpus.js.map +1 -1
  56. package/dist/analytics/extractCorpus/coverageAudit.js +44 -44
  57. package/dist/analytics/extractCorpus/coverageAudit.js.map +1 -1
  58. package/dist/analytics/extractCorpus/cursorSessions.js +6 -3
  59. package/dist/analytics/extractCorpus/cursorSessions.js.map +1 -1
  60. package/dist/analytics/extractCorpus/extractCorpusParity.js +2 -2
  61. package/dist/analytics/extractCorpus/extractCorpusParity.js.map +1 -1
  62. package/dist/analytics/extractCorpus/filesystemSources.js +1 -4
  63. package/dist/analytics/extractCorpus/filesystemSources.js.map +1 -1
  64. package/dist/analytics/extractCorpus/jsonlSessions.js +24 -4
  65. package/dist/analytics/extractCorpus/jsonlSessions.js.map +1 -1
  66. package/dist/analytics/usageStats.js +51 -7
  67. package/dist/analytics/usageStats.js.map +1 -1
  68. package/dist/bin/agentera.js +3 -1
  69. package/dist/bin/agentera.js.map +1 -1
  70. package/dist/capabilities/audit/instructions.js +1 -1
  71. package/dist/capabilities/audit/instructions.js.map +1 -1
  72. package/dist/capabilities/build/instructions.js +1 -1
  73. package/dist/capabilities/build/instructions.js.map +1 -1
  74. package/dist/capabilities/discuss/instructions.js +1 -1
  75. package/dist/capabilities/discuss/instructions.js.map +1 -1
  76. package/dist/capabilities/orchestrate/instructions.js +1 -1
  77. package/dist/capabilities/orchestrate/instructions.js.map +1 -1
  78. package/dist/capabilities/plan/instructions.js +1 -1
  79. package/dist/capabilities/plan/instructions.js.map +1 -1
  80. package/dist/capabilities/profile/instructions.js +1 -1
  81. package/dist/capabilities/profile/instructions.js.map +1 -1
  82. package/dist/cli/capabilityContext/contract.js +2 -0
  83. package/dist/cli/capabilityContext/contract.js.map +1 -1
  84. package/dist/cli/capabilityContext/startup.js +2 -0
  85. package/dist/cli/capabilityContext/startup.js.map +1 -1
  86. package/dist/cli/commands/compact.js +1 -1
  87. package/dist/cli/commands/compact.js.map +1 -1
  88. package/dist/cli/commands/doctor.js +66 -4
  89. package/dist/cli/commands/doctor.js.map +1 -1
  90. package/dist/cli/commands/prime/collectOrientationState.js +15 -1
  91. package/dist/cli/commands/prime/collectOrientationState.js.map +1 -1
  92. package/dist/cli/commands/prime/orientationOutput.js +15 -1
  93. package/dist/cli/commands/prime/orientationOutput.js.map +1 -1
  94. package/dist/cli/commands/report.js +19 -4
  95. package/dist/cli/commands/report.js.map +1 -1
  96. package/dist/cli/commands/schema.js +79 -3
  97. package/dist/cli/commands/schema.js.map +1 -1
  98. package/dist/cli/commands/state/write.js +341 -0
  99. package/dist/cli/commands/state/write.js.map +1 -0
  100. package/dist/cli/commands/upgrade.js +18 -2
  101. package/dist/cli/commands/upgrade.js.map +1 -1
  102. package/dist/cli/commands/verify.js +6 -6
  103. package/dist/cli/commands/verify.js.map +1 -1
  104. package/dist/cli/dispatch/index.js +2 -1
  105. package/dist/cli/dispatch/index.js.map +1 -1
  106. package/dist/cli/dispatch/lifecycle.js +71 -3
  107. package/dist/cli/dispatch/lifecycle.js.map +1 -1
  108. package/dist/cli/dispatch/state.js +4 -0
  109. package/dist/cli/dispatch/state.js.map +1 -1
  110. package/dist/cli/errors.js +1 -0
  111. package/dist/cli/errors.js.map +1 -1
  112. package/dist/cli/help.js +34 -8
  113. package/dist/cli/help.js.map +1 -1
  114. package/dist/cli/prime-blob.js +68 -2
  115. package/dist/cli/prime-blob.js.map +1 -1
  116. package/dist/cli/startupCompletenessContract.js +1 -1
  117. package/dist/cli/startupCompletenessContract.js.map +1 -1
  118. package/dist/core/atomicWriter.js +21 -0
  119. package/dist/core/atomicWriter.js.map +1 -0
  120. package/dist/core/yaml.js +8 -0
  121. package/dist/core/yaml.js.map +1 -1
  122. package/dist/eval/evalSkills.js +13 -13
  123. package/dist/eval/evalSkills.js.map +1 -1
  124. package/dist/hooks/common.js +3 -3
  125. package/dist/hooks/common.js.map +1 -1
  126. package/dist/hooks/compaction/index.js +2 -2
  127. package/dist/hooks/compaction/index.js.map +1 -1
  128. package/dist/hooks/compaction/status.js +3 -3
  129. package/dist/hooks/compaction/status.js.map +1 -1
  130. package/dist/hooks/validateArtifact/runtime.js +4 -4
  131. package/dist/hooks/validateArtifact/schema.js +82 -6
  132. package/dist/hooks/validateArtifact/schema.js.map +1 -1
  133. package/dist/hooks/validateArtifact/violations.js +5 -2
  134. package/dist/hooks/validateArtifact/violations.js.map +1 -1
  135. package/dist/migrate/v2HandoffManifest.js +4 -0
  136. package/dist/migrate/v2HandoffManifest.js.map +1 -1
  137. package/dist/registries/artifactRegistry.js +39 -6
  138. package/dist/registries/artifactRegistry.js.map +1 -1
  139. package/dist/registries/packageRegistry.js +36 -3
  140. package/dist/registries/packageRegistry.js.map +1 -1
  141. package/dist/registries/runtimeAdapterRegistry.js +22 -16
  142. package/dist/registries/runtimeAdapterRegistry.js.map +1 -1
  143. package/dist/runtime/lifecycleAdapterContract.js +436 -0
  144. package/dist/runtime/lifecycleAdapterContract.js.map +1 -0
  145. package/dist/runtime/lifecycleAdapters.js +707 -0
  146. package/dist/runtime/lifecycleAdapters.js.map +1 -0
  147. package/dist/runtime/lifecycleAuthority.js +443 -0
  148. package/dist/runtime/lifecycleAuthority.js.map +1 -0
  149. package/dist/runtime/lifecycleOperationContract.js +109 -0
  150. package/dist/runtime/lifecycleOperationContract.js.map +1 -0
  151. package/dist/runtime/lifecycleOperations.js +627 -0
  152. package/dist/runtime/lifecycleOperations.js.map +1 -0
  153. package/dist/runtime/lifecycleOwnershipJournal.js +623 -0
  154. package/dist/runtime/lifecycleOwnershipJournal.js.map +1 -0
  155. package/dist/runtime/lifecyclePublication.js +395 -0
  156. package/dist/runtime/lifecyclePublication.js.map +1 -0
  157. package/dist/runtime/lifecycleSnapshot.js +174 -0
  158. package/dist/runtime/lifecycleSnapshot.js.map +1 -0
  159. package/dist/runtime/retiredRuntimeCleanup.js +232 -0
  160. package/dist/runtime/retiredRuntimeCleanup.js.map +1 -0
  161. package/dist/setup/codex/installRoot.js +1 -1
  162. package/dist/setup/codex/installRoot.js.map +1 -1
  163. package/dist/setup/copilot.js +1 -1
  164. package/dist/setup/copilot.js.map +1 -1
  165. package/dist/setup/cursor.js +1 -1
  166. package/dist/setup/cursor.js.map +1 -1
  167. package/dist/setup/doctor/core.js +3 -3
  168. package/dist/setup/doctor/core.js.map +1 -1
  169. package/dist/setup/doctor/diagnostics.js +0 -39
  170. package/dist/setup/doctor/diagnostics.js.map +1 -1
  171. package/dist/setup/smokeChecks.js +1 -3
  172. package/dist/setup/smokeChecks.js.map +1 -1
  173. package/dist/state/startupAnalysis/helpers.js +1 -1
  174. package/dist/state/startupAnalysis/helpers.js.map +1 -1
  175. package/dist/state/write/assign.js +21 -0
  176. package/dist/state/write/assign.js.map +1 -0
  177. package/dist/state/write/errors.js +12 -0
  178. package/dist/state/write/errors.js.map +1 -0
  179. package/dist/state/write/explain.js +151 -0
  180. package/dist/state/write/explain.js.map +1 -0
  181. package/dist/state/write/fields.js +62 -0
  182. package/dist/state/write/fields.js.map +1 -0
  183. package/dist/state/write/index.js +11 -0
  184. package/dist/state/write/index.js.map +1 -0
  185. package/dist/state/write/input.js +22 -0
  186. package/dist/state/write/input.js.map +1 -0
  187. package/dist/state/write/lock.js +108 -0
  188. package/dist/state/write/lock.js.map +1 -0
  189. package/dist/state/write/operations.js +181 -0
  190. package/dist/state/write/operations.js.map +1 -0
  191. package/dist/state/write/serialize.js +2 -0
  192. package/dist/state/write/serialize.js.map +1 -0
  193. package/dist/state/write/transaction.js +619 -0
  194. package/dist/state/write/transaction.js.map +1 -0
  195. package/dist/state/write/validate.js +8 -0
  196. package/dist/state/write/validate.js.map +1 -0
  197. package/dist/upgrade/appContentRefresh.js +8 -1
  198. package/dist/upgrade/appContentRefresh.js.map +1 -1
  199. package/dist/upgrade/atomicWriter.js +1 -22
  200. package/dist/upgrade/atomicWriter.js.map +1 -1
  201. package/dist/upgrade/doctor.js +4 -0
  202. package/dist/upgrade/doctor.js.map +1 -1
  203. package/dist/upgrade/lifecycleUpgrade.js +386 -0
  204. package/dist/upgrade/lifecycleUpgrade.js.map +1 -0
  205. package/dist/upgrade/migrateArtifactsV2ToV3.js.map +1 -1
  206. package/dist/upgrade/runtimeMigration.js +1 -8
  207. package/dist/upgrade/runtimeMigration.js.map +1 -1
  208. package/dist/upgrade/upgradeCommands.js +8 -0
  209. package/dist/upgrade/upgradeCommands.js.map +1 -1
  210. package/dist/upgrade/upgradeOrchestrator.js +148 -5
  211. package/dist/upgrade/upgradeOrchestrator.js.map +1 -1
  212. package/dist/validate/appHomeContract.js +1 -1
  213. package/dist/validate/appHomeContract.js.map +1 -1
  214. package/dist/validate/lifecycleAdapters/nodeFormChecks.js +2 -9
  215. package/dist/validate/lifecycleAdapters/nodeFormChecks.js.map +1 -1
  216. package/dist/validate/lifecycleAdapters/shared.js +1 -1
  217. package/dist/validate/lifecycleAdapters/shared.js.map +1 -1
  218. package/dist/validate/lifecycleAdapters.js +77 -2
  219. package/dist/validate/lifecycleAdapters.js.map +1 -1
  220. package/package.json +1 -1
  221. package/bundle/skills/agentera/.claude-plugin/plugin.json +0 -27
@@ -1,79 +1,44 @@
1
- # Runtime Adapter Characterization
2
-
3
- Task 2 of `Deepen RuntimeAdapter Registry` records current behavior before any
4
- registry extraction. This is a characterization artifact, not the new registry.
5
-
6
- ## Doctor Output
7
-
8
- Current JSON envelope fields are `schemaVersion`, `ok`, `installRoot`,
9
- `runtimes`, `summary`, and `smoke`. Each runtime result exposes `runtime`,
10
- `status`, `available`, `binary`, and `checks`. Each check exposes `name`,
11
- `status`, `message`, `source`, `path`, `gap`, and `details`.
12
-
13
- Primary pass messages by runtime:
14
-
15
- | Runtime | Primary check | Status | Message | Diagnostic label |
16
- |---------|---------------|--------|---------|------------------|
17
- | Claude Code | `CLAUDE_PLUGIN_ROOT` | `pass` | `runtime can reach shared Agentera helper scripts` | none |
18
- | OpenCode | `plugin_file` | `pass` | `OpenCode plugin file is present` | none |
19
- | Copilot CLI | `AGENTERA_HOME` | `pass` | `runtime can reach shared Agentera helper scripts` | none |
20
- | Codex CLI | `config.AGENTERA_HOME` | `pass` | `runtime can reach shared Agentera helper scripts` | none |
21
-
22
- Current diagnostic labels that are intentionally public are `user_environment`,
23
- `runtime_config`, `bundle_packaging`, `command_drift`, `skill_path_drift`, and
24
- `validation_drift`.
25
-
26
- ## Upgrade Planning
27
-
28
- Runtime-phase items currently expose `runtime`, `action`, `target`, `status`,
29
- and `message`; copy operations also expose `source`, and configure operations
30
- carry private `newText` until public JSON rendering strips it.
31
-
32
- Characterized runtime actions:
33
-
34
- | Runtime | Action | Target | Dry-run status | Apply behavior |
35
- |---------|--------|--------|----------------|----------------|
36
- | Claude Code | `configure` | none | `noop` | no local config write |
37
- | Codex CLI | `configure` | `~/.codex/config.toml` | `pending` | writes config, then reports `runtime update applied` |
38
- | Codex CLI | `copy-hooks` | `~/.codex/hooks.json` | `pending` | copies hooks, then reports `runtime update applied` |
39
- | Codex CLI | `copy-agent` | `~/.codex/agents/*.toml` | `pending` | copies managed capability descriptors, then reports `runtime update applied` |
40
- | Copilot CLI | `configure` | none | `noop` | no local config write; use per-invocation `AGENTERA_HOME` |
41
- | OpenCode | `copy-plugin` | `~/.config/opencode/plugins/agentera.js` | `pending` | copies plugin, then reports `runtime update applied` |
42
- | OpenCode | `copy-agent` | `~/.config/opencode/agents/agentera.md` | `pending` | copies single managed agent descriptor (D73), then reports `runtime update applied` |
43
-
44
- Package-phase items currently expose `runtime`, `action`, `command`, `status`,
45
- and `message`. Without `--update-packages`, package items are `skipped`; with it,
46
- Claude Code and OpenCode package commands become `pending` and apply through the
47
- external command runner. Copilot CLI and Codex CLI have no package command item in
48
- the current upgrade phase.
49
-
50
- ## Lifecycle Validation
51
-
52
- Current pass output from `scripts/validate_lifecycle_adapters.py` is exactly:
53
-
54
- ```text
55
- lifecycle adapter metadata ok
56
- ```
57
-
58
- Current failure output begins with:
59
-
60
- ```text
61
- lifecycle adapter validation failed:
62
- ```
63
-
64
- Representative fail messages are characterized in `tests/test_runtime_adapters.py`:
65
- Copilot stale `lifecycleHooks`, unsupported hook event files, missing `preToolUse`
66
- artifact validation, Codex unsupported status values, malformed event containers,
67
- missing supported-event declarations, missing unsupported-event declarations, and
68
- missing `codex_hooks` limitation text.
69
-
70
- ## Drift Inventory
71
-
72
- | Drift point | Decision | Before-migration handling |
73
- |-------------|----------|---------------------------|
74
- | duplicated runtime order appears in doctor, upgrade, and tests | `standardize` | Later registry extraction should define one runtime order and have consumers read it. |
75
- | upgrade package phase only manages Claude Code and OpenCode | `preserve` | This is current behavior, not a registry gap; Copilot CLI and Codex CLI package command support is separate future work. |
76
- | Codex supports hook events but shipped config wires only apply_patch validation | `preserve` | Keep the distinction between host support and shipped Agentera wiring. |
77
- | Claude lifecycle behavior is validated through native hook files, not lifecycle metadata | `defer` | Do not invent Claude lifecycle metadata in Task 2; decide during registry interface design. |
78
- | OpenCode session preload observes `session.created` but has no verified context injection path | `preserve` | Keep degraded preload semantics in docs and diagnostics. |
79
- | hard-gate docs only claim blocking for reconstructable OpenCode and Copilot candidates | `preserve` | Keep scoped claims; do not standardize to full hard-gate parity. |
1
+ # Runtime adapter characterization
2
+
3
+ The executable lifecycle contract is split deliberately:
4
+
5
+ - `runtime-lifecycle-authority.yaml` owns active identities, surfaces, evidence,
6
+ support-floor rules, the Cursor alias, and retired inputs;
7
+ - `runtime-lifecycle-adapters.yaml` owns the common eight-category adapter
8
+ claims and declared Agentera-managed resources;
9
+ - `runtime-lifecycle-operation-contract.yaml` owns operation and ownership
10
+ semantics;
11
+ - `runtime-retired-resources.yaml` owns bounded legacy cleanup;
12
+ - `runtime-adapter-registry.yaml` retains host-event and behavioral parity facts
13
+ and must match the lifecycle authority's four identities.
14
+
15
+ ## Characterized identities
16
+
17
+ | Runtime ID | Required host surface | Additional surface | Lifecycle source highlights |
18
+ | --- | --- | --- | --- |
19
+ | `opencode` | OpenCode host | | plugin and single Agentera agent |
20
+ | `codex` | Codex CLI | | plugin hooks, copied hooks, capability TOML agents |
21
+ | `cursor` | Cursor Agent CLI | Cursor IDE when observed | IDE plugin, hooks, and Agentera descriptor |
22
+ | `copilot` | GitHub Copilot CLI | | plugin manifests and lifecycle hooks |
23
+
24
+ The inactive `cursor-agent` spelling identifies the Cursor CLI binary/source
25
+ product only. Claude is absent from adapter records and can appear only in the
26
+ retired cleanup or explicit historical-import contracts.
27
+
28
+ ## Diagnosis and remediation
29
+
30
+ Every adapter reports `skills`, `plugins`, `hooks`, `agents`, `configuration`,
31
+ `enablement`, `trust`, and `native_actions`. Evidence is read-only. Trust is
32
+ never inferred. Managed repair is planned through the shared operation engine;
33
+ native and user-owned work is returned as `action_required`.
34
+
35
+ Preview has no side effects. Apply requires declared destinations and matching
36
+ ownership-journal evidence, uses secure directory-relative publication on
37
+ Linux, continues independent operations after failure, and converges on retry.
38
+
39
+ ## Validation
40
+
41
+ `agentera check validate lifecycle-adapters` rejects identity drift, missing
42
+ runtime/category/surface claims, unsafe destinations, unverified mandatory
43
+ skills, missing package manifests, unbundled lifecycle sources, version drift,
44
+ retired Claude manifests, and stale runtime-specific hook claims.
@@ -1,88 +1,11 @@
1
1
  schema_version: agentera.runtimeAdapterRegistry.v1
2
- runtime_order:
3
- - claude
2
+ lifecycle_authority: references/adapters/runtime-lifecycle-authority.yaml
3
+ adapter_record_order:
4
4
  - opencode
5
5
  - copilot
6
6
  - codex
7
7
  - cursor
8
- - cursor-agent
9
8
  records:
10
- - identity:
11
- runtime_id: claude
12
- display_name: Claude Code
13
- adapter_family: native-plugin
14
- support_status: supported
15
- host_detection:
16
- binary_names:
17
- - claude
18
- host_config_locations:
19
- - CLAUDE_PLUGIN_ROOT
20
- availability_probe_label: runtime_binary
21
- lifecycle_events:
22
- supported_events:
23
- - PreToolUse
24
- - PostToolUse
25
- - UserPromptSubmit
26
- - SessionStart
27
- - Stop
28
- - SubagentStop
29
- unsupported_events: []
30
- event_status:
31
- PreToolUse: native
32
- PostToolUse: native
33
- UserPromptSubmit: native
34
- SessionStart: native
35
- Stop: native
36
- SubagentStop: native
37
- limitations:
38
- - Claude lifecycle behavior is validated through native hook files rather than lifecycle metadata.
39
- artifact_validation:
40
- validation_events:
41
- - PreToolUse
42
- hard_gate_claims:
43
- - Native hook files can run artifact validation before tool writes.
44
- payload_reconstruction_limitations: []
45
- subagent_dispatch:
46
- mechanism: Claude Code native subagent dispatch
47
- setup_targets: []
48
- descriptor_sources: []
49
- invocation_pattern: Use the host Task/subagent surface with the selected Agentera capability context.
50
- tool_configuration: none
51
- limitations:
52
- - Agentera does not install per-capability Claude descriptors in this package phase.
53
- config_targets:
54
- runtime_config_files: []
55
- hook_targets:
56
- - .claude-plugin/marketplace.json
57
- plugin_targets:
58
- - skills/*/.claude-plugin/plugin.json
59
- environment_exports:
60
- - CLAUDE_PLUGIN_ROOT
61
- write_safety_labels:
62
- - Claude Code plugin installs expose the app home without local config writes
63
- diagnostics:
64
- check_names:
65
- - CLAUDE_PLUGIN_ROOT
66
- status_labels:
67
- - pass
68
- - warn
69
- - fail
70
- - skip
71
- gap_labels:
72
- - runtime_config
73
- - user_environment
74
- primary_messages:
75
- - runtime can reach shared Agentera helper scripts
76
- - Claude Code plugin root is not present in this process environment
77
- documentation_claims:
78
- reference_paths:
79
- - references/adapters/runtime-feature-parity.md
80
- parity_claims:
81
- - Claude Code uses native plugin and hook surfaces.
82
- install_claims:
83
- - Claude Code plugin installs expose the app home without local config writes.
84
- known_drifts:
85
- - Claude lifecycle behavior is validated through native hook files, not lifecycle metadata.
86
9
  - identity:
87
10
  runtime_id: opencode
88
11
  display_name: OpenCode
@@ -189,7 +112,7 @@ records:
189
112
  - OpenCode session preload observes session.created but has no verified context injection path.
190
113
  - identity:
191
114
  runtime_id: copilot
192
- display_name: Copilot CLI
115
+ display_name: GitHub Copilot
193
116
  adapter_family: portable-plugin
194
117
  support_status: supported
195
118
  host_detection:
@@ -271,9 +194,9 @@ records:
271
194
  - Upgrade runtime configure is noop; shell rc paths in host_detection are doctor diagnostic probes only.
272
195
  - identity:
273
196
  runtime_id: codex
274
- display_name: Codex CLI
197
+ display_name: Codex
275
198
  adapter_family: portable-plugin
276
- support_status: degraded
199
+ support_status: supported
277
200
  host_detection:
278
201
  binary_names:
279
202
  - codex
@@ -358,11 +281,12 @@ records:
358
281
  - Codex supports hook events but shipped config wires only apply_patch validation.
359
282
  - identity:
360
283
  runtime_id: cursor
361
- display_name: Cursor IDE
284
+ display_name: Cursor
362
285
  adapter_family: native-plugin
363
286
  support_status: supported
364
287
  host_detection:
365
288
  binary_names:
289
+ - cursor-agent
366
290
  - cursor
367
291
  host_config_locations:
368
292
  - AGENTERA_HOME
@@ -461,89 +385,3 @@ records:
461
385
  known_drifts:
462
386
  - Release tagging and marketplace publication remain blocked pending broader release closeout despite passed live preToolUse Write smoke.
463
387
  - Cloud agents are unsupported in v1.
464
- - identity:
465
- runtime_id: cursor-agent
466
- display_name: Cursor Agent CLI
467
- adapter_family: portable-cli
468
- support_status: degraded
469
- host_detection:
470
- binary_names:
471
- - cursor-agent
472
- - agent
473
- host_config_locations:
474
- - AGENTERA_HOME
475
- - ~/.bashrc
476
- - ~/.zshrc
477
- - ~/.config/fish/config.fish
478
- availability_probe_label: runtime_binary
479
- lifecycle_events:
480
- supported_events:
481
- - sessionStart
482
- - sessionEnd
483
- - preToolUse
484
- - postToolUse
485
- unsupported_events:
486
- - subagentStart
487
- - subagentStop
488
- - beforeSubmitPrompt
489
- - preCompact
490
- - stop
491
- event_status:
492
- sessionStart: degraded
493
- sessionEnd: degraded
494
- preToolUse: degraded
495
- postToolUse: degraded
496
- limitations:
497
- - CLI sessions may not inherit IDE sessionStart env; persistent shell configuration is a fallback only when shell-tool smoke fails.
498
- - Non-interactive print mode may hang after completion in some host builds; eval and smoke harnesses use bounded timeouts.
499
- - Cloud agents are unsupported in v1.
500
- artifact_validation:
501
- validation_events:
502
- - preToolUse
503
- hard_gate_claims:
504
- - CLI hook parity is degraded relative to IDE; hard-gate claims follow IDE smoke evidence only.
505
- payload_reconstruction_limitations:
506
- - CLI may omit hook wiring entirely when launched outside a Cursor workspace with project hooks.
507
- subagent_dispatch:
508
- mechanism: Cursor Agent CLI host-managed dispatch
509
- setup_targets: []
510
- descriptor_sources: []
511
- invocation_pattern: Use cursor-agent with explicit capability context; managed .cursor/agents descriptors apply only when the workspace is loaded.
512
- tool_configuration: global_full_access
513
- limitations:
514
- - Agentera does not install per-capability cursor-agent descriptors separately from IDE managed agents.
515
- config_targets:
516
- runtime_config_files: []
517
- hook_targets: []
518
- plugin_targets: []
519
- environment_exports:
520
- - AGENTERA_HOME
521
- write_safety_labels:
522
- - configure
523
- diagnostics:
524
- check_names:
525
- - AGENTERA_HOME
526
- - cursor-agent
527
- status_labels:
528
- - pass
529
- - warn
530
- - fail
531
- - skip
532
- gap_labels:
533
- - runtime_config
534
- - user_environment
535
- primary_messages:
536
- - runtime can reach shared Agentera helper scripts
537
- - cursor-agent binary is not on PATH
538
- - cursor-agent helper access depends on AGENTERA_HOME or shell rc configuration
539
- documentation_claims:
540
- reference_paths:
541
- - references/adapters/runtime-feature-parity.md
542
- - references/adapters/cursor.md
543
- parity_claims:
544
- - cursor-agent supports eval_skills --runtime cursor-agent print-mode dispatch.
545
- install_claims:
546
- - cursor-agent inherits IDE hook wiring only when run inside a workspace with installed Cursor surfaces.
547
- known_drifts:
548
- - CLI hook and session env parity is degraded relative to Cursor IDE.
549
- - Bare text /agentera routing is metadata-only like Claude, Copilot, and Codex.
@@ -1,189 +1,121 @@
1
- # Runtime feature parity reference
2
-
3
- Tracks release-relevant runtime behavior for the portable agentera suite.
4
-
5
- This reference distinguishes implemented behavior from host support. A runtime
6
- may expose an event while agentera still lacks a shipped adapter path for it.
7
-
8
- ## Summary
9
-
10
- | Runtime | Skill loading | Session preload | Artifact validation | Session bookmark |
11
- |---------|---------------|-----------------|---------------------|------------------|
12
- | Claude Code | Full: marketplace plugin and native skill paths load `skills/<name>/SKILL.md` | Active via `SessionStart` in `hooks/hooks.json` | Advisory after mutation via `PostToolUse` for `Edit` or `Write` | Active via `Stop` |
13
- | OpenCode | Full: native `skill` tool loads `.opencode`, `.claude`, and `.agents` skill paths | Deferred for session start: `session.created` is observable, but no model-context injection path is verified. Active for compaction through bounded `experimental.session.compacting` context from `agentera hej --format json`. | Conditional hard gate for reconstructable `write` and `edit` candidates via `tool.execute.before`; `tool.execute.after` remains advisory | Active via generic `event` hook on `session.idle` |
14
- | Copilot CLI | Full for portable skills through plugin or skill-folder install paths | Active via `sessionStart` | Conditional hard gate via `preToolUse` when `toolArgs` include path plus candidate content or exact replacement evidence | Active via `sessionEnd` |
15
- | Codex CLI | Full for portable skills through plugin install, `.agents/skills`, and `$skill` invocation | Not wired by the shipped hook config | Advisory `apply_patch` path validation through shipped PreToolUse and PostToolUse hooks; final patch content is not reconstructed | Not wired by the shipped hook config |
16
- | Cursor IDE | Full for portable skills through local plugin (`~/.cursor/plugins/local/agentera` via `.cursor-plugin/plugin.json`), repo-native surfaces, and upgrade-installed `.cursor/` targets | Active via `sessionStart` env export plus optional `additional_context` digest; plugin-root fallback when `AGENTERA_HOME` env and project walk-up fail (`hooks/cursor_session_start.py`) | Conditional hard gate for reconstructable `Write` and `Edit` candidates via `preToolUse`; verified after live preToolUse Write smoke (2026-05-24) | Active via `sessionEnd` |
17
- | Cursor Agent CLI | Full when workspace surfaces are installed; degraded when launched outside a Cursor project | Degraded relative to IDE sessionStart env export | Degraded hook parity; follows IDE smoke evidence only | Degraded relative to IDE `sessionEnd` wiring |
18
-
19
- ## Profilera session corpus
20
-
21
- | Runtime | Local session mining | Evidence |
22
- | ------- | -------------------- | -------- |
23
- | Claude Code | Yes: `~/.claude/projects/**/*.jsonl` | `scripts/extract_corpus.py` |
24
- | Codex CLI | Yes: `~/.codex/sessions/**/*.jsonl` | `scripts/extract_corpus.py` |
25
- | OpenCode | Yes: `opencode.db` SQLite stores | `scripts/extract_corpus.py`, `references/adapters/opencode.md` |
26
- | Copilot CLI | Yes: `session-store.db` SQLite stores | `scripts/extract_corpus.py` |
27
- | Cursor IDE | Yes: `~/.cursor/projects/*/agent-transcripts/*/*.jsonl` | `scripts/extract_corpus.py`, `references/adapters/cursor.md` |
28
- | Cursor Agent CLI | Yes: gap-fill from `~/.config/cursor/chats/<md5(project)>/<session>/store.db` when no IDE JSONL exists | `scripts/extract_corpus.py`, `references/adapters/cursor.md` |
29
-
30
- ## Bare `hej` routing
31
-
32
- | Runtime | Bare text `hej` behavior | Evidence |
33
- |---------|--------------------------|----------|
34
- | OpenCode | Deterministic exact-match adapter route through `chat.message`; only a complete lowercase text message `hej` is rewritten to load `agentera` and run the `agentera hej` dashboard path, accepting OpenCode's CLI-added single trailing newline as a transport artifact. | `.opencode/plugins/agentera.js`, `scripts/smoke_opencode_bootstrap.mjs`, OpenCode `packages/plugin/src/index.ts` Hooks interface |
35
- | Claude Code | Metadata/context only; `UserPromptSubmit` can observe or add context but is not a verified prompt rewrite router. | `skills/agentera/SKILL.md`, marketplace metadata |
36
- | Copilot CLI | Metadata/context only; skills, prompts, hooks, and plugins expose Agentera but do not guarantee pre-model bare-prompt routing. | `plugin.json`, `.github/plugin/plugin.json`, `.github/hooks` |
37
- | Codex CLI | Metadata/context only; `$agentera` is explicit and the legacy `$hej` bridge is not implicitly invocable. | `.codex-plugin/plugin.json`, `agents/openai.yaml` |
38
- | Cursor IDE | Metadata/context only; `beforeSubmitPrompt` is supported by the host but Agentera v1 does not rewrite bare `hej`. | `.cursor-plugin/plugin.json`, `.cursor/agents/*.md` |
39
- | Cursor Agent CLI | Metadata/context only like Claude, Copilot, and Codex. | `references/adapters/cursor.md`, eval runner metadata |
40
-
41
- ## Artifact validation
42
-
43
- | Runtime | Blocking surface | Implemented gate | Evidence-insufficient paths | Verification surface |
44
- |---------|------------------|------------------|-----------------------------|----------------------|
45
- | Claude Code | None in shipped config; validation runs after `Edit` or `Write` | No pre-write hard gate is claimed | Any invalid artifact can already be written before the warning appears | `hooks/hooks.json`, `hooks/validate_artifact.py` |
46
- | OpenCode | `tool.execute.before` can throw before mutation | Invalid reconstructable artifact `write` and `edit` candidates are blocked | Sparse payloads and `apply_patch` `patchText` without reconstructed full content are allowed | `.opencode/plugins/agentera.js`, `scripts/smoke_opencode_bootstrap.mjs` |
47
- | Copilot CLI | `preToolUse` returns `permissionDecision: deny` | Invalid reconstructable artifact candidates are denied | Malformed, sparse, or non-reconstructable `toolArgs` are allowed | `.github/hooks/preToolUse.json`, `hooks/validate_artifact.py`, `tests/test_validate_artifact.py` |
48
- | Codex CLI | `codex_hooks` can run before and after `apply_patch` | No content hard gate is claimed; the copied user hook config parses touched paths and validates existing files; optional plugin-bundled hooks require `[features].plugin_hooks = true` plus `/hooks` review | Add-file targets and final post-patch candidate content are not reconstructed by the adapter | `~/.codex/hooks.json` generated by upgrade, `.codex-plugin/plugin.json` `hooks`, `hooks/codex-plugin-hooks.json`, `hooks/validate_artifact.py`, live apply_patch hook firing smoke |
49
- | Cursor IDE | `preToolUse` returns `permission: deny` when wired | Invalid reconstructable artifact candidates are denied; live preToolUse Write smoke passed 2026-05-24 | Malformed, sparse, or non-reconstructable tool_input payloads are allowed | `.cursor/hooks.json`, `hooks/cursor_pre_tool_use.py`, `hooks/validate_artifact.py`, `.agentera/smoke-cursor-pretooluse-evidence.txt` |
50
- | Cursor Agent CLI | None claimed for standalone CLI | No IDE-equivalent hard gate is claimed | CLI may run without project hook wiring | `scripts/eval_skills.py --runtime cursor-agent` |
51
-
52
- Docs may claim functional hard-gate parity only for closeable paths that are
53
- implemented and verified. Today that means OpenCode, Copilot, and Cursor IDE
54
- reconstructable artifact candidates. Claude Code and Codex remain active validation
55
- surfaces, but neither shipped configuration blocks every invalid artifact candidate
56
- before mutation.
57
-
58
- ## Lifecycle notes
59
-
60
- | Runtime | Runtime reason for degraded or blocked capability |
61
- |---------|---------------------------------------------------|
62
- | OpenCode preload | The `event` hook observes `session.created`, but no supported adapter path injects text into model context. |
63
- | OpenCode compaction context | `experimental.session.compacting` appends bounded Agentera state from `agentera hej --format json`; the plugin does not read raw `.agentera` artifacts for compaction. |
64
- | OpenCode `apply_patch` hard gate | The adapter receives `patchText` without reconstructing full candidate content. It allows that path rather than guessing. |
65
- | Copilot sparse edits | Copilot `preToolUse` stdin may omit full content or unique old/new replacement evidence. The hook allows those payloads. |
66
- | Codex preload/bookmarks | `codex_hooks` supports lifecycle events, but Agentera ships only `apply_patch` PreToolUse/PostToolUse wiring for copied user hooks and optional plugin-bundled hooks. |
67
- | Codex artifact hard gate | The adapter parses patch headers for touched paths, but it does not reconstruct final candidate content for blocking validation. |
68
- | Codex plugin hook trust | Plugin-bundled hooks require `[features].plugin_hooks = true` and deliberate `/hooks` review; copied `~/.codex/hooks.json` remains the default reliable install path with generated `[hooks.state]` trust hashes. |
69
- | Cursor cloud agents | Cloud agents are unsupported in v1; repo hooks and managed agents target local IDE sessions only. |
70
- | Cursor CLI hook parity | `cursor-agent` print mode is eval-covered but hook/session env parity is degraded relative to IDE wiring. |
71
- | Cursor hard-gate release gate | Live preToolUse Write smoke passed 2026-05-24; release tagging and publication stay blocked pending broader release closeout. |
72
-
73
- ## Subagent Dispatch
74
-
75
- | Runtime | Dispatch surface | Descriptor source | Tool Access | Verification surface |
76
- |---------|------------------|-------------------|-------------|----------------------|
77
- | Claude Code | Native Task/subagent surface | Host-managed; no Agentera descriptor files shipped for this phase | None (no descriptors) | RuntimeAdapter registry |
78
- | OpenCode | Single `agentera` primary agent with `general` subagent dispatch | `.opencode/agents/agentera.md`, bootstrapped by `.opencode/plugins/agentera.js` | Per-agent `permission` frontmatter (broad: write+bash allow) | `scripts/smoke_opencode_bootstrap.mjs`, `agentera validate descriptors` |
79
- | Copilot CLI | User-driven host action such as `/fleet` when available | Host-managed; no Agentera descriptor files shipped for this phase | N/A (no descriptors) | RuntimeAdapter registry |
80
- | Codex CLI | Native agent descriptors under `~/.codex/agents` or project `.codex/agents` with bounded `[agents]` settings | `skills/agentera/agents/*.toml`, installed by `scripts/setup_codex.py` and `agentera upgrade` | Global sandbox policy (no per-agent) | `agentera validate descriptors`, `tests/test_setup_codex.py`, `tests/test_upgrade_cli.py` |
81
- | Cursor IDE | Single `agentera` agent with `general` subagent dispatch | `.cursor/agents/agentera.md`, via local plugin or `agentera upgrade --runtime cursor` | Global full access (no per-agent) | `references/adapters/cursor.md`, `scripts/validate_lifecycle_adapters.py`, `tests/test_upgrade_cli.py` |
82
- | Cursor Agent CLI | Host-managed `cursor-agent -p` print mode | Workspace `.cursor/agents/*.md` when present; no separate CLI descriptor install | Global full access (no per-agent) | `scripts/eval_skills.py --runtime cursor-agent`, `tests/test_eval_skills.py` |
83
-
84
- Agentera v2 does not write legacy `[agents.<name>]` Codex config blocks. Capability dispatch must use runtime-native subagent descriptors or host Task surfaces, not unsupported `agentera <capability>` CLI commands.
85
-
86
- ## Copilot install notes
87
-
88
- Recommended marketplace install:
1
+ # Runtime feature parity
89
2
 
90
- ```bash
91
- copilot plugin marketplace add jgabor/agentera
92
- copilot plugin install <skill>@agentera
93
- ```
3
+ Release-relevant behavior is governed by
4
+ `runtime-lifecycle-authority.yaml` and `runtime-lifecycle-adapters.yaml`.
5
+ Active runtime IDs are exactly `opencode`, `codex`, `cursor`, and `copilot`.
94
6
 
95
- Umbrella install:
7
+ `cursor-agent` is an inactive compatibility alias and Cursor CLI source-product
8
+ name beneath the single `cursor` identity. It is never an active runtime ID.
9
+ Claude Code is a retired migration and consent-gated historical-import source,
10
+ not a supported runtime.
96
11
 
97
- ```bash
98
- copilot plugin install jgabor/agentera
99
- ```
12
+ ## Lifecycle identity and support floor
100
13
 
101
- The marketplace install path is verified working. Granular installs avoid
102
- umbrella discovery bug `github/copilot-cli#2390`.
14
+ | Runtime | Required surface | Conditional surface | Canonical skill |
15
+ | --- | --- | --- | --- |
16
+ | OpenCode | host | — | `~/.agents/skills/agentera` |
17
+ | Codex | CLI | — | `~/.agents/skills/agentera` |
18
+ | Cursor | Agent CLI | IDE | `~/.agents/skills/agentera` |
19
+ | GitHub Copilot | CLI | — | `~/.agents/skills/agentera` |
103
20
 
104
- Granular installs provide core `SKILL.md` behavior. App-home tools such as
105
- doctor, installer, validators, and shared setup helpers require the managed
106
- Agentera app or a local clone with the shared `scripts/` directory.
21
+ The support floor requires the canonical skill, complete diagnosis, and
22
+ resolved mandatory evidence. Unknown or missing mandatory evidence and denied
23
+ trust block release. A known false installation or enablement state is
24
+ diagnosed as degraded. An unobserved conditional Cursor IDE is
25
+ `not_applicable` and does not block CLI support.
107
26
 
108
- Deprecated fallback: `copilot plugin install OWNER/REPO`, Git URLs, and local
109
- paths still work, but Copilot warns they are deprecated.
27
+ `prime` projects a bounded summary from this lifecycle snapshot. `doctor`
28
+ projects detailed evidence and exact actions from the same snapshot.
110
29
 
111
- ## Cursor install notes
30
+ ## Common adapter contract
112
31
 
113
- **Local plugin (no Marketplace listing required)**
32
+ Every active runtime reports the same eight categories:
114
33
 
115
- ```bash
116
- git clone https://github.com/jgabor/agentera.git ~/.cursor/plugins/local/agentera
117
- # or: ln -s /path/to/agentera ~/.cursor/plugins/local/agentera
118
- ```
34
+ | Category | Meaning |
35
+ | --- | --- |
36
+ | skills | Canonical and additional skill discovery locations |
37
+ | plugins | Agentera plugin package or host plugin state |
38
+ | hooks | Session and tool lifecycle wiring |
39
+ | agents | Runtime-native Agentera descriptors |
40
+ | configuration | User or project configuration evidence |
41
+ | enablement | Whether the host has enabled the integration |
42
+ | trust | Observed trust state; never inferred or approved |
43
+ | native actions | Exact user-owned host/package-manager steps |
44
+
45
+ Each runtime/surface/category claim declares capability, evidence, and
46
+ remediation. Unsupported or unverified host behavior cannot satisfy a mandatory
47
+ support floor.
48
+
49
+ ## Host behavior
50
+
51
+ | Runtime | Skill/package source | Hook and validation behavior | Agent behavior |
52
+ | --- | --- | --- | --- |
53
+ | OpenCode | Portable skill plus `.opencode/plugins/agentera.js` | Conditional hard gate for reconstructable write/edit candidates; sparse or unreconstructed patches remain advisory | Single Agentera descriptor in `.opencode/agents/agentera.md` |
54
+ | Codex | `.codex-plugin/plugin.json`, shared skill, and marketplace entry | Plugin and copied-hook sources validate `apply_patch` paths before/after use; final patch content is not reconstructed | Capability TOML descriptors under `skills/agentera/agents/` |
55
+ | Cursor | One identity spanning Agent CLI and optional IDE plugin | IDE hooks provide session context and conditional hard-gate validation for reconstructable Write/Edit candidates | One IDE Agentera descriptor; CLI uses the Cursor-owned binary surface |
56
+ | GitHub Copilot | Root and repository plugin manifests | `sessionStart`, `sessionEnd`, `preToolUse`, and `postToolUse`; reconstructable candidates are denied before mutation | Host-managed dispatch; no Agentera-specific Copilot agent descriptor |
119
57
 
120
- Restart Cursor or run **Developer: Reload Window**. The plugin root must contain
121
- `.cursor-plugin/plugin.json`. Agentera is not published to the Cursor Marketplace
122
- yet.
58
+ The validated hard-gate claims retain their exact scope:
123
59
 
124
- The plugin loads skills, managed capability agents, and hooks. When you open a
125
- project that is not an Agentera install root, `sessionStart` exports
126
- `AGENTERA_HOME` from the plugin checkout (including a plugin-root fallback when
127
- env and project walk-up do not resolve a managed root).
60
+ - OpenCode: Conditional hard gate for reconstructable write and edit candidates. Sparse payloads and apply_patch patchText without reconstructed full content are allowed.
61
+ - GitHub Copilot: Conditional hard gate via preToolUse. Malformed, sparse, or non-reconstructable toolArgs are allowed.
62
+ - Cursor: Conditional hard gate for reconstructable Write and Edit candidates via preToolUse; verified after live preToolUse Write smoke (2026-05-24). Malformed, sparse, or non-reconstructable tool_input payloads are allowed.
128
63
 
129
- **Portable skill plus project upgrade**
64
+ Agentera never upgrades a runtime binary, runs a native marketplace/package
65
+ manager, authenticates, enables a plugin, or approves trust. Those operations
66
+ are emitted as `action_required`.
130
67
 
131
- Install the bundled skill, then install managed project surfaces:
68
+ ## Lifecycle repair
132
69
 
133
70
  ```bash
134
- npx skills add jgabor/agentera -g -a cursor --skill agentera -y
135
- uv run scripts/agentera upgrade --runtime cursor --dry-run
136
- uv run scripts/agentera upgrade --runtime cursor --yes
137
- uv run scripts/agentera doctor --runtime cursor
71
+ agentera upgrade --runtime all --dry-run
72
+ agentera upgrade --runtime all --yes
138
73
  ```
139
74
 
140
- Use the plugin path for a user-global install. Use upgrade when you need
141
- project-committed `.cursor/hooks.json` and `.cursor/agents/` copies. Both paths can
142
- be combined.
75
+ Preview is side-effect free. Apply is limited to declared Agentera-owned
76
+ resources with matching ownership-journal evidence. Secure automatic
77
+ publication currently requires Linux `/proc/self/fd`; other platforms receive
78
+ the same plan as explicit actions.
143
79
 
144
- Repo-native dogfood in this repository uses committed `.cursor/hooks.json` and
145
- `.cursor/agents/*.md`. Other projects install managed surfaces with the upgrade
146
- commands above.
80
+ Outcomes are `applied`, `noop`, `failed`, `blocked_unowned`,
81
+ `skipped_dependency`, and `action_required`. Independent operations continue
82
+ after a local failure, and retries re-observe state so completed work becomes
83
+ `noop`.
147
84
 
148
- Cloud agents are unsupported in v1. Conditional hard-gate validation for IDE
149
- reconstructable Write and Edit candidates is verified after live preToolUse Write
150
- smoke (2026-05-24); release tagging and publication remain blocked until explicitly
151
- approved.
85
+ ## Corpus sources
152
86
 
153
- Eval coverage for automation uses:
87
+ | Runtime identity | Source product | Default analytics |
88
+ | --- | --- | --- |
89
+ | Codex | Codex session JSONL | included |
90
+ | OpenCode | OpenCode SQLite store | included |
91
+ | Cursor | Cursor IDE JSONL | included |
92
+ | Cursor | Cursor Agent CLI SQLite source (`cursor-agent`) | included as Cursor gap-fill |
93
+ | GitHub Copilot | Copilot session SQLite store | included |
94
+ | none | Claude Code JSONL | excluded; requires `--import-source claude` |
154
95
 
155
- ```bash
156
- uv run scripts/eval_skills.py --runtime cursor-agent --dry-run
157
- ```
96
+ Claude imports use `historical_import` provenance and `active_runtime: false`.
97
+ They never add Claude to runtime inventories, readiness, or default analytics.
98
+
99
+ ## Package release surface
100
+
101
+ The npm bundle contains the shared skill and contract data plus every declared
102
+ runtime source:
103
+
104
+ - OpenCode package, plugin, command, and agent files;
105
+ - Codex plugin manifest, plugin hooks, copied-hook fallback, and capability agents;
106
+ - Cursor plugin manifest, IDE hooks, and agent descriptor;
107
+ - GitHub Copilot root/repository manifests and lifecycle hook files.
108
+
109
+ `.claude-plugin/marketplace.json` is retired and must not be packaged.
110
+
111
+ ## Validation boundary
112
+
113
+ `agentera check validate lifecycle-adapters` validates:
158
114
 
159
- ## Source of truth
160
-
161
- Runtime adapter facts are owned by the RuntimeAdapter registry at
162
- `references/adapters/runtime-adapter-registry.yaml` and loaded through
163
- `scripts/runtime_adapter_registry.py`. This reference may describe registry
164
- claims, but changes to runtime identity, lifecycle events, artifact-validation
165
- support, subagent dispatch, config targets, diagnostics, or documentation claims must be validated
166
- against the registry rather than duplicated here as an independent table.
167
-
168
- App-home classification is not runtime-specific. `scripts/install_root.py` is
169
- the shared Module for `AGENTERA_HOME`, the normal user data root, managed app,
170
- out-of-date app, unknown directories, and diagnostic semantics. Package metadata
171
- registry work stays outside both the RuntimeAdapter registry and this shared
172
- classification Module.
173
-
174
- | Surface | Path |
175
- |---------|------|
176
- | Shared artifact validator | `hooks/validate_artifact.py` |
177
- | Claude Code hook registry | `hooks/hooks.json` |
178
- | OpenCode plugin | `.opencode/plugins/agentera.js` |
179
- | OpenCode agent descriptors | `.opencode/agents/*.md` |
180
- | Copilot pre-write hook | `.github/hooks/preToolUse.json` |
181
- | Codex copied user hook config | `~/.codex/hooks.json` generated from `hooks/codex-hooks.json` with a resolved validator command |
182
- | Codex plugin hook config | `hooks/codex-plugin-hooks.json` via `.codex-plugin/plugin.json` `hooks` |
183
- | Codex agent descriptors | `skills/agentera/agents/*.toml` |
184
- | Cursor hook registry | `.cursor/hooks.json` |
185
- | Cursor agent descriptors | `.cursor/agents/*.md` |
186
- | Cursor plugin manifest | `.cursor-plugin/plugin.json` |
187
- | RuntimeAdapter registry | `references/adapters/runtime-adapter-registry.yaml` |
188
- | RuntimeAdapter registry loader | `scripts/runtime_adapter_registry.py` |
189
- | Lifecycle metadata validator | `scripts/validate_lifecycle_adapters.py` |
115
+ - lifecycle authority and exact four-runtime identity parity;
116
+ - all eight categories and every declared runtime surface;
117
+ - package-manifest coverage for all active runtimes;
118
+ - npm-bundle coverage for every lifecycle source and runtime manifest;
119
+ - 3.0.0 version mirrors;
120
+ - runtime-specific hook and documentation claims;
121
+ - absence of retired Claude package manifests.