skilllib 1.11.2 → 1.11.4
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 +49 -40
- package/dist/{chunk-OFWHWIER.js → chunk-CS6T66EE.js} +1564 -677
- package/dist/index.js +45 -13
- package/dist/json.d.cts +20 -7
- package/dist/json.d.ts +20 -7
- package/dist/{tui-NGTOOVAQ.js → tui-BDLJOMSC.js} +469 -801
- package/package.json +2 -2
- package/skills/skilllib/SKILL.md +10 -7
package/README.md
CHANGED
|
@@ -45,7 +45,7 @@ Most agents can't turn off a global skill for just one repo. Claude Code can, bu
|
|
|
45
45
|
|
|
46
46
|
## How skilllib fixes it
|
|
47
47
|
|
|
48
|
-
- **🤖 Your agents run it.** One small skill teaches Claude Code, Cursor, Codex, Zed and Grok to use the skilllib CLI. Ask them what's loaded here, what to add, what's out of date, or to move a global skill into the repos that use it.
|
|
48
|
+
- **🤖 Your agents run it.** One small skill teaches Claude Code, Cursor, Codex, Zed and Grok to use the skilllib CLI. Ask them what's loaded here, what to add, what's out of date, or to move a global skill into the repos that use it. The commands agents use have `--json` output shaped for them, and they ask before changing anything.
|
|
49
49
|
- **📚 Your skills: one versioned library.** Every skill has a single master copy in `~/.skilllib/library`, and each change becomes a new version.
|
|
50
50
|
- **📦 Per-repo installs, pinned like dependencies.** Each repo lists its skills and versions in `skilllib.json`. `sync` reproduces them exactly, and `update` moves to the newest.
|
|
51
51
|
- **🤝 One copy, every agent.** skilllib puts one real copy in the repo and links it into whichever folders your other agents read.
|
|
@@ -57,7 +57,7 @@ Most agents can't turn off a global skill for just one repo. Claude Code can, bu
|
|
|
57
57
|
- whether it's committed to git or gitignored
|
|
58
58
|
- how often it was used
|
|
59
59
|
- **🖥 An app when you want to look yourself.** `skilllib` opens a terminal app with the same data and fixes, and can copy a review prompt for any agent.
|
|
60
|
-
- **🛟 Nothing is lost.**
|
|
60
|
+
- **🛟 Nothing is lost.** Your library keeps the skills you remove from a repo, and everything else skilllib removes goes to a backup you can restore with one key.
|
|
61
61
|
|
|
62
62
|
Everything runs locally: no server, no account, no network calls.
|
|
63
63
|
|
|
@@ -90,14 +90,14 @@ On first run, skilllib asks two things:
|
|
|
90
90
|
Then a good first session looks like this:
|
|
91
91
|
|
|
92
92
|
1. **You land in Places, on the repo you're in.** `enter` opens its skills; `enter` again opens a skill's issues and actions.
|
|
93
|
-
2. **Open Health** to see everything worth fixing, in every repo and in your global skills. **✦ Fix N issues automatically…** does the safe ones; the rest are your call, one
|
|
93
|
+
2. **Open Health** to see everything worth fixing, in every repo and in your global skills: what `skilllib doctor` reports. **✦ Fix N issues automatically…** does the safe ones; the rest are your call, one at a time.
|
|
94
94
|
3. **Add skills** to a repo with **+ Add a skill…**, the top row of its list.
|
|
95
95
|
|
|
96
96
|
---
|
|
97
97
|
|
|
98
98
|
## Use it from your agents
|
|
99
99
|
|
|
100
|
-
`skilllib agent-skill install` puts a small `skilllib` skill
|
|
100
|
+
`skilllib agent-skill install` puts a small `skilllib` skill where your agents look: `~/.claude/skills` when one of them reads it (Claude Code, and Cursor and Grok too), and `~/.agents/skills` (a link, or the real copy) for Codex and Zed. This is the one skill that should be global, because it's about every repo. Upgrading skilllib keeps it up to date, and `skilllib agent-skill remove` takes it out. Agents use it from their next session.
|
|
101
101
|
|
|
102
102
|
Then ask in plain words. A few examples, with what the agent runs:
|
|
103
103
|
|
|
@@ -125,8 +125,8 @@ Three panes: **Places** on the left, a **list** on the right, and the **details*
|
|
|
125
125
|
| **Your skills** | Your library: master copies, versioned. Nothing here loads anywhere until you add it to a repo. |
|
|
126
126
|
| **Global** | Everything your agents load in *every* repo: yours, plus vendor skills (plugins, claude.ai, Cursor built-ins). |
|
|
127
127
|
| **Plugins** | Every plugin installed, on or off: what it brings, where it's installed, and how much its skills get used. Turn it on or off, update it, uninstall it, or replace it with library skills. |
|
|
128
|
-
| **Health** |
|
|
129
|
-
| **Projects** | Every repo found in your project folders. `◆` marks the one you're in; `✕` `⚠`
|
|
128
|
+
| **Health** | What `skilllib doctor` reports, in every repo and in Global, each with its fix or choices. |
|
|
129
|
+
| **Projects** | Every repo found in your project folders. `◆` marks the one you're in; `✕` `⚠` its worst issue. |
|
|
130
130
|
| **Settings** | Your agents and the skilllib skill for them, your project folders, hidden repos, and backups. |
|
|
131
131
|
| **Help** | The keys and symbols. |
|
|
132
132
|
|
|
@@ -137,7 +137,7 @@ Three panes: **Places** on the left, a **list** on the right, and the **details*
|
|
|
137
137
|
| *type* | Filter the pane you're in. Word initials work too: `cfw` finds `cloudflare-workers`. |
|
|
138
138
|
| `↑` `↓` | Move |
|
|
139
139
|
| `enter` `→` | One pane deeper: Places → list → details. In the details, apply the selected fix or action. |
|
|
140
|
-
| `esc` `←` | One pane back (`esc` clears a filter first). In the details, `←` `→` move along
|
|
140
|
+
| `esc` `←` | One pane back (`esc` clears a filter first). In the details, `←` `→` move along a line of actions and `↑` `↓` between lines. |
|
|
141
141
|
| `space` | Apply the ★ recommended fix, or show the choices when it's your call; on a group, open or close it |
|
|
142
142
|
| `tab` | Next tab: All · Issues · Local · Global · Plugins · Vendor |
|
|
143
143
|
| `ctrl+r` | Read everything again from disk · `ctrl+c` quits |
|
|
@@ -148,7 +148,7 @@ The list shows everything agents can use in the repo, one row per skill, even wh
|
|
|
148
148
|
|
|
149
149
|
| Column | Meaning |
|
|
150
150
|
|---|---|
|
|
151
|
-
| Source | `lib v2`: from your library · `repo`: committed
|
|
151
|
+
| Source | `lib v2`: from your library · `repo`: the team's (committed to git, or in `.agents/skills` or `.grok/skills`) · `untracked`: only on this machine · `global` (`global ✓`: global on purpose) · `⧉ plugin` · `claude.ai` · `cursor` · `grok` |
|
|
152
152
|
| Uses | Claude Code uses in this repo, last 30 days |
|
|
153
153
|
| Issue | The worst of its issues; the details show them all |
|
|
154
154
|
|
|
@@ -162,15 +162,20 @@ What skilllib flags:
|
|
|
162
162
|
|
|
163
163
|
| Issue | Fixes |
|
|
164
164
|
|---|---|
|
|
165
|
-
| **
|
|
166
|
-
| **
|
|
167
|
-
| **Folder missing** · **
|
|
168
|
-
| **
|
|
169
|
-
|
|
|
170
|
-
| **
|
|
171
|
-
| **
|
|
172
|
-
| **
|
|
173
|
-
|
|
|
165
|
+
| **Repo and global copies** (a repo copy of a skill that also loads globally) | Stop loading it globally. Your call: that changes every repo, so it's offered only when no repo of yours that has or pins the skill would be left with only the global copy for an agent (otherwise the issue says who, and what to do first), and when the global copy is a version in Your skills. If you keep it global on purpose, remove the repo copies skilllib installed instead |
|
|
166
|
+
| **Also in a plugin** | Remove the plugin or turn it off, or turn it off in this repo only (`.claude/settings.local.json`, a local-only file git ignores), or remove your copy from this repo. Cursor ignores repo settings, so once the repo turns the plugin off, only turning the plugin off or removing it helps there |
|
|
167
|
+
| **Folder missing** · **No longer in your library** | Sync the project · copy it back into your library |
|
|
168
|
+
| **Not the pinned version** (the copy is another version from your library, e.g. after a pull) | Install the pinned versions (`sync`; a choice when the copies are committed) |
|
|
169
|
+
| **Out of date** · **Edited here** | Update every out-of-date skill in the repo (or one, from its *Update to vN* action) · save the edits as a new version, or discard them |
|
|
170
|
+
| **Not every agent can use it** | Add the links (links only; nothing is copied or moved). If git tracks a folder a link would go in, you choose whether git sees it |
|
|
171
|
+
| **Differs from your library** · **Not tracked** · **Not in your library** · **From npx skills** | Update your library from it, or replace it with your library's (the team's committed copy is only copied) · track it · import it · import it |
|
|
172
|
+
| **Unused 30 days** | Remove the ones skilllib installed from the repo |
|
|
173
|
+
| **Broken link** (in a repo) | Remove it (your call when git tracks the link). Next to a real copy it's tidy's: it points it at the copy where an agent needs that folder, and removes it otherwise |
|
|
174
|
+
| **Pinned version not in your library** | Install your newest (the folder is missing and your library has no copy of what skilllib.json pins) |
|
|
175
|
+
| **Broken link** · **Not reviewed** (global) | Remove the link · move it to repos, keep it global on purpose, or delete it (the row's actions) |
|
|
176
|
+
| **Not every agent can use it** (global) | Link it into that agent's global folder, e.g. a Codex skill in `~/.agents/skills` or `~/.codex/skills` gets a link in `~/.claude/skills` |
|
|
177
|
+
|
|
178
|
+
These are the issues `skilllib doctor` reports, with the same fixes and choices.
|
|
174
179
|
|
|
175
180
|
### Adding and removing skills
|
|
176
181
|
|
|
@@ -179,9 +184,9 @@ What skilllib flags:
|
|
|
179
184
|
- Claude Code, with or without Cursor or Grok: `.claude/skills/<name>`.
|
|
180
185
|
- Cursor, Codex, Zed or Grok without Claude Code: `.agents/skills/<name>`.
|
|
181
186
|
- Claude Code plus Codex or Zed: the copy goes in `.agents/skills`, with a link in `.claude/skills`. Claude Code only reads `.claude/skills`, and Codex and Zed don't read it.
|
|
182
|
-
- **Remove from repo** deletes that copy and its links; your library keeps it.
|
|
187
|
+
- **Remove from repo** deletes that copy and its links; your library keeps it. When the copy itself sits where skilllib doesn't write (a skills folder that links out of the repo, or a file where the copy goes), it drops just the pin and leaves that copy as it is; a link in such a folder is left too, and said. In the app, an untracked copy goes to Settings › Backups instead (`skilllib remove` only removes skills skilllib manages). If you edited a tracked skill here, skilllib asks first, and the edits go to Settings › Backups.
|
|
183
188
|
- **The repo's own skills are never deleted by skilllib.** You can copy them into your library, or link them so every agent sees them.
|
|
184
|
-
- **Git-tracked folders:** if the repo commits the folder a link would go into (common for `.agents/skills`),
|
|
189
|
+
- **Git-tracked folders:** if the repo commits the folder a link would go into (common for `.agents/skills`), the app asks once and remembers your yes for that repo (in `~/.skilllib/config.json`, `agentsDirOk`); on the command line, `--allow-tracked` allows it for that one command (doctor's *Add links everywhere* choice remembers it, as the app does). If you say no, it tells you which agents can't see the skill there. A skill whose copy git doesn't share (not committed, and not in a folder the repo commits) never gets a link in a committed folder: teammates would get a broken link.
|
|
185
190
|
|
|
186
191
|
### Versions
|
|
187
192
|
|
|
@@ -193,7 +198,7 @@ Every change to a library skill becomes a new version, kept in `~/.skilllib/stor
|
|
|
193
198
|
|
|
194
199
|
| | Like | What it does |
|
|
195
200
|
|---|---|---|
|
|
196
|
-
| `skilllib sync` | `npm ci` | Installs exactly the pinned versions and restores missing ones. It never touches your edits (`--force` resets them, backing them up first). |
|
|
201
|
+
| `skilllib sync` | `npm ci` | Installs exactly the pinned versions and restores missing ones, with the links skilllib.json records; it never rewrites skilllib.json. It never touches your edits (`--force` resets them, backing them up first). |
|
|
197
202
|
| `skilllib outdated` | `npm outdated` | Lists skills with a newer version |
|
|
198
203
|
| `skilllib update [name]` | `npm update` | Moves to the newest version |
|
|
199
204
|
| *Other versions…* in a skill's actions | `npm i x@1` | Pins any version, including older ones |
|
|
@@ -210,7 +215,7 @@ Edit a skill once in **Your skills** (Enter → *Edit SKILL.md*). Every repo tha
|
|
|
210
215
|
- **Keep it global on purpose**: skilllib stops warning about it (also `skilllib global keep <name>`). The mark only records your decision; to undo it, pick **Stop marking it as global on purpose**.
|
|
211
216
|
- **Delete it**: it goes to Settings › Backups.
|
|
212
217
|
|
|
213
|
-
When some of your agents can't see a global skill,
|
|
218
|
+
When some of your agents can't see a global skill, that's a separate issue, **Not every agent can use it**. This happens, for example, with a Codex skill in `~/.agents/skills` or `~/.codex/skills`, which Claude Code doesn't read. Its choice, **Link it for Claude Code**, adds a link in `~/.claude/skills`, and nothing is copied or moved. Moving it to repos works for every agent too. For a skill you keep global on purpose, the link is the ★ fix.
|
|
214
219
|
|
|
215
220
|
Vendor skills (claude.ai, Cursor built-ins) are managed at their source: claude.ai's settings, or Cursor. A plugin's skills offer **Open *plugin* in Plugins**.
|
|
216
221
|
|
|
@@ -225,8 +230,8 @@ Plugins are a big part of what agents load (one plugin can bring dozens of skill
|
|
|
225
230
|
| Scope | `user` (every repo) · `project` / `local` and the repo it's installed in · `claude.ai` (synced from your account) |
|
|
226
231
|
| Brings | Its skills, and `+N` for the other kinds of things it brings: commands, agents, hooks, MCP servers |
|
|
227
232
|
| On | `on` · `off` · `?` for Cursor, which keeps that in its own database |
|
|
228
|
-
| Uses | Claude Code uses of its skills (`plugin:skill`), last 30 days. Your own skill by the same name is counted apart;
|
|
229
|
-
| Issue | **Repeats N of yours** (a skill in your library or global folders) · **Unused 30 days** · **Update
|
|
233
|
+
| Uses | Claude Code uses of its skills (`plugin:skill`), last 30 days. Your own skill by the same name is counted apart here; `skilllib usage` and `status` count both for the skill's name, so moving a skill out of a plugin keeps its history. Two installs of one plugin share a count |
|
|
234
|
+
| Issue | **Repeats N of yours** (a skill in your library or global folders) · **Unused 30 days** (on, ships skills, none used) · **Update available** (its marketplace has a newer version or commit) |
|
|
230
235
|
|
|
231
236
|
Every plugin issue is *your call*: turning plugins on or off, or updating them, changes code that runs in your sessions, so **Fix automatically** never does it.
|
|
232
237
|
|
|
@@ -257,26 +262,27 @@ It's in every skill's actions, in a repo's **⋯** menu (all its skills), and at
|
|
|
257
262
|
|
|
258
263
|
### Duplicates
|
|
259
264
|
|
|
260
|
-
The same skill often reaches your agents more than once: a copy in `.claude/skills` *and* in `.agents/skills`, a global copy *and* a repo copy, a plugin *and* your skill. skilllib keeps **one real copy per skill, plus only the links your agents need**. **Health** lists each case
|
|
265
|
+
The same skill often reaches your agents more than once: a copy in `.claude/skills` *and* in `.agents/skills`, a global copy *and* a repo copy, a plugin *and* your skill. skilllib keeps **one real copy per skill, plus only the links your agents need**. **Health** lists each case with its fix, and the skill's row in a repo or Global shows it too. From the command line, `skilllib doctor` lists them and `skilllib tidy` fixes the folder ones.
|
|
261
266
|
|
|
262
267
|
| What it finds | What it does |
|
|
263
268
|
|---|---|
|
|
264
|
-
| Identical copies in several folders | Keeps one and turns the others into links. In a repo, it keeps the committed copy. Globally, it keeps the one in `~/.agents/skills`. |
|
|
269
|
+
| Identical copies in several folders | Keeps one and turns the others into links where an agent needs that folder (and removes them where none does; a copy the repo commits always stays). In a repo, it keeps the committed copy. Globally, it keeps the one in `~/.agents/skills`. |
|
|
265
270
|
| Links no agent you use needs | Removes them. It keeps links that `skilllib.json` records, because teammates may use other agents. |
|
|
266
271
|
| **Copies that differ** | Shows which agent runs which copy (e.g. Claude Code and Cursor run `.claude`, Codex runs `.agents`), and lets you pick the one to keep. It's your call, so **Fix all** never does it. |
|
|
267
|
-
|
|
|
272
|
+
| Copies that differ behind a link (a link to another copy, in or out of the repo) | Reported only: skilllib never changes what a link points to. Make the copies the same, or remove the link. |
|
|
273
|
+
| A Claude Code plugin with the same skill | Your skill wins. skilllib copies all the plugin's skills into Your skills, then removes the plugin or turns it off (`claude plugin uninstall` / `disable`). If the plugin also brings MCP servers, hooks, agents or commands, turning it off is the default. When the overlap is in one repo, you can instead turn the plugin off only there (in its `.claude/settings.local.json`: Claude Code makes git ignore it when it writes it; without the `claude` command, skilllib writes the file itself and makes git ignore it), or remove your copy from that repo. If the repo commits its copy, it's the team's: skilllib never offers to remove it. A plugin that a repo's own `.claude/settings.json` turns on counts only in that repo. Cursor ignores repo settings: after a repo turns the plugin off, Cursor still lists both there, and only turning the plugin off or removing it changes that. |
|
|
268
274
|
| A Cursor plugin with the same skill | Reported only. Turn the plugin off in Cursor. |
|
|
269
275
|
| A repo copy of a skill you keep global | The repo copy is the extra one: remove it, or stop loading the skill globally after all. Claude Code runs the global copy anyway. |
|
|
270
|
-
| A repo's own skill that also loads globally | Stop loading it globally. The repo's copy is the team's, so skilllib never offers to remove it. |
|
|
276
|
+
| A repo's own skill that also loads globally | Stop loading it globally (when no agent in any of your repos would then lack it). The repo's copy is the team's, so skilllib never offers to remove it. |
|
|
271
277
|
|
|
272
278
|
- **It never moves a real copy.** `skilllib.json` is shared, so a move for your agents could break a teammate's.
|
|
273
|
-
- **It never adds links.** That's `skilllib link`, or
|
|
279
|
+
- **It never adds links.** That's `skilllib link`, or the *Not every agent can use it* issue's fix.
|
|
274
280
|
- **It leaves committed files alone** unless you say so: Health asks first, and `skilllib tidy` needs `--allow-git`.
|
|
275
281
|
- **Cursor lists a skill once** even when it reaches it through several folders (tested September 2026). It runs the copy from the first of `.cursor`, `.claude`, `.codex`, `.grok`, `.agents` (seen in its app bundle, October 2026). It lists a plugin's copy and your copy separately.
|
|
276
282
|
|
|
277
283
|
### Backups
|
|
278
284
|
|
|
279
|
-
skilllib never really deletes anything you can't get back. What it removes goes to Settings › Backups, and `enter` puts
|
|
285
|
+
skilllib never really deletes anything you can't get back. What it removes goes to Settings › Backups (`skilllib restore`), and `enter` puts the folder back where it came from. A skill removed from a repo comes back as a folder; doctor then offers to track it again:
|
|
280
286
|
- removed library skills and untracked copies go to `~/.skilllib/trash`
|
|
281
287
|
- removed global skills go to `~/.skilllib/global-backup`
|
|
282
288
|
- copies replaced by a link go to `~/.skilllib/tidy-backup`
|
|
@@ -292,7 +298,7 @@ A skill is a folder with a `SKILL.md`. These are all the places your agents load
|
|
|
292
298
|
| Where | Examples | Who sees it |
|
|
293
299
|
|---|---|---|
|
|
294
300
|
| **The repo** | `.claude/skills`, `.agents/skills`, `.grok/skills`, `.cursor/skills`, `.codex/skills` | Agents working in that repo |
|
|
295
|
-
| **Subfolders** (monorepos) | `packages/web/.claude/skills`, `packages/api/.agents/skills` | Agents working in that folder. `skilllib status` lists them; skilllib never links, tracks or tidies them, since that would make them load repo-wide |
|
|
301
|
+
| **Subfolders** (monorepos) | `packages/web/.claude/skills`, `packages/api/.agents/skills` | Agents working in that folder. `skilllib status` lists them; skilllib never links, tracks or tidies them, since that would make them load repo-wide. A subfolder with its own `skilllib.json` is a project of its own: run skilllib there (scan finds repos, not subfolders). skilllib looks for subfolders up to five folders deep (`apps/web/packages/ui` is four) |
|
|
296
302
|
| **Global folders** | `~/.claude/skills`, `~/.agents/skills` (`npx skills add` installs here), `~/.codex/skills`, `~/.cursor/skills`, `~/.grok/skills` | **Every repo** |
|
|
297
303
|
| **Vendors** | Claude Code plugins (`/plugin`), claude.ai skills, Claude Code's bundled commands, Cursor built-ins and marketplace, Codex system skills and `/etc/codex/skills` (admin), Grok's bundled skills | Every repo (a repo's `.claude/settings.json` can turn a plugin on or off just there); only the vendor can remove them |
|
|
298
304
|
| **Your skills** | `~/.skilllib/library` | Nobody, until you add a skill to a repo |
|
|
@@ -356,7 +362,7 @@ A skill is a folder with a `SKILL.md`. These are all the places your agents load
|
|
|
356
362
|
|
|
357
363
|
It also reads claude.ai skills under `~/.claude/skills/synced`. It does **not** read `.codex/skills`, and it ignores `CLAUDE_CONFIG_DIR`. Turn a compat folder off with `[compat.claude] skills` or `[compat.cursor] skills` in `~/.grok/config.toml` (`GROK_CLAUDE_SKILLS_ENABLED` / `GROK_CURSOR_SKILLS_ENABLED`). The order above was checked with `grok inspect` on Grok 1.0.41 (October 2026).
|
|
358
364
|
- **How it uses them.** The description decides relevance; `/name` runs one, and Grok can pick one itself. `disable-model-invocation: true` keeps it manual. Project skills in an untrusted folder are skipped.
|
|
359
|
-
- **Installs.** skilllib does not
|
|
365
|
+
- **Installs.** skilllib does not install into `.grok/skills` or `~/.grok/skills` (the one change it makes there is removing a broken link, when you choose to). Grok already reads `.agents/skills`, and `.claude/skills` while Claude compatibility is on, so the fewest-folder install reaches it. A skill your team committed in `.grok/skills` stays the repo's own: skilllib can copy it into your library and leaves that folder in place. Adding that library skill back writes a second copy in the usual install folder for your agents (see [Adding and removing skills](#adding-and-removing-skills)). Grok still runs the team's `.grok/skills` copy. Claude Code runs the library copy. With `[compat.claude] skills = false`, Grok stops reading `.claude/skills`; skilllib still counts that folder as visible to Grok.
|
|
360
366
|
- **Limits.** No per-repo switch for a global skill. Plugins (`~/.grok/plugins`) stay off until named in `~/.grok/config.toml`, and skilllib doesn't list them yet.
|
|
361
367
|
|
|
362
368
|
---
|
|
@@ -375,29 +381,32 @@ skilllib status this repo's skills, which agents load them, and
|
|
|
375
381
|
skilllib add | remove <name> change this repo's skills
|
|
376
382
|
skilllib sync [--all] install exactly the pinned versions
|
|
377
383
|
skilllib outdated [--all] skills with a newer version
|
|
378
|
-
skilllib update [name
|
|
384
|
+
skilllib update [name...|--all] move to the newest versions (--all: every project)
|
|
379
385
|
skilllib link [--all] make every skill here usable by all your agents
|
|
380
386
|
skilllib tidy [--all|--global] one real copy per skill, plus only the links your agents need
|
|
381
387
|
|
|
382
388
|
skilllib list | show <name> your library
|
|
383
|
-
skilllib import <dir>... add skill folders to your library (--global: all your global skills)
|
|
389
|
+
skilllib import <dir>... add skill folders to your library (--global: all your global skills); a repo that tracks that copy pins the new version
|
|
384
390
|
skilllib global [keep|unkeep] your global skills; mark the ones you keep global on purpose
|
|
385
391
|
skilllib global move <name> --to <repo> load a global skill only in those repos
|
|
386
392
|
skilllib new <name> [desc] create a skill
|
|
387
393
|
|
|
388
|
-
skilllib
|
|
394
|
+
skilllib projects your projects and their skills
|
|
395
|
+
skilllib usage [--days N] which skills Claude Code used (a plugin's copy counts for the skill's name)
|
|
389
396
|
skilllib doctor [--fix] find (and fix) problems
|
|
390
397
|
skilllib apply <id> [choice] apply one problem's fix, or the choice you pick (ids from status or doctor --json)
|
|
391
|
-
skilllib restore [name] put back something skilllib moved out
|
|
398
|
+
skilllib restore [name] put back something skilllib moved out (copies moved together come back together)
|
|
399
|
+
skilllib unhide <path> show a hidden project again
|
|
400
|
+
skilllib ui open the app (only in a terminal)
|
|
392
401
|
skilllib agent-skill [install|remove] teach your agents to use skilllib
|
|
393
402
|
skilllib --version
|
|
394
403
|
```
|
|
395
404
|
|
|
396
405
|
The repo commands (`status`, `add`, `remove`, `sync`, `outdated`, `update`, `link`, `tidy`) work in a git repo or a folder with `skilllib.json`, and never in your home folder: skills there would load in every repo. Elsewhere they stop with an error. `--all`, `tidy --global` and `status --json` work from any folder; outside a repo, `status --json` lists only the global skills.
|
|
397
406
|
|
|
398
|
-
Flags: `--force` (overwrite local edits, backed up to `~/.skilllib/edit-backup`), `--allow-tracked` (link into git-tracked folders; skills git doesn't share are still left out), `--days N`, `--json`. For `tidy`: `--dry-run` (preview), `--allow-git` (also change committed files), `<name> --keep <folder>` (the copy that wins when copies differ).
|
|
407
|
+
Flags: `--force` (overwrite local edits, backed up to `~/.skilllib/edit-backup`), `--allow-tracked` (link into git-tracked folders, for that command only; skills git doesn't share are still left out), `--days N`, `--json`. For `tidy`: `--dry-run` (preview), `--allow-git` (also change committed files), `<name> --keep <folder>` (the copy that wins when copies differ).
|
|
399
408
|
|
|
400
|
-
A command exits 1 when it couldn't do all you asked: a skill skipped (not in the library, or local edits in the way), links git-tracked folders blocked, an unknown `tidy` name or `--keep` folder. What it did do is still done, and listed. An unknown or misspelled flag is an error too, so a typo never runs silently. With `--json`, a
|
|
409
|
+
A command exits 1 when it couldn't do all you asked: a skill skipped (not in the library, or local edits in the way), links git-tracked folders blocked, a link something else is in the way of (a file or another copy), an unknown `tidy` name or `--keep` folder, or (with `--all`, and `projects`) a repo left out because its `skilllib.json` can't be read. What it did do is still done, and listed. An unknown or misspelled flag is an error too, so a typo never runs silently. With `--json`, an error that stops a command prints `{"error": "…"}` on stdout as well as the message on stderr. The commands SKILL.md lists as messages-only print nothing on stdout otherwise: read their exit code.
|
|
401
410
|
|
|
402
411
|
**`--json`** prints one line of JSON on stdout, for scripts and agents. Messages and warnings go to stderr. It works with `status`, `list`, `show`, `projects`, `outdated`, `usage`, `doctor`, `apply`, `add`, `remove`, `sync`, `update`, `import`, `global move` and `agent-skill`. The output is shaped to keep agents fast and cheap:
|
|
403
412
|
|
|
@@ -410,8 +419,8 @@ A command exits 1 when it couldn't do all you asked: a skill skipped (not in the
|
|
|
410
419
|
- the repo's top-level files
|
|
411
420
|
|
|
412
421
|
Skills that share every attribute are grouped, and attributes at their usual value are left out.
|
|
413
|
-
- **`list --json`**: inside a repo, the library skills the repo already has (names only), and the others with
|
|
414
|
-
- **`add`, `remove`, `sync` and `update`** list each change and the folders it wrote to, so there's nothing left to check.
|
|
422
|
+
- **`list --json`**: inside a repo, the library skills the repo already has (names only), and the others with a short description (its first sentence, or the start of it).
|
|
423
|
+
- **`add`, `remove`, `sync` and `update`** list each change, and (except `remove`) the folders it wrote to, so there's nothing left to check.
|
|
415
424
|
|
|
416
425
|
The `skilllib` skill runs `status` and `list` as it loads (in Claude Code), so an agent usually answers "which skills can you use here?" in one step.
|
|
417
426
|
|
|
@@ -445,7 +454,7 @@ Environment variables: `SKILLLIB_HOME` moves `~/.skilllib`, `$VISUAL` / `$EDITOR
|
|
|
445
454
|
|
|
446
455
|
**Does it change my repos?** Only when you tell it to: adding, removing, linking or tidying a skill, which updates `skilllib.json`. It asks before linking into a folder git tracks, and before tidy changes a committed file. It never deletes the only copy of a repo's own skill.
|
|
447
456
|
|
|
448
|
-
**Can I share skills with my team?** Commit `skilllib.json` along with the skill folders (`.agents/skills`, and `.claude/skills` if you use Claude Code). Or keep
|
|
457
|
+
**Can I share skills with my team?** Commit `skilllib.json` along with the skill folders (`.agents/skills`, and `.claude/skills` if you use Claude Code). Or keep `~/.skilllib/library` in a git repo of its own (the rest of `~/.skilllib` is personal: config, backups, the version store), and run `skilllib import` on teammates' machines from a clone of it.
|
|
449
458
|
|
|
450
459
|
**Why does usage only count Claude Code?** It's the only agent whose transcripts skilllib reads. Grok keeps sessions under `~/.grok/sessions`, and Cursor doesn't keep them locally. Codex's format hasn't been tested yet. That's why "unused" is a strong hint, not proof.
|
|
451
460
|
|