@cleocode/skills 2026.4.5 → 2026.4.7

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 (35) hide show
  1. package/package.json +1 -1
  2. package/skills/ct-adr-recorder/SKILL.md +175 -0
  3. package/skills/ct-adr-recorder/manifest-entry.json +30 -0
  4. package/skills/ct-adr-recorder/references/cascade.md +82 -0
  5. package/skills/ct-adr-recorder/references/examples.md +141 -0
  6. package/skills/ct-artifact-publisher/SKILL.md +146 -0
  7. package/skills/ct-artifact-publisher/manifest-entry.json +30 -0
  8. package/skills/ct-artifact-publisher/references/artifact-types.md +126 -0
  9. package/skills/ct-artifact-publisher/references/handler-interface.md +187 -0
  10. package/skills/ct-consensus-voter/SKILL.md +158 -0
  11. package/skills/ct-consensus-voter/manifest-entry.json +30 -0
  12. package/skills/ct-consensus-voter/references/matrix-examples.md +140 -0
  13. package/skills/ct-grade/references/token-tracking.md +2 -2
  14. package/skills/ct-grade/scripts/run_all.py +1 -1
  15. package/skills/ct-grade-v2-1/manifest-entry.json +1 -1
  16. package/skills/ct-ivt-looper/SKILL.md +181 -0
  17. package/skills/ct-ivt-looper/manifest-entry.json +30 -0
  18. package/skills/ct-ivt-looper/references/escalation.md +91 -0
  19. package/skills/ct-ivt-looper/references/frameworks.md +119 -0
  20. package/skills/ct-ivt-looper/references/loop-anatomy.md +156 -0
  21. package/skills/ct-orchestrator/manifest-entry.json +1 -1
  22. package/skills/ct-provenance-keeper/SKILL.md +161 -0
  23. package/skills/ct-provenance-keeper/manifest-entry.json +30 -0
  24. package/skills/ct-provenance-keeper/references/signing.md +188 -0
  25. package/skills/ct-provenance-keeper/references/slsa.md +121 -0
  26. package/skills/ct-release-orchestrator/SKILL.md +134 -0
  27. package/skills/ct-release-orchestrator/manifest-entry.json +30 -0
  28. package/skills/ct-release-orchestrator/references/composition.md +138 -0
  29. package/skills/ct-release-orchestrator/references/release-types.md +130 -0
  30. package/skills/ct-skill-creator/manifest-entry.json +1 -1
  31. package/skills/ct-skill-creator/references/provider-deployment.md +9 -9
  32. package/skills/ct-skill-validator/evals/evals.json +1 -1
  33. package/skills/ct-skill-validator/manifest-entry.json +1 -1
  34. package/skills/manifest.json +252 -16
  35. package/skills/ct-skill-creator/.cleo/.context-state.json +0 -13
@@ -0,0 +1,138 @@
1
+ # Release Protocol Composition
2
+
3
+ The release parent protocol composes with two sub-protocols: `artifact-publish` and `provenance`. This file explains the composition contract, the exit-code flow, and the rollback semantics when a sub-protocol fails mid-pipeline.
4
+
5
+ ## Exit Code Flow
6
+
7
+ The composed pipeline has a single downstream exit-code convention: the parent bubbles whatever the sub-protocol returned, so the orchestrator can distinguish which layer failed.
8
+
9
+ ```
10
+ release → artifact-publish → provenance
11
+ 54 86 90-94
12
+ 55 87
13
+ 56 88
14
+ (89)
15
+ ```
16
+
17
+ | Code | Source | Meaning |
18
+ |------|--------|---------|
19
+ | 54 | release | `E_VALIDATION_FAILED` — parent-level gate failed (tests, schema, version) |
20
+ | 55 | release | `E_VERSION_BUMP_FAILED` — bump script failed |
21
+ | 56 | release | `E_TAG_CREATION_FAILED` — git tag/commit failed |
22
+ | 65 | any | `HANDOFF_REQUIRED` — yielding control to next layer (not a failure) |
23
+ | 85 | artifact-publish | `E_ARTIFACT_TYPE_UNKNOWN` — handler missing |
24
+ | 86 | artifact-publish | `E_ARTIFACT_VALIDATION_FAILED` — pre-build validation |
25
+ | 87 | artifact-publish | `E_ARTIFACT_BUILD_FAILED` — build command failed |
26
+ | 88 | artifact-publish | `E_ARTIFACT_PUBLISH_FAILED` — publish failed (rollback attempted) |
27
+ | 89 | artifact-publish | `E_ARTIFACT_ROLLBACK_FAILED` — rollback failed, dirty state |
28
+ | 90 | provenance | `E_PROVENANCE_CONFIG_INVALID` |
29
+ | 91 | provenance | `E_SIGNING_KEY_MISSING` |
30
+ | 92 | provenance | `E_SIGNATURE_INVALID` |
31
+ | 93 | provenance | `E_DIGEST_MISMATCH` |
32
+ | 94 | provenance | `E_ATTESTATION_INVALID` |
33
+
34
+ The parent MUST NOT remap sub-protocol exit codes. A caller reading `cleo release ship` output needs to know exactly which step failed.
35
+
36
+ ## Rollback Semantics
37
+
38
+ ### Single-artifact publish
39
+
40
+ On a single-artifact release that fails at publish, the parent has a clean answer: the artifact was never on the registry, so there's nothing to roll back. The parent reports exit 88 and stops. The git tag may or may not have been created; the parent MUST NOT delete it. Tag deletion is a manual operation.
41
+
42
+ ### Multi-artifact publish
43
+
44
+ On a multi-artifact release (e.g., npm + docker + tarball), the parent relies on the artifact-publish sub-protocol's per-registry rollback semantics. The sub-protocol keeps an `published_artifacts[]` list as it goes. On a failure at artifact[i], it attempts to roll back `artifacts[0..i-1]` using per-registry methods:
45
+
46
+ | Registry | Rollback |
47
+ |----------|----------|
48
+ | npm | `npm unpublish <pkg>@<version>` (within 72 hours only) |
49
+ | docker | registry API delete |
50
+ | cargo | `cargo yank` (soft, not a real unpublish) |
51
+ | github-release | `gh release delete` |
52
+ | generic-tarball | delete uploaded file (depends on target) |
53
+
54
+ If rollback succeeds across every already-published artifact, the pipeline exits 88 (clean failure). If any rollback fails, it exits 89 (dirty failure) and a human MUST intervene.
55
+
56
+ ### Git tag and commit
57
+
58
+ The parent creates the release commit and tag **before** handing off to artifact-publish. This is deliberate: the commit carries the final state that the artifacts represent, and the tag is needed by CI jobs that watch for `v*.*.*` pushes. If artifact-publish fails, the tag remains; a re-run points at the same commit.
59
+
60
+ The parent MUST NOT auto-delete the tag on failure. If a human operator wants to retract the release, they use `git tag -d` and `git push --delete` manually after inspecting the dirty state.
61
+
62
+ ## Handoff Data
63
+
64
+ Each handoff passes a minimal set of data to the next layer:
65
+
66
+ ### Release → artifact-publish
67
+
68
+ ```json
69
+ {
70
+ "version": "v2026.4.5",
71
+ "taskId": "T4900",
72
+ "epicId": "T260",
73
+ "commitSha": "3a2f1e9c...",
74
+ "tagName": "v2026.4.5",
75
+ "changelogPath": "CHANGELOG.md",
76
+ "artifactsConfig": [ /* release.artifacts[] from config.json */ ]
77
+ }
78
+ ```
79
+
80
+ ### artifact-publish → provenance
81
+
82
+ ```json
83
+ {
84
+ "version": "v2026.4.5",
85
+ "commitSha": "3a2f1e9c...",
86
+ "builtArtifacts": [
87
+ { "type": "npm-package", "path": "dist/cleo-2026.4.5.tgz", "sha256": "<hex>" },
88
+ { "type": "docker-image", "digest": "sha256:<hex>" }
89
+ ]
90
+ }
91
+ ```
92
+
93
+ ### provenance → artifact-publish (return)
94
+
95
+ ```json
96
+ {
97
+ "attestationPath": ".cleo/attestations/v2026.4.5.intoto.jsonl",
98
+ "signed": true,
99
+ "slsaLevel": "SLSA_BUILD_LEVEL_3",
100
+ "transparencyLog": {
101
+ "index": "123456789",
102
+ "url": "https://rekor.sigstore.dev"
103
+ }
104
+ }
105
+ ```
106
+
107
+ ### artifact-publish → release (return)
108
+
109
+ ```json
110
+ {
111
+ "published": [
112
+ { "type": "npm-package", "registry": "npmjs.org", "publishedAt": "2026-04-06T19:50:00Z" },
113
+ { "type": "docker-image", "registry": "ghcr.io", "publishedAt": "2026-04-06T19:51:12Z" }
114
+ ],
115
+ "attestationPath": ".cleo/attestations/v2026.4.5.intoto.jsonl"
116
+ }
117
+ ```
118
+
119
+ ## CI Handoff
120
+
121
+ In CI, the composition collapses: `.github/workflows/release.yml` runs all three sub-protocols in a single job sequence. The parent skill's job is to:
122
+
123
+ 1. Assemble the handoff data structures above from the task + config.
124
+ 2. Invoke the artifact-publish sub-protocol (or, in CI, let the workflow do it).
125
+ 3. Record the returned provenance chain in `.cleo/releases.json` via `record_release()`.
126
+ 4. Complete the task.
127
+
128
+ When CI is driving the workflow, the skill's role is record-keeping, not execution. The skill MUST NOT double-publish.
129
+
130
+ ## Source-Only Releases
131
+
132
+ A source-only release (`release.artifacts == []`) skips both sub-protocols entirely. The pipeline ends after step 4 (git commit + tag). The parent still writes the manifest entry and sets `agent_type: "documentation"`; it just records a shorter chain.
133
+
134
+ Source-only releases are common for:
135
+
136
+ - Documentation-only releases
137
+ - Spec or protocol updates
138
+ - Code changes that don't produce a publishable artifact (e.g., internal refactors before the next package bump)
@@ -0,0 +1,130 @@
1
+ # Release Type Checklists
2
+
3
+ The release parent protocol handles several release types. Each type has a distinct checklist. Pick the checklist that matches the release config before running ship.
4
+
5
+ ## Source-Only Release
6
+
7
+ No package is produced. Used for docs, spec updates, and internal code changes that precede a later packaged release.
8
+
9
+ ### Checklist
10
+
11
+ - [ ] Version is a valid semver.
12
+ - [ ] Changelog has entries for every task in the release.
13
+ - [ ] `release.artifacts` is `[]` or all entries are `enabled: false`.
14
+ - [ ] Tests pass (opt-in via `--run-tests` for major/minor).
15
+ - [ ] Tag created and pushed.
16
+ - [ ] Manifest entry recorded with `agent_type: "documentation"`.
17
+
18
+ ### Commands
19
+
20
+ ```bash
21
+ cleo release ship v2026.4.5 --bump-version --create-tag --push --no-artifacts
22
+ cleo check protocol --protocolType release --version v2026.4.5 --hasChangelog true
23
+ ```
24
+
25
+ ## npm-Package Release
26
+
27
+ Publishes one or more npm packages from the monorepo. Uses `npm publish --provenance` for SLSA L3 keyless attestation via the repository's OIDC trust.
28
+
29
+ ### Checklist
30
+
31
+ - [ ] `package.json#version` matches the release version in every publishable workspace.
32
+ - [ ] `release.artifacts[]` has an `npm-package` entry with `options.access: "public"` (for scoped public packages) or `options.access: "restricted"`.
33
+ - [ ] `options.provenance: true` is set on the npm-package entry.
34
+ - [ ] Trusted publishing is configured in npm registry settings.
35
+ - [ ] The CI workflow `.github/workflows/release.yml` will run the publish step with OIDC identity.
36
+ - [ ] Post-publish: the attestation reference is recorded in `.cleo/releases.json` via `record_release()`.
37
+
38
+ ### Commands
39
+
40
+ ```bash
41
+ cleo release ship v2026.4.5 --bump-version --create-tag --push
42
+ # CI handles the publish + attestation; the skill records the result.
43
+ cleo check protocol --protocolType release --version v2026.4.5 --hasChangelog true
44
+ cleo check protocol --protocolType artifact-publish --artifactType npm-package --buildPassed true
45
+ cleo check protocol --protocolType provenance --hasAttestation true --hasSbom true
46
+ ```
47
+
48
+ ## docker-image Release
49
+
50
+ Builds and pushes a container image to GHCR or another OCI registry, signs with cosign keyless, and generates a CycloneDX SBOM.
51
+
52
+ ### Checklist
53
+
54
+ - [ ] `Dockerfile` at the image root is clean and reproducible.
55
+ - [ ] `release.artifacts[]` has a `docker-image` entry with the target registry.
56
+ - [ ] `release.security.provenance.framework: "slsa"` and `level: "SLSA_BUILD_LEVEL_3"`.
57
+ - [ ] Cosign keyless signing is wired through the CI OIDC identity.
58
+ - [ ] SBOM generator (syft or equivalent) is available in the CI image.
59
+ - [ ] Post-publish: the image digest, signature, and SBOM reference are recorded.
60
+
61
+ ### Commands
62
+
63
+ ```bash
64
+ cleo release ship v2026.4.5 --bump-version --create-tag --push
65
+ # CI runs: docker build → cosign sign → cosign attest → syft sbom → push
66
+ cleo check protocol --protocolType artifact-publish --artifactType docker-image --buildPassed true
67
+ cleo check protocol --protocolType provenance --hasAttestation true --hasSbom true
68
+ ```
69
+
70
+ ## cargo-crate Release
71
+
72
+ Publishes one or more crates from the Rust workspace to crates.io.
73
+
74
+ ### Checklist
75
+
76
+ - [ ] `Cargo.toml#version` matches the release version for every publishable crate.
77
+ - [ ] `cargo publish --dry-run` succeeds locally and in CI.
78
+ - [ ] Inter-crate version bumps are consistent across the workspace.
79
+ - [ ] `CARGO_REGISTRY_TOKEN` is available in CI (not in config.json).
80
+ - [ ] Dependent crates publish after their dependencies (dependency order matters).
81
+
82
+ ### Commands
83
+
84
+ ```bash
85
+ cleo release ship v2026.4.5 --bump-version --create-tag --push
86
+ # CI runs: cargo test → cargo publish --dry-run → cargo publish
87
+ cleo check protocol --protocolType artifact-publish --artifactType cargo-crate --buildPassed true
88
+ ```
89
+
90
+ ## github-tarball Release
91
+
92
+ Creates a source tarball and attaches it to a GitHub Release. Optional cosign signing.
93
+
94
+ ### Checklist
95
+
96
+ - [ ] Tarball exclude list is correct (no `.git/`, no secrets, no generated files).
97
+ - [ ] Checksum file (`checksums.txt`) is generated alongside the tarball.
98
+ - [ ] GitHub Release body includes the changelog section and the checksums.
99
+ - [ ] If signing is enabled, cosign keyless produces a `.sig` file alongside the tarball.
100
+
101
+ ### Commands
102
+
103
+ ```bash
104
+ cleo release ship v2026.4.5 --bump-version --create-tag --push
105
+ # gh release create runs in CI with the tarball attached
106
+ cleo check protocol --protocolType artifact-publish --artifactType github-release --buildPassed true
107
+ ```
108
+
109
+ ## Multi-Artifact Release
110
+
111
+ A release with more than one artifact type — typical for a major version that ships npm + docker + GitHub Release together.
112
+
113
+ ### Checklist
114
+
115
+ - [ ] Every artifact's checklist above is completed.
116
+ - [ ] Artifacts are declared in a stable order in `release.artifacts[]` — the sub-protocol publishes sequentially in config order.
117
+ - [ ] Rollback semantics per artifact are understood (see references/composition.md).
118
+ - [ ] The provenance chain references every artifact digest in the same attestation.
119
+
120
+ ### Commands
121
+
122
+ ```bash
123
+ cleo release ship v2026.4.5 --bump-version --create-tag --push
124
+ # CI orchestrates all publishes; skill records the unified chain
125
+ cleo check protocol --protocolType release --version v2026.4.5 --hasChangelog true
126
+ ```
127
+
128
+ ## Which Checklist Wins?
129
+
130
+ If `release.artifacts[]` contains one entry, pick the checklist for that entry type. If it contains multiple entries, use the Multi-Artifact checklist and run each single-artifact checklist for the sub-types. If it is empty, use the Source-Only checklist.
@@ -2,7 +2,7 @@
2
2
  "name": "ct-skill-creator",
3
3
  "version": "1.0.0",
4
4
  "description": "Guide for creating effective CLEO skills with the full v2 standard.",
5
- "path": "packages/ct-skills/skills/ct-skill-creator",
5
+ "path": "packages/skills/skills/ct-skill-creator",
6
6
  "status": "active",
7
7
  "tier": 3,
8
8
  "core": false,
@@ -1,13 +1,13 @@
1
1
  # Provider Deployment
2
2
 
3
- This reference covers multi-provider skill deployment: where each provider reads skills from, how symlinks enable a single source of truth, and how to add new skills to the CLEO ct-skills package.
3
+ This reference covers multi-provider skill deployment: where each provider reads skills from, how symlinks enable a single source of truth, and how to add new skills to the @cleocode/skills package.
4
4
 
5
5
  ## Architecture
6
6
 
7
7
  Skills follow a single-source-of-truth model:
8
8
 
9
9
  ```
10
- packages/ct-skills/skills/ <-- canonical location
10
+ packages/skills/skills/ <-- canonical location
11
11
  ct-cleo/SKILL.md
12
12
  ct-orchestrator/SKILL.md
13
13
  ct-skill-creator/SKILL.md
@@ -57,7 +57,7 @@ CLEO-aware providers read both SKILL.md and manifest.json. The manifest provides
57
57
 
58
58
  ### CLEO Package Skills
59
59
 
60
- Skills in `packages/ct-skills/skills/` are managed by CLEO infrastructure. They are deployed via the CLEO skill system and do not need manual symlink setup. The manifest.json, dispatch-config.json, and provider-skills-map.json coordinate deployment automatically.
60
+ Skills in `packages/skills/skills/` are managed by CLEO infrastructure. They are deployed via the CLEO skill system and do not need manual symlink setup. The manifest.json, dispatch-config.json, and provider-skills-map.json coordinate deployment automatically.
61
61
 
62
62
  ### User Global Skills
63
63
 
@@ -110,13 +110,13 @@ cp -r my-skill/ .cursor/skills/my-skill/
110
110
 
111
111
  Project skills are committed to the repository and shared with all contributors.
112
112
 
113
- ## Adding a New Skill to CLEO ct-skills
113
+ ## Adding a New Skill to @cleocode/skills
114
114
 
115
- To add a new skill to the CLEO package (`packages/ct-skills/`):
115
+ To add a new skill to the CLEO package (`packages/skills/`):
116
116
 
117
117
  1. **Create the skill directory**:
118
118
  ```bash
119
- mkdir -p packages/ct-skills/skills/my-new-skill
119
+ mkdir -p packages/skills/skills/my-new-skill
120
120
  ```
121
121
 
122
122
  2. **Write SKILL.md with standard fields only**:
@@ -132,7 +132,7 @@ To add a new skill to the CLEO package (`packages/ct-skills/`):
132
132
  ```
133
133
  Include only v2 standard fields. No `version`, `tier`, `category`, or other CLEO-only fields.
134
134
 
135
- 3. **Add entry to manifest.json** (`packages/ct-skills/skills/manifest.json`):
135
+ 3. **Add entry to manifest.json** (`packages/skills/skills/manifest.json`):
136
136
  ```json
137
137
  {
138
138
  "name": "my-new-skill",
@@ -164,12 +164,12 @@ To add a new skill to the CLEO package (`packages/ct-skills/`):
164
164
  }
165
165
  ```
166
166
 
167
- 4. **Add entry to dispatch-config.json** (`packages/ct-skills/dispatch-config.json`):
167
+ 4. **Add entry to dispatch-config.json** (`packages/skills/dispatch-config.json`):
168
168
  Add the skill to relevant `by_task_type`, `by_keyword`, and/or `by_protocol` mappings if it should participate in dispatch routing.
169
169
 
170
170
  5. **Update totalSkills** in manifest.json `_meta.totalSkills` to reflect the new count.
171
171
 
172
172
  6. **Validate**: Run the skill validator to confirm the new skill passes all checks:
173
173
  ```bash
174
- python3 packages/ct-skills/skills/ct-skill-creator/scripts/quick_validate.py packages/ct-skills/skills/my-new-skill
174
+ python3 packages/skills/skills/ct-skill-creator/scripts/quick_validate.py packages/skills/skills/my-new-skill
175
175
  ```
@@ -15,7 +15,7 @@
15
15
  },
16
16
  {
17
17
  "id": 2,
18
- "prompt": "Check if this skill folder is v2 compliant: packages/ct-skills/skills/ct-orchestrator",
18
+ "prompt": "Check if this skill folder is v2 compliant: packages/skills/skills/ct-orchestrator",
19
19
  "expected_output": "Validation results for ct-orchestrator with tier breakdown, and an HTML report",
20
20
  "expectations": [
21
21
  "Claude validates ct-orchestrator not some other skill",
@@ -1,5 +1,5 @@
1
1
  {
2
- "_comment": "CLEO-only metadata -- add to packages/ct-skills/skills/manifest.json",
2
+ "_comment": "CLEO-only metadata -- add to packages/skills/skills/manifest.json",
3
3
  "name": "ct-skill-validator",
4
4
  "version": "1.0.0",
5
5
  "tier": 2,
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "$schema": "https://cleo-dev.com/schemas/v1/skills-manifest.schema.json",
3
3
  "_meta": {
4
- "schemaVersion": "2.3.0",
5
- "lastUpdated": "2026-03-02",
6
- "totalSkills": 15,
7
- "generatedFrom": "manual restructure provider-neutral skills consolidation",
8
- "architectureNote": "Universal Subagent Architecture: All spawns use provider-neutral delegation with skill/protocol injection."
4
+ "schemaVersion": "2.4.0",
5
+ "lastUpdated": "2026-04-07",
6
+ "totalSkills": 21,
7
+ "generatedFrom": "T260lifecycle pipeline rework: dedicated skills for ADR, IVT loop, consensus, release, artifact-publish, provenance",
8
+ "architectureNote": "Universal Subagent Architecture: All spawns use provider-neutral delegation with skill/protocol injection. Pipeline stages and cross-cutting protocols each have a dedicated skill — no overloading."
9
9
  },
10
10
  "dispatch_matrix": {
11
11
  "_comment": "Maps task types/keywords to skill NAMES. Provider adapter decides HOW to execute.",
@@ -13,35 +13,45 @@
13
13
  "research": "ct-research-agent",
14
14
  "planning": "ct-epic-architect",
15
15
  "implementation": "ct-task-executor",
16
- "testing": "ct-dev-workflow",
16
+ "testing": "ct-ivt-looper",
17
17
  "documentation": "ct-documentor",
18
18
  "specification": "ct-spec-writer",
19
19
  "validation": "ct-validator",
20
- "release": "ct-dev-workflow",
21
- "consensus": "ct-validator",
22
- "contribution": "ct-contribution"
20
+ "release": "ct-release-orchestrator",
21
+ "consensus": "ct-consensus-voter",
22
+ "contribution": "ct-contribution",
23
+ "architecture-decision": "ct-adr-recorder",
24
+ "artifact-publish": "ct-artifact-publisher",
25
+ "provenance": "ct-provenance-keeper"
23
26
  },
24
27
  "by_keyword": {
25
28
  "research|investigate|explore|discover": "ct-research-agent",
26
29
  "epic|plan|decompose|architect": "ct-epic-architect",
27
30
  "implement|build|execute|create": "ct-task-executor",
28
- "test|coverage|integration|vitest": "ct-dev-workflow",
31
+ "ivt|test|coverage|integration|verify against spec": "ct-ivt-looper",
29
32
  "doc|document|readme|guide": "ct-documentor",
30
33
  "spec|rfc|protocol|contract": "ct-spec-writer",
31
- "validate|verify|audit|compliance|consensus|vote": "ct-validator",
32
- "release|version|publish|deploy|ship|changelog": "ct-dev-workflow"
34
+ "validate|verify|audit|compliance": "ct-validator",
35
+ "consensus|vote|verdict|resolve the debate": "ct-consensus-voter",
36
+ "adr|architecture decision|formalize|lock in the choice": "ct-adr-recorder",
37
+ "release|version|ship|changelog|cut release": "ct-release-orchestrator",
38
+ "artifact|publish|registry|npm publish|docker push": "ct-artifact-publisher",
39
+ "provenance|attestation|sbom|sigstore|slsa": "ct-provenance-keeper"
33
40
  },
34
41
  "by_protocol": {
35
42
  "research": "ct-research-agent",
36
- "consensus": "ct-validator",
43
+ "consensus": "ct-consensus-voter",
44
+ "architecture-decision": "ct-adr-recorder",
37
45
  "specification": "ct-spec-writer",
38
46
  "decomposition": "ct-epic-architect",
39
47
  "implementation": "ct-task-executor",
40
48
  "contribution": "ct-contribution",
41
- "release": "ct-dev-workflow",
42
- "agent-protocol": "ct-orchestrator",
43
49
  "validation": "ct-validator",
44
- "testing": "ct-dev-workflow"
50
+ "testing": "ct-ivt-looper",
51
+ "release": "ct-release-orchestrator",
52
+ "artifact-publish": "ct-artifact-publisher",
53
+ "provenance": "ct-provenance-keeper",
54
+ "agent-protocol": "ct-orchestrator"
45
55
  }
46
56
  },
47
57
  "skills": [
@@ -464,6 +474,232 @@
464
474
  "requires_session": false,
465
475
  "requires_epic": false
466
476
  }
477
+ },
478
+ {
479
+ "name": "ct-adr-recorder",
480
+ "version": "1.0.0",
481
+ "description": "Records Architecture Decision Records from accepted consensus verdicts. Drafts the document in the proposed-then-accepted HITL lifecycle, links to the originating consensus manifest, persists to the canonical SQLite decisions table, and triggers downstream invalidation when an accepted ADR is later superseded.",
482
+ "path": "skills/ct-adr-recorder",
483
+ "tags": ["adr", "architecture-decision", "hitl", "decision-record"],
484
+ "status": "active",
485
+ "tier": 2,
486
+ "token_budget": 8000,
487
+ "protocol": "architecture-decision",
488
+ "references": [
489
+ "skills/ct-adr-recorder/references/cascade.md",
490
+ "skills/ct-adr-recorder/references/examples.md"
491
+ ],
492
+ "capabilities": {
493
+ "inputs": ["consensus-manifest-id", "task-id", "decision-context"],
494
+ "outputs": ["adr-markdown", "decisions-table-row", "manifest-entry"],
495
+ "dependencies": [],
496
+ "dispatch_triggers": [
497
+ "write ADR",
498
+ "record architecture decision",
499
+ "formalize this decision",
500
+ "create ADR",
501
+ "lock in the choice"
502
+ ],
503
+ "compatible_subagent_types": ["general-purpose"],
504
+ "chains_to": ["ct-consensus-voter", "ct-spec-writer"],
505
+ "dispatch_keywords": {
506
+ "primary": ["adr", "decision", "architecture", "formalize"],
507
+ "secondary": ["proposed", "accepted", "superseded", "hitl"]
508
+ }
509
+ },
510
+ "constraints": {
511
+ "max_context_tokens": 60000,
512
+ "requires_session": false,
513
+ "requires_epic": false
514
+ }
515
+ },
516
+ {
517
+ "name": "ct-ivt-looper",
518
+ "version": "1.0.0",
519
+ "description": "Runs a project-agnostic autonomous Implement→Validate→Test compliance loop on any git worktree. Detects the project's test framework and iterates until the implementation satisfies its specification. Works in any git worktree regardless of language or framework — the autonomous compliance layer enforced before any release or PR.",
520
+ "path": "skills/ct-ivt-looper",
521
+ "tags": ["testing", "ivt-loop", "autonomous", "framework-agnostic", "compliance"],
522
+ "status": "active",
523
+ "tier": 2,
524
+ "token_budget": 10000,
525
+ "protocol": "testing",
526
+ "references": [
527
+ "skills/ct-ivt-looper/references/escalation.md",
528
+ "skills/ct-ivt-looper/references/frameworks.md",
529
+ "skills/ct-ivt-looper/references/loop-anatomy.md"
530
+ ],
531
+ "capabilities": {
532
+ "inputs": ["task-id", "spec-reference", "worktree-path"],
533
+ "outputs": ["manifest-entry", "ivt-convergence-report"],
534
+ "dependencies": [],
535
+ "dispatch_triggers": [
536
+ "run the IVT loop",
537
+ "implement and verify",
538
+ "ship this task",
539
+ "verify against spec",
540
+ "complete implementation with tests"
541
+ ],
542
+ "compatible_subagent_types": ["general-purpose"],
543
+ "chains_to": ["ct-validator", "ct-release-orchestrator"],
544
+ "dispatch_keywords": {
545
+ "primary": ["ivt", "implement", "validate", "test"],
546
+ "secondary": ["converge", "framework", "spec", "iterate"]
547
+ }
548
+ },
549
+ "constraints": {
550
+ "max_context_tokens": 80000,
551
+ "requires_session": false,
552
+ "requires_epic": false
553
+ }
554
+ },
555
+ {
556
+ "name": "ct-consensus-voter",
557
+ "version": "1.0.0",
558
+ "description": "Runs structured multi-agent voting for decision tasks with confidence scores, conflict detection, and HITL escalation when the threshold is not met. Produces a voting matrix JSON, enforces the 0.5 threshold, and flags ties within 0.1 confidence as contested for human tiebreak. Split from the overloaded ct-validator skill.",
559
+ "path": "skills/ct-consensus-voter",
560
+ "tags": ["consensus", "voting", "decision", "multi-agent", "hitl"],
561
+ "status": "active",
562
+ "tier": 2,
563
+ "token_budget": 6000,
564
+ "protocol": "consensus",
565
+ "references": ["skills/ct-consensus-voter/references/matrix-examples.md"],
566
+ "capabilities": {
567
+ "inputs": ["task-id", "question", "candidate-options"],
568
+ "outputs": ["voting-matrix", "manifest-entry"],
569
+ "dependencies": [],
570
+ "dispatch_triggers": [
571
+ "reach consensus",
572
+ "vote on options",
573
+ "resolve the debate",
574
+ "pick the best approach",
575
+ "run consensus"
576
+ ],
577
+ "compatible_subagent_types": ["general-purpose"],
578
+ "chains_to": ["ct-adr-recorder", "ct-research-agent"],
579
+ "dispatch_keywords": {
580
+ "primary": ["consensus", "vote", "decide", "verdict"],
581
+ "secondary": ["confidence", "rationale", "evidence", "contested"]
582
+ }
583
+ },
584
+ "constraints": {
585
+ "max_context_tokens": 60000,
586
+ "requires_session": false,
587
+ "requires_epic": false
588
+ }
589
+ },
590
+ {
591
+ "name": "ct-release-orchestrator",
592
+ "version": "1.0.0",
593
+ "description": "Orchestrates the full release pipeline: version bump → changelog → commit → tag, then conditionally forks to artifact-publish and provenance based on release config. Parent protocol that composes ct-artifact-publisher and ct-provenance-keeper as sub-protocols. Source-only releases skip both sub-protocols entirely.",
594
+ "path": "skills/ct-release-orchestrator",
595
+ "tags": ["release", "orchestration", "composition", "ship", "version"],
596
+ "status": "active",
597
+ "tier": 2,
598
+ "token_budget": 8000,
599
+ "protocol": "release",
600
+ "references": [
601
+ "skills/ct-release-orchestrator/references/composition.md",
602
+ "skills/ct-release-orchestrator/references/release-types.md"
603
+ ],
604
+ "capabilities": {
605
+ "inputs": ["version", "epic-id", "release-config"],
606
+ "outputs": ["release-commit", "git-tag", "changelog-entry", "manifest-entry"],
607
+ "dependencies": [],
608
+ "dispatch_triggers": [
609
+ "ship release",
610
+ "cut release",
611
+ "publish version",
612
+ "cleo release ship",
613
+ "promote epic to released"
614
+ ],
615
+ "compatible_subagent_types": ["general-purpose"],
616
+ "chains_to": ["ct-artifact-publisher", "ct-provenance-keeper"],
617
+ "dispatch_keywords": {
618
+ "primary": ["release", "ship", "version", "tag"],
619
+ "secondary": ["changelog", "semver", "bump", "publish"]
620
+ }
621
+ },
622
+ "constraints": {
623
+ "max_context_tokens": 60000,
624
+ "requires_session": false,
625
+ "requires_epic": true
626
+ }
627
+ },
628
+ {
629
+ "name": "ct-artifact-publisher",
630
+ "version": "1.0.0",
631
+ "description": "Builds and publishes artifacts to registries (npm, PyPI, cargo, docker, GitHub releases, generic tarballs) following the validate → dry-run → build → publish → record-provenance pipeline. Invoked by ct-release-orchestrator as a sub-skill when a release has artifact config. Never stores credentials in output or manifest.",
632
+ "path": "skills/ct-artifact-publisher",
633
+ "tags": ["artifact", "publish", "registry", "release", "distribution"],
634
+ "status": "active",
635
+ "tier": 2,
636
+ "token_budget": 8000,
637
+ "protocol": "artifact-publish",
638
+ "references": [
639
+ "skills/ct-artifact-publisher/references/artifact-types.md",
640
+ "skills/ct-artifact-publisher/references/handler-interface.md"
641
+ ],
642
+ "capabilities": {
643
+ "inputs": ["release-config", "version", "commit-sha"],
644
+ "outputs": ["built-artifacts", "checksums", "publish-results", "manifest-entry"],
645
+ "dependencies": [],
646
+ "dispatch_triggers": [
647
+ "publish artifacts",
648
+ "build and publish",
649
+ "run artifact publish",
650
+ "ship packages",
651
+ "push to registry"
652
+ ],
653
+ "compatible_subagent_types": ["general-purpose"],
654
+ "chains_to": ["ct-provenance-keeper"],
655
+ "dispatch_keywords": {
656
+ "primary": ["artifact", "publish", "registry", "package"],
657
+ "secondary": ["npm", "docker", "cargo", "tarball"]
658
+ }
659
+ },
660
+ "constraints": {
661
+ "max_context_tokens": 60000,
662
+ "requires_session": false,
663
+ "requires_epic": false
664
+ }
665
+ },
666
+ {
667
+ "name": "ct-provenance-keeper",
668
+ "version": "1.0.0",
669
+ "description": "Generates in-toto v1 attestations, SLSA-level provenance records, SBOMs (CycloneDX or SPDX), and sigstore/cosign signatures for published artifacts. Invoked by ct-artifact-publisher as a delegation for signing and attestation. Records the full commit→build→artifact→attestation→registry chain in .cleo/releases.json.",
670
+ "path": "skills/ct-provenance-keeper",
671
+ "tags": ["provenance", "slsa", "attestation", "sbom", "sigstore", "supply-chain"],
672
+ "status": "active",
673
+ "tier": 2,
674
+ "token_budget": 6000,
675
+ "protocol": "provenance",
676
+ "references": [
677
+ "skills/ct-provenance-keeper/references/signing.md",
678
+ "skills/ct-provenance-keeper/references/slsa.md"
679
+ ],
680
+ "capabilities": {
681
+ "inputs": ["built-artifacts", "commit-sha", "builder-identity"],
682
+ "outputs": ["in-toto-attestation", "sbom", "signature", "releases-json-entry"],
683
+ "dependencies": [],
684
+ "dispatch_triggers": [
685
+ "generate provenance",
686
+ "sign artifacts",
687
+ "create attestation",
688
+ "record supply chain",
689
+ "run slsa attestation"
690
+ ],
691
+ "compatible_subagent_types": ["general-purpose"],
692
+ "chains_to": [],
693
+ "dispatch_keywords": {
694
+ "primary": ["provenance", "attestation", "sbom", "slsa"],
695
+ "secondary": ["sigstore", "cosign", "in-toto", "sign"]
696
+ }
697
+ },
698
+ "constraints": {
699
+ "max_context_tokens": 60000,
700
+ "requires_session": false,
701
+ "requires_epic": false
702
+ }
467
703
  }
468
704
  ]
469
705
  }