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/README.md CHANGED
@@ -1,669 +1,198 @@
1
1
  # SkillBoard
2
2
 
3
- Know which agent skills can run before they run.
3
+ Use the right AI-agent skills without managing another checklist.
4
4
 
5
- SkillBoard is a policy and visibility layer for AI coding-agent skills. It is
6
- for developers who already have skill folders, plugins, MCP tools, hooks, or
7
- marketplaces, but still cannot answer the operational question that matters
8
- most:
5
+ Ask your AI normal questions: "what skills can you use?", "which skill should
6
+ write tests first?", or "can you make this reviewed skill available here?"
7
+ SkillBoard runs behind the scenes so you get the benefit: the right allowed
8
+ skill, a short disclosure of what was used, and fewer setup interruptions.
9
9
 
10
- > Which skills can run in this workflow, why, and what breaks if I remove one?
10
+ The burden stays low:
11
11
 
12
- SkillBoard separates "installed" from "allowed". A skill can be present in a
13
- repository without being eligible for model invocation. Workflows choose the
14
- active pool, automatic invocation is denied by default, and the reconciler turns
15
- skill or harness drift into safe defaults plus a short list of decisions that
16
- actually need user approval.
12
+ - No global install is required; use `npx --yes --package agent-skillboard`.
13
+ - Most use is read-only: `brief`, `route`, `doctor`, and `guard use` answer
14
+ what is safe now.
15
+ - Nothing changes until you approve a policy action.
16
+ - Project cleanup is conservative and previewable with `skillboard uninstall --dry-run`.
17
17
 
18
- <p align="center">
19
- <img src="https://raw.githubusercontent.com/NyXXiR/skillboard/main/skillboard.png" alt="SkillBoard architecture diagram: sources, inventory scanner, SkillBoard model, policy engine, and user and agent surfaces." width="100%">
20
- </p>
18
+ Status: public alpha. The current config schema is config schema v1; breaking
19
+ changes may still happen before `1.0.0` and are documented in release notes.
21
20
 
22
- ## The Problem
21
+ Under the hood, SkillBoard is workflow-scoped skill policy and routing for AI
22
+ agents. It separates `installed` from `allowed`, checks workflow policy and
23
+ guard state before use, and leaves a clear record of which skill influenced the
24
+ answer.
23
25
 
24
- You installed a few agent skill packs.
26
+ Start with normal requests:
25
27
 
26
- Now every repository has a growing pile of `SKILL.md` files, plugin-provided
27
- tools, hooks, MCP servers, and workflow rules. Before an agent starts working,
28
- you still need to know:
28
+ - "What skills can you use in this project?"
29
+ - "Which skill should you use to write tests first?"
30
+ - "Can you make `anthropic.docx` available for this workflow?"
31
+ - "Why is this skill blocked?"
29
32
 
30
- - Which skills are merely installed?
31
- - Which skills are allowed to run in this workflow?
32
- - Which skills can be invoked automatically?
33
- - What changes if I disable one?
34
- - Did a plugin or runtime update silently add new capabilities?
33
+ Your AI runs SkillBoard behind the scenes, reads the current brief, checks the
34
+ guard automatically before invoking an allowed skill, and asks only before
35
+ policy-changing actions. For already-allowed skills, it should say which skill
36
+ it is about to use and which skill it used, not interrupt you for another
37
+ approval. That disclosure is an audit trace, not a permission prompt. You do
38
+ not need to memorize the SkillBoard command loop.
35
39
 
36
- SkillBoard turns that mess into an explicit skill map.
40
+ A normal allowed-skill turn can look like this:
37
41
 
38
- ## What SkillBoard Gives You
42
+ - You: "Which skill should you use to write tests first?"
43
+ - AI: "I will use matt.tdd for this request."
44
+ - AI: "I used matt.tdd for this request."
39
45
 
40
- - A skill inventory that separates installed from active.
41
- - Workflow-scoped allowlists for automatic invocation.
42
- - Quarantine for newly discovered skills.
43
- - Impact reports before disabling or migrating skills.
44
- - Agent bridge files so Codex and Claude Code follow the same policy.
45
- - An AI-facing brief so agents can explain availability without guessing from
46
- raw `SKILL.md` files.
46
+ Names you may see in setup and logs:
47
47
 
48
- ## Demo
48
+ - `SkillBoard`: the product and policy model.
49
+ - `agent-skillboard`: the npm package.
50
+ - `skillboard`: the CLI binary.
49
51
 
50
- ```bash
51
- skillboard init
52
- skillboard doctor
53
- skillboard brief --json --workflow codex-night-workflow
54
- skillboard list skills --workflow codex-night-workflow
55
- skillboard can-use matt.tdd --workflow codex-night-workflow
56
- skillboard impact disable matt.tdd
57
- ```
58
-
59
- Example dashboard output:
52
+ Use SkillBoard when your agent setup has grown beyond one trusted skill folder
53
+ and you want workflow-scoped control without turning skill governance into a
54
+ manual checklist. If you are changing routing, brief, bridge, policy, or
55
+ workflow UX, read [AI Skill Routing Goal](docs/ai-skill-routing-goal.md) first;
56
+ it defines the non-blocking `observe → route → work → explain briefly → ask
57
+ after remember policy` loop that development should preserve.
60
58
 
61
- ```markdown
62
- ## Skills
59
+ <p align="center">
60
+ <img src="https://raw.githubusercontent.com/NyXXiR/skillboard/main/skillboard.png" alt="SkillBoard architecture diagram: sources, inventory scanner, SkillBoard model, policy engine, and user and agent surfaces." width="100%">
61
+ </p>
63
62
 
64
- - `private.tdd-work-continuity` active, manual-only, local, owner: `user.local`
65
- - `matt.tdd` — active, workflow-auto, exported, owner: `github.mattpocock.skills`
66
- - `vendor.experimental-review` — quarantined, blocked, vendor, owner: `new.runtime.bundle`
63
+ ## Why Not Just List `/skills`?
67
64
 
68
- ## Reconcile Plan
65
+ A raw skill list answers what is declared. SkillBoard answers what can safely
66
+ run now.
69
67
 
70
- - quarantine new skills until a workflow explicitly opts in
71
- - report workflows affected before a skill or harness is disabled
72
- ```
68
+ Same fixture, different answer:
73
69
 
74
- ## Why This Exists
75
-
76
- Agent skill tooling is moving fast. `skillshare` is good at syncing skills across
77
- agent targets. Microsoft APM focuses on reproducible agent context from a
78
- manifest and lockfile. Security scanners such as SkillGate/SkillGuard focus on
79
- trust and risk.
80
-
81
- SkillBoard is deliberately narrower:
82
-
83
- - Deny automatic invocation by default.
84
- - Activate skills per workflow, not globally.
85
- - Separate installed, active, manual-only, router-only, workflow-auto, blocked,
86
- and deprecated states.
87
- - Quarantine newly discovered skills instead of auto-enabling them.
88
- - Treat harness additions/removals as migration events, not silent breakage.
89
- - Track capabilities so workflows can depend on roles instead of only skill ids.
90
- - Track install units so plugin bundles, package-manager dependencies, harnesses,
91
- MCP servers, hooks, agents, and LSPs are not flattened into skill names.
92
- - Keep user-added global skills limited to explicit `global-meta` skills such as
93
- routers, impact analyzers, and verification gates.
94
- - Show a human-readable skill map before users add or remove skills.
95
- - Report impact before disabling a skill.
96
-
97
- ## MVP Status
98
-
99
- This repository is an early CLI-first foundation. It currently supports:
100
-
101
- - YAML policy config parsing.
102
- - Recursive `SKILL.md` discovery.
103
- - Source-profile import for cloned or installed skill repositories.
104
- - Capability and harness config parsing.
105
- - Agent runtime install-unit inventory, including Codex plugin skills, hooks,
106
- MCP servers, commands, and modified config files when manifest metadata is
107
- available.
108
- - Strong reference checks for workflows, skills, capabilities, harnesses, and
109
- install units.
110
- - Semantic policy checks for workflow-scoped auto invocation, canonical skill
111
- claims, conflicts, status/invocation combinations, and install-unit component
112
- declarations.
113
- - Markdown dashboard generation.
114
- - Disable-impact analysis.
115
- - Reconcile plan generation for new skills, new harnesses, and removed
116
- harnesses.
117
-
118
- ## 5-Minute Quick Start
70
+ | Raw skill list | SkillBoard brief |
71
+ | --- | --- |
72
+ | `matt.tdd active workflow-auto` | `AI can use now: 0` |
73
+ | no policy health | `Blocked for safety: 8`, `Policy errors: 2` |
119
74
 
120
- Run SkillBoard in the project you want to manage:
75
+ That gap is the product. SkillBoard separates `installed` from `allowed`,
76
+ checks policy health, and gives agents a brief they can use without guessing
77
+ from raw `SKILL.md` files. The same proof also routes "write tests before
78
+ implementation" to `matt.tdd`, returns `private.tdd-work-continuity` as the
79
+ fallback, and gives the AI exact start and finish disclosure text.
121
80
 
122
- ```bash
123
- npx agent-skillboard init
124
- npx agent-skillboard --version
125
- npx agent-skillboard brief
126
- npx agent-skillboard doctor --summary
127
- ```
81
+ See [Tested Value Proof](#tested-value-proof) for the executable proof.
128
82
 
129
- The first command creates the local control-plane files for the current
130
- directory. To manage another project from elsewhere, pass `--dir`:
83
+ ## 5-Minute Quick Start
131
84
 
132
- ```bash
133
- npx agent-skillboard init --dir /path/to/your/project
134
- npx agent-skillboard brief --dir /path/to/your/project
135
- npx agent-skillboard doctor --dir /path/to/your/project --summary
136
- ```
85
+ Ask your AI to set up SkillBoard in the project you want to manage. The AI runs
86
+ SkillBoard behind the scenes, then answers from the generated brief instead of
87
+ from memory or raw skill files.
137
88
 
138
- SkillBoard does not make installed skills automatically callable. It imports
139
- trusted local skills as manual-only and keeps runtime/plugin skills quarantined
140
- until reviewed.
89
+ Use without a global install:
141
90
 
142
- For CI or scripts, the explicit package form avoids ambiguity about the binary
143
- name:
91
+ AI/automation/operator details:
144
92
 
145
93
  ```bash
146
94
  npx --yes --package agent-skillboard skillboard init
147
- npm exec --yes --package agent-skillboard -- skillboard init
148
- ```
149
-
150
- Then check the project:
151
-
152
- ```bash
153
- npx --yes --package agent-skillboard skillboard doctor
154
- ```
155
-
156
- For repeated local use, install the CLI globally:
157
-
158
- ```bash
159
- npm install -g agent-skillboard
160
- skillboard init
161
- skillboard doctor
162
- ```
163
-
164
- Unreleased GitHub builds are available for testing changes before npm release:
165
-
166
- ```bash
167
- npx --yes --package github:NyXXiR/skillboard skillboard init
168
- npx --yes --package github:NyXXiR/skillboard skillboard brief
169
- npx --yes --package github:NyXXiR/skillboard skillboard doctor --summary
170
- ```
171
-
172
- For development from a clone, run the source-tree CLI:
173
-
174
- ```bash
175
- git clone https://github.com/NyXXiR/skillboard.git
176
- cd skillboard
177
- npm install
178
- npm test
179
- node bin/skillboard.mjs init --dir /path/to/your/project
180
- node bin/skillboard.mjs brief --dir /path/to/your/project
181
- node bin/skillboard.mjs doctor --dir /path/to/your/project --summary
182
- ```
183
-
184
- Most examples below use the global or npm-exec `skillboard` command. When
185
- running from a clone, replace `skillboard ` with `node bin/skillboard.mjs `.
186
-
187
- Useful first commands:
188
-
189
- ```bash
190
- skillboard inventory refresh --dry-run
191
- skillboard import --profile github.mattpocock.skills --source-root /path/to/mattpocock-skills
192
- skillboard import --profile github.mattpocock.skills --source-root /path/to/mattpocock-skills --config skillboard.config.yaml --merge --dry-run
193
- skillboard check --config skillboard.config.yaml --skills skills
194
- skillboard rollout audit --config skillboard.config.yaml --skills skills --json
195
- skillboard rollout plan --config skillboard.config.yaml --skills skills --json
196
- ```
197
-
198
- `skillboard init` creates `skillboard.config.yaml`, `skills/`,
199
- `.skillboard/reports/`, `.skillboard/profiles/`, `AGENTS.md`, and `CLAUDE.md`.
200
- It also scans known local agent skill roots, including Codex user/system skills,
201
- Codex plugin-cache manifests, Claude user skills, Hermes user skills, and Hermes
202
- profile skills under `.hermes/profiles/*/skills`. Trusted user-local skills are
203
- imported as `status: active` with `invocation: manual-only` and attached to a
204
- generated local manual workflow when the project has no workflow metadata yet,
205
- so a first-time user can immediately use their own manual skills through
206
- `can-use` and guard checks without receiving legacy-state warning noise. System,
207
- plugin, and other runtime-supplied skills stay `quarantined` / `blocked`; plugin
208
- hooks, MCP servers, commands, and modified config files are attached to the
209
- owning install unit for review. The agent bridge files tell Codex-style and
210
- Claude Code agents to use `skillboard.config.yaml` as the control-plane source
211
- of truth instead of treating every installed `SKILL.md` as active.
212
-
213
- When you ask an agent "what skills can you use?", the bridge tells it to run
214
- `skillboard brief --json` before answering. The brief is designed for
215
- AI-mediated use without becoming another policy engine: it summarizes "What
216
- your AI can use now", what needs your decision, what is blocked for safety, and
217
- which change suggestions are available as action cards. Reviewable items should
218
- feel like a short decision queue, not repeated blocked chores: once the source,
219
- skill, and workflow decision is recorded, the same prompt should not return
220
- unless that input changes. Before an agent applies a risk-bearing action card,
221
- it should pick one current action id from the brief, ask for user confirmation,
222
- then use
223
- `skillboard apply-action <action-id> --yes --json` with the same config, skills,
224
- and workflow options instead of running raw action-card shell text. After a
225
- mutating `apply-action`, the agent should read the returned post-apply brief
226
- before answering the next availability question or applying another action.
227
- `apply-action` re-resolves the current brief, so stale action ids, cached action
228
- cards, and multi-action batches are refused rather than replayed.
229
- Immediately before a skill is actually invoked,
230
- `skillboard guard use ...` remains the final gate.
231
- The default text brief is compact for large skill sets: it keeps the summary,
232
- top categories, next safe action, short section previews, and short action
233
- summaries. Use `skillboard brief --verbose` when you need the full list or
234
- full copyable command details.
235
-
236
- ### Hermes System Prompt Bridge
237
-
238
- Hermes does not automatically read `AGENTS.md` or `CLAUDE.md`. To make Hermes
239
- follow the same SkillBoard policy, add a small bridge instruction to the Hermes
240
- profile or system prompt for the project:
241
-
242
- ```text
243
- Use SkillBoard as the source of truth for agent skill availability.
244
- Before answering what skills can be used, run:
245
- skillboard brief --json --dir /path/to/your/project
246
-
247
- Do not infer availability from installed SKILL.md files. Immediately before
248
- invoking a skill, run:
249
- skillboard guard use <skill-id> --workflow <workflow-name> --dir /path/to/your/project
250
-
251
- For suggested policy changes, ask the user to approve one current action id,
252
- then run:
253
- skillboard apply-action <action-id> --dir /path/to/your/project --yes --json
254
- ```
255
-
256
- Replace `/path/to/your/project` and `<workflow-name>` with the project and
257
- workflow Hermes should operate inside.
258
-
259
- Example: overloaded local agent profile
260
-
261
- ```text
262
- Scanned installed agent skills: 128
263
- AI can use now: 123 (0 automatic, 123 manual)
264
- Needs your decision: 0
265
- Blocked for safety: 5
266
- Default brief: 54 lines
267
- Verbose inventory: 244 lines
95
+ npx --yes --package agent-skillboard skillboard doctor --summary
96
+ npx --yes --package agent-skillboard skillboard brief --workflow <workflow-from-init>
268
97
  ```
269
98
 
270
- The point is not to install more skills. The point is to see that installed
271
- does not mean automatically callable, local skills stay manual-only, and risky
272
- runtime/plugin skills stay blocked until reviewed.
273
-
274
- Run `skillboard doctor` after init to see config health, bridge status, managed
275
- skill/install-unit counts, policy/source audit summaries, and the default
276
- uninstall dry-run plan. The default doctor command passes when the workspace is
277
- usable but has review-needed safe-mode warnings; add `--strict` when those
278
- warnings should fail automation. Add `--json` when an agent or script needs the
279
- same information as structured output. `skillboard status` returns the same
280
- health report for users and agents that prefer a shorter command name.
281
-
282
- See [docs/user-flow.md](docs/user-flow.md) for the first-time flow that covers
283
- adding a local skill, inspecting its influence, activating/blocking it, and
284
- removing SkillBoard policy references without deleting the underlying
285
- `SKILL.md`.
286
-
287
- Run `skillboard inventory refresh --dry-run` after installing a new local agent
288
- skill pack, plugin, workflow bundle, or harness. It reuses the same scanner as
289
- init and reports the text and YAML semantic config change plan. If the project
290
- has no workflows yet, newly discovered trusted user-local skills are attached to
291
- a generated manual workflow; if workflows already exist, those skills are kept as
292
- manual-only candidates and the refresh prints a review note to attach them with
293
- `skillboard add workflow`. Runtime or external skills remain out of automatic
294
- use until the source and workflow decisions are recorded. Broken detector
295
- entries or malformed `SKILL.md` files are reported as scan warnings instead of
296
- aborting the whole refresh.
297
-
298
- Add new local growth paths without hand-editing YAML:
99
+ `init` creates the local control-plane files, scans known local skill roots,
100
+ and writes agent bridge instructions. It prints the workflows it found and a
101
+ copyable workflow-scoped `brief` command. If `init` does not print a workflow,
102
+ run the unscoped `brief` command it prints instead. Trusted user-local skills
103
+ start as manual-only. Runtime, plugin, and external skills stay quarantined
104
+ until their source is reviewed; the brief presents that as a one-time review
105
+ decision, then individual quarantined skills can be activated as manual-only
106
+ workflow skills before any later ask-after preference is recorded. The explicit
107
+ package/binary spelling avoids an extra npx install prompt and keeps the
108
+ `skillboard` executable name clear.
299
109
 
300
- ```bash
301
- skillboard add harness codex --config skillboard.config.yaml --skills skills
302
- skillboard add workflow daily-workflow --harness codex --skill user.helper --config skillboard.config.yaml --skills skills
303
- ```
304
-
305
- When an installer writes runtime settings without a manifest, capture that
306
- surface explicitly:
110
+ Remove the project bridge when you are done:
307
111
 
308
112
  ```bash
309
- skillboard inventory detect --unit acme.runtime --config skillboard.config.yaml --install-output install.log --config-file ~/.codex/config.toml --dry-run
113
+ npx --yes --package agent-skillboard skillboard uninstall --dir /path/to/your/project --dry-run
114
+ npx --yes --package agent-skillboard skillboard uninstall --dir /path/to/your/project
310
115
  ```
311
116
 
312
- For fetchable Git sources, refresh the local cache and digest pin before writing
313
- a lockfile:
117
+ Uninstall preserves local skills and policy files by default, and reports what
118
+ it removed or preserved.
314
119
 
315
- ```bash
316
- skillboard sources refresh --config skillboard.config.yaml --unit github.mattpocock.skills --dry-run
317
- skillboard sources refresh --config skillboard.config.yaml --unit github.mattpocock.skills
318
- ```
319
-
320
- After reviewing an imported install unit, record that decision before activating
321
- model-selectable skills from it:
322
-
323
- ```bash
324
- skillboard review install-unit github.mattpocock.skills --trust-level reviewed --config skillboard.config.yaml --skills skills
325
- ```
120
+ See [docs/install.md](docs/install.md) for global installs, `--dir`, GitHub
121
+ builds, clone-based development, Hermes bridge setup, refresh, and uninstall.
326
122
 
327
- To remove the project bridge safely:
328
-
329
- ```bash
330
- skillboard uninstall --dry-run
331
- skillboard uninstall
332
- ```
333
-
334
- `skillboard uninstall` removes only SkillBoard bridge blocks and unchanged
335
- generated helper files by default. It preserves `skillboard.config.yaml`, local
336
- skills, reports, and any user content in `AGENTS.md` or `CLAUDE.md`. Add
337
- `--remove-config` only when you want to delete an untouched default config. Use
338
- `--reset-config` when you intentionally want to discard the current
339
- `skillboard.config.yaml` and re-run `skillboard init` from a fresh policy
340
- lifecycle; local skill files, reports, and generated guard hooks are still
341
- preserved. Add `--remove-reports` with `--reset-config` when a test reset should
342
- also discard generated dashboard and impact reports. Add
343
- `--remove-hooks` with the same reset when you also want to discard the entire
344
- `.skillboard/hooks/` directory contents and remove the `.skillboard/` directory
345
- if it has no other content.
346
-
347
- Run the bundled examples from the repository root:
348
-
349
- ```bash
350
- npm install
351
- npm run check
352
- node bin/skillboard.mjs check \
353
- --config examples/multi-source.config.yaml \
354
- --skills examples/multi-source-skills
355
- node bin/skillboard.mjs list skills \
356
- --config examples/multi-source.config.yaml \
357
- --skills examples/multi-source-skills \
358
- --workflow codex-night-workflow
359
- node bin/skillboard.mjs explain private.tdd-work-continuity \
360
- --config examples/multi-source.config.yaml \
361
- --skills examples/multi-source-skills
362
- node bin/skillboard.mjs can-use matt.tdd \
363
- --workflow codex-night-workflow \
364
- --config examples/multi-source.config.yaml \
365
- --skills examples/multi-source-skills
366
- node bin/skillboard.mjs audit sources --verify \
367
- --config examples/multi-source.config.yaml \
368
- --skills examples/multi-source-skills
369
- mkdir -p .skillboard/reports
370
- node bin/skillboard.mjs lock write \
371
- --config examples/multi-source.config.yaml \
372
- --skills examples/multi-source-skills \
373
- --out .skillboard/reports/multi-source.lock.yaml \
374
- --replace
375
- node bin/skillboard.mjs apply-action <action-id> \
376
- --workflow codex-night-workflow \
377
- --config examples/multi-source.config.yaml \
378
- --skills examples/multi-source-skills \
379
- --yes --json
380
- ```
381
-
382
- For hook action cards, keep `apply-action` as the primary flow:
383
- `node bin/skillboard.mjs apply-action <action-id> ... --yes --json`. The raw
384
- hook commands below are underlying manual operator detail for previewing and
385
- materializing an executable guard hook outside the action-card approval loop:
386
-
387
- ```bash
388
- node bin/skillboard.mjs hook install \
389
- --workflow codex-night-workflow \
390
- --config examples/multi-source.config.yaml \
391
- --skills examples/multi-source-skills \
392
- --out .skillboard/reports/codex-night-guard.sh \
393
- --skillboard-bin "node bin/skillboard.mjs" \
394
- --dry-run --json
395
- node bin/skillboard.mjs hook install \
396
- --workflow codex-night-workflow \
397
- --config examples/multi-source.config.yaml \
398
- --skills examples/multi-source-skills \
399
- --out .skillboard/reports/codex-night-guard.sh \
400
- --skillboard-bin "node bin/skillboard.mjs"
401
- ```
402
-
403
- For manual hook installation, preview with `--dry-run --json` and inspect
404
- `planned.preview.shell` before an operator materializes the matching non-dry-run
405
- hook command directly.
406
- The multi-source example intentionally uses project-root-relative local paths,
407
- such as `./examples/multi-source-skills/private`, so a fresh clone can run these
408
- commands without editing machine-specific paths.
409
-
410
- ## Config Shape
411
-
412
- ```yaml
413
- version: 1
414
-
415
- defaults:
416
- invocation_policy: deny-by-default
417
- allow_model_invocation: false
418
- require_explicit_workflow: true
419
-
420
- skills:
421
- matt.tdd:
422
- path: tdd
423
- status: active
424
- invocation: workflow-auto
425
- exposure: exported
426
- category: engineering
427
-
428
- user.workflow-router:
429
- path: user/workflow-router
430
- status: active
431
- invocation: global-auto
432
- exposure: global-meta
433
- category: meta
434
-
435
- capabilities:
436
- test-first-implementation:
437
- canonical: matt.tdd
438
- alternatives:
439
- - meerkat.test-first-implementation
440
- default_policy: workflow-auto
441
-
442
- harnesses:
443
- codex:
444
- status: primary
445
- workflows:
446
- - codex-night-workflow
447
-
448
- install_units:
449
- lazycodex.omo:
450
- kind: harness
451
- source: npx lazycodex-ai install
452
- scope: user-global
453
- manifest_path: ~/.codex/plugins/cache/sisyphuslabs/omo/plugin.json
454
- cache_path: ~/.codex/plugins/cache/sisyphuslabs/omo
455
- provided_components:
456
- - skills
457
- - commands
458
- - mcp-server
459
- - hook
460
- components:
461
- skills:
462
- - lazycodex.ulw-plan
463
- commands:
464
- - $ulw-plan
465
- - $start-work
466
- hooks:
467
- - post-tool-use
468
- mcp_servers:
469
- - omo-docs
470
- modified_config_files:
471
- - ~/.codex/config.toml
472
- - ~/.local/bin
473
- auto_update: false
474
- enabled: true
475
- workflow_dependencies:
476
- - large-refactor-workflow
477
- permission_risk: high
478
- rollback: manual
479
-
480
- workflows:
481
- codex-night-workflow:
482
- harness: codex
483
- active_skills:
484
- - matt.tdd
485
- blocked_skills: []
486
- required_capabilities:
487
- test-first-implementation:
488
- preferred: matt.tdd
489
- fallback:
490
- - meerkat.test-first-implementation
491
- policy: workflow-auto
492
- ```
493
-
494
- ## Source Profiles
495
-
496
- `skillboard import` reads a source profile and emits a YAML fragment containing
497
- governed `skills` plus their owning `install_units`.
498
-
499
- ```bash
500
- skillboard import \
501
- --profile github.mattpocock.skills \
502
- --source-root /path/to/cloned-or-installed/repo \
503
- --out .skillboard/reports/import-fragment.yaml
504
- ```
505
-
506
- To preview a direct apply path, pass `--merge --config --dry-run`. Merge is
507
- non-destructive by default: if a skill or install-unit id already exists, the
508
- command fails and leaves the config unchanged. Use `--replace` only when you
509
- intend to overwrite existing entries, and drop `--dry-run` only after reviewing
510
- the reported change plan.
511
-
512
- ```bash
513
- skillboard import \
514
- --profile github.mattpocock.skills \
515
- --source-root /path/to/cloned-or-installed/repo \
516
- --config skillboard.config.yaml \
517
- --merge \
518
- --dry-run
519
- ```
520
-
521
- Built-in profiles are shipped as YAML data under `profiles/`, including:
522
-
523
- - `github.mattpocock.skills`
524
- - `github.code-yeongyu.oh-my-openagent`
525
- - `github.anthropics.skills`
526
- - `github.wshobson.agents`
527
- - `github.voltagent.awesome-agent-skills`
528
-
529
- Project-specific profiles can live under `.skillboard/profiles/` and be passed
530
- by path:
531
-
532
- ```bash
533
- skillboard import --profile .skillboard/profiles/my-source.yaml --source-root /path/to/repo
534
- ```
535
-
536
- Invocation modes:
537
-
538
- - `manual-only`: user must explicitly ask for it.
539
- - `router-only`: a router/orchestrator may select it after policy checks.
540
- - `workflow-auto`: model invocation is allowed only inside listed workflows.
541
- - `global-auto`: allowed globally; use sparingly.
542
- - `blocked`: installed but not callable until policy or provenance changes.
543
- - `deprecated`: kept for history, not for new use.
544
-
545
- Skill exposure:
546
-
547
- - `exported`: centrally governed skill that may serve shared workflows or
548
- canonical capabilities.
549
- - `global-meta`: intentionally global control skill, such as a router,
550
- impact analyzer, or verification gate. This is the only exposure that may use
551
- `global-auto`.
552
- - `unit-managed`: child component supplied by a parent install unit or harness
553
- bundle.
554
- - `private`: workflow-internal implementation detail; central governance should
555
- avoid managing it unless it becomes shared.
556
-
557
- `owner_install_unit` links a declared skill back to the package, plugin,
558
- marketplace, harness, or local source that supplied it. SkillBoard checks this
559
- both ways: install-unit `components.skills` must reference declared skills, and a
560
- skill that names an owner must be listed by that owner. `unit-managed` skills
561
- must always declare an owner.
562
-
563
- The multi-source example in `examples/multi-source.config.yaml` models one
564
- private skill source plus five external repositories:
565
-
566
- - `mattpocock/skills`
567
- - `code-yeongyu/oh-my-openagent`
568
- - `anthropics/skills`
569
- - `wshobson/agents`
570
- - `VoltAgent/awesome-agent-skills`
571
-
572
- Run the example commands from the repository root. Local example sources are
573
- written as project-root-relative paths; fetchable Git sources can be cached and
574
- pinned with `skillboard sources refresh`.
575
-
576
- ## Commands
577
-
578
- All commands below use the global `skillboard` binary. When running from a
579
- clone without `npm install -g agent-skillboard`, replace `skillboard ` with
580
- `node bin/skillboard.mjs ` and run from the repository root.
581
-
582
- ```bash
583
- skillboard init [--dir <path>] [--scan-root <dir>[,<dir>]] [--no-scan-installed]
584
- skillboard uninstall [--dir <path>] [--dry-run] [--remove-config|--reset-config] [--remove-reports] [--remove-hooks] [--keep-empty-dirs]
585
- skillboard inventory refresh [--dir <path>] [--config <path>] [--scan-root <dir>[,<dir>]] [--dry-run] [--json]
586
- skillboard inventory detect --unit <id> --config <path> [--install-output <path>] [--config-file a,b] [--source <value>] [--kind <kind>] [--scope <scope>] [--dry-run] [--json]
587
- skillboard sources refresh [--dir <path>] [--config <path>] [--unit <id>[,<id>]] [--cache-dir <dir>] [--dry-run] [--json]
588
- skillboard doctor [--dir <path>] [--config <path>] [--skills <dir>] [--verify] [--strict] [--json] [--summary]
589
- skillboard status [--dir <path>] [--config <path>] [--skills <dir>] [--verify] [--strict] [--json] [--summary]
590
- skillboard brief [--workflow <name>] [--dir <path>] [--config <path>] [--skills <dir>] [--include-actions] [--verbose] [--json]
591
- skillboard apply-action <action-id> [--workflow <name>] [--dir <path>] [--config <path>] [--skills <dir>] [--dry-run] [--yes] [--allow-destructive] [--json]
592
- skillboard import --profile <id-or-path> --source-root <dir> [--profile-dirs a,b] [--out <path>]
593
- skillboard import --profile <id-or-path> --source-root <dir> --config <path> --merge [--replace] [--dry-run]
594
- skillboard scan --config <path> --skills <dir>
595
- skillboard check --config <path> --skills <dir>
596
- skillboard list [skills|workflows|harnesses|install-units] --config <path> --skills <dir>
597
- skillboard explain <skill-id> --config <path> --skills <dir>
598
- skillboard can-use <skill-id> --workflow <name> --config <path> --skills <dir>
599
- skillboard guard use <skill-id> --workflow <name> --config <path> --skills <dir>
600
- skillboard audit sources --config <path> --skills <dir> [--verify]
601
- skillboard rollout [audit|plan|apply|rollback|report] [--dir <path>] [--config <path>] [--skills <dir>] [--transaction <id>] [--json]
602
- skillboard hook install --workflow <name> --config <path> --skills <dir> [--out <path>] [--skillboard-bin <path>] [--dry-run] [--json]
603
- skillboard lock write --config <path> --skills <dir> [--out <path>] [--replace] [--allow-unverified]
604
- skillboard review install-unit <unit-id> [--trust-level trusted|reviewed|unreviewed|blocked] --config <path> --skills <dir>
605
- skillboard add skill <skill-id> --path <relative-skill-path> --config <path> --skills <dir>
606
- skillboard add workflow <workflow-name> --harness <harness-name> --config <path> --skills <dir> [--skill <id>[,<id>]]
607
- skillboard add harness <harness-name> --config <path> --skills <dir> [--status <status>] [--command <cmd>[,<cmd>]]
608
- skillboard activate <skill-id> --workflow <name> --config <path> --skills <dir>
609
- skillboard block <skill-id> --workflow <name> --config <path> --skills <dir>
610
- skillboard quarantine <skill-id> --config <path> --skills <dir>
611
- skillboard prefer <skill-id> --workflow <name> --capability <name> --config <path> --skills <dir>
612
- skillboard remove skill <skill-id> --config <path> --skills <dir> [--force]
613
- skillboard dashboard --config <path> --skills <dir> [--out <path>]
614
- skillboard reconcile --config <path> --skills <dir> [--actual-harnesses a,b] [--out <path>]
615
- skillboard impact disable <skill-id> --config <path> --skills <dir> [--out <path>] [--json]
616
- ```
123
+ ## What SkillBoard Gives You
617
124
 
618
- The bundled examples in this repository use `node bin/skillboard.mjs` explicitly
619
- because they are meant to run from a fresh clone without a global install.
620
-
621
- ## Reconciliation Model
622
-
623
- SkillBoard compares desired state from config with actual state from discovered
624
- `SKILL.md` files and detected harnesses.
625
-
626
- - New skills become `quarantined` / `blocked` recommendations.
627
- - Known capability matches are surfaced, but not auto-enabled.
628
- - Removed harnesses report affected workflows, missing commands, and migration
629
- recommendations.
630
- - Newly detected harnesses are disabled until workflows explicitly opt in.
631
- - If actual harness inventory is not provided, reconcile emits a warning instead
632
- of silently assuming harness state.
633
-
634
- ## Install Units
635
-
636
- SkillBoard should not assume that every runtime change is a standalone skill.
637
- Modern agent environments increasingly install packaged primitives:
638
-
639
- - `skill`
640
- - `plugin`
641
- - `marketplace`
642
- - `package-manager-dependency`
643
- - `harness`
644
- - `mcp-server`
645
- - `hook`
646
- - `agent`
647
- - `lsp`
648
-
649
- An install unit records source, scope, manifest/cache paths, provided
650
- components, modified config files, enablement, workflow dependencies, permission
651
- risk, trust level, digest/signature pins, and rollback shape. LazyCodex-style setups fit this model as
652
- user-global harness/plugin bundles that provide commands, skills, MCP
653
- integrations, hooks, and config.
654
-
655
- ## Positioning
656
-
657
- SkillBoard is not a replacement for installers such as `skillshare` or package
658
- managers such as APM. It is the governance layer above them: it decides what is
659
- active, what is blocked, and what a user should inspect before changing the skill
660
- set.
661
-
662
- See [docs/install.md](docs/install.md) for install and bootstrap details.
663
-
664
- See [docs/user-flow.md](docs/user-flow.md),
665
- [docs/positioning.md](docs/positioning.md), and
666
- [docs/policy-model.md](docs/policy-model.md). See
667
- [docs/adapters.md](docs/adapters.md) for the source-profile adapter model, and
668
- [docs/versioning.md](docs/versioning.md) for release, schema, profile, workflow,
669
- and lockfile versioning rules.
125
+ - Inventory that separates installed skills from callable skills.
126
+ - Workflow-scoped policy instead of global "everything is active" behavior.
127
+ - `brief`, `route`, `can-use`, and `guard use` surfaces for AI-mediated selection and availability.
128
+ - Workflow conflict checks so overlapping skills cannot quietly degrade an answer.
129
+ - Action cards that apply one approved policy change, then re-resolve state.
130
+ - Source and install-unit review for plugins, hooks, MCP servers, harnesses,
131
+ commands, LSPs, and package-manager dependencies.
132
+ - Impact, reconcile, rollout, and dashboard output before cleanup or migration.
133
+ - Manual skill variant lifecycle for relationships such as `a -> claude.a`,
134
+ with draft, approval, drift, and reset checkpoints.
135
+
136
+ SkillBoard is deny-by-default. Installing a skill does not make it automatically
137
+ callable. A workflow, source, and invocation decision must make that explicit.
138
+ For action cards, use `skillboard apply-action <action-id> --yes --json`; raw
139
+ `skillboard hook install ... --dry-run --json` previews are underlying manual
140
+ operator detail, not the primary action-card flow.
141
+
142
+ ## What Works Today
143
+
144
+ SkillBoard currently supports:
145
+
146
+ - YAML policy config parsing and semantic checks.
147
+ - Recursive `SKILL.md` discovery.
148
+ - Source-profile import for cloned or installed skill repositories.
149
+ - Agent runtime install-unit inventory when manifest metadata is available.
150
+ - Markdown dashboard and machine-readable brief generation.
151
+ - Disable-impact analysis and reconcile plans.
152
+ - Workflow-scoped activation, blocking, preference, and guard checks.
153
+ - Action-card approval and post-apply brief refresh.
154
+ - Manual variant registration, fork, status, approval, and reset.
155
+
156
+ For the full command catalog and config shape, use
157
+ [docs/reference.md](docs/reference.md).
158
+
159
+ ## Tested Value Proof
160
+
161
+ A raw list says `matt.tdd` is active. SkillBoard says the same workflow has 0
162
+ usable skills because policy health fails.
163
+
164
+ | Question | Raw list | SkillBoard brief |
165
+ | --- | --- | --- |
166
+ | Does `matt.tdd` look enabled? | `active`, `workflow-auto` | blocked by policy health |
167
+ | Can the agent safely use anything now? | not answered | 0 usable skills, 8 blocked skills |
168
+ | Why? | not answered | `Policy errors: 2`, `Policy warnings: 1` |
169
+
170
+ The action-card flow is tested too. Applying
171
+ `activate-skill:anthropic.docx` in a temporary project changes the next brief
172
+ from 2 usable skills to 3 and moves `anthropic.docx` into the manual-allowed
173
+ set. SkillBoard applies one approved change, then re-resolves the next state.
174
+
175
+ Run the proof with:
176
+
177
+ ```bash
178
+ node --test test/readme-value-proof.test.mjs
179
+ ```
180
+
181
+ See the [full reproducible proof](docs/value-proof.md) for exact commands,
182
+ fixtures, and assertions.
183
+
184
+ ## Where To Go Next
185
+
186
+ - [AI skill routing goal](docs/ai-skill-routing-goal.md)
187
+ - [Install and bootstrap](docs/install.md)
188
+ - [First-time control flow](docs/user-flow.md)
189
+ - [Capability routing](docs/routing.md)
190
+ - [Command and config reference](docs/reference.md)
191
+ - [Policy model](docs/policy-model.md)
192
+ - [Capabilities](docs/capabilities.md)
193
+ - [Skill variant lifecycle](docs/variant-lifecycle.md)
194
+ - [Value proof](docs/value-proof.md)
195
+ - [Source-profile adapters](docs/adapters.md)
196
+ - [Rollout runbook](docs/rollout-runbook.md)
197
+ - [Versioning and release rules](docs/versioning.md)
198
+ - [Contributing](CONTRIBUTING.md)