@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 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, pin a small set into native
14
- skill directories, and retrieve the rest through MCP. On one machine, the
15
- source and checkout can be the same directory. In a shared deployment, each
16
- machine that manages native skills and the server use their own checkout; Git
17
- or your deployment process keeps those checkouts current.
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 without Bun? Install the standalone Linux executable instead; it is
27
- the same CLI.
28
- 3. Need one shared HTTP MCP service? Deploy the **full Docker image**, the
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** image; see [Deployment](docs/deployment.md).
32
- 5. Need native pins and shared retrieval? Run the CLI on the machines that own
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
- clients connect over HTTP and do not need the CLI.
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 AMD64 or ARM64 executable instead:
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
- gh release download --repo klhq/skillmux --pattern 'skillmux-linux-*'
65
- gh attestation verify skillmux-linux-amd64 --repo klhq/skillmux
66
- chmod +x skillmux-linux-amd64
67
- sudo install skillmux-linux-amd64 /usr/local/bin/skillmux
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
- Use `skillmux-linux-arm64` on ARM64. See [Deployment](docs/deployment.md) for
71
- the full and slim Docker images.
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, HTTP, auth, CORS, rate limits, health, and metrics |
239
- | [Configuration](docs/configuration.md) | Machine config, inference, manifests, and overlays |
240
- | [CLI reference](docs/cli.md) | Commands, contexts, automation, JSON output, and exit codes |
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. Choose a workflow based on where skills
4
- need to appear and where Skillmux should run.
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 use case
8
+ ## Choose a setup
7
9
 
8
- | Goal | Start with | Recommended installation |
9
- | --- | --- | --- |
10
- | Put a small skill set in native client directories | [Manage native skills](getting-started.md#manage-native-skills) | Skillmux CLI |
11
- | Let one client search the full vault through MCP | [Add local MCP retrieval](getting-started.md#add-local-mcp-retrieval) | Skillmux CLI |
12
- | Serve the vault to several MCP clients | [Run a shared MCP service](getting-started.md#run-a-shared-mcp-service) | Full Skillmux server image |
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. The
15
- shared service uses the same MCP tools over HTTP.
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
- Install the CLI with the Bun package, or use the standalone Linux executable
18
- when Bun is unavailable. The full server image is the shared-service default;
19
- the slim image is an advanced choice for remote embeddings or lexical-only
20
- retrieval.
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, expose HTTP, and operate the service.
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 local overlays.
39
- - [CLI reference](cli.md): use commands, contexts, JSON output, and exit codes.
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">Three ways to use Skillmux</title>
3
- <desc id="desc">One canonical skill vault supports native skill management and local MCP retrieval through the Skillmux CLI, plus a shared HTTP MCP service through the full or slim Skillmux server image.</desc>
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">Choose a local workflow or serve the same retrieval contract to several clients.</text>
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">Canonical skill vault</text>
75
- <text x="408" y="172" class="mono">~/skills/&lt;skill-id&gt;/SKILL.md</text>
76
- <text x="408" y="200" class="body">Install · scan · pin · index · inspect usage</text>
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="M480 224V252H220V277" fill="none" stroke="#0f766e" stroke-width="3" marker-end="url(#arrow-teal)"/>
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="360" height="302" rx="18" fill="#ffffff" stroke="#99d5cc" stroke-width="2"/>
87
- <rect x="62" y="306" width="91" height="26" rx="13" fill="#ccfbf1"/>
88
- <text x="107.5" y="324" text-anchor="middle" class="chip" fill="#115e59">USE CASE 1</text>
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">Manage native skills on the client machine.</text>
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="444" text-anchor="middle" class="mono">skillmux init · sync</text>
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="160" y="550" width="85" height="27" rx="8" fill="#0f172a"/>
101
- <text x="202.5" y="568" text-anchor="middle" class="chip" style="font-size: 10px" fill="#ffffff">BUN PACKAGE</text>
102
- <rect x="251" y="550" width="87" height="27" rx="8" fill="#f1f5f9" stroke="#cbd5e1"/>
103
- <text x="294.5" y="561" text-anchor="middle" class="chip" style="font-size: 10px" fill="#334155"><tspan x="294.5">LINUX</tspan><tspan x="294.5" dy="11">EXECUTABLE</tspan></text>
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="284" width="360" height="302" rx="18" fill="#ffffff" stroke="#93c5fd" stroke-width="2"/>
108
- <rect x="442" y="306" width="91" height="26" rx="13" fill="#dbeafe"/>
109
- <text x="487.5" y="324" text-anchor="middle" class="chip" fill="#1d4ed8">USE CASE 2</text>
110
- <text x="442" y="365" class="card-title">Add local MCP retrieval</text>
111
- <text x="442" y="390" class="body">Run Skillmux beside one MCP client.</text>
112
-
113
- <rect x="442" y="414" width="102" height="48" rx="10" fill="#f8fafc" stroke="#cbd5e1"/>
114
- <text x="493" y="444" text-anchor="middle" class="label">AI client</text>
115
- <path d="M544 438H573" fill="none" stroke="#2563eb" stroke-width="2.5" marker-end="url(#arrow-blue)"/>
116
- <text x="558" y="428" text-anchor="middle" class="body">stdio</text>
117
- <rect x="579" y="414" width="179" height="48" rx="10" fill="#eff6ff" stroke="#93c5fd"/>
118
- <text x="668.5" y="444" text-anchor="middle" class="label">Local Skillmux</text>
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="91" height="26" rx="13" fill="#ede9fe"/>
130
- <text x="867.5" y="324" text-anchor="middle" class="chip" fill="#6d28d9">USE CASE 3</text>
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">Serve several clients from one deployment.</text>
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="mono">POST /mcp</text>
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="616" width="740" height="66" rx="14" fill="#0f172a"/>
154
- <text x="444" y="643" class="chip" fill="#cbd5e1">SHARED MCP CONTRACT</text>
155
- <text x="444" y="667" class="mono mono-light">retrieve → rerank → resolve_skill / fetch_skill verified SKILL.md</text>
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. Native
4
- management belongs on the machine that owns the client skill directories:
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, or synchronize skills in
8
- client directories.
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. Token environment variable names (`token_env`) may be associated with a context.
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 sync.
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
- ## Canonical vault
18
+ ## Vault source of truth and checkouts
19
19
 
20
- The vault is the source collection for Skillmux. Each direct child directory
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 you keep the collection elsewhere.
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 the same
56
- vault over HTTP.
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 | Full Skillmux server image |
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 Skillmux server
68
- image** is the default shared-service deployment. The **slim image** is an
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
- The full Docker image bundles GTE-small. The slim image contains no model
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
- CLI distributions download and cache GTE-small when local inference
77
- first loads it; `skillmux models download` prefetches it. Neither Docker image
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 canonical
126
- vault. Skillmux checks overlay paths in order, then falls back to `vault_path`.
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 canonical vault because another machine may not
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