agent-skillboard 0.1.2 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.md +154 -631
  2. package/docs/adapters.md +96 -96
  3. package/docs/ai-skill-routing-goal.md +112 -0
  4. package/docs/capabilities.md +6 -0
  5. package/docs/install.md +155 -105
  6. package/docs/plans/skillboard-variant-lifecycle-handoff.md +56 -0
  7. package/docs/policy-model.md +266 -214
  8. package/docs/positioning.md +94 -94
  9. package/docs/reference.md +349 -0
  10. package/docs/routing.md +85 -0
  11. package/docs/user-flow.md +75 -16
  12. package/docs/value-proof.md +190 -0
  13. package/docs/variant-lifecycle.md +86 -0
  14. package/docs/versioning.md +149 -138
  15. package/examples/multi-source-skills/anthropic/docx/SKILL.md +8 -8
  16. package/examples/multi-source-skills/anthropic/skill-creator/SKILL.md +8 -8
  17. package/examples/multi-source-skills/matt/grill-me/SKILL.md +8 -8
  18. package/examples/multi-source-skills/matt/tdd/SKILL.md +8 -8
  19. package/examples/multi-source-skills/omo/review-work/SKILL.md +8 -8
  20. package/examples/multi-source-skills/omo/ulw-plan/SKILL.md +8 -8
  21. package/examples/multi-source-skills/private/tdd-work-continuity/SKILL.md +8 -8
  22. package/examples/multi-source-skills/private/workflow-router/SKILL.md +8 -8
  23. package/examples/multi-source-skills/wshobson/python-testing/SKILL.md +8 -8
  24. package/examples/multi-source-skills/wshobson/security-review/SKILL.md +8 -8
  25. package/examples/skills/grill-me/SKILL.md +9 -9
  26. package/examples/skills/grill-with-docs/SKILL.md +9 -9
  27. package/examples/skills/requirement-intake/SKILL.md +9 -9
  28. package/examples/skills/tdd/SKILL.md +8 -8
  29. package/package.json +7 -3
  30. package/src/advisor/guidance.mjs +232 -0
  31. package/src/advisor/schema.mjs +2 -0
  32. package/src/advisor/skills.mjs +2 -0
  33. package/src/advisor.mjs +36 -7
  34. package/src/brief-cli.mjs +6 -5
  35. package/src/brief-renderer.mjs +225 -8
  36. package/src/cli.mjs +574 -27
  37. package/src/config-helpers.mjs +34 -18
  38. package/src/conflicts.mjs +70 -0
  39. package/src/control/can-use-guard.mjs +8 -3
  40. package/src/control/skill-crud.mjs +142 -0
  41. package/src/control/skill-variants.mjs +221 -0
  42. package/src/control/source-trust.mjs +1 -0
  43. package/src/control/variant-files.mjs +265 -0
  44. package/src/control/variant-lifecycle-config.mjs +156 -0
  45. package/src/control/variant-reset.mjs +171 -0
  46. package/src/control/variant-status.mjs +75 -0
  47. package/src/control.mjs +13 -1
  48. package/src/domain/rules/skills.mjs +60 -0
  49. package/src/domain/rules/workflows.mjs +13 -0
  50. package/src/impact.mjs +21 -12
  51. package/src/index.mjs +13 -1
  52. package/src/lifecycle-cli.mjs +18 -7
  53. package/src/lifecycle-content.mjs +29 -22
  54. package/src/route.mjs +537 -0
  55. package/src/source-verification.mjs +7 -3
  56. package/src/workspace.mjs +141 -43
  57. package/tsconfig.lsp.json +1 -1
package/docs/adapters.md CHANGED
@@ -1,34 +1,34 @@
1
- # Adapter Model
2
-
3
- SkillBoard should not hardcode one adapter per popular repository.
4
-
5
- The core should stay generic, and repository-specific behavior should live in
6
- data-driven source profiles wherever possible.
7
-
8
- ## Layers
9
-
10
- 1. Core scanners
11
-
12
- Generic code that understands common primitives:
13
-
14
- - `SKILL.md` folders with YAML frontmatter;
15
- - plugin or marketplace manifests;
16
- - package manager metadata;
17
- - known user/project install scopes;
18
- - command, hook, MCP, agent, and LSP component lists.
19
-
20
- 2. Source profiles
21
-
22
- Declarative profiles that describe how to interpret a source:
23
-
24
- ```yaml
25
- id: github.mattpocock.skills
26
- source: mattpocock/skills
27
- kind: marketplace
28
- namespace: matt
29
- target_path_prefix: matt
30
- default_status: vendor
31
- default_invocation: manual-only
1
+ # Adapter Model
2
+
3
+ SkillBoard should not hardcode one adapter per popular repository.
4
+
5
+ The core should stay generic, and repository-specific behavior should live in
6
+ data-driven source profiles wherever possible.
7
+
8
+ ## Layers
9
+
10
+ 1. Core scanners
11
+
12
+ Generic code that understands common primitives:
13
+
14
+ - `SKILL.md` folders with YAML frontmatter;
15
+ - plugin or marketplace manifests;
16
+ - package manager metadata;
17
+ - known user/project install scopes;
18
+ - command, hook, MCP, agent, and LSP component lists.
19
+
20
+ 2. Source profiles
21
+
22
+ Declarative profiles that describe how to interpret a source:
23
+
24
+ ```yaml
25
+ id: github.mattpocock.skills
26
+ source: mattpocock/skills
27
+ kind: marketplace
28
+ namespace: matt
29
+ target_path_prefix: matt
30
+ default_status: vendor
31
+ default_invocation: manual-only
32
32
  default_exposure: exported
33
33
  skill_paths:
34
34
  - "skills/**/SKILL.md"
@@ -49,62 +49,62 @@ data-driven source profiles wherever possible.
49
49
  `SKILL.md` path. For example, `skills/engineering/tdd/SKILL.md` with segment
50
50
  `1` becomes category `engineering`. `path_rules` apply first-match overrides
51
51
  for repository conventions such as `deprecated` or `in-progress` folders.
52
-
53
- 3. Detector plugins
54
-
55
- Code adapters are only for sources whose layout cannot be described
56
- declaratively, such as installers that mutate multiple config files or require
57
- command output parsing. These should be small detector modules that produce the
58
- same install-unit data model as profiles.
59
-
60
- ## Built-In Profiles Are Not Hardcoding
61
-
62
- SkillBoard can ship built-in profiles for popular ecosystems, but they should be
63
- treated as bundled data, not product logic. Users and communities should be able
64
- to add or override profiles without forking the CLI.
65
-
66
- Good built-ins:
67
-
68
- - `mattpocock/skills`: skill pack profile.
69
- - `code-yeongyu/oh-my-openagent`: harness/plugin bundle profile.
70
- - `anthropics/skills`: standard Agent Skills profile.
71
- - `wshobson/agents`: marketplace/plugin profile.
72
- - `VoltAgent/awesome-agent-skills`: catalog profile.
73
-
74
- Bad design:
75
-
76
- - `if repo === "mattpocock/skills"` branches in the import logic;
77
- - repo-specific policy decisions embedded in TypeScript;
78
- - automatic global activation because a known repository was installed.
79
-
80
- ## Import Output Contract
81
-
82
- Every profile or detector should output the same normalized shape:
83
-
84
- - install units;
85
- - declared skills;
86
- - owner links via `owner_install_unit`;
87
- - component lists;
88
- - guessed capabilities;
89
- - default invocation and exposure;
90
- - warnings and decisions requiring user approval.
91
-
92
- Current CLI surface:
93
-
94
- ```bash
95
- skillboard import \
96
- --profile github.mattpocock.skills \
97
- --source-root /path/to/source \
98
- --out .skillboard/reports/import-fragment.yaml
99
- ```
100
-
101
- The command emits a config fragment rather than mutating policy automatically.
102
- This keeps the control plane reviewable while still avoiding hardcoded adapter
103
- branches.
104
-
105
- When the fragment is acceptable, the same importer can merge it:
106
-
107
- ```bash
52
+
53
+ 3. Detector plugins
54
+
55
+ Code adapters are only for sources whose layout cannot be described
56
+ declaratively, such as installers that mutate multiple config files or require
57
+ command output parsing. These should be small detector modules that produce the
58
+ same install-unit data model as profiles.
59
+
60
+ ## Built-In Profiles Are Not Hardcoding
61
+
62
+ SkillBoard can ship built-in profiles for popular ecosystems, but they should be
63
+ treated as bundled data, not product logic. Users and communities should be able
64
+ to add or override profiles without forking the CLI.
65
+
66
+ Good built-ins:
67
+
68
+ - `mattpocock/skills`: skill pack profile.
69
+ - `code-yeongyu/oh-my-openagent`: harness/plugin bundle profile.
70
+ - `anthropics/skills`: standard Agent Skills profile.
71
+ - `wshobson/agents`: marketplace/plugin profile.
72
+ - `VoltAgent/awesome-agent-skills`: catalog profile.
73
+
74
+ Bad design:
75
+
76
+ - `if repo === "mattpocock/skills"` branches in the import logic;
77
+ - repo-specific policy decisions embedded in TypeScript;
78
+ - automatic global activation because a known repository was installed.
79
+
80
+ ## Import Output Contract
81
+
82
+ Every profile or detector should output the same normalized shape:
83
+
84
+ - install units;
85
+ - declared skills;
86
+ - owner links via `owner_install_unit`;
87
+ - component lists;
88
+ - guessed capabilities;
89
+ - default invocation and exposure;
90
+ - warnings and decisions requiring user approval.
91
+
92
+ Current CLI surface:
93
+
94
+ ```bash
95
+ skillboard import \
96
+ --profile github.mattpocock.skills \
97
+ --source-root /path/to/source \
98
+ --out .skillboard/reports/import-fragment.yaml
99
+ ```
100
+
101
+ The command emits a config fragment rather than mutating policy automatically.
102
+ This keeps the control plane reviewable while still avoiding hardcoded adapter
103
+ branches.
104
+
105
+ When the fragment is acceptable, the same importer can merge it:
106
+
107
+ ```bash
108
108
  skillboard import \
109
109
  --profile github.mattpocock.skills \
110
110
  --source-root /path/to/source \
@@ -116,12 +116,12 @@ skillboard import \
116
116
  Merge is append-only by default and refuses duplicate skill or install-unit ids.
117
117
  `--replace` is the explicit overwrite escape hatch. Drop `--dry-run` after
118
118
  reviewing the change plan.
119
-
120
- The reconciler then applies the same policy rules regardless of source.
121
-
122
- ## Default Safety
123
-
124
- New external skills should default to `vendor` or `candidate`, with
125
- `manual-only` or `router-only` invocation. Personal control skills can become
126
- `global-meta`, but external repositories should not gain `global-auto` through an
127
- adapter.
119
+
120
+ The reconciler then applies the same policy rules regardless of source.
121
+
122
+ ## Default Safety
123
+
124
+ New external skills should default to `vendor` or `candidate`, with
125
+ `manual-only` or `router-only` invocation. Personal control skills can become
126
+ `global-meta`, but external repositories should not gain `global-auto` through an
127
+ adapter.
@@ -0,0 +1,112 @@
1
+ # AI Skill Routing Goal
2
+
3
+ SkillBoard's product goal is to be a **non-blocking AI skill routing control plane**. It should help an AI decide which skills and workflow policies apply to the current task without turning normal work into a settings session.
4
+
5
+ This document is the goal reference for product work, routing changes, AI-facing brief changes, bridge updates, policy UX, and workflow UX.
6
+
7
+ ## Core principle
8
+
9
+ SkillBoard should keep the user's work moving by default.
10
+
11
+ The preferred loop is:
12
+
13
+ ```text
14
+ observe → route → work → explain briefly → ask after → remember policy
15
+ ```
16
+
17
+ That means:
18
+
19
+ 1. **Observe** the user's request and current workflow context.
20
+ 2. **Route** to the most appropriate allowed skill or workflow policy without asking first when the risk is low.
21
+ 3. **Work** normally so SkillBoard does not become a pre-task settings checklist.
22
+ 4. **Explain briefly** which skill was used or skipped, only at the level needed for trust.
23
+ 5. **Ask after** the task when the routing choice was ambiguous, recurring, or likely to become a useful preference.
24
+ 6. **Remember policy** as usage guidance for future turns.
25
+
26
+ ## Non-goals
27
+
28
+ SkillBoard does not rewrite `SKILL.md` bodies as the primary way to improve outcomes.
29
+
30
+ SkillBoard should not:
31
+
32
+ - ask users to choose from a large skill inventory before ordinary work can begin;
33
+ - require users to memorize the SkillBoard command loop;
34
+ - infer permission from raw installed `SKILL.md` files;
35
+ - silently let overlapping skills contaminate an answer;
36
+ - mutate skill body content when a usage policy would solve the problem;
37
+ - turn every allowed skill invocation into a permission prompt.
38
+
39
+ ## What SkillBoard controls
40
+
41
+ SkillBoard controls **when and how a skill may influence an AI workflow**.
42
+
43
+ The control object is a usage policy, not the skill body itself:
44
+
45
+ - task or intent triggers;
46
+ - workflow scope;
47
+ - user, project, or team scope;
48
+ - preferred and fallback skills;
49
+ - exclusion rules;
50
+ - confidence or ambiguity thresholds;
51
+ - disclosure and guard behavior;
52
+ - pending policy suggestions to review later.
53
+
54
+ ## Skill usage modes
55
+
56
+ Use these terms when designing routing, docs, brief output, or policy UX:
57
+
58
+ - **Always use** — apply the skill automatically for a clearly scoped situation.
59
+ - **Prefer** — choose this skill first when several skills match.
60
+ - **Reference only** — read the skill as background guidance, but do not let its format or workflow dominate the final answer.
61
+ - **Ask after use** — use the skill for low-risk ambiguous work, then ask whether to remember that choice.
62
+ - **Ask before use** — ask first only when the action is risky, policy-changing, expensive, destructive, or externally visible.
63
+ - **Avoid** — do not use the skill in a scoped situation unless the user explicitly asks.
64
+ - **Block** — never use the skill while the policy remains in force.
65
+
66
+ ## User-facing flow
67
+
68
+ A normal user should be able to talk to their AI naturally:
69
+
70
+ ```text
71
+ User: "Help me refine this UX flow."
72
+ AI: works using the routed skills.
73
+ AI: "I used command-flow-ux-audit as the primary reference and left TDD skills out because this was not a code-editing task. Should I treat that as the default for UX-flow requests?"
74
+ ```
75
+
76
+ The confirmation is intentionally small and late. It records a policy preference without interrupting the work that caused the user to ask for help.
77
+
78
+ ## AI-facing behavior
79
+
80
+ AI integrations should:
81
+
82
+ - read the current SkillBoard brief before making skill availability claims;
83
+ - route from the current request and workflow instead of searching raw skill bodies;
84
+ - run the guard automatically immediately before invoking an allowed skill;
85
+ - disclose allowed skill use at the start and completion;
86
+ - ask the user before applying policy-changing action cards;
87
+ - reread the post-apply brief before making another availability claim;
88
+ - propose remembered policy only when the user has seen enough context to judge the result.
89
+
90
+ ## Development rule
91
+
92
+ Read `docs/ai-skill-routing-goal.md` before changing routing, brief, bridge, policy, or workflow UX.
93
+
94
+ Any implementation that affects AI-mediated skill selection should preserve the non-blocking loop:
95
+
96
+ ```text
97
+ observe → route → work → explain briefly → ask after → remember policy
98
+ ```
99
+
100
+ When in doubt, prefer a small usage-policy change over skill-body mutation or a larger pre-task setup flow.
101
+
102
+ ## MVP acceptance criteria
103
+
104
+ A change moves SkillBoard toward this goal when:
105
+
106
+ - ordinary allowed-skill work proceeds without a pre-task skill-selection prompt;
107
+ - ambiguous but low-risk choices can be handled with ask-after-use policy suggestions;
108
+ - risky or policy-changing actions still require explicit confirmation before apply;
109
+ - `brief --json` gives AI integrations a stable way to discover the goal document and routing guidance;
110
+ - text output stays compact by default and reserves verbose detail for explicit requests;
111
+ - users can understand why a skill was used, skipped, or blocked;
112
+ - SkillBoard records usage policy separately from skill body content.
@@ -76,6 +76,12 @@ workflow.required_capabilities
76
76
 
77
77
  If no preferred skill is set in the workflow, the global catalog's canonical skill is used. Fallbacks are checked in order: first the workflow's own fallback list, then the global alternatives.
78
78
 
79
+ ## Explicit Skill Variants
80
+
81
+ Use `skillboard variant add claude.a --from a --capability task-review --workflow claude-workflow --path claude/a ...` to record a user-approved `a -> claude.a` variant. SkillBoard adds the variant to the capability alternatives, makes it preferred for the named workflow, and keeps the base skill available as fallback.
82
+
83
+ This is policy registration, not prompt migration. For a reviewed manual adaptation lifecycle, run `skillboard variant fork <variant-id>` to create a draft and raw snapshot, edit the variant body by hand, inspect `skillboard variant status <variant-id>` for `variant.status` and computed drift, then use `skillboard variant approve <variant-id>` or `skillboard variant reset <variant-id>`. SkillBoard records user-approved variants and consistent workflow policy across agents; it does not convert skill bodies, does not rewrite skill bodies, and does not guarantee semantic equivalence of skill bodies.
84
+
79
85
  ## Global vs Workflow: When to Use Each
80
86
 
81
87
  | Use case | Use global catalog | Use workflow requirement |