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.
- package/README.md +154 -631
- package/docs/adapters.md +96 -96
- package/docs/ai-skill-routing-goal.md +112 -0
- package/docs/capabilities.md +6 -0
- package/docs/install.md +155 -105
- package/docs/plans/skillboard-variant-lifecycle-handoff.md +56 -0
- package/docs/policy-model.md +266 -214
- package/docs/positioning.md +94 -94
- package/docs/reference.md +349 -0
- package/docs/routing.md +85 -0
- package/docs/user-flow.md +75 -16
- package/docs/value-proof.md +190 -0
- package/docs/variant-lifecycle.md +86 -0
- package/docs/versioning.md +149 -138
- package/examples/multi-source-skills/anthropic/docx/SKILL.md +8 -8
- package/examples/multi-source-skills/anthropic/skill-creator/SKILL.md +8 -8
- package/examples/multi-source-skills/matt/grill-me/SKILL.md +8 -8
- package/examples/multi-source-skills/matt/tdd/SKILL.md +8 -8
- package/examples/multi-source-skills/omo/review-work/SKILL.md +8 -8
- package/examples/multi-source-skills/omo/ulw-plan/SKILL.md +8 -8
- package/examples/multi-source-skills/private/tdd-work-continuity/SKILL.md +8 -8
- package/examples/multi-source-skills/private/workflow-router/SKILL.md +8 -8
- package/examples/multi-source-skills/wshobson/python-testing/SKILL.md +8 -8
- package/examples/multi-source-skills/wshobson/security-review/SKILL.md +8 -8
- package/examples/skills/grill-me/SKILL.md +9 -9
- package/examples/skills/grill-with-docs/SKILL.md +9 -9
- package/examples/skills/requirement-intake/SKILL.md +9 -9
- package/examples/skills/tdd/SKILL.md +8 -8
- package/package.json +7 -3
- package/src/advisor/guidance.mjs +232 -0
- package/src/advisor/schema.mjs +2 -0
- package/src/advisor/skills.mjs +2 -0
- package/src/advisor.mjs +36 -7
- package/src/brief-cli.mjs +6 -5
- package/src/brief-renderer.mjs +225 -8
- package/src/cli.mjs +574 -27
- package/src/config-helpers.mjs +34 -18
- package/src/conflicts.mjs +70 -0
- package/src/control/can-use-guard.mjs +8 -3
- package/src/control/skill-crud.mjs +142 -0
- package/src/control/skill-variants.mjs +221 -0
- package/src/control/source-trust.mjs +1 -0
- package/src/control/variant-files.mjs +265 -0
- package/src/control/variant-lifecycle-config.mjs +156 -0
- package/src/control/variant-reset.mjs +171 -0
- package/src/control/variant-status.mjs +75 -0
- package/src/control.mjs +13 -1
- package/src/domain/rules/skills.mjs +60 -0
- package/src/domain/rules/workflows.mjs +13 -0
- package/src/impact.mjs +21 -12
- package/src/index.mjs +13 -1
- package/src/lifecycle-cli.mjs +18 -7
- package/src/lifecycle-content.mjs +29 -22
- package/src/route.mjs +537 -0
- package/src/source-verification.mjs +7 -3
- package/src/workspace.mjs +141 -43
- 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.
|
package/docs/capabilities.md
CHANGED
|
@@ -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 |
|