agent-skillboard 0.2.18 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/CHANGELOG.md +85 -0
  2. package/README.md +161 -255
  3. package/bin/postinstall.mjs +2 -1
  4. package/docs/adapters.md +37 -113
  5. package/docs/ai-skill-routing-goal.md +41 -108
  6. package/docs/capabilities.md +17 -104
  7. package/docs/install.md +70 -473
  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 +133 -362
  12. package/docs/rollout-runbook.md +23 -25
  13. package/docs/routing.md +23 -90
  14. package/docs/user-flow.md +68 -279
  15. package/docs/value-proof.md +23 -181
  16. package/docs/variant-lifecycle.md +47 -67
  17. package/docs/versioning.md +49 -269
  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 +96 -13
  29. package/src/agent-integration-content.mjs +21 -11
  30. package/src/agent-integration-files.mjs +1 -1
  31. package/src/agent-integration-home.mjs +14 -1
  32. package/src/agent-inventory-platforms.mjs +21 -8
  33. package/src/agent-inventory.mjs +44 -16
  34. package/src/agent-root-registry.mjs +127 -0
  35. package/src/agent-skill-import.mjs +2 -2
  36. package/src/agent-skill-roots.mjs +70 -13
  37. package/src/audit-paths.mjs +42 -0
  38. package/src/brief-cli.mjs +3 -2
  39. package/src/brief-renderer.mjs +1 -0
  40. package/src/cli.mjs +521 -235
  41. package/src/compatibility.mjs +24 -0
  42. package/src/control/can-use-guard.mjs +21 -1
  43. package/src/control/config-write.mjs +32 -2
  44. package/src/control/skill-crud.mjs +5 -0
  45. package/src/control/v2-guard.mjs +175 -0
  46. package/src/control/v2-skill-crud.mjs +32 -0
  47. package/src/control/v2-skill-forget.mjs +38 -0
  48. package/src/control/variant-status.mjs +47 -1
  49. package/src/control.mjs +55 -0
  50. package/src/doctor.mjs +71 -5
  51. package/src/domain/v2-policy.mjs +111 -0
  52. package/src/hook-plan.mjs +33 -3
  53. package/src/impact.mjs +52 -29
  54. package/src/index.mjs +25 -1
  55. package/src/init.mjs +50 -34
  56. package/src/install-health.mjs +177 -0
  57. package/src/inventory-install-units.mjs +63 -0
  58. package/src/inventory-json.mjs +279 -0
  59. package/src/inventory-refresh.mjs +168 -19
  60. package/src/lifecycle-cli.mjs +40 -12
  61. package/src/lifecycle-content.mjs +52 -67
  62. package/src/migration/v1-to-v2.mjs +212 -0
  63. package/src/migration/v2-files.mjs +211 -0
  64. package/src/migration/v2-journal.mjs +169 -0
  65. package/src/migration/v2-projection.mjs +108 -0
  66. package/src/migration/v2-transaction.mjs +205 -0
  67. package/src/policy.mjs +3 -0
  68. package/src/reconcile.mjs +139 -111
  69. package/src/report.mjs +168 -148
  70. package/src/review.mjs +2 -0
  71. package/src/route-advisory.mjs +47 -2
  72. package/src/route-selection.mjs +38 -2
  73. package/src/route.mjs +62 -2
  74. package/src/shared-skill-reconcile.mjs +97 -0
  75. package/src/shared-skill.mjs +325 -0
  76. package/src/source-digest.mjs +42 -0
  77. package/src/source-profiles.mjs +171 -144
  78. package/src/source-verification.mjs +32 -48
  79. package/src/uninstall.mjs +22 -0
  80. package/src/user-state-paths.mjs +19 -0
  81. package/src/user-uninstall.mjs +161 -0
  82. package/src/workspace.mjs +119 -79
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,325 +1,114 @@
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:
7
+ ## 1. Install and ask normally
26
8
 
27
9
  ```bash
28
- skillboard import-skill --from codex --to opencode --skill <skill> --json
10
+ npm install -g agent-skillboard
29
11
  ```
30
12
 
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. Start From Agent-Layer Setup
42
-
43
- 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:
44
16
 
45
17
  ```bash
46
- skillboard setup --agent codex,claude,opencode,hermes --yes
18
+ skillboard setup --yes --agent codex
47
19
  ```
48
20
 
49
- Package install and `skillboard setup` write user-agent guidance only. They do
50
- not create `skillboard.config.yaml`, `.skillboard/`, `AGENTS.md`, or
51
- `CLAUDE.md` in projects. `skillboard init` is deprecated project-local policy
52
- bootstrap and is not needed for normal use; use it only when maintaining an
53
- existing workspace that intentionally keeps local SkillBoard policy files. Use
54
- `skillboard doctor --strict` only for an existing policy workspace when
55
- review-needed safe-mode warnings should fail automation.
56
-
57
- When the user asks the agent what it can use, the agent should read the current
58
- brief with `skillboard brief --json` first and answer from the brief rather than
59
- reading skill files directly. The user-facing text output uses sections such as
60
- "What your AI can use now", "Needs your decision", and "Blocked for safety";
61
- text briefs include previewable action cards by default, while the JSON form
62
- keeps action cards opt-in. For large skill sets, the default text brief stays
63
- compact: counts, top categories, next safe action, short previews per section,
64
- and short action summaries. Use `skillboard brief --verbose` when an operator
65
- needs every skill and full copyable command details. Those action cards are
66
- suggestions only: the agent should pick one current action id from the brief,
67
- request confirmation before applying risk-bearing changes, then run
68
- `skillboard apply-action <action-id> --config skillboard.config.yaml --skills skills --yes --json`
69
- with `--workflow <name>` when a workflow is selected. The agent should read the
70
- returned post-apply brief before making the next availability claim.
71
- `apply-action` re-resolves the current brief and refuses stale action ids instead
72
- of replaying cached action-card shell text.
73
-
74
- When a normal request leaves skill choice ambiguous, several skills overlap,
75
- workflow priority matters, or the user asks for a SkillBoard or skill decision,
76
- the agent can keep the same brief flow and include the user request as intent:
21
+ If an agent is installed later, rerun the same command for that agent. Setup
22
+ discovers standard homes and Hermes profiles, installs guidance, refreshes
23
+ inventory, and backfills only skills the user already selected with
24
+ `shared: true`. For a custom location:
77
25
 
78
26
  ```bash
79
- skillboard brief --intent "write tests before implementation" --workflow daily-workflow --config skillboard.config.yaml --skills skills --json
27
+ skillboard setup --agent hermes --skill-root ~/.hermes/profiles/work/skills --yes
80
28
  ```
81
29
 
82
- The returned `assistant_guidance.route` maps the request to a declared workflow
83
- capability or a workflow-bound skill metadata match, returns the recommended
84
- skill and fallbacks, and includes `match_source`, `matched_terms`,
85
- `recommendation_reason`, `route_candidates`, `overlap_resolution`,
86
- `policy_memory`,
87
- `post_use_policy_suggestion`, and the `skillboard guard use ...` command that
88
- still needs to pass immediately before invocation. `overlap_resolution`
89
- summarizes permissive routing when several allowed skills match.
90
- `route_candidates` is the per-skill decision trace: it shows which matching
91
- skill was selected, which candidates were denied, and the guard reason when a
92
- preferred skill was skipped for an allowed fallback.
93
- `policy_memory` appears when remembered or configured workflow policy selected
94
- the routed skill while other allowed skills were also available; the agent
95
- should mention that after completion so the user understands the prior choice
96
- shaped the route.
97
- `post_use_policy_suggestion` is the ask-after-use hook: if it is present, the
98
- agent should use the allowed routed skill first, then ask after completion
99
- whether to remember the suggested preference. Metadata matching can
100
- use declared skill id, path, category, and `SKILL.md` frontmatter
101
- name/description; it does not semantically rank raw skill bodies. If a
102
- recommended skill is already allowed, the agent should disclose it at the start
103
- and completion rather than ask for another approval. If the user explicitly
104
- requests a specific already-allowed skill, the agent should honor that request
105
- after guard use instead of rerouting away solely because another skill also
106
- matches. If no capability or workflow-bound skill matches, the agent should ask
107
- a clarifying question instead of guessing from raw `SKILL.md` text. Operators can still call
108
- `skillboard route ...` directly when they only need the recommendation payload.
30
+ The registered root survives later setup and package-update runs. No project
31
+ init, profile-specific policy layer, or new approval per already-shared skill is
32
+ introduced. Unmanaged collisions are preserved and reported.
109
33
 
110
- Run this again after installing agent packages, plugins, workflow bundles, or
111
- harnesses:
112
-
113
- ```bash
114
- skillboard inventory refresh --dry-run
115
- skillboard inventory refresh
116
- ```
117
-
118
- ## 2. Add A User-Owned Skill
119
-
120
- AI/automation/operator details:
121
-
122
- Create the skill under the project `skills/` directory:
123
-
124
- ```bash
125
- mkdir -p skills/user-helper
126
- $EDITOR skills/user-helper/SKILL.md
127
- ```
34
+ ## 2. Observe and route
128
35
 
129
- Register it without making it callable yet:
36
+ From any directory, the agent reads:
130
37
 
131
38
  ```bash
132
- skillboard add skill user.helper \
133
- --path user-helper \
134
- --config skillboard.config.yaml \
135
- --skills skills \
136
- --dry-run
137
-
138
- skillboard add skill user.helper \
139
- --path user-helper \
140
- --config skillboard.config.yaml \
141
- --skills skills
39
+ skillboard brief --intent "<request>" --agent codex --json
40
+ skillboard guard use <skill-id> --agent codex --json
142
41
  ```
143
42
 
144
- The dry run reports semantic YAML changes and leaves the config untouched. The
145
- real command adds the skill as a direct user-owned `candidate` by default.
43
+ The guard allows an enabled skill only when generated inventory records it on
44
+ the selected agent. Preference ranks matching candidates and never changes
45
+ availability. Allowed use does not require another confirmation.
146
46
 
147
- Create a workflow or harness for the skill without hand-editing YAML:
47
+ ## 3. Change one decision
148
48
 
149
49
  ```bash
150
- skillboard add harness codex \
151
- --config skillboard.config.yaml \
152
- --skills skills
153
-
154
- skillboard add workflow daily-workflow \
155
- --harness codex \
156
- --skill user.helper \
157
- --config skillboard.config.yaml \
158
- --skills skills
50
+ skillboard skill enable <skill-id>
51
+ skillboard skill disable <skill-id>
52
+ skillboard skill share <skill-id>
53
+ skillboard skill unshare <skill-id>
54
+ skillboard skill preference <skill-id> --intent <term>[,<term>] --priority <integer>
55
+ skillboard skill forget <skill-id>
159
56
  ```
160
57
 
161
- When `add workflow` attaches a `candidate` / `manual-only` skill, it promotes the
162
- skill to `active` with `invocation: manual-only` for that workflow. It still
163
- does not grant automatic model invocation.
164
-
165
- ## 3. Inspect Influence Before Use
58
+ Share copies the complete skill directory to SkillBoard's managed shared source
59
+ and compatible agent roots while preserving the owner copy. Unshare removes only
60
+ copies managed by SkillBoard. It never deletes agent-owned originals.
166
61
 
167
- AI/automation/operator details:
62
+ For AI mediation, read `brief --include-actions --json`, confirm one current
63
+ action, run `skillboard apply-action <action-id> --agent <agent> --yes --json`, and reread the
64
+ returned post-apply brief. Cached action ids are not reused.
168
65
 
169
- ```bash
170
- skillboard explain user.helper \
171
- --config skillboard.config.yaml \
172
- --skills skills
66
+ ## 4. Ask after, then remember
173
67
 
174
- skillboard can-use user.helper \
175
- --workflow daily-workflow \
176
- --config skillboard.config.yaml \
177
- --skills skills
68
+ When a route was ambiguous, the agent finishes first. It may then ask whether to
69
+ remember an intent preference. Preference affects ordering only; it does not
70
+ share, enable, disable, install, or remove a skill.
178
71
 
179
- skillboard impact disable user.helper \
180
- --config skillboard.config.yaml \
181
- --skills skills \
182
- --out .skillboard/reports/user-helper-impact.md
183
- ```
72
+ ## 5. Audit separately
184
73
 
185
- `explain` shows source class, trust, owner install unit, workflow roles, and
186
- capability roles. `can-use` is the machine-readable gate for agents. `impact`
187
- shows which workflows and required outputs would be affected before disabling or
188
- removing a skill.
74
+ Source and provenance are optional audit metadata and never determine
75
+ availability. Import is trust-neutral: valid discoveries default to enabled and
76
+ agent-local. Runtime and action authorization are outside SkillBoard's scope and
77
+ remain with the agent or harness.
189
78
 
190
- For an actual invocation, `brief` is not the final permission check. Agents
191
- should run `skillboard guard use ...` automatically immediately before calling a
192
- skill so state changes made after the brief cannot slip through. A passing guard
193
- does not require another user prompt; the agent should disclose the skill use at
194
- the start and in the final result. That disclosure is an audit trace, not a
195
- permission prompt.
79
+ ## 6. Remove a skill cleanly
196
80
 
197
- When wiring a guard hook from an action card, keep `apply-action` as the
198
- action-card primary flow:
81
+ Remove the original skill with the agent, plugin, or package manager that owns
82
+ it. Then refresh observations and remove only its stale SkillBoard policy:
199
83
 
200
84
  ```bash
201
- skillboard apply-action <action-id> --workflow daily-workflow --config skillboard.config.yaml --skills skills --yes --json
202
- ```
203
-
204
- The raw hook commands are underlying manual operator detail for previewing and
205
- materializing an executable guard hook outside the action-card control loop:
206
-
207
- ```bash
208
- skillboard hook install --workflow daily-workflow --config skillboard.config.yaml --skills skills --out .skillboard/hooks/daily-workflow-guard.sh --dry-run --json
209
- skillboard hook install --workflow daily-workflow --config skillboard.config.yaml --skills skills --out .skillboard/hooks/daily-workflow-guard.sh
210
- ```
211
-
212
- For direct manual hook installation, inspect the JSON `planned.preview.shell`
213
- before an operator materializes the matching non-dry-run hook command. Generated
214
- hooks pin the install-time SkillBoard command, config, skills root, and workflow;
215
- set those values with hook install options such as `--skillboard-bin`, not with
216
- runtime environment overrides.
217
-
218
- ## 4. Enable, Disable, Or Prefer
219
-
220
- AI/automation/operator details:
221
-
222
- Enable the skill only for the workflow that should see it:
223
-
224
- ```bash
225
- skillboard activate user.helper \
226
- --workflow daily-workflow \
227
- --config skillboard.config.yaml \
228
- --skills skills
229
- ```
230
-
231
- If you already used `skillboard add workflow ... --skill user.helper`, this
232
- manual activation step is not needed for direct user invocation.
233
-
234
- Block it from a workflow without deleting the declaration or file:
235
-
236
- ```bash
237
- skillboard block user.helper \
238
- --workflow daily-workflow \
239
- --config skillboard.config.yaml \
240
- --skills skills
241
- ```
242
-
243
- Prefer it for a capability when the workflow should depend on a role rather than
244
- a raw skill id:
245
-
246
- ```bash
247
- skillboard prefer user.helper \
248
- --workflow daily-workflow \
249
- --capability task-review \
250
- --config skillboard.config.yaml \
251
- --skills skills
252
- ```
253
-
254
- ## 5. Remove Governance Without Deleting User Files
255
-
256
- AI/automation/operator details:
257
-
258
- First try the safe remove:
259
-
260
- ```bash
261
- skillboard remove skill user.helper \
262
- --config skillboard.config.yaml \
263
- --skills skills
264
- ```
265
-
266
- If workflows, capabilities, or install units still reference the skill, the
267
- command refuses to remove it and prints the references. After reviewing the
268
- impact, remove the config declaration and references:
269
-
270
- ```bash
271
- skillboard remove skill user.helper \
272
- --config skillboard.config.yaml \
273
- --skills skills \
274
- --force \
275
- --dry-run
276
-
277
- skillboard remove skill user.helper \
278
- --config skillboard.config.yaml \
279
- --skills skills \
280
- --force
85
+ skillboard inventory refresh
86
+ skillboard skill forget <skill-id> --dry-run
87
+ skillboard skill forget <skill-id>
281
88
  ```
282
89
 
283
- This removes SkillBoard policy references only and leaves
284
- `skills/user-helper/SKILL.md` in place.
285
-
286
- ## 6. Stop Using SkillBoard Safely
287
-
288
- AI/automation/operator details:
289
-
290
- Remove managed user-agent guidance first if global install/setup made agents
291
- recognize SkillBoard and you want that agent-layer footprint gone:
292
-
293
- ```bash
294
- skillboard uninstall --agent-layer --dry-run
295
- skillboard uninstall --agent-layer
296
- ```
90
+ Forget refuses a skill that is still observed or has `shared: true`. Unshare it
91
+ before removing the owner copy. Forget never deletes a `SKILL.md` or directory.
297
92
 
298
- This removes only managed `skillboard/SKILL.md` guidance files containing the
299
- SkillBoard agent integration marker. It preserves other agent skills and
300
- user-authored `skillboard` skills.
93
+ ## 7. Uninstall SkillBoard cleanly
301
94
 
302
95
  ```bash
303
- skillboard uninstall --dry-run
304
- skillboard uninstall
96
+ skillboard uninstall --user --dry-run
97
+ skillboard uninstall --user --yes
98
+ npm uninstall -g agent-skillboard
305
99
  ```
306
100
 
307
- Uninstall removes generated bridge blocks and unchanged helper files. It
308
- also removes `skillboard.config.yaml` and the `.skillboard/` project state by
309
- default while preserving local `skills/` files and user-authored non-SkillBoard
310
- content in bridge files.
101
+ The preview lists every marker-owned shared copy, managed guidance file, and
102
+ home state path. Apply requires `--yes`, preserves agent-owned and unmanaged
103
+ skills, and does not touch project files.
311
104
 
312
- If you want to keep project SkillBoard policy and bridge guidance, opt into
313
- settings preservation explicitly:
105
+ ## 8. Migrate version 1
314
106
 
315
107
  ```bash
316
- skillboard uninstall --keep-settings --dry-run
317
- skillboard uninstall --keep-settings
108
+ skillboard migrate v2 --config <path> --json
109
+ skillboard migrate v2 --config <path> --yes --json
110
+ skillboard migrate v2 --config <path> --rollback <backup> --json
318
111
  ```
319
112
 
320
- `--purge` is still accepted as an explicit spelling for the default clean
321
- project removal. Default removal and `--purge` both discard the current
322
- SkillBoard config even if it contains imported skills or workflow edits, remove
323
- generated dashboard and impact reports, and remove the entire `.skillboard/`
324
- project state directory, including hooks, source caches, rollout logs, variant
325
- snapshots, and profiles. Local `skills/` files stay in place.
113
+ Version 1 remains readable but immutable for the v0.3.x one-release read-only
114
+ window. v0.4.0 removes the v1 reader. No ordinary command migrates implicitly.