@klhapp/skillmux 1.3.4 → 1.4.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 +32 -0
- package/README.md +64 -23
- package/docs/README.md +42 -17
- package/docs/assets/architecture.svg +42 -44
- package/docs/cli.md +49 -7
- package/docs/concepts.md +42 -19
- package/docs/configuration.md +53 -7
- package/docs/deployment.md +76 -20
- package/docs/getting-started.md +62 -18
- package/docs/mcp-routing.md +11 -4
- package/docs/releasing.md +20 -6
- package/docs/skill-management.md +14 -9
- package/docs/troubleshooting.md +85 -5
- package/package.json +1 -1
- package/src/cli.ts +61 -6
- package/src/commands/config.ts +2 -0
- package/src/config-service.ts +8 -0
- package/src/config-watcher.ts +11 -8
- package/src/deployment.ts +39 -0
- package/src/doctor.ts +47 -18
- package/src/metrics.ts +18 -0
- package/src/output.ts +5 -1
- package/src/router-core.ts +6 -1
- package/src/server.ts +14 -2
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,38 @@ All notable changes to this project are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.4.1](https://github.com/klhq/skillmux/compare/v1.4.0...v1.4.1) (2026-08-04)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
* **ci:** publish npm package to GitHub Packages ([#110](https://github.com/klhq/skillmux/issues/110)) ([5de37f2](https://github.com/klhq/skillmux/commit/5de37f22a658187cd270743b24237844513c1e54))
|
|
14
|
+
|
|
15
|
+
## [1.4.0](https://github.com/klhq/skillmux/compare/v1.3.4...v1.4.0) (2026-08-04)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
* **cli:** add version flag ([a5ca750](https://github.com/klhq/skillmux/commit/a5ca7508b6818764eeeaff4000115ac91769d6c0))
|
|
21
|
+
* **cli:** clarify Docker command guidance ([3fc61b0](https://github.com/klhq/skillmux/commit/3fc61b0d262a20237f38df0a63eca2982aec382d))
|
|
22
|
+
* **cli:** guide unsupported container commands ([9857098](https://github.com/klhq/skillmux/commit/9857098f5ce1ae0436afc23cfec5aba7e0069d8c))
|
|
23
|
+
* **cli:** improve Docker command guidance ([cb1f4b7](https://github.com/klhq/skillmux/commit/cb1f4b707feca49cb7b6a627182bbbab889b8361))
|
|
24
|
+
* **cli:** show Docker-specific help ([b6a7495](https://github.com/klhq/skillmux/commit/b6a74955539aef6613781949df65ffd9c01aade7))
|
|
25
|
+
* **config:** show deployment identity in status ([40b355f](https://github.com/klhq/skillmux/commit/40b355fdea40e78b090faee87d349c364892d956))
|
|
26
|
+
* **docker:** label image variants ([d2db3f5](https://github.com/klhq/skillmux/commit/d2db3f53c16506af65dd89a39b2d05de8f4d905a))
|
|
27
|
+
* **doctor:** report deployment identity ([2db45d6](https://github.com/klhq/skillmux/commit/2db45d62da1be0985d2e8faa7abfa65c2a45f1c9))
|
|
28
|
+
* **doctor:** report healthy slim lexical retrieval ([9cac7e0](https://github.com/klhq/skillmux/commit/9cac7e0f603b07075daf202db19712c0400539a8))
|
|
29
|
+
* **doctor:** show retrieval capability ([5a344e7](https://github.com/klhq/skillmux/commit/5a344e71ebe65ba85353d28207ba3887432d3eff))
|
|
30
|
+
* **ops:** expose deployment identity in metrics ([81f761e](https://github.com/klhq/skillmux/commit/81f761e9ff735c512395b68479f33eb2c3db0352))
|
|
31
|
+
* **status:** expose deployment identity ([d83d22a](https://github.com/klhq/skillmux/commit/d83d22ad84beb39a993b0ade48ebee7e60d87145))
|
|
32
|
+
* **status:** expose remote deployment identity ([e7be736](https://github.com/klhq/skillmux/commit/e7be73656a833057d55146b09f8bfd6d6c3f6a60))
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
### Fixed
|
|
36
|
+
|
|
37
|
+
* pass configPath to getEffectiveConfig in PATCH /admin/v1/config handler ([f46b7e2](https://github.com/klhq/skillmux/commit/f46b7e2f97167d4c8bb02a56973d6e5325dd55a8))
|
|
38
|
+
* **startup:** allow serving without config paths ([ee98959](https://github.com/klhq/skillmux/commit/ee989596ed569d964eb37303b52b1538f62be39a))
|
|
39
|
+
|
|
8
40
|
## [1.3.4](https://github.com/klhq/skillmux/compare/v1.3.3...v1.3.4) (2026-08-02)
|
|
9
41
|
|
|
10
42
|
|
package/README.md
CHANGED
|
@@ -10,31 +10,47 @@
|
|
|
10
10
|
</p>
|
|
11
11
|
|
|
12
12
|
Skillmux manages [`SKILL.md`](https://agentskills.io) collections across AI
|
|
13
|
-
coding clients. Keep one vault source of truth
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
machine
|
|
17
|
-
|
|
13
|
+
coding clients. Keep one **vault source of truth**—the logical skill
|
|
14
|
+
collection—pin a small set into native skill directories, and retrieve the
|
|
15
|
+
rest through MCP. A **vault checkout** is a physical copy of that collection.
|
|
16
|
+
On one machine, `~/skills` can be both the source of truth and its checkout.
|
|
17
|
+
|
|
18
|
+
For a shared topology, the Git-backed vault source of truth has a checkout on
|
|
19
|
+
each client machine, where the Skillmux CLI creates native pins, and a checkout
|
|
20
|
+
on the server, where Skillmux server exposes HTTP MCP. Skillmux does not pull,
|
|
21
|
+
push, replicate, or determine freshness between checkouts; Git and the
|
|
22
|
+
deployment process own replication and freshness. See
|
|
23
|
+
[native pins with shared retrieval](docs/deployment.md#native-pins-with-shared-retrieval).
|
|
18
24
|
|
|
19
25
|
The same Skillmux CLI manages native skills and can serve local stdio MCP.
|
|
20
26
|
Most individual users need only the CLI. Add Docker when you need a shared or
|
|
21
27
|
always-on HTTP service.
|
|
22
28
|
|
|
29
|
+
`skillmux serve` starts local stdio without a config file. `skillmux serve
|
|
30
|
+
--transport http` likewise starts on loopback with safe defaults; create a
|
|
31
|
+
config only when you need to customize the vault, inference, or server policy.
|
|
32
|
+
See [Configuration](docs/configuration.md#machine-config-bootstrap) and
|
|
33
|
+
[Deployment](docs/deployment.md) for those next steps.
|
|
34
|
+
|
|
23
35
|
Choose a setup by the job:
|
|
24
36
|
|
|
25
37
|
1. Need native skills or local MCP for one client? Install the **Skillmux CLI**.
|
|
26
|
-
2. On Linux
|
|
27
|
-
the same CLI.
|
|
28
|
-
3. Need one shared HTTP MCP service? Deploy the **full
|
|
38
|
+
2. On Linux when Bun is undesirable? Use the **standalone Linux executable**;
|
|
39
|
+
it is the same Skillmux CLI.
|
|
40
|
+
3. Need one shared HTTP MCP service? Deploy the **full image**, the
|
|
29
41
|
self-contained default with GTE-small.
|
|
30
42
|
4. Already have remote embeddings, or intentionally want lexical-only
|
|
31
|
-
retrieval? Use the **slim
|
|
32
|
-
|
|
43
|
+
retrieval? Use the **slim image**; see [Deployment](docs/deployment.md).
|
|
44
|
+
|
|
45
|
+
For native pins and shared retrieval, run the Skillmux CLI on the machines that own
|
|
33
46
|
client directories and one shared server for routed retrieval. MCP-only
|
|
34
|
-
|
|
47
|
+
clients connect over HTTP and do not need the Skillmux CLI.
|
|
35
48
|
|
|
36
49
|
Manage the server's vault checkout outside the container. Use the CLI for
|
|
37
|
-
Skillmux operations and Git or your deployment process for replication
|
|
50
|
+
Skillmux operations and Git or your deployment process for replication and
|
|
51
|
+
freshness; server images do not manage host agent directories.
|
|
52
|
+
If a server image rejects a management command, its error names the host CLI
|
|
53
|
+
command to run; see the [container command contract](docs/deployment.md#container-command-contract).
|
|
38
54
|
|
|
39
55
|
## One vault source of truth, three ways to use it
|
|
40
56
|
|
|
@@ -58,17 +74,28 @@ skillmux --help
|
|
|
58
74
|
|
|
59
75
|
Native target sync needs permission to create directory symlinks on Windows.
|
|
60
76
|
|
|
61
|
-
On Linux, you can install a standalone
|
|
77
|
+
On Linux, you can install a standalone executable instead. This path needs no
|
|
78
|
+
GitHub CLI or package manager. It selects AMD64 or ARM64, downloads the pinned
|
|
79
|
+
`v1.3.4` release, and verifies the SHA-256 digest published for that release:
|
|
62
80
|
|
|
63
81
|
```sh
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
82
|
+
version=v1.3.4
|
|
83
|
+
case "$(uname -m)" in
|
|
84
|
+
x86_64|amd64) asset=skillmux-linux-amd64; sha256=0d0155475748a937ac9b5878c57e1fa14d8fe6957317cb43bbdafd710cbc1966 ;;
|
|
85
|
+
aarch64|arm64) asset=skillmux-linux-arm64; sha256=8cd186707221a8fefbb79eac46ef14d0c5fdae08a2d76e64a01af17a80af0e06 ;;
|
|
86
|
+
*) echo "Unsupported architecture: $(uname -m)" >&2; exit 1 ;;
|
|
87
|
+
esac
|
|
88
|
+
bin_dir="${SKILLMUX_BIN_DIR:-$HOME/.local/bin}"
|
|
89
|
+
curl --fail --location --output "$asset" "https://github.com/klhq/skillmux/releases/download/$version/$asset"
|
|
90
|
+
printf '%s %s\n' "$sha256" "$asset" | sha256sum --check -
|
|
91
|
+
install -Dm755 "$asset" "$bin_dir/skillmux"
|
|
68
92
|
```
|
|
69
93
|
|
|
70
|
-
|
|
71
|
-
the
|
|
94
|
+
Ensure `~/.local/bin` is on `PATH`. To install system-wide, explicitly choose
|
|
95
|
+
the target: `sudo install -Dm755 "$asset" /usr/local/bin/skillmux`. For GitHub
|
|
96
|
+
build-provenance verification, use the [attested GitHub CLI procedure](docs/getting-started.md#install-with-github-cli-attestation).
|
|
97
|
+
See [Deployment](docs/deployment.md) for the full and slim images of Skillmux
|
|
98
|
+
server.
|
|
72
99
|
|
|
73
100
|
## Quick starts
|
|
74
101
|
|
|
@@ -148,6 +175,20 @@ under `docker.io/klhq/skillmux`.
|
|
|
148
175
|
The [getting-started guide](docs/getting-started.md) provides complete recipes
|
|
149
176
|
for all three setups.
|
|
150
177
|
|
|
178
|
+
### HTTP surfaces
|
|
179
|
+
|
|
180
|
+
| Surface | User | Purpose | CLI required |
|
|
181
|
+
| --- | --- | --- | --- |
|
|
182
|
+
| `/mcp` | AI clients | Resolve and fetch skills | No |
|
|
183
|
+
| `/admin/v1/*` | Operators | Inspect or update server configuration | Yes, when using named CLI contexts |
|
|
184
|
+
|
|
185
|
+
MCP clients authenticate only to `/mcp` with the MCP bearer token. Operators
|
|
186
|
+
use a separate administrative bearer token for `/admin/v1/*`; neither token
|
|
187
|
+
authorizes the other surface. Named CLI contexts administer the deployed server
|
|
188
|
+
only. They never install, pin, synchronize, or otherwise manage skill
|
|
189
|
+
directories on remote client machines. See [Deployment](docs/deployment.md#http-surfaces)
|
|
190
|
+
for configuration and examples.
|
|
191
|
+
|
|
151
192
|
## Add and inspect skills
|
|
152
193
|
|
|
153
194
|
Install a skill from a Git repository:
|
|
@@ -235,11 +276,11 @@ Start with the [documentation hub](docs/README.md).
|
|
|
235
276
|
| [Concepts](docs/concepts.md) | Delivery tiers, deployment topologies, retrieval modes, and ownership |
|
|
236
277
|
| [Managing skills](docs/skill-management.md) | Install, scan, pin, sync, report, overlays, and recovery |
|
|
237
278
|
| [MCP routing](docs/mcp-routing.md) | Tools, outcomes, transports, retrieval, fallback, and integrity |
|
|
238
|
-
| [Deployment](docs/deployment.md) | Docker,
|
|
239
|
-
| [Configuration](docs/configuration.md) | Machine config, inference, manifests, and
|
|
240
|
-
| [CLI reference](docs/cli.md) |
|
|
279
|
+
| [Deployment](docs/deployment.md) | Docker, container command boundaries, HTTP surfaces and auth, CORS, rate limits, and comparable CLI, health, and metrics status |
|
|
280
|
+
| [Configuration](docs/configuration.md) | Machine config, inference, HTTP surfaces, manifests, overlays, and container read-only configuration |
|
|
281
|
+
| [CLI reference](docs/cli.md) | Host and container command surfaces, administrative contexts, automation, JSON output, and exit codes |
|
|
241
282
|
| [Policy calibration](docs/calibration.md) | Labelled datasets, certification, and threshold application |
|
|
242
|
-
| [Troubleshooting](docs/troubleshooting.md) | `doctor`, common failures, and migration notes |
|
|
283
|
+
| [Troubleshooting](docs/troubleshooting.md) | `doctor`, deployment identity, common failures, and migration notes |
|
|
243
284
|
| [MCP schema](docs/schema.json) | JSON Schema 2020-12 tool contract |
|
|
244
285
|
|
|
245
286
|
## Development
|
package/docs/README.md
CHANGED
|
@@ -1,23 +1,45 @@
|
|
|
1
1
|
# Skillmux documentation
|
|
2
2
|
|
|
3
|
-
Skillmux manages one `SKILL.md` vault
|
|
4
|
-
|
|
3
|
+
Skillmux manages one `SKILL.md` vault source of truth: the logical skill
|
|
4
|
+
collection. A vault checkout is a physical copy used by a client machine or
|
|
5
|
+
server. On one machine, `~/skills` can be both. Choose a workflow based on
|
|
6
|
+
where skills need to appear and where Skillmux should run.
|
|
5
7
|
|
|
6
|
-
## Choose a
|
|
8
|
+
## Choose a setup
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
1. [Install the Skillmux CLI](getting-started.md#install-the-cli) for native
|
|
11
|
+
skills or one local MCP client.
|
|
12
|
+
2. On Linux, use the [standalone executable install](getting-started.md#install-the-cli)
|
|
13
|
+
when you want a pinned, checksum-verified CLI without `gh`; the
|
|
14
|
+
[GitHub CLI attestation path](getting-started.md#install-with-github-cli-attestation)
|
|
15
|
+
is also available for provenance verification.
|
|
16
|
+
3. [Deploy the full image](getting-started.md#run-a-shared-mcp-service) for
|
|
17
|
+
shared HTTP through Skillmux server.
|
|
18
|
+
4. Choose the **slim image** when using remote embeddings or lexical retrieval.
|
|
13
19
|
|
|
14
|
-
You can combine native management and local MCP retrieval on one machine.
|
|
15
|
-
shared
|
|
20
|
+
You can combine native management and local MCP retrieval on one machine. For
|
|
21
|
+
native pins plus shared retrieval, run Skillmux CLI on each machine that owns
|
|
22
|
+
client directories and deploy Skillmux server for HTTP MCP. The Bun package is
|
|
23
|
+
the cross-platform CLI installation method; the standalone Linux executable is
|
|
24
|
+
its Linux alternative. Git and the deployment process, not Skillmux, replicate
|
|
25
|
+
vault checkouts and determine their freshness; see
|
|
26
|
+
[Deployment](deployment.md#native-pins-with-shared-retrieval).
|
|
16
27
|
|
|
17
|
-
|
|
18
|
-
when
|
|
19
|
-
|
|
20
|
-
|
|
28
|
+
Both `skillmux serve` (stdio) and `skillmux serve --transport http` start with
|
|
29
|
+
safe defaults when no config file or config directory exists. Add a config only
|
|
30
|
+
to customize behavior; see [Configuration](configuration.md#machine-config-bootstrap).
|
|
31
|
+
|
|
32
|
+
## HTTP surfaces
|
|
33
|
+
|
|
34
|
+
| Surface | User | Purpose | CLI required |
|
|
35
|
+
| --- | --- | --- | --- |
|
|
36
|
+
| `/mcp` | AI clients | Resolve and fetch skills | No |
|
|
37
|
+
| `/admin/v1/*` | Operators | Inspect or update server configuration | Yes, when using named CLI contexts |
|
|
38
|
+
|
|
39
|
+
The MCP and administrative surfaces use separate bearer tokens; possession of
|
|
40
|
+
one does not grant access to the other. A named CLI context administers the
|
|
41
|
+
deployed server only, never remote client skill directories. See
|
|
42
|
+
[Deployment](deployment.md#http-surfaces) for authentication and examples.
|
|
21
43
|
|
|
22
44
|
## Learn the model
|
|
23
45
|
|
|
@@ -33,10 +55,13 @@ retrieval.
|
|
|
33
55
|
## Operate Skillmux
|
|
34
56
|
|
|
35
57
|
- [Deployment](deployment.md): deploy the shared server, choose slim only when
|
|
36
|
-
needed,
|
|
58
|
+
needed, understand its container command boundary, separate MCP from
|
|
59
|
+
administrative HTTP, compare deployment identity across CLI, health, and
|
|
60
|
+
metrics, and operate the service.
|
|
37
61
|
- [Configuration reference](configuration.md): configure inference, manifests,
|
|
38
|
-
server settings, and
|
|
39
|
-
- [CLI reference](cli.md): use
|
|
62
|
+
server settings, local overlays, and container read-only configuration.
|
|
63
|
+
- [CLI reference](cli.md): use host and container command surfaces,
|
|
64
|
+
administrative contexts, JSON output, and exit codes.
|
|
40
65
|
- [Policy calibration](calibration.md): create labelled datasets and certify
|
|
41
66
|
reranker thresholds.
|
|
42
67
|
- [Troubleshooting](troubleshooting.md): diagnose vault, sync, model, and server
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 720" role="img" aria-labelledby="title desc">
|
|
2
|
-
<title id="title">
|
|
3
|
-
<desc id="desc">One
|
|
2
|
+
<title id="title">One vault source of truth, three ways to use Skillmux</title>
|
|
3
|
+
<desc id="desc">One Git-backed vault source of truth has a client checkout for Skillmux CLI native management and local MCP retrieval, plus a server checkout for shared Streamable HTTP MCP. Resolve uses retrieval, fusion, and optional reranking; fetch returns the current SKILL.md directly. Git and deployment own checkout replication and freshness.</desc>
|
|
4
4
|
|
|
5
5
|
<defs>
|
|
6
6
|
<filter id="shadow" x="-15%" y="-15%" width="130%" height="140%">
|
|
@@ -64,72 +64,69 @@
|
|
|
64
64
|
<rect width="1200" height="720" rx="24" fill="#f8fafc"/>
|
|
65
65
|
<rect x="1" y="1" width="1198" height="718" rx="23" fill="none" stroke="#e2e8f0" stroke-width="2"/>
|
|
66
66
|
|
|
67
|
-
<text x="48" y="50" class="title">One vault, three ways to use Skillmux</text>
|
|
68
|
-
<text x="48" y="78" class="subtitle">
|
|
67
|
+
<text x="48" y="50" class="title">One vault source of truth, three ways to use Skillmux</text>
|
|
68
|
+
<text x="48" y="78" class="subtitle">Git and deployment replicate checkouts; Skillmux uses each checkout where it runs.</text>
|
|
69
69
|
|
|
70
70
|
<g filter="url(#shadow)">
|
|
71
71
|
<rect x="330" y="106" width="540" height="118" rx="18" fill="#ffffff" stroke="#cbd5e1" stroke-width="2"/>
|
|
72
72
|
<circle cx="374" cy="147" r="18" fill="#0f172a"/>
|
|
73
73
|
<path d="M364 141H377L383 147L377 153H364M370 135V159" fill="none" stroke="#ffffff" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
74
|
-
<text x="408" y="144" class="card-title">
|
|
75
|
-
<text x="408" y="172" class="mono"
|
|
76
|
-
<text x="408" y="200" class="body">
|
|
74
|
+
<text x="408" y="144" class="card-title">Git-backed vault source of truth</text>
|
|
75
|
+
<text x="408" y="172" class="mono">logical SKILL.md collection</text>
|
|
76
|
+
<text x="408" y="200" class="body">Git + deployment own replication and freshness</text>
|
|
77
77
|
<rect x="701" y="139" width="137" height="34" rx="9" fill="#f1f5f9" stroke="#cbd5e1"/>
|
|
78
78
|
<text x="769.5" y="161" text-anchor="middle" class="mono">skillmux.toml</text>
|
|
79
79
|
</g>
|
|
80
80
|
|
|
81
|
-
<path d="
|
|
82
|
-
<path d="M600 224V277" fill="none" stroke="#2563eb" stroke-width="3" marker-end="url(#arrow-blue)"/>
|
|
81
|
+
<path d="M520 224V252H410V277" fill="none" stroke="#0f766e" stroke-width="3" marker-end="url(#arrow-teal)"/>
|
|
83
82
|
<path d="M720 224V252H980V277" fill="none" stroke="#7c3aed" stroke-width="3" marker-end="url(#arrow-violet)"/>
|
|
83
|
+
<text x="394" y="270" text-anchor="end" class="body">client checkout</text>
|
|
84
|
+
<text x="996" y="270" text-anchor="start" class="body">server checkout</text>
|
|
84
85
|
|
|
85
86
|
<g filter="url(#shadow)">
|
|
86
|
-
<rect x="40" y="284" width="
|
|
87
|
-
<rect x="62" y="306" width="
|
|
88
|
-
<text x="
|
|
87
|
+
<rect x="40" y="284" width="740" height="302" rx="18" fill="#ffffff" stroke="#99d5cc" stroke-width="2"/>
|
|
88
|
+
<rect x="62" y="306" width="124" height="26" rx="13" fill="#ccfbf1"/>
|
|
89
|
+
<text x="124" y="324" text-anchor="middle" class="chip" fill="#115e59">SKILLMUX CLI</text>
|
|
89
90
|
<text x="62" y="365" class="card-title">Skillmux CLI</text>
|
|
90
|
-
<text x="62" y="390" class="body">
|
|
91
|
+
<text x="62" y="390" class="body">A client-machine checkout supports native management and/or local MCP.</text>
|
|
91
92
|
|
|
92
93
|
<rect x="62" y="414" width="276" height="48" rx="10" fill="#f0fdfa" stroke="#99d5cc"/>
|
|
93
|
-
<text x="200" y="
|
|
94
|
+
<text x="200" y="435" text-anchor="middle" class="label">Native management</text>
|
|
95
|
+
<text x="200" y="453" text-anchor="middle" class="mono">skillmux init · sync</text>
|
|
94
96
|
<path d="M200 462V487" fill="none" stroke="#0f766e" stroke-width="2.5" marker-end="url(#arrow-teal)"/>
|
|
95
97
|
<rect x="62" y="493" width="276" height="49" rx="10" fill="#f8fafc" stroke="#cbd5e1"/>
|
|
96
98
|
<text x="200" y="514" text-anchor="middle" class="label">Native skill directories</text>
|
|
97
99
|
<text x="200" y="533" text-anchor="middle" class="body">managed core and project links</text>
|
|
98
100
|
|
|
99
|
-
<text x="62" y="570" class="body">Install with</text>
|
|
100
|
-
<rect x="
|
|
101
|
-
<text x="
|
|
102
|
-
<rect x="
|
|
103
|
-
<text x="
|
|
101
|
+
<text x="62" y="570" class="body">Install Skillmux CLI with</text>
|
|
102
|
+
<rect x="270" y="550" width="85" height="27" rx="8" fill="#0f172a"/>
|
|
103
|
+
<text x="312.5" y="568" text-anchor="middle" class="chip" style="font-size: 10px" fill="#ffffff">BUN PACKAGE</text>
|
|
104
|
+
<rect x="361" y="550" width="87" height="27" rx="8" fill="#f1f5f9" stroke="#cbd5e1"/>
|
|
105
|
+
<text x="404.5" y="561" text-anchor="middle" class="chip" style="font-size: 10px" fill="#334155"><tspan x="404.5">LINUX</tspan><tspan x="404.5" dy="11">EXECUTABLE</tspan></text>
|
|
104
106
|
</g>
|
|
105
107
|
|
|
106
108
|
<g filter="url(#shadow)">
|
|
107
|
-
<rect x="420" y="
|
|
108
|
-
<
|
|
109
|
-
<text x="
|
|
110
|
-
|
|
111
|
-
<
|
|
112
|
-
|
|
113
|
-
<
|
|
114
|
-
<text x="
|
|
115
|
-
<
|
|
116
|
-
<text x="
|
|
117
|
-
<
|
|
118
|
-
<text x="
|
|
119
|
-
|
|
120
|
-
<rect x="442" y="484" width="316" height="58" rx="10" fill="#f8fafc" stroke="#cbd5e1"/>
|
|
121
|
-
<text x="600" y="507" text-anchor="middle" class="label">FTS5 + local GTE-small</text>
|
|
122
|
-
<text x="600" y="530" text-anchor="middle" class="body">downloaded and cached on this machine</text>
|
|
123
|
-
|
|
124
|
-
<text x="442" y="570" class="body">Skillmux CLI: Bun package or Linux executable</text>
|
|
109
|
+
<rect x="420" y="414" width="338" height="128" rx="10" fill="#eff6ff" stroke="#93c5fd"/>
|
|
110
|
+
<text x="442" y="441" class="label">Local MCP retrieval</text>
|
|
111
|
+
<text x="442" y="463" class="body">Skillmux CLI beside one MCP client.</text>
|
|
112
|
+
|
|
113
|
+
<rect x="442" y="475" width="102" height="48" rx="10" fill="#f8fafc" stroke="#cbd5e1"/>
|
|
114
|
+
<text x="493" y="505" text-anchor="middle" class="label">AI client</text>
|
|
115
|
+
<path d="M544 499H573" fill="none" stroke="#2563eb" stroke-width="2.5" marker-end="url(#arrow-blue)"/>
|
|
116
|
+
<text x="558" y="489" text-anchor="middle" class="body">stdio</text>
|
|
117
|
+
<rect x="579" y="470" width="157" height="62" rx="10" fill="#ffffff" stroke="#93c5fd"/>
|
|
118
|
+
<text x="657.5" y="492" text-anchor="middle" class="label">Skillmux CLI</text>
|
|
119
|
+
<text x="657.5" y="511" text-anchor="middle" class="body">default: FTS5 +</text>
|
|
120
|
+
<text x="657.5" y="527" text-anchor="middle" class="body">local GTE-small</text>
|
|
121
|
+
|
|
125
122
|
</g>
|
|
126
123
|
|
|
127
124
|
<g filter="url(#shadow)">
|
|
128
125
|
<rect x="800" y="284" width="360" height="302" rx="18" fill="#ffffff" stroke="#c4b5fd" stroke-width="2"/>
|
|
129
|
-
<rect x="822" y="306" width="
|
|
130
|
-
<text x="
|
|
126
|
+
<rect x="822" y="306" width="136" height="26" rx="13" fill="#ede9fe"/>
|
|
127
|
+
<text x="890" y="324" text-anchor="middle" class="chip" fill="#6d28d9">SKILLMUX SERVER</text>
|
|
131
128
|
<text x="822" y="365" class="card-title">Run a shared MCP service</text>
|
|
132
|
-
<text x="822" y="390" class="body">
|
|
129
|
+
<text x="822" y="390" class="body">Read a server checkout to serve several clients.</text>
|
|
133
130
|
|
|
134
131
|
<rect x="822" y="414" width="102" height="48" rx="10" fill="#f8fafc" stroke="#cbd5e1"/>
|
|
135
132
|
<text x="873" y="435" text-anchor="middle" class="label">AI clients</text>
|
|
@@ -138,7 +135,7 @@
|
|
|
138
135
|
<text x="938" y="428" text-anchor="middle" class="body">HTTP</text>
|
|
139
136
|
<rect x="959" y="414" width="179" height="48" rx="10" fill="#f5f3ff" stroke="#c4b5fd"/>
|
|
140
137
|
<text x="1048.5" y="435" text-anchor="middle" class="label">Skillmux server</text>
|
|
141
|
-
<text x="1048.5" y="453" text-anchor="middle" class="
|
|
138
|
+
<text x="1048.5" y="453" text-anchor="middle" class="body" style="font-size: 13px">Streamable HTTP /mcp</text>
|
|
142
139
|
|
|
143
140
|
<rect x="822" y="484" width="148" height="58" rx="10" fill="#f5f3ff" stroke="#c4b5fd"/>
|
|
144
141
|
<text x="896" y="507" text-anchor="middle" class="label">Full image</text>
|
|
@@ -150,7 +147,8 @@
|
|
|
150
147
|
<text x="822" y="570" class="body">Recommended for a shared HTTP deployment</text>
|
|
151
148
|
</g>
|
|
152
149
|
|
|
153
|
-
<rect x="420" y="
|
|
154
|
-
<text x="444" y="
|
|
155
|
-
<text x="444" y="
|
|
150
|
+
<rect x="420" y="608" width="740" height="82" rx="14" fill="#0f172a"/>
|
|
151
|
+
<text x="444" y="633" class="chip" fill="#cbd5e1">MCP TOOL CONTRACT · STDIO + HTTP</text>
|
|
152
|
+
<text x="444" y="655" class="mono mono-light" style="font-size: 12px">resolve_skill → retrieve + fuse → optional rerank → matched / ambiguous / no_match</text>
|
|
153
|
+
<text x="444" y="677" class="mono mono-light" style="font-size: 12px">fetch_skill → exact current SKILL.md + SHA-256</text>
|
|
156
154
|
</svg>
|
package/docs/cli.md
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
# CLI reference and automation
|
|
2
2
|
|
|
3
|
-
The Bun package and standalone Linux executable expose the same CLI.
|
|
4
|
-
|
|
3
|
+
The Bun package and standalone Linux executable expose the same Skillmux CLI.
|
|
4
|
+
For Linux installation, use the [pinned checksum-verified download](getting-started.md#install-the-cli)
|
|
5
|
+
or, when provenance verification is required, the
|
|
6
|
+
[attested GitHub CLI path](getting-started.md#install-with-github-cli-attestation).
|
|
7
|
+
Native management belongs on the machine that owns the client skill directories:
|
|
5
8
|
use the built-in `local` target for `init`, `install`, pinning, and `sync`.
|
|
6
9
|
Named remote contexts administer shared-server configuration through its
|
|
7
|
-
administrative API only; they do not install, pin,
|
|
8
|
-
client
|
|
10
|
+
administrative API only; they do not install, pin, synchronize, or otherwise
|
|
11
|
+
manage skill directories on remote client machines.
|
|
9
12
|
|
|
10
13
|
In this guide, **local target** means the filesystem and process selected by
|
|
11
14
|
the built-in CLI context. It does not describe local inference. A local target
|
|
@@ -14,6 +17,20 @@ can call remote inference endpoints.
|
|
|
14
17
|
For task-oriented workflows, start with [Getting started](getting-started.md)
|
|
15
18
|
or [Managing skills](skill-management.md).
|
|
16
19
|
|
|
20
|
+
## Running inside the Skillmux server image
|
|
21
|
+
|
|
22
|
+
The Docker image is a shared-server runtime, not a replacement for the host
|
|
23
|
+
CLI. Its `skillmux --help` surface is intentionally limited to `serve`,
|
|
24
|
+
`index`, `doctor`, `report`, `scan`, `skill which`, and read-only `config`
|
|
25
|
+
inspection (`show`, `get`, `validate`, `diff`, and `status`). Run `init`,
|
|
26
|
+
`install`, pinning, `sync`, project or target management, model downloads,
|
|
27
|
+
contexts, calibration, evaluation, and configuration changes on the host.
|
|
28
|
+
|
|
29
|
+
When the image rejects one of those commands, it exits with code 2. JSON mode
|
|
30
|
+
uses `CONTAINER_COMMAND_UNSUPPORTED` and includes `rejected_command`,
|
|
31
|
+
`recommended_host_command`, and a deployment-guide URL. See [the container
|
|
32
|
+
command contract](deployment.md#container-command-contract) for examples.
|
|
33
|
+
|
|
17
34
|
## Global options and target resolution
|
|
18
35
|
|
|
19
36
|
Every target-aware command resolves its execution target deterministically in this order:
|
|
@@ -38,7 +55,10 @@ Every target-aware command resolves its execution target deterministically in th
|
|
|
38
55
|
|
|
39
56
|
## Context management (`skillmux context`)
|
|
40
57
|
|
|
41
|
-
Contexts store named server targets without embedding raw credentials.
|
|
58
|
+
Contexts store named deployed-server targets without embedding raw credentials.
|
|
59
|
+
An associated token environment variable name (`token_env`) supplies only the
|
|
60
|
+
administrative bearer token; it is not an MCP token and cannot authenticate an
|
|
61
|
+
AI client to `/mcp`.
|
|
42
62
|
|
|
43
63
|
```sh
|
|
44
64
|
# List all configured contexts (includes reserved 'local' context)
|
|
@@ -87,14 +107,19 @@ skillmux config set recall.k_lexical 30
|
|
|
87
107
|
# Perform dry-run validation without writing or activating changes
|
|
88
108
|
skillmux config set recall.k_lexical 30 --dry-run
|
|
89
109
|
|
|
90
|
-
# Inspect runtime status, revision hashes, and readiness
|
|
110
|
+
# Inspect runtime status, deployment identity, revision hashes, and readiness
|
|
91
111
|
skillmux config status
|
|
92
112
|
```
|
|
93
113
|
|
|
114
|
+
`config status` reports the service runtime separately from the deployment
|
|
115
|
+
identity: `runtime` says whether the target is running, while
|
|
116
|
+
`deployment_runtime` and `image_variant` match `doctor` and `/health/ready`.
|
|
117
|
+
The JSON response contains no credential, API-key, or token values.
|
|
118
|
+
|
|
94
119
|
`config init` writes only `vault_path`. It leaves an existing config unchanged
|
|
95
120
|
and does not add `local_vault_paths`. Remote contexts administer the deployed
|
|
96
121
|
server configuration; they never administer client skill installation, pins,
|
|
97
|
-
or
|
|
122
|
+
sync, or any other remote-client directory operation.
|
|
98
123
|
|
|
99
124
|
---
|
|
100
125
|
|
|
@@ -245,6 +270,11 @@ Config changes are categorized into live-reloadable and restart-required setting
|
|
|
245
270
|
- **Reloadable**: `vault_path`, `recall.*`, `thresholds.*`, `inference.embedding.*`, `server.rate_limit.*`
|
|
246
271
|
- **Restart Required**: `server.hostname`, `server.auth_enabled`, `server.auth_token_env`, `server.admin.enabled`, `server.admin.token_env`, `inference.mode`, `state_dir`
|
|
247
272
|
|
|
273
|
+
The config file is optional. `skillmux serve` starts with defaults if its
|
|
274
|
+
config path or parent directory is absent. In that case reload is inactive
|
|
275
|
+
until a restart finds a watchable parent directory; malformed updates to an
|
|
276
|
+
active watched config are reported without replacing the last known good values.
|
|
277
|
+
|
|
248
278
|
---
|
|
249
279
|
|
|
250
280
|
## Skill introspection (`skillmux skill which`)
|
|
@@ -288,6 +318,18 @@ skillmux calibrate generate-dataset --out ./eval/queries.json
|
|
|
288
318
|
|
|
289
319
|
## Administrative HTTP API (`/admin/v1/*`)
|
|
290
320
|
|
|
321
|
+
The HTTP server has two separate surfaces:
|
|
322
|
+
|
|
323
|
+
| Surface | User | Purpose | CLI required |
|
|
324
|
+
| --- | --- | --- | --- |
|
|
325
|
+
| `/mcp` | AI clients | Resolve and fetch skills | No |
|
|
326
|
+
| `/admin/v1/*` | Operators | Inspect or update server configuration | Yes, when using named CLI contexts |
|
|
327
|
+
|
|
328
|
+
The MCP bearer token applies only to `/mcp`. The administrative bearer token
|
|
329
|
+
below applies only to `/admin/v1/*`; neither credential grants access to the
|
|
330
|
+
other surface. Named contexts use the latter to administer the deployed server,
|
|
331
|
+
not any remote client skill directory.
|
|
332
|
+
|
|
291
333
|
Remote servers expose administrative control endpoints under `/admin/v1/*` when enabled in configuration:
|
|
292
334
|
|
|
293
335
|
```toml
|
package/docs/concepts.md
CHANGED
|
@@ -15,15 +15,21 @@ These decisions are independent. A local CLI can manage native pins and serve
|
|
|
15
15
|
stdio MCP at the same time. A shared service uses HTTP MCP and can run local or
|
|
16
16
|
remote inference.
|
|
17
17
|
|
|
18
|
-
##
|
|
18
|
+
## Vault source of truth and checkouts
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
represents one skill and contains a `SKILL.md`.
|
|
20
|
+
A **vault source of truth** is the logical skill collection for Skillmux. Each
|
|
21
|
+
direct child directory represents one skill and contains a `SKILL.md`. A
|
|
22
|
+
**vault checkout** is a physical copy of that collection on a machine.
|
|
22
23
|
|
|
23
|
-
The default path is `~/skills`. Set `vault_path` in
|
|
24
|
-
`~/.config/skillmux/config.toml` when
|
|
24
|
+
The default vault checkout path is `~/skills`. Set `vault_path` in
|
|
25
|
+
`~/.config/skillmux/config.toml` when its checkout lives elsewhere. On one
|
|
26
|
+
machine, `~/skills` can be both the vault source of truth and its checkout.
|
|
27
|
+
In a shared topology, use a Git-backed vault source of truth, a checkout on
|
|
28
|
+
each client machine for the Skillmux CLI, and a checkout on the server for
|
|
29
|
+
Skillmux server. Skillmux does not pull, push, replicate, or determine
|
|
30
|
+
freshness between checkouts; Git and the deployment process own those jobs.
|
|
25
31
|
|
|
26
|
-
Skillmux commands interact with the vault in two ways:
|
|
32
|
+
Skillmux commands interact with the configured vault checkout in two ways:
|
|
27
33
|
|
|
28
34
|
- management commands such as `install` and explicit config operations write
|
|
29
35
|
to documented paths;
|
|
@@ -35,7 +41,7 @@ MCP delivery reads the current file bytes. It does not copy an indexed
|
|
|
35
41
|
|
|
36
42
|
## Delivery tiers
|
|
37
43
|
|
|
38
|
-
Skillmux applies three policies to one vault:
|
|
44
|
+
Skillmux applies three policies to one vault checkout:
|
|
39
45
|
|
|
40
46
|
| Tier | Scope | Delivery |
|
|
41
47
|
| --- | --- | --- |
|
|
@@ -52,8 +58,8 @@ shared manifest prevents conflicting core and project assignments. Core stays
|
|
|
52
58
|
capped at 25 skills to protect client startup context.
|
|
53
59
|
|
|
54
60
|
Delivery tiers do not select a deployment. A local Skillmux process can serve
|
|
55
|
-
routed skills over stdio, while a shared Skillmux process can serve
|
|
56
|
-
|
|
61
|
+
routed skills over stdio, while a shared Skillmux process can serve its server
|
|
62
|
+
checkout over HTTP.
|
|
57
63
|
|
|
58
64
|
## Deployment topologies
|
|
59
65
|
|
|
@@ -61,20 +67,36 @@ vault over HTTP.
|
|
|
61
67
|
| --- | --- | --- | --- |
|
|
62
68
|
| Native management | Client machine | Filesystem links | Skillmux CLI |
|
|
63
69
|
| Local MCP | Beside one client | stdio | Skillmux CLI |
|
|
64
|
-
| Shared MCP | Server or container host | Streamable HTTP |
|
|
70
|
+
| Shared MCP | Server or container host | Streamable HTTP | Skillmux server (full image) |
|
|
65
71
|
|
|
66
72
|
The **Skillmux CLI** is available as either the Bun package or the standalone
|
|
67
|
-
Linux executable; both expose the same commands. The **full
|
|
68
|
-
|
|
73
|
+
Linux executable; both expose the same commands. The **full image** is the
|
|
74
|
+
default Skillmux server deployment. The **slim image** is an
|
|
69
75
|
advanced variant for configured remote embeddings or intentional lexical-only
|
|
70
76
|
retrieval. The CLI can also serve HTTP, and Docker can serve stdio for clients
|
|
71
77
|
that support a container command. Those combinations use the same MCP tools;
|
|
72
78
|
the table lists the shortest setup for each use case.
|
|
73
79
|
|
|
74
|
-
|
|
80
|
+
### HTTP surfaces
|
|
81
|
+
|
|
82
|
+
An HTTP server has two separate surfaces:
|
|
83
|
+
|
|
84
|
+
| Surface | User | Purpose | CLI required |
|
|
85
|
+
| --- | --- | --- | --- |
|
|
86
|
+
| `/mcp` | AI clients | Resolve and fetch skills | No |
|
|
87
|
+
| `/admin/v1/*` | Operators | Inspect or update server configuration | Yes, when using named CLI contexts |
|
|
88
|
+
|
|
89
|
+
MCP authentication protects `/mcp`; administrative authentication protects
|
|
90
|
+
`/admin/v1/*`. Their bearer tokens are distinct and do not grant access across
|
|
91
|
+
surfaces. A named CLI context is an operator connection to the deployed server,
|
|
92
|
+
not a way to manage skill directories on remote client machines. The server
|
|
93
|
+
and its full/slim images never manage host agent directories. See
|
|
94
|
+
[Deployment](deployment.md#http-surfaces).
|
|
95
|
+
|
|
96
|
+
The full image bundles GTE-small. The slim image contains no model
|
|
75
97
|
files, so it uses configured remote embeddings or lexical fallback. The Bun
|
|
76
|
-
|
|
77
|
-
|
|
98
|
+
package downloads and caches GTE-small when local inference first loads it;
|
|
99
|
+
`skillmux models download` prefetches it. Neither Skillmux server image
|
|
78
100
|
bundles a local reranker; configure one remotely when needed.
|
|
79
101
|
|
|
80
102
|
## Clients and targets
|
|
@@ -122,12 +144,13 @@ the current machine.
|
|
|
122
144
|
|
|
123
145
|
## Local vault overlays
|
|
124
146
|
|
|
125
|
-
`local_vault_paths` layer machine-specific skill copies over the
|
|
126
|
-
vault. Skillmux checks overlay paths in order, then falls back to
|
|
147
|
+
`local_vault_paths` layer machine-specific skill copies over the configured
|
|
148
|
+
vault checkout. Skillmux checks overlay paths in order, then falls back to
|
|
149
|
+
`vault_path`.
|
|
127
150
|
|
|
128
151
|
Use overlays for work in progress or machine-specific variants. Keep portable
|
|
129
|
-
core and project pins in the
|
|
130
|
-
have the overlay.
|
|
152
|
+
core and project pins in the configured vault checkout because another machine
|
|
153
|
+
may not have the overlay.
|
|
131
154
|
|
|
132
155
|
## Inference and retrieval capabilities
|
|
133
156
|
|