agent-skillboard 0.1.2 → 0.2.2

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 (63) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +159 -630
  3. package/docs/adapters.md +96 -96
  4. package/docs/ai-skill-routing-goal.md +112 -0
  5. package/docs/capabilities.md +6 -0
  6. package/docs/install.md +172 -114
  7. package/docs/policy-model.md +266 -214
  8. package/docs/positioning.md +94 -94
  9. package/docs/reference.md +349 -0
  10. package/docs/routing.md +85 -0
  11. package/docs/user-flow.md +79 -17
  12. package/docs/value-proof.md +194 -0
  13. package/docs/variant-lifecycle.md +86 -0
  14. package/docs/versioning.md +154 -138
  15. package/examples/multi-source-skills/anthropic/docx/SKILL.md +8 -8
  16. package/examples/multi-source-skills/anthropic/skill-creator/SKILL.md +8 -8
  17. package/examples/multi-source-skills/matt/grill-me/SKILL.md +8 -8
  18. package/examples/multi-source-skills/matt/tdd/SKILL.md +8 -8
  19. package/examples/multi-source-skills/omo/review-work/SKILL.md +8 -8
  20. package/examples/multi-source-skills/omo/ulw-plan/SKILL.md +8 -8
  21. package/examples/multi-source-skills/private/tdd-work-continuity/SKILL.md +8 -8
  22. package/examples/multi-source-skills/private/workflow-router/SKILL.md +8 -8
  23. package/examples/multi-source-skills/wshobson/python-testing/SKILL.md +8 -8
  24. package/examples/multi-source-skills/wshobson/security-review/SKILL.md +8 -8
  25. package/examples/skillboard.config.yaml +8 -3
  26. package/examples/skills/grill-me/SKILL.md +9 -9
  27. package/examples/skills/grill-with-docs/SKILL.md +9 -9
  28. package/examples/skills/requirement-intake/SKILL.md +9 -9
  29. package/examples/skills/tdd/SKILL.md +8 -8
  30. package/package.json +6 -3
  31. package/src/advisor/actions.mjs +25 -3
  32. package/src/advisor/guidance.mjs +232 -0
  33. package/src/advisor/schema.mjs +2 -0
  34. package/src/advisor/skills.mjs +2 -0
  35. package/src/advisor/trust-policy.mjs +5 -3
  36. package/src/advisor.mjs +36 -7
  37. package/src/brief-cli.mjs +6 -5
  38. package/src/brief-renderer.mjs +225 -8
  39. package/src/cli.mjs +574 -27
  40. package/src/config-helpers.mjs +34 -18
  41. package/src/conflicts.mjs +70 -0
  42. package/src/control/can-use-guard.mjs +8 -3
  43. package/src/control/skill-crud.mjs +142 -0
  44. package/src/control/skill-variants.mjs +221 -0
  45. package/src/control/source-trust.mjs +1 -0
  46. package/src/control/variant-files.mjs +265 -0
  47. package/src/control/variant-lifecycle-config.mjs +156 -0
  48. package/src/control/variant-reset.mjs +171 -0
  49. package/src/control/variant-status.mjs +75 -0
  50. package/src/control.mjs +13 -1
  51. package/src/domain/rules/skills.mjs +60 -0
  52. package/src/domain/rules/workflows.mjs +13 -0
  53. package/src/hook-plan.mjs +6 -6
  54. package/src/impact.mjs +21 -12
  55. package/src/index.mjs +13 -1
  56. package/src/lifecycle-cli.mjs +19 -8
  57. package/src/lifecycle-content.mjs +34 -24
  58. package/src/route.mjs +537 -0
  59. package/src/source-verification.mjs +7 -3
  60. package/src/workspace.mjs +141 -43
  61. package/tsconfig.lsp.json +1 -1
  62. package/docs/plans/20260625-080025-skillboard-mvp-review.md +0 -189
  63. package/docs/plans/README.md +0 -20
package/docs/install.md CHANGED
@@ -1,34 +1,52 @@
1
- # Install And Bootstrap
2
-
3
- SkillBoard sits one layer above skill installers, plugin marketplaces, harness
4
- bundles, and local skill repositories.
5
-
1
+ # Install And Bootstrap
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 questions like "what skills can you use in this
7
+ project?" or "can you make this reviewed skill available for the current
8
+ workflow?" The AI runs SkillBoard behind the scenes: it reads the current brief,
9
+ uses one current action id only after confirmation when policy would change, and
10
+ runs the guard automatically before actual skill use. For already-allowed
11
+ skills, the AI should tell you which skill it is about to use and which skill it
12
+ used in the result instead of asking for another approval. That disclosure is an
13
+ audit trace, not a permission prompt. You do not need to memorize the SkillBoard
14
+ command loop.
15
+
6
16
  ## Install From npm
7
17
 
8
- Use npx when you want to bootstrap a project without keeping a global
9
- SkillBoard binary installed:
18
+ Use no-prompt npx package execution when you want to bootstrap a project
19
+ without keeping a global SkillBoard binary installed:
20
+
21
+ AI/automation/operator details:
10
22
 
11
23
  ```bash
12
- npx agent-skillboard init
13
- npx agent-skillboard brief
14
- npx agent-skillboard doctor --summary
24
+ npx --yes --package agent-skillboard skillboard init
25
+ npx --yes --package agent-skillboard skillboard doctor --summary
26
+ npx --yes --package agent-skillboard skillboard brief --workflow <workflow-from-init>
15
27
  ```
16
28
 
17
29
  SkillBoard does not make installed skills automatically callable. It imports
18
30
  trusted local skills as manual-only and keeps runtime/plugin skills quarantined
19
- until reviewed.
31
+ until their source is reviewed. The brief presents unreviewed runtime sources as
32
+ one-time review decisions rather than default block recommendations; after
33
+ review, individual quarantined skills can be activated as manual-only workflow
34
+ skills. When `init` creates or discovers workflows, use one of the workflow names
35
+ it prints for the first brief. If `init` does not print a workflow, run the unscoped `brief` command it prints instead. The explicit package/binary spelling
36
+ avoids an extra npx install prompt and keeps the executable name clear.
20
37
 
21
- In CI or scripts, use the explicit package/binary spelling:
38
+ The equivalent `npm exec` spelling is also no-prompt and works well in scripts:
22
39
 
23
40
  ```bash
24
- npx --yes --package agent-skillboard skillboard init
25
- npx --yes --package agent-skillboard skillboard doctor --summary
26
41
  npm exec --yes --package agent-skillboard -- skillboard init
27
42
  npm exec --yes --package agent-skillboard -- skillboard doctor --summary
43
+ npm exec --yes --package agent-skillboard -- skillboard brief --workflow <workflow-from-init>
28
44
  ```
29
45
 
30
46
  For repeated local use, install the CLI globally:
31
47
 
48
+ AI/automation/operator details:
49
+
32
50
  ```bash
33
51
  npm install -g agent-skillboard
34
52
  skillboard init
@@ -43,10 +61,12 @@ The executable remains `skillboard` even though the npm package name is
43
61
  Use GitHub npx only when you intentionally want the current repository state
44
62
  before the next npm release:
45
63
 
64
+ AI/automation/operator details:
65
+
46
66
  ```bash
47
67
  npx --yes --package github:NyXXiR/skillboard skillboard init
48
- npx --yes --package github:NyXXiR/skillboard skillboard brief
49
68
  npx --yes --package github:NyXXiR/skillboard skillboard doctor --summary
69
+ npx --yes --package github:NyXXiR/skillboard skillboard brief --workflow <workflow-from-init>
50
70
  ```
51
71
 
52
72
  The equivalent `npm exec` spelling is explicit about the package and binary:
@@ -54,35 +74,38 @@ The equivalent `npm exec` spelling is explicit about the package and binary:
54
74
  ```bash
55
75
  npm exec --yes --package github:NyXXiR/skillboard -- skillboard init
56
76
  npm exec --yes --package github:NyXXiR/skillboard -- skillboard doctor --summary
77
+ npm exec --yes --package github:NyXXiR/skillboard -- skillboard brief --workflow <workflow-from-init>
57
78
  ```
58
79
 
59
80
  ## Install From A Clone
60
81
 
61
82
  Use a clone when developing SkillBoard itself or testing unreleased changes:
62
83
 
84
+ AI/automation/operator details:
85
+
63
86
  ```bash
64
87
  git clone https://github.com/NyXXiR/skillboard.git
65
88
  cd skillboard
66
89
  npm install
67
90
  node bin/skillboard.mjs init --dir /path/to/your/project
68
- node bin/skillboard.mjs brief --dir /path/to/your/project
69
91
  node bin/skillboard.mjs doctor --dir /path/to/your/project --summary
92
+ node bin/skillboard.mjs brief --dir /path/to/your/project --workflow <workflow-from-init>
70
93
  ```
71
-
72
- ## What init Does
73
-
94
+
95
+ ## What init Does
96
+
74
97
  `skillboard init` is the safe mutating step. npm installation itself does not
75
98
  modify a project, but init creates the files that let agents discover the control
76
99
  plane without a manual prompt and inventories already installed local agent
77
100
  skills.
78
-
79
- Created project files:
80
-
81
- - `skillboard.config.yaml`: desired state for workflows, capabilities, skills,
82
- harnesses, and install units.
83
- - `skills/`: local skill root.
84
- - `.skillboard/reports/`: generated dashboard and reconcile output location.
85
- - `.skillboard/profiles/`: project-specific source profile location.
101
+
102
+ Created project files:
103
+
104
+ - `skillboard.config.yaml`: desired state for workflows, capabilities, skills,
105
+ harnesses, and install units.
106
+ - `skills/`: local skill root.
107
+ - `.skillboard/reports/`: generated dashboard and reconcile output location.
108
+ - `.skillboard/profiles/`: project-specific source profile location.
86
109
  - `AGENTS.md`: Codex-style project instruction bridge.
87
110
  - `CLAUDE.md`: Claude Code project instruction bridge.
88
111
 
@@ -97,12 +120,16 @@ manual-only` and attached to a generated local manual workflow when the project
97
120
  has no workflow metadata yet. That lets a first-time user keep their existing
98
121
  manual skills usable through `skillboard can-use` and guard checks without
99
122
  granting automatic model invocation or creating legacy-state warning noise.
100
- System, plugin, and other runtime-supplied skills are written with `status: quarantined` and
101
- `invocation: blocked`. Plugin hooks, MCP servers, commands, and modified config files are
102
- recorded on the owning install unit when manifest metadata exposes them, which
103
- lets policy checks flag high-risk runtime extensions without flattening them
104
- into loose skills. Use `--no-scan-installed` for a scaffold-only bootstrap, or
105
- `--scan-root <dir>[,<dir>]` to add server-specific skill roots during bootstrap.
123
+ System, plugin, and other runtime-supplied skills are written with `status:
124
+ quarantined` and `invocation: blocked`. Plugin hooks, MCP servers, commands, and
125
+ modified config files are recorded on the owning install unit when manifest
126
+ metadata exposes them, which lets policy checks flag high-risk runtime
127
+ extensions without flattening them into loose skills. After the owning source is
128
+ reviewed, action cards can activate a quarantined runtime skill into a workflow
129
+ as `manual-only`; automatic preference should still be remembered later through
130
+ the normal ask-after-use policy loop. Use `--no-scan-installed` for a
131
+ scaffold-only bootstrap, or `--scan-root <dir>[,<dir>]` to add server-specific
132
+ skill roots during bootstrap.
106
133
 
107
134
  After init, run:
108
135
 
@@ -120,16 +147,30 @@ CI or automation gate. Use `--json` for an agent-readable health payload, or
120
147
  report. `skillboard status` is the same report under a shorter command name.
121
148
 
122
149
  For AI-mediated use, the generated bridge tells agents to answer availability
123
- questions from `skillboard brief --json`, not from memory or from raw
124
- `SKILL.md` bodies. The brief is read-only and organizes the response around
125
- "What your AI can use now", decisions the user can make once, hard safety
126
- blocks, inactive installed skills, and suggested action cards. Text briefs show
127
- action cards by default; JSON keeps them opt-in with `--include-actions`. The
128
- default text brief is compact for large skill sets: it keeps counts, top
129
- categories, the next safe action, short section previews, and short action
130
- summaries. Use `skillboard brief --verbose` when you need the full list or full
131
- copyable command details. Agents should still run `skillboard guard use ...`
132
- immediately before an actual skill invocation.
150
+ questions by reading the current brief with `skillboard brief --json`, not from
151
+ memory or from raw `SKILL.md` bodies. The brief is read-only and organizes the
152
+ response around "What your AI can use now", decisions the user can make once,
153
+ hard safety blocks, inactive installed skills, and suggested action cards. Text
154
+ briefs show action cards by default; JSON keeps them opt-in with
155
+ `--include-actions`. The default text brief is compact for large skill sets: it
156
+ keeps counts, top categories, the next safe action, short section previews, and
157
+ short action summaries. Use `skillboard brief --verbose` when an operator needs
158
+ the full list or full copyable command details. Agents should still run
159
+ `skillboard guard use ...` immediately before an actual skill invocation. A
160
+ passing guard is not a user prompt; the agent should disclose the selected skill
161
+ at the start and completion, and ask only if the guard denies use or a
162
+ policy-changing action is needed.
163
+
164
+ When the user asks which skill fits a task, the bridge tells agents to use
165
+ `skillboard brief --intent <request> --json`, read `assistant_guidance.route`,
166
+ and use `recommended_skill`, `fallback_skills`, `route_candidates`,
167
+ `post_use_policy_suggestion`, and `guard_command` instead of guessing from raw
168
+ skill text. Inspect
169
+ `route_candidates` when several skills match so denied candidates and selected
170
+ fallbacks are clear. If `post_use_policy_suggestion` is present, the agent
171
+ should use the allowed routed skill first, then ask after completion whether to
172
+ remember the suggested policy. If no skill matches, the agent should ask a
173
+ clarifying question before choosing a skill.
133
174
 
134
175
  Action cards are change suggestions. Before an agent applies one that changes
135
176
  policy, trust, hooks, reset state, or skill references, it should request user
@@ -142,7 +183,10 @@ so stale action ids and cached action-card shell text are not replayed.
142
183
  For hook action cards specifically, keep `apply-action` as the action-card
143
184
  primary flow. Raw `skillboard hook install ... --dry-run --json` previews and
144
185
  the matching non-dry-run command are underlying manual detail for operators who
145
- need to inspect or materialize an executable guard hook directly.
186
+ need to inspect or materialize an executable guard hook directly. Generated hooks
187
+ pin the install-time SkillBoard command, config, skills root, and workflow; set
188
+ those values with hook install options such as `--skillboard-bin`, not with
189
+ runtime environment overrides.
146
190
 
147
191
  ## Hermes System Prompt Bridge
148
192
 
@@ -152,20 +196,34 @@ system prompt for the managed project:
152
196
 
153
197
  ```text
154
198
  Use SkillBoard as the source of truth for agent skill availability.
155
- Before answering what skills can be used, run:
156
- skillboard brief --json --dir /path/to/your/project
199
+ Use the workflow generated by init, such as `hermes-codex-local-manual`, or a
200
+ workflow you explicitly created for that Hermes profile.
201
+
202
+ Before answering what skills can be used in that workflow, run:
203
+ skillboard brief --workflow <workflow-name> --json --include-actions --dir /path/to/your/project
204
+
205
+ When the user asks which skill fits a task, run:
206
+ skillboard brief --workflow <workflow-name> --intent <request> --json --dir /path/to/your/project
207
+ Read assistant_guidance.route. Use recommended_skill, fallback_skills,
208
+ route_candidates, post_use_policy_suggestion, and guard_command. Inspect
209
+ route_candidates when several skills match so denied candidates and selected
210
+ fallbacks are clear. If post_use_policy_suggestion is present, use the allowed
211
+ routed skill first, then ask after completion whether to remember the suggested
212
+ policy. If no skill matches, ask a clarifying question before choosing a skill.
157
213
 
158
214
  Do not infer availability from installed SKILL.md files. Immediately before
159
215
  invoking a skill, run:
160
216
  skillboard guard use <skill-id> --workflow <workflow-name> --dir /path/to/your/project
161
217
 
162
- For suggested policy changes, ask the user to approve one current action id,
163
- then run:
164
- skillboard apply-action <action-id> --dir /path/to/your/project --yes --json
165
- ```
218
+ If the guard allows an already-approved skill, do not ask the user for another
219
+ approval. Say at the start: "I will use <skill-id> for this request." Say at
220
+ completion: "I used <skill-id> for this request." Treat that disclosure as an
221
+ audit trace, not a permission prompt.
166
222
 
167
- Use the workflow generated by init, such as `hermes-codex-local-manual`, or a
168
- workflow you explicitly created for that Hermes profile.
223
+ For suggested policy changes, ask the user to approve one current action id from
224
+ the `--include-actions` brief, then run:
225
+ skillboard apply-action <action-id> --workflow <workflow-name> --dir /path/to/your/project --yes --json
226
+ ```
169
227
 
170
228
  After installing a new local agent skill pack, plugin, workflow bundle, or
171
229
  harness, rescan before enabling anything:
@@ -275,24 +333,24 @@ may be wired into local agent/runtime configuration. Combine `--reset-config`,
275
333
  SkillBoard-owned lifecycle scaffolding while preserving local `skills/`.
276
334
 
277
335
  ## Upper-Layer Control
278
-
279
- After installing skill packs or harness bundles, represent them as install
280
- units:
281
-
282
- ```bash
283
- skillboard import \
284
- --profile github.mattpocock.skills \
285
- --source-root /path/to/mattpocock-skills \
286
- --out .skillboard/reports/mattpocock-import.yaml
287
- ```
288
-
289
- The import output is a reviewable YAML fragment. Merge the accepted `skills` and
290
- `install_units` into `skillboard.config.yaml`; imported skills stay inactive
291
- until workflows and policies explicitly use them.
292
-
293
- For a direct but still safe apply path:
294
-
295
- ```bash
336
+
337
+ After installing skill packs or harness bundles, represent them as install
338
+ units:
339
+
340
+ ```bash
341
+ skillboard import \
342
+ --profile github.mattpocock.skills \
343
+ --source-root /path/to/mattpocock-skills \
344
+ --out .skillboard/reports/mattpocock-import.yaml
345
+ ```
346
+
347
+ The import output is a reviewable YAML fragment. Merge the accepted `skills` and
348
+ `install_units` into `skillboard.config.yaml`; imported skills stay inactive
349
+ until workflows and policies explicitly use them.
350
+
351
+ For a direct but still safe apply path:
352
+
353
+ ```bash
296
354
  skillboard import \
297
355
  --profile github.mattpocock.skills \
298
356
  --source-root /path/to/mattpocock-skills \
@@ -320,50 +378,50 @@ skillboard review install-unit github.mattpocock.skills \
320
378
 
321
379
  Automatic invocation remains blocked for unreviewed non-user sources. The user
322
380
  experience should still be a one-time decision queue: review, trust, or block
323
- the install unit once, then revisit only when the source, skill, or workflow
324
- changes.
381
+ the install unit once, activate only the needed quarantined skills as
382
+ manual-only, then revisit only when the source, skill, or workflow changes.
325
383
 
326
384
  ```yaml
327
385
  install_units:
328
- github.mattpocock.skills:
329
- kind: marketplace
330
- source: npx skills@latest add mattpocock/skills
331
- scope: user-global
332
- provided_components:
333
- - skills
334
- components:
335
- skills:
336
- - matt.tdd
337
- ```
338
-
339
- Then link each governed skill back to its owner:
340
-
341
- ```yaml
342
- skills:
343
- matt.tdd:
344
- path: matt/tdd
345
- status: active
346
- invocation: workflow-auto
347
- exposure: exported
348
- owner_install_unit: github.mattpocock.skills
349
- ```
350
-
351
- Run:
352
-
353
- ```bash
354
- skillboard check --config skillboard.config.yaml --skills skills
355
- skillboard dashboard --config skillboard.config.yaml --skills skills --out .skillboard/reports/skill-map.md
356
- ```
357
-
358
- This keeps multiple installed repositories visible as managed units instead of
359
- turning every skill into a global invocation candidate.
360
-
361
- ## Adapter Direction
362
-
363
- Import support should be profile-driven, not hardcoded. A popular source such as
364
- `mattpocock/skills` or `oh-my-openagent` may ship with a built-in source profile,
365
- but that profile should be data that maps repository layout and defaults into the
366
- same install-unit model. Source-specific code should be limited to detector
367
- plugins for layouts that cannot be described declaratively.
368
-
369
- See [adapters.md](adapters.md).
386
+ github.mattpocock.skills:
387
+ kind: marketplace
388
+ source: npx skills@latest add mattpocock/skills
389
+ scope: user-global
390
+ provided_components:
391
+ - skills
392
+ components:
393
+ skills:
394
+ - matt.tdd
395
+ ```
396
+
397
+ Then link each governed skill back to its owner:
398
+
399
+ ```yaml
400
+ skills:
401
+ matt.tdd:
402
+ path: matt/tdd
403
+ status: active
404
+ invocation: workflow-auto
405
+ exposure: exported
406
+ owner_install_unit: github.mattpocock.skills
407
+ ```
408
+
409
+ Run:
410
+
411
+ ```bash
412
+ skillboard check --config skillboard.config.yaml --skills skills
413
+ skillboard dashboard --config skillboard.config.yaml --skills skills --out .skillboard/reports/skill-map.md
414
+ ```
415
+
416
+ This keeps multiple installed repositories visible as managed units instead of
417
+ turning every skill into a global invocation candidate.
418
+
419
+ ## Adapter Direction
420
+
421
+ Import support should be profile-driven, not hardcoded. A popular source such as
422
+ `mattpocock/skills` or `oh-my-openagent` may ship with a built-in source profile,
423
+ but that profile should be data that maps repository layout and defaults into the
424
+ same install-unit model. Source-specific code should be limited to detector
425
+ plugins for layouts that cannot be described declaratively.
426
+
427
+ See [adapters.md](adapters.md).