skills 1.4.0 → 1.4.2
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 +29 -26
- package/dist/_chunks/libs/@clack/prompts.mjs +60 -1
- package/dist/cli.mjs +806 -125
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
The CLI for the open agent skills ecosystem.
|
|
4
4
|
|
|
5
5
|
<!-- agent-list:start -->
|
|
6
|
-
Supports **OpenCode**, **Claude Code**, **Codex**, **Cursor**, and [
|
|
6
|
+
Supports **OpenCode**, **Claude Code**, **Codex**, **Cursor**, and [37 more](#available-agents).
|
|
7
7
|
<!-- agent-list:end -->
|
|
8
8
|
|
|
9
9
|
## Install a Skill
|
|
@@ -42,6 +42,7 @@ npx skills add ./my-local-skills
|
|
|
42
42
|
| `-a, --agent <agents...>` | <!-- agent-names:start -->Target specific agents (e.g., `claude-code`, `codex`). See [Available Agents](#available-agents)<!-- agent-names:end --> |
|
|
43
43
|
| `-s, --skill <skills...>` | Install specific skills by name (use `'*'` for all skills) |
|
|
44
44
|
| `-l, --list` | List available skills without installing |
|
|
45
|
+
| `--copy` | Copy files instead of symlinking to agent directories |
|
|
45
46
|
| `-y, --yes` | Skip all confirmation prompts |
|
|
46
47
|
| `--all` | Install all skills to all agents without prompts |
|
|
47
48
|
|
|
@@ -91,14 +92,14 @@ When installing interactively, you can choose:
|
|
|
91
92
|
|
|
92
93
|
## Other Commands
|
|
93
94
|
|
|
94
|
-
| Command | Description
|
|
95
|
-
| ---------------------------- |
|
|
96
|
-
| `npx skills list` | List installed skills (alias: `ls`)
|
|
97
|
-
| `npx skills find [query]` | Search for skills interactively or by keyword
|
|
98
|
-
| `npx skills remove [skills]` | Remove installed skills from agents
|
|
99
|
-
| `npx skills check` | Check for available skill updates
|
|
100
|
-
| `npx skills update` | Update all installed skills to latest versions
|
|
101
|
-
| `npx skills init [name]` | Create a new SKILL.md template
|
|
95
|
+
| Command | Description |
|
|
96
|
+
| ---------------------------- | ---------------------------------------------- |
|
|
97
|
+
| `npx skills list` | List installed skills (alias: `ls`) |
|
|
98
|
+
| `npx skills find [query]` | Search for skills interactively or by keyword |
|
|
99
|
+
| `npx skills remove [skills]` | Remove installed skills from agents |
|
|
100
|
+
| `npx skills check` | Check for available skill updates |
|
|
101
|
+
| `npx skills update` | Update all installed skills to latest versions |
|
|
102
|
+
| `npx skills init [name]` | Create a new SKILL.md template |
|
|
102
103
|
|
|
103
104
|
### `skills list`
|
|
104
105
|
|
|
@@ -180,13 +181,13 @@ npx skills remove my-skill --agent '*'
|
|
|
180
181
|
npx skills rm my-skill
|
|
181
182
|
```
|
|
182
183
|
|
|
183
|
-
| Option
|
|
184
|
-
|
|
|
185
|
-
| `-g, --global`
|
|
186
|
-
| `-a, --agent`
|
|
187
|
-
| `-s, --skill`
|
|
188
|
-
| `-y, --yes`
|
|
189
|
-
| `--all`
|
|
184
|
+
| Option | Description |
|
|
185
|
+
| -------------- | ------------------------------------------------ |
|
|
186
|
+
| `-g, --global` | Remove from global scope (~/) instead of project |
|
|
187
|
+
| `-a, --agent` | Remove from specific agents (use `'*'` for all) |
|
|
188
|
+
| `-s, --skill` | Specify skills to remove (use `'*'` for all) |
|
|
189
|
+
| `-y, --yes` | Skip confirmation prompts |
|
|
190
|
+
| `--all` | Shorthand for `--skill '*' --agent '*' -y` |
|
|
190
191
|
|
|
191
192
|
## What are Agent Skills?
|
|
192
193
|
|
|
@@ -208,18 +209,19 @@ Skills can be installed to any of these agents:
|
|
|
208
209
|
<!-- supported-agents:start -->
|
|
209
210
|
| Agent | `--agent` | Project Path | Global Path |
|
|
210
211
|
|-------|-----------|--------------|-------------|
|
|
211
|
-
| Amp, Kimi Code CLI, Replit | `amp`, `kimi-cli`, `replit` | `.agents/skills/` | `~/.config/agents/skills/` |
|
|
212
|
+
| Amp, Kimi Code CLI, Replit, Universal | `amp`, `kimi-cli`, `replit`, `universal` | `.agents/skills/` | `~/.config/agents/skills/` |
|
|
212
213
|
| Antigravity | `antigravity` | `.agent/skills/` | `~/.gemini/antigravity/skills/` |
|
|
213
214
|
| Augment | `augment` | `.augment/skills/` | `~/.augment/skills/` |
|
|
214
215
|
| Claude Code | `claude-code` | `.claude/skills/` | `~/.claude/skills/` |
|
|
215
216
|
| OpenClaw | `openclaw` | `skills/` | `~/.openclaw/skills/` |
|
|
216
|
-
| Cline | `cline` | `.
|
|
217
|
+
| Cline | `cline` | `.agents/skills/` | `~/.agents/skills/` |
|
|
217
218
|
| CodeBuddy | `codebuddy` | `.codebuddy/skills/` | `~/.codebuddy/skills/` |
|
|
218
219
|
| Codex | `codex` | `.agents/skills/` | `~/.codex/skills/` |
|
|
219
220
|
| Command Code | `command-code` | `.commandcode/skills/` | `~/.commandcode/skills/` |
|
|
220
221
|
| Continue | `continue` | `.continue/skills/` | `~/.continue/skills/` |
|
|
222
|
+
| Cortex Code | `cortex` | `.cortex/skills/` | `~/.snowflake/cortex/skills/` |
|
|
221
223
|
| Crush | `crush` | `.crush/skills/` | `~/.config/crush/skills/` |
|
|
222
|
-
| Cursor | `cursor` | `.
|
|
224
|
+
| Cursor | `cursor` | `.agents/skills/` | `~/.cursor/skills/` |
|
|
223
225
|
| Droid | `droid` | `.factory/skills/` | `~/.factory/skills/` |
|
|
224
226
|
| Gemini CLI | `gemini-cli` | `.agents/skills/` | `~/.gemini/skills/` |
|
|
225
227
|
| GitHub Copilot | `github-copilot` | `.agents/skills/` | `~/.copilot/skills/` |
|
|
@@ -319,12 +321,11 @@ The CLI searches for skills in these locations within a repository:
|
|
|
319
321
|
- `.augment/skills/`
|
|
320
322
|
- `.claude/skills/`
|
|
321
323
|
- `./skills/`
|
|
322
|
-
- `.cline/skills/`
|
|
323
324
|
- `.codebuddy/skills/`
|
|
324
325
|
- `.commandcode/skills/`
|
|
325
326
|
- `.continue/skills/`
|
|
327
|
+
- `.cortex/skills/`
|
|
326
328
|
- `.crush/skills/`
|
|
327
|
-
- `.cursor/skills/`
|
|
328
329
|
- `.factory/skills/`
|
|
329
330
|
- `.goose/skills/`
|
|
330
331
|
- `.junie/skills/`
|
|
@@ -356,11 +357,13 @@ If `.claude-plugin/marketplace.json` or `.claude-plugin/plugin.json` exists, ski
|
|
|
356
357
|
// .claude-plugin/marketplace.json
|
|
357
358
|
{
|
|
358
359
|
"metadata": { "pluginRoot": "./plugins" },
|
|
359
|
-
"plugins": [
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
360
|
+
"plugins": [
|
|
361
|
+
{
|
|
362
|
+
"name": "my-plugin",
|
|
363
|
+
"source": "my-plugin",
|
|
364
|
+
"skills": ["./skills/review", "./skills/test"]
|
|
365
|
+
}
|
|
366
|
+
]
|
|
364
367
|
}
|
|
365
368
|
```
|
|
366
369
|
|
|
@@ -129,6 +129,65 @@ ${s}
|
|
|
129
129
|
}).join(`
|
|
130
130
|
${import_picocolors.default.cyan(o)} `)}
|
|
131
131
|
${import_picocolors.default.cyan(d)}
|
|
132
|
+
`;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}).prompt();
|
|
136
|
+
}, be = (t) => {
|
|
137
|
+
const { selectableGroups: n = !0 } = t, r = (i, s, c = []) => {
|
|
138
|
+
const a = i.label ?? String(i.value), l = typeof i.group == "string", $ = l && (c[c.indexOf(i) + 1] ?? { group: !0 }), g = l && $.group === !0, p = l ? n ? `${g ? d : o} ` : " " : "";
|
|
139
|
+
if (s === "active") return `${import_picocolors.default.dim(p)}${import_picocolors.default.cyan(A)} ${a} ${i.hint ? import_picocolors.default.dim(`(${i.hint})`) : ""}`;
|
|
140
|
+
if (s === "group-active") return `${p}${import_picocolors.default.cyan(A)} ${import_picocolors.default.dim(a)}`;
|
|
141
|
+
if (s === "group-active-selected") return `${p}${import_picocolors.default.green(T)} ${import_picocolors.default.dim(a)}`;
|
|
142
|
+
if (s === "selected") {
|
|
143
|
+
const f = l || n ? import_picocolors.default.green(T) : "";
|
|
144
|
+
return `${import_picocolors.default.dim(p)}${f} ${import_picocolors.default.dim(a)} ${i.hint ? import_picocolors.default.dim(`(${i.hint})`) : ""}`;
|
|
145
|
+
}
|
|
146
|
+
if (s === "cancelled") return `${import_picocolors.default.strikethrough(import_picocolors.default.dim(a))}`;
|
|
147
|
+
if (s === "active-selected") return `${import_picocolors.default.dim(p)}${import_picocolors.default.green(T)} ${a} ${i.hint ? import_picocolors.default.dim(`(${i.hint})`) : ""}`;
|
|
148
|
+
if (s === "submitted") return `${import_picocolors.default.dim(a)}`;
|
|
149
|
+
const v = l || n ? import_picocolors.default.dim(F) : "";
|
|
150
|
+
return `${import_picocolors.default.dim(p)}${v} ${import_picocolors.default.dim(a)}`;
|
|
151
|
+
};
|
|
152
|
+
return new _D({
|
|
153
|
+
options: t.options,
|
|
154
|
+
initialValues: t.initialValues,
|
|
155
|
+
required: t.required ?? !0,
|
|
156
|
+
cursorAt: t.cursorAt,
|
|
157
|
+
selectableGroups: n,
|
|
158
|
+
validate(i) {
|
|
159
|
+
if (this.required && i.length === 0) return `Please select at least one option.
|
|
160
|
+
${import_picocolors.default.reset(import_picocolors.default.dim(`Press ${import_picocolors.default.gray(import_picocolors.default.bgWhite(import_picocolors.default.inverse(" space ")))} to select, ${import_picocolors.default.gray(import_picocolors.default.bgWhite(import_picocolors.default.inverse(" enter ")))} to submit`))}`;
|
|
161
|
+
},
|
|
162
|
+
render() {
|
|
163
|
+
const i = `${import_picocolors.default.gray(o)}
|
|
164
|
+
${b(this.state)} ${t.message}
|
|
165
|
+
`;
|
|
166
|
+
switch (this.state) {
|
|
167
|
+
case "submit": return `${i}${import_picocolors.default.gray(o)} ${this.options.filter(({ value: s }) => this.value.includes(s)).map((s) => r(s, "submitted")).join(import_picocolors.default.dim(", "))}`;
|
|
168
|
+
case "cancel": {
|
|
169
|
+
const s = this.options.filter(({ value: c }) => this.value.includes(c)).map((c) => r(c, "cancelled")).join(import_picocolors.default.dim(", "));
|
|
170
|
+
return `${i}${import_picocolors.default.gray(o)} ${s.trim() ? `${s}
|
|
171
|
+
${import_picocolors.default.gray(o)}` : ""}`;
|
|
172
|
+
}
|
|
173
|
+
case "error": {
|
|
174
|
+
const s = this.error.split(`
|
|
175
|
+
`).map((c, a) => a === 0 ? `${import_picocolors.default.yellow(d)} ${import_picocolors.default.yellow(c)}` : ` ${c}`).join(`
|
|
176
|
+
`);
|
|
177
|
+
return `${i}${import_picocolors.default.yellow(o)} ${this.options.map((c, a, l) => {
|
|
178
|
+
const $ = this.value.includes(c.value) || c.group === !0 && this.isGroupSelected(`${c.value}`), g = a === this.cursor;
|
|
179
|
+
return !g && typeof c.group == "string" && this.options[this.cursor].value === c.group ? r(c, $ ? "group-active-selected" : "group-active", l) : g && $ ? r(c, "active-selected", l) : $ ? r(c, "selected", l) : r(c, g ? "active" : "inactive", l);
|
|
180
|
+
}).join(`
|
|
181
|
+
${import_picocolors.default.yellow(o)} `)}
|
|
182
|
+
${s}
|
|
183
|
+
`;
|
|
184
|
+
}
|
|
185
|
+
default: return `${i}${import_picocolors.default.cyan(o)} ${this.options.map((s, c, a) => {
|
|
186
|
+
const l = this.value.includes(s.value) || s.group === !0 && this.isGroupSelected(`${s.value}`), $ = c === this.cursor;
|
|
187
|
+
return !$ && typeof s.group == "string" && this.options[this.cursor].value === s.group ? r(s, l ? "group-active-selected" : "group-active", a) : $ && l ? r(s, "active-selected", a) : l ? r(s, "selected", a) : r(s, $ ? "active" : "inactive", a);
|
|
188
|
+
}).join(`
|
|
189
|
+
${import_picocolors.default.cyan(o)} `)}
|
|
190
|
+
${import_picocolors.default.cyan(d)}
|
|
132
191
|
`;
|
|
133
192
|
}
|
|
134
193
|
}
|
|
@@ -272,4 +331,4 @@ ${J}${i.trimStart()}`), r = 3 + stripVTControlCharacters(i.trimStart()).length);
|
|
|
272
331
|
}
|
|
273
332
|
};
|
|
274
333
|
};
|
|
275
|
-
export { Y as a,
|
|
334
|
+
export { Y as a, ve as c, Se as i, xe as l, M as n, be as o, Me as r, fe as s, Ie as t, ye as u };
|