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.
Files changed (76) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.md +129 -258
  3. package/docs/adapters.md +37 -113
  4. package/docs/ai-skill-routing-goal.md +35 -109
  5. package/docs/capabilities.md +17 -104
  6. package/docs/install.md +36 -485
  7. package/docs/policy-model.md +50 -280
  8. package/docs/positioning.md +19 -86
  9. package/docs/profiles.md +21 -153
  10. package/docs/reference.md +115 -363
  11. package/docs/rollout-runbook.md +23 -25
  12. package/docs/routing.md +23 -90
  13. package/docs/user-flow.md +60 -284
  14. package/docs/value-proof.md +23 -181
  15. package/docs/variant-lifecycle.md +47 -67
  16. package/docs/versioning.md +31 -264
  17. package/examples/v2-multi-source.config.yaml +35 -0
  18. package/examples/v2-policy-error.config.yaml +6 -0
  19. package/package.json +1 -1
  20. package/src/advisor/actions.mjs +102 -6
  21. package/src/advisor/application-commands.mjs +10 -9
  22. package/src/advisor/apply-action.mjs +74 -1
  23. package/src/advisor/guidance.mjs +24 -16
  24. package/src/advisor/schema.mjs +17 -6
  25. package/src/advisor/skills.mjs +18 -5
  26. package/src/advisor.mjs +27 -9
  27. package/src/agent-integration-cli.mjs +13 -4
  28. package/src/agent-integration-content.mjs +21 -11
  29. package/src/agent-integration-files.mjs +1 -1
  30. package/src/agent-inventory-platforms.mjs +10 -0
  31. package/src/agent-inventory.mjs +23 -1
  32. package/src/agent-skill-import.mjs +2 -2
  33. package/src/audit-paths.mjs +42 -0
  34. package/src/brief-cli.mjs +3 -2
  35. package/src/brief-renderer.mjs +1 -0
  36. package/src/cli.mjs +498 -232
  37. package/src/compatibility.mjs +24 -0
  38. package/src/control/can-use-guard.mjs +21 -1
  39. package/src/control/config-write.mjs +32 -2
  40. package/src/control/skill-crud.mjs +5 -0
  41. package/src/control/v2-guard.mjs +175 -0
  42. package/src/control/v2-skill-crud.mjs +32 -0
  43. package/src/control/v2-skill-forget.mjs +38 -0
  44. package/src/control/variant-status.mjs +47 -1
  45. package/src/control.mjs +55 -0
  46. package/src/doctor.mjs +63 -4
  47. package/src/domain/v2-policy.mjs +111 -0
  48. package/src/hook-plan.mjs +33 -3
  49. package/src/impact.mjs +52 -29
  50. package/src/index.mjs +25 -1
  51. package/src/init.mjs +50 -34
  52. package/src/inventory-install-units.mjs +63 -0
  53. package/src/inventory-json.mjs +279 -0
  54. package/src/inventory-refresh.mjs +163 -18
  55. package/src/lifecycle-cli.mjs +40 -12
  56. package/src/lifecycle-content.mjs +52 -67
  57. package/src/migration/v1-to-v2.mjs +212 -0
  58. package/src/migration/v2-files.mjs +211 -0
  59. package/src/migration/v2-journal.mjs +169 -0
  60. package/src/migration/v2-projection.mjs +108 -0
  61. package/src/migration/v2-transaction.mjs +205 -0
  62. package/src/policy.mjs +3 -0
  63. package/src/reconcile.mjs +139 -111
  64. package/src/report.mjs +168 -148
  65. package/src/review.mjs +2 -0
  66. package/src/route-advisory.mjs +47 -2
  67. package/src/route-selection.mjs +38 -2
  68. package/src/route.mjs +62 -2
  69. package/src/shared-skill.mjs +301 -0
  70. package/src/source-digest.mjs +42 -0
  71. package/src/source-profiles.mjs +171 -144
  72. package/src/source-verification.mjs +32 -48
  73. package/src/uninstall.mjs +22 -0
  74. package/src/user-state-paths.mjs +19 -0
  75. package/src/user-uninstall.mjs +146 -0
  76. package/src/workspace.mjs +119 -79
package/docs/reference.md CHANGED
@@ -1,413 +1,165 @@
1
1
  # SkillBoard Reference
2
2
 
3
- This is the operator reference for users who already understand the basic
4
- SkillBoard flow and need exact command, config, and lifecycle details.
3
+ ## Command forms
5
4
 
6
- For installation and agent-layer setup commands, start with [install.md](install.md).
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
- npm exec --yes --package agent-skillboard -- skillboard --version
20
- npm exec --yes --package agent-skillboard -- skillboard help brief
8
+ skillboard <command>
21
9
  ```
22
10
 
23
- After a global install, postinstall auto-runs agent-layer setup for detected
24
- supported agent homes. Use `skillboard setup` later when you add another
25
- supported agent, skipped lifecycle scripts, or need to repair user-level agent
26
- guidance. This is agent-layer integration; it does not initialize, attach, or
27
- manage individual projects. To remove only managed agent-layer guidance, run
28
- `skillboard uninstall --agent-layer` before package removal.
29
-
30
- Unreleased GitHub builds are available when intentionally testing repository
31
- state before the next npm release:
11
+ Source tree: replace `skillboard ` with `node bin/skillboard.mjs `.
32
12
 
33
- ```bash
34
- npx --yes --package github:NyXXiR/skillboard skillboard --version
35
- npx --yes --package github:NyXXiR/skillboard skillboard help
36
- ```
13
+ ## Core user-level commands
37
14
 
38
- From a source clone:
39
-
40
- ```bash
41
- git clone https://github.com/NyXXiR/skillboard.git
42
- cd skillboard
43
- npm install
44
- npm test
45
- node bin/skillboard.mjs --version
46
- node bin/skillboard.mjs help
15
+ ```text
16
+ skillboard setup [--yes] [--agent codex[,claude,opencode,hermes]]
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]
47
30
  ```
48
31
 
49
- ## Commands
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.
50
35
 
51
- ```bash
52
- skillboard setup [--yes] [--agent codex[,claude,opencode,hermes]]
53
- skillboard import-skill --from <agent> --to <agent> --skill <id-or-dir> [--target-skill <id-or-dir>] [--adapted-file <path>] [--dry-run] [--yes] [--replace] [--json]
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
- ```
36
+ Guard requires a valid inventory record, `enabled: true`, and the selected agent
37
+ in `installed_on`. Optional preference ranks candidates but never changes
38
+ availability.
93
39
 
94
- ## Agent Skill Reuse
40
+ Version 2 route, can-use, and guard require `--agent`; generated agent guidance
41
+ passes it automatically. This prevents one agent from selecting another
42
+ agent's local-only skill without adding a user prompt to the normal flow.
95
43
 
96
- `import-skill` operates above projects. It reads one supported agent's user
97
- skill root and writes to another supported agent's user skill root:
44
+ ## Config schema v2
98
45
 
99
- ```bash
100
- skillboard import-skill --from codex --to opencode --skill test-first --json
101
- skillboard import-skill --from codex --to opencode --skill test-first --yes --json
46
+ ```yaml
47
+ version: 2
48
+ skills:
49
+ local-helper:
50
+ enabled: true
51
+ shared: false
52
+ preference:
53
+ intents: [implementation]
54
+ priority: 50
55
+ shared-helper:
56
+ enabled: true
57
+ shared: true
58
+ disabled-helper:
59
+ enabled: false
60
+ shared: false
102
61
  ```
103
62
 
104
- Supported agents are `codex`, `claude`, `opencode`, and `hermes`. Roots come
105
- from `CODEX_HOME`, `AGENTS_HOME`, `CLAUDE_HOME`, `OPENCODE_HOME`, and
106
- `HERMES_HOME`, or from their default user locations. Codex source scanning also
107
- checks `~/.agents/skills` and `~/.codex/skills`.
63
+ - `enabled` and `shared` are required Booleans.
64
+ - `shared: false` means agent-local; `shared: true` enables managed cross-agent
65
+ copies while preserving the original.
66
+ - `preference` is optional and ranks enabled skills installed for the current
67
+ agent only.
68
+ - Unknown policy keys are rejected.
69
+ - Skill ids use letters, numbers, `.`, `_`, `:`, and `-`; path-like ids are rejected.
70
+ - A valid newly discovered skill defaults to enabled and agent-local.
108
71
 
109
- If the source skill contains markers for another agent runtime, the command
110
- returns `status: "needs-adaptation"` with compatibility reasons and no writes.
111
- The target agent should ask the user before changing the skill body. After
112
- approval, it writes an adapted `SKILL.md` and installs it with provenance:
72
+ `skill forget` removes only a policy entry. It requires healthy inventory,
73
+ refuses skills that are still observed or shared, and never deletes skill files.
74
+ This distinguishes permanent owner removal from a temporarily unavailable agent
75
+ root.
113
76
 
114
- ```bash
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
- ```
77
+ ## Generated inventory and audits
124
78
 
125
- This is separate from `variant` commands. `import-skill` installs a target-agent
126
- user skill file; `variant` records project-local policy relationships,
127
- snapshots, and workflow preferences.
79
+ `~/.skillboard/inventory.json` records `installed_on`, paths, sources,
80
+ provenance, digests, aliases, install units, and runtime-component observations.
81
+ Only `installed_on` participates in the presence check. Other observations are
82
+ optional audit metadata and never determine availability.
128
83
 
129
- ## Deprecated Project Policy Mode
84
+ Runtime and action authorization are outside SkillBoard's scope. The active
85
+ agent or harness owns permission checks for hooks, MCP servers, commands,
86
+ network access, external writes, destructive operations, and secrets.
130
87
 
131
- `skillboard init` is deprecated project-local policy bootstrap and is not
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.
88
+ Profile import is trust-neutral. Preview a merge before writing:
135
89
 
136
90
  ```bash
137
- skillboard init [--dir <path>] [--scan-root <dir>[,<dir>]] [--no-scan-installed]
138
- skillboard help init
91
+ skillboard import --profile <id-or-path> --source-root <dir> --config <path> --merge --dry-run
139
92
  ```
140
93
 
141
- The command remains available for existing workspaces that intentionally keep
142
- local `skillboard.config.yaml`, `.skillboard/`, `AGENTS.md`, or `CLAUDE.md`
143
- policy files. If `init` creates or discovers workflows, use one of the workflow
144
- names it prints for the first `brief`. If it does not print a workflow, run the
145
- unscoped `brief` command it prints instead.
94
+ Import does not approve a source or authorize runtime components. Missing valid
95
+ skills receive the enabled, agent-local default; existing policy is preserved
96
+ unless `--replace` is explicit.
146
97
 
147
- ## Capability Routing
98
+ ## Policy actions
148
99
 
149
- For the normal AI-mediated flow, prefer `brief --intent`: it returns the current
150
- availability brief plus a compact route recommendation in `assistant_guidance`.
100
+ Agents obtain current actions from `brief --include-actions --json`, ask once,
101
+ and apply exactly one current id:
151
102
 
152
103
  ```bash
153
- skillboard brief \
154
- --intent "write tests before implementation" \
155
- --workflow codex-night-workflow \
156
- --config skillboard.config.yaml \
157
- --skills skills \
158
- --json
104
+ skillboard apply-action <action-id> --agent <agent> --yes --json
159
105
  ```
160
106
 
161
- `route` is a read-only recommendation surface for AI/automation. It maps a
162
- normal user request to the best matching workflow capability or workflow-bound
163
- skill metadata, then returns the recommended skill, fallback skills, matched
164
- terms, recommendation reason, and the guard command that must still pass before
165
- invocation.
107
+ The returned post-apply brief is authoritative. Cached ids are not reused.
108
+ Share and unshare action cards use the same managed-copy transaction as the
109
+ direct commands.
110
+
111
+ ## User-level removal
166
112
 
167
113
  ```bash
168
- skillboard route "write tests before implementation" \
169
- --workflow codex-night-workflow \
170
- --config skillboard.config.yaml \
171
- --skills skills \
172
- --json
114
+ skillboard uninstall --user --dry-run
115
+ skillboard uninstall --user --yes
173
116
  ```
174
117
 
175
- Routing first honors an exact request for a specific already-allowed workflow
176
- skill. Otherwise, it uses declared capability names and workflow bindings. If a
177
- fresh project has workflow skills but no capability catalog yet, it can fall back
178
- to workflow-bound skill id, path, category, `SKILL.md` name, and `SKILL.md`
179
- description metadata. It does not inspect or semantically rank `SKILL.md` bodies,
180
- and it does not invoke the skill. The JSON payload includes `match_source`,
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
118
+ Dry-run reports marker-owned shared copies, managed agent guidance, and the two
119
+ home state paths without mutation. Apply requires `--yes`, rechecks ownership
120
+ markers before removing copies, never follows a symlinked agent skill root, and
121
+ preserves agent-owned and unmanaged skills. It then removes
122
+ `~/skillboard.config.yaml` and `~/.skillboard`. Package removal remains a
123
+ separate `npm uninstall -g agent-skillboard` step.
205
124
 
206
- ```yaml
207
- version: 1
125
+ ## Version 1 migration reference
208
126
 
209
- defaults:
210
- invocation_policy: deny-by-default
211
- allow_model_invocation: false
212
- require_explicit_workflow: true
127
+ Version 1 is readable but immutable during the v0.3 one-release read-only
128
+ window:
213
129
 
214
- skills:
215
- matt.tdd:
216
- path: tdd
217
- status: active
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
130
+ ```bash
131
+ skillboard migrate v2 --config <path> --json
132
+ skillboard migrate v2 --config <path> --yes --json
133
+ skillboard migrate v2 --config <path> --rollback <backup> --json
288
134
  ```
289
135
 
290
- `conflicts_with` is runtime policy, not documentation-only metadata. A workflow
291
- cannot keep both sides selectable unless one side is explicitly blocked in that
292
- workflow. Conflict failures appear in policy errors, guard reasons, brief
293
- blocking reasons, and impact reports. `impact disable --json` includes:
136
+ Preview changes no bytes. Apply creates an adjacent byte-for-byte backup and
137
+ writes v2 policy plus generated inventory atomically. Rollback restores the
138
+ selected backup. v0.4.0 removes the v1 reader.
294
139
 
295
- - `conflictingSkills`: declared direct or reverse conflicts for the target
296
- skill.
297
- - `activeConflicts`: workflow-scoped conflict pairs currently involving the
298
- target skill.
140
+ Legacy fields are interpreted only by migration and never become hidden v2
141
+ authorization. Primary examples are `examples/v2-multi-source.config.yaml` and
142
+ `examples/v2-policy-error.config.yaml`; unprefixed v1 examples remain migration
143
+ fixtures.
299
144
 
300
- ## Source Profiles
145
+ ## Advanced operator commands
301
146
 
302
- `skillboard import` reads a source profile and emits a YAML fragment containing
303
- governed `skills` plus their owning `install_units`.
147
+ The complete CLI help lists import, audit, rollout, hook, lock, variant,
148
+ reconcile, impact, dashboard, and legacy lifecycle commands. These are not the
149
+ normal user loop.
304
150
 
305
- ```bash
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
- ```
151
+ `reconcile` reports missing valid inventory skills as enabled, agent-local
152
+ recommendations. It does not write policy implicitly. `impact disable
153
+ <skill-id>` reports current enabled and sharing consequences. Neither command
154
+ introduces another authorization state.
311
155
 
312
- To preview a direct apply path, pass `--merge --config --dry-run`. Merge is
313
- non-destructive by default: if a skill or install-unit id already exists, the
314
- command fails and leaves the config unchanged. Use `--replace` only when you
315
- intend to overwrite existing entries, and drop `--dry-run` only after reviewing
316
- the reported change plan.
156
+ `variant status <variant-id>` is read-only content and inventory lifecycle
157
+ inspection. V2 availability changes only through `skill enable`, `skill
158
+ disable`, `skill share`, `skill unshare`, and `skill preference`; `skill forget`
159
+ removes obsolete policy only after the skill is absent.
317
160
 
318
- Built-in profiles are shipped as YAML data under `profiles/`, including:
319
-
320
- - `github.mattpocock.skills`
321
- - `github.code-yeongyu.oh-my-openagent`
322
- - `github.anthropics.skills`
323
- - `github.wshobson.agents`
324
- - `github.voltagent.awesome-agent-skills`
325
-
326
- Project-specific profiles can live under `.skillboard/profiles/` and be passed
327
- by path:
161
+ Hook installation remains an advanced legacy-workflow surface:
328
162
 
329
163
  ```bash
330
- skillboard import --profile .skillboard/profiles/my-source.yaml --source-root /path/to/repo
164
+ skillboard hook install --workflow <name> --config <path> --skills <dir> --out <path> --dry-run --json
331
165
  ```
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.
@@ -1,23 +1,29 @@
1
1
  # SkillBoard Rollout Runbook
2
2
 
3
- Use this runbook when SkillBoard is operated as an enterprise rollout gate for agent skills, plugins, harnesses, hooks, MCP servers, and workflow bundles.
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 20 or newer.
8
- - Keep `skillboard.config.yaml` as the source of truth.
9
- - Use `--json` for automation; rollout commands do not prompt or wait for user input.
10
- - Treat plugin, runtime extension, and external package sources as blocked from automatic activation unless an explicit reviewed/trusted policy is recorded in config.
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`; policy and source gates passed.
15
- - `safe-mode`: exit code `1`; reserved for usable-but-limited rollout states.
16
- - `strict-failed`: exit code `2`; policy/source gates failed and automation must not apply rollout.
17
- - `apply-failed`: exit code `3`; apply was blocked or failed before a committed transaction.
18
- - `rollback-needed`: exit code `4`; apply failed after mutation risk and operator rollback is required.
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
- ## Standard rollout flow
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` creates a transaction directory under `.skillboard/rollouts/` with a manifest, report, state file, and exact-byte backup of the config before committing.
30
-
31
- ## Source gate policy
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 reads `.skillboard/rollouts/<transaction>/manifest.json` and restores configured files from their recorded backups. The config restore is byte-for-byte so accidental operator edits made after apply are removed.
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
- - Secret scan changed source, docs, and config files before publishing or pushing.
58
+ - Scan changed source, docs, and config for secrets before publishing.