agent-skillboard 0.2.18 → 0.3.1
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 +85 -0
- package/README.md +161 -255
- package/bin/postinstall.mjs +2 -1
- package/docs/adapters.md +37 -113
- package/docs/ai-skill-routing-goal.md +41 -108
- package/docs/capabilities.md +17 -104
- package/docs/install.md +70 -473
- package/docs/policy-model.md +50 -280
- package/docs/positioning.md +19 -86
- package/docs/profiles.md +21 -153
- package/docs/reference.md +133 -362
- package/docs/rollout-runbook.md +23 -25
- package/docs/routing.md +23 -90
- package/docs/user-flow.md +68 -279
- package/docs/value-proof.md +23 -181
- package/docs/variant-lifecycle.md +47 -67
- package/docs/versioning.md +49 -269
- 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 +96 -13
- package/src/agent-integration-content.mjs +21 -11
- package/src/agent-integration-files.mjs +1 -1
- package/src/agent-integration-home.mjs +14 -1
- package/src/agent-inventory-platforms.mjs +21 -8
- package/src/agent-inventory.mjs +44 -16
- package/src/agent-root-registry.mjs +127 -0
- package/src/agent-skill-import.mjs +2 -2
- package/src/agent-skill-roots.mjs +70 -13
- 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 +521 -235
- 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 +71 -5
- 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/install-health.mjs +177 -0
- package/src/inventory-install-units.mjs +63 -0
- package/src/inventory-json.mjs +279 -0
- package/src/inventory-refresh.mjs +168 -19
- 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-reconcile.mjs +97 -0
- package/src/shared-skill.mjs +325 -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 +161 -0
- package/src/workspace.mjs +119 -79
package/docs/reference.md
CHANGED
|
@@ -1,413 +1,184 @@
|
|
|
1
1
|
# SkillBoard Reference
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
SkillBoard flow and need exact command, config, and lifecycle details.
|
|
3
|
+
## Command forms
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
For a guided first workflow, use [user-flow.md](user-flow.md).
|
|
8
|
-
|
|
9
|
-
## Command Forms
|
|
10
|
-
|
|
11
|
-
Most examples use the global `skillboard` binary. When running from a clone
|
|
12
|
-
without `npm install -g agent-skillboard`, replace `skillboard ` with
|
|
13
|
-
`node bin/skillboard.mjs ` and run from the repository root.
|
|
14
|
-
|
|
15
|
-
The npm package is `agent-skillboard`; the executable remains `skillboard`.
|
|
16
|
-
For CI or scripts, the explicit package form avoids binary-name ambiguity:
|
|
5
|
+
Global install:
|
|
17
6
|
|
|
18
7
|
```bash
|
|
19
|
-
|
|
20
|
-
npm exec --yes --package agent-skillboard -- skillboard help brief
|
|
8
|
+
skillboard <command>
|
|
21
9
|
```
|
|
22
10
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
11
|
+
Source tree: replace `skillboard ` with `node bin/skillboard.mjs `.
|
|
12
|
+
|
|
13
|
+
## Core user-level commands
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
skillboard setup [--yes] [--agent codex[,claude,opencode,hermes]] [--skill-root <path>]
|
|
17
|
+
skillboard inventory refresh [--config <path>] [--dry-run] [--json]
|
|
18
|
+
skillboard brief [--agent codex|claude|opencode|hermes] [--intent <request>] [--include-actions] [--json]
|
|
19
|
+
skillboard route <intent> --agent codex|claude|opencode|hermes [--json]
|
|
20
|
+
skillboard can-use <skill-id> --agent codex|claude|opencode|hermes [--json]
|
|
21
|
+
skillboard guard use <skill-id> --agent codex|claude|opencode|hermes [--json]
|
|
22
|
+
skillboard skill enable <skill-id> [--dry-run] [--json]
|
|
23
|
+
skillboard skill disable <skill-id> [--dry-run] [--json]
|
|
24
|
+
skillboard skill share <skill-id> [--dry-run] [--json]
|
|
25
|
+
skillboard skill unshare <skill-id> [--dry-run] [--json]
|
|
26
|
+
skillboard skill preference <skill-id> --intent <term>[,<term>] --priority <integer> [--dry-run] [--json]
|
|
27
|
+
skillboard skill forget <skill-id> [--dry-run] [--json]
|
|
28
|
+
skillboard uninstall --user (--dry-run|--yes) [--json]
|
|
29
|
+
skillboard doctor [--config <path>] [--strict] [--json]
|
|
36
30
|
```
|
|
37
31
|
|
|
38
|
-
|
|
32
|
+
Without path overrides, commands read `~/skillboard.config.yaml` and
|
|
33
|
+
`~/.skillboard/inventory.json` from any directory. Setup bootstraps both files
|
|
34
|
+
atomically and never creates project state.
|
|
39
35
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
```
|
|
36
|
+
Doctor also reports installation health: the running package version and
|
|
37
|
+
entrypoint, the `skillboard` executable selected by `PATH`, discovered package
|
|
38
|
+
installations, shadowing, and duplicate global installs. These observations are
|
|
39
|
+
informational and do not change policy health. Candidate executables are never
|
|
40
|
+
run during discovery. Use `skillboard doctor --summary` after updates; use
|
|
41
|
+
`npm config get prefix` in each Node environment to identify the owner of a
|
|
42
|
+
stale global copy. SkillBoard does not automatically uninstall another prefix.
|
|
48
43
|
|
|
49
|
-
|
|
44
|
+
Setup is the convergent install/update command. It refreshes managed guidance,
|
|
45
|
+
policy, and inventory; discovers late standard roots and Hermes profiles; and
|
|
46
|
+
creates missing compatible copies for policy entries already marked
|
|
47
|
+
`shared: true`. `--skill-root` requires exactly one `--agent`, accepts only a
|
|
48
|
+
non-symlinked path inside the invoking user's home, and persists the mapping in
|
|
49
|
+
`~/.skillboard/agent-roots.json`. That registry is operational discovery state,
|
|
50
|
+
not authorization or policy. One root cannot be registered to two agents.
|
|
50
51
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
skillboard uninstall [--dir <path>] [--dry-run] [--keep-settings] [--purge] [--remove-config|--reset-config] [--remove-reports] [--remove-hooks] [--keep-empty-dirs] [--agent-layer] [--agent codex[,claude,opencode,hermes]]
|
|
55
|
-
skillboard inventory refresh [--dir <path>] [--config <path>] [--scan-root <dir>[,<dir>]] [--dry-run] [--json]
|
|
56
|
-
skillboard inventory detect --unit <id> --config <path> [--install-output <path>] [--config-file a,b] [--source <value>] [--kind <kind>] [--scope <scope>] [--dry-run] [--json]
|
|
57
|
-
skillboard sources refresh [--dir <path>] [--config <path>] [--unit <id>[,<id>]] [--cache-dir <dir>] [--dry-run] [--json]
|
|
58
|
-
skillboard doctor [--dir <path>] [--config <path>] [--skills <dir>] [--verify] [--strict] [--json] [--summary]
|
|
59
|
-
skillboard status [--dir <path>] [--config <path>] [--skills <dir>] [--verify] [--strict] [--json] [--summary]
|
|
60
|
-
skillboard brief [--workflow <name>] [--intent <request>] [--dir <path>] [--config <path>] [--skills <dir>] [--include-actions] [--verbose] [--json]
|
|
61
|
-
skillboard apply-action <action-id> [--workflow <name>] [--dir <path>] [--config <path>] [--skills <dir>] [--dry-run] [--yes] [--allow-destructive] [--json]
|
|
62
|
-
skillboard import --profile <id-or-path> --source-root <dir> [--profile-dirs a,b] [--out <path>]
|
|
63
|
-
skillboard import --profile <id-or-path> --source-root <dir> --config <path> --merge [--replace] [--dry-run]
|
|
64
|
-
skillboard scan --config <path> --skills <dir>
|
|
65
|
-
skillboard check --config <path> --skills <dir>
|
|
66
|
-
skillboard list [skills|workflows|harnesses|install-units] --config <path> --skills <dir>
|
|
67
|
-
skillboard explain <skill-id> --config <path> --skills <dir>
|
|
68
|
-
skillboard route <intent> --workflow <name> --config <path> --skills <dir> [--json]
|
|
69
|
-
skillboard can-use <skill-id> --workflow <name> --config <path> --skills <dir>
|
|
70
|
-
skillboard guard use <skill-id> --workflow <name> --config <path> --skills <dir>
|
|
71
|
-
skillboard audit sources --config <path> --skills <dir> [--verify]
|
|
72
|
-
skillboard rollout [audit|plan|apply|rollback|report] [--dir <path>] [--config <path>] [--skills <dir>] [--transaction <id>] [--json]
|
|
73
|
-
skillboard hook install --workflow <name> --config <path> --skills <dir> [--out <path>] [--skillboard-bin <path>] [--dry-run] [--json]
|
|
74
|
-
skillboard lock write --config <path> --skills <dir> [--out <path>] [--replace] [--allow-unverified]
|
|
75
|
-
skillboard review install-unit <unit-id> [--trust-level trusted|reviewed|unreviewed|blocked] --config <path> --skills <dir>
|
|
76
|
-
skillboard add skill <skill-id> --path <relative-skill-path> --config <path> --skills <dir>
|
|
77
|
-
skillboard add workflow <workflow-name> --harness <harness-name> --config <path> --skills <dir> [--skill <id>[,<id>]]
|
|
78
|
-
skillboard add harness <harness-name> --config <path> --skills <dir> [--status <status>] [--command <cmd>[,<cmd>]]
|
|
79
|
-
skillboard variant add <variant-id> --from <base-id> --capability <name> --workflow <name> --config <path> --skills <dir> [--path <relative-skill-path>] [--mode manual-only|router-only|workflow-auto] [--category <name>] [--owner-install-unit <unit-id>] [--dry-run] [--json]
|
|
80
|
-
skillboard variant fork <variant-id> --from <base-id> --capability <name> --workflow <name> --path <relative-skill-path> --config <path> --skills <dir> [--adapted-for <label>] [--category <name>] [--owner-install-unit <unit-id>] [--dry-run] [--json]
|
|
81
|
-
skillboard variant status <variant-id> --config <path> --skills <dir> [--json]
|
|
82
|
-
skillboard variant approve <variant-id> --config <path> --skills <dir> [--mode manual-only|router-only|workflow-auto] [--dry-run] [--json]
|
|
83
|
-
skillboard variant reset <variant-id> --to-base|--to-approved --config <path> --skills <dir> [--yes] [--dry-run] [--mode manual-only|router-only|workflow-auto] [--json]
|
|
84
|
-
skillboard activate <skill-id> --workflow <name> --config <path> --skills <dir>
|
|
85
|
-
skillboard block <skill-id> --workflow <name> --config <path> --skills <dir>
|
|
86
|
-
skillboard quarantine <skill-id> --config <path> --skills <dir>
|
|
87
|
-
skillboard prefer <skill-id> --workflow <name> --capability <name> --config <path> --skills <dir>
|
|
88
|
-
skillboard remove skill <skill-id> --config <path> --skills <dir> [--force]
|
|
89
|
-
skillboard dashboard --config <path> --skills <dir> [--out <path>]
|
|
90
|
-
skillboard reconcile --config <path> --skills <dir> [--actual-harnesses a,b] [--out <path>]
|
|
91
|
-
skillboard impact disable <skill-id> --config <path> --skills <dir> [--out <path>] [--json]
|
|
92
|
-
```
|
|
52
|
+
Guard requires a valid inventory record, `enabled: true`, and the selected agent
|
|
53
|
+
in `installed_on`. Optional preference ranks candidates but never changes
|
|
54
|
+
availability.
|
|
93
55
|
|
|
94
|
-
|
|
56
|
+
Version 2 route, can-use, and guard require `--agent`; generated agent guidance
|
|
57
|
+
passes it automatically. This prevents one agent from selecting another
|
|
58
|
+
agent's local-only skill without adding a user prompt to the normal flow.
|
|
95
59
|
|
|
96
|
-
|
|
97
|
-
skill root and writes to another supported agent's user skill root:
|
|
60
|
+
## Config schema v2
|
|
98
61
|
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
|
|
62
|
+
```yaml
|
|
63
|
+
version: 2
|
|
64
|
+
skills:
|
|
65
|
+
local-helper:
|
|
66
|
+
enabled: true
|
|
67
|
+
shared: false
|
|
68
|
+
preference:
|
|
69
|
+
intents: [implementation]
|
|
70
|
+
priority: 50
|
|
71
|
+
shared-helper:
|
|
72
|
+
enabled: true
|
|
73
|
+
shared: true
|
|
74
|
+
disabled-helper:
|
|
75
|
+
enabled: false
|
|
76
|
+
shared: false
|
|
102
77
|
```
|
|
103
78
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
79
|
+
- `enabled` and `shared` are required Booleans.
|
|
80
|
+
- `shared: false` means agent-local; `shared: true` enables managed cross-agent
|
|
81
|
+
copies while preserving the original.
|
|
82
|
+
- `preference` is optional and ranks enabled skills installed for the current
|
|
83
|
+
agent only.
|
|
84
|
+
- Unknown policy keys are rejected.
|
|
85
|
+
- Skill ids use letters, numbers, `.`, `_`, `:`, and `-`; path-like ids are rejected.
|
|
86
|
+
- A valid newly discovered skill defaults to enabled and agent-local.
|
|
108
87
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
88
|
+
`skill forget` removes only a policy entry. It requires healthy inventory,
|
|
89
|
+
refuses skills that are still observed or shared, and never deletes skill files.
|
|
90
|
+
This distinguishes permanent owner removal from a temporarily unavailable agent
|
|
91
|
+
root.
|
|
113
92
|
|
|
114
|
-
|
|
115
|
-
skillboard import-skill \
|
|
116
|
-
--from codex \
|
|
117
|
-
--to opencode \
|
|
118
|
-
--skill codex-hook \
|
|
119
|
-
--target-skill opencode-hook \
|
|
120
|
-
--adapted-file /tmp/opencode-hook.SKILL.md \
|
|
121
|
-
--yes \
|
|
122
|
-
--json
|
|
123
|
-
```
|
|
93
|
+
## Generated inventory and audits
|
|
124
94
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
95
|
+
`~/.skillboard/inventory.json` records `installed_on`, paths, sources,
|
|
96
|
+
provenance, digests, aliases, install units, and runtime-component observations.
|
|
97
|
+
Only `installed_on` participates in the presence check. Other observations are
|
|
98
|
+
optional audit metadata and never determine availability.
|
|
128
99
|
|
|
129
|
-
|
|
100
|
+
Runtime and action authorization are outside SkillBoard's scope. The active
|
|
101
|
+
agent or harness owns permission checks for hooks, MCP servers, commands,
|
|
102
|
+
network access, external writes, destructive operations, and secrets.
|
|
130
103
|
|
|
131
|
-
|
|
132
|
-
needed for normal use. Package install, postinstall, and `skillboard setup`
|
|
133
|
-
connect SkillBoard at the agent layer without initializing, attaching, or
|
|
134
|
-
managing individual projects.
|
|
104
|
+
Profile import is trust-neutral. Preview a merge before writing:
|
|
135
105
|
|
|
136
106
|
```bash
|
|
137
|
-
skillboard
|
|
138
|
-
skillboard help init
|
|
107
|
+
skillboard import --profile <id-or-path> --source-root <dir> --config <path> --merge --dry-run
|
|
139
108
|
```
|
|
140
109
|
|
|
141
|
-
|
|
142
|
-
local
|
|
143
|
-
|
|
144
|
-
names it prints for the first `brief`. If it does not print a workflow, run the
|
|
145
|
-
unscoped `brief` command it prints instead.
|
|
110
|
+
Import does not approve a source or authorize runtime components. Missing valid
|
|
111
|
+
skills receive the enabled, agent-local default; existing policy is preserved
|
|
112
|
+
unless `--replace` is explicit.
|
|
146
113
|
|
|
147
|
-
##
|
|
114
|
+
## Policy actions
|
|
148
115
|
|
|
149
|
-
|
|
150
|
-
|
|
116
|
+
Agents obtain current actions from `brief --include-actions --json`, ask once,
|
|
117
|
+
and apply exactly one current id:
|
|
151
118
|
|
|
152
119
|
```bash
|
|
153
|
-
skillboard
|
|
154
|
-
--intent "write tests before implementation" \
|
|
155
|
-
--workflow codex-night-workflow \
|
|
156
|
-
--config skillboard.config.yaml \
|
|
157
|
-
--skills skills \
|
|
158
|
-
--json
|
|
120
|
+
skillboard apply-action <action-id> --agent <agent> --yes --json
|
|
159
121
|
```
|
|
160
122
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
123
|
+
The returned post-apply brief is authoritative. Cached ids are not reused.
|
|
124
|
+
Share and unshare action cards use the same managed-copy transaction as the
|
|
125
|
+
direct commands.
|
|
126
|
+
|
|
127
|
+
## User-level removal
|
|
166
128
|
|
|
167
129
|
```bash
|
|
168
|
-
skillboard
|
|
169
|
-
|
|
170
|
-
--config skillboard.config.yaml \
|
|
171
|
-
--skills skills \
|
|
172
|
-
--json
|
|
130
|
+
skillboard uninstall --user --dry-run
|
|
131
|
+
skillboard uninstall --user --yes
|
|
173
132
|
```
|
|
174
133
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
`matched_terms`, `recommendation_reason`, `route_candidates`, and
|
|
182
|
-
`overlap_resolution` so the AI can explain why it chose or declined a skill
|
|
183
|
-
without inventing rationale. When remembered or configured workflow policy
|
|
184
|
-
selected the routed skill while other allowed skills were also available,
|
|
185
|
-
`policy_memory` tells the AI to disclose that after completion. The same
|
|
186
|
-
`assistant_guidance` object includes
|
|
187
|
-
`assistant_guidance.goal_document`; its `loop` and `simplification_rule` fields
|
|
188
|
-
make the non-blocking routing goal machine-readable for agent integrations.
|
|
189
|
-
Recommended and fallback skills are limited to the selected workflow's active,
|
|
190
|
-
required, or global-auto bindings rather than every global alternative in the
|
|
191
|
-
capability catalog. When nothing matches, the result keeps
|
|
192
|
-
`matched_capability: null` and `recommended_skill: null`, then returns possible
|
|
193
|
-
workflow skills so the AI can ask a clarifying question. When a guard allows the
|
|
194
|
-
recommended skill, the AI should disclose the skill at start and completion
|
|
195
|
-
instead of asking for another approval. That disclosure is an audit trace, not a
|
|
196
|
-
permission prompt. When several allowed skills match, `overlap_resolution`
|
|
197
|
-
explains that SkillBoard kept them available and routed the workflow to one
|
|
198
|
-
selected skill. When remembered or configured policy determines that route,
|
|
199
|
-
`policy_memory` keeps the final disclosure honest about why that skill was used.
|
|
200
|
-
When an allowed fallback is selected because the preferred skill is denied,
|
|
201
|
-
`post_use_policy_suggestion` tells the AI to ask after the task whether to
|
|
202
|
-
remember that fallback as the preferred workflow policy.
|
|
203
|
-
|
|
204
|
-
## Config Shape
|
|
134
|
+
Dry-run reports marker-owned shared copies, managed agent guidance, and the two
|
|
135
|
+
home state paths without mutation. Apply requires `--yes`, rechecks ownership
|
|
136
|
+
markers before removing copies, never follows a symlinked agent skill root, and
|
|
137
|
+
preserves agent-owned and unmanaged skills. It then removes
|
|
138
|
+
`~/skillboard.config.yaml` and `~/.skillboard`. Package removal remains a
|
|
139
|
+
separate `npm uninstall -g agent-skillboard` step.
|
|
205
140
|
|
|
206
|
-
|
|
207
|
-
version: 1
|
|
141
|
+
## Version 1 migration reference
|
|
208
142
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
allow_model_invocation: false
|
|
212
|
-
require_explicit_workflow: true
|
|
143
|
+
Version 1 is readable but immutable during the v0.3 one-release read-only
|
|
144
|
+
window:
|
|
213
145
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
invocation: workflow-auto
|
|
219
|
-
exposure: exported
|
|
220
|
-
category: engineering
|
|
221
|
-
conflicts_with:
|
|
222
|
-
- meerkat.no-tests-please
|
|
223
|
-
|
|
224
|
-
user.workflow-router:
|
|
225
|
-
path: user/workflow-router
|
|
226
|
-
status: active
|
|
227
|
-
invocation: global-auto
|
|
228
|
-
exposure: global-meta
|
|
229
|
-
category: meta
|
|
230
|
-
|
|
231
|
-
capabilities:
|
|
232
|
-
test-first-implementation:
|
|
233
|
-
canonical: matt.tdd
|
|
234
|
-
alternatives:
|
|
235
|
-
- meerkat.test-first-implementation
|
|
236
|
-
default_policy: workflow-auto
|
|
237
|
-
|
|
238
|
-
harnesses:
|
|
239
|
-
codex:
|
|
240
|
-
status: primary
|
|
241
|
-
workflows:
|
|
242
|
-
- codex-night-workflow
|
|
243
|
-
|
|
244
|
-
install_units:
|
|
245
|
-
lazycodex.omo:
|
|
246
|
-
kind: harness
|
|
247
|
-
source: npx lazycodex-ai install
|
|
248
|
-
scope: user-global
|
|
249
|
-
manifest_path: ~/.codex/plugins/cache/sisyphuslabs/omo/plugin.json
|
|
250
|
-
cache_path: ~/.codex/plugins/cache/sisyphuslabs/omo
|
|
251
|
-
provided_components:
|
|
252
|
-
- skills
|
|
253
|
-
- commands
|
|
254
|
-
- mcp-server
|
|
255
|
-
- hook
|
|
256
|
-
components:
|
|
257
|
-
skills:
|
|
258
|
-
- lazycodex.ulw-plan
|
|
259
|
-
commands:
|
|
260
|
-
- $ulw-plan
|
|
261
|
-
- $start-work
|
|
262
|
-
hooks:
|
|
263
|
-
- post-tool-use
|
|
264
|
-
mcp_servers:
|
|
265
|
-
- omo-docs
|
|
266
|
-
modified_config_files:
|
|
267
|
-
- ~/.codex/config.toml
|
|
268
|
-
- ~/.local/bin
|
|
269
|
-
auto_update: false
|
|
270
|
-
enabled: true
|
|
271
|
-
workflow_dependencies:
|
|
272
|
-
- large-refactor-workflow
|
|
273
|
-
permission_risk: high
|
|
274
|
-
rollback: manual
|
|
275
|
-
|
|
276
|
-
workflows:
|
|
277
|
-
codex-night-workflow:
|
|
278
|
-
harness: codex
|
|
279
|
-
active_skills:
|
|
280
|
-
- matt.tdd
|
|
281
|
-
blocked_skills: []
|
|
282
|
-
required_capabilities:
|
|
283
|
-
test-first-implementation:
|
|
284
|
-
preferred: matt.tdd
|
|
285
|
-
fallback:
|
|
286
|
-
- meerkat.test-first-implementation
|
|
287
|
-
policy: workflow-auto
|
|
146
|
+
```bash
|
|
147
|
+
skillboard migrate v2 --config <path> --json
|
|
148
|
+
skillboard migrate v2 --config <path> --yes --json
|
|
149
|
+
skillboard migrate v2 --config <path> --rollback <backup> --json
|
|
288
150
|
```
|
|
289
151
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
blocking reasons, and impact reports. `impact disable --json` includes:
|
|
294
|
-
|
|
295
|
-
- `conflictingSkills`: declared direct or reverse conflicts for the target
|
|
296
|
-
skill.
|
|
297
|
-
- `activeConflicts`: workflow-scoped conflict pairs currently involving the
|
|
298
|
-
target skill.
|
|
152
|
+
Preview changes no bytes. Apply creates an adjacent byte-for-byte backup and
|
|
153
|
+
writes v2 policy plus generated inventory atomically. Rollback restores the
|
|
154
|
+
selected backup. v0.4.0 removes the v1 reader.
|
|
299
155
|
|
|
300
|
-
|
|
156
|
+
Setup and npm postinstall preserve an existing v1 policy and print only the
|
|
157
|
+
preview form. SkillBoard does not automatically migrate version 1.
|
|
301
158
|
|
|
302
|
-
|
|
303
|
-
|
|
159
|
+
Legacy fields are interpreted only by migration and never become hidden v2
|
|
160
|
+
authorization. Primary examples are `examples/v2-multi-source.config.yaml` and
|
|
161
|
+
`examples/v2-policy-error.config.yaml`; unprefixed v1 examples remain migration
|
|
162
|
+
fixtures.
|
|
304
163
|
|
|
305
|
-
|
|
306
|
-
skillboard import \
|
|
307
|
-
--profile github.mattpocock.skills \
|
|
308
|
-
--source-root /path/to/cloned-or-installed/repo \
|
|
309
|
-
--out .skillboard/reports/import-fragment.yaml
|
|
310
|
-
```
|
|
164
|
+
## Advanced operator commands
|
|
311
165
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
intend to overwrite existing entries, and drop `--dry-run` only after reviewing
|
|
316
|
-
the reported change plan.
|
|
166
|
+
The complete CLI help lists import, audit, rollout, hook, lock, variant,
|
|
167
|
+
reconcile, impact, dashboard, and legacy lifecycle commands. These are not the
|
|
168
|
+
normal user loop.
|
|
317
169
|
|
|
318
|
-
|
|
170
|
+
`reconcile` reports missing valid inventory skills as enabled, agent-local
|
|
171
|
+
recommendations. It does not write policy implicitly. `impact disable
|
|
172
|
+
<skill-id>` reports current enabled and sharing consequences. Neither command
|
|
173
|
+
introduces another authorization state.
|
|
319
174
|
|
|
320
|
-
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
- `github.voltagent.awesome-agent-skills`
|
|
175
|
+
`variant status <variant-id>` is read-only content and inventory lifecycle
|
|
176
|
+
inspection. V2 availability changes only through `skill enable`, `skill
|
|
177
|
+
disable`, `skill share`, `skill unshare`, and `skill preference`; `skill forget`
|
|
178
|
+
removes obsolete policy only after the skill is absent.
|
|
325
179
|
|
|
326
|
-
|
|
327
|
-
by path:
|
|
180
|
+
Hook installation remains an advanced legacy-workflow surface:
|
|
328
181
|
|
|
329
182
|
```bash
|
|
330
|
-
skillboard
|
|
183
|
+
skillboard hook install --workflow <name> --config <path> --skills <dir> --out <path> --dry-run --json
|
|
331
184
|
```
|
|
332
|
-
|
|
333
|
-
## Invocation Modes
|
|
334
|
-
|
|
335
|
-
- `manual-only`: user must explicitly ask for it.
|
|
336
|
-
- `router-only`: a router or orchestrator may select it after policy checks.
|
|
337
|
-
- `workflow-auto`: model invocation is allowed only inside listed workflows.
|
|
338
|
-
- `global-auto`: allowed globally; use sparingly and only for `global-meta`
|
|
339
|
-
control skills.
|
|
340
|
-
- `blocked`: installed but not callable until policy or provenance changes.
|
|
341
|
-
- `deprecated`: kept for history, not for new use.
|
|
342
|
-
|
|
343
|
-
Skill exposure values:
|
|
344
|
-
|
|
345
|
-
- `exported`: centrally governed skill that may serve shared workflows or
|
|
346
|
-
canonical capabilities.
|
|
347
|
-
- `global-meta`: intentionally global control skill, such as a router, impact
|
|
348
|
-
analyzer, or verification gate.
|
|
349
|
-
- `unit-managed`: child component supplied by a parent install unit or harness
|
|
350
|
-
bundle.
|
|
351
|
-
- `private`: workflow-internal implementation detail.
|
|
352
|
-
|
|
353
|
-
## Reconciliation Model
|
|
354
|
-
|
|
355
|
-
SkillBoard compares desired state from config with actual state from discovered
|
|
356
|
-
`SKILL.md` files and detected harnesses.
|
|
357
|
-
|
|
358
|
-
- New skills become `quarantined` / `blocked` recommendations.
|
|
359
|
-
- Known capability matches are surfaced, but not auto-enabled.
|
|
360
|
-
- Removed harnesses report affected workflows, missing commands, and migration
|
|
361
|
-
recommendations.
|
|
362
|
-
- Newly detected harnesses are disabled until workflows explicitly opt in.
|
|
363
|
-
- If actual harness inventory is not provided, reconcile emits a warning instead
|
|
364
|
-
of silently assuming harness state.
|
|
365
|
-
|
|
366
|
-
## Install Units
|
|
367
|
-
|
|
368
|
-
SkillBoard should not assume that every runtime change is a standalone skill.
|
|
369
|
-
Modern agent environments increasingly install packaged primitives:
|
|
370
|
-
|
|
371
|
-
- `skill`
|
|
372
|
-
- `plugin`
|
|
373
|
-
- `marketplace`
|
|
374
|
-
- `package-manager-dependency`
|
|
375
|
-
- `harness`
|
|
376
|
-
- `mcp-server`
|
|
377
|
-
- `hook`
|
|
378
|
-
- `agent`
|
|
379
|
-
- `lsp`
|
|
380
|
-
|
|
381
|
-
An install unit records source, scope, manifest/cache paths, provided
|
|
382
|
-
components, modified config files, enablement, workflow dependencies,
|
|
383
|
-
permission risk, trust level, digest/signature pins, and rollback shape.
|
|
384
|
-
LazyCodex-style setups fit this model as user-global harness/plugin bundles
|
|
385
|
-
that provide commands, skills, MCP integrations, hooks, and config.
|
|
386
|
-
|
|
387
|
-
## Variant Commands
|
|
388
|
-
|
|
389
|
-
Use `skillboard variant add claude.a --from a --capability task-review
|
|
390
|
-
--workflow claude-workflow --path claude/a ...` to record an explicit,
|
|
391
|
-
user-approved `a -> claude.a` variant.
|
|
392
|
-
|
|
393
|
-
For a reviewed manual adaptation lifecycle, use `skillboard variant fork
|
|
394
|
-
<variant-id>` to create draft metadata and raw snapshot records, edit the
|
|
395
|
-
variant `SKILL.md` by hand, inspect `skillboard variant status <variant-id>`
|
|
396
|
-
for `variant.status` and computed drift, then promote with `skillboard variant
|
|
397
|
-
approve <variant-id>` or restore with `skillboard variant reset <variant-id>
|
|
398
|
-
--to-base|--to-approved`.
|
|
399
|
-
|
|
400
|
-
SkillBoard records the relationship and policy only; it does not convert skill
|
|
401
|
-
bodies, does not rewrite skill bodies, and does not guarantee semantic
|
|
402
|
-
equivalence of skill bodies. See [variant-lifecycle.md](variant-lifecycle.md)
|
|
403
|
-
for the full lifecycle guide.
|
|
404
|
-
|
|
405
|
-
## Related Runbooks
|
|
406
|
-
|
|
407
|
-
- [install.md](install.md): install, agent-layer setup, legacy policy mode,
|
|
408
|
-
doctor, refresh, and uninstall.
|
|
409
|
-
- [user-flow.md](user-flow.md): first-time skill governance workflow.
|
|
410
|
-
- [policy-model.md](policy-model.md): policy states, invocation modes, and install units.
|
|
411
|
-
- [capabilities.md](capabilities.md): capability catalog and workflow resolution.
|
|
412
|
-
- [rollout-runbook.md](rollout-runbook.md): rollout audit, apply, report, and rollback.
|
|
413
|
-
- [versioning.md](versioning.md): release, schema, profile, workflow, and lockfile versioning.
|
package/docs/rollout-runbook.md
CHANGED
|
@@ -1,23 +1,29 @@
|
|
|
1
1
|
# SkillBoard Rollout Runbook
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
This is an advanced operator runbook for applying and reversing generated
|
|
4
|
+
rollout artifacts. It does not add availability rules: v2 availability remains
|
|
5
|
+
an enabled policy entry plus generated presence on the selected agent.
|
|
4
6
|
|
|
5
7
|
## Preconditions
|
|
6
8
|
|
|
7
|
-
- Run on Node.js
|
|
8
|
-
-
|
|
9
|
-
- Use `--json` for automation; rollout commands do not prompt
|
|
10
|
-
- Treat
|
|
9
|
+
- Run on Node.js 14.21 or newer. Release CI covers Node.js 14.21, 20, and 22.
|
|
10
|
+
- Use policy schema v2.
|
|
11
|
+
- Use `--json` for automation; rollout commands do not prompt.
|
|
12
|
+
- Treat source/provenance findings as optional audit metadata. They never change
|
|
13
|
+
availability.
|
|
14
|
+
- Runtime and action authorization remains with the agent or harness.
|
|
11
15
|
|
|
12
16
|
## Status and exit codes
|
|
13
17
|
|
|
14
|
-
- `healthy`: exit code `0
|
|
15
|
-
- `safe-mode`: exit code `1
|
|
16
|
-
- `strict-failed`: exit code `2
|
|
17
|
-
- `apply-failed`: exit code `3
|
|
18
|
-
- `rollback-needed`: exit code `4
|
|
18
|
+
- `healthy`: exit code `0`.
|
|
19
|
+
- `safe-mode`: exit code `1`.
|
|
20
|
+
- `strict-failed`: exit code `2`.
|
|
21
|
+
- `apply-failed`: exit code `3`.
|
|
22
|
+
- `rollback-needed`: exit code `4`.
|
|
19
23
|
|
|
20
|
-
|
|
24
|
+
These statuses describe operator execution health, not skill availability.
|
|
25
|
+
|
|
26
|
+
## Standard flow
|
|
21
27
|
|
|
22
28
|
```bash
|
|
23
29
|
skillboard rollout audit --config skillboard.config.yaml --skills skills --json
|
|
@@ -26,16 +32,12 @@ skillboard rollout apply --config skillboard.config.yaml --skills skills --json
|
|
|
26
32
|
skillboard rollout report --config skillboard.config.yaml --skills skills --json
|
|
27
33
|
```
|
|
28
34
|
|
|
29
|
-
`audit` and `plan` are read-only. `apply`
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
Rollout blocks unreviewed high-risk runtime/plugin/external sources when they could become active through model-selectable skills. Before apply, review each relevant install unit and set a reviewed/trusted trust level only after source ownership, pinning, and expected runtime components are understood.
|
|
35
|
+
`audit` and `plan` are read-only. `apply` records a transaction under
|
|
36
|
+
`.skillboard/rollouts/` with an exact-byte config backup. Source observations in
|
|
37
|
+
the report are informational and cannot enable or disable a skill.
|
|
34
38
|
|
|
35
39
|
## Emergency rollback
|
|
36
40
|
|
|
37
|
-
If a rollout report or operator check indicates `rollback-needed`, restore the committed transaction by id:
|
|
38
|
-
|
|
39
41
|
```bash
|
|
40
42
|
skillboard rollout rollback \
|
|
41
43
|
--config skillboard.config.yaml \
|
|
@@ -44,17 +46,13 @@ skillboard rollout rollback \
|
|
|
44
46
|
--json
|
|
45
47
|
```
|
|
46
48
|
|
|
47
|
-
Rollback
|
|
48
|
-
|
|
49
|
-
## Fleet report handling
|
|
50
|
-
|
|
51
|
-
Use `skillboard rollout report --json` for dashboards and schedulers. The report includes deterministic status counters for `healthy`, `safe-mode`, `strict-failed`, `apply-failed`, and `rollback-needed`. Local paths and obvious secret/token values are redacted from machine-readable payloads by default.
|
|
49
|
+
Rollback restores files recorded by the transaction manifest. It does not
|
|
50
|
+
reinterpret availability policy.
|
|
52
51
|
|
|
53
52
|
## Release gate checklist
|
|
54
53
|
|
|
55
54
|
- `npm run check`
|
|
56
|
-
- Node 20: `npx -y -p node@20 -c 'node -v && npm -v && npm run check'`
|
|
57
55
|
- `git diff --check`
|
|
58
56
|
- `npm audit --audit-level=moderate`
|
|
59
57
|
- `npm pack --dry-run --json`
|
|
60
|
-
-
|
|
58
|
+
- Scan changed source, docs, and config for secrets before publishing.
|