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.
Files changed (94) hide show
  1. package/CONTRIBUTING.md +83 -0
  2. package/LICENSE +21 -0
  3. package/README.md +645 -0
  4. package/bin/skillboard.mjs +4 -0
  5. package/docs/adapters.md +127 -0
  6. package/docs/capabilities.md +107 -0
  7. package/docs/install.md +346 -0
  8. package/docs/plans/20260625-080025-skillboard-mvp-review.md +189 -0
  9. package/docs/plans/README.md +20 -0
  10. package/docs/policy-model.md +251 -0
  11. package/docs/positioning.md +94 -0
  12. package/docs/profiles.md +166 -0
  13. package/docs/rollout-runbook.md +60 -0
  14. package/docs/user-flow.md +231 -0
  15. package/docs/versioning.md +201 -0
  16. package/examples/multi-source-skills/anthropic/docx/SKILL.md +8 -0
  17. package/examples/multi-source-skills/anthropic/skill-creator/SKILL.md +8 -0
  18. package/examples/multi-source-skills/matt/grill-me/SKILL.md +8 -0
  19. package/examples/multi-source-skills/matt/tdd/SKILL.md +8 -0
  20. package/examples/multi-source-skills/omo/review-work/SKILL.md +8 -0
  21. package/examples/multi-source-skills/omo/ulw-plan/SKILL.md +8 -0
  22. package/examples/multi-source-skills/private/tdd-work-continuity/SKILL.md +8 -0
  23. package/examples/multi-source-skills/private/workflow-router/SKILL.md +8 -0
  24. package/examples/multi-source-skills/wshobson/python-testing/SKILL.md +8 -0
  25. package/examples/multi-source-skills/wshobson/security-review/SKILL.md +8 -0
  26. package/examples/multi-source.config.yaml +271 -0
  27. package/examples/skillboard.config.yaml +194 -0
  28. package/examples/skills/grill-me/SKILL.md +9 -0
  29. package/examples/skills/grill-with-docs/SKILL.md +9 -0
  30. package/examples/skills/requirement-intake/SKILL.md +9 -0
  31. package/examples/skills/tdd/SKILL.md +8 -0
  32. package/package.json +58 -0
  33. package/profiles/anthropics-skills.yaml +17 -0
  34. package/profiles/mattpocock-skills.yaml +26 -0
  35. package/profiles/oh-my-openagent.yaml +32 -0
  36. package/profiles/voltagent-awesome-agent-skills.yaml +18 -0
  37. package/profiles/wshobson-agents.yaml +19 -0
  38. package/src/advisor/action-core.mjs +74 -0
  39. package/src/advisor/actions.mjs +256 -0
  40. package/src/advisor/application-commands.mjs +59 -0
  41. package/src/advisor/apply-action.mjs +183 -0
  42. package/src/advisor/schema.mjs +112 -0
  43. package/src/advisor/setup-actions.mjs +42 -0
  44. package/src/advisor/skills.mjs +191 -0
  45. package/src/advisor/sort.mjs +15 -0
  46. package/src/advisor/sources.mjs +160 -0
  47. package/src/advisor/trust-policy.mjs +65 -0
  48. package/src/advisor/workflow.mjs +41 -0
  49. package/src/advisor.mjs +134 -0
  50. package/src/agent-inventory-platforms.mjs +100 -0
  51. package/src/agent-inventory.mjs +804 -0
  52. package/src/brief-cli.mjs +40 -0
  53. package/src/brief-renderer.mjs +362 -0
  54. package/src/change-plan.mjs +169 -0
  55. package/src/cli.mjs +1171 -0
  56. package/src/config-helpers.mjs +72 -0
  57. package/src/control/can-use-guard.mjs +91 -0
  58. package/src/control/config-write.mjs +163 -0
  59. package/src/control/skill-crud.mjs +394 -0
  60. package/src/control/source-trust.mjs +161 -0
  61. package/src/control/workflow-crud.mjs +104 -0
  62. package/src/control.mjs +197 -0
  63. package/src/doctor.mjs +299 -0
  64. package/src/domain/constants.mjs +47 -0
  65. package/src/domain/indexes.mjs +29 -0
  66. package/src/domain/rules/capabilities.mjs +33 -0
  67. package/src/domain/rules/harnesses.mjs +16 -0
  68. package/src/domain/rules/install-units.mjs +95 -0
  69. package/src/domain/rules/skills.mjs +105 -0
  70. package/src/domain/rules/workflows.mjs +105 -0
  71. package/src/domain/skill-state-matrix.mjs +79 -0
  72. package/src/domain/source-classes.mjs +99 -0
  73. package/src/hook-plan.mjs +152 -0
  74. package/src/impact.mjs +41 -0
  75. package/src/index.mjs +82 -0
  76. package/src/init.mjs +136 -0
  77. package/src/install-output-detector.mjs +337 -0
  78. package/src/install-units.mjs +62 -0
  79. package/src/inventory-refresh.mjs +45 -0
  80. package/src/lifecycle-cli.mjs +166 -0
  81. package/src/lifecycle-content.mjs +87 -0
  82. package/src/policy.mjs +42 -0
  83. package/src/reconcile.mjs +111 -0
  84. package/src/report.mjs +151 -0
  85. package/src/review.mjs +88 -0
  86. package/src/rollout.mjs +453 -0
  87. package/src/skill-paths.mjs +17 -0
  88. package/src/source-cache.mjs +178 -0
  89. package/src/source-profile-loader.mjs +160 -0
  90. package/src/source-profiles.mjs +299 -0
  91. package/src/source-verification.mjs +252 -0
  92. package/src/uninstall.mjs +258 -0
  93. package/src/workspace.mjs +219 -0
  94. 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.
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { main } from "../src/cli.mjs";
3
+
4
+ process.exitCode = await main(process.argv.slice(2), process.stdout, process.stderr);