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/routing.md CHANGED
@@ -1,100 +1,33 @@
1
- # Capability Routing
1
+ # Routing
2
2
 
3
- Capability routing helps an AI choose a skill for the user's current request
4
- without making the user learn SkillBoard commands.
3
+ Routing chooses among skills already available to the current agent. Guard
4
+ decides availability from valid generated inventory, `enabled`, and
5
+ `installed_on`; routing cannot override that verdict.
5
6
 
6
- SkillBoard is intentionally permissive at this layer: workflow-bound skills can
7
- remain broadly available, and routing only chooses the skill that should steer
8
- this request. When several allowed skills match, the response includes
9
- `overlap_resolution` so the AI can explain that the other skills stayed
10
- available while the workflow routed to one selected skill.
7
+ ## Resolution order
11
8
 
12
- For the normal AI-mediated flow, prefer `brief --intent`. It returns the
13
- availability brief and the routing result together:
9
+ 1. Remove skills missing valid inventory records.
10
+ 2. Remove disabled skills.
11
+ 3. Remove skills not installed for the selected agent.
12
+ 4. Honor an explicit user-selected skill if it remains eligible.
13
+ 5. Rank intent matches by optional preference and priority.
14
+ 6. Return one recommendation and ordered fallbacks.
14
15
 
15
- ```bash
16
- skillboard brief \
17
- --intent "write tests before implementation" \
18
- --workflow codex-night-workflow \
19
- --config skillboard.config.yaml \
20
- --skills skills \
21
- --json
22
- ```
23
-
24
- Read `assistant_guidance.route` from the JSON output. It includes:
25
-
26
- - `matched_capability`
27
- - `match_source`
28
- - `confidence`
29
- - `matched_terms`
30
- - `recommendation_reason`
31
- - `recommended_skill`
32
- - `fallback_skills`
33
- - `route_candidates`
34
- - `overlap_resolution`
35
- - `policy_memory`
36
- - `post_use_policy_suggestion`
37
- - `guard_command`
38
- - `usage_disclosure`
39
-
40
- When `guard_allowed` is true, the AI should run the guard automatically before
41
- using the skill. It should not ask for another approval. It should disclose the
42
- skill at the start and at completion:
43
-
44
- ```text
45
- I will use <skill-id> for this request.
46
- I used <skill-id> for this request.
47
- ```
48
-
49
- When several skills match, inspect `route_candidates` before acting. Each entry
50
- shows the candidate skill, whether it was selected, whether the guard currently
51
- allows it, and the guard reason when it is denied. This is the field that tells
52
- an AI why a preferred skill was skipped and an allowed fallback was selected.
53
- Inspect `overlap_resolution` first when it is present: `status: resolved` with
54
- `mode: permissive-routing` means multiple allowed skills matched, SkillBoard
55
- kept them available, and the current workflow still has one deterministic route.
56
- When `policy_memory` is present, remembered or configured workflow policy
57
- selected the routed skill while other allowed skills were also available. The AI
58
- should mention that after completion so the user knows a stored policy
59
- preference shaped the route.
60
-
61
- When routing is safe but policy learning would reduce future ambiguity,
62
- SkillBoard may return `post_use_policy_suggestion`. This includes cases where a
63
- preferred skill is denied and an allowed fallback is selected, or where multiple
64
- allowed workflow-bound skills match and one allowed skill is selected
65
- deterministically. The AI should keep the task moving with the allowed routed
66
- skill, then ask after completion whether to remember that skill as the preferred
67
- workflow policy. The suggested policy command is informational until the user
68
- confirms it.
69
-
70
- Use `route` directly when an automation layer only needs the recommendation
71
- payload:
16
+ Preference ranks only and never changes availability.
72
17
 
73
18
  ```bash
74
- skillboard route "write tests before implementation" \
75
- --workflow codex-night-workflow \
76
- --config skillboard.config.yaml \
77
- --skills skills \
78
- --json
19
+ skillboard brief --intent "write tests" --agent codex --json
20
+ skillboard route "write tests" --agent codex --json
21
+ skillboard guard use test-first --agent codex --json
79
22
  ```
80
23
 
81
- Routing first matches declared workflow capabilities. If the workflow has skill
82
- bindings but no matching capability, it can fall back to workflow-bound skill
83
- metadata such as id, path, category, `SKILL.md` name, and `SKILL.md`
84
- description.
85
-
86
- Routing does not invoke the skill. The final boundary is still:
87
-
88
- ```bash
89
- skillboard guard use <skill-id> \
90
- --workflow codex-night-workflow \
91
- --config skillboard.config.yaml \
92
- --skills skills
93
- ```
24
+ These commands use `~/skillboard.config.yaml` and
25
+ `~/.skillboard/inventory.json` from any working directory. Advanced
26
+ `--config` and `--skills` overrides remain available for migration, testing,
27
+ and legacy workspaces.
94
28
 
95
- If no capability or workflow-bound skill matches, SkillBoard returns
96
- `recommended_skill: null`. Ask a clarifying question before choosing a skill.
29
+ When guard allows use, continue without another approval. Ask after completion
30
+ only when remembering a preference would reduce future ambiguity.
97
31
 
98
- See [Value proof](value-proof.md) for an executable route example that selects
99
- `matt.tdd`, returns `private.tdd-work-continuity` as fallback, and verifies the
100
- guard and disclosure fields.
32
+ Source and provenance findings are optional audit metadata and never determine
33
+ availability. Runtime and action authorization are outside SkillBoard's scope.
package/docs/user-flow.md CHANGED
@@ -1,333 +1,101 @@
1
- # First-Time Skill Control Flow
1
+ # User Flow
2
2
 
3
- This flow assumes a user installed SkillBoard so their AI can keep installed
4
- skills broadly available while resolving confusing overlap only when it matters.
3
+ SkillBoard is a user-level control plane, not a per-project setup step. Users
4
+ enable or disable skills and may opt individual skills into cross-agent sharing.
5
+ Installed skills default to enabled and agent-local.
5
6
 
6
- When you 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 should work normally. SkillBoard becomes relevant
9
- when skill choice is ambiguous, several skills overlap, workflow priority
10
- matters, or you explicitly ask for a SkillBoard or skill decision such as "what
11
- skills can you use here?" or "make this reviewed skill available for this
12
- workflow." In those cases, the AI should read the current brief, show the
13
- relevant choice, ask only before applying one current action id when policy
14
- would change, and run the final guard automatically before invocation. For an
15
- already-allowed skill, the AI should state which skill it is about to use and
16
- which skill it used when reporting the result, not ask for another approval.
17
- That disclosure is an audit trace, not a permission prompt. If you explicitly
18
- ask for a specific already-allowed skill, the AI should honor that request after
19
- guard use instead of rerouting away solely because another skill also matches.
20
- You do not need to memorize the SkillBoard command loop. The command examples
21
- below are AI/automation/operator details for the agent, scripts, or people
22
- maintaining the setup.
23
-
24
- If you ask OpenCode to use a skill you previously used in Codex, the target
25
- agent should call:
26
-
27
- ```bash
28
- skillboard import-skill --from codex --to opencode --skill <skill> --json
29
- ```
30
-
31
- Compatible skills are installed into the target agent's user skill root. When
32
- the source is agent-specific, the agent should explain the compatibility issue
33
- and ask before producing a target-agent adapted `SKILL.md`.
34
-
35
- Before changing this routing or workflow UX, read
36
- [`docs/ai-skill-routing-goal.md`](ai-skill-routing-goal.md). The goal is to keep
37
- SkillBoard non-blocking: observe the request, route to the current best skill,
38
- work normally, explain briefly, ask after use only when a policy preference would
39
- help, and remember that usage policy without rewriting skill bodies.
40
-
41
- ## 1. Bootstrap The Control Plane
42
-
43
- AI/automation/operator details:
44
-
45
- ```bash
46
- skillboard init
47
- skillboard doctor
48
- ```
49
-
50
- `init` creates the config, local `skills/` directory, report directories, and
51
- agent bridge blocks. It also scans known local agent skill locations and records
52
- discovered skills as managed entries. Trusted user-local skills, including
53
- Hermes profile skills under `.hermes/profiles/*/skills`, are immediately
54
- attached to a generated manual workflow as `status: active` with
55
- `invocation: manual-only` when the project has no workflows yet, so existing
56
- manual skills keep working through `can-use` and guard checks without creating
57
- legacy-state warning noise. Runtime-supplied or external skills are quarantined
58
- until an explicit source and workflow decision exists. Reviewable items should
59
- appear as "Needs your decision"; only provenance failures, explicit user blocks,
60
- disabled sources, or other hard policy failures should remain "Blocked for
61
- safety". Use
62
- `skillboard doctor --strict` when review-needed safe-mode warnings should fail
63
- automation.
64
-
65
- When the user asks the agent what it can use, the agent should read the current
66
- brief with `skillboard brief --json` first and answer from the brief rather than
67
- reading skill files directly. The user-facing text output uses sections such as
68
- "What your AI can use now", "Needs your decision", and "Blocked for safety";
69
- text briefs include previewable action cards by default, while the JSON form
70
- keeps action cards opt-in. For large skill sets, the default text brief stays
71
- compact: counts, top categories, next safe action, short previews per section,
72
- and short action summaries. Use `skillboard brief --verbose` when an operator
73
- needs every skill and full copyable command details. Those action cards are
74
- suggestions only: the agent should pick one current action id from the brief,
75
- request confirmation before applying risk-bearing changes, then run
76
- `skillboard apply-action <action-id> --config skillboard.config.yaml --skills skills --yes --json`
77
- with `--workflow <name>` when a workflow is selected. The agent should read the
78
- returned post-apply brief before making the next availability claim.
79
- `apply-action` re-resolves the current brief and refuses stale action ids instead
80
- of replaying cached action-card shell text.
81
-
82
- When a normal request leaves skill choice ambiguous, several skills overlap,
83
- workflow priority matters, or the user asks for a SkillBoard or skill decision,
84
- the agent can keep the same brief flow and include the user request as intent:
85
-
86
- ```bash
87
- skillboard brief --intent "write tests before implementation" --workflow daily-workflow --config skillboard.config.yaml --skills skills --json
88
- ```
89
-
90
- The returned `assistant_guidance.route` maps the request to a declared workflow
91
- capability or a workflow-bound skill metadata match, returns the recommended
92
- skill and fallbacks, and includes `match_source`, `matched_terms`,
93
- `recommendation_reason`, `route_candidates`, `overlap_resolution`,
94
- `policy_memory`,
95
- `post_use_policy_suggestion`, and the `skillboard guard use ...` command that
96
- still needs to pass immediately before invocation. `overlap_resolution`
97
- summarizes permissive routing when several allowed skills match.
98
- `route_candidates` is the per-skill decision trace: it shows which matching
99
- skill was selected, which candidates were denied, and the guard reason when a
100
- preferred skill was skipped for an allowed fallback.
101
- `policy_memory` appears when remembered or configured workflow policy selected
102
- the routed skill while other allowed skills were also available; the agent
103
- should mention that after completion so the user understands the prior choice
104
- shaped the route.
105
- `post_use_policy_suggestion` is the ask-after-use hook: if it is present, the
106
- agent should use the allowed routed skill first, then ask after completion
107
- whether to remember the suggested preference. Metadata matching can
108
- use declared skill id, path, category, and `SKILL.md` frontmatter
109
- name/description; it does not semantically rank raw skill bodies. If a
110
- recommended skill is already allowed, the agent should disclose it at the start
111
- and completion rather than ask for another approval. If the user explicitly
112
- requests a specific already-allowed skill, the agent should honor that request
113
- after guard use instead of rerouting away solely because another skill also
114
- matches. If no capability or workflow-bound skill matches, the agent should ask
115
- a clarifying question instead of guessing from raw `SKILL.md` text. Operators can still call
116
- `skillboard route ...` directly when they only need the recommendation payload.
117
-
118
- Run this again after installing agent packages, plugins, workflow bundles, or
119
- harnesses:
120
-
121
- ```bash
122
- skillboard inventory refresh --dry-run
123
- skillboard inventory refresh
124
- ```
125
-
126
- ## 2. Add A User-Owned Skill
127
-
128
- AI/automation/operator details:
129
-
130
- Create the skill under the project `skills/` directory:
131
-
132
- ```bash
133
- mkdir -p skills/user-helper
134
- $EDITOR skills/user-helper/SKILL.md
135
- ```
136
-
137
- Register it without making it callable yet:
138
-
139
- ```bash
140
- skillboard add skill user.helper \
141
- --path user-helper \
142
- --config skillboard.config.yaml \
143
- --skills skills \
144
- --dry-run
145
-
146
- skillboard add skill user.helper \
147
- --path user-helper \
148
- --config skillboard.config.yaml \
149
- --skills skills
150
- ```
151
-
152
- The dry run reports semantic YAML changes and leaves the config untouched. The
153
- real command adds the skill as a direct user-owned `candidate` by default.
154
-
155
- Create a workflow or harness for the skill without hand-editing YAML:
7
+ ## 1. Install and ask normally
156
8
 
157
9
  ```bash
158
- skillboard add harness codex \
159
- --config skillboard.config.yaml \
160
- --skills skills
161
-
162
- skillboard add workflow daily-workflow \
163
- --harness codex \
164
- --skill user.helper \
165
- --config skillboard.config.yaml \
166
- --skills skills
10
+ npm install -g agent-skillboard
167
11
  ```
168
12
 
169
- When `add workflow` attaches a `candidate` / `manual-only` skill, it promotes the
170
- skill to `active` with `invocation: manual-only` for that workflow. It still
171
- does not grant automatic model invocation.
172
-
173
- ## 3. Inspect Influence Before Use
174
-
175
- AI/automation/operator details:
13
+ Postinstall creates `~/skillboard.config.yaml`, refreshes
14
+ `~/.skillboard/inventory.json`, and installs managed guidance for detected
15
+ agents. No project init is needed. If setup was skipped:
176
16
 
177
17
  ```bash
178
- skillboard explain user.helper \
179
- --config skillboard.config.yaml \
180
- --skills skills
181
-
182
- skillboard can-use user.helper \
183
- --workflow daily-workflow \
184
- --config skillboard.config.yaml \
185
- --skills skills
186
-
187
- skillboard impact disable user.helper \
188
- --config skillboard.config.yaml \
189
- --skills skills \
190
- --out .skillboard/reports/user-helper-impact.md
18
+ skillboard setup --yes --agent codex
191
19
  ```
192
20
 
193
- `explain` shows source class, trust, owner install unit, workflow roles, and
194
- capability roles. `can-use` is the machine-readable gate for agents. `impact`
195
- shows which workflows and required outputs would be affected before disabling or
196
- removing a skill.
197
-
198
- For an actual invocation, `brief` is not the final permission check. Agents
199
- should run `skillboard guard use ...` automatically immediately before calling a
200
- skill so state changes made after the brief cannot slip through. A passing guard
201
- does not require another user prompt; the agent should disclose the skill use at
202
- the start and in the final result. That disclosure is an audit trace, not a
203
- permission prompt.
204
-
205
- When wiring a guard hook from an action card, keep `apply-action` as the
206
- action-card primary flow:
207
-
208
- ```bash
209
- skillboard apply-action <action-id> --workflow daily-workflow --config skillboard.config.yaml --skills skills --yes --json
210
- ```
21
+ ## 2. Observe and route
211
22
 
212
- The raw hook commands are underlying manual operator detail for previewing and
213
- materializing an executable guard hook outside the action-card control loop:
23
+ From any directory, the agent reads:
214
24
 
215
25
  ```bash
216
- skillboard hook install --workflow daily-workflow --config skillboard.config.yaml --skills skills --out .skillboard/hooks/daily-workflow-guard.sh --dry-run --json
217
- skillboard hook install --workflow daily-workflow --config skillboard.config.yaml --skills skills --out .skillboard/hooks/daily-workflow-guard.sh
26
+ skillboard brief --intent "<request>" --agent codex --json
27
+ skillboard guard use <skill-id> --agent codex --json
218
28
  ```
219
29
 
220
- For direct manual hook installation, inspect the JSON `planned.preview.shell`
221
- before an operator materializes the matching non-dry-run hook command. Generated
222
- hooks pin the install-time SkillBoard command, config, skills root, and workflow;
223
- set those values with hook install options such as `--skillboard-bin`, not with
224
- runtime environment overrides.
225
-
226
- ## 4. Enable, Disable, Or Prefer
227
-
228
- AI/automation/operator details:
30
+ The guard allows an enabled skill only when generated inventory records it on
31
+ the selected agent. Preference ranks matching candidates and never changes
32
+ availability. Allowed use does not require another confirmation.
229
33
 
230
- Enable the skill only for the workflow that should see it:
34
+ ## 3. Change one decision
231
35
 
232
36
  ```bash
233
- skillboard activate user.helper \
234
- --workflow daily-workflow \
235
- --config skillboard.config.yaml \
236
- --skills skills
37
+ skillboard skill enable <skill-id>
38
+ skillboard skill disable <skill-id>
39
+ skillboard skill share <skill-id>
40
+ skillboard skill unshare <skill-id>
41
+ skillboard skill preference <skill-id> --intent <term>[,<term>] --priority <integer>
42
+ skillboard skill forget <skill-id>
237
43
  ```
238
44
 
239
- If you already used `skillboard add workflow ... --skill user.helper`, this
240
- manual activation step is not needed for direct user invocation.
45
+ Share copies the complete skill directory to SkillBoard's managed shared source
46
+ and compatible agent roots while preserving the owner copy. Unshare removes only
47
+ copies managed by SkillBoard. It never deletes agent-owned originals.
241
48
 
242
- Block it from a workflow without deleting the declaration or file:
49
+ For AI mediation, read `brief --include-actions --json`, confirm one current
50
+ action, run `skillboard apply-action <action-id> --agent <agent> --yes --json`, and reread the
51
+ returned post-apply brief. Cached action ids are not reused.
243
52
 
244
- ```bash
245
- skillboard block user.helper \
246
- --workflow daily-workflow \
247
- --config skillboard.config.yaml \
248
- --skills skills
249
- ```
250
-
251
- Prefer it for a capability when the workflow should depend on a role rather than
252
- a raw skill id:
253
-
254
- ```bash
255
- skillboard prefer user.helper \
256
- --workflow daily-workflow \
257
- --capability task-review \
258
- --config skillboard.config.yaml \
259
- --skills skills
260
- ```
53
+ ## 4. Ask after, then remember
261
54
 
262
- ## 5. Remove Governance Without Deleting User Files
55
+ When a route was ambiguous, the agent finishes first. It may then ask whether to
56
+ remember an intent preference. Preference affects ordering only; it does not
57
+ share, enable, disable, install, or remove a skill.
263
58
 
264
- AI/automation/operator details:
59
+ ## 5. Audit separately
265
60
 
266
- First try the safe remove:
61
+ Source and provenance are optional audit metadata and never determine
62
+ availability. Import is trust-neutral: valid discoveries default to enabled and
63
+ agent-local. Runtime and action authorization are outside SkillBoard's scope and
64
+ remain with the agent or harness.
267
65
 
268
- ```bash
269
- skillboard remove skill user.helper \
270
- --config skillboard.config.yaml \
271
- --skills skills
272
- ```
66
+ ## 6. Remove a skill cleanly
273
67
 
274
- If workflows, capabilities, or install units still reference the skill, the
275
- command refuses to remove it and prints the references. After reviewing the
276
- impact, remove the config declaration and references:
68
+ Remove the original skill with the agent, plugin, or package manager that owns
69
+ it. Then refresh observations and remove only its stale SkillBoard policy:
277
70
 
278
71
  ```bash
279
- skillboard remove skill user.helper \
280
- --config skillboard.config.yaml \
281
- --skills skills \
282
- --force \
283
- --dry-run
284
-
285
- skillboard remove skill user.helper \
286
- --config skillboard.config.yaml \
287
- --skills skills \
288
- --force
72
+ skillboard inventory refresh
73
+ skillboard skill forget <skill-id> --dry-run
74
+ skillboard skill forget <skill-id>
289
75
  ```
290
76
 
291
- This removes SkillBoard policy references only and leaves
292
- `skills/user-helper/SKILL.md` in place.
293
-
294
- ## 6. Stop Using SkillBoard Safely
295
-
296
- AI/automation/operator details:
297
-
298
- Remove managed user-agent guidance first if global install/setup made agents
299
- recognize SkillBoard and you want that agent-layer footprint gone:
300
-
301
- ```bash
302
- skillboard uninstall --agent-layer --dry-run
303
- skillboard uninstall --agent-layer
304
- ```
77
+ Forget refuses a skill that is still observed or has `shared: true`. Unshare it
78
+ before removing the owner copy. Forget never deletes a `SKILL.md` or directory.
305
79
 
306
- This removes only managed `skillboard/SKILL.md` guidance files containing the
307
- SkillBoard agent integration marker. It preserves other agent skills and
308
- user-authored `skillboard` skills.
80
+ ## 7. Uninstall SkillBoard cleanly
309
81
 
310
82
  ```bash
311
- skillboard uninstall --dry-run
312
- skillboard uninstall
83
+ skillboard uninstall --user --dry-run
84
+ skillboard uninstall --user --yes
85
+ npm uninstall -g agent-skillboard
313
86
  ```
314
87
 
315
- Uninstall removes generated bridge blocks and unchanged helper files. It
316
- also removes `skillboard.config.yaml` and the `.skillboard/` project state by
317
- default while preserving local `skills/` files and user-authored non-SkillBoard
318
- content in bridge files.
88
+ The preview lists every marker-owned shared copy, managed guidance file, and
89
+ home state path. Apply requires `--yes`, preserves agent-owned and unmanaged
90
+ skills, and does not touch project files.
319
91
 
320
- If you want to keep project SkillBoard policy and bridge guidance, opt into
321
- settings preservation explicitly:
92
+ ## 8. Migrate version 1
322
93
 
323
94
  ```bash
324
- skillboard uninstall --keep-settings --dry-run
325
- skillboard uninstall --keep-settings
95
+ skillboard migrate v2 --config <path> --json
96
+ skillboard migrate v2 --config <path> --yes --json
97
+ skillboard migrate v2 --config <path> --rollback <backup> --json
326
98
  ```
327
99
 
328
- `--purge` is still accepted as an explicit spelling for the default clean
329
- project removal. Default removal and `--purge` both discard the current
330
- SkillBoard config even if it contains imported skills or workflow edits, remove
331
- generated dashboard and impact reports, and remove the entire `.skillboard/`
332
- project state directory, including hooks, source caches, rollout logs, variant
333
- snapshots, and profiles. Local `skills/` files stay in place.
100
+ Version 1 remains readable but immutable for the v0.3.x one-release read-only
101
+ window. v0.4.0 removes the v1 reader. No ordinary command migrates implicitly.