agent-skillboard 0.2.17 → 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 (77) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/README.md +128 -260
  3. package/bin/postinstall.mjs +2 -2
  4. package/docs/adapters.md +37 -113
  5. package/docs/ai-skill-routing-goal.md +35 -109
  6. package/docs/capabilities.md +17 -104
  7. package/docs/install.md +39 -493
  8. package/docs/policy-model.md +50 -280
  9. package/docs/positioning.md +19 -86
  10. package/docs/profiles.md +21 -153
  11. package/docs/reference.md +117 -356
  12. package/docs/rollout-runbook.md +23 -25
  13. package/docs/routing.md +23 -90
  14. package/docs/user-flow.md +60 -292
  15. package/docs/value-proof.md +23 -181
  16. package/docs/variant-lifecycle.md +47 -67
  17. package/docs/versioning.md +31 -264
  18. package/examples/v2-multi-source.config.yaml +35 -0
  19. package/examples/v2-policy-error.config.yaml +6 -0
  20. package/package.json +1 -1
  21. package/src/advisor/actions.mjs +102 -6
  22. package/src/advisor/application-commands.mjs +10 -9
  23. package/src/advisor/apply-action.mjs +74 -1
  24. package/src/advisor/guidance.mjs +24 -16
  25. package/src/advisor/schema.mjs +17 -6
  26. package/src/advisor/skills.mjs +18 -5
  27. package/src/advisor.mjs +27 -9
  28. package/src/agent-integration-cli.mjs +13 -4
  29. package/src/agent-integration-content.mjs +22 -12
  30. package/src/agent-integration-files.mjs +1 -1
  31. package/src/agent-inventory-platforms.mjs +10 -0
  32. package/src/agent-inventory.mjs +23 -1
  33. package/src/agent-skill-import.mjs +2 -2
  34. package/src/audit-paths.mjs +42 -0
  35. package/src/brief-cli.mjs +3 -2
  36. package/src/brief-renderer.mjs +1 -0
  37. package/src/cli.mjs +398 -127
  38. package/src/compatibility.mjs +24 -0
  39. package/src/control/can-use-guard.mjs +21 -1
  40. package/src/control/config-write.mjs +32 -2
  41. package/src/control/skill-crud.mjs +5 -0
  42. package/src/control/v2-guard.mjs +175 -0
  43. package/src/control/v2-skill-crud.mjs +32 -0
  44. package/src/control/v2-skill-forget.mjs +38 -0
  45. package/src/control/variant-status.mjs +47 -1
  46. package/src/control.mjs +55 -0
  47. package/src/doctor.mjs +65 -6
  48. package/src/domain/v2-policy.mjs +111 -0
  49. package/src/hook-plan.mjs +33 -3
  50. package/src/impact.mjs +52 -29
  51. package/src/index.mjs +25 -1
  52. package/src/init.mjs +50 -34
  53. package/src/inventory-install-units.mjs +63 -0
  54. package/src/inventory-json.mjs +279 -0
  55. package/src/inventory-refresh.mjs +163 -18
  56. package/src/lifecycle-cli.mjs +40 -12
  57. package/src/lifecycle-content.mjs +52 -67
  58. package/src/migration/v1-to-v2.mjs +212 -0
  59. package/src/migration/v2-files.mjs +211 -0
  60. package/src/migration/v2-journal.mjs +169 -0
  61. package/src/migration/v2-projection.mjs +108 -0
  62. package/src/migration/v2-transaction.mjs +205 -0
  63. package/src/policy.mjs +3 -0
  64. package/src/reconcile.mjs +139 -111
  65. package/src/report.mjs +168 -148
  66. package/src/review.mjs +2 -0
  67. package/src/route-advisory.mjs +47 -2
  68. package/src/route-selection.mjs +38 -2
  69. package/src/route.mjs +62 -2
  70. package/src/shared-skill.mjs +301 -0
  71. package/src/source-digest.mjs +42 -0
  72. package/src/source-profiles.mjs +27 -0
  73. package/src/source-verification.mjs +32 -48
  74. package/src/uninstall.mjs +22 -0
  75. package/src/user-state-paths.mjs +19 -0
  76. package/src/user-uninstall.mjs +146 -0
  77. package/src/workspace.mjs +41 -1
package/docs/reference.md CHANGED
@@ -1,404 +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 bootstrap 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
- npx --yes --package agent-skillboard skillboard init
20
- npx --yes --package agent-skillboard skillboard doctor --summary
21
- npx --yes --package agent-skillboard skillboard brief --workflow <workflow-from-init>
22
- npm exec --yes --package agent-skillboard -- skillboard init
23
- npm exec --yes --package agent-skillboard -- skillboard doctor --summary
24
- npm exec --yes --package agent-skillboard -- skillboard brief --workflow <workflow-from-init>
8
+ skillboard <command>
25
9
  ```
26
10
 
27
- After a global install, postinstall auto-runs agent-layer setup for detected
28
- supported agent homes. Use `skillboard setup` later when you add another
29
- supported agent, skipped lifecycle scripts, or need to repair user-level agent
30
- guidance. This is agent-layer integration; it does not initialize, attach, or
31
- manage individual projects. To remove only managed agent-layer guidance, run
32
- `skillboard uninstall --agent-layer` before package removal.
33
-
34
- If `init` does not print a workflow, run the unscoped `brief` command it prints
35
- instead.
11
+ Source tree: replace `skillboard ` with `node bin/skillboard.mjs `.
36
12
 
37
- Unreleased GitHub builds are available when intentionally testing repository
38
- state before the next npm release:
13
+ ## Core user-level commands
39
14
 
40
- ```bash
41
- npx --yes --package github:NyXXiR/skillboard skillboard init
42
- npx --yes --package github:NyXXiR/skillboard skillboard doctor --summary
43
- npx --yes --package github:NyXXiR/skillboard skillboard brief --workflow <workflow-from-init>
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]
44
30
  ```
45
31
 
46
- From a source clone:
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.
47
35
 
48
- ```bash
49
- git clone https://github.com/NyXXiR/skillboard.git
50
- cd skillboard
51
- npm install
52
- npm test
53
- node bin/skillboard.mjs init --dir /path/to/your/project
54
- node bin/skillboard.mjs doctor --dir /path/to/your/project --summary
55
- node bin/skillboard.mjs brief --dir /path/to/your/project --workflow <workflow-from-init>
56
- ```
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.
57
39
 
58
- ## Commands
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.
59
43
 
60
- ```bash
61
- skillboard setup [--yes] [--agent codex[,claude,opencode,hermes]]
62
- skillboard import-skill --from <agent> --to <agent> --skill <id-or-dir> [--target-skill <id-or-dir>] [--adapted-file <path>] [--dry-run] [--yes] [--replace] [--json]
63
- skillboard init [--dir <path>] [--scan-root <dir>[,<dir>]] [--no-scan-installed]
64
- 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]]
65
- skillboard inventory refresh [--dir <path>] [--config <path>] [--scan-root <dir>[,<dir>]] [--dry-run] [--json]
66
- skillboard inventory detect --unit <id> --config <path> [--install-output <path>] [--config-file a,b] [--source <value>] [--kind <kind>] [--scope <scope>] [--dry-run] [--json]
67
- skillboard sources refresh [--dir <path>] [--config <path>] [--unit <id>[,<id>]] [--cache-dir <dir>] [--dry-run] [--json]
68
- skillboard doctor [--dir <path>] [--config <path>] [--skills <dir>] [--verify] [--strict] [--json] [--summary]
69
- skillboard status [--dir <path>] [--config <path>] [--skills <dir>] [--verify] [--strict] [--json] [--summary]
70
- skillboard brief [--workflow <name>] [--intent <request>] [--dir <path>] [--config <path>] [--skills <dir>] [--include-actions] [--verbose] [--json]
71
- skillboard apply-action <action-id> [--workflow <name>] [--dir <path>] [--config <path>] [--skills <dir>] [--dry-run] [--yes] [--allow-destructive] [--json]
72
- skillboard import --profile <id-or-path> --source-root <dir> [--profile-dirs a,b] [--out <path>]
73
- skillboard import --profile <id-or-path> --source-root <dir> --config <path> --merge [--replace] [--dry-run]
74
- skillboard scan --config <path> --skills <dir>
75
- skillboard check --config <path> --skills <dir>
76
- skillboard list [skills|workflows|harnesses|install-units] --config <path> --skills <dir>
77
- skillboard explain <skill-id> --config <path> --skills <dir>
78
- skillboard route <intent> --workflow <name> --config <path> --skills <dir> [--json]
79
- skillboard can-use <skill-id> --workflow <name> --config <path> --skills <dir>
80
- skillboard guard use <skill-id> --workflow <name> --config <path> --skills <dir>
81
- skillboard audit sources --config <path> --skills <dir> [--verify]
82
- skillboard rollout [audit|plan|apply|rollback|report] [--dir <path>] [--config <path>] [--skills <dir>] [--transaction <id>] [--json]
83
- skillboard hook install --workflow <name> --config <path> --skills <dir> [--out <path>] [--skillboard-bin <path>] [--dry-run] [--json]
84
- skillboard lock write --config <path> --skills <dir> [--out <path>] [--replace] [--allow-unverified]
85
- skillboard review install-unit <unit-id> [--trust-level trusted|reviewed|unreviewed|blocked] --config <path> --skills <dir>
86
- skillboard add skill <skill-id> --path <relative-skill-path> --config <path> --skills <dir>
87
- skillboard add workflow <workflow-name> --harness <harness-name> --config <path> --skills <dir> [--skill <id>[,<id>]]
88
- skillboard add harness <harness-name> --config <path> --skills <dir> [--status <status>] [--command <cmd>[,<cmd>]]
89
- 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]
90
- 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]
91
- skillboard variant status <variant-id> --config <path> --skills <dir> [--json]
92
- skillboard variant approve <variant-id> --config <path> --skills <dir> [--mode manual-only|router-only|workflow-auto] [--dry-run] [--json]
93
- skillboard variant reset <variant-id> --to-base|--to-approved --config <path> --skills <dir> [--yes] [--dry-run] [--mode manual-only|router-only|workflow-auto] [--json]
94
- skillboard activate <skill-id> --workflow <name> --config <path> --skills <dir>
95
- skillboard block <skill-id> --workflow <name> --config <path> --skills <dir>
96
- skillboard quarantine <skill-id> --config <path> --skills <dir>
97
- skillboard prefer <skill-id> --workflow <name> --capability <name> --config <path> --skills <dir>
98
- skillboard remove skill <skill-id> --config <path> --skills <dir> [--force]
99
- skillboard dashboard --config <path> --skills <dir> [--out <path>]
100
- skillboard reconcile --config <path> --skills <dir> [--actual-harnesses a,b] [--out <path>]
101
- skillboard impact disable <skill-id> --config <path> --skills <dir> [--out <path>] [--json]
44
+ ## Config schema v2
45
+
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
- ## Agent Skill Reuse
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.
105
71
 
106
- `import-skill` operates above projects. It reads one supported agent's user
107
- skill root and writes to another supported agent's user skill root:
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.
108
76
 
109
- ```bash
110
- skillboard import-skill --from codex --to opencode --skill test-first --json
111
- skillboard import-skill --from codex --to opencode --skill test-first --yes --json
112
- ```
77
+ ## Generated inventory and audits
78
+
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.
113
83
 
114
- Supported agents are `codex`, `claude`, `opencode`, and `hermes`. Roots come
115
- from `CODEX_HOME`, `AGENTS_HOME`, `CLAUDE_HOME`, `OPENCODE_HOME`, and
116
- `HERMES_HOME`, or from their default user locations. Codex source scanning also
117
- checks `~/.agents/skills` and `~/.codex/skills`.
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.
118
87
 
119
- If the source skill contains markers for another agent runtime, the command
120
- returns `status: "needs-adaptation"` with compatibility reasons and no writes.
121
- The target agent should ask the user before changing the skill body. After
122
- approval, it writes an adapted `SKILL.md` and installs it with provenance:
88
+ Profile import is trust-neutral. Preview a merge before writing:
123
89
 
124
90
  ```bash
125
- skillboard import-skill \
126
- --from codex \
127
- --to opencode \
128
- --skill codex-hook \
129
- --target-skill opencode-hook \
130
- --adapted-file /tmp/opencode-hook.SKILL.md \
131
- --yes \
132
- --json
91
+ skillboard import --profile <id-or-path> --source-root <dir> --config <path> --merge --dry-run
133
92
  ```
134
93
 
135
- This is separate from `variant` commands. `import-skill` installs a target-agent
136
- user skill file; `variant` records project-local policy relationships,
137
- snapshots, and workflow preferences.
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.
138
97
 
139
- ## Capability Routing
98
+ ## Policy actions
140
99
 
141
- For the normal AI-mediated flow, prefer `brief --intent`: it returns the current
142
- 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:
143
102
 
144
103
  ```bash
145
- skillboard brief \
146
- --intent "write tests before implementation" \
147
- --workflow codex-night-workflow \
148
- --config skillboard.config.yaml \
149
- --skills skills \
150
- --json
104
+ skillboard apply-action <action-id> --agent <agent> --yes --json
151
105
  ```
152
106
 
153
- `route` is a read-only recommendation surface for AI/automation. It maps a
154
- normal user request to the best matching workflow capability or workflow-bound
155
- skill metadata, then returns the recommended skill, fallback skills, matched
156
- terms, recommendation reason, and the guard command that must still pass before
157
- 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
158
112
 
159
113
  ```bash
160
- skillboard route "write tests before implementation" \
161
- --workflow codex-night-workflow \
162
- --config skillboard.config.yaml \
163
- --skills skills \
164
- --json
114
+ skillboard uninstall --user --dry-run
115
+ skillboard uninstall --user --yes
165
116
  ```
166
117
 
167
- Routing first honors an exact request for a specific already-allowed workflow
168
- skill. Otherwise, it uses declared capability names and workflow bindings. If a
169
- fresh project has workflow skills but no capability catalog yet, it can fall back
170
- to workflow-bound skill id, path, category, `SKILL.md` name, and `SKILL.md`
171
- description metadata. It does not inspect or semantically rank `SKILL.md` bodies,
172
- and it does not invoke the skill. The JSON payload includes `match_source`,
173
- `matched_terms`, `recommendation_reason`, `route_candidates`, and
174
- `overlap_resolution` so the AI can explain why it chose or declined a skill
175
- without inventing rationale. When remembered or configured workflow policy
176
- selected the routed skill while other allowed skills were also available,
177
- `policy_memory` tells the AI to disclose that after completion. The same
178
- `assistant_guidance` object includes
179
- `assistant_guidance.goal_document`; its `loop` and `simplification_rule` fields
180
- make the non-blocking routing goal machine-readable for agent integrations.
181
- Recommended and fallback skills are limited to the selected workflow's active,
182
- required, or global-auto bindings rather than every global alternative in the
183
- capability catalog. When nothing matches, the result keeps
184
- `matched_capability: null` and `recommended_skill: null`, then returns possible
185
- workflow skills so the AI can ask a clarifying question. When a guard allows the
186
- recommended skill, the AI should disclose the skill at start and completion
187
- instead of asking for another approval. That disclosure is an audit trace, not a
188
- permission prompt. When several allowed skills match, `overlap_resolution`
189
- explains that SkillBoard kept them available and routed the workflow to one
190
- selected skill. When remembered or configured policy determines that route,
191
- `policy_memory` keeps the final disclosure honest about why that skill was used.
192
- When an allowed fallback is selected because the preferred skill is denied,
193
- `post_use_policy_suggestion` tells the AI to ask after the task whether to
194
- remember that fallback as the preferred workflow policy.
195
-
196
- ## 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.
197
124
 
198
- ```yaml
199
- version: 1
125
+ ## Version 1 migration reference
200
126
 
201
- defaults:
202
- invocation_policy: deny-by-default
203
- allow_model_invocation: false
204
- require_explicit_workflow: true
127
+ Version 1 is readable but immutable during the v0.3 one-release read-only
128
+ window:
205
129
 
206
- skills:
207
- matt.tdd:
208
- path: tdd
209
- status: active
210
- invocation: workflow-auto
211
- exposure: exported
212
- category: engineering
213
- conflicts_with:
214
- - meerkat.no-tests-please
215
-
216
- user.workflow-router:
217
- path: user/workflow-router
218
- status: active
219
- invocation: global-auto
220
- exposure: global-meta
221
- category: meta
222
-
223
- capabilities:
224
- test-first-implementation:
225
- canonical: matt.tdd
226
- alternatives:
227
- - meerkat.test-first-implementation
228
- default_policy: workflow-auto
229
-
230
- harnesses:
231
- codex:
232
- status: primary
233
- workflows:
234
- - codex-night-workflow
235
-
236
- install_units:
237
- lazycodex.omo:
238
- kind: harness
239
- source: npx lazycodex-ai install
240
- scope: user-global
241
- manifest_path: ~/.codex/plugins/cache/sisyphuslabs/omo/plugin.json
242
- cache_path: ~/.codex/plugins/cache/sisyphuslabs/omo
243
- provided_components:
244
- - skills
245
- - commands
246
- - mcp-server
247
- - hook
248
- components:
249
- skills:
250
- - lazycodex.ulw-plan
251
- commands:
252
- - $ulw-plan
253
- - $start-work
254
- hooks:
255
- - post-tool-use
256
- mcp_servers:
257
- - omo-docs
258
- modified_config_files:
259
- - ~/.codex/config.toml
260
- - ~/.local/bin
261
- auto_update: false
262
- enabled: true
263
- workflow_dependencies:
264
- - large-refactor-workflow
265
- permission_risk: high
266
- rollback: manual
267
-
268
- workflows:
269
- codex-night-workflow:
270
- harness: codex
271
- active_skills:
272
- - matt.tdd
273
- blocked_skills: []
274
- required_capabilities:
275
- test-first-implementation:
276
- preferred: matt.tdd
277
- fallback:
278
- - meerkat.test-first-implementation
279
- 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
280
134
  ```
281
135
 
282
- `conflicts_with` is runtime policy, not documentation-only metadata. A workflow
283
- cannot keep both sides selectable unless one side is explicitly blocked in that
284
- workflow. Conflict failures appear in policy errors, guard reasons, brief
285
- 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.
286
139
 
287
- - `conflictingSkills`: declared direct or reverse conflicts for the target
288
- skill.
289
- - `activeConflicts`: workflow-scoped conflict pairs currently involving the
290
- 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.
291
144
 
292
- ## Source Profiles
145
+ ## Advanced operator commands
293
146
 
294
- `skillboard import` reads a source profile and emits a YAML fragment containing
295
- 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.
296
150
 
297
- ```bash
298
- skillboard import \
299
- --profile github.mattpocock.skills \
300
- --source-root /path/to/cloned-or-installed/repo \
301
- --out .skillboard/reports/import-fragment.yaml
302
- ```
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.
303
155
 
304
- To preview a direct apply path, pass `--merge --config --dry-run`. Merge is
305
- non-destructive by default: if a skill or install-unit id already exists, the
306
- command fails and leaves the config unchanged. Use `--replace` only when you
307
- intend to overwrite existing entries, and drop `--dry-run` only after reviewing
308
- 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.
309
160
 
310
- Built-in profiles are shipped as YAML data under `profiles/`, including:
311
-
312
- - `github.mattpocock.skills`
313
- - `github.code-yeongyu.oh-my-openagent`
314
- - `github.anthropics.skills`
315
- - `github.wshobson.agents`
316
- - `github.voltagent.awesome-agent-skills`
317
-
318
- Project-specific profiles can live under `.skillboard/profiles/` and be passed
319
- by path:
161
+ Hook installation remains an advanced legacy-workflow surface:
320
162
 
321
163
  ```bash
322
- 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
323
165
  ```
324
-
325
- ## Invocation Modes
326
-
327
- - `manual-only`: user must explicitly ask for it.
328
- - `router-only`: a router or orchestrator may select it after policy checks.
329
- - `workflow-auto`: model invocation is allowed only inside listed workflows.
330
- - `global-auto`: allowed globally; use sparingly and only for `global-meta`
331
- control skills.
332
- - `blocked`: installed but not callable until policy or provenance changes.
333
- - `deprecated`: kept for history, not for new use.
334
-
335
- Skill exposure values:
336
-
337
- - `exported`: centrally governed skill that may serve shared workflows or
338
- canonical capabilities.
339
- - `global-meta`: intentionally global control skill, such as a router, impact
340
- analyzer, or verification gate.
341
- - `unit-managed`: child component supplied by a parent install unit or harness
342
- bundle.
343
- - `private`: workflow-internal implementation detail.
344
-
345
- ## Reconciliation Model
346
-
347
- SkillBoard compares desired state from config with actual state from discovered
348
- `SKILL.md` files and detected harnesses.
349
-
350
- - New skills become `quarantined` / `blocked` recommendations.
351
- - Known capability matches are surfaced, but not auto-enabled.
352
- - Removed harnesses report affected workflows, missing commands, and migration
353
- recommendations.
354
- - Newly detected harnesses are disabled until workflows explicitly opt in.
355
- - If actual harness inventory is not provided, reconcile emits a warning instead
356
- of silently assuming harness state.
357
-
358
- ## Install Units
359
-
360
- SkillBoard should not assume that every runtime change is a standalone skill.
361
- Modern agent environments increasingly install packaged primitives:
362
-
363
- - `skill`
364
- - `plugin`
365
- - `marketplace`
366
- - `package-manager-dependency`
367
- - `harness`
368
- - `mcp-server`
369
- - `hook`
370
- - `agent`
371
- - `lsp`
372
-
373
- An install unit records source, scope, manifest/cache paths, provided
374
- components, modified config files, enablement, workflow dependencies,
375
- permission risk, trust level, digest/signature pins, and rollback shape.
376
- LazyCodex-style setups fit this model as user-global harness/plugin bundles
377
- that provide commands, skills, MCP integrations, hooks, and config.
378
-
379
- ## Variant Commands
380
-
381
- Use `skillboard variant add claude.a --from a --capability task-review
382
- --workflow claude-workflow --path claude/a ...` to record an explicit,
383
- user-approved `a -> claude.a` variant.
384
-
385
- For a reviewed manual adaptation lifecycle, use `skillboard variant fork
386
- <variant-id>` to create draft metadata and raw snapshot records, edit the
387
- variant `SKILL.md` by hand, inspect `skillboard variant status <variant-id>`
388
- for `variant.status` and computed drift, then promote with `skillboard variant
389
- approve <variant-id>` or restore with `skillboard variant reset <variant-id>
390
- --to-base|--to-approved`.
391
-
392
- SkillBoard records the relationship and policy only; it does not convert skill
393
- bodies, does not rewrite skill bodies, and does not guarantee semantic
394
- equivalence of skill bodies. See [variant-lifecycle.md](variant-lifecycle.md)
395
- for the full lifecycle guide.
396
-
397
- ## Related Runbooks
398
-
399
- - [install.md](install.md): install, init, doctor, bridge, refresh, and uninstall.
400
- - [user-flow.md](user-flow.md): first-time skill governance workflow.
401
- - [policy-model.md](policy-model.md): policy states, invocation modes, and install units.
402
- - [capabilities.md](capabilities.md): capability catalog and workflow resolution.
403
- - [rollout-runbook.md](rollout-runbook.md): rollout audit, apply, report, and rollback.
404
- - [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.