agent-skillboard 0.1.2 → 0.2.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 (57) hide show
  1. package/README.md +154 -631
  2. package/docs/adapters.md +96 -96
  3. package/docs/ai-skill-routing-goal.md +112 -0
  4. package/docs/capabilities.md +6 -0
  5. package/docs/install.md +155 -105
  6. package/docs/plans/skillboard-variant-lifecycle-handoff.md +56 -0
  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 +75 -16
  12. package/docs/value-proof.md +190 -0
  13. package/docs/variant-lifecycle.md +86 -0
  14. package/docs/versioning.md +149 -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/skills/grill-me/SKILL.md +9 -9
  26. package/examples/skills/grill-with-docs/SKILL.md +9 -9
  27. package/examples/skills/requirement-intake/SKILL.md +9 -9
  28. package/examples/skills/tdd/SKILL.md +8 -8
  29. package/package.json +7 -3
  30. package/src/advisor/guidance.mjs +232 -0
  31. package/src/advisor/schema.mjs +2 -0
  32. package/src/advisor/skills.mjs +2 -0
  33. package/src/advisor.mjs +36 -7
  34. package/src/brief-cli.mjs +6 -5
  35. package/src/brief-renderer.mjs +225 -8
  36. package/src/cli.mjs +574 -27
  37. package/src/config-helpers.mjs +34 -18
  38. package/src/conflicts.mjs +70 -0
  39. package/src/control/can-use-guard.mjs +8 -3
  40. package/src/control/skill-crud.mjs +142 -0
  41. package/src/control/skill-variants.mjs +221 -0
  42. package/src/control/source-trust.mjs +1 -0
  43. package/src/control/variant-files.mjs +265 -0
  44. package/src/control/variant-lifecycle-config.mjs +156 -0
  45. package/src/control/variant-reset.mjs +171 -0
  46. package/src/control/variant-status.mjs +75 -0
  47. package/src/control.mjs +13 -1
  48. package/src/domain/rules/skills.mjs +60 -0
  49. package/src/domain/rules/workflows.mjs +13 -0
  50. package/src/impact.mjs +21 -12
  51. package/src/index.mjs +13 -1
  52. package/src/lifecycle-cli.mjs +18 -7
  53. package/src/lifecycle-content.mjs +29 -22
  54. package/src/route.mjs +537 -0
  55. package/src/source-verification.mjs +7 -3
  56. package/src/workspace.mjs +141 -43
  57. package/tsconfig.lsp.json +1 -1
package/docs/install.md CHANGED
@@ -1,34 +1,51 @@
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 reviewed. When `init` creates or discovers workflows, use one of the
32
+ workflow names it prints for the first brief. If `init` does not print a
33
+ workflow, run the unscoped `brief` command it prints instead. The explicit
34
+ package/binary spelling avoids an extra npx install prompt and keeps the
35
+ executable name clear.
20
36
 
21
- In CI or scripts, use the explicit package/binary spelling:
37
+ The equivalent `npm exec` spelling is also no-prompt and works well in scripts:
22
38
 
23
39
  ```bash
24
- npx --yes --package agent-skillboard skillboard init
25
- npx --yes --package agent-skillboard skillboard doctor --summary
26
40
  npm exec --yes --package agent-skillboard -- skillboard init
27
41
  npm exec --yes --package agent-skillboard -- skillboard doctor --summary
42
+ npm exec --yes --package agent-skillboard -- skillboard brief --workflow <workflow-from-init>
28
43
  ```
29
44
 
30
45
  For repeated local use, install the CLI globally:
31
46
 
47
+ AI/automation/operator details:
48
+
32
49
  ```bash
33
50
  npm install -g agent-skillboard
34
51
  skillboard init
@@ -43,10 +60,12 @@ The executable remains `skillboard` even though the npm package name is
43
60
  Use GitHub npx only when you intentionally want the current repository state
44
61
  before the next npm release:
45
62
 
63
+ AI/automation/operator details:
64
+
46
65
  ```bash
47
66
  npx --yes --package github:NyXXiR/skillboard skillboard init
48
- npx --yes --package github:NyXXiR/skillboard skillboard brief
49
67
  npx --yes --package github:NyXXiR/skillboard skillboard doctor --summary
68
+ npx --yes --package github:NyXXiR/skillboard skillboard brief --workflow <workflow-from-init>
50
69
  ```
51
70
 
52
71
  The equivalent `npm exec` spelling is explicit about the package and binary:
@@ -54,35 +73,38 @@ The equivalent `npm exec` spelling is explicit about the package and binary:
54
73
  ```bash
55
74
  npm exec --yes --package github:NyXXiR/skillboard -- skillboard init
56
75
  npm exec --yes --package github:NyXXiR/skillboard -- skillboard doctor --summary
76
+ npm exec --yes --package github:NyXXiR/skillboard -- skillboard brief --workflow <workflow-from-init>
57
77
  ```
58
78
 
59
79
  ## Install From A Clone
60
80
 
61
81
  Use a clone when developing SkillBoard itself or testing unreleased changes:
62
82
 
83
+ AI/automation/operator details:
84
+
63
85
  ```bash
64
86
  git clone https://github.com/NyXXiR/skillboard.git
65
87
  cd skillboard
66
88
  npm install
67
89
  node bin/skillboard.mjs init --dir /path/to/your/project
68
- node bin/skillboard.mjs brief --dir /path/to/your/project
69
90
  node bin/skillboard.mjs doctor --dir /path/to/your/project --summary
91
+ node bin/skillboard.mjs brief --dir /path/to/your/project --workflow <workflow-from-init>
70
92
  ```
71
-
72
- ## What init Does
73
-
93
+
94
+ ## What init Does
95
+
74
96
  `skillboard init` is the safe mutating step. npm installation itself does not
75
97
  modify a project, but init creates the files that let agents discover the control
76
98
  plane without a manual prompt and inventories already installed local agent
77
99
  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.
100
+
101
+ Created project files:
102
+
103
+ - `skillboard.config.yaml`: desired state for workflows, capabilities, skills,
104
+ harnesses, and install units.
105
+ - `skills/`: local skill root.
106
+ - `.skillboard/reports/`: generated dashboard and reconcile output location.
107
+ - `.skillboard/profiles/`: project-specific source profile location.
86
108
  - `AGENTS.md`: Codex-style project instruction bridge.
87
109
  - `CLAUDE.md`: Claude Code project instruction bridge.
88
110
 
@@ -120,16 +142,30 @@ CI or automation gate. Use `--json` for an agent-readable health payload, or
120
142
  report. `skillboard status` is the same report under a shorter command name.
121
143
 
122
144
  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.
145
+ questions by reading the current brief with `skillboard brief --json`, not from
146
+ memory or from raw `SKILL.md` bodies. The brief is read-only and organizes the
147
+ response around "What your AI can use now", decisions the user can make once,
148
+ hard safety blocks, inactive installed skills, and suggested action cards. Text
149
+ briefs show action cards by default; JSON keeps them opt-in with
150
+ `--include-actions`. The default text brief is compact for large skill sets: it
151
+ keeps counts, top categories, the next safe action, short section previews, and
152
+ short action summaries. Use `skillboard brief --verbose` when an operator needs
153
+ the full list or full copyable command details. Agents should still run
154
+ `skillboard guard use ...` immediately before an actual skill invocation. A
155
+ passing guard is not a user prompt; the agent should disclose the selected skill
156
+ at the start and completion, and ask only if the guard denies use or a
157
+ policy-changing action is needed.
158
+
159
+ When the user asks which skill fits a task, the bridge tells agents to use
160
+ `skillboard brief --intent <request> --json`, read `assistant_guidance.route`,
161
+ and use `recommended_skill`, `fallback_skills`, `route_candidates`,
162
+ `post_use_policy_suggestion`, and `guard_command` instead of guessing from raw
163
+ skill text. Inspect
164
+ `route_candidates` when several skills match so denied candidates and selected
165
+ fallbacks are clear. If `post_use_policy_suggestion` is present, the agent
166
+ should use the allowed routed skill first, then ask after completion whether to
167
+ remember the suggested policy. If no skill matches, the agent should ask a
168
+ clarifying question before choosing a skill.
133
169
 
134
170
  Action cards are change suggestions. Before an agent applies one that changes
135
171
  policy, trust, hooks, reset state, or skill references, it should request user
@@ -152,20 +188,34 @@ system prompt for the managed project:
152
188
 
153
189
  ```text
154
190
  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
191
+ Use the workflow generated by init, such as `hermes-codex-local-manual`, or a
192
+ workflow you explicitly created for that Hermes profile.
193
+
194
+ Before answering what skills can be used in that workflow, run:
195
+ skillboard brief --workflow <workflow-name> --json --include-actions --dir /path/to/your/project
196
+
197
+ When the user asks which skill fits a task, run:
198
+ skillboard brief --workflow <workflow-name> --intent <request> --json --dir /path/to/your/project
199
+ Read assistant_guidance.route. Use recommended_skill, fallback_skills,
200
+ route_candidates, post_use_policy_suggestion, and guard_command. Inspect
201
+ route_candidates when several skills match so denied candidates and selected
202
+ fallbacks are clear. If post_use_policy_suggestion is present, use the allowed
203
+ routed skill first, then ask after completion whether to remember the suggested
204
+ policy. If no skill matches, ask a clarifying question before choosing a skill.
157
205
 
158
206
  Do not infer availability from installed SKILL.md files. Immediately before
159
207
  invoking a skill, run:
160
208
  skillboard guard use <skill-id> --workflow <workflow-name> --dir /path/to/your/project
161
209
 
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
- ```
210
+ If the guard allows an already-approved skill, do not ask the user for another
211
+ approval. Say at the start: "I will use <skill-id> for this request." Say at
212
+ completion: "I used <skill-id> for this request." Treat that disclosure as an
213
+ audit trace, not a permission prompt.
166
214
 
167
- Use the workflow generated by init, such as `hermes-codex-local-manual`, or a
168
- workflow you explicitly created for that Hermes profile.
215
+ For suggested policy changes, ask the user to approve one current action id from
216
+ the `--include-actions` brief, then run:
217
+ skillboard apply-action <action-id> --workflow <workflow-name> --dir /path/to/your/project --yes --json
218
+ ```
169
219
 
170
220
  After installing a new local agent skill pack, plugin, workflow bundle, or
171
221
  harness, rescan before enabling anything:
@@ -275,24 +325,24 @@ may be wired into local agent/runtime configuration. Combine `--reset-config`,
275
325
  SkillBoard-owned lifecycle scaffolding while preserving local `skills/`.
276
326
 
277
327
  ## 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
328
+
329
+ After installing skill packs or harness bundles, represent them as install
330
+ units:
331
+
332
+ ```bash
333
+ skillboard import \
334
+ --profile github.mattpocock.skills \
335
+ --source-root /path/to/mattpocock-skills \
336
+ --out .skillboard/reports/mattpocock-import.yaml
337
+ ```
338
+
339
+ The import output is a reviewable YAML fragment. Merge the accepted `skills` and
340
+ `install_units` into `skillboard.config.yaml`; imported skills stay inactive
341
+ until workflows and policies explicitly use them.
342
+
343
+ For a direct but still safe apply path:
344
+
345
+ ```bash
296
346
  skillboard import \
297
347
  --profile github.mattpocock.skills \
298
348
  --source-root /path/to/mattpocock-skills \
@@ -325,45 +375,45 @@ changes.
325
375
 
326
376
  ```yaml
327
377
  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).
378
+ github.mattpocock.skills:
379
+ kind: marketplace
380
+ source: npx skills@latest add mattpocock/skills
381
+ scope: user-global
382
+ provided_components:
383
+ - skills
384
+ components:
385
+ skills:
386
+ - matt.tdd
387
+ ```
388
+
389
+ Then link each governed skill back to its owner:
390
+
391
+ ```yaml
392
+ skills:
393
+ matt.tdd:
394
+ path: matt/tdd
395
+ status: active
396
+ invocation: workflow-auto
397
+ exposure: exported
398
+ owner_install_unit: github.mattpocock.skills
399
+ ```
400
+
401
+ Run:
402
+
403
+ ```bash
404
+ skillboard check --config skillboard.config.yaml --skills skills
405
+ skillboard dashboard --config skillboard.config.yaml --skills skills --out .skillboard/reports/skill-map.md
406
+ ```
407
+
408
+ This keeps multiple installed repositories visible as managed units instead of
409
+ turning every skill into a global invocation candidate.
410
+
411
+ ## Adapter Direction
412
+
413
+ Import support should be profile-driven, not hardcoded. A popular source such as
414
+ `mattpocock/skills` or `oh-my-openagent` may ship with a built-in source profile,
415
+ but that profile should be data that maps repository layout and defaults into the
416
+ same install-unit model. Source-specific code should be limited to detector
417
+ plugins for layouts that cannot be described declaratively.
418
+
419
+ See [adapters.md](adapters.md).
@@ -0,0 +1,56 @@
1
+ # SkillBoard Variant Lifecycle Handoff Plan
2
+
3
+ This document was the handoff point for continuing the SkillBoard variant lifecycle implementation in `/home/nyxxir/skillboard`.
4
+
5
+ ## Status
6
+
7
+ Completed on 2026-06-29.
8
+
9
+ The authoritative execution plan was `.omo/plans/skillboard-variant-lifecycle.md`; all Todos 1-8 and final verification wave F1-F4 were completed. Ignored orchestration artifacts under `.omo/` and `.agent-work/` contain the detailed evidence and continuity logs.
10
+
11
+ ## Implemented Scope
12
+
13
+ The feature adds a manual, auditable lifecycle for cross-agent skill variants:
14
+
15
+ - `skillboard variant fork`
16
+ - `skillboard variant status`
17
+ - `skillboard variant approve`
18
+ - `skillboard variant reset`
19
+ - nested `skills.<id>.variant` metadata
20
+ - digest-backed raw `SKILL.md` snapshots
21
+ - documentation and tests for manual cross-agent adaptation
22
+
23
+ ## Product Decisions Preserved
24
+
25
+ - `variant add` remains the existing immediate policy-registration command.
26
+ - New lifecycle commands are additive: `fork`, `status`, `approve`, `reset`.
27
+ - A draft fork is policy-valid but not callable:
28
+ - top-level `status: candidate`
29
+ - top-level `invocation: manual-only`
30
+ - no workflow active/preferred/fallback role until approval
31
+ - `variant.status` is nested lifecycle metadata only. Top-level skill statuses were not expanded with `draft` or `approved`.
32
+ - Snapshot files are raw `SKILL.md` content only.
33
+ - Snapshot paths are config-relative and stay under `.skillboard/variant-snapshots/`.
34
+ - Drift is computed from file digests; `drifted` is not persisted in config.
35
+ - The implementation does not add automatic prompt conversion, LLM calls, new dependencies, or prompt rewriting.
36
+
37
+ ## Verification Summary
38
+
39
+ Final verification passed:
40
+
41
+ - `npm run check` → 244/244 tests pass.
42
+ - Focused lifecycle suite → 24/24 tests pass.
43
+ - Manual CLI QA evidence was written under `.omo/evidence/manual-variant-lifecycle/`.
44
+ - F1-F4 evidence files were written under `.omo/evidence/`.
45
+ - Independent final no-edit review passed with no blockers.
46
+ - `git diff --check` and untracked whitespace checks passed.
47
+
48
+ ## Final Commit
49
+
50
+ Planned commit message:
51
+
52
+ ```text
53
+ feat(control): add variant lifecycle management
54
+ ```
55
+
56
+ Do not push unless the user explicitly asks.