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
@@ -1,94 +1,94 @@
1
- # Positioning
2
-
3
- ## Problem
4
-
5
- AI agent skills are easy to install but hard to govern.
6
-
7
- Users lose confidence when they cannot tell:
8
-
9
- - which installed skills are active,
10
- - which skills may be invoked automatically,
11
- - which workflows depend on a skill,
12
- - which similar skills compete silently,
13
- - whether removing a skill breaks a hidden workflow.
14
- - what to do after new skills or harnesses appear.
15
- - how to migrate workflows when a harness disappears.
16
- - which plugin, marketplace, package, or installer introduced a component.
17
-
18
- ## Product Definition
19
-
20
- SkillBoard is a workflow-scoped skill control board with a reconciler.
21
-
22
- It is not primarily a skill catalog. It is an operations layer that turns a
23
- skill repository into a visible, policy-checked system. Users define intent and
24
- policy; SkillBoard interprets drift between desired state and actual state.
25
-
26
- ## Adjacent Tools
27
-
28
- - `skillshare`: syncs skills across many agent targets.
29
- - Microsoft APM: reproduces agent context from `apm.yml` and lockfiles.
30
- - SkillGate/SkillGuard/SkillScope-style tools: scan, permissions, and security
31
- risk.
32
- - SkillPilot/skill routers: pick relevant skills before inference.
33
-
34
- SkillBoard complements those tools by making invocation state, workflow impact,
35
- and migration decisions explicit.
36
-
37
- ## Runtime Primitive Model
38
-
39
- SkillBoard should not depend on one installer shape. The likely ecosystem
40
- direction is manifest plus scope plus bundle plus cache plus enable/disable plus
41
- lockfile plus audit. That means the control plane needs a parent abstraction for
42
- the thing that was installed.
43
-
44
- The parent is an install unit. Skills and harnesses can then be child components
45
- of a `plugin`, `marketplace`, `package-manager-dependency`, `harness`,
46
- `mcp-server`, `hook`, `agent`, or `lsp` unit. LazyCodex-style installers should
47
- therefore show up as user-global harness/plugin bundles that provide commands,
48
- skills, MCP integrations, hooks, and config changes, not as loose skills mixed
49
- into the skill list.
50
-
51
- Users should be able to plug in workflow/harness bundles, then add only a small
52
- number of personal global meta skills. Those global meta skills are for control
53
- tasks such as routing, impact analysis, registry maintenance, and verification.
54
- Everything else should remain scoped to a workflow or owned by its parent install
55
- unit. This is how SkillBoard keeps skill count growth from becoming routing
56
- complexity.
57
-
58
- The multi-source fixture exercises this product claim with one private skill
59
- source plus five external repositories: a personal skill folder, a workflow skill
60
- pack, a harness bundle, a standard Agent Skills repository, a multi-harness
61
- plugin marketplace, and a catalog-style marketplace.
62
-
63
- Import adapters should follow the same principle. Popular repositories can have
64
- bundled source profiles, but the import logic should not branch on repository
65
- names. The stable contract is the normalized install-unit model, not a hardcoded
66
- adapter per source.
67
-
68
- ## Wedge
69
-
70
- The first useful wedge is:
71
-
72
- 1. read an existing skill folder,
73
- 2. read a strong workflow policy config,
74
- 3. quarantine newly discovered skills,
75
- 4. show active/manual/blocked state,
76
- 5. fail CI when policy references drift,
77
- 6. show disable impact before cleanup,
78
- 7. produce a reconcile plan when skills or harnesses change.
79
- 8. show the install unit that introduced a skill, harness, hook, MCP server, or
80
- command.
81
-
82
- That is enough to make adding and removing skills feel safer.
83
-
84
- ## Reconciler Promise
85
-
86
- Control should not mean constant manual work. The reconciler should handle the
87
- obvious safe defaults and only ask for important decisions:
88
-
89
- - new skills: quarantine, map likely capability, ask whether to approve;
90
- - removed skills: show affected workflows and fallback capabilities;
91
- - changed harnesses: show missing commands and migration hints;
92
- - new harnesses: disable by default until explicitly assigned;
93
- - duplicate skills: group by capability and recommend a canonical
94
- implementation.
1
+ # Positioning
2
+
3
+ ## Problem
4
+
5
+ AI agent skills are easy to install but hard to govern.
6
+
7
+ Users lose confidence when they cannot tell:
8
+
9
+ - which installed skills are active,
10
+ - which skills may be invoked automatically,
11
+ - which workflows depend on a skill,
12
+ - which similar skills compete silently,
13
+ - whether removing a skill breaks a hidden workflow.
14
+ - what to do after new skills or harnesses appear.
15
+ - how to migrate workflows when a harness disappears.
16
+ - which plugin, marketplace, package, or installer introduced a component.
17
+
18
+ ## Product Definition
19
+
20
+ SkillBoard is a workflow-scoped skill control board with a reconciler.
21
+
22
+ It is not primarily a skill catalog. It is an operations layer that turns a
23
+ skill repository into a visible, policy-checked system. Users define intent and
24
+ policy; SkillBoard interprets drift between desired state and actual state.
25
+
26
+ ## Adjacent Tools
27
+
28
+ - `skillshare`: syncs skills across many agent targets.
29
+ - Microsoft APM: reproduces agent context from `apm.yml` and lockfiles.
30
+ - SkillGate/SkillGuard/SkillScope-style tools: scan, permissions, and security
31
+ risk.
32
+ - SkillPilot/skill routers: pick relevant skills before inference.
33
+
34
+ SkillBoard complements those tools by making invocation state, workflow impact,
35
+ and migration decisions explicit.
36
+
37
+ ## Runtime Primitive Model
38
+
39
+ SkillBoard should not depend on one installer shape. The likely ecosystem
40
+ direction is manifest plus scope plus bundle plus cache plus enable/disable plus
41
+ lockfile plus audit. That means the control plane needs a parent abstraction for
42
+ the thing that was installed.
43
+
44
+ The parent is an install unit. Skills and harnesses can then be child components
45
+ of a `plugin`, `marketplace`, `package-manager-dependency`, `harness`,
46
+ `mcp-server`, `hook`, `agent`, or `lsp` unit. LazyCodex-style installers should
47
+ therefore show up as user-global harness/plugin bundles that provide commands,
48
+ skills, MCP integrations, hooks, and config changes, not as loose skills mixed
49
+ into the skill list.
50
+
51
+ Users should be able to plug in workflow/harness bundles, then add only a small
52
+ number of personal global meta skills. Those global meta skills are for control
53
+ tasks such as routing, impact analysis, registry maintenance, and verification.
54
+ Everything else should remain scoped to a workflow or owned by its parent install
55
+ unit. This is how SkillBoard keeps skill count growth from becoming routing
56
+ complexity.
57
+
58
+ The multi-source fixture exercises this product claim with one private skill
59
+ source plus five external repositories: a personal skill folder, a workflow skill
60
+ pack, a harness bundle, a standard Agent Skills repository, a multi-harness
61
+ plugin marketplace, and a catalog-style marketplace.
62
+
63
+ Import adapters should follow the same principle. Popular repositories can have
64
+ bundled source profiles, but the import logic should not branch on repository
65
+ names. The stable contract is the normalized install-unit model, not a hardcoded
66
+ adapter per source.
67
+
68
+ ## Wedge
69
+
70
+ The first useful wedge is:
71
+
72
+ 1. read an existing skill folder,
73
+ 2. read a strong workflow policy config,
74
+ 3. quarantine newly discovered skills,
75
+ 4. show active/manual/blocked state,
76
+ 5. fail CI when policy references drift,
77
+ 6. show disable impact before cleanup,
78
+ 7. produce a reconcile plan when skills or harnesses change.
79
+ 8. show the install unit that introduced a skill, harness, hook, MCP server, or
80
+ command.
81
+
82
+ That is enough to make adding and removing skills feel safer.
83
+
84
+ ## Reconciler Promise
85
+
86
+ Control should not mean constant manual work. The reconciler should handle the
87
+ obvious safe defaults and only ask for important decisions:
88
+
89
+ - new skills: quarantine, map likely capability, ask whether to approve;
90
+ - removed skills: show affected workflows and fallback capabilities;
91
+ - changed harnesses: show missing commands and migration hints;
92
+ - new harnesses: disable by default until explicitly assigned;
93
+ - duplicate skills: group by capability and recommend a canonical
94
+ implementation.
@@ -0,0 +1,349 @@
1
+ # SkillBoard Reference
2
+
3
+ This is the operator reference for users who already understand the basic
4
+ SkillBoard flow and need exact command, config, and lifecycle details.
5
+
6
+ For installation and bootstrap commands, start with [install.md](install.md).
7
+ For a guided first workflow, use [user-flow.md](user-flow.md).
8
+
9
+ ## Command Forms
10
+
11
+ Most examples use the global `skillboard` binary. When running from a clone
12
+ without `npm install -g agent-skillboard`, replace `skillboard ` with
13
+ `node bin/skillboard.mjs ` and run from the repository root.
14
+
15
+ The npm package is `agent-skillboard`; the executable remains `skillboard`.
16
+ For CI or scripts, the explicit package form avoids binary-name ambiguity:
17
+
18
+ ```bash
19
+ npx --yes --package agent-skillboard skillboard init
20
+ npx --yes --package agent-skillboard skillboard doctor --summary
21
+ npx --yes --package agent-skillboard skillboard brief --workflow <workflow-from-init>
22
+ npm exec --yes --package agent-skillboard -- skillboard init
23
+ npm exec --yes --package agent-skillboard -- skillboard doctor --summary
24
+ npm exec --yes --package agent-skillboard -- skillboard brief --workflow <workflow-from-init>
25
+ ```
26
+
27
+ If `init` does not print a workflow, run the unscoped `brief` command it prints
28
+ instead.
29
+
30
+ Unreleased GitHub builds are available when intentionally testing repository
31
+ state before the next npm release:
32
+
33
+ ```bash
34
+ npx --yes --package github:NyXXiR/skillboard skillboard init
35
+ npx --yes --package github:NyXXiR/skillboard skillboard doctor --summary
36
+ npx --yes --package github:NyXXiR/skillboard skillboard brief --workflow <workflow-from-init>
37
+ ```
38
+
39
+ From a source clone:
40
+
41
+ ```bash
42
+ git clone https://github.com/NyXXiR/skillboard.git
43
+ cd skillboard
44
+ npm install
45
+ npm test
46
+ node bin/skillboard.mjs init --dir /path/to/your/project
47
+ node bin/skillboard.mjs doctor --dir /path/to/your/project --summary
48
+ node bin/skillboard.mjs brief --dir /path/to/your/project --workflow <workflow-from-init>
49
+ ```
50
+
51
+ ## Commands
52
+
53
+ ```bash
54
+ skillboard init [--dir <path>] [--scan-root <dir>[,<dir>]] [--no-scan-installed]
55
+ skillboard uninstall [--dir <path>] [--dry-run] [--remove-config|--reset-config] [--remove-reports] [--remove-hooks] [--keep-empty-dirs]
56
+ skillboard inventory refresh [--dir <path>] [--config <path>] [--scan-root <dir>[,<dir>]] [--dry-run] [--json]
57
+ skillboard inventory detect --unit <id> --config <path> [--install-output <path>] [--config-file a,b] [--source <value>] [--kind <kind>] [--scope <scope>] [--dry-run] [--json]
58
+ skillboard sources refresh [--dir <path>] [--config <path>] [--unit <id>[,<id>]] [--cache-dir <dir>] [--dry-run] [--json]
59
+ skillboard doctor [--dir <path>] [--config <path>] [--skills <dir>] [--verify] [--strict] [--json] [--summary]
60
+ skillboard status [--dir <path>] [--config <path>] [--skills <dir>] [--verify] [--strict] [--json] [--summary]
61
+ skillboard brief [--workflow <name>] [--intent <request>] [--dir <path>] [--config <path>] [--skills <dir>] [--include-actions] [--verbose] [--json]
62
+ skillboard apply-action <action-id> [--workflow <name>] [--dir <path>] [--config <path>] [--skills <dir>] [--dry-run] [--yes] [--allow-destructive] [--json]
63
+ skillboard import --profile <id-or-path> --source-root <dir> [--profile-dirs a,b] [--out <path>]
64
+ skillboard import --profile <id-or-path> --source-root <dir> --config <path> --merge [--replace] [--dry-run]
65
+ skillboard scan --config <path> --skills <dir>
66
+ skillboard check --config <path> --skills <dir>
67
+ skillboard list [skills|workflows|harnesses|install-units] --config <path> --skills <dir>
68
+ skillboard explain <skill-id> --config <path> --skills <dir>
69
+ skillboard route <intent> --workflow <name> --config <path> --skills <dir> [--json]
70
+ skillboard can-use <skill-id> --workflow <name> --config <path> --skills <dir>
71
+ skillboard guard use <skill-id> --workflow <name> --config <path> --skills <dir>
72
+ skillboard audit sources --config <path> --skills <dir> [--verify]
73
+ skillboard rollout [audit|plan|apply|rollback|report] [--dir <path>] [--config <path>] [--skills <dir>] [--transaction <id>] [--json]
74
+ skillboard hook install --workflow <name> --config <path> --skills <dir> [--out <path>] [--skillboard-bin <path>] [--dry-run] [--json]
75
+ skillboard lock write --config <path> --skills <dir> [--out <path>] [--replace] [--allow-unverified]
76
+ skillboard review install-unit <unit-id> [--trust-level trusted|reviewed|unreviewed|blocked] --config <path> --skills <dir>
77
+ skillboard add skill <skill-id> --path <relative-skill-path> --config <path> --skills <dir>
78
+ skillboard add workflow <workflow-name> --harness <harness-name> --config <path> --skills <dir> [--skill <id>[,<id>]]
79
+ skillboard add harness <harness-name> --config <path> --skills <dir> [--status <status>] [--command <cmd>[,<cmd>]]
80
+ skillboard variant add <variant-id> --from <base-id> --capability <name> --workflow <name> --config <path> --skills <dir> [--path <relative-skill-path>] [--mode manual-only|router-only|workflow-auto] [--category <name>] [--owner-install-unit <unit-id>] [--dry-run] [--json]
81
+ skillboard variant fork <variant-id> --from <base-id> --capability <name> --workflow <name> --path <relative-skill-path> --config <path> --skills <dir> [--adapted-for <label>] [--category <name>] [--owner-install-unit <unit-id>] [--dry-run] [--json]
82
+ skillboard variant status <variant-id> --config <path> --skills <dir> [--json]
83
+ skillboard variant approve <variant-id> --config <path> --skills <dir> [--mode manual-only|router-only|workflow-auto] [--dry-run] [--json]
84
+ skillboard variant reset <variant-id> --to-base|--to-approved --config <path> --skills <dir> [--yes] [--dry-run] [--mode manual-only|router-only|workflow-auto] [--json]
85
+ skillboard activate <skill-id> --workflow <name> --config <path> --skills <dir>
86
+ skillboard block <skill-id> --workflow <name> --config <path> --skills <dir>
87
+ skillboard quarantine <skill-id> --config <path> --skills <dir>
88
+ skillboard prefer <skill-id> --workflow <name> --capability <name> --config <path> --skills <dir>
89
+ skillboard remove skill <skill-id> --config <path> --skills <dir> [--force]
90
+ skillboard dashboard --config <path> --skills <dir> [--out <path>]
91
+ skillboard reconcile --config <path> --skills <dir> [--actual-harnesses a,b] [--out <path>]
92
+ skillboard impact disable <skill-id> --config <path> --skills <dir> [--out <path>] [--json]
93
+ ```
94
+
95
+ ## Capability Routing
96
+
97
+ For the normal AI-mediated flow, prefer `brief --intent`: it returns the current
98
+ availability brief plus a compact route recommendation in `assistant_guidance`.
99
+
100
+ ```bash
101
+ skillboard brief \
102
+ --intent "write tests before implementation" \
103
+ --workflow codex-night-workflow \
104
+ --config skillboard.config.yaml \
105
+ --skills skills \
106
+ --json
107
+ ```
108
+
109
+ `route` is a read-only recommendation surface for AI/automation. It maps a
110
+ normal user request to the best matching workflow capability or workflow-bound
111
+ skill metadata, then returns the recommended skill, fallback skills, matched
112
+ terms, recommendation reason, and the guard command that must still pass before
113
+ invocation.
114
+
115
+ ```bash
116
+ skillboard route "write tests before implementation" \
117
+ --workflow codex-night-workflow \
118
+ --config skillboard.config.yaml \
119
+ --skills skills \
120
+ --json
121
+ ```
122
+
123
+ Routing first uses declared capability names and workflow bindings. If a fresh
124
+ project has workflow skills but no capability catalog yet, it can fall back to
125
+ workflow-bound skill id, path, category, `SKILL.md` name, and `SKILL.md`
126
+ description metadata. It does not inspect or semantically rank `SKILL.md` bodies,
127
+ and it does not invoke the skill. The JSON payload includes `match_source`,
128
+ `matched_terms`, and `recommendation_reason` so the AI can explain why it chose
129
+ or declined a skill without inventing rationale.
130
+ Recommended and fallback skills are limited to the selected workflow's active,
131
+ required, or global-auto bindings rather than every global alternative in the
132
+ capability catalog. When nothing matches, the result keeps
133
+ `matched_capability: null` and `recommended_skill: null`, then returns possible
134
+ workflow skills so the AI can ask a clarifying question. When a guard allows the
135
+ recommended skill, the AI should disclose the skill at start and completion
136
+ instead of asking for another approval. That disclosure is an audit trace, not a
137
+ permission prompt. When an allowed fallback is selected because the preferred
138
+ skill is denied, `post_use_policy_suggestion` tells the AI to ask after the task
139
+ whether to remember that fallback as the preferred workflow policy.
140
+
141
+ ## Config Shape
142
+
143
+ ```yaml
144
+ version: 1
145
+
146
+ defaults:
147
+ invocation_policy: deny-by-default
148
+ allow_model_invocation: false
149
+ require_explicit_workflow: true
150
+
151
+ skills:
152
+ matt.tdd:
153
+ path: tdd
154
+ status: active
155
+ invocation: workflow-auto
156
+ exposure: exported
157
+ category: engineering
158
+ conflicts_with:
159
+ - meerkat.no-tests-please
160
+
161
+ user.workflow-router:
162
+ path: user/workflow-router
163
+ status: active
164
+ invocation: global-auto
165
+ exposure: global-meta
166
+ category: meta
167
+
168
+ capabilities:
169
+ test-first-implementation:
170
+ canonical: matt.tdd
171
+ alternatives:
172
+ - meerkat.test-first-implementation
173
+ default_policy: workflow-auto
174
+
175
+ harnesses:
176
+ codex:
177
+ status: primary
178
+ workflows:
179
+ - codex-night-workflow
180
+
181
+ install_units:
182
+ lazycodex.omo:
183
+ kind: harness
184
+ source: npx lazycodex-ai install
185
+ scope: user-global
186
+ manifest_path: ~/.codex/plugins/cache/sisyphuslabs/omo/plugin.json
187
+ cache_path: ~/.codex/plugins/cache/sisyphuslabs/omo
188
+ provided_components:
189
+ - skills
190
+ - commands
191
+ - mcp-server
192
+ - hook
193
+ components:
194
+ skills:
195
+ - lazycodex.ulw-plan
196
+ commands:
197
+ - $ulw-plan
198
+ - $start-work
199
+ hooks:
200
+ - post-tool-use
201
+ mcp_servers:
202
+ - omo-docs
203
+ modified_config_files:
204
+ - ~/.codex/config.toml
205
+ - ~/.local/bin
206
+ auto_update: false
207
+ enabled: true
208
+ workflow_dependencies:
209
+ - large-refactor-workflow
210
+ permission_risk: high
211
+ rollback: manual
212
+
213
+ workflows:
214
+ codex-night-workflow:
215
+ harness: codex
216
+ active_skills:
217
+ - matt.tdd
218
+ blocked_skills: []
219
+ required_capabilities:
220
+ test-first-implementation:
221
+ preferred: matt.tdd
222
+ fallback:
223
+ - meerkat.test-first-implementation
224
+ policy: workflow-auto
225
+ ```
226
+
227
+ `conflicts_with` is runtime policy, not documentation-only metadata. A workflow
228
+ cannot keep both sides selectable unless one side is explicitly blocked in that
229
+ workflow. Conflict failures appear in policy errors, guard reasons, brief
230
+ blocking reasons, and impact reports. `impact disable --json` includes:
231
+
232
+ - `conflictingSkills`: declared direct or reverse conflicts for the target
233
+ skill.
234
+ - `activeConflicts`: workflow-scoped conflict pairs currently involving the
235
+ target skill.
236
+
237
+ ## Source Profiles
238
+
239
+ `skillboard import` reads a source profile and emits a YAML fragment containing
240
+ governed `skills` plus their owning `install_units`.
241
+
242
+ ```bash
243
+ skillboard import \
244
+ --profile github.mattpocock.skills \
245
+ --source-root /path/to/cloned-or-installed/repo \
246
+ --out .skillboard/reports/import-fragment.yaml
247
+ ```
248
+
249
+ To preview a direct apply path, pass `--merge --config --dry-run`. Merge is
250
+ non-destructive by default: if a skill or install-unit id already exists, the
251
+ command fails and leaves the config unchanged. Use `--replace` only when you
252
+ intend to overwrite existing entries, and drop `--dry-run` only after reviewing
253
+ the reported change plan.
254
+
255
+ Built-in profiles are shipped as YAML data under `profiles/`, including:
256
+
257
+ - `github.mattpocock.skills`
258
+ - `github.code-yeongyu.oh-my-openagent`
259
+ - `github.anthropics.skills`
260
+ - `github.wshobson.agents`
261
+ - `github.voltagent.awesome-agent-skills`
262
+
263
+ Project-specific profiles can live under `.skillboard/profiles/` and be passed
264
+ by path:
265
+
266
+ ```bash
267
+ skillboard import --profile .skillboard/profiles/my-source.yaml --source-root /path/to/repo
268
+ ```
269
+
270
+ ## Invocation Modes
271
+
272
+ - `manual-only`: user must explicitly ask for it.
273
+ - `router-only`: a router or orchestrator may select it after policy checks.
274
+ - `workflow-auto`: model invocation is allowed only inside listed workflows.
275
+ - `global-auto`: allowed globally; use sparingly and only for `global-meta`
276
+ control skills.
277
+ - `blocked`: installed but not callable until policy or provenance changes.
278
+ - `deprecated`: kept for history, not for new use.
279
+
280
+ Skill exposure values:
281
+
282
+ - `exported`: centrally governed skill that may serve shared workflows or
283
+ canonical capabilities.
284
+ - `global-meta`: intentionally global control skill, such as a router, impact
285
+ analyzer, or verification gate.
286
+ - `unit-managed`: child component supplied by a parent install unit or harness
287
+ bundle.
288
+ - `private`: workflow-internal implementation detail.
289
+
290
+ ## Reconciliation Model
291
+
292
+ SkillBoard compares desired state from config with actual state from discovered
293
+ `SKILL.md` files and detected harnesses.
294
+
295
+ - New skills become `quarantined` / `blocked` recommendations.
296
+ - Known capability matches are surfaced, but not auto-enabled.
297
+ - Removed harnesses report affected workflows, missing commands, and migration
298
+ recommendations.
299
+ - Newly detected harnesses are disabled until workflows explicitly opt in.
300
+ - If actual harness inventory is not provided, reconcile emits a warning instead
301
+ of silently assuming harness state.
302
+
303
+ ## Install Units
304
+
305
+ SkillBoard should not assume that every runtime change is a standalone skill.
306
+ Modern agent environments increasingly install packaged primitives:
307
+
308
+ - `skill`
309
+ - `plugin`
310
+ - `marketplace`
311
+ - `package-manager-dependency`
312
+ - `harness`
313
+ - `mcp-server`
314
+ - `hook`
315
+ - `agent`
316
+ - `lsp`
317
+
318
+ An install unit records source, scope, manifest/cache paths, provided
319
+ components, modified config files, enablement, workflow dependencies,
320
+ permission risk, trust level, digest/signature pins, and rollback shape.
321
+ LazyCodex-style setups fit this model as user-global harness/plugin bundles
322
+ that provide commands, skills, MCP integrations, hooks, and config.
323
+
324
+ ## Variant Commands
325
+
326
+ Use `skillboard variant add claude.a --from a --capability task-review
327
+ --workflow claude-workflow --path claude/a ...` to record an explicit,
328
+ user-approved `a -> claude.a` variant.
329
+
330
+ For a reviewed manual adaptation lifecycle, use `skillboard variant fork
331
+ <variant-id>` to create draft metadata and raw snapshot records, edit the
332
+ variant `SKILL.md` by hand, inspect `skillboard variant status <variant-id>`
333
+ for `variant.status` and computed drift, then promote with `skillboard variant
334
+ approve <variant-id>` or restore with `skillboard variant reset <variant-id>
335
+ --to-base|--to-approved`.
336
+
337
+ SkillBoard records the relationship and policy only; it does not convert skill
338
+ bodies, does not rewrite skill bodies, and does not guarantee semantic
339
+ equivalence of skill bodies. See [variant-lifecycle.md](variant-lifecycle.md)
340
+ for the full lifecycle guide.
341
+
342
+ ## Related Runbooks
343
+
344
+ - [install.md](install.md): install, init, doctor, bridge, refresh, and uninstall.
345
+ - [user-flow.md](user-flow.md): first-time skill governance workflow.
346
+ - [policy-model.md](policy-model.md): policy states, invocation modes, and install units.
347
+ - [capabilities.md](capabilities.md): capability catalog and workflow resolution.
348
+ - [rollout-runbook.md](rollout-runbook.md): rollout audit, apply, report, and rollback.
349
+ - [versioning.md](versioning.md): release, schema, profile, workflow, and lockfile versioning.
@@ -0,0 +1,85 @@
1
+ # Capability Routing
2
+
3
+ Capability routing helps an AI choose a skill for the user's current request
4
+ without making the user learn SkillBoard commands.
5
+
6
+ For the normal AI-mediated flow, prefer `brief --intent`. It returns the
7
+ availability brief and the routing result together:
8
+
9
+ ```bash
10
+ skillboard brief \
11
+ --intent "write tests before implementation" \
12
+ --workflow codex-night-workflow \
13
+ --config skillboard.config.yaml \
14
+ --skills skills \
15
+ --json
16
+ ```
17
+
18
+ Read `assistant_guidance.route` from the JSON output. It includes:
19
+
20
+ - `matched_capability`
21
+ - `match_source`
22
+ - `confidence`
23
+ - `matched_terms`
24
+ - `recommendation_reason`
25
+ - `recommended_skill`
26
+ - `fallback_skills`
27
+ - `route_candidates`
28
+ - `post_use_policy_suggestion`
29
+ - `guard_command`
30
+ - `usage_disclosure`
31
+
32
+ When `guard_allowed` is true, the AI should run the guard automatically before
33
+ using the skill. It should not ask for another approval. It should disclose the
34
+ skill at the start and at completion:
35
+
36
+ ```text
37
+ I will use <skill-id> for this request.
38
+ I used <skill-id> for this request.
39
+ ```
40
+
41
+ When several skills match, inspect `route_candidates` before acting. Each entry
42
+ shows the candidate skill, whether it was selected, whether the guard currently
43
+ allows it, and the guard reason when it is denied. This is the field that tells
44
+ an AI why a preferred skill was skipped and an allowed fallback was selected.
45
+
46
+ When routing is safe but policy learning would reduce future ambiguity,
47
+ SkillBoard may return `post_use_policy_suggestion`. This includes cases where a
48
+ preferred skill is denied and an allowed fallback is selected, or where multiple
49
+ allowed workflow-bound skills match and one allowed skill is selected
50
+ deterministically. The AI should keep the task moving with the allowed routed
51
+ skill, then ask after completion whether to remember that skill as the preferred
52
+ workflow policy. The suggested policy command is informational until the user
53
+ confirms it.
54
+
55
+ Use `route` directly when an automation layer only needs the recommendation
56
+ payload:
57
+
58
+ ```bash
59
+ skillboard route "write tests before implementation" \
60
+ --workflow codex-night-workflow \
61
+ --config skillboard.config.yaml \
62
+ --skills skills \
63
+ --json
64
+ ```
65
+
66
+ Routing first matches declared workflow capabilities. If the workflow has skill
67
+ bindings but no matching capability, it can fall back to workflow-bound skill
68
+ metadata such as id, path, category, `SKILL.md` name, and `SKILL.md`
69
+ description.
70
+
71
+ Routing does not invoke the skill. The final boundary is still:
72
+
73
+ ```bash
74
+ skillboard guard use <skill-id> \
75
+ --workflow codex-night-workflow \
76
+ --config skillboard.config.yaml \
77
+ --skills skills
78
+ ```
79
+
80
+ If no capability or workflow-bound skill matches, SkillBoard returns
81
+ `recommended_skill: null`. Ask a clarifying question before choosing a skill.
82
+
83
+ See [Value proof](value-proof.md) for an executable route example that selects
84
+ `matt.tdd`, returns `private.tdd-work-continuity` as fallback, and verifies the
85
+ guard and disclosure fields.