agent-skillboard 0.2.18 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +43 -0
- package/README.md +129 -258
- package/docs/adapters.md +37 -113
- package/docs/ai-skill-routing-goal.md +35 -109
- package/docs/capabilities.md +17 -104
- package/docs/install.md +36 -485
- package/docs/policy-model.md +50 -280
- package/docs/positioning.md +19 -86
- package/docs/profiles.md +21 -153
- package/docs/reference.md +115 -363
- package/docs/rollout-runbook.md +23 -25
- package/docs/routing.md +23 -90
- package/docs/user-flow.md +60 -284
- package/docs/value-proof.md +23 -181
- package/docs/variant-lifecycle.md +47 -67
- package/docs/versioning.md +31 -264
- package/examples/v2-multi-source.config.yaml +35 -0
- package/examples/v2-policy-error.config.yaml +6 -0
- package/package.json +1 -1
- package/src/advisor/actions.mjs +102 -6
- package/src/advisor/application-commands.mjs +10 -9
- package/src/advisor/apply-action.mjs +74 -1
- package/src/advisor/guidance.mjs +24 -16
- package/src/advisor/schema.mjs +17 -6
- package/src/advisor/skills.mjs +18 -5
- package/src/advisor.mjs +27 -9
- package/src/agent-integration-cli.mjs +13 -4
- package/src/agent-integration-content.mjs +21 -11
- package/src/agent-integration-files.mjs +1 -1
- package/src/agent-inventory-platforms.mjs +10 -0
- package/src/agent-inventory.mjs +23 -1
- package/src/agent-skill-import.mjs +2 -2
- package/src/audit-paths.mjs +42 -0
- package/src/brief-cli.mjs +3 -2
- package/src/brief-renderer.mjs +1 -0
- package/src/cli.mjs +498 -232
- package/src/compatibility.mjs +24 -0
- package/src/control/can-use-guard.mjs +21 -1
- package/src/control/config-write.mjs +32 -2
- package/src/control/skill-crud.mjs +5 -0
- package/src/control/v2-guard.mjs +175 -0
- package/src/control/v2-skill-crud.mjs +32 -0
- package/src/control/v2-skill-forget.mjs +38 -0
- package/src/control/variant-status.mjs +47 -1
- package/src/control.mjs +55 -0
- package/src/doctor.mjs +63 -4
- package/src/domain/v2-policy.mjs +111 -0
- package/src/hook-plan.mjs +33 -3
- package/src/impact.mjs +52 -29
- package/src/index.mjs +25 -1
- package/src/init.mjs +50 -34
- package/src/inventory-install-units.mjs +63 -0
- package/src/inventory-json.mjs +279 -0
- package/src/inventory-refresh.mjs +163 -18
- package/src/lifecycle-cli.mjs +40 -12
- package/src/lifecycle-content.mjs +52 -67
- package/src/migration/v1-to-v2.mjs +212 -0
- package/src/migration/v2-files.mjs +211 -0
- package/src/migration/v2-journal.mjs +169 -0
- package/src/migration/v2-projection.mjs +108 -0
- package/src/migration/v2-transaction.mjs +205 -0
- package/src/policy.mjs +3 -0
- package/src/reconcile.mjs +139 -111
- package/src/report.mjs +168 -148
- package/src/review.mjs +2 -0
- package/src/route-advisory.mjs +47 -2
- package/src/route-selection.mjs +38 -2
- package/src/route.mjs +62 -2
- package/src/shared-skill.mjs +301 -0
- package/src/source-digest.mjs +42 -0
- package/src/source-profiles.mjs +171 -144
- package/src/source-verification.mjs +32 -48
- package/src/uninstall.mjs +22 -0
- package/src/user-state-paths.mjs +19 -0
- package/src/user-uninstall.mjs +146 -0
- package/src/workspace.mjs +119 -79
package/docs/value-proof.md
CHANGED
|
@@ -1,197 +1,39 @@
|
|
|
1
1
|
# SkillBoard Value Proof
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
than manually inspecting `/skills` or a raw workflow skill list.
|
|
5
|
-
|
|
6
|
-
The proof is executable:
|
|
7
|
-
|
|
8
|
-
```bash
|
|
9
|
-
node --test test/readme-value-proof.test.mjs
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
The test uses repository fixtures, not a mocked string. It drives the same CLI
|
|
13
|
-
surfaces a user or agent would use.
|
|
14
|
-
|
|
15
|
-
## GitHub-reader takeaway
|
|
16
|
-
|
|
17
|
-
The raw list answers inventory questions: which skill declarations are connected
|
|
18
|
-
to this workflow?
|
|
19
|
-
|
|
20
|
-
SkillBoard answers routing questions: which skills can actually run now, why
|
|
21
|
-
are others blocked, which skill should steer the user's current request when
|
|
22
|
-
several skills overlap, and what approved action changes the next state?
|
|
23
|
-
|
|
24
|
-
In the tested fixture, the raw list can make the workflow look ready because it
|
|
25
|
-
shows `matt.tdd active workflow-auto`. SkillBoard refuses that unsafe claim and
|
|
26
|
-
reports 0 usable skills, 8 blocked skills, 2 policy errors, and 1 policy warning
|
|
27
|
-
before invocation.
|
|
28
|
-
|
|
29
|
-
## Case 1: Raw skill list vs SkillBoard brief
|
|
30
|
-
|
|
31
|
-
Fixture:
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
examples/skillboard.config.yaml
|
|
35
|
-
examples/skills
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
`examples/skillboard.config.yaml` is an intentional policy-failure fixture. It
|
|
39
|
-
is not the passing starter example; it exists to prove that SkillBoard refuses a
|
|
40
|
-
raw-list availability claim when policy health fails.
|
|
41
|
-
|
|
42
|
-
Workflow:
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
codex-night-workflow
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
Raw skill list command:
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
node bin/skillboard.mjs list skills \
|
|
52
|
-
--config examples/skillboard.config.yaml \
|
|
53
|
-
--skills examples/skills \
|
|
54
|
-
--workflow codex-night-workflow
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
Observed raw-list result:
|
|
58
|
-
|
|
59
|
-
- Raw skill list: 4 workflow-linked rows.
|
|
60
|
-
- It includes `matt.tdd active workflow-auto`.
|
|
61
|
-
- It does not include policy health.
|
|
62
|
-
|
|
63
|
-
SkillBoard brief command:
|
|
3
|
+
The executable proof is the v2 contract and integration suite:
|
|
64
4
|
|
|
65
5
|
```bash
|
|
66
|
-
node
|
|
67
|
-
--config examples/skillboard.config.yaml \
|
|
68
|
-
--skills examples/skills \
|
|
69
|
-
--workflow codex-night-workflow
|
|
6
|
+
node --test test/v2-agent-sharing.test.mjs test/v2-onboarding-behavior.test.mjs test/v2-guard-route.test.mjs test/v2-surface-integration.test.mjs
|
|
70
7
|
```
|
|
71
8
|
|
|
72
|
-
|
|
9
|
+
## What it proves
|
|
73
10
|
|
|
74
|
-
-
|
|
75
|
-
-
|
|
76
|
-
-
|
|
77
|
-
-
|
|
78
|
-
-
|
|
79
|
-
|
|
11
|
+
- Setup creates user-level state without project init.
|
|
12
|
+
- Valid discovered skills default to enabled and agent-local.
|
|
13
|
+
- Disabled skills and skills absent from the selected agent are denied.
|
|
14
|
+
- Share and unshare preserve agent-owned originals.
|
|
15
|
+
- Optional preference changes ranking without changing availability.
|
|
16
|
+
- Source and provenance audits do not change guard results.
|
|
17
|
+
- Commands produce the same result from different working directories.
|
|
18
|
+
- Version 1 is read-only until explicit migration.
|
|
80
19
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
- The raw list can make a workflow look usable because it reports declared
|
|
84
|
-
state such as `active` and `workflow-auto`.
|
|
85
|
-
- The SkillBoard brief checks policy health before use and refuses the unsafe
|
|
86
|
-
availability claim.
|
|
87
|
-
|
|
88
|
-
## Case 2: Approved action-card flow
|
|
89
|
-
|
|
90
|
-
Fixture:
|
|
91
|
-
|
|
92
|
-
```bash
|
|
93
|
-
examples/multi-source.config.yaml
|
|
94
|
-
examples/multi-source-skills
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
The test copies this fixture to a temporary project, including `AGENTS.md` and
|
|
98
|
-
`CLAUDE.md`, then runs:
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
node bin/skillboard.mjs brief ... --include-actions --json
|
|
102
|
-
node bin/skillboard.mjs apply-action activate-skill:anthropic.docx ... --yes --json
|
|
103
|
-
node bin/skillboard.mjs brief ... --json
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
Observed action-card flow result:
|
|
107
|
-
|
|
108
|
-
- Before apply, usable skills: 2.
|
|
109
|
-
- The current action list includes `activate-skill:anthropic.docx`.
|
|
110
|
-
- Applying that one approved action returns `changed: true`.
|
|
111
|
-
- After apply, usable skills: 2 -> 3.
|
|
112
|
-
- `anthropic.docx` appears in `manual_allowed`.
|
|
113
|
-
- The final brief has 0 policy errors.
|
|
114
|
-
|
|
115
|
-
What this proves:
|
|
116
|
-
|
|
117
|
-
- SkillBoard is not just a catalog. It gives a current action id, applies one
|
|
118
|
-
approved change, then re-resolves the next availability state.
|
|
119
|
-
- The user does not need to hand-edit YAML or infer enable/disable impact from
|
|
120
|
-
raw `SKILL.md` files.
|
|
121
|
-
|
|
122
|
-
## Case 3: AI-mediated approved action proof
|
|
123
|
-
|
|
124
|
-
The test also simulates the product path without calling an external LLM:
|
|
20
|
+
## Reproduce the user surface
|
|
125
21
|
|
|
126
22
|
```bash
|
|
127
|
-
node bin/skillboard.mjs
|
|
128
|
-
node bin/skillboard.mjs
|
|
129
|
-
node bin/skillboard.mjs
|
|
130
|
-
node bin/skillboard.mjs guard use matt.grill-me ... --json
|
|
23
|
+
node bin/skillboard.mjs setup --yes --agent codex
|
|
24
|
+
node bin/skillboard.mjs brief --agent codex --json
|
|
25
|
+
node bin/skillboard.mjs check --config examples/v2-multi-source.config.yaml --skills examples/multi-source-skills
|
|
131
26
|
```
|
|
132
27
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
- The chosen confirmation maps to the current
|
|
138
|
-
`activate-skill:anthropic.docx` action id.
|
|
139
|
-
- `apply-action --yes --json` returns a post-apply brief.
|
|
140
|
-
- The returned brief no longer offers the stale activate action and now offers
|
|
141
|
-
the matching disable action.
|
|
142
|
-
- `guard use anthropic.docx --workflow codex-night-workflow` fails before the
|
|
143
|
-
approved action and succeeds after it.
|
|
144
|
-
- `guard use matt.grill-me --workflow codex-night-workflow` stays denied
|
|
145
|
-
because the workflow blocks that skill.
|
|
146
|
-
|
|
147
|
-
What this proves:
|
|
148
|
-
|
|
149
|
-
- The proof uses the current `assistant_guidance` action id instead of cached
|
|
150
|
-
output.
|
|
151
|
-
- SkillBoard keeps the guard as the final boundary before invocation.
|
|
152
|
-
- Blocked skills still produce a non-zero, machine-readable denial.
|
|
153
|
-
|
|
154
|
-
## Case 4: AI route picks the right allowed skill
|
|
28
|
+
The policy contains only `enabled`, `shared`, and optional preference. Generated
|
|
29
|
+
inventory records `installed_on`. Source and provenance remain optional audit
|
|
30
|
+
metadata and never determine availability. Runtime and action authorization
|
|
31
|
+
remain outside SkillBoard's scope.
|
|
155
32
|
|
|
156
|
-
|
|
157
|
-
skill before invocation:
|
|
33
|
+
## Version 1 compatibility proof
|
|
158
34
|
|
|
159
35
|
```bash
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
--workflow codex-night-workflow \
|
|
164
|
-
--json
|
|
36
|
+
skillboard migrate v2 --config <path> --json
|
|
37
|
+
skillboard migrate v2 --config <path> --yes --json
|
|
38
|
+
skillboard migrate v2 --config <path> --rollback <backup> --json
|
|
165
39
|
```
|
|
166
|
-
|
|
167
|
-
Observed route result:
|
|
168
|
-
|
|
169
|
-
- Matched capability: `test-first-implementation`.
|
|
170
|
-
- Match source: `capability`.
|
|
171
|
-
- Confidence: `high`.
|
|
172
|
-
- Recommended skill: `matt.tdd`.
|
|
173
|
-
- Fallback skill: `private.tdd-work-continuity`.
|
|
174
|
-
- Overlap resolution is exposed in route payloads when several allowed skills
|
|
175
|
-
match, so agents can explain the deterministic route without hiding the other
|
|
176
|
-
available skills.
|
|
177
|
-
- Guard command: `skillboard guard use matt.tdd ...`.
|
|
178
|
-
- Guard result for `matt.tdd`: allowed.
|
|
179
|
-
- Start disclosure: `I will use matt.tdd for this request.`
|
|
180
|
-
- Finish disclosure: `I used matt.tdd for this request.`
|
|
181
|
-
|
|
182
|
-
The proof also checks `brief --intent "write tests before implementation"` so
|
|
183
|
-
the recommendation appears inside `assistant_guidance.route`, not only through
|
|
184
|
-
the standalone `route` command.
|
|
185
|
-
|
|
186
|
-
For a request outside the workflow's declared capability, such as "ship a
|
|
187
|
-
powerpoint deck", SkillBoard returns no recommended skill and tells the AI to:
|
|
188
|
-
Ask a clarifying question before choosing a skill.
|
|
189
|
-
|
|
190
|
-
What this proves:
|
|
191
|
-
|
|
192
|
-
- The AI can ask SkillBoard which skill fits a normal user request instead of
|
|
193
|
-
guessing from raw `SKILL.md` text.
|
|
194
|
-
- Allowed skill use stays low-friction: the AI discloses use at start and
|
|
195
|
-
finish instead of asking for redundant approval.
|
|
196
|
-
- No-match results are explicit, so the AI can ask a clarifying question rather
|
|
197
|
-
than forcing a poor skill choice.
|
|
@@ -1,86 +1,66 @@
|
|
|
1
1
|
# Skill Variant Lifecycle
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A variant is a manual content adaptation with snapshot and digest history. The
|
|
4
|
+
lifecycle does not authorize availability. A registered variant is usable only
|
|
5
|
+
according to its ordinary v2 `enabled` entry and generated installation
|
|
6
|
+
presence; optional preference ranks it and never changes availability.
|
|
4
7
|
|
|
5
|
-
|
|
8
|
+
## Current v2 boundary
|
|
6
9
|
|
|
7
|
-
|
|
10
|
+
`variant status` remains a read-only advanced operator surface for content and
|
|
11
|
+
inventory lifecycle metadata. Authorization-mutating `fork`, `approve`, and
|
|
12
|
+
`reset` forms remain an explicit v1 compatibility boundary. Legacy capability
|
|
13
|
+
or mode fields are never current availability gates. Runtime/action
|
|
14
|
+
authorization remains with the agent or harness.
|
|
8
15
|
|
|
9
|
-
|
|
16
|
+
## Content review flow
|
|
10
17
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
skillboard variant reset <variant-id> --to-base|--to-approved --config <path> --skills <dir> [--yes] [--dry-run] [--mode manual-only|router-only|workflow-auto] [--json]
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
Use `--json` in scripts. Success payloads return the command-specific lifecycle fields such as `message`, `dryRun`, `changed`, `plan`, `filePlan`, `skill`, `variant`, and `warnings`. Errors include `ok: false` with a stable `error.code` and `error.message`. Usage errors exit with code `2` in both plain and JSON modes.
|
|
20
|
-
|
|
21
|
-
## Recommended review flow
|
|
22
|
-
|
|
23
|
-
1. Register or fork the variant from a known base:
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
skillboard variant fork claude.a --from a --capability task-review --workflow claude-workflow --path claude/a --config skillboard.config.yaml --skills skills --json
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
Fork creates a draft relationship and raw snapshot records without promoting the variant for automatic workflow use.
|
|
30
|
-
|
|
31
|
-
2. Edit the variant `SKILL.md` by hand. This is where the actual adaptation happens.
|
|
18
|
+
1. Fork a variant from a known base.
|
|
19
|
+
2. Edit its `SKILL.md` manually.
|
|
20
|
+
3. Inspect live/base/approved digest drift.
|
|
21
|
+
4. Approve the reviewed snapshot.
|
|
22
|
+
5. Reset to a recorded base or approved snapshot when necessary.
|
|
32
23
|
|
|
33
|
-
|
|
24
|
+
SkillBoard does not convert or rewrite skill bodies and does not promise semantic
|
|
25
|
+
equivalence between base and variant.
|
|
34
26
|
|
|
35
|
-
|
|
36
|
-
skillboard variant status claude.a --config skillboard.config.yaml --skills skills --json
|
|
37
|
-
```
|
|
27
|
+
## Read-only inspection
|
|
38
28
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
skillboard variant approve claude.a --config skillboard.config.yaml --skills skills --mode router-only --json
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
Approval writes an approved snapshot, records the live digest, updates the skill metadata, and promotes the workflow preference/fallback policy for the chosen capability.
|
|
29
|
+
```bash
|
|
30
|
+
skillboard variant status <variant-id> --config <path> --skills <dir> --json
|
|
31
|
+
```
|
|
48
32
|
|
|
49
|
-
|
|
33
|
+
The `variant status` read-only payload reports stored content and inventory
|
|
34
|
+
lifecycle metadata plus computed digest drift.
|
|
35
|
+
Snapshots live under `.skillboard/variant-snapshots/<encoded-skill-id>/` and are
|
|
36
|
+
created lazily. Path containment checks protect live and snapshot files.
|
|
50
37
|
|
|
51
|
-
|
|
52
|
-
skillboard variant reset claude.a --to-base --config skillboard.config.yaml --skills skills --yes --json
|
|
53
|
-
skillboard variant reset claude.a --to-approved --config skillboard.config.yaml --skills skills --yes --json
|
|
54
|
-
```
|
|
38
|
+
## Version 1 compatibility reference
|
|
55
39
|
|
|
56
|
-
|
|
40
|
+
Historical v1 commands accepted capability, workflow, owner-install-unit, and
|
|
41
|
+
mode values such as `manual-only`, `router-only`, and `workflow-auto`. Those
|
|
42
|
+
arguments describe the v1 migration/compatibility surface only; they do not
|
|
43
|
+
authorize v2 availability.
|
|
57
44
|
|
|
58
|
-
|
|
45
|
+
```text
|
|
46
|
+
skillboard variant fork <variant-id> --from <base-id> --capability <name> --workflow <name> --path <path> ...
|
|
47
|
+
skillboard variant approve <variant-id> ...
|
|
48
|
+
skillboard variant reset <variant-id> --to-base|--to-approved ...
|
|
49
|
+
```
|
|
59
50
|
|
|
60
|
-
|
|
51
|
+
Before using a migrated variant, set its v2 policy explicitly:
|
|
61
52
|
|
|
62
53
|
```yaml
|
|
54
|
+
version: 2
|
|
63
55
|
skills:
|
|
64
|
-
claude
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
base:
|
|
72
|
-
content_digest: sha256:...
|
|
73
|
-
snapshot: .skillboard/variant-snapshots/claude.a/base.md
|
|
74
|
-
approved:
|
|
75
|
-
content_digest: sha256:...
|
|
76
|
-
snapshot: .skillboard/variant-snapshots/claude.a/approved.md
|
|
56
|
+
claude-review:
|
|
57
|
+
enabled: true
|
|
58
|
+
shared: false
|
|
59
|
+
preference:
|
|
60
|
+
intents:
|
|
61
|
+
- review
|
|
62
|
+
priority: 100
|
|
77
63
|
```
|
|
78
64
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
## Safety boundaries
|
|
82
|
-
|
|
83
|
-
- `variant fork` and `variant add` create policy metadata; they do not make a newly edited skill equivalent to the base.
|
|
84
|
-
- `variant approve` should happen only after human review of the live `SKILL.md` body and the `variant status` digest output.
|
|
85
|
-
- `variant reset` writes files only through the safe replacement helper and refuses ambiguous reset targets.
|
|
86
|
-
- A variant is still governed by normal capability, workflow, exposure, install-unit, and invocation checks.
|
|
65
|
+
These authorization-mutating compatibility commands do not change v2 policy.
|
|
66
|
+
Use the ordinary v2 enable/disable/share/unshare commands for policy changes.
|
package/docs/versioning.md
CHANGED
|
@@ -1,278 +1,45 @@
|
|
|
1
1
|
# Versioning
|
|
2
2
|
|
|
3
|
-
SkillBoard
|
|
4
|
-
|
|
3
|
+
SkillBoard is public alpha. Package releases follow semantic versioning; policy
|
|
4
|
+
schema versions are explicit inside `skillboard.config.yaml`.
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
source profiles, and the generated lockfile.
|
|
6
|
+
## Policy schema timeline
|
|
8
7
|
|
|
9
|
-
|
|
8
|
+
- v0.3.0 introduces policy schema v2; later v0.3.x releases continue to write it.
|
|
9
|
+
- v0.3.x provides a one-release read-only window for policy schema v1.
|
|
10
|
+
- v0.4.0 removes the v1 reader and v1 compatibility projection.
|
|
11
|
+
- v1 mutation is never supported after v2 ships; migrate first.
|
|
10
12
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
Current config schema version:
|
|
14
|
-
|
|
15
|
-
```yaml
|
|
16
|
-
version: 1
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
The project is a public alpha. Breaking changes are allowed before `1.0.0`, but
|
|
20
|
-
they must be documented in release notes and should include a migration note when
|
|
21
|
-
they affect user config.
|
|
22
|
-
|
|
23
|
-
## Versioned Surfaces
|
|
24
|
-
|
|
25
|
-
SkillBoard versions these surfaces deliberately:
|
|
26
|
-
|
|
27
|
-
- CLI package version: the npm package and command behavior.
|
|
28
|
-
- Config schema version: the top-level `version` field in
|
|
29
|
-
`skillboard.config.yaml`.
|
|
30
|
-
- Source profile format: YAML files under `profiles/` and project-specific
|
|
31
|
-
`.skillboard/profiles/`.
|
|
32
|
-
- Workflow contracts: workflow names, required capabilities, active skill pools,
|
|
33
|
-
required outputs, and harness choices.
|
|
34
|
-
- Capability contracts: canonical skill, alternatives, and default policy for a
|
|
35
|
-
capability.
|
|
36
|
-
- Exported skill entries: shared or vendor skills governed by SkillBoard.
|
|
37
|
-
- Install-unit entries: plugin, marketplace, package, harness, MCP, hook, agent,
|
|
38
|
-
and LSP sources.
|
|
39
|
-
- Lockfile data: pinned source/cache digest, skill content digests, policy, and
|
|
40
|
-
compatible harnesses.
|
|
41
|
-
|
|
42
|
-
SkillBoard does not try to centrally version every prompt or helper skill. A
|
|
43
|
-
workflow-internal private skill can remain inside that workflow package until it
|
|
44
|
-
becomes shared, auto-invokable, vendor-provided, or cross-workflow.
|
|
45
|
-
|
|
46
|
-
## Release Versioning
|
|
47
|
-
|
|
48
|
-
The package follows SemVer with a stricter alpha convention:
|
|
49
|
-
|
|
50
|
-
- Patch: bug fixes, docs, new tests, safer validation, and non-breaking profile
|
|
51
|
-
additions.
|
|
52
|
-
- Minor: new commands, new config fields with safe defaults, new report sections,
|
|
53
|
-
new built-in source profiles, and new policy checks that are warnings first.
|
|
54
|
-
- Major: post-`1.0.0` breaking CLI, config, or policy behavior.
|
|
55
|
-
|
|
56
|
-
Before `1.0.0`, breaking changes may happen in minor releases, but the changelog
|
|
57
|
-
must call them out clearly.
|
|
58
|
-
|
|
59
|
-
Suggested tags:
|
|
60
|
-
|
|
61
|
-
- `v0.1.0-alpha`: first public GitHub alpha.
|
|
62
|
-
- `v0.2.7`: one-time runtime source review before manual activation, ask-after
|
|
63
|
-
skill routing, purge uninstall, README benefit-first positioning,
|
|
64
|
-
source inventory refresh, doctor/status, source pin refresh,
|
|
65
|
-
installer/config detection, resilient detector warnings, and richer dry-run
|
|
66
|
-
plans.
|
|
67
|
-
- `v0.3.0-alpha`: signed remote source verification hardening and migration
|
|
68
|
-
workflow.
|
|
69
|
-
- `v1.0.0`: config schema and core CLI behavior are stable enough for external
|
|
70
|
-
workflows to rely on.
|
|
71
|
-
|
|
72
|
-
## Config Schema Version
|
|
73
|
-
|
|
74
|
-
The top-level `version` field is the schema version, not the package version.
|
|
75
|
-
|
|
76
|
-
Rules:
|
|
77
|
-
|
|
78
|
-
- `version: 1` is the only supported schema today.
|
|
79
|
-
- Missing `version` is treated as `1` for early compatibility.
|
|
80
|
-
- Unsupported future versions must fail fast rather than silently parsing with
|
|
81
|
-
older semantics.
|
|
82
|
-
- New fields should default to the safest behavior.
|
|
83
|
-
- New automatic invocation behavior must be opt-in.
|
|
84
|
-
- New policy checks should start as warnings unless they protect an important
|
|
85
|
-
safety boundary.
|
|
86
|
-
|
|
87
|
-
Breaking schema changes need a migration note. A future `skillboard migrate`
|
|
88
|
-
command can automate those changes, but it is not implemented yet.
|
|
89
|
-
|
|
90
|
-
## Source Profile Versioning
|
|
91
|
-
|
|
92
|
-
Source profiles are data, not hardcoded adapter branches. Built-in profiles live
|
|
93
|
-
under `profiles/`; project profiles can live under `.skillboard/profiles/`.
|
|
94
|
-
|
|
95
|
-
Profile compatibility rules:
|
|
96
|
-
|
|
97
|
-
- Adding a new built-in profile is a patch or minor change.
|
|
98
|
-
- Changing a built-in profile's namespace, target path prefix, default status,
|
|
99
|
-
default invocation, or default exposure is a breaking profile behavior change.
|
|
100
|
-
- External profiles should not grant `global-auto` unless they also mark the
|
|
101
|
-
imported skills as `global-meta`.
|
|
102
|
-
- External repository skills should normally import as `vendor`, `candidate`, or
|
|
103
|
-
`quarantined`, with `manual-only` or `router-only` invocation.
|
|
104
|
-
- Harness/plugin bundle profiles should use `unit-managed` for child skills when
|
|
105
|
-
the parent bundle owns commands, hooks, MCP servers, or config mutation.
|
|
106
|
-
|
|
107
|
-
Profile imports can be reviewed as fragments or merged directly:
|
|
13
|
+
Exact migration commands:
|
|
108
14
|
|
|
109
15
|
```bash
|
|
110
|
-
skillboard
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
--out .skillboard/reports/import-fragment.yaml
|
|
16
|
+
skillboard migrate v2 --config <path> --json
|
|
17
|
+
skillboard migrate v2 --config <path> --yes --json
|
|
18
|
+
skillboard migrate v2 --config <path> --rollback <backup> --json
|
|
114
19
|
```
|
|
115
20
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
--source-root /path/to/source \
|
|
120
|
-
--config skillboard.config.yaml \
|
|
121
|
-
--merge \
|
|
122
|
-
--dry-run
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
`--merge` is append-only by default. `--replace` is required to overwrite
|
|
126
|
-
existing skill or install-unit ids. Drop `--dry-run` only after reviewing the
|
|
127
|
-
reported text and YAML semantic change plan.
|
|
128
|
-
|
|
129
|
-
## Workflow And Capability Versioning
|
|
130
|
-
|
|
131
|
-
The primary unit of compatibility is the workflow, not an individual skill.
|
|
132
|
-
|
|
133
|
-
Version these centrally:
|
|
134
|
-
|
|
135
|
-
- workflow name and intent;
|
|
136
|
-
- harness and fallback harness assumptions;
|
|
137
|
-
- required capabilities;
|
|
138
|
-
- active, blocked, and manual-only skill pools;
|
|
139
|
-
- required outputs;
|
|
140
|
-
- exported skill contracts used by more than one workflow;
|
|
141
|
-
- policy decisions that allow automatic invocation.
|
|
142
|
-
|
|
143
|
-
Avoid central versioning for:
|
|
144
|
-
|
|
145
|
-
- one-off prompts;
|
|
146
|
-
- workflow-internal helper skills;
|
|
147
|
-
- private skills used by only one workflow;
|
|
148
|
-
- temporary templates that are not auto-invokable;
|
|
149
|
-
- implementation details inside a harness bundle.
|
|
150
|
-
|
|
151
|
-
When a workflow changes its required outputs, required capabilities, or
|
|
152
|
-
workflow-auto skill set, treat it as a compatibility change even if no file paths
|
|
153
|
-
changed.
|
|
154
|
-
|
|
155
|
-
## Lockfile Policy
|
|
156
|
-
|
|
157
|
-
`skillboard lock write` generates `skillboard.lock.yaml` from the current
|
|
158
|
-
workspace.
|
|
159
|
-
|
|
160
|
-
The lockfile pins:
|
|
161
|
-
|
|
162
|
-
- config schema version;
|
|
163
|
-
- install-unit source, cache path, verified path, digest, and trust status;
|
|
164
|
-
- skill id, path, and content hash;
|
|
165
|
-
- workflow/capability bindings;
|
|
166
|
-
- generated timestamp.
|
|
167
|
-
|
|
168
|
-
The lockfile should represent a verified working set, not a desired-state file.
|
|
169
|
-
Users should edit `skillboard.config.yaml`; tools should generate the lockfile.
|
|
170
|
-
Local `source` and `cache_path` entries are digest-verified by `skillboard audit
|
|
171
|
-
sources --verify`. Remote or command-based sources need a configured
|
|
172
|
-
`source_digest` and, when signatures are used, a matching `public_key`.
|
|
173
|
-
Fetchable Git sources can be materialized and pinned with `skillboard sources
|
|
174
|
-
refresh`, which updates `cache_path`, `source_digest`, and `verified_at` in the
|
|
175
|
-
config after cloning into `.skillboard/sources/`.
|
|
176
|
-
Relative local paths are resolved from the config directory first and then from
|
|
177
|
-
the current working directory, so bundled examples can use project-root-relative
|
|
178
|
-
paths while project configs can still keep config-local paths.
|
|
179
|
-
`skillboard lock write` refuses to write when verification has errors unless
|
|
180
|
-
`--allow-unverified` is passed explicitly for investigation artifacts.
|
|
181
|
-
|
|
182
|
-
## Release Checklist
|
|
183
|
-
|
|
184
|
-
Before tagging a public release:
|
|
185
|
-
|
|
186
|
-
- Run `npm run check`.
|
|
187
|
-
- Run `node --check` across `src`, `test`, and `bin`.
|
|
188
|
-
- Run `npm pack --dry-run --json` and confirm internal artifacts are excluded.
|
|
189
|
-
- Run at least one CLI smoke test through the public surface.
|
|
190
|
-
- Confirm docs mention any breaking config, profile, or CLI changes.
|
|
191
|
-
- Update package version and release notes.
|
|
192
|
-
- Confirm the repository `NPM_TOKEN` secret can publish `agent-skillboard`.
|
|
193
|
-
The publish job uses that token for npm authentication and requests
|
|
194
|
-
provenance with GitHub Actions OIDC, so keep `permissions.id-token: write`,
|
|
195
|
-
the npm registry URL in `setup-node`, and
|
|
196
|
-
`NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}` on the publish step.
|
|
197
|
-
- Push a version tag that exactly matches `package.json`, for example `v0.2.7`
|
|
198
|
-
for package version `0.2.7`.
|
|
199
|
-
- Let `.github/workflows/publish.yml` publish from the tag. The workflow runs
|
|
200
|
-
the full check suite, validates that the tag matches the package version, and
|
|
201
|
-
skips `npm publish` only when that exact version already exists on npm.
|
|
202
|
-
|
|
203
|
-
For alpha releases, include a short "completion notes" section. Current
|
|
204
|
-
completion notes:
|
|
205
|
-
|
|
206
|
-
- source inventory refresh covers known local agent skill roots, plugin-cache
|
|
207
|
-
manifests, and user-supplied scan roots;
|
|
208
|
-
- `sources refresh` covers Git-compatible remote sources and digest pin refresh;
|
|
209
|
-
- `inventory detect` covers installer output and explicit mutated config files
|
|
210
|
-
for commands, hooks, MCP servers, and modified config paths;
|
|
211
|
-
- dry-run plans report a capped YAML semantic change list rather than full patch
|
|
212
|
-
hunks;
|
|
213
|
-
- unusual YAML trivia may still be normalized during structured config writes.
|
|
214
|
-
|
|
215
|
-
## 0.1.1 Completion Notes
|
|
216
|
-
|
|
217
|
-
- duplicate installed skill IDs are consolidated into one canonical skill entry
|
|
218
|
-
with duplicate source locations preserved as metadata;
|
|
219
|
-
- canonical duplicate skills can be shared by Codex and Hermes local workflows
|
|
220
|
-
without generating user-visible `-2` suffixes;
|
|
221
|
-
- README and install docs include a Hermes system prompt bridge for profiles
|
|
222
|
-
that do not automatically read `AGENTS.md` or `CLAUDE.md`.
|
|
223
|
-
|
|
224
|
-
## 0.1.2 Completion Notes
|
|
225
|
-
|
|
226
|
-
- add `--version` and `-v` flags to the CLI for fast version verification in
|
|
227
|
-
npm, global, source-tree, and tarball installs;
|
|
228
|
-
- add a dedicated test for the version flags;
|
|
229
|
-
- update README quick-start to verify the installed version before running
|
|
230
|
-
policy commands.
|
|
231
|
-
|
|
232
|
-
## 0.2.7 Completion Notes
|
|
233
|
-
|
|
234
|
-
- reject direct `skillboard activate` and `skillboard prefer` attempts for
|
|
235
|
-
reviewed runtime/plugin skills that remain `status: blocked`, while
|
|
236
|
-
preserving reviewed quarantined manual-only activation.
|
|
237
|
-
|
|
238
|
-
## 0.2.6 Completion Notes
|
|
239
|
-
|
|
240
|
-
- keep reviewed `status: blocked` runtime/plugin skills non-activatable while
|
|
241
|
-
preserving the reviewed quarantined runtime/plugin manual activation path.
|
|
242
|
-
|
|
243
|
-
## 0.2.5 Completion Notes
|
|
244
|
-
|
|
245
|
-
- align reset-cleanup action-card preview and apply internals with the full
|
|
246
|
-
`.skillboard/` purge semantics used by `skillboard uninstall --purge`.
|
|
247
|
-
|
|
248
|
-
## 0.2.4 Completion Notes
|
|
21
|
+
Preview is non-mutating, apply creates an adjacent byte-for-byte backup, and
|
|
22
|
+
rollback restores the selected backup. Old action ids, hooks, and lock
|
|
23
|
+
projections are invalid after migration.
|
|
249
24
|
|
|
250
|
-
|
|
251
|
-
of the full `.skillboard/` project state directory, covering source caches,
|
|
252
|
-
rollout logs, variant snapshots, profiles, hooks, and reports while preserving
|
|
253
|
-
local skill files.
|
|
25
|
+
## Versioned v2 contract
|
|
254
26
|
|
|
255
|
-
|
|
27
|
+
Policy availability requires `enabled: true` and generated installation presence
|
|
28
|
+
for the selected agent. `shared` controls only explicit managed propagation.
|
|
29
|
+
Preference ranks only. Source and provenance observations are informational and
|
|
30
|
+
cannot change availability. Runtime and action authorization remain outside the
|
|
31
|
+
schema.
|
|
256
32
|
|
|
257
|
-
|
|
258
|
-
influence and generated footprint removed while preserving local skill files;
|
|
259
|
-
- document the lifecycle split between conservative bridge cleanup and full
|
|
260
|
-
SkillBoard policy-footprint removal;
|
|
261
|
-
- show purge in cleanup action cards so users do not need to remember the
|
|
262
|
-
older `--reset-config --remove-reports --remove-hooks` sequence.
|
|
33
|
+
## Release checklist
|
|
263
34
|
|
|
264
|
-
|
|
35
|
+
1. Run `npm run check`.
|
|
36
|
+
2. Run `npm pack --dry-run --json` and inspect public contents.
|
|
37
|
+
3. Confirm `CHANGELOG.md` includes the package version.
|
|
38
|
+
4. Create a matching `vX.Y.Z` tag.
|
|
39
|
+
5. `.github/workflows/publish.yml` verifies the tag exactly matches
|
|
40
|
+
`package.json`, configures the registry URL in `setup-node`, then runs
|
|
41
|
+
`npm publish` with provenance.
|
|
265
42
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
as `manual-only` workflow skills before any ask-after preference is recorded;
|
|
270
|
-
- add ask-after route policy suggestions for safe ambiguous workflow skill
|
|
271
|
-
matches while preserving the public route JSON contract;
|
|
272
|
-
- carry route candidate guard and capability roles into AI-facing brief
|
|
273
|
-
guidance;
|
|
274
|
-
- keep no-match and guard-denied routes free of use disclosures or post-use
|
|
275
|
-
policy suggestions;
|
|
276
|
-
- update README positioning around user benefit, no-global-install usage,
|
|
277
|
-
read-only normal checks, explicit approval for policy changes, and
|
|
278
|
-
conservative previewable cleanup.
|
|
43
|
+
Publishing uses `NPM_TOKEN` through `NODE_AUTH_TOKEN`. Prefer npm trusted
|
|
44
|
+
publishing with OIDC when available. Release automation skips `npm publish`
|
|
45
|
+
only when that exact version already exists on npm.
|