agent-skillboard 0.2.7 → 0.2.8
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/CHANGELOG.md +20 -0
- package/README.md +46 -24
- package/bin/postinstall.mjs +61 -0
- package/docs/install.md +60 -25
- package/docs/reference.md +43 -0
- package/docs/user-flow.md +11 -0
- package/package.json +2 -1
- package/src/advisor/actions.mjs +1 -0
- package/src/agent-inventory-platforms.mjs +7 -14
- package/src/agent-inventory.mjs +4 -1
- package/src/agent-skill-import.mjs +291 -0
- package/src/agent-skill-roots.mjs +114 -0
- package/src/cli.mjs +134 -19
- package/src/control/skill-crud.mjs +1 -0
- package/src/doctor.mjs +1 -1
- package/src/lifecycle-cli.mjs +159 -5
- package/src/lifecycle-content.mjs +1 -1
- package/src/uninstall.mjs +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.2.8 — 2026-07-03
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- `skillboard import-skill` can reuse a user skill across Codex, Claude,
|
|
10
|
+
OpenCode, and Hermes by copying compatible skills or installing an
|
|
11
|
+
user-approved adapted `SKILL.md` with provenance.
|
|
12
|
+
- Global npm installs now run best-effort agent-layer setup for detected
|
|
13
|
+
supported user skill roots; `skillboard setup` remains available for later
|
|
14
|
+
agent additions, skipped lifecycle scripts, or repair.
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Agent root scanning is now shared across setup, cross-agent import, and
|
|
19
|
+
installed-skill inventory. Codex detection includes `CODEX_HOME/skills`,
|
|
20
|
+
`AGENTS_HOME/skills`, `~/.agents/skills`, and `~/.codex/skills`.
|
|
21
|
+
- Setup stays conservative: broad auto-detection writes only to explicit env
|
|
22
|
+
roots or existing known roots, while `--agent` keeps an explicit fallback for
|
|
23
|
+
fresh agent homes.
|
|
24
|
+
|
|
5
25
|
## 0.2.7 — 2026-07-03
|
|
6
26
|
|
|
7
27
|
### Fixed
|
package/README.md
CHANGED
|
@@ -4,8 +4,9 @@ Use the right AI-agent skills without managing another checklist.
|
|
|
4
4
|
|
|
5
5
|
Ask your AI normal questions: "what skills can you use?", "which skill should
|
|
6
6
|
write tests first?", or "can you make this reviewed skill available here?"
|
|
7
|
-
SkillBoard runs behind the scenes so you get the benefit: the right
|
|
8
|
-
|
|
7
|
+
SkillBoard runs behind the scenes so you get the benefit: the right skill, a
|
|
8
|
+
short disclosure of what was used, and fewer setup interruptions when skills
|
|
9
|
+
overlap.
|
|
9
10
|
|
|
10
11
|
The burden stays low:
|
|
11
12
|
|
|
@@ -19,10 +20,10 @@ The burden stays low:
|
|
|
19
20
|
Status: public alpha. The current config schema is config schema v1; breaking
|
|
20
21
|
changes may still happen before `1.0.0` and are documented in release notes.
|
|
21
22
|
|
|
22
|
-
Under the hood, SkillBoard is workflow-scoped skill
|
|
23
|
-
agents.
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
Under the hood, SkillBoard is workflow-scoped skill priority and routing for AI
|
|
24
|
+
agents. Installed user skills are usable by default unless runtime, user, or
|
|
25
|
+
local instructions disable them; SkillBoard helps agents resolve overlap,
|
|
26
|
+
policy, and workflow priority instead of guessing from raw skill files.
|
|
26
27
|
|
|
27
28
|
Start with normal requests:
|
|
28
29
|
|
|
@@ -83,31 +84,48 @@ See [Tested Value Proof](#tested-value-proof) for the executable proof.
|
|
|
83
84
|
|
|
84
85
|
## 5-Minute Quick Start
|
|
85
86
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
from memory or raw skill files.
|
|
89
|
-
|
|
90
|
-
Use without a global install:
|
|
87
|
+
Install the CLI. On a normal global install, SkillBoard auto-connects the
|
|
88
|
+
agent layer for detected Codex, Claude, OpenCode, and Hermes user skill roots:
|
|
91
89
|
|
|
92
90
|
AI/automation/operator details:
|
|
93
91
|
|
|
92
|
+
```bash
|
|
93
|
+
npm install -g agent-skillboard
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
The install-time setup writes a user-level `skillboard` guidance skill under
|
|
97
|
+
detected agent homes. For Codex, detection includes `CODEX_HOME/skills`,
|
|
98
|
+
`AGENTS_HOME/skills`, `~/.agents/skills`, and `~/.codex/skills`.
|
|
99
|
+
It does not create `skillboard.config.yaml`,
|
|
100
|
+
`.skillboard/`, `AGENTS.md`, or `CLAUDE.md` in projects.
|
|
101
|
+
No separate setup command is required after a normal global install.
|
|
102
|
+
|
|
103
|
+
Run `skillboard setup --agent codex,claude,opencode,hermes --yes` later only
|
|
104
|
+
after adding another supported agent, enabling a new agent home, or installing
|
|
105
|
+
with lifecycle scripts disabled. Restart or refresh agents that cache user
|
|
106
|
+
skills, then ask normal questions:
|
|
107
|
+
|
|
108
|
+
- "Which skill should you use to write tests first?"
|
|
109
|
+
- "What skills can you use here?"
|
|
110
|
+
- "Use the Codex test-first skill in OpenCode too."
|
|
111
|
+
- "When two skills overlap, which one should take priority?"
|
|
112
|
+
|
|
113
|
+
When a target agent needs a skill from another agent, it can use
|
|
114
|
+
`skillboard import-skill --from codex --to opencode --skill <skill> --json`
|
|
115
|
+
behind the scenes. Compatible skills are copied into the target agent's user
|
|
116
|
+
skill root. If the source contains agent-specific instructions, the agent asks
|
|
117
|
+
before creating an adapted target-agent `SKILL.md` and installs that file with
|
|
118
|
+
provenance.
|
|
119
|
+
|
|
120
|
+
If you intentionally maintain local workspace policy files, use the explicit
|
|
121
|
+
operator commands for that layer:
|
|
122
|
+
|
|
94
123
|
```bash
|
|
95
124
|
npx --yes --package agent-skillboard skillboard init
|
|
96
125
|
npx --yes --package agent-skillboard skillboard doctor --summary
|
|
97
126
|
npx --yes --package agent-skillboard skillboard brief --workflow <workflow-from-init>
|
|
98
127
|
```
|
|
99
128
|
|
|
100
|
-
`init` creates the local control-plane files, scans known local skill roots,
|
|
101
|
-
and writes agent bridge instructions. It prints the workflows it found and a
|
|
102
|
-
copyable workflow-scoped `brief` command. If `init` does not print a workflow,
|
|
103
|
-
run the unscoped `brief` command it prints instead. Trusted user-local skills
|
|
104
|
-
start as manual-only. Runtime, plugin, and external skills stay quarantined
|
|
105
|
-
until their source is reviewed; the brief presents that as a one-time review
|
|
106
|
-
decision, then individual quarantined skills can be activated as manual-only
|
|
107
|
-
workflow skills before any later ask-after preference is recorded. The explicit
|
|
108
|
-
package/binary spelling avoids an extra npx install prompt and keeps the
|
|
109
|
-
`skillboard` executable name clear.
|
|
110
|
-
|
|
111
129
|
Remove the project bridge when you are done:
|
|
112
130
|
|
|
113
131
|
```bash
|
|
@@ -137,6 +155,7 @@ builds, clone-based development, Hermes bridge setup, refresh, and uninstall.
|
|
|
137
155
|
- Inventory that separates installed skills from callable skills.
|
|
138
156
|
- Workflow-scoped policy instead of global "everything is active" behavior.
|
|
139
157
|
- `brief`, `route`, `can-use`, and `guard use` surfaces for AI-mediated selection and availability.
|
|
158
|
+
- `import-skill` for agent-layer skill reuse across Codex, Claude, OpenCode, and Hermes.
|
|
140
159
|
- Workflow conflict checks so overlapping skills cannot quietly degrade an answer.
|
|
141
160
|
- Action cards that apply one approved policy change, then re-resolve state.
|
|
142
161
|
- Source and install-unit review for plugins, hooks, MCP servers, harnesses,
|
|
@@ -145,8 +164,10 @@ builds, clone-based development, Hermes bridge setup, refresh, and uninstall.
|
|
|
145
164
|
- Manual skill variant lifecycle for relationships such as `a -> claude.a`,
|
|
146
165
|
with draft, approval, drift, and reset checkpoints.
|
|
147
166
|
|
|
148
|
-
SkillBoard is
|
|
149
|
-
|
|
167
|
+
SkillBoard is priority-first at the agent layer: installed user skills are
|
|
168
|
+
usable unless runtime, user, or local instructions disable them. Local workspace
|
|
169
|
+
policy files can still model stricter workflow, source, and invocation
|
|
170
|
+
decisions when a team needs that control.
|
|
150
171
|
For action cards, use `skillboard apply-action <action-id> --yes --json`; raw
|
|
151
172
|
`skillboard hook install ... --dry-run --json` previews are underlying manual
|
|
152
173
|
operator detail, not the primary action-card flow.
|
|
@@ -163,6 +184,7 @@ SkillBoard currently supports:
|
|
|
163
184
|
- Disable-impact analysis and reconcile plans.
|
|
164
185
|
- Workflow-scoped activation, blocking, preference, and guard checks.
|
|
165
186
|
- Action-card approval and post-apply brief refresh.
|
|
187
|
+
- Agent-layer skill import with compatible copy or user-approved AI-mediated adaptation.
|
|
166
188
|
- Manual variant registration, fork, status, approval, and reset.
|
|
167
189
|
|
|
168
190
|
For the full command catalog and config shape, use
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { runSetupCommand } from "../src/lifecycle-cli.mjs";
|
|
4
|
+
|
|
5
|
+
if (isTruthy(process.env.SKILLBOARD_SKIP_POSTINSTALL)) {
|
|
6
|
+
process.exit(0);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
process.stderr.write(`${[
|
|
10
|
+
"SkillBoard installed.",
|
|
11
|
+
"It does not change agent configs or project files.",
|
|
12
|
+
""
|
|
13
|
+
].join("\n")}\n`);
|
|
14
|
+
|
|
15
|
+
if (!shouldAutoSetup(process.env)) {
|
|
16
|
+
process.stderr.write(`${[
|
|
17
|
+
"Global installs auto-run agent setup when supported agent homes are detected.",
|
|
18
|
+
"Run skillboard setup later after adding another supported agent:",
|
|
19
|
+
" skillboard setup",
|
|
20
|
+
"",
|
|
21
|
+
"Setup only writes user agent skill files and does not initialize projects.",
|
|
22
|
+
""
|
|
23
|
+
].join("\n")}`);
|
|
24
|
+
process.exit(0);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
process.stderr.write("Auto-running agent setup for detected supported agents.\n");
|
|
28
|
+
|
|
29
|
+
const stderr = {
|
|
30
|
+
write(chunk) {
|
|
31
|
+
process.stderr.write(chunk);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
try {
|
|
36
|
+
const exitCode = await runSetupCommand(new Map([["yes", "true"]]), stderr, {
|
|
37
|
+
cwd: process.env.INIT_CWD ?? process.cwd(),
|
|
38
|
+
env: process.env,
|
|
39
|
+
entrypointPath: "skillboard",
|
|
40
|
+
packageSpec: "agent-skillboard"
|
|
41
|
+
});
|
|
42
|
+
if (exitCode === 0) {
|
|
43
|
+
process.stderr.write("Agent setup complete. Run skillboard setup later after adding another supported agent.\n");
|
|
44
|
+
} else {
|
|
45
|
+
process.stderr.write("Agent setup did not find supported agent homes. Run skillboard setup after installing or enabling a supported agent.\n");
|
|
46
|
+
}
|
|
47
|
+
} catch (error) {
|
|
48
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
49
|
+
process.stderr.write(`Agent setup skipped: ${message}\n`);
|
|
50
|
+
process.stderr.write("Run skillboard setup after install if supported agents should recognize SkillBoard.\n");
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function shouldAutoSetup(env) {
|
|
54
|
+
return isTruthy(env.SKILLBOARD_POSTINSTALL_SETUP)
|
|
55
|
+
|| env.npm_config_global === "true"
|
|
56
|
+
|| env.npm_config_location === "global";
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function isTruthy(value) {
|
|
60
|
+
return /^(1|true|yes)$/i.test(value ?? "");
|
|
61
|
+
}
|
package/docs/install.md
CHANGED
|
@@ -3,37 +3,74 @@
|
|
|
3
3
|
SkillBoard sits one layer above skill installers, plugin marketplaces, harness
|
|
4
4
|
bundles, and local skill repositories.
|
|
5
5
|
|
|
6
|
-
After install, ask your AI questions like "what skills can you use
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
audit trace, not a permission prompt. You do not need to memorize the SkillBoard
|
|
14
|
-
command loop.
|
|
6
|
+
After install, ask your AI questions like "what skills can you use here?" or
|
|
7
|
+
"which skill should you use for this task?" The AI runs SkillBoard behind the
|
|
8
|
+
scenes when skill choices overlap or workflow priority matters. Installed user
|
|
9
|
+
skills are usable by default unless runtime, user, or local instructions disable
|
|
10
|
+
them; SkillBoard should not turn every skill choice into a permission prompt.
|
|
11
|
+
When it selects a skill, the AI should briefly say which skill it will use and
|
|
12
|
+
which skill it used. You do not need to memorize the SkillBoard command loop.
|
|
15
13
|
|
|
16
14
|
## Install From npm
|
|
17
15
|
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
Global install auto-runs agent integration. Installing the package makes the
|
|
17
|
+
CLI available and the postinstall step runs agent-layer setup for detected
|
|
18
|
+
Codex, Claude, OpenCode, and Hermes user skill roots. The setup is best-effort:
|
|
19
|
+
it never fails the package install, does not edit agent config files, and does
|
|
20
|
+
not create project policy files.
|
|
20
21
|
|
|
21
22
|
AI/automation/operator details:
|
|
22
23
|
|
|
24
|
+
```bash
|
|
25
|
+
npm install -g agent-skillboard
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The install-time setup writes a user-level SkillBoard guidance skill under
|
|
29
|
+
detected agent homes such as `CODEX_HOME`, `AGENTS_HOME`, `CLAUDE_HOME`,
|
|
30
|
+
`OPENCODE_HOME`, and `HERMES_HOME`. Codex detection also checks
|
|
31
|
+
`~/.agents/skills` and `~/.codex/skills`.
|
|
32
|
+
No separate setup command is required after a normal global install.
|
|
33
|
+
|
|
34
|
+
Run `skillboard setup` later when you add another supported agent, enable a new
|
|
35
|
+
agent home, intentionally skipped lifecycle scripts, or need to repair the
|
|
36
|
+
agent-layer guidance install:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
skillboard setup
|
|
40
|
+
skillboard setup --agent codex,claude,opencode,hermes --yes
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
After setup, the target agent can reuse a skill from another supported agent:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
skillboard import-skill --from codex --to opencode --skill <skill> --json
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
If the source skill can be used as-is, the agent installs it with `--yes`. If
|
|
50
|
+
SkillBoard reports `needs-adaptation`, the agent explains why, asks before
|
|
51
|
+
changing the skill body for the target runtime, then installs the approved
|
|
52
|
+
adapted file with `--adapted-file <path> --yes`.
|
|
53
|
+
|
|
54
|
+
Use no-prompt npx package execution only when you intentionally want to create
|
|
55
|
+
or inspect local workspace policy files without keeping a global SkillBoard
|
|
56
|
+
binary installed:
|
|
57
|
+
|
|
23
58
|
```bash
|
|
24
59
|
npx --yes --package agent-skillboard skillboard init
|
|
25
60
|
npx --yes --package agent-skillboard skillboard doctor --summary
|
|
26
61
|
npx --yes --package agent-skillboard skillboard brief --workflow <workflow-from-init>
|
|
27
62
|
```
|
|
28
63
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
skills
|
|
35
|
-
|
|
36
|
-
|
|
64
|
+
Local workspace policy files can be stricter than the first agent-layer setup.
|
|
65
|
+
When you intentionally run `init`, it imports trusted local skills as
|
|
66
|
+
manual-only and keeps runtime/plugin skills quarantined until their source is
|
|
67
|
+
reviewed. The brief presents unreviewed runtime sources as one-time review
|
|
68
|
+
decisions rather than default block recommendations; after review, individual
|
|
69
|
+
quarantined skills can be activated as manual-only workflow skills. When `init`
|
|
70
|
+
creates or discovers workflows, use one of the workflow names it prints for the
|
|
71
|
+
first brief. If `init` does not print a workflow, run the unscoped `brief`
|
|
72
|
+
command it prints instead. The explicit package/binary spelling avoids an extra
|
|
73
|
+
npx install prompt and keeps the executable name clear.
|
|
37
74
|
|
|
38
75
|
The equivalent `npm exec` spelling is also no-prompt and works well in scripts:
|
|
39
76
|
|
|
@@ -49,8 +86,7 @@ AI/automation/operator details:
|
|
|
49
86
|
|
|
50
87
|
```bash
|
|
51
88
|
npm install -g agent-skillboard
|
|
52
|
-
skillboard
|
|
53
|
-
skillboard doctor
|
|
89
|
+
skillboard setup --agent codex,claude,opencode,hermes --yes
|
|
54
90
|
```
|
|
55
91
|
|
|
56
92
|
The executable remains `skillboard` even though the npm package name is
|
|
@@ -94,10 +130,9 @@ node bin/skillboard.mjs brief --dir /path/to/your/project --workflow <workflow-f
|
|
|
94
130
|
|
|
95
131
|
## What init Does
|
|
96
132
|
|
|
97
|
-
`skillboard init` is the
|
|
98
|
-
modify a project, but init creates
|
|
99
|
-
|
|
100
|
-
skills.
|
|
133
|
+
`skillboard init` is the optional local policy-file generation step. npm
|
|
134
|
+
installation and `skillboard setup` do not modify a project, but init creates
|
|
135
|
+
local files for teams that intentionally keep workflow policy in a workspace.
|
|
101
136
|
|
|
102
137
|
Created project files:
|
|
103
138
|
|
package/docs/reference.md
CHANGED
|
@@ -24,6 +24,12 @@ npm exec --yes --package agent-skillboard -- skillboard doctor --summary
|
|
|
24
24
|
npm exec --yes --package agent-skillboard -- skillboard brief --workflow <workflow-from-init>
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
+
After a global install, postinstall auto-runs agent-layer setup for detected
|
|
28
|
+
supported agent homes. Use `skillboard setup` later when you add another
|
|
29
|
+
supported agent, skipped lifecycle scripts, or need to repair user-level agent
|
|
30
|
+
guidance. This is agent-layer integration; it does not initialize, attach, or
|
|
31
|
+
manage individual projects.
|
|
32
|
+
|
|
27
33
|
If `init` does not print a workflow, run the unscoped `brief` command it prints
|
|
28
34
|
instead.
|
|
29
35
|
|
|
@@ -51,6 +57,8 @@ node bin/skillboard.mjs brief --dir /path/to/your/project --workflow <workflow-f
|
|
|
51
57
|
## Commands
|
|
52
58
|
|
|
53
59
|
```bash
|
|
60
|
+
skillboard setup [--yes] [--agent codex[,claude,opencode,hermes]]
|
|
61
|
+
skillboard import-skill --from <agent> --to <agent> --skill <id-or-dir> [--target-skill <id-or-dir>] [--adapted-file <path>] [--dry-run] [--yes] [--replace] [--json]
|
|
54
62
|
skillboard init [--dir <path>] [--scan-root <dir>[,<dir>]] [--no-scan-installed]
|
|
55
63
|
skillboard uninstall [--dir <path>] [--dry-run] [--purge] [--remove-config|--reset-config] [--remove-reports] [--remove-hooks] [--keep-empty-dirs]
|
|
56
64
|
skillboard inventory refresh [--dir <path>] [--config <path>] [--scan-root <dir>[,<dir>]] [--dry-run] [--json]
|
|
@@ -92,6 +100,41 @@ skillboard reconcile --config <path> --skills <dir> [--actual-harnesses a,b] [--
|
|
|
92
100
|
skillboard impact disable <skill-id> --config <path> --skills <dir> [--out <path>] [--json]
|
|
93
101
|
```
|
|
94
102
|
|
|
103
|
+
## Agent Skill Reuse
|
|
104
|
+
|
|
105
|
+
`import-skill` operates above projects. It reads one supported agent's user
|
|
106
|
+
skill root and writes to another supported agent's user skill root:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
skillboard import-skill --from codex --to opencode --skill test-first --json
|
|
110
|
+
skillboard import-skill --from codex --to opencode --skill test-first --yes --json
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Supported agents are `codex`, `claude`, `opencode`, and `hermes`. Roots come
|
|
114
|
+
from `CODEX_HOME`, `AGENTS_HOME`, `CLAUDE_HOME`, `OPENCODE_HOME`, and
|
|
115
|
+
`HERMES_HOME`, or from their default user locations. Codex source scanning also
|
|
116
|
+
checks `~/.agents/skills` and `~/.codex/skills`.
|
|
117
|
+
|
|
118
|
+
If the source skill contains markers for another agent runtime, the command
|
|
119
|
+
returns `status: "needs-adaptation"` with compatibility reasons and no writes.
|
|
120
|
+
The target agent should ask the user before changing the skill body. After
|
|
121
|
+
approval, it writes an adapted `SKILL.md` and installs it with provenance:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
skillboard import-skill \
|
|
125
|
+
--from codex \
|
|
126
|
+
--to opencode \
|
|
127
|
+
--skill codex-hook \
|
|
128
|
+
--target-skill opencode-hook \
|
|
129
|
+
--adapted-file /tmp/opencode-hook.SKILL.md \
|
|
130
|
+
--yes \
|
|
131
|
+
--json
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
This is separate from `variant` commands. `import-skill` installs a target-agent
|
|
135
|
+
user skill file; `variant` records project-local policy relationships,
|
|
136
|
+
snapshots, and workflow preferences.
|
|
137
|
+
|
|
95
138
|
## Capability Routing
|
|
96
139
|
|
|
97
140
|
For the normal AI-mediated flow, prefer `brief --intent`: it returns the current
|
package/docs/user-flow.md
CHANGED
|
@@ -15,6 +15,17 @@ memorize the SkillBoard command loop. The command examples below are
|
|
|
15
15
|
AI/automation/operator details for the agent, scripts, or people maintaining the
|
|
16
16
|
setup.
|
|
17
17
|
|
|
18
|
+
If you ask OpenCode to use a skill you previously used in Codex, the target
|
|
19
|
+
agent should call:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
skillboard import-skill --from codex --to opencode --skill <skill> --json
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Compatible skills are installed into the target agent's user skill root. When
|
|
26
|
+
the source is agent-specific, the agent should explain the compatibility issue
|
|
27
|
+
and ask before producing a target-agent adapted `SKILL.md`.
|
|
28
|
+
|
|
18
29
|
Before changing this routing or workflow UX, read
|
|
19
30
|
[`docs/ai-skill-routing-goal.md`](ai-skill-routing-goal.md). The goal is to keep
|
|
20
31
|
SkillBoard non-blocking: observe the request, route to the current best skill,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-skillboard",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.8",
|
|
4
4
|
"description": "Let AI agents pick and use allowed skills in each workflow.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai-agent",
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
"access": "public"
|
|
42
42
|
},
|
|
43
43
|
"scripts": {
|
|
44
|
+
"postinstall": "node bin/postinstall.mjs",
|
|
44
45
|
"test": "node --test",
|
|
45
46
|
"test:unit": "node --test test/advisor-brief-actions.test.mjs test/advisor-brief.test.mjs test/ecosystem-docs.test.mjs test/install-units.test.mjs test/package.test.mjs test/policy.test.mjs test/skillboard.test.mjs",
|
|
46
47
|
"test:integration": "node --test test/brief-cli.test.mjs test/cli.test.mjs test/control-exports.test.mjs test/first-time-ux.test.mjs test/hook-dry-run.test.mjs test/hook-install-cli.test.mjs test/hook-json-errors.test.mjs test/install-units.test.mjs test/lifecycle-cli.test.mjs test/lifecycle-reset-cli.test.mjs test/multi-source-integration.test.mjs test/package.test.mjs test/policy-hardening.test.mjs test/review-cli.test.mjs test/source-profiles.test.mjs",
|
package/src/advisor/actions.mjs
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import { readdir } from "node:fs/promises";
|
|
2
1
|
import { basename, dirname, isAbsolute, join, relative, resolve } from "node:path";
|
|
2
|
+
import { agentSkillRootCandidates } from "./agent-skill-roots.mjs";
|
|
3
3
|
|
|
4
4
|
export async function defaultScanRoots(home, env) {
|
|
5
5
|
const codexHome = env.CODEX_HOME ?? join(home, ".codex");
|
|
6
|
-
const
|
|
6
|
+
const agentRoots = await Promise.all([
|
|
7
|
+
agentSkillRootCandidates("codex", home, env),
|
|
8
|
+
agentSkillRootCandidates("claude", home, env),
|
|
9
|
+
agentSkillRootCandidates("hermes", home, env)
|
|
10
|
+
]);
|
|
7
11
|
return [
|
|
8
12
|
join(codexHome, "skills", ".system"),
|
|
9
|
-
join(codexHome, "skills"),
|
|
10
13
|
join(codexHome, "plugins", "cache"),
|
|
11
|
-
|
|
12
|
-
join(hermesHome, "skills"),
|
|
13
|
-
...(await hermesProfileSkillRoots(hermesHome))
|
|
14
|
+
...agentRoots.flat().map((root) => root.skillRoot)
|
|
14
15
|
];
|
|
15
16
|
}
|
|
16
17
|
|
|
@@ -76,14 +77,6 @@ export function displayPath(path, home) {
|
|
|
76
77
|
return resolvedPath;
|
|
77
78
|
}
|
|
78
79
|
|
|
79
|
-
async function hermesProfileSkillRoots(hermesHome) {
|
|
80
|
-
const profilesRoot = join(hermesHome, "profiles");
|
|
81
|
-
const entries = await readdir(profilesRoot, { withFileTypes: true }).catch(() => []);
|
|
82
|
-
return entries
|
|
83
|
-
.filter((entry) => entry.isDirectory())
|
|
84
|
-
.map((entry) => join(profilesRoot, entry.name, "skills"));
|
|
85
|
-
}
|
|
86
|
-
|
|
87
80
|
function userSkillUnit(id, path, home) {
|
|
88
81
|
return {
|
|
89
82
|
id,
|
package/src/agent-inventory.mjs
CHANGED
|
@@ -38,7 +38,10 @@ export const agentInventoryDetectors = Object.freeze([
|
|
|
38
38
|
{
|
|
39
39
|
id: "codex-user-skills",
|
|
40
40
|
matches(path) {
|
|
41
|
-
return path.endsWith("/.codex/skills")
|
|
41
|
+
return path.endsWith("/.codex/skills")
|
|
42
|
+
|| path.endsWith("\\.codex\\skills")
|
|
43
|
+
|| path.endsWith("/.agents/skills")
|
|
44
|
+
|| path.endsWith("\\.agents\\skills");
|
|
42
45
|
},
|
|
43
46
|
async discover(path, home) {
|
|
44
47
|
return await discoverSkillDirectory(path, userCodexUnit(path, home), { excludeSystem: true });
|