@klhapp/skillmux 1.10.0 → 1.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -0
- package/README.md +26 -19
- package/docs/README.md +3 -3
- package/docs/assets/architecture-dark.svg +39 -32
- package/docs/assets/architecture-light.svg +25 -18
- package/docs/cli.md +80 -33
- package/docs/concepts.md +15 -11
- package/docs/configuration.md +6 -4
- package/docs/deployment.md +1 -1
- package/docs/getting-started.md +21 -13
- package/docs/mcp-routing.md +1 -1
- package/docs/skill-management.md +39 -19
- package/docs/troubleshooting.md +4 -4
- package/package.json +1 -1
- package/src/adapters.ts +11 -11
- package/src/cli.ts +255 -72
- package/src/commands/audit.ts +2 -2
- package/src/commands/config.ts +23 -15
- package/src/commands/context.ts +11 -10
- package/src/commands/core.ts +2 -2
- package/src/commands/doctor.ts +31 -10
- package/src/commands/eval.ts +14 -4
- package/src/commands/init.ts +175 -124
- package/src/commands/install.ts +36 -13
- package/src/commands/project.ts +177 -44
- package/src/commands/report.ts +3 -3
- package/src/commands/scan.ts +18 -8
- package/src/commands/shared.ts +7 -14
- package/src/commands/skill.ts +2 -1
- package/src/commands/target.ts +27 -9
- package/src/commands/update.ts +16 -9
- package/src/completions.ts +41 -15
- package/src/config-service.ts +3 -3
- package/src/init-agents.ts +329 -0
- package/src/init-instructions.ts +47 -28
- package/src/mcp-registration.ts +89 -0
- package/src/output.ts +53 -16
- package/src/prompts.ts +75 -20
- package/src/scan.ts +53 -19
- package/src/server.ts +1 -1
- package/src/init-clients.ts +0 -220
package/docs/cli.md
CHANGED
|
@@ -4,11 +4,11 @@ The Bun package and standalone Linux executable expose the same Skillmux CLI.
|
|
|
4
4
|
For Linux installation, use the [pinned checksum-verified download](getting-started.md#install-the-cli)
|
|
5
5
|
or, when provenance verification is required, the
|
|
6
6
|
[attested GitHub CLI path](getting-started.md#install-with-github-cli-attestation).
|
|
7
|
-
Native management belongs on the machine that owns the
|
|
7
|
+
Native management belongs on the machine that owns the agent skill directories:
|
|
8
8
|
use the built-in `local` target for `init`, `install`, pinning, and `sync`.
|
|
9
9
|
Named remote contexts administer shared-server configuration through its
|
|
10
10
|
administrative API only; they do not install, pin, synchronize, or otherwise
|
|
11
|
-
manage skill directories on remote
|
|
11
|
+
manage skill directories on remote agent machines.
|
|
12
12
|
|
|
13
13
|
In this guide, **local target** means the filesystem and process selected by
|
|
14
14
|
the built-in CLI context. It does not describe local inference. A local target
|
|
@@ -161,59 +161,79 @@ The JSON response contains no credential, API-key, or token values.
|
|
|
161
161
|
|
|
162
162
|
`config init` writes only `vault_path`. It leaves an existing config unchanged
|
|
163
163
|
and does not add `local_vault_paths`. Remote contexts administer the deployed
|
|
164
|
-
server configuration; they never administer
|
|
165
|
-
sync, or any other remote-
|
|
164
|
+
server configuration; they never administer agent skill installation, pins,
|
|
165
|
+
sync, or any other remote-agent directory operation.
|
|
166
166
|
|
|
167
167
|
---
|
|
168
168
|
|
|
169
169
|
## Setup planner (`skillmux init`)
|
|
170
170
|
|
|
171
171
|
Run `skillmux init` with no arguments in a terminal to start guided setup.
|
|
172
|
-
|
|
173
|
-
|
|
172
|
+
On a machine with no config yet, it first asks for the skill vault path
|
|
173
|
+
(defaulting to `~/skills`) rather than assuming it silently — the vault
|
|
174
|
+
must already exist there (`skillmux scan`/`install` create it). Skillmux
|
|
175
|
+
preselects agents it can detect from filesystem evidence, asks for core
|
|
176
|
+
skills, prints one complete review, and applies after one confirmation.
|
|
174
177
|
The prompt stays line-oriented and does not use an alternate terminal screen.
|
|
175
178
|
|
|
176
|
-
Select
|
|
179
|
+
Select agents by product name:
|
|
177
180
|
|
|
178
181
|
```sh
|
|
179
|
-
skillmux init --
|
|
180
|
-
skillmux init --
|
|
182
|
+
skillmux init --agent claude-code --agent codex --core csv-formatter --dry-run
|
|
183
|
+
skillmux init --agent claude-code --agent codex --core csv-formatter --yes
|
|
181
184
|
```
|
|
182
185
|
|
|
183
|
-
Skillmux supports these
|
|
186
|
+
Skillmux supports these agent IDs:
|
|
184
187
|
|
|
185
|
-
|
|
|
188
|
+
| Agent | Skill delivery |
|
|
186
189
|
|--------|----------------|
|
|
187
190
|
| `claude-code` | `~/.claude/skills` |
|
|
188
191
|
| `codex` | `$CODEX_HOME/skills`, falling back to `~/.codex/skills` |
|
|
189
|
-
| `
|
|
192
|
+
| `opencode`, `github-copilot`, `windsurf` | Shared `~/.agents/skills` surface |
|
|
190
193
|
| `antigravity` | `~/.gemini/config/skills` |
|
|
191
194
|
| `goose`, `hermes` | Manual full-vault configuration |
|
|
192
|
-
| `skillmux-mcp` | Manual MCP registration |
|
|
193
195
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
196
|
+
There's no agent ID for "just MCP" — pass `--show-mcp-setup` to also print
|
|
197
|
+
the MCP registration snippet, independent of which (if any) agents you
|
|
198
|
+
select. A tool not in this table isn't supported by `init` yet; for an
|
|
199
|
+
arbitrary directory not tied to any supported agent, use `skillmux target
|
|
200
|
+
add <name> --dir <dir> --yes` directly instead of `init`.
|
|
201
|
+
|
|
202
|
+
`--show-mcp-setup` only prints the snippet; it never registers anything.
|
|
203
|
+
For `claude-code` and `codex`, `--register-mcp` goes further and runs that
|
|
204
|
+
agent's own CLI (`claude mcp add` / `codex mcp add`) to register skillmux as
|
|
205
|
+
an MCP server directly, so you don't have to paste the snippet yourself. In
|
|
206
|
+
guided mode, if any selected agent supports it, skillmux asks before
|
|
207
|
+
registering; noninteractive runs only register when `--register-mcp` is
|
|
208
|
+
passed explicitly. It is a no-op for agents with no known registration
|
|
209
|
+
command (skip it and use `--show-mcp-setup` instead).
|
|
210
|
+
|
|
211
|
+
The managed instruction block only teaches an agent to call `resolve_skill`/
|
|
212
|
+
`fetch_skill` (MCP tools), so `init` only writes it for an agent actually
|
|
213
|
+
getting MCP this run — one you passed `--register-mcp` for, or any agent at
|
|
214
|
+
all when `--show-mcp-setup` is set. A purely native run (neither flag) writes
|
|
215
|
+
no instruction files, by design; `--no-instructions` forces that off even
|
|
216
|
+
when MCP flags are present.
|
|
197
217
|
|
|
198
218
|
`--dry-run` prints the config, target, instruction, and core plan without
|
|
199
219
|
prompting or writing. `--json` emits one schema-versioned plan or result
|
|
200
220
|
object. Noninteractive writes require `--yes`. `--interactive` forces the
|
|
201
|
-
wizard and seeds it with supplied flags. `--no-
|
|
202
|
-
|
|
221
|
+
wizard and seeds it with supplied flags. `--no-sync` saves setup without
|
|
222
|
+
materializing links.
|
|
203
223
|
|
|
204
224
|
Skillmux rejects a target that currently links to the whole vault. Convert it
|
|
205
225
|
only after reviewing the smaller post-sync skill set:
|
|
206
226
|
|
|
207
227
|
```sh
|
|
208
|
-
skillmux init --
|
|
228
|
+
skillmux init --agent claude-code --migrate-full-vault \
|
|
209
229
|
--core csv-formatter --dry-run
|
|
210
|
-
skillmux init --
|
|
230
|
+
skillmux init --agent claude-code --migrate-full-vault \
|
|
211
231
|
--core csv-formatter --yes
|
|
212
232
|
```
|
|
213
233
|
|
|
214
|
-
|
|
234
|
+
Agent instruction adapters append one managed discovery block and preserve
|
|
215
235
|
the rest of each file. Skillmux uses `.hermes.md` for Hermes and refuses
|
|
216
|
-
`SOUL.md` or Hermes's installed-source `AGENTS.md`.
|
|
236
|
+
`SOUL.md` or Hermes's installed-source `AGENTS.md`. An agent without a safe
|
|
217
237
|
user-level convention reports manual setup.
|
|
218
238
|
|
|
219
239
|
---
|
|
@@ -230,24 +250,35 @@ Skillmux resolves the project directory from an explicit positional path, then
|
|
|
230
250
|
the current Git root, then the current directory. It suggests the directory
|
|
231
251
|
basename as the project-group name.
|
|
232
252
|
|
|
233
|
-
The noninteractive form accepts repeatable
|
|
253
|
+
The noninteractive form accepts repeatable agent and skill flags:
|
|
234
254
|
|
|
235
255
|
```sh
|
|
236
256
|
skillmux project init ~/code/skillmux \
|
|
237
257
|
--name skillmux \
|
|
238
|
-
--
|
|
239
|
-
--
|
|
258
|
+
--agent claude-code \
|
|
259
|
+
--agent codex \
|
|
240
260
|
--skill sdd-tdd \
|
|
241
261
|
--skill code-context \
|
|
242
262
|
--yes
|
|
243
263
|
```
|
|
244
264
|
|
|
245
|
-
`--
|
|
265
|
+
`--agent` maps product names to configured, deduplicated targets. Advanced
|
|
246
266
|
callers can attach a configured target with repeated `--target <name>`.
|
|
247
267
|
Re-running the command merges missing paths, skills, and target attachments.
|
|
248
268
|
It validates the complete manifest before an atomic write and runs `sync` by
|
|
249
269
|
default. Use `--no-sync` when another process will materialize the links.
|
|
250
270
|
|
|
271
|
+
`--register-mcp` is the project-local counterpart to `skillmux init
|
|
272
|
+
--register-mcp`, narrowed to `claude-code` — the only agent whose own CLI
|
|
273
|
+
has a project MCP scope (`codex mcp add` has no scope flag at all, so codex
|
|
274
|
+
stays global-only regardless). It runs `claude mcp add -s project` with this
|
|
275
|
+
project directory as the working directory, which writes a committed
|
|
276
|
+
`.mcp.json` shared with your team rather than the global, personal
|
|
277
|
+
registration `skillmux init` makes. Same instruction-writing rule as `init`:
|
|
278
|
+
a project-root `CLAUDE.md` is written only for an agent actually getting
|
|
279
|
+
registered this run, never unconditionally. Guided mode asks before
|
|
280
|
+
registering, when the selected agents include one that supports it.
|
|
281
|
+
|
|
251
282
|
Direct project commands support later maintenance:
|
|
252
283
|
|
|
253
284
|
```sh
|
|
@@ -257,13 +288,13 @@ skillmux project add-path skillmux ~/code/skillmux --yes
|
|
|
257
288
|
skillmux project remove-path skillmux ~/old/skillmux --yes
|
|
258
289
|
skillmux project pin skillmux sdd-tdd code-context --yes
|
|
259
290
|
skillmux project unpin skillmux old-skill --yes
|
|
260
|
-
skillmux project attach skillmux --
|
|
291
|
+
skillmux project attach skillmux --agent claude-code --agent codex --yes
|
|
261
292
|
skillmux project detach skillmux --target codex --yes
|
|
262
293
|
```
|
|
263
294
|
|
|
264
295
|
`add-path` and `remove-path` detect the current Git root when the path is
|
|
265
|
-
omitted.
|
|
266
|
-
|
|
296
|
+
omitted. Agent attachments map to configured physical targets and deduplicate
|
|
297
|
+
agents that share `~/.agents/skills`. Mutating commands validate the complete
|
|
267
298
|
manifest and replace it atomically. Run `skillmux sync` after direct
|
|
268
299
|
maintenance commands to materialize the new state.
|
|
269
300
|
|
|
@@ -271,7 +302,7 @@ maintenance commands to materialize the new state.
|
|
|
271
302
|
|
|
272
303
|
## Advanced targets (`skillmux target`)
|
|
273
304
|
|
|
274
|
-
Most users should select products with `init --
|
|
305
|
+
Most users should select products with `init --agent`. Use `target` commands
|
|
275
306
|
for custom delivery directories and manifest inspection:
|
|
276
307
|
|
|
277
308
|
```sh
|
|
@@ -358,7 +389,7 @@ skillmux audit prune --older-than 30d --json
|
|
|
358
389
|
# Promote observed, correlated fetches into an eval case file
|
|
359
390
|
skillmux eval promote --since 7d --dry-run
|
|
360
391
|
skillmux eval promote --since 7d --yes
|
|
361
|
-
skillmux eval promote --since 7d --
|
|
392
|
+
skillmux eval promote --since 7d --out eval/observed.json --yes
|
|
362
393
|
```
|
|
363
394
|
|
|
364
395
|
`report` reads `--server <url>`, `--db <path>` (an explicit SQLite file,
|
|
@@ -383,7 +414,7 @@ manual pruning is for on-demand cleanup or a tighter window.
|
|
|
383
414
|
|
|
384
415
|
`eval promote` reads correlated fetches since `--since`, deduplicates them by
|
|
385
416
|
normalized query, and writes `{ query, split: "observed", relevant_skill_ids
|
|
386
|
-
}` cases to `--
|
|
417
|
+
}` cases to `--out` (or deprecated alias `--target`; default an `eval-observed.json` file under
|
|
387
418
|
`state_dir`; never the hand-curated `eval/queries.json` unless given
|
|
388
419
|
explicitly). It never rewrites a case for a query already present in the
|
|
389
420
|
target file; skipped counts are reported in the summary. Because promoted
|
|
@@ -404,7 +435,7 @@ The HTTP server has two separate surfaces:
|
|
|
404
435
|
The MCP bearer token applies only to `/mcp`. The administrative bearer token
|
|
405
436
|
below applies only to `/admin/v1/*` (and `GET /stats`); neither credential grants access to the
|
|
406
437
|
other surface. Named contexts use the latter to administer the deployed server,
|
|
407
|
-
not any remote
|
|
438
|
+
not any remote agent skill directory.
|
|
408
439
|
|
|
409
440
|
Remote servers expose administrative control endpoints under `/admin/v1/*` when enabled in configuration:
|
|
410
441
|
|
|
@@ -456,12 +487,28 @@ When `--json` or `SKILLMUX_JSON=true` is set, all output is emitted to `stdout`
|
|
|
456
487
|
{
|
|
457
488
|
"schema_version": 1,
|
|
458
489
|
"ok": true,
|
|
490
|
+
"context": "local",
|
|
459
491
|
"target": "local",
|
|
460
492
|
"data": { ... },
|
|
461
493
|
"error": null
|
|
462
494
|
}
|
|
463
495
|
```
|
|
464
496
|
|
|
497
|
+
The `context` field identifies the execution context (`"local"` or `{ "name": "<context>", "server": "<url>" }`). The `target` field carries identical content but is deprecated; consumers should read `context`. It stays in the payload as a compatibility alias so existing automation keeps parsing, and no removal is planned.
|
|
498
|
+
|
|
499
|
+
`skillmux init` additionally repeats its payload as deprecated top-level
|
|
500
|
+
`command`, `phase`, `dry_run`, `applied`, `plan`, and `result` keys, which
|
|
501
|
+
predate this envelope. They carry exactly the same content as `data` and are
|
|
502
|
+
kept only so existing automation keeps working. Read `data` instead. The
|
|
503
|
+
duplicated keys stay for the same reason as `target` above, and no removal
|
|
504
|
+
is planned.
|
|
505
|
+
|
|
506
|
+
`skillmux scan --format json` is the one exception to the envelope. It
|
|
507
|
+
predates this contract and prints a bare `{"scanned": N, "findings": [...]}`
|
|
508
|
+
object instead. It is deprecated and warns on stderr, which leaves stdout
|
|
509
|
+
parseable for existing consumers. Use the global `--json` for anything new,
|
|
510
|
+
and read `data` for the same fields.
|
|
511
|
+
|
|
465
512
|
### Exit codes
|
|
466
513
|
|
|
467
514
|
| Code | Meaning | Examples |
|
package/docs/concepts.md
CHANGED
|
@@ -5,7 +5,7 @@ Skillmux separates three decisions:
|
|
|
5
5
|
| Decision | Choices |
|
|
6
6
|
| --- | --- |
|
|
7
7
|
| Skill delivery | Native core/project pins or routed MCP retrieval |
|
|
8
|
-
| Process location | On the
|
|
8
|
+
| Process location | On the agent machine or as a shared HTTP service |
|
|
9
9
|
| Packaging | Skillmux CLI installation or Skillmux server deployment |
|
|
10
10
|
|
|
11
11
|
Retrieval capability is a fourth, independent concern: lexical, hybrid,
|
|
@@ -25,7 +25,7 @@ The default vault checkout path is `~/skills`. Set `vault_path` in
|
|
|
25
25
|
`~/.config/skillmux/config.toml` when its checkout lives elsewhere. On one
|
|
26
26
|
machine, `~/skills` can be both the vault source of truth and its checkout.
|
|
27
27
|
In a shared topology, use a Git-backed vault source of truth, a checkout on
|
|
28
|
-
each
|
|
28
|
+
each agent machine for the Skillmux CLI, and a checkout on the server for
|
|
29
29
|
Skillmux server. Skillmux does not pull, push, replicate, or determine
|
|
30
30
|
freshness between checkouts; Git and the deployment process own those jobs.
|
|
31
31
|
|
|
@@ -45,7 +45,7 @@ Skillmux applies three policies to one vault checkout:
|
|
|
45
45
|
|
|
46
46
|
| Tier | Scope | Delivery |
|
|
47
47
|
| --- | --- | --- |
|
|
48
|
-
| Core | Each configured target | Native
|
|
48
|
+
| Core | Each configured target | Native agent skill directory |
|
|
49
49
|
| Project | Selected project paths and targets | Project-local native skill directory |
|
|
50
50
|
| Routed | Full indexed vault | MCP on demand |
|
|
51
51
|
|
|
@@ -55,7 +55,7 @@ one.
|
|
|
55
55
|
|
|
56
56
|
One skill can serve different roles across machines or projects, but the
|
|
57
57
|
shared manifest prevents conflicting core and project assignments. Core stays
|
|
58
|
-
capped at 25 skills to protect
|
|
58
|
+
capped at 25 skills to protect agent startup context.
|
|
59
59
|
|
|
60
60
|
Delivery tiers do not select a deployment. A local Skillmux process can serve
|
|
61
61
|
routed skills over stdio, while a shared Skillmux process can serve its server
|
|
@@ -66,7 +66,7 @@ checkout over HTTP.
|
|
|
66
66
|
```mermaid
|
|
67
67
|
flowchart TD
|
|
68
68
|
V[Git-backed vault source of truth]
|
|
69
|
-
V -->|
|
|
69
|
+
V -->|agent checkout| CLI[Skillmux CLI]
|
|
70
70
|
V -->|server checkout| SRV[Skillmux server]
|
|
71
71
|
CLI --> NM[Native management: filesystem links]
|
|
72
72
|
CLI --> LM[Local MCP: stdio]
|
|
@@ -75,7 +75,7 @@ flowchart TD
|
|
|
75
75
|
|
|
76
76
|
| Topology | Process location | Transport | Typical installation |
|
|
77
77
|
| --- | --- | --- | --- |
|
|
78
|
-
| Native management |
|
|
78
|
+
| Native management | Agent machine | Filesystem links | Skillmux CLI |
|
|
79
79
|
| Local MCP | Beside one client | stdio | Skillmux CLI |
|
|
80
80
|
| Shared MCP | Server or container host | Streamable HTTP | Skillmux server (full image) |
|
|
81
81
|
|
|
@@ -99,7 +99,7 @@ An HTTP server has two separate surfaces:
|
|
|
99
99
|
MCP authentication protects `/mcp`; administrative authentication protects
|
|
100
100
|
`/admin/v1/*`. Their bearer tokens are distinct and do not grant access across
|
|
101
101
|
surfaces. A named CLI context is an operator connection to the deployed server,
|
|
102
|
-
not a way to manage skill directories on remote
|
|
102
|
+
not a way to manage skill directories on remote agent machines. The server
|
|
103
103
|
and its full/slim images never manage host agent directories. See
|
|
104
104
|
[Deployment](deployment.md#http-surfaces).
|
|
105
105
|
|
|
@@ -109,16 +109,20 @@ package downloads and caches GTE-small when local inference first loads it;
|
|
|
109
109
|
`skillmux models download` prefetches it. Neither Skillmux server image
|
|
110
110
|
bundles a local reranker; configure one remotely when needed.
|
|
111
111
|
|
|
112
|
-
##
|
|
112
|
+
## Agents and targets
|
|
113
113
|
|
|
114
|
-
|
|
114
|
+
An **agent** is a supported product name such as `claude-code` or `codex`.
|
|
115
115
|
Skillmux maps it to the product's skill directory and safe instruction-file
|
|
116
116
|
conventions.
|
|
117
117
|
|
|
118
|
-
A **target** is a physical directory managed by sync. Several
|
|
119
|
-
to one target.
|
|
118
|
+
A **target** is a physical directory managed by sync. Several agents can map
|
|
119
|
+
to one target. OpenCode, GitHub Copilot, and Windsurf share
|
|
120
120
|
`~/.agents/skills`, so Skillmux deduplicates that directory.
|
|
121
121
|
|
|
122
|
+
The mapping is not total. `goose` and `hermes` use full-vault delivery and
|
|
123
|
+
map to no target at all, so commands that take `--agent` as a stand-in for a
|
|
124
|
+
target reject them.
|
|
125
|
+
|
|
122
126
|
Custom targets let you manage another directory without adding a product
|
|
123
127
|
adapter:
|
|
124
128
|
|
package/docs/configuration.md
CHANGED
|
@@ -216,7 +216,7 @@ Before exposing HTTP beyond localhost, set `hostname` to a reachable interface,
|
|
|
216
216
|
calling `/admin/v1/*` when that API is enabled. Do not reuse or imply either
|
|
217
217
|
token authorizes the other surface. Named CLI contexts use the administrative
|
|
218
218
|
token to inspect or update the deployed server configuration only; they cannot
|
|
219
|
-
install, pin, synchronize, or otherwise manage remote
|
|
219
|
+
install, pin, synchronize, or otherwise manage remote agent skill directories.
|
|
220
220
|
Docker images likewise do not manage host agent directories.
|
|
221
221
|
Inside the server image, only read-only `config show`, `get`, `validate`,
|
|
222
222
|
`diff`, and `status` are available. Run `config init` or `config set` with the
|
|
@@ -299,7 +299,7 @@ project_groups = ["repo1"] # which [project.*] groups materialize into
|
|
|
299
299
|
- `[core].skills`: symlinked into every `[targets.*]` dir on `sync`. Capped at 25 skills; `sync` fails if a listed skill id isn't actually in the vault.
|
|
300
300
|
- `[project.<group>].skills`: symlinked only into `<path>/<relative path from $HOME to the target dir>`, for each `paths` entry, and only for targets whose `project_groups` names that group. `paths` entries must resolve under `$HOME` (that's how the pin path is derived). A skill can't appear in both `[core]` and the same `[project.*]` group.
|
|
301
301
|
- `[project.<group>].paths` can list the same project's checkout on more than one machine (e.g. `["/home/alice/code/repo1", "/Users/alice/code/repo1"]`). `sync` silently skips any entry that doesn't exist on the machine it's running on (see below), so one shared manifest can span machines with different checkout locations without needing per-machine manifests.
|
|
302
|
-
- `[targets.<name>]`: one entry per adopted surface. `skillmux init --
|
|
302
|
+
- `[targets.<name>]`: one entry per adopted surface. `skillmux init --agent <name> --yes` writes these for each supported agent and scopes newly added targets to the current hostname; `skillmux target add <name> --dir <dir> --yes` writes one directly for a directory not tied to any supported agent. Hand-editing is fine as long as `sync` is still allowed to own the directory (see below). An optional `host` limits the target to an exact machine-hostname match; omit it for a global, backward-compatible target. A host mismatch is reported and skipped before any target filesystem operation. `project_groups` is an explicit list, not a boolean: a target only receives the specific groups it names, never every group in the manifest.
|
|
303
303
|
|
|
304
304
|
**Pin/unpin without hand-editing.** `skillmux core pin`/`unpin` mutate `[core]` for you, and `skillmux project pin`/`unpin` mutate `[project.*]`, validating with the same rules `sync` enforces (skill must resolve from `vault_path`, no duplicate pins, `[core]` stays under the 25-skill cap) before writing anything:
|
|
305
305
|
|
|
@@ -338,8 +338,10 @@ content, and rejects a desired skill that collides with an unmanaged entry
|
|
|
338
338
|
before changing anything.
|
|
339
339
|
|
|
340
340
|
`sync` refuses to touch a directory that exists but has no marker; run
|
|
341
|
-
`skillmux init --
|
|
342
|
-
|
|
341
|
+
`skillmux init --agent <name> --yes` (or `skillmux target add <name> --dir
|
|
342
|
+
<dir> --yes` for a directory not tied to any supported agent) first, which
|
|
343
|
+
either creates the directory fresh or adopts an existing one in place
|
|
344
|
+
(contents untouched).
|
|
343
345
|
`sync --restore-monolith` likewise refuses a `local_vault` marker or any
|
|
344
346
|
unmanaged target content before replacing a target directory with a symlink
|
|
345
347
|
to the vault.
|
package/docs/deployment.md
CHANGED
|
@@ -296,7 +296,7 @@ Read [CLI reference](cli.md#administrative-http-api-adminv1) for routes and
|
|
|
296
296
|
|
|
297
297
|
Named contexts administer the deployed server only — configuration, stats,
|
|
298
298
|
audit prune, evaluation, and remote diagnostics. They do not install, pin,
|
|
299
|
-
synchronize, or otherwise manage skill directories on remote
|
|
299
|
+
synchronize, or otherwise manage skill directories on remote agent machines.
|
|
300
300
|
Run those filesystem-management commands through Skillmux CLI on the machine
|
|
301
301
|
that owns the directories. The full and slim server images read their mounted
|
|
302
302
|
vault checkout and do not manage host agent directories.
|
package/docs/getting-started.md
CHANGED
|
@@ -6,7 +6,7 @@ an installation.
|
|
|
6
6
|
```mermaid
|
|
7
7
|
flowchart LR
|
|
8
8
|
Q{What do you need?}
|
|
9
|
-
Q -->|Managed links in
|
|
9
|
+
Q -->|Managed links in agent skill directories| A[Manage native skills]
|
|
10
10
|
Q -->|Local stdio MCP| B[Add local MCP retrieval]
|
|
11
11
|
Q -->|Streamable HTTP MCP for several clients| C[Run a shared MCP service]
|
|
12
12
|
A --> A1[Skillmux CLI]
|
|
@@ -16,7 +16,7 @@ flowchart LR
|
|
|
16
16
|
|
|
17
17
|
| Goal | Skill delivery | Recommended installation |
|
|
18
18
|
| --- | --- | --- |
|
|
19
|
-
| [Manage native skills](#manage-native-skills) | Managed links in
|
|
19
|
+
| [Manage native skills](#manage-native-skills) | Managed links in agent skill directories | Skillmux CLI |
|
|
20
20
|
| [Add local MCP retrieval](#add-local-mcp-retrieval) | Local stdio MCP | Skillmux CLI |
|
|
21
21
|
| [Run a shared MCP service](#run-a-shared-mcp-service) | Streamable HTTP MCP | Skillmux server (full image) |
|
|
22
22
|
|
|
@@ -102,6 +102,10 @@ skillmux install owner/repo
|
|
|
102
102
|
skillmux install owner/repo/path/to/skill
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
+
`install` scans the skill, shows what it found, and asks before writing to
|
|
106
|
+
the vault. Add `--yes` to approve up front, which a non-interactive run
|
|
107
|
+
requires. See [Managing skills](skill-management.md#install-from-git).
|
|
108
|
+
|
|
105
109
|
Or create a small skill:
|
|
106
110
|
|
|
107
111
|
```sh
|
|
@@ -122,7 +126,7 @@ Run `skillmux scan ~/skills` before adopting an existing collection.
|
|
|
122
126
|
|
|
123
127
|
## Manage native skills
|
|
124
128
|
|
|
125
|
-
Run the guided setup on the machine that owns the
|
|
129
|
+
Run the guided setup on the machine that owns the agent skill directories:
|
|
126
130
|
|
|
127
131
|
```sh
|
|
128
132
|
skillmux init
|
|
@@ -131,7 +135,7 @@ skillmux init
|
|
|
131
135
|
The planner:
|
|
132
136
|
|
|
133
137
|
1. validates the vault;
|
|
134
|
-
2. detects
|
|
138
|
+
2. detects agents from filesystem evidence;
|
|
135
139
|
3. asks which skills belong in the core tier;
|
|
136
140
|
4. shows the config, target, instruction, and sync plan;
|
|
137
141
|
5. applies the plan after confirmation.
|
|
@@ -145,14 +149,14 @@ Use explicit flags for automation:
|
|
|
145
149
|
|
|
146
150
|
```sh
|
|
147
151
|
skillmux init \
|
|
148
|
-
--
|
|
149
|
-
--
|
|
152
|
+
--agent claude-code \
|
|
153
|
+
--agent codex \
|
|
150
154
|
--core csv-formatter \
|
|
151
155
|
--dry-run
|
|
152
156
|
|
|
153
157
|
skillmux init \
|
|
154
|
-
--
|
|
155
|
-
--
|
|
158
|
+
--agent claude-code \
|
|
159
|
+
--agent codex \
|
|
156
160
|
--core csv-formatter \
|
|
157
161
|
--yes
|
|
158
162
|
```
|
|
@@ -172,13 +176,13 @@ root:
|
|
|
172
176
|
skillmux project init
|
|
173
177
|
```
|
|
174
178
|
|
|
175
|
-
The noninteractive form accepts repeatable
|
|
179
|
+
The noninteractive form accepts repeatable agent and skill flags:
|
|
176
180
|
|
|
177
181
|
```sh
|
|
178
182
|
skillmux project init ~/code/my-project \
|
|
179
183
|
--name my-project \
|
|
180
|
-
--
|
|
181
|
-
--
|
|
184
|
+
--agent claude-code \
|
|
185
|
+
--agent codex \
|
|
182
186
|
--skill code-context \
|
|
183
187
|
--yes
|
|
184
188
|
```
|
|
@@ -225,6 +229,10 @@ Register it with your MCP client:
|
|
|
225
229
|
The client launches the process and closes it with the MCP session. Continue
|
|
226
230
|
with [MCP routing](mcp-routing.md) for client behavior and ranked candidate retrieval.
|
|
227
231
|
|
|
232
|
+
For `claude-code` and `codex`, `skillmux init --register-mcp` runs this
|
|
233
|
+
registration for you via the agent's own CLI instead of editing config by
|
|
234
|
+
hand — see [Setup planner](cli.md#setup-planner-skillmux-init).
|
|
235
|
+
|
|
228
236
|
## Run a shared MCP service
|
|
229
237
|
|
|
230
238
|
Use the full image when you want local embeddings without configuring an
|
|
@@ -266,7 +274,7 @@ The server keeps its two HTTP surfaces separate:
|
|
|
266
274
|
Configure separate MCP and administrative bearer tokens; one never grants
|
|
267
275
|
access to the other. Named CLI contexts can administer this deployed server,
|
|
268
276
|
but cannot install, pin, synchronize, or otherwise manage skill directories on
|
|
269
|
-
remote
|
|
277
|
+
remote agent machines. See [Deployment](deployment.md#http-surfaces).
|
|
270
278
|
|
|
271
279
|
Manage the mounted vault on the host. A retrieval-only container should mount
|
|
272
280
|
it read-only.
|
|
@@ -277,7 +285,7 @@ Use this topology when users need native core or project pins and also one
|
|
|
277
285
|
shared MCP endpoint. Keep one Git-backed vault source of truth. A vault
|
|
278
286
|
checkout is its physical copy; on one machine, `~/skills` can be both:
|
|
279
287
|
|
|
280
|
-
- each machine that owns
|
|
288
|
+
- each machine that owns agent skill directories keeps its own checkout and
|
|
281
289
|
runs the Skillmux CLI for `init`, pinning, and `sync`;
|
|
282
290
|
- the shared server mounts its own checkout and serves routed retrieval over
|
|
283
291
|
HTTP;
|
package/docs/mcp-routing.md
CHANGED
|
@@ -59,7 +59,7 @@ and network exposure before serving other machines. See
|
|
|
59
59
|
This is the MCP surface for AI clients. Its bearer token applies only to
|
|
60
60
|
`/mcp`; server configuration uses the separate operator surface at
|
|
61
61
|
`/admin/v1/*`. AI clients do not need the CLI to use `/mcp`; named CLI contexts
|
|
62
|
-
are for administering the deployed server, not remote
|
|
62
|
+
are for administering the deployed server, not remote agent skill directories.
|
|
63
63
|
See [Deployment](deployment.md#http-surfaces).
|
|
64
64
|
|
|
65
65
|
## Tool contract
|
package/docs/skill-management.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Managing skills
|
|
2
2
|
|
|
3
3
|
Skillmux keeps skill content in a vault checkout and materializes selected
|
|
4
|
-
skills into
|
|
4
|
+
skills into agent directories. The vault source of truth is the logical
|
|
5
5
|
collection; a checkout is its physical copy. This guide covers the commands
|
|
6
6
|
that change or inspect that state.
|
|
7
7
|
|
|
8
|
-
Run these commands on the machine that owns the vault checkout and
|
|
8
|
+
Run these commands on the machine that owns the vault checkout and agent
|
|
9
9
|
directories. For a retrieval-only Docker service, manage the mounted checkout
|
|
10
10
|
on the host and keep the container mount read-only; the server image does not
|
|
11
11
|
manage host agent directories.
|
|
@@ -27,20 +27,32 @@ Skillmux clones into a temporary directory, validates the selected skill,
|
|
|
27
27
|
scans its text files, and copies it to `vault_path`. Existing skill IDs require
|
|
28
28
|
`--force`.
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
Nothing is written to the vault until you approve it. The scan result prints
|
|
31
|
+
first, then `install` asks for confirmation, so you decide with the findings
|
|
32
|
+
already on screen. Pass `--yes` to approve up front. A non-interactive run
|
|
33
|
+
(no TTY, or `--json`) fails instead of installing unattended, the same way
|
|
34
|
+
`skillmux update` behaves, so scripts and CI must opt in explicitly:
|
|
31
35
|
|
|
32
36
|
```sh
|
|
33
|
-
skillmux install owner/repo --
|
|
37
|
+
skillmux install owner/repo --yes
|
|
34
38
|
```
|
|
35
39
|
|
|
36
|
-
|
|
40
|
+
Preview the destination without copying. `--dry-run` writes nothing, so it
|
|
41
|
+
never asks for confirmation:
|
|
37
42
|
|
|
38
43
|
```sh
|
|
39
|
-
skillmux install owner/repo --
|
|
44
|
+
skillmux install owner/repo --dry-run
|
|
40
45
|
```
|
|
41
46
|
|
|
42
47
|
The scanner detects suspicious prompt-injection patterns, secrets, and risky
|
|
43
|
-
instructions.
|
|
48
|
+
instructions. A high-severity finding aborts the install by default. Use
|
|
49
|
+
`--fail-on` to move that threshold, where a lower one is stricter, and
|
|
50
|
+
`--fail-on none` to install despite any finding:
|
|
51
|
+
|
|
52
|
+
```sh
|
|
53
|
+
skillmux install owner/repo --fail-on low # also abort on low and medium
|
|
54
|
+
skillmux install owner/repo --fail-on none # never abort on findings
|
|
55
|
+
```
|
|
44
56
|
|
|
45
57
|
`install` refuses a `file://` source by default — a `file://` URL reaches the
|
|
46
58
|
local filesystem directly, so honoring one unconditionally would let anything
|
|
@@ -74,13 +86,21 @@ Leaving `allowed_hosts` unset (the default) leaves both commands unrestricted.
|
|
|
74
86
|
```sh
|
|
75
87
|
skillmux scan
|
|
76
88
|
skillmux scan ~/skills/candidate
|
|
77
|
-
skillmux scan --
|
|
89
|
+
skillmux scan --json
|
|
78
90
|
skillmux scan --fail-on medium
|
|
79
91
|
```
|
|
80
92
|
|
|
81
93
|
With no path, `scan` checks the configured vault. `--json` wraps the result in
|
|
82
|
-
the standard CLI automation envelope
|
|
83
|
-
|
|
94
|
+
the standard CLI automation envelope.
|
|
95
|
+
|
|
96
|
+
Unlike `install` and `update`, `scan` has no default threshold: it reports
|
|
97
|
+
what it finds and exits 0 regardless, so adding it to a pipeline never
|
|
98
|
+
changes that pipeline's exit code by itself. Pass `--fail-on` when you want
|
|
99
|
+
it to gate. The value names the lowest severity that still fails, so a lower
|
|
100
|
+
value is stricter.
|
|
101
|
+
|
|
102
|
+
`--format text|json` is deprecated. It still works, but it prints JSON
|
|
103
|
+
outside the standard envelope and now warns on stderr. Use `--json` instead.
|
|
84
104
|
|
|
85
105
|
## Check and pull upstream updates
|
|
86
106
|
|
|
@@ -114,28 +134,28 @@ skill whose on-disk content has drifted from what was last installed —
|
|
|
114
134
|
someone may have hand-edited it. Pass `--force` to overwrite anyway. Like
|
|
115
135
|
`audit prune`, a non-interactive or `--json` run needs `--yes`.
|
|
116
136
|
|
|
117
|
-
## Plan
|
|
137
|
+
## Plan agent delivery
|
|
118
138
|
|
|
119
|
-
Use product names for common
|
|
139
|
+
Use product names for common agents:
|
|
120
140
|
|
|
121
141
|
```sh
|
|
122
|
-
skillmux init --
|
|
142
|
+
skillmux init --agent claude-code --agent codex --dry-run
|
|
123
143
|
```
|
|
124
144
|
|
|
125
|
-
|
|
145
|
+
For a directory that isn't tied to any supported agent, use `target add`
|
|
146
|
+
directly instead of `init`:
|
|
126
147
|
|
|
127
148
|
```sh
|
|
128
|
-
skillmux
|
|
129
|
-
skillmux init --target custom --dir /srv/my-agent/skills --yes
|
|
149
|
+
skillmux target add my-agent --dir /srv/my-agent/skills --yes
|
|
130
150
|
```
|
|
131
151
|
|
|
132
152
|
Skillmux refuses to adopt a target that points to the whole vault because sync
|
|
133
153
|
would reduce its visible skills. Review that migration first:
|
|
134
154
|
|
|
135
155
|
```sh
|
|
136
|
-
skillmux init --
|
|
156
|
+
skillmux init --agent claude-code --migrate-full-vault \
|
|
137
157
|
--core csv-formatter --dry-run
|
|
138
|
-
skillmux init --
|
|
158
|
+
skillmux init --agent claude-code --migrate-full-vault \
|
|
139
159
|
--core csv-formatter --yes
|
|
140
160
|
```
|
|
141
161
|
|
|
@@ -170,7 +190,7 @@ skillmux project list
|
|
|
170
190
|
skillmux project show my-project
|
|
171
191
|
skillmux project add-path my-project ~/code/my-project --yes
|
|
172
192
|
skillmux project pin my-project code-context --yes
|
|
173
|
-
skillmux project attach my-project --
|
|
193
|
+
skillmux project attach my-project --agent claude-code --agent codex --yes
|
|
174
194
|
skillmux project unpin my-project code-context --yes
|
|
175
195
|
skillmux project detach my-project --target codex --yes
|
|
176
196
|
skillmux project remove-path my-project ~/code/my-project --yes
|
package/docs/troubleshooting.md
CHANGED
|
@@ -113,8 +113,8 @@ also reveals local-overlay shadowing.
|
|
|
113
113
|
Skillmux will not change an existing unmarked directory. Adopt it first:
|
|
114
114
|
|
|
115
115
|
```sh
|
|
116
|
-
skillmux init --
|
|
117
|
-
skillmux init --
|
|
116
|
+
skillmux init --agent claude-code --dry-run
|
|
117
|
+
skillmux init --agent claude-code --yes
|
|
118
118
|
```
|
|
119
119
|
|
|
120
120
|
### Target points to the full vault
|
|
@@ -122,7 +122,7 @@ skillmux init --client claude-code --yes
|
|
|
122
122
|
Review the smaller pinned set before converting:
|
|
123
123
|
|
|
124
124
|
```sh
|
|
125
|
-
skillmux init --
|
|
125
|
+
skillmux init --agent claude-code \
|
|
126
126
|
--migrate-full-vault \
|
|
127
127
|
--core code-context \
|
|
128
128
|
--dry-run
|
|
@@ -239,7 +239,7 @@ skillmux --context prod config status
|
|
|
239
239
|
An MCP token for `/mcp` cannot authenticate this request, and the administrative
|
|
240
240
|
token cannot authenticate an MCP client. A named context administers the
|
|
241
241
|
deployed server configuration only; use Skillmux CLI on the machine that owns
|
|
242
|
-
|
|
242
|
+
agent directories for `install`, pinning, or `sync`.
|
|
243
243
|
|
|
244
244
|
### Client receives `429`
|
|
245
245
|
|
package/package.json
CHANGED