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/install.md CHANGED
@@ -1,531 +1,77 @@
1
- # Install And Bootstrap
1
+ # Install and Setup
2
2
 
3
- SkillBoard sits one layer above skill installers, plugin marketplaces, harness
4
- bundles, and local skill repositories.
5
-
6
- After install, ask your AI normal work requests such as "write tests before
7
- implementation", "review this plan and point out weak assumptions", or "help me
8
- refine this UX flow." The AI runs SkillBoard behind the scenes only when skill
9
- choices overlap, workflow priority matters, or you explicitly ask for a
10
- SkillBoard or skill decision. Installed user skills are usable by default unless
11
- runtime, user, or local instructions disable them; SkillBoard should not turn
12
- every skill choice into a permission prompt. When it selects a skill, the AI
13
- should briefly say which skill it will use and which skill it used. You do not
14
- need to memorize the SkillBoard command loop.
15
-
16
- ## Install From npm
17
-
18
- Global install auto-runs agent integration. Installing the package makes the
19
- CLI available and the postinstall step runs agent-layer setup for detected
20
- Codex, Claude, OpenCode, and Hermes user skill roots. The setup is best-effort:
21
- it never fails the package install, does not edit agent config files, and does
22
- not create project policy files. It does not run `skillboard init`; run `init`
23
- only inside a workspace where you want local SkillBoard policy, bridge guidance,
24
- and reports.
25
-
26
- The published CLI supports Node.js 14.21 or newer. Node 12 and older are not
27
- supported without a transpiled bundle because the source uses modern ESM and
28
- syntax such as nullish coalescing.
29
-
30
- AI/automation/operator details:
3
+ ## Install from npm
31
4
 
32
5
  ```bash
33
6
  npm install -g agent-skillboard
7
+ skillboard --version
34
8
  ```
35
9
 
36
- If your system npm requires elevated permissions, this is also supported:
37
-
38
- ```bash
39
- sudo npm install -g agent-skillboard
40
- ```
10
+ Postinstall detects supported agent homes, installs managed guidance, creates
11
+ `~/skillboard.config.yaml`, and refreshes `~/.skillboard/inventory.json`. No
12
+ separate setup command is required after a normal global install or update, and
13
+ no project init is needed.
41
14
 
42
- Under sudo, the postinstall setup resolves `SUDO_USER` and targets that user's
43
- agent homes instead of writing guidance under `/root`. The executable prefix is
44
- still decided by the npm command you run, so use the same npm/Node environment
45
- you expect to provide `skillboard` on `PATH`. Managed guidance files and
46
- directories written under the user's home are restored to the invoking user's
47
- `SUDO_UID:SUDO_GID` ownership.
48
-
49
- The install-time setup writes a user-level SkillBoard guidance skill under
50
- detected agent homes such as `CODEX_HOME`, `AGENTS_HOME`, `CLAUDE_HOME`,
51
- `OPENCODE_HOME`, and `HERMES_HOME`. Codex detection also checks
52
- `~/.agents/skills` and `~/.codex/skills`.
53
- If `~/.agents` exists but `~/.agents/skills` does not, setup creates the
54
- `skills` directory and installs the guidance skill there so Codex profiles that
55
- read the shared agent skill tree can see SkillBoard after restart.
56
- No separate setup command is required after a normal global install or update.
57
- When npm runs lifecycle scripts, package updates rerun the agent-home scan,
58
- refresh managed SkillBoard guidance files, and add newly detected supported
59
- agent roots.
60
-
61
- Run `skillboard setup` later when you add another supported agent, enable a new
62
- agent home, intentionally skipped lifecycle scripts, or need to repair the
63
- agent-layer guidance install:
15
+ Run setup later only when lifecycle scripts were skipped or another agent was
16
+ added:
64
17
 
65
18
  ```bash
66
- skillboard setup
67
19
  skillboard setup --agent codex,claude,opencode,hermes --yes
68
20
  ```
69
21
 
70
- After setup, the target agent can reuse a skill from another supported agent:
71
-
72
- ```bash
73
- skillboard import-skill --from codex --to opencode --skill <skill> --json
74
- ```
75
-
76
- If the source skill can be used as-is, the agent installs it with `--yes`. If
77
- SkillBoard reports `needs-adaptation`, the agent explains why, asks before
78
- changing the skill body for the target runtime, then installs the approved
79
- adapted file with `--adapted-file <path> --yes`.
80
-
81
- Use no-prompt npx package execution only when you intentionally want to create
82
- or inspect local workspace policy files without keeping a global SkillBoard
83
- binary installed:
84
-
85
- ```bash
86
- npx --yes --package agent-skillboard skillboard init
87
- npx --yes --package agent-skillboard skillboard doctor --summary
88
- npx --yes --package agent-skillboard skillboard brief --workflow <workflow-from-init>
89
- ```
90
-
91
- Local workspace policy files can be stricter than the first agent-layer setup.
92
- When you intentionally run `init`, it imports trusted local skills as
93
- manual-only and keeps runtime/plugin skills quarantined until their source is
94
- reviewed. The brief presents unreviewed runtime sources as one-time review
95
- decisions rather than default block recommendations; after review, individual
96
- quarantined skills can be activated as manual-only workflow skills. When `init`
97
- creates or discovers workflows, use one of the workflow names it prints for the
98
- first brief. If `init` does not print a workflow, run the unscoped `brief`
99
- command it prints instead. The explicit package/binary spelling avoids an extra
100
- npx install prompt and keeps the executable name clear.
101
-
102
- The equivalent `npm exec` spelling is also no-prompt and works well in scripts:
103
-
104
- ```bash
105
- npm exec --yes --package agent-skillboard -- skillboard init
106
- npm exec --yes --package agent-skillboard -- skillboard doctor --summary
107
- npm exec --yes --package agent-skillboard -- skillboard brief --workflow <workflow-from-init>
108
- ```
22
+ System npm may require `sudo npm install -g agent-skillboard`. SkillBoard uses
23
+ `SUDO_USER` for user-level state and restores managed files to that user.
109
24
 
110
- For repeated local use, install the CLI globally:
25
+ ## Default behavior
111
26
 
112
- AI/automation/operator details:
27
+ A valid installed skill defaults to enabled and agent-local. Sharing is opt-in
28
+ per skill:
113
29
 
114
30
  ```bash
115
- npm install -g agent-skillboard
116
- skillboard setup --agent codex,claude,opencode,hermes --yes
31
+ skillboard skill share <skill-id>
32
+ skillboard skill unshare <skill-id>
117
33
  ```
118
34
 
119
- The executable remains `skillboard` even though the npm package name is
120
- `agent-skillboard`.
121
-
122
- ## Run Unreleased Builds From GitHub
123
-
124
- Use GitHub npx only when you intentionally want the current repository state
125
- before the next npm release:
35
+ Sharing preserves agent-owned originals. Source and provenance are optional
36
+ audit metadata and never determine availability. Runtime and action
37
+ authorization are outside SkillBoard's scope.
126
38
 
127
- AI/automation/operator details:
128
-
129
- ```bash
130
- npx --yes --package github:NyXXiR/skillboard skillboard init
131
- npx --yes --package github:NyXXiR/skillboard skillboard doctor --summary
132
- npx --yes --package github:NyXXiR/skillboard skillboard brief --workflow <workflow-from-init>
133
- ```
134
-
135
- The equivalent `npm exec` spelling is explicit about the package and binary:
136
-
137
- ```bash
138
- npm exec --yes --package github:NyXXiR/skillboard -- skillboard init
139
- npm exec --yes --package github:NyXXiR/skillboard -- skillboard doctor --summary
140
- npm exec --yes --package github:NyXXiR/skillboard -- skillboard brief --workflow <workflow-from-init>
141
- ```
142
-
143
- ## Install From A Clone
144
-
145
- Use a clone when developing SkillBoard itself or testing unreleased changes:
146
-
147
- AI/automation/operator details:
39
+ ## From GitHub or a clone
148
40
 
149
41
  ```bash
42
+ npx --yes --package github:NyXXiR/skillboard skillboard --version
43
+ npm exec --yes --package github:NyXXiR/skillboard -- skillboard help
150
44
  git clone https://github.com/NyXXiR/skillboard.git
151
45
  cd skillboard
152
46
  npm install
153
- node bin/skillboard.mjs init --dir /path/to/your/project
154
- node bin/skillboard.mjs doctor --dir /path/to/your/project --summary
155
- node bin/skillboard.mjs brief --dir /path/to/your/project --workflow <workflow-from-init>
156
- ```
157
-
158
- ## What init Does
159
-
160
- `skillboard init` is the optional local policy-file generation step. npm
161
- installation and `skillboard setup` do not modify a project, but init creates
162
- local files for teams that intentionally keep workflow policy in a workspace.
163
-
164
- Created project files:
165
-
166
- - `skillboard.config.yaml`: desired state for workflows, capabilities, skills,
167
- harnesses, and install units.
168
- - `skills/`: local skill root.
169
- - `.skillboard/reports/`: generated dashboard and reconcile output location.
170
- - `.skillboard/profiles/`: project-specific source profile location.
171
- - `AGENTS.md`: Codex-style project instruction bridge.
172
- - `CLAUDE.md`: Claude Code project instruction bridge.
173
-
174
- The bridge block is marked with `BEGIN SKILLBOARD` / `END SKILLBOARD` and is
175
- idempotent. Running init again does not duplicate it.
176
-
177
- By default, init scans known local agent skill roots such as Codex user skills,
178
- Codex system skills, Codex plugin-cache manifests, Claude user skills, Hermes
179
- user skills, and Hermes profile skills under `.hermes/profiles/*/skills`.
180
- Trusted user-local skills are written as `status: active` with `invocation:
181
- manual-only` and attached to a generated local manual workflow when the project
182
- has no workflow metadata yet. That lets a first-time user keep their existing
183
- manual skills usable through `skillboard can-use` and guard checks without
184
- granting automatic model invocation or creating legacy-state warning noise.
185
- System, plugin, and other runtime-supplied skills are written with `status:
186
- quarantined` and `invocation: blocked`. Plugin hooks, MCP servers, commands, and
187
- modified config files are recorded on the owning install unit when manifest
188
- metadata exposes them, which lets policy checks flag high-risk runtime
189
- extensions without flattening them into loose skills. After the owning source is
190
- reviewed, action cards can activate a quarantined runtime skill into a workflow
191
- as `manual-only`; automatic preference should still be remembered later through
192
- the normal ask-after-use policy loop. Use `--no-scan-installed` for a
193
- scaffold-only bootstrap, or `--scan-root <dir>[,<dir>]` to add server-specific
194
- skill roots during bootstrap.
195
-
196
- After init, run:
197
-
198
- ```bash
199
- skillboard doctor --dir /path/to/your/project
200
- ```
201
-
202
- Doctor is read-only. It reports config validity, bridge block status, managed
203
- skills and install units, policy/source audit health, high-risk runtime
204
- extensions, and the default uninstall dry-run plan. The default exit code stays
205
- zero when the project is usable but has review-needed safe-mode warnings, such as
206
- an unreviewed runtime extension. Add `--strict` when those warnings should fail a
207
- CI or automation gate. Use `--json` for an agent-readable health payload, or
208
- `--verify` when local source/cache digests should be checked as part of the
209
- report. `skillboard status` is the same report under a shorter command name.
210
-
211
- For AI-mediated use, the generated bridge tells agents to answer availability
212
- questions by reading the current brief with `skillboard brief --json`, not from
213
- memory or from raw `SKILL.md` bodies. The brief is read-only and organizes the
214
- response around "What your AI can use now", decisions the user can make once,
215
- hard safety blocks, inactive installed skills, and suggested action cards. Text
216
- briefs show action cards by default; JSON keeps them opt-in with
217
- `--include-actions`. The default text brief is compact for large skill sets: it
218
- keeps counts, top categories, the next safe action, short section previews, and
219
- short action summaries. Use `skillboard brief --verbose` when an operator needs
220
- the full list or full copyable command details. Agents should still run
221
- `skillboard guard use ...` immediately before an actual skill invocation. A
222
- passing guard is not a user prompt; the agent should disclose the selected skill
223
- at the start and completion, and ask only if the guard denies use or a
224
- policy-changing action is needed.
225
-
226
- When a normal request leaves skill choice ambiguous, several skills overlap,
227
- workflow priority matters, or the user asks for a SkillBoard or skill decision,
228
- the bridge tells agents to use `skillboard brief --intent <request> --json`,
229
- read `assistant_guidance.route`, and use `recommended_skill`, `fallback_skills`,
230
- `route_candidates`, `overlap_resolution`, `policy_memory`,
231
- `post_use_policy_suggestion`, and `guard_command` instead of guessing from raw
232
- skill text. Inspect
233
- `overlap_resolution` and `route_candidates` when several skills match so
234
- allowed overlap, denied candidates, and selected fallbacks are clear. If
235
- `policy_memory` is present, the agent should mention after completion that
236
- remembered or configured policy selected this skill even though other allowed
237
- skills were available. If
238
- `post_use_policy_suggestion` is present, the agent should use the allowed
239
- routed skill first, then ask after completion whether to remember the suggested
240
- policy. If no skill matches, the agent should ask a clarifying question before
241
- choosing a skill. If the user explicitly requests a specific already-allowed
242
- skill, the agent should honor that request after guard use instead of rerouting
243
- away solely because another skill also matches.
244
-
245
- Action cards are change suggestions. Before an agent applies one that changes
246
- policy, trust, hooks, reset state, or skill references, it should request user
247
- confirmation for one current action id from the brief. After confirmation, it should run
248
- `skillboard apply-action <action-id> --config skillboard.config.yaml --skills skills --yes --json`
249
- with `--workflow <name>` when a workflow is selected. It should then read the
250
- returned post-apply brief before answering another availability question or
251
- applying another action card. `apply-action` re-resolves current action cards,
252
- so stale action ids and cached action-card shell text are not replayed.
253
- For hook action cards specifically, keep `apply-action` as the action-card
254
- primary flow. Raw `skillboard hook install ... --dry-run --json` previews and
255
- the matching non-dry-run command are underlying manual detail for operators who
256
- need to inspect or materialize an executable guard hook directly. Generated hooks
257
- pin the install-time SkillBoard command, config, skills root, and workflow; set
258
- those values with hook install options such as `--skillboard-bin`, not with
259
- runtime environment overrides.
260
-
261
- ## Hermes System Prompt Bridge
262
-
263
- Hermes does not automatically read `AGENTS.md` or `CLAUDE.md`. If you want a
264
- Hermes profile to follow SkillBoard policy, add this bridge to the profile or
265
- system prompt for the managed project:
266
-
267
- ```text
268
- Use SkillBoard as the source of truth for agent skill availability.
269
- Use the workflow generated by init, such as `hermes-codex-local-manual`, or a
270
- workflow you explicitly created for that Hermes profile.
271
-
272
- Before answering what skills can be used in that workflow, run:
273
- skillboard brief --workflow <workflow-name> --json --include-actions --dir /path/to/your/project
274
-
275
- When a normal request leaves skill choice ambiguous, several skills overlap,
276
- workflow priority matters, or the user asks for a SkillBoard or skill decision,
277
- run:
278
- skillboard brief --workflow <workflow-name> --intent <request> --json --dir /path/to/your/project
279
- Read assistant_guidance.route. Use recommended_skill, fallback_skills,
280
- route_candidates, overlap_resolution, policy_memory,
281
- post_use_policy_suggestion, and guard_command. Inspect overlap_resolution and
282
- route_candidates when several skills match so allowed overlap, denied
283
- candidates, and selected fallbacks are clear. If policy_memory is present,
284
- mention after completion that remembered or configured policy selected this
285
- skill even though other allowed skills were available. If
286
- post_use_policy_suggestion is present, use the allowed routed skill first, then
287
- ask after completion whether to remember the suggested policy. If no skill
288
- matches, ask a clarifying question before choosing a skill.
289
-
290
- If the user explicitly requests a specific already-allowed skill, honor that
291
- request after guard use instead of rerouting away solely because another skill
292
- also matches.
293
-
294
- Do not infer availability from installed SKILL.md files. Immediately before
295
- invoking a skill, run:
296
- skillboard guard use <skill-id> --workflow <workflow-name> --dir /path/to/your/project
297
-
298
- If the guard allows an already-approved skill, do not ask the user for another
299
- approval. Say at the start: "I will use <skill-id> for this request." Say at
300
- completion: "I used <skill-id> for this request." Treat that disclosure as an
301
- audit trace, not a permission prompt.
302
-
303
- For suggested policy changes, ask the user to approve one current action id from
304
- the `--include-actions` brief, then run:
305
- skillboard apply-action <action-id> --workflow <workflow-name> --dir /path/to/your/project --yes --json
47
+ node bin/skillboard.mjs help
306
48
  ```
307
49
 
308
- After installing a new local agent skill pack, plugin, workflow bundle, or
309
- harness, rescan before enabling anything:
310
-
311
- ```bash
312
- skillboard inventory refresh --dir /path/to/your/project --dry-run
313
- skillboard inventory refresh --dir /path/to/your/project
314
- ```
50
+ For source-tree commands, replace `skillboard ` with
51
+ `node bin/skillboard.mjs `.
315
52
 
316
- The refresh command reuses the init scanner. If no workflows exist yet, trusted
317
- user-local skills are attached to a generated local manual workflow. If workflows
318
- already exist, those skills are imported as manual-only candidates with a review
319
- note instead of being attached to an arbitrary workflow. Runtime components
320
- remain attached to the owning install unit for review, and non-user runtime
321
- skills stay out of automatic use until a source/workflow decision is recorded.
322
- Dry-run output includes a capped YAML semantic change list, while broken
323
- detector entries or malformed `SKILL.md` files are surfaced as scan warnings
324
- instead of aborting the whole refresh.
53
+ Hermes should read only explicitly shared or Hermes-installed skills, not the
54
+ entire Codex skill tree.
325
55
 
326
- Add a new workflow or harness without editing YAML by hand:
56
+ ## Version 1 projects
327
57
 
328
58
  ```bash
329
- skillboard add harness codex --config skillboard.config.yaml --skills skills
330
- skillboard add workflow daily-workflow \
331
- --harness codex \
332
- --skill user.helper \
333
- --config skillboard.config.yaml \
334
- --skills skills
59
+ skillboard migrate v2 --config <path> --json
60
+ skillboard migrate v2 --config <path> --yes --json
61
+ skillboard migrate v2 --config <path> --rollback <backup> --json
335
62
  ```
336
63
 
337
- If an installer mutates runtime config without a manifest, parse its output and
338
- the mutated config files into the owning install unit before enabling anything:
339
-
340
- ```bash
341
- skillboard inventory detect \
342
- --unit acme.runtime \
343
- --config /path/to/your/project/skillboard.config.yaml \
344
- --install-output /path/to/install.log \
345
- --config-file ~/.codex/config.toml \
346
- --dry-run
347
- ```
348
-
349
- The detector records discovered commands, hooks, MCP servers, and modified
350
- config files under `install_units.<id>`, then updates `permission_risk` from the
351
- detected runtime surface.
352
-
353
- For fetchable Git sources, refresh the project cache and digest pin before
354
- writing a lockfile:
355
-
356
- ```bash
357
- skillboard sources refresh --dir /path/to/your/project --unit github.mattpocock.skills --dry-run
358
- skillboard sources refresh --dir /path/to/your/project --unit github.mattpocock.skills
359
- skillboard audit sources \
360
- --config /path/to/your/project/skillboard.config.yaml \
361
- --skills /path/to/your/project/skills \
362
- --verify
363
- ```
364
-
365
- `sources refresh` supports direct Git URLs, `git clone <url>` command strings,
366
- GitHub `org/repo` shorthands, and `file://` Git remotes. It writes the refreshed
367
- checkout under `.skillboard/sources/<install-unit-id>`, updates `cache_path`,
368
- `source_digest`, and `verified_at`, and leaves the config untouched on dry-run.
369
-
370
- ## Uninstall Agent Guidance Or Project State
64
+ Version 1 is read-only during v0.3.x. v0.4.0 removes the v1 reader.
371
65
 
372
- Package removal, agent guidance cleanup, and project cleanup are intentionally
373
- separate. `npm uninstall -g agent-skillboard` removes the CLI package, but npm
374
- uninstall should not be relied on to edit agent homes or projects. If you want
375
- the postinstall-created user-agent guidance removed, run the agent-layer cleanup
376
- while the `skillboard` binary is still available:
66
+ ## Uninstall
377
67
 
378
68
  ```bash
379
- skillboard uninstall --agent-layer --dry-run
380
- skillboard uninstall --agent-layer
69
+ skillboard uninstall --user --dry-run
70
+ skillboard uninstall --user --yes
381
71
  npm uninstall -g agent-skillboard
382
72
  ```
383
73
 
384
- Agent-layer uninstall removes only managed `skillboard/SKILL.md` guidance files
385
- that contain SkillBoard's agent integration marker. It preserves other agent
386
- skills and user-authored `skillboard` skills that do not contain that marker.
387
- Use `--agent codex,claude,opencode,hermes` to target specific supported agents.
388
-
389
- Use the project cleanup command when you want to remove SkillBoard from a
390
- project:
391
-
392
- ```bash
393
- skillboard uninstall --dir /path/to/your/project --dry-run
394
- skillboard uninstall --dir /path/to/your/project
395
- ```
396
-
397
- Default project uninstall is a clean removal:
398
-
399
- - removes SkillBoard config, bridge blocks, and the entire `.skillboard/`
400
- project state directory;
401
- - deletes a bridge file only when it has no user content left;
402
- - preserves user-authored non-SkillBoard content in `AGENTS.md` and
403
- `CLAUDE.md`;
404
- - preserves local `skills/*/SKILL.md` files because skill creation and deletion
405
- are outside the uninstall scope.
406
-
407
- Use `--keep-settings` only when you want to keep project SkillBoard policy and
408
- bridge guidance in place:
409
-
410
- ```bash
411
- skillboard uninstall --dir /path/to/your/project --keep-settings --dry-run
412
- skillboard uninstall --dir /path/to/your/project --keep-settings
413
- ```
414
-
415
- `--keep-settings` preserves `skillboard.config.yaml`, project bridge guidance,
416
- reports, generated guard hooks, and modified project state. It is the explicit
417
- opt-in when project policy and guidance should survive package cleanup.
418
-
419
- `--purge` is still accepted as an explicit spelling for the default clean
420
- project removal. Default removal and `--purge` both remove `.skillboard/`,
421
- including reports, hooks, source caches, rollout logs, variant snapshots, and
422
- profiles.
423
-
424
- The older granular flags are still supported for scripts that assembled cleanup
425
- piecemeal. Passing `--remove-config`, `--reset-config`, `--remove-reports`, or
426
- `--remove-hooks` without `--purge` runs a partial cleanup instead of the default
427
- clean project removal:
428
-
429
- - `--remove-config` deletes `skillboard.config.yaml` only when it still matches
430
- the generated default;
431
- - `--reset-config` deletes `skillboard.config.yaml` even when it contains policy
432
- choices;
433
- - `--remove-reports` deletes `.skillboard/reports/`;
434
- - `--remove-hooks` deletes `.skillboard/hooks/`.
435
-
436
- For ordinary users, the default project uninstall is already the clean reset that
437
- removes SkillBoard-owned lifecycle scaffolding while preserving local `skills/`.
438
-
439
- ## Upper-Layer Control
440
-
441
- After installing skill packs or harness bundles, represent them as install
442
- units:
443
-
444
- ```bash
445
- skillboard import \
446
- --profile github.mattpocock.skills \
447
- --source-root /path/to/mattpocock-skills \
448
- --out .skillboard/reports/mattpocock-import.yaml
449
- ```
450
-
451
- The import output is a reviewable YAML fragment. Merge the accepted `skills` and
452
- `install_units` into `skillboard.config.yaml`; imported skills stay inactive
453
- until workflows and policies explicitly use them.
454
-
455
- For a direct but still safe apply path:
456
-
457
- ```bash
458
- skillboard import \
459
- --profile github.mattpocock.skills \
460
- --source-root /path/to/mattpocock-skills \
461
- --config skillboard.config.yaml \
462
- --merge \
463
- --dry-run
464
- ```
465
-
466
- `--merge` refuses to overwrite existing `skills` or `install_units`. Add
467
- `--replace` only when you intentionally want the imported source profile to
468
- replace those entries. The merge uses a structured YAML writer that keeps normal
469
- comments and ordering where possible, but review the diff before committing
470
- hand-edited formatting. Drop `--dry-run` only after the reported text and YAML
471
- semantic change plan is acceptable.
472
-
473
- After reviewing source ownership, expected components, and risk, record the
474
- install-unit trust decision without editing YAML by hand:
475
-
476
- ```bash
477
- skillboard review install-unit github.mattpocock.skills \
478
- --trust-level reviewed \
479
- --config skillboard.config.yaml \
480
- --skills skills
481
- ```
482
-
483
- Automatic invocation remains blocked for unreviewed non-user sources. The user
484
- experience should still be a one-time decision queue: review, trust, or block
485
- the install unit once, activate only the needed quarantined skills as
486
- manual-only, then revisit only when the source, skill, or workflow changes.
487
-
488
- ```yaml
489
- install_units:
490
- github.mattpocock.skills:
491
- kind: marketplace
492
- source: npx skills@latest add mattpocock/skills
493
- scope: user-global
494
- provided_components:
495
- - skills
496
- components:
497
- skills:
498
- - matt.tdd
499
- ```
500
-
501
- Then link each governed skill back to its owner:
502
-
503
- ```yaml
504
- skills:
505
- matt.tdd:
506
- path: matt/tdd
507
- status: active
508
- invocation: workflow-auto
509
- exposure: exported
510
- owner_install_unit: github.mattpocock.skills
511
- ```
512
-
513
- Run:
514
-
515
- ```bash
516
- skillboard check --config skillboard.config.yaml --skills skills
517
- skillboard dashboard --config skillboard.config.yaml --skills skills --out .skillboard/reports/skill-map.md
518
- ```
519
-
520
- This keeps multiple installed repositories visible as managed units instead of
521
- turning every skill into a global invocation candidate.
522
-
523
- ## Adapter Direction
524
-
525
- Import support should be profile-driven, not hardcoded. A popular source such as
526
- `mattpocock/skills` or `oh-my-openagent` may ship with a built-in source profile,
527
- but that profile should be data that maps repository layout and defaults into the
528
- same install-unit model. Source-specific code should be limited to detector
529
- plugins for layouts that cannot be described declaratively.
530
-
531
- See [adapters.md](adapters.md).
74
+ User-level cleanup removes marker-owned shared copies, managed SkillBoard
75
+ guidance, `~/skillboard.config.yaml`, and `~/.skillboard`. It preserves
76
+ agent-owned and unmanaged skills. Apply requires `--yes`; legacy project cleanup
77
+ and guidance-only `--agent-layer` cleanup remain explicit and previewable.