agent-skillboard 0.1.0
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.
- package/CONTRIBUTING.md +83 -0
- package/LICENSE +21 -0
- package/README.md +645 -0
- package/bin/skillboard.mjs +4 -0
- package/docs/adapters.md +127 -0
- package/docs/capabilities.md +107 -0
- package/docs/install.md +346 -0
- package/docs/plans/20260625-080025-skillboard-mvp-review.md +189 -0
- package/docs/plans/README.md +20 -0
- package/docs/policy-model.md +251 -0
- package/docs/positioning.md +94 -0
- package/docs/profiles.md +166 -0
- package/docs/rollout-runbook.md +60 -0
- package/docs/user-flow.md +231 -0
- package/docs/versioning.md +201 -0
- package/examples/multi-source-skills/anthropic/docx/SKILL.md +8 -0
- package/examples/multi-source-skills/anthropic/skill-creator/SKILL.md +8 -0
- package/examples/multi-source-skills/matt/grill-me/SKILL.md +8 -0
- package/examples/multi-source-skills/matt/tdd/SKILL.md +8 -0
- package/examples/multi-source-skills/omo/review-work/SKILL.md +8 -0
- package/examples/multi-source-skills/omo/ulw-plan/SKILL.md +8 -0
- package/examples/multi-source-skills/private/tdd-work-continuity/SKILL.md +8 -0
- package/examples/multi-source-skills/private/workflow-router/SKILL.md +8 -0
- package/examples/multi-source-skills/wshobson/python-testing/SKILL.md +8 -0
- package/examples/multi-source-skills/wshobson/security-review/SKILL.md +8 -0
- package/examples/multi-source.config.yaml +271 -0
- package/examples/skillboard.config.yaml +194 -0
- package/examples/skills/grill-me/SKILL.md +9 -0
- package/examples/skills/grill-with-docs/SKILL.md +9 -0
- package/examples/skills/requirement-intake/SKILL.md +9 -0
- package/examples/skills/tdd/SKILL.md +8 -0
- package/package.json +58 -0
- package/profiles/anthropics-skills.yaml +17 -0
- package/profiles/mattpocock-skills.yaml +26 -0
- package/profiles/oh-my-openagent.yaml +32 -0
- package/profiles/voltagent-awesome-agent-skills.yaml +18 -0
- package/profiles/wshobson-agents.yaml +19 -0
- package/src/advisor/action-core.mjs +74 -0
- package/src/advisor/actions.mjs +256 -0
- package/src/advisor/application-commands.mjs +59 -0
- package/src/advisor/apply-action.mjs +183 -0
- package/src/advisor/schema.mjs +112 -0
- package/src/advisor/setup-actions.mjs +42 -0
- package/src/advisor/skills.mjs +191 -0
- package/src/advisor/sort.mjs +15 -0
- package/src/advisor/sources.mjs +160 -0
- package/src/advisor/trust-policy.mjs +65 -0
- package/src/advisor/workflow.mjs +41 -0
- package/src/advisor.mjs +134 -0
- package/src/agent-inventory-platforms.mjs +100 -0
- package/src/agent-inventory.mjs +804 -0
- package/src/brief-cli.mjs +40 -0
- package/src/brief-renderer.mjs +362 -0
- package/src/change-plan.mjs +169 -0
- package/src/cli.mjs +1171 -0
- package/src/config-helpers.mjs +72 -0
- package/src/control/can-use-guard.mjs +91 -0
- package/src/control/config-write.mjs +163 -0
- package/src/control/skill-crud.mjs +394 -0
- package/src/control/source-trust.mjs +161 -0
- package/src/control/workflow-crud.mjs +104 -0
- package/src/control.mjs +197 -0
- package/src/doctor.mjs +299 -0
- package/src/domain/constants.mjs +47 -0
- package/src/domain/indexes.mjs +29 -0
- package/src/domain/rules/capabilities.mjs +33 -0
- package/src/domain/rules/harnesses.mjs +16 -0
- package/src/domain/rules/install-units.mjs +95 -0
- package/src/domain/rules/skills.mjs +105 -0
- package/src/domain/rules/workflows.mjs +105 -0
- package/src/domain/skill-state-matrix.mjs +79 -0
- package/src/domain/source-classes.mjs +99 -0
- package/src/hook-plan.mjs +152 -0
- package/src/impact.mjs +41 -0
- package/src/index.mjs +82 -0
- package/src/init.mjs +136 -0
- package/src/install-output-detector.mjs +337 -0
- package/src/install-units.mjs +62 -0
- package/src/inventory-refresh.mjs +45 -0
- package/src/lifecycle-cli.mjs +166 -0
- package/src/lifecycle-content.mjs +87 -0
- package/src/policy.mjs +42 -0
- package/src/reconcile.mjs +111 -0
- package/src/report.mjs +151 -0
- package/src/review.mjs +88 -0
- package/src/rollout.mjs +453 -0
- package/src/skill-paths.mjs +17 -0
- package/src/source-cache.mjs +178 -0
- package/src/source-profile-loader.mjs +160 -0
- package/src/source-profiles.mjs +299 -0
- package/src/source-verification.mjs +252 -0
- package/src/uninstall.mjs +258 -0
- package/src/workspace.mjs +219 -0
- package/tsconfig.lsp.json +15 -0
package/README.md
ADDED
|
@@ -0,0 +1,645 @@
|
|
|
1
|
+
# SkillBoard
|
|
2
|
+
|
|
3
|
+
Know which agent skills can run before they run.
|
|
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:
|
|
9
|
+
|
|
10
|
+
> Which skills can run in this workflow, why, and what breaks if I remove one?
|
|
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.
|
|
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>
|
|
21
|
+
|
|
22
|
+
## The Problem
|
|
23
|
+
|
|
24
|
+
You installed a few agent skill packs.
|
|
25
|
+
|
|
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:
|
|
29
|
+
|
|
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?
|
|
35
|
+
|
|
36
|
+
SkillBoard turns that mess into an explicit skill map.
|
|
37
|
+
|
|
38
|
+
## What SkillBoard Gives You
|
|
39
|
+
|
|
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.
|
|
47
|
+
|
|
48
|
+
## Demo
|
|
49
|
+
|
|
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:
|
|
60
|
+
|
|
61
|
+
```markdown
|
|
62
|
+
## Skills
|
|
63
|
+
|
|
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`
|
|
67
|
+
|
|
68
|
+
## Reconcile Plan
|
|
69
|
+
|
|
70
|
+
- quarantine new skills until a workflow explicitly opts in
|
|
71
|
+
- report workflows affected before a skill or harness is disabled
|
|
72
|
+
```
|
|
73
|
+
|
|
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
|
|
119
|
+
|
|
120
|
+
Run SkillBoard in the project you want to manage:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
npx agent-skillboard init
|
|
124
|
+
npx agent-skillboard brief
|
|
125
|
+
npx agent-skillboard doctor --summary
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
The first command creates the local control-plane files for the current
|
|
129
|
+
directory. To manage another project from elsewhere, pass `--dir`:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
npx agent-skillboard init --dir /path/to/your/project
|
|
133
|
+
npx agent-skillboard brief --dir /path/to/your/project
|
|
134
|
+
npx agent-skillboard doctor --dir /path/to/your/project --summary
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
SkillBoard does not make installed skills automatically callable. It imports
|
|
138
|
+
trusted local skills as manual-only and keeps runtime/plugin skills quarantined
|
|
139
|
+
until reviewed.
|
|
140
|
+
|
|
141
|
+
For CI or scripts, the explicit package form avoids ambiguity about the binary
|
|
142
|
+
name:
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
npx --yes --package agent-skillboard skillboard init
|
|
146
|
+
npm exec --yes --package agent-skillboard -- skillboard init
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Then check the project:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
npx --yes --package agent-skillboard skillboard doctor
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
For repeated local use, install the CLI globally:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
npm install -g agent-skillboard
|
|
159
|
+
skillboard init
|
|
160
|
+
skillboard doctor
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Unreleased GitHub builds are available for testing changes before npm release:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
npx --yes --package github:NyXXiR/skillboard skillboard init
|
|
167
|
+
npx --yes --package github:NyXXiR/skillboard skillboard brief
|
|
168
|
+
npx --yes --package github:NyXXiR/skillboard skillboard doctor --summary
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
For development from a clone, run the source-tree CLI:
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
git clone https://github.com/NyXXiR/skillboard.git
|
|
175
|
+
cd skillboard
|
|
176
|
+
npm install
|
|
177
|
+
npm test
|
|
178
|
+
node bin/skillboard.mjs init --dir /path/to/your/project
|
|
179
|
+
node bin/skillboard.mjs brief --dir /path/to/your/project
|
|
180
|
+
node bin/skillboard.mjs doctor --dir /path/to/your/project --summary
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Most examples below use the global or npm-exec `skillboard` command. When
|
|
184
|
+
running from a clone, replace `skillboard ` with `node bin/skillboard.mjs `.
|
|
185
|
+
|
|
186
|
+
Useful first commands:
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
skillboard inventory refresh --dry-run
|
|
190
|
+
skillboard import --profile github.mattpocock.skills --source-root /path/to/mattpocock-skills
|
|
191
|
+
skillboard import --profile github.mattpocock.skills --source-root /path/to/mattpocock-skills --config skillboard.config.yaml --merge --dry-run
|
|
192
|
+
skillboard check --config skillboard.config.yaml --skills skills
|
|
193
|
+
skillboard rollout audit --config skillboard.config.yaml --skills skills --json
|
|
194
|
+
skillboard rollout plan --config skillboard.config.yaml --skills skills --json
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
`skillboard init` creates `skillboard.config.yaml`, `skills/`,
|
|
198
|
+
`.skillboard/reports/`, `.skillboard/profiles/`, `AGENTS.md`, and `CLAUDE.md`.
|
|
199
|
+
It also scans known local agent skill roots, including Codex user/system skills,
|
|
200
|
+
Codex plugin-cache manifests, Claude user skills, Hermes user skills, and Hermes
|
|
201
|
+
profile skills under `.hermes/profiles/*/skills`. Trusted user-local skills are
|
|
202
|
+
imported as `status: active` with `invocation: manual-only` and attached to a
|
|
203
|
+
generated local manual workflow when the project has no workflow metadata yet,
|
|
204
|
+
so a first-time user can immediately use their own manual skills through
|
|
205
|
+
`can-use` and guard checks without receiving legacy-state warning noise. System,
|
|
206
|
+
plugin, and other runtime-supplied skills stay `quarantined` / `blocked`; plugin
|
|
207
|
+
hooks, MCP servers, commands, and modified config files are attached to the
|
|
208
|
+
owning install unit for review. The agent bridge files tell Codex-style and
|
|
209
|
+
Claude Code agents to use `skillboard.config.yaml` as the control-plane source
|
|
210
|
+
of truth instead of treating every installed `SKILL.md` as active.
|
|
211
|
+
|
|
212
|
+
When you ask an agent "what skills can you use?", the bridge tells it to run
|
|
213
|
+
`skillboard brief --json` before answering. The brief is designed for
|
|
214
|
+
AI-mediated use without becoming another policy engine: it summarizes "What
|
|
215
|
+
your AI can use now", what needs your decision, what is blocked for safety, and
|
|
216
|
+
which change suggestions are available as action cards. Reviewable items should
|
|
217
|
+
feel like a short decision queue, not repeated blocked chores: once the source,
|
|
218
|
+
skill, and workflow decision is recorded, the same prompt should not return
|
|
219
|
+
unless that input changes. Before an agent applies a risk-bearing action card,
|
|
220
|
+
it should pick one current action id from the brief, ask for user confirmation,
|
|
221
|
+
then use
|
|
222
|
+
`skillboard apply-action <action-id> --yes --json` with the same config, skills,
|
|
223
|
+
and workflow options instead of running raw action-card shell text. After a
|
|
224
|
+
mutating `apply-action`, the agent should read the returned post-apply brief
|
|
225
|
+
before answering the next availability question or applying another action.
|
|
226
|
+
`apply-action` re-resolves the current brief, so stale action ids, cached action
|
|
227
|
+
cards, and multi-action batches are refused rather than replayed.
|
|
228
|
+
Immediately before a skill is actually invoked,
|
|
229
|
+
`skillboard guard use ...` remains the final gate.
|
|
230
|
+
The default text brief is compact for large skill sets: it keeps the summary,
|
|
231
|
+
top categories, next safe action, short section previews, and short action
|
|
232
|
+
summaries. Use `skillboard brief --verbose` when you need the full list or
|
|
233
|
+
full copyable command details.
|
|
234
|
+
|
|
235
|
+
Example: overloaded local agent profile
|
|
236
|
+
|
|
237
|
+
```text
|
|
238
|
+
Scanned installed agent skills: 128
|
|
239
|
+
AI can use now: 123 (0 automatic, 123 manual)
|
|
240
|
+
Needs your decision: 0
|
|
241
|
+
Blocked for safety: 5
|
|
242
|
+
Default brief: 54 lines
|
|
243
|
+
Verbose inventory: 244 lines
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
The point is not to install more skills. The point is to see that installed
|
|
247
|
+
does not mean automatically callable, local skills stay manual-only, and risky
|
|
248
|
+
runtime/plugin skills stay blocked until reviewed.
|
|
249
|
+
|
|
250
|
+
Run `skillboard doctor` after init to see config health, bridge status, managed
|
|
251
|
+
skill/install-unit counts, policy/source audit summaries, and the default
|
|
252
|
+
uninstall dry-run plan. The default doctor command passes when the workspace is
|
|
253
|
+
usable but has review-needed safe-mode warnings; add `--strict` when those
|
|
254
|
+
warnings should fail automation. Add `--json` when an agent or script needs the
|
|
255
|
+
same information as structured output. `skillboard status` returns the same
|
|
256
|
+
health report for users and agents that prefer a shorter command name.
|
|
257
|
+
|
|
258
|
+
See [docs/user-flow.md](docs/user-flow.md) for the first-time flow that covers
|
|
259
|
+
adding a local skill, inspecting its influence, activating/blocking it, and
|
|
260
|
+
removing SkillBoard policy references without deleting the underlying
|
|
261
|
+
`SKILL.md`.
|
|
262
|
+
|
|
263
|
+
Run `skillboard inventory refresh --dry-run` after installing a new local agent
|
|
264
|
+
skill pack, plugin, workflow bundle, or harness. It reuses the same scanner as
|
|
265
|
+
init and reports the text and YAML semantic config change plan. If the project
|
|
266
|
+
has no workflows yet, newly discovered trusted user-local skills are attached to
|
|
267
|
+
a generated manual workflow; if workflows already exist, those skills are kept as
|
|
268
|
+
manual-only candidates and the refresh prints a review note to attach them with
|
|
269
|
+
`skillboard add workflow`. Runtime or external skills remain out of automatic
|
|
270
|
+
use until the source and workflow decisions are recorded. Broken detector
|
|
271
|
+
entries or malformed `SKILL.md` files are reported as scan warnings instead of
|
|
272
|
+
aborting the whole refresh.
|
|
273
|
+
|
|
274
|
+
Add new local growth paths without hand-editing YAML:
|
|
275
|
+
|
|
276
|
+
```bash
|
|
277
|
+
skillboard add harness codex --config skillboard.config.yaml --skills skills
|
|
278
|
+
skillboard add workflow daily-workflow --harness codex --skill user.helper --config skillboard.config.yaml --skills skills
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
When an installer writes runtime settings without a manifest, capture that
|
|
282
|
+
surface explicitly:
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
skillboard inventory detect --unit acme.runtime --config skillboard.config.yaml --install-output install.log --config-file ~/.codex/config.toml --dry-run
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
For fetchable Git sources, refresh the local cache and digest pin before writing
|
|
289
|
+
a lockfile:
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
skillboard sources refresh --config skillboard.config.yaml --unit github.mattpocock.skills --dry-run
|
|
293
|
+
skillboard sources refresh --config skillboard.config.yaml --unit github.mattpocock.skills
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
After reviewing an imported install unit, record that decision before activating
|
|
297
|
+
model-selectable skills from it:
|
|
298
|
+
|
|
299
|
+
```bash
|
|
300
|
+
skillboard review install-unit github.mattpocock.skills --trust-level reviewed --config skillboard.config.yaml --skills skills
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
To remove the project bridge safely:
|
|
304
|
+
|
|
305
|
+
```bash
|
|
306
|
+
skillboard uninstall --dry-run
|
|
307
|
+
skillboard uninstall
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
`skillboard uninstall` removes only SkillBoard bridge blocks and unchanged
|
|
311
|
+
generated helper files by default. It preserves `skillboard.config.yaml`, local
|
|
312
|
+
skills, reports, and any user content in `AGENTS.md` or `CLAUDE.md`. Add
|
|
313
|
+
`--remove-config` only when you want to delete an untouched default config. Use
|
|
314
|
+
`--reset-config` when you intentionally want to discard the current
|
|
315
|
+
`skillboard.config.yaml` and re-run `skillboard init` from a fresh policy
|
|
316
|
+
lifecycle; local skill files, reports, and generated guard hooks are still
|
|
317
|
+
preserved. Add `--remove-reports` with `--reset-config` when a test reset should
|
|
318
|
+
also discard generated dashboard and impact reports. Add
|
|
319
|
+
`--remove-hooks` with the same reset when you also want to discard the entire
|
|
320
|
+
`.skillboard/hooks/` directory contents and remove the `.skillboard/` directory
|
|
321
|
+
if it has no other content.
|
|
322
|
+
|
|
323
|
+
Run the bundled examples from the repository root:
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
npm install
|
|
327
|
+
npm run check
|
|
328
|
+
node bin/skillboard.mjs check \
|
|
329
|
+
--config examples/multi-source.config.yaml \
|
|
330
|
+
--skills examples/multi-source-skills
|
|
331
|
+
node bin/skillboard.mjs list skills \
|
|
332
|
+
--config examples/multi-source.config.yaml \
|
|
333
|
+
--skills examples/multi-source-skills \
|
|
334
|
+
--workflow codex-night-workflow
|
|
335
|
+
node bin/skillboard.mjs explain private.tdd-work-continuity \
|
|
336
|
+
--config examples/multi-source.config.yaml \
|
|
337
|
+
--skills examples/multi-source-skills
|
|
338
|
+
node bin/skillboard.mjs can-use matt.tdd \
|
|
339
|
+
--workflow codex-night-workflow \
|
|
340
|
+
--config examples/multi-source.config.yaml \
|
|
341
|
+
--skills examples/multi-source-skills
|
|
342
|
+
node bin/skillboard.mjs audit sources --verify \
|
|
343
|
+
--config examples/multi-source.config.yaml \
|
|
344
|
+
--skills examples/multi-source-skills
|
|
345
|
+
mkdir -p .skillboard/reports
|
|
346
|
+
node bin/skillboard.mjs lock write \
|
|
347
|
+
--config examples/multi-source.config.yaml \
|
|
348
|
+
--skills examples/multi-source-skills \
|
|
349
|
+
--out .skillboard/reports/multi-source.lock.yaml \
|
|
350
|
+
--replace
|
|
351
|
+
node bin/skillboard.mjs apply-action <action-id> \
|
|
352
|
+
--workflow codex-night-workflow \
|
|
353
|
+
--config examples/multi-source.config.yaml \
|
|
354
|
+
--skills examples/multi-source-skills \
|
|
355
|
+
--yes --json
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
For hook action cards, keep `apply-action` as the primary flow:
|
|
359
|
+
`node bin/skillboard.mjs apply-action <action-id> ... --yes --json`. The raw
|
|
360
|
+
hook commands below are underlying manual operator detail for previewing and
|
|
361
|
+
materializing an executable guard hook outside the action-card approval loop:
|
|
362
|
+
|
|
363
|
+
```bash
|
|
364
|
+
node bin/skillboard.mjs hook install \
|
|
365
|
+
--workflow codex-night-workflow \
|
|
366
|
+
--config examples/multi-source.config.yaml \
|
|
367
|
+
--skills examples/multi-source-skills \
|
|
368
|
+
--out .skillboard/reports/codex-night-guard.sh \
|
|
369
|
+
--skillboard-bin "node bin/skillboard.mjs" \
|
|
370
|
+
--dry-run --json
|
|
371
|
+
node bin/skillboard.mjs hook install \
|
|
372
|
+
--workflow codex-night-workflow \
|
|
373
|
+
--config examples/multi-source.config.yaml \
|
|
374
|
+
--skills examples/multi-source-skills \
|
|
375
|
+
--out .skillboard/reports/codex-night-guard.sh \
|
|
376
|
+
--skillboard-bin "node bin/skillboard.mjs"
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
For manual hook installation, preview with `--dry-run --json` and inspect
|
|
380
|
+
`planned.preview.shell` before an operator materializes the matching non-dry-run
|
|
381
|
+
hook command directly.
|
|
382
|
+
The multi-source example intentionally uses project-root-relative local paths,
|
|
383
|
+
such as `./examples/multi-source-skills/private`, so a fresh clone can run these
|
|
384
|
+
commands without editing machine-specific paths.
|
|
385
|
+
|
|
386
|
+
## Config Shape
|
|
387
|
+
|
|
388
|
+
```yaml
|
|
389
|
+
version: 1
|
|
390
|
+
|
|
391
|
+
defaults:
|
|
392
|
+
invocation_policy: deny-by-default
|
|
393
|
+
allow_model_invocation: false
|
|
394
|
+
require_explicit_workflow: true
|
|
395
|
+
|
|
396
|
+
skills:
|
|
397
|
+
matt.tdd:
|
|
398
|
+
path: tdd
|
|
399
|
+
status: active
|
|
400
|
+
invocation: workflow-auto
|
|
401
|
+
exposure: exported
|
|
402
|
+
category: engineering
|
|
403
|
+
|
|
404
|
+
user.workflow-router:
|
|
405
|
+
path: user/workflow-router
|
|
406
|
+
status: active
|
|
407
|
+
invocation: global-auto
|
|
408
|
+
exposure: global-meta
|
|
409
|
+
category: meta
|
|
410
|
+
|
|
411
|
+
capabilities:
|
|
412
|
+
test-first-implementation:
|
|
413
|
+
canonical: matt.tdd
|
|
414
|
+
alternatives:
|
|
415
|
+
- meerkat.test-first-implementation
|
|
416
|
+
default_policy: workflow-auto
|
|
417
|
+
|
|
418
|
+
harnesses:
|
|
419
|
+
codex:
|
|
420
|
+
status: primary
|
|
421
|
+
workflows:
|
|
422
|
+
- codex-night-workflow
|
|
423
|
+
|
|
424
|
+
install_units:
|
|
425
|
+
lazycodex.omo:
|
|
426
|
+
kind: harness
|
|
427
|
+
source: npx lazycodex-ai install
|
|
428
|
+
scope: user-global
|
|
429
|
+
manifest_path: ~/.codex/plugins/cache/sisyphuslabs/omo/plugin.json
|
|
430
|
+
cache_path: ~/.codex/plugins/cache/sisyphuslabs/omo
|
|
431
|
+
provided_components:
|
|
432
|
+
- skills
|
|
433
|
+
- commands
|
|
434
|
+
- mcp-server
|
|
435
|
+
- hook
|
|
436
|
+
components:
|
|
437
|
+
skills:
|
|
438
|
+
- lazycodex.ulw-plan
|
|
439
|
+
commands:
|
|
440
|
+
- $ulw-plan
|
|
441
|
+
- $start-work
|
|
442
|
+
hooks:
|
|
443
|
+
- post-tool-use
|
|
444
|
+
mcp_servers:
|
|
445
|
+
- omo-docs
|
|
446
|
+
modified_config_files:
|
|
447
|
+
- ~/.codex/config.toml
|
|
448
|
+
- ~/.local/bin
|
|
449
|
+
auto_update: false
|
|
450
|
+
enabled: true
|
|
451
|
+
workflow_dependencies:
|
|
452
|
+
- large-refactor-workflow
|
|
453
|
+
permission_risk: high
|
|
454
|
+
rollback: manual
|
|
455
|
+
|
|
456
|
+
workflows:
|
|
457
|
+
codex-night-workflow:
|
|
458
|
+
harness: codex
|
|
459
|
+
active_skills:
|
|
460
|
+
- matt.tdd
|
|
461
|
+
blocked_skills: []
|
|
462
|
+
required_capabilities:
|
|
463
|
+
test-first-implementation:
|
|
464
|
+
preferred: matt.tdd
|
|
465
|
+
fallback:
|
|
466
|
+
- meerkat.test-first-implementation
|
|
467
|
+
policy: workflow-auto
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
## Source Profiles
|
|
471
|
+
|
|
472
|
+
`skillboard import` reads a source profile and emits a YAML fragment containing
|
|
473
|
+
governed `skills` plus their owning `install_units`.
|
|
474
|
+
|
|
475
|
+
```bash
|
|
476
|
+
skillboard import \
|
|
477
|
+
--profile github.mattpocock.skills \
|
|
478
|
+
--source-root /path/to/cloned-or-installed/repo \
|
|
479
|
+
--out .skillboard/reports/import-fragment.yaml
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
To preview a direct apply path, pass `--merge --config --dry-run`. Merge is
|
|
483
|
+
non-destructive by default: if a skill or install-unit id already exists, the
|
|
484
|
+
command fails and leaves the config unchanged. Use `--replace` only when you
|
|
485
|
+
intend to overwrite existing entries, and drop `--dry-run` only after reviewing
|
|
486
|
+
the reported change plan.
|
|
487
|
+
|
|
488
|
+
```bash
|
|
489
|
+
skillboard import \
|
|
490
|
+
--profile github.mattpocock.skills \
|
|
491
|
+
--source-root /path/to/cloned-or-installed/repo \
|
|
492
|
+
--config skillboard.config.yaml \
|
|
493
|
+
--merge \
|
|
494
|
+
--dry-run
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
Built-in profiles are shipped as YAML data under `profiles/`, including:
|
|
498
|
+
|
|
499
|
+
- `github.mattpocock.skills`
|
|
500
|
+
- `github.code-yeongyu.oh-my-openagent`
|
|
501
|
+
- `github.anthropics.skills`
|
|
502
|
+
- `github.wshobson.agents`
|
|
503
|
+
- `github.voltagent.awesome-agent-skills`
|
|
504
|
+
|
|
505
|
+
Project-specific profiles can live under `.skillboard/profiles/` and be passed
|
|
506
|
+
by path:
|
|
507
|
+
|
|
508
|
+
```bash
|
|
509
|
+
skillboard import --profile .skillboard/profiles/my-source.yaml --source-root /path/to/repo
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
Invocation modes:
|
|
513
|
+
|
|
514
|
+
- `manual-only`: user must explicitly ask for it.
|
|
515
|
+
- `router-only`: a router/orchestrator may select it after policy checks.
|
|
516
|
+
- `workflow-auto`: model invocation is allowed only inside listed workflows.
|
|
517
|
+
- `global-auto`: allowed globally; use sparingly.
|
|
518
|
+
- `blocked`: installed but not callable until policy or provenance changes.
|
|
519
|
+
- `deprecated`: kept for history, not for new use.
|
|
520
|
+
|
|
521
|
+
Skill exposure:
|
|
522
|
+
|
|
523
|
+
- `exported`: centrally governed skill that may serve shared workflows or
|
|
524
|
+
canonical capabilities.
|
|
525
|
+
- `global-meta`: intentionally global control skill, such as a router,
|
|
526
|
+
impact analyzer, or verification gate. This is the only exposure that may use
|
|
527
|
+
`global-auto`.
|
|
528
|
+
- `unit-managed`: child component supplied by a parent install unit or harness
|
|
529
|
+
bundle.
|
|
530
|
+
- `private`: workflow-internal implementation detail; central governance should
|
|
531
|
+
avoid managing it unless it becomes shared.
|
|
532
|
+
|
|
533
|
+
`owner_install_unit` links a declared skill back to the package, plugin,
|
|
534
|
+
marketplace, harness, or local source that supplied it. SkillBoard checks this
|
|
535
|
+
both ways: install-unit `components.skills` must reference declared skills, and a
|
|
536
|
+
skill that names an owner must be listed by that owner. `unit-managed` skills
|
|
537
|
+
must always declare an owner.
|
|
538
|
+
|
|
539
|
+
The multi-source example in `examples/multi-source.config.yaml` models one
|
|
540
|
+
private skill source plus five external repositories:
|
|
541
|
+
|
|
542
|
+
- `mattpocock/skills`
|
|
543
|
+
- `code-yeongyu/oh-my-openagent`
|
|
544
|
+
- `anthropics/skills`
|
|
545
|
+
- `wshobson/agents`
|
|
546
|
+
- `VoltAgent/awesome-agent-skills`
|
|
547
|
+
|
|
548
|
+
Run the example commands from the repository root. Local example sources are
|
|
549
|
+
written as project-root-relative paths; fetchable Git sources can be cached and
|
|
550
|
+
pinned with `skillboard sources refresh`.
|
|
551
|
+
|
|
552
|
+
## Commands
|
|
553
|
+
|
|
554
|
+
All commands below use the global `skillboard` binary. When running from a
|
|
555
|
+
clone without `npm install -g agent-skillboard`, replace `skillboard ` with
|
|
556
|
+
`node bin/skillboard.mjs ` and run from the repository root.
|
|
557
|
+
|
|
558
|
+
```bash
|
|
559
|
+
skillboard init [--dir <path>] [--scan-root <dir>[,<dir>]] [--no-scan-installed]
|
|
560
|
+
skillboard uninstall [--dir <path>] [--dry-run] [--remove-config|--reset-config] [--remove-reports] [--remove-hooks] [--keep-empty-dirs]
|
|
561
|
+
skillboard inventory refresh [--dir <path>] [--config <path>] [--scan-root <dir>[,<dir>]] [--dry-run] [--json]
|
|
562
|
+
skillboard inventory detect --unit <id> --config <path> [--install-output <path>] [--config-file a,b] [--source <value>] [--kind <kind>] [--scope <scope>] [--dry-run] [--json]
|
|
563
|
+
skillboard sources refresh [--dir <path>] [--config <path>] [--unit <id>[,<id>]] [--cache-dir <dir>] [--dry-run] [--json]
|
|
564
|
+
skillboard doctor [--dir <path>] [--config <path>] [--skills <dir>] [--verify] [--strict] [--json] [--summary]
|
|
565
|
+
skillboard status [--dir <path>] [--config <path>] [--skills <dir>] [--verify] [--strict] [--json] [--summary]
|
|
566
|
+
skillboard brief [--workflow <name>] [--dir <path>] [--config <path>] [--skills <dir>] [--include-actions] [--verbose] [--json]
|
|
567
|
+
skillboard apply-action <action-id> [--workflow <name>] [--dir <path>] [--config <path>] [--skills <dir>] [--dry-run] [--yes] [--allow-destructive] [--json]
|
|
568
|
+
skillboard import --profile <id-or-path> --source-root <dir> [--profile-dirs a,b] [--out <path>]
|
|
569
|
+
skillboard import --profile <id-or-path> --source-root <dir> --config <path> --merge [--replace] [--dry-run]
|
|
570
|
+
skillboard scan --config <path> --skills <dir>
|
|
571
|
+
skillboard check --config <path> --skills <dir>
|
|
572
|
+
skillboard list [skills|workflows|harnesses|install-units] --config <path> --skills <dir>
|
|
573
|
+
skillboard explain <skill-id> --config <path> --skills <dir>
|
|
574
|
+
skillboard can-use <skill-id> --workflow <name> --config <path> --skills <dir>
|
|
575
|
+
skillboard guard use <skill-id> --workflow <name> --config <path> --skills <dir>
|
|
576
|
+
skillboard audit sources --config <path> --skills <dir> [--verify]
|
|
577
|
+
skillboard rollout [audit|plan|apply|rollback|report] [--dir <path>] [--config <path>] [--skills <dir>] [--transaction <id>] [--json]
|
|
578
|
+
skillboard hook install --workflow <name> --config <path> --skills <dir> [--out <path>] [--skillboard-bin <path>] [--dry-run] [--json]
|
|
579
|
+
skillboard lock write --config <path> --skills <dir> [--out <path>] [--replace] [--allow-unverified]
|
|
580
|
+
skillboard review install-unit <unit-id> [--trust-level trusted|reviewed|unreviewed|blocked] --config <path> --skills <dir>
|
|
581
|
+
skillboard add skill <skill-id> --path <relative-skill-path> --config <path> --skills <dir>
|
|
582
|
+
skillboard add workflow <workflow-name> --harness <harness-name> --config <path> --skills <dir> [--skill <id>[,<id>]]
|
|
583
|
+
skillboard add harness <harness-name> --config <path> --skills <dir> [--status <status>] [--command <cmd>[,<cmd>]]
|
|
584
|
+
skillboard activate <skill-id> --workflow <name> --config <path> --skills <dir>
|
|
585
|
+
skillboard block <skill-id> --workflow <name> --config <path> --skills <dir>
|
|
586
|
+
skillboard quarantine <skill-id> --config <path> --skills <dir>
|
|
587
|
+
skillboard prefer <skill-id> --workflow <name> --capability <name> --config <path> --skills <dir>
|
|
588
|
+
skillboard remove skill <skill-id> --config <path> --skills <dir> [--force]
|
|
589
|
+
skillboard dashboard --config <path> --skills <dir> [--out <path>]
|
|
590
|
+
skillboard reconcile --config <path> --skills <dir> [--actual-harnesses a,b] [--out <path>]
|
|
591
|
+
skillboard impact disable <skill-id> --config <path> --skills <dir> [--out <path>] [--json]
|
|
592
|
+
```
|
|
593
|
+
|
|
594
|
+
The bundled examples in this repository use `node bin/skillboard.mjs` explicitly
|
|
595
|
+
because they are meant to run from a fresh clone without a global install.
|
|
596
|
+
|
|
597
|
+
## Reconciliation Model
|
|
598
|
+
|
|
599
|
+
SkillBoard compares desired state from config with actual state from discovered
|
|
600
|
+
`SKILL.md` files and detected harnesses.
|
|
601
|
+
|
|
602
|
+
- New skills become `quarantined` / `blocked` recommendations.
|
|
603
|
+
- Known capability matches are surfaced, but not auto-enabled.
|
|
604
|
+
- Removed harnesses report affected workflows, missing commands, and migration
|
|
605
|
+
recommendations.
|
|
606
|
+
- Newly detected harnesses are disabled until workflows explicitly opt in.
|
|
607
|
+
- If actual harness inventory is not provided, reconcile emits a warning instead
|
|
608
|
+
of silently assuming harness state.
|
|
609
|
+
|
|
610
|
+
## Install Units
|
|
611
|
+
|
|
612
|
+
SkillBoard should not assume that every runtime change is a standalone skill.
|
|
613
|
+
Modern agent environments increasingly install packaged primitives:
|
|
614
|
+
|
|
615
|
+
- `skill`
|
|
616
|
+
- `plugin`
|
|
617
|
+
- `marketplace`
|
|
618
|
+
- `package-manager-dependency`
|
|
619
|
+
- `harness`
|
|
620
|
+
- `mcp-server`
|
|
621
|
+
- `hook`
|
|
622
|
+
- `agent`
|
|
623
|
+
- `lsp`
|
|
624
|
+
|
|
625
|
+
An install unit records source, scope, manifest/cache paths, provided
|
|
626
|
+
components, modified config files, enablement, workflow dependencies, permission
|
|
627
|
+
risk, trust level, digest/signature pins, and rollback shape. LazyCodex-style setups fit this model as
|
|
628
|
+
user-global harness/plugin bundles that provide commands, skills, MCP
|
|
629
|
+
integrations, hooks, and config.
|
|
630
|
+
|
|
631
|
+
## Positioning
|
|
632
|
+
|
|
633
|
+
SkillBoard is not a replacement for installers such as `skillshare` or package
|
|
634
|
+
managers such as APM. It is the governance layer above them: it decides what is
|
|
635
|
+
active, what is blocked, and what a user should inspect before changing the skill
|
|
636
|
+
set.
|
|
637
|
+
|
|
638
|
+
See [docs/install.md](docs/install.md) for install and bootstrap details.
|
|
639
|
+
|
|
640
|
+
See [docs/user-flow.md](docs/user-flow.md),
|
|
641
|
+
[docs/positioning.md](docs/positioning.md), and
|
|
642
|
+
[docs/policy-model.md](docs/policy-model.md). See
|
|
643
|
+
[docs/adapters.md](docs/adapters.md) for the source-profile adapter model, and
|
|
644
|
+
[docs/versioning.md](docs/versioning.md) for release, schema, profile, workflow,
|
|
645
|
+
and lockfile versioning rules.
|