@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.
- package/package.json +1 -1
- package/skills/ct-adr-recorder/SKILL.md +175 -0
- package/skills/ct-adr-recorder/manifest-entry.json +30 -0
- package/skills/ct-adr-recorder/references/cascade.md +82 -0
- package/skills/ct-adr-recorder/references/examples.md +141 -0
- package/skills/ct-artifact-publisher/SKILL.md +146 -0
- package/skills/ct-artifact-publisher/manifest-entry.json +30 -0
- package/skills/ct-artifact-publisher/references/artifact-types.md +126 -0
- package/skills/ct-artifact-publisher/references/handler-interface.md +187 -0
- package/skills/ct-consensus-voter/SKILL.md +158 -0
- package/skills/ct-consensus-voter/manifest-entry.json +30 -0
- package/skills/ct-consensus-voter/references/matrix-examples.md +140 -0
- package/skills/ct-grade/references/token-tracking.md +2 -2
- package/skills/ct-grade/scripts/run_all.py +1 -1
- package/skills/ct-grade-v2-1/manifest-entry.json +1 -1
- package/skills/ct-ivt-looper/SKILL.md +181 -0
- package/skills/ct-ivt-looper/manifest-entry.json +30 -0
- package/skills/ct-ivt-looper/references/escalation.md +91 -0
- package/skills/ct-ivt-looper/references/frameworks.md +119 -0
- package/skills/ct-ivt-looper/references/loop-anatomy.md +156 -0
- package/skills/ct-orchestrator/manifest-entry.json +1 -1
- package/skills/ct-provenance-keeper/SKILL.md +161 -0
- package/skills/ct-provenance-keeper/manifest-entry.json +30 -0
- package/skills/ct-provenance-keeper/references/signing.md +188 -0
- package/skills/ct-provenance-keeper/references/slsa.md +121 -0
- package/skills/ct-release-orchestrator/SKILL.md +134 -0
- package/skills/ct-release-orchestrator/manifest-entry.json +30 -0
- package/skills/ct-release-orchestrator/references/composition.md +138 -0
- package/skills/ct-release-orchestrator/references/release-types.md +130 -0
- package/skills/ct-skill-creator/manifest-entry.json +1 -1
- package/skills/ct-skill-creator/references/provider-deployment.md +9 -9
- package/skills/ct-skill-validator/evals/evals.json +1 -1
- package/skills/ct-skill-validator/manifest-entry.json +1 -1
- package/skills/manifest.json +252 -16
- 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/
|
|
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
|
|
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/
|
|
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/
|
|
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
|
|
113
|
+
## Adding a New Skill to @cleocode/skills
|
|
114
114
|
|
|
115
|
-
To add a new skill to the CLEO package (`packages/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
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",
|
package/skills/manifest.json
CHANGED
|
@@ -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.
|
|
5
|
-
"lastUpdated": "2026-
|
|
6
|
-
"totalSkills":
|
|
7
|
-
"generatedFrom": "
|
|
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": "T260 — lifecycle 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-
|
|
16
|
+
"testing": "ct-ivt-looper",
|
|
17
17
|
"documentation": "ct-documentor",
|
|
18
18
|
"specification": "ct-spec-writer",
|
|
19
19
|
"validation": "ct-validator",
|
|
20
|
-
"release": "ct-
|
|
21
|
-
"consensus": "ct-
|
|
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|
|
|
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
|
|
32
|
-
"
|
|
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-
|
|
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-
|
|
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
|
}
|