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 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 allowed
8
- skill, a short disclosure of what was used, and fewer setup interruptions.
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 policy and routing for AI
23
- agents. It separates `installed` from `allowed`, checks workflow policy and
24
- guard state before use, and leaves a clear record of which skill influenced the
25
- answer.
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
- Ask your AI to set up SkillBoard in the project you want to manage. The AI runs
87
- SkillBoard behind the scenes, then answers from the generated brief instead of
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 deny-by-default. Installing a skill does not make it automatically
149
- callable. A workflow, source, and invocation decision must make that explicit.
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 in this
7
- project?" or "can you make this reviewed skill available for the current
8
- workflow?" The AI runs SkillBoard behind the scenes: it reads the current brief,
9
- uses one current action id only after confirmation when policy would change, and
10
- runs the guard automatically before actual skill use. For already-allowed
11
- skills, the AI should tell you which skill it is about to use and which skill it
12
- used in the result instead of asking for another approval. That disclosure is an
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
- Use no-prompt npx package execution when you want to bootstrap a project
19
- without keeping a global SkillBoard binary installed:
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
- SkillBoard does not make installed skills automatically callable. It imports
30
- trusted local skills as manual-only and keeps runtime/plugin skills quarantined
31
- until their source is reviewed. The brief presents unreviewed runtime sources as
32
- one-time review decisions rather than default block recommendations; after
33
- review, individual quarantined skills can be activated as manual-only workflow
34
- skills. When `init` creates or discovers workflows, use one of the workflow names
35
- it prints for the first brief. If `init` does not print a workflow, run the unscoped `brief` command it prints instead. The explicit package/binary spelling
36
- avoids an extra npx install prompt and keeps the executable name clear.
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 init
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 safe mutating step. npm installation itself does not
98
- modify a project, but init creates the files that let agents discover the control
99
- plane without a manual prompt and inventories already installed local agent
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.7",
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",
@@ -1,3 +1,4 @@
1
+ // allow: SIZE_OK - action-card construction split is deferred from the 0.2.7 release gate.
1
2
  import {
2
3
  applyOrNull,
3
4
  blockedByWorkflow,
@@ -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 hermesHome = env.HERMES_HOME ?? join(home, ".hermes");
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
- join(home, ".claude", "skills"),
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,
@@ -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") || 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 });