Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
516 commits
Select commit Hold shift + click to select a range
cedf9b6
fix Swift XCFramework release env (#678)
i386 May 25, 2026
3f4827f
Fix Metal benchmark cross-arch build (#679)
i386 May 25, 2026
d50a468
task(ci): optimize PR builds further (#674)
ndizazzo May 26, 2026
9b51d01
updates to ROADMAP.md (#680)
michaelneale May 26, 2026
90a5f14
chore(ci): update cleanup workflow (#682)
ndizazzo May 26, 2026
1da5f39
Record shared-prefix candidates for split prefill (#681)
IvGolovach May 26, 2026
38a6025
Migrate workflows to Blacksmith
blacksmith-sh[bot] May 26, 2026
a3c3373
Update llama.cpp upstream pin
github-actions[bot] May 26, 2026
62a41ce
Fix Blacksmith CI discrepancies
ndizazzo May 26, 2026
23e0ad1
Fix metadata-only package verification cache
ndizazzo May 26, 2026
5c805ea
Fix dispatched Swift release manifest flow
i386 May 26, 2026
1500ea9
Upgrade workspace to Rust 2024 edition
i386 May 26, 2026
b36e17c
fix(lint): many linter corrections (#696)
ndizazzo May 26, 2026
12aa611
Harden crates.io publish retries (#695)
IvGolovach May 26, 2026
eb6b39a
Add KV/tool-loop stability certification harness (#676)
IvGolovach May 26, 2026
fa52785
Relay-only heartbeat grace + robust path-set classification (#697)
michaelneale May 27, 2026
4e3b716
MoA: streaming progress + progressive paint (#685)
michaelneale May 27, 2026
e36fe40
Harden crates.io publish preflight
i386 May 27, 2026
05df678
Add shared config.toml crate for SDKs (#675)
i386 May 27, 2026
b634c94
Update llama.cpp upstream pin
github-actions[bot] May 27, 2026
32e62f4
Make model downloads package aware (#706)
i386 May 27, 2026
1983480
feat(cli): --relay-auth URL=TOKEN for gated iroh-relays (#698)
michaelneale May 27, 2026
23edd36
Fix HF layer-package split serving (#705)
michaelneale May 27, 2026
fa490cf
bump version to 0.68.0 (#711)
i386 May 27, 2026
9ee76b7
Fix update flavor detection (#712)
i386 May 27, 2026
49ed50a
Use combined hf-hub fork for model downloads (#709)
i386 May 27, 2026
d305e9d
Allow plugins to provide CLI commands (#699)
i386 May 27, 2026
6669b41
ci: retry llama.cpp checkout in release builds
i386 May 27, 2026
4f52c43
Complete Skippy prefix-cache record candidates (#694)
IvGolovach May 27, 2026
fc4ca5a
Add Skippy package preflight diagnostics (#703)
IvGolovach May 27, 2026
2c2b969
Fix MoA reducer context for chained tool results (#713)
michaelneale May 27, 2026
a3fd23d
Plugin management (#701)
i386 May 27, 2026
e9a920b
fly deploy (#718)
michaelneale May 27, 2026
5033575
Add Virtual LLM audio rescue (#586)
IvGolovach May 28, 2026
a853771
Add mesh MCP HTTP endpoint + auto configure agents (#708)
i386 May 28, 2026
c948336
Update llama.cpp upstream pin
github-actions[bot] May 28, 2026
c1edf6c
Eliminate double-hash of GGUF file during model load (fixes #717) (#720)
ndizazzo May 28, 2026
72d5a40
fix(context-config): always pass a context length value for runtime m…
ndizazzo May 28, 2026
87e14fc
OpenAI API errors now return clean error messages instead of raw skip…
ndizazzo May 28, 2026
53c3311
Add plugin mesh streams (#702)
i386 May 28, 2026
6f6d606
Make GPU inventory backend-authoritative with ROCm diagnostics (#677)
IvGolovach May 28, 2026
07b9dea
Add split readiness doctor (#723)
IvGolovach May 29, 2026
4e1ef24
Guard release version mismatches (#726)
i386 May 29, 2026
00c7683
Add model metadata to models API (#735)
i386 May 29, 2026
5b10e37
Let plugins provide agent skills (#725)
i386 May 29, 2026
ba85b20
require clippy before Rust PRs (#741)
i386 May 29, 2026
dd0be60
Fix release workflow packaging
i386 May 29, 2026
033762b
Retry release version metadata refresh
i386 May 29, 2026
62c8ba0
Update llama.cpp upstream pin
github-actions[bot] May 29, 2026
6d2f6b1
Install Vulkan runtime for Windows release packaging
i386 May 29, 2026
55b9a6c
Use CUDA stubs for release version smoke
i386 May 29, 2026
64bbf1e
Bundle CUDA DLLs in Windows releases
i386 May 29, 2026
75c23c2
Allow Windows CUDA version fallback
i386 May 29, 2026
d35816f
Make dispatched release publish idempotent
i386 May 29, 2026
64f7655
Require healthy direct paths for split serving (#733)
IvGolovach May 29, 2026
916c322
Prefer healthy auto-route models (#734)
IvGolovach May 29, 2026
2fd0ec0
Move openai-endpoint to external plugin (#738)
i386 May 29, 2026
f473644
Fix OpenAI transport peer fixture after main merge (#747)
i386 May 29, 2026
17157f9
feature(mesh-genesis): add mesh genesis rules (#589)
ndizazzo May 29, 2026
9ead328
fix(cuda-gpus): correct gpu detection, and split CI CUDA lanes by ver…
ndizazzo May 29, 2026
164b2f1
Keep plugin runtime responsive during long operations (#731)
i386 May 29, 2026
e85936e
Add optional SDK console asset serving (#670)
i386 May 29, 2026
f584db5
task(ci): add canary input for release jobs (#748)
ndizazzo May 29, 2026
91c4e0a
[codex] Add Skippy diagnostics to doctor bundles (#744)
i386 May 29, 2026
d6de49a
fix(ci): updates for release job to get things passing
ndizazzo May 29, 2026
3411125
Add native skippy crash breadcrumbs (#740)
i386 May 29, 2026
13eb13d
Retry uncommitted remote tunnel failures (#742)
i386 May 29, 2026
3be3869
Fix duplicate selected path test field (#750)
i386 May 30, 2026
95695f9
Add KV overlap tool-loop certification (#756)
IvGolovach May 30, 2026
377e1a4
Update llama.cpp upstream pin
github-actions[bot] May 30, 2026
76bc52c
Harden crates.io publish preflight (#745)
IvGolovach May 30, 2026
fef0f4d
Harden LAN-only mDNS mesh startup (#746)
IvGolovach May 30, 2026
c0f8990
Reject known-too-small context targets (#753)
IvGolovach May 30, 2026
06cad32
Upgrade demanded local models during reconciliation (#754)
IvGolovach May 30, 2026
541fb5a
Add metadata-only GGUF model fit scoring
i386 May 30, 2026
b335a81
Revert "Add metadata-only GGUF model fit scoring"
i386 May 30, 2026
2834620
Drop deprecated mesh-bundle release asset (#755)
i386 May 31, 2026
4f02a65
Update llama.cpp upstream pin
github-actions[bot] May 31, 2026
d9d9096
Add plugin startup resilience diagnostics (#759)
IvGolovach May 31, 2026
8219dc7
Withdraw stale split topologies on worker loss (#763)
IvGolovach May 31, 2026
f9bd75a
Compact skippy KV cache during optimized updates (#764)
IvGolovach May 31, 2026
a9c1862
Add local target reputation routing (#767)
IvGolovach Jun 1, 2026
f8e2842
Update llama.cpp upstream pin
github-actions[bot] Jun 1, 2026
fb7108d
Stream committed MoA answers selectively (#761)
IvGolovach Jun 1, 2026
5822244
fix: speed up client auto-join bootstrap (#773)
michaelneale Jun 2, 2026
c221017
Fix models not appearing: stop /api/models from re-downloading the ca…
michaelneale Jun 2, 2026
8396f21
Diagnose split startup blockers (#774)
IvGolovach Jun 2, 2026
84da8b6
Harden mDNS LAN discovery contract (#766)
IvGolovach Jun 2, 2026
f4fa294
chore: restore github actions for CI
ndizazzo Jun 2, 2026
f72d11a
prepare-llama.sh: prevent git -C from escaping into an enclosing repo…
wesbillman Jun 2, 2026
ee67364
Expose peer throughput hints in status (#757)
IvGolovach Jun 2, 2026
97c0cad
feat: native rust SDK for rust consumers. (#736)
michaelneale Jun 3, 2026
1b34809
Fix dispatched release version preparation
i386 Jun 3, 2026
2d4be1b
Trust release container checkout before version prep
i386 Jun 3, 2026
7f8f861
Make smoke model downloads resilient to HF rate limits
i386 Jun 3, 2026
d9b0bb8
Align release smoke native runtime version
i386 Jun 3, 2026
312612a
Fix release native runtime runner labels
i386 Jun 3, 2026
d5612cb
fix installer runtime compatibility (#784)
i386 Jun 3, 2026
4a3dce6
fix installer fallback for runtime releases (#785)
i386 Jun 3, 2026
d77ca8a
revert installer to bundled runtime flow
i386 Jun 3, 2026
7872f87
Break skippy stage protocol for direct returns (#787)
i386 Jun 4, 2026
6defdfd
Fix Windows CPU fast CI check
i386 Jun 4, 2026
09722a5
Advertise MoA context from usable contributors (#779)
michaelneale Jun 4, 2026
ccefb8a
Skip first-token work for repeated Skippy prompts (#791)
i386 Jun 4, 2026
172489d
Cache HF models in CI smokes (#797)
i386 Jun 5, 2026
c91ec5e
Implement latency-aware Skippy stage count (#789)
i386 Jun 5, 2026
2e51730
Reduce Skippy decode return latency (#794)
i386 Jun 5, 2026
78a9cba
Replay cached tokens for repeated Skippy prompts (#792)
i386 Jun 5, 2026
19002c9
Make Skippy prefill chunking topology-aware (#796)
i386 Jun 5, 2026
ebc3ab4
Improve MoA reliability for agent tool loops (#802)
michaelneale Jun 5, 2026
95101ce
Balance auto runtime context for shared mesh serving (#760)
IvGolovach Jun 5, 2026
365b7b2
Protect Skippy stage decode from KV pressure (#758)
IvGolovach Jun 6, 2026
c9047e7
Retry low-quality OpenAI responses before commit
IvGolovach May 30, 2026
543f5d5
Reduce Skippy decode hot-path overhead
i386 Jun 5, 2026
536f30a
Reuse Skippy decode wire messages
i386 Jun 5, 2026
ef40600
Add meshllm.cloud website, catalog viewer, and onboarding docs (#806)
ndizazzo Jun 10, 2026
f9691ea
chore: Console public domain (#821)
michaelneale Jun 11, 2026
86ef4de
chore: flip docs pages to canonical URLs (#822)
ndizazzo Jun 11, 2026
337f5b8
Stabilize mesh MoA context and tool loops (#820)
michaelneale Jun 11, 2026
6315858
Revert "Stabilize mesh MoA context and tool loops (#820)" (#823)
michaelneale Jun 11, 2026
57a3c24
Salvage safe bits from reverted MoA PR (#820) (#824)
michaelneale Jun 11, 2026
cb3a818
Fix Windows install.ps1 failing via irm | iex and on missing checksum…
michaelneale Jun 12, 2026
d59b011
use bash (#830)
michaelneale Jun 12, 2026
c4f2a8c
skill for running on linux (#833)
michaelneale Jun 12, 2026
9af668d
Fix Windows binary crashing (STATUS_ILLEGAL_INSTRUCTION) on CPUs with…
michaelneale Jun 12, 2026
76b8379
chore(gh): add auto-assign stuff
ndizazzo Jun 12, 2026
f25aa0d
fix(config): fundation configuration setup
ndizazzo Jun 12, 2026
0869f06
fix(gh): replace micn with IvGolovach in auto_assign.yml (not a colla…
ndizazzo Jun 12, 2026
45e9eb0
Revert "fix(gh): replace micn with IvGolovach in auto_assign.yml (not…
ndizazzo Jun 12, 2026
9dc604a
fix(gh): change micn to michaelneale in auto_assign.yml
ndizazzo Jun 12, 2026
0210b10
fix(website): fix visual regressions (#835)
ndizazzo Jun 12, 2026
f36d79a
feature(version): normalize version markers for different build types…
ndizazzo Jun 12, 2026
226d1c6
Consolidate agent skills and fix stale docs (Windows deploy, repo map…
michaelneale Jun 12, 2026
4175aa6
Add Skippy request cache epoch telemetry (#817)
i386 Jun 13, 2026
09d541d
Add Skippy stage role metadata (#816)
i386 Jun 13, 2026
198a1e1
fix(hero): visual corrections for iPhone SE size devices (#838)
ndizazzo Jun 13, 2026
4866fc9
fix: debug output capturing for TUI / panics (#827)
ndizazzo Jun 13, 2026
012b569
Report Skippy artifact cold-start costs (#815)
i386 Jun 13, 2026
a49302c
Share Skippy stage wire byte accounting (#818)
i386 Jun 13, 2026
434ca53
Add transport-aware Skippy stage ordering (#814)
i386 Jun 13, 2026
d17b222
Refresh llama.cpp canary patch queue (#839)
i386 Jun 13, 2026
de42ca3
Carry GLM llama MTP patches (#840)
i386 Jun 13, 2026
6bd7d77
fix: gemma thinking
ndizazzo Jun 13, 2026
d4f2a7b
fix(website): polish longform visual explainer (#843)
ndizazzo Jun 13, 2026
39cd7d2
fix(ci): switch back to auto-assign workflow
ndizazzo Jun 13, 2026
625ce18
Stabilize skippy smoke chain startup (#849)
i386 Jun 13, 2026
c7eb4cd
Fix skippy smoke PR gate (#850)
i386 Jun 13, 2026
d3b8b2f
Add bounded direct path repair (#846)
i386 Jun 13, 2026
4c0eebc
fix(console): render thinking traces as markdown
ndizazzo Jun 14, 2026
06dafb7
MoA: don't let small-model consensus pre-empt a still-running large m…
michaelneale Jun 14, 2026
f368c4f
fix(website): restore mobile catalog cards (#852)
ndizazzo Jun 14, 2026
247dd7e
feat(skippy): Add native runtime event visibility (#842)
ndizazzo Jun 14, 2026
f1c6ace
fix(cli): fix gpu command to restore stderr output (#844)
ndizazzo Jun 14, 2026
82a7222
Use sccache for Rust build scripts (#848)
i386 Jun 14, 2026
17452d1
clarify skippy prompt cache reuse (#856)
i386 Jun 15, 2026
8f5dacf
feature: add config schema control surface (#854)
ndizazzo Jun 16, 2026
605d007
chore: hide unavailable website install options
ndizazzo Jun 16, 2026
a6d023c
fix rustfmt edition guidance (#862)
i386 Jun 17, 2026
f105d3e
Add package writer progress output (#863)
i386 Jun 17, 2026
7e9d61e
Carry llama-quantize low-memory patch queue (#864)
i386 Jun 17, 2026
9de1fc6
fix: chat IDs issue on insecure origins (#867)
ndizazzo Jun 18, 2026
45f2edf
fix release version stamping and smoke runtime install (#868)
i386 Jun 18, 2026
6bb126b
fix native runtime startup initialization (#869)
i386 Jun 18, 2026
9b961c0
Improve GLM MTP parity and batched verify sampling (#858)
i386 Jun 18, 2026
10bc0e0
add metrics server healthcheck (#871)
i386 Jun 18, 2026
8260aa2
Repin llama patch queue
i386 Jun 18, 2026
dd84d4b
fix(model-hf): clean up broken hf_hub cache symlinks after model dele…
ndizazzo Jun 19, 2026
de48d55
fix(website): reduce CPU-heavy homepage motion (#880)
ndizazzo Jun 19, 2026
622b14b
Update llama.cpp upstream pin
github-actions[bot] Jun 19, 2026
4d41100
fix(console-ui): fix rounding issues around the site
ndizazzo Jun 19, 2026
42687d0
fix shutdown race for Metal skippy runtime
ndizazzo Jun 19, 2026
da5409a
feat(models): add --direct download flag and catalog substitution mes…
ndizazzo Jun 19, 2026
1324e61
Require explicit native runtime version selection (#873)
i386 Jun 20, 2026
e655866
docs: correct metrics-server storage references (#885)
i386 Jun 20, 2026
0401bb0
Add GLM chat template fallback in llama (#890)
i386 Jun 21, 2026
4de3336
Improve LAN direct-path discovery and connection reliability (#853)
michaelneale Jun 21, 2026
d872da1
fix(runtime): support relocating shared libs
ndizazzo Jun 21, 2026
f6bb981
upgrade iroh to 1.0 (#894)
i386 Jun 22, 2026
2b8c41f
Add native MTP generation metadata to layer packages (#888)
i386 Jun 22, 2026
e30ab68
update guides for dev loop (#895)
michaelneale Jun 22, 2026
8952341
Add native skippy-quantize conversion and quantization CLI (#898)
i386 Jun 23, 2026
3e6805d
Support GLM DSA IndexShare layers (#897)
i386 Jun 23, 2026
6d323c6
fix(vram-display): clarify VRAM UX (#892)
ndizazzo Jun 23, 2026
d389841
Skip GLM DSA MTP sidecar when split stage lacks tensors (#899)
i386 Jun 23, 2026
ac010d5
Add direct quantized layer package workflow (#901)
i386 Jun 23, 2026
4d6a54d
actually have done these (#903)
michaelneale Jun 24, 2026
926004b
Update pinned llama.cpp revision (#906)
i386 Jun 25, 2026
21c9501
Update llama.cpp upstream pin
github-actions[bot] Jun 25, 2026
f0c01dc
Simplify llama.cpp patch queue (#908)
i386 Jun 26, 2026
d188a3a
Update llama.cpp upstream pin
github-actions[bot] Jun 26, 2026
1b35723
fix(llamacpp): update pin to take upstream fix
ndizazzo Jun 26, 2026
179ee7f
feature(config): Revamp configuration settings (#904)
ndizazzo Jun 26, 2026
0b3d5ae
Update llama.cpp upstream pin
github-actions[bot] Jun 27, 2026
4925b73
Update llama.cpp upstream pin
github-actions[bot] Jun 28, 2026
a3bab4f
fix: Release candidate fixes (#912)
ndizazzo Jun 28, 2026
20b2f76
chore(ci): add draft notification to PRs that wont get reviews
ndizazzo Jun 28, 2026
9968323
fix(ci): nightly stability run (#914)
ndizazzo Jun 28, 2026
e2410a8
fix: validate release native runtimes from explicit matrix (#917)
ndizazzo Jun 29, 2026
4d34b97
Render download progress inline with Ratatui (#911)
ndizazzo Jun 29, 2026
d798eb6
fix: RC5 release readiness corrections (#918)
ndizazzo Jun 29, 2026
af10734
fix(ci): make llama prep checksums portable
ndizazzo Jun 29, 2026
62a31a9
fix(ci): initialize MSVC for Windows CUDA native runtime
ndizazzo Jun 29, 2026
a099943
fix(ci): accept MinGW Windows native runtime DLL names
ndizazzo Jun 29, 2026
aa1ce83
fix(ci): fall back when sccache cannot start
ndizazzo Jun 29, 2026
0396153
fix(ci): preserve release publish credentials
ndizazzo Jun 29, 2026
f99ae9c
fix: CUDA runtime profile detection (#919)
ndizazzo Jun 29, 2026
be9bb5f
Fix chat system prompt feature flag gating
ndizazzo Jun 29, 2026
992d9a2
chore: match main CI build to the same gating we have on PRs
ndizazzo Jun 29, 2026
7339c09
fix: queue HF layer packages (#922)
ndizazzo Jun 29, 2026
29a2222
chore: speed up CI before next release build (#923)
ndizazzo Jun 29, 2026
100f548
chore: follow-ups to #923 (#924)
ndizazzo Jun 29, 2026
922f127
Update pinned llama.cpp (#927)
i386 Jun 30, 2026
6378b9a
fly automation of the web app (#928)
michaelneale Jun 30, 2026
0931e3d
update rust and node dependencies (#925)
i386 Jun 30, 2026
25c42b5
Migrate MCP bridge off deprecated RMCP helpers (#926)
i386 Jun 30, 2026
232c85a
fix: batching problem with large single prompts causing a crash (#929)
ndizazzo Jun 30, 2026
7f6ffef
Rely on cargo publish for crate status (#935)
i386 Jun 30, 2026
0b13094
chore: Use self-hosted runners via repo action variable toggle
ndizazzo Jun 30, 2026
7a80952
chore: synchronize release version management (#934)
ndizazzo Jul 1, 2026
b4b33ef
Update model card logo URL (#937)
i386 Jul 1, 2026
ea50fbb
Fix daily layer-package split jobs failing on first artifact (#945)
michaelneale Jul 2, 2026
9547ac2
Server-side tool-call emulation for models without native tool suppor…
michaelneale Jul 3, 2026
49cf034
fix: Pass reasoning format through Skippy chat templates (#947)
michaelneale Jul 3, 2026
aebfb02
feature: add benchmark 'tune' option (#948)
ndizazzo Jul 7, 2026
36a44b9
feature: Refactor setup-first installer flow (#933)
ndizazzo Jul 10, 2026
b18a8bb
fix empty setup arguments in installer (#953)
i386 Jul 10, 2026
df45420
Update pinned llama.cpp (#958)
i386 Jul 10, 2026
67839e7
Validate installer bundles before replacing binaries (#957)
i386 Jul 11, 2026
5acd902
Gate passive inference streams behind admission when a trust policy i…
michaelneale Jul 11, 2026
6145c9b
Fix dispatched release version preparation (#960)
i386 Jul 11, 2026
f03520c
Fix Windows Vulkan native runtime build (#963)
i386 Jul 12, 2026
c14e458
Update llama.cpp upstream pin
github-actions[bot] Jul 12, 2026
fb82243
fix(tui): indicate clipped join tokens (#970)
Bortlesboat Jul 13, 2026
c83543a
fix(ui): keep chat streaming in hidden tabs (#977)
Bortlesboat Jul 13, 2026
67dcc37
Update llama.cpp upstream pin
github-actions[bot] Jul 13, 2026
4bfb234
Refresh general documentation (#976)
i386 Jul 13, 2026
7d6b945
bound transformed upstream responses (#956)
i386 Jul 13, 2026
a55e81a
remove emulated response content logging (#954)
i386 Jul 13, 2026
14ecf6a
stream emulated tool prose incrementally (#955)
i386 Jul 13, 2026
f00b002
Document architecture, Skippy diagrams, and model packages (#974)
i386 Jul 13, 2026
df2b7db
Improve plugin documentation (#972)
i386 Jul 13, 2026
5936a42
Fix crates.io release checkout ref (#981)
i386 Jul 13, 2026
43103c5
v0.73.1: prepare release source
github-actions[bot] Jul 14, 2026
c441ea7
fix(mesh): owner-control listener must not share the mesh relay slot
michaelneale Jul 23, 2026
b39a0b1
fix(runtime): keep client-only nodes out of model election
michaelneale Jul 26, 2026
f455d49
test(config): align v0.73.1 schema snapshot
michaelneale Jul 26, 2026
2c6d511
fix(mesh): restrict peer HTTP tunnels to inference routes
ccarpene-blk Jul 30, 2026
415b10f
test(mesh): smoke peer tunnel route boundary
ccarpene-blk Jul 30, 2026
ebf1ecc
fix(mesh): add inference-only embedded peer surface
ccarpene-blk Jul 30, 2026
d3cd5a1
fix(mesh): isolate restricted embedded plugins
ccarpene-blk Jul 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
148 changes: 148 additions & 0 deletions .agents/skills/benchmark-tune/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
---
name: benchmark-tune
description: Use this skill when running, debugging, interpreting, or documenting mesh-llm benchmark tune model-serving throughput trials, including choosing ctx/batch/ubatch/mmap/mlock/speculative-decoding sweeps, running benchmark tune on local or SSH hosts, collecting JSON evidence, and applying tolerance-aware recommendations. Trigger for requests mentioning benchmark tune, tuning tok/s, ctx_size tradeoffs, mmap or mlock tuning, speculative decoding, MTP, ngram, draft models, or replacing old gpu tune usage.
---

# Benchmark Tune

Use `mesh-llm benchmark tune` for model-serving throughput tuning. Do not use
`mesh-llm gpu tune` or `mesh-llm gpus tune`; the GPU namespace is for hardware
inventory and raw fingerprinting (`mesh-llm gpus`, `mesh-llm gpus detect`, and
hidden `gpus run-benchmark`).

## Preflight

Verify the command surface from the current checkout before long runs:

```bash
target/release/mesh-llm benchmark --help
target/release/mesh-llm benchmark tune --help
target/release/mesh-llm gpus --help
```

For performance work, use a release build on the target host:

```bash
just release-build
```

On NVIDIA remote hosts, verify that the release binary is actually using CUDA
before recording performance results. For Jetson/Orin-style aarch64 CUDA hosts,
prefer the repo's CUDA backend build path for the host, for example
`scripts/build-linux.sh --backend cuda --cuda-arch 87`, with the host CUDA
toolkit paths exported as needed. A generic release build that reports CPU
devices is not valid performance evidence for GPU tune work.

If the run is on a remote node over SSH and will take time, use the
`remote-observable-process` skill. Prefer a TTY/login shell and `tee` logs over
detached first attempts.

## Targets

Benchmark tune accepts already-downloaded local/configured model targets only.
It will not fetch remote-only refs. If no explicit target is passed, it uses
configured local models from `~/.mesh-llm/config.toml`.

Use one of:

```bash
mesh-llm benchmark tune --model /models/model.gguf
mesh-llm benchmark tune --models /models/a.gguf,/models/b.gguf
mesh-llm benchmark tune
```

## Candidate Sweep

Start with a bounded sweep, then expand around promising values:

```bash
mesh-llm benchmark tune \
--model /models/model.gguf \
--ctx-sizes 8192,32768,131072,262144 \
--batch-sizes 512,1024,2048 \
--ubatch-sizes 256,512,1024 \
--mmap-values auto,true,false \
--mlock-values false,true \
--speculative-types auto \
--throughput-tolerance-pct 10 \
--max-tokens 128 \
--debug-telemetry \
--json
```

Rules:

- `ubatch` must be less than or equal to `batch`; invalid pairs are skipped.
- `mmap` and `mlock` are separate controls. Sweep them independently when
diagnosing load/runtime behavior.
- If `--mmap-values` is omitted, tune tries `auto`, `true`, and `false`.
- If `--mlock-values` is omitted, tune tries `false` and only tries `true` when
the current mlock probe says the evaluated budget can be locked.
- If `--speculative-types` is omitted, tune uses `auto`: it tries
`mtp` first when the model target looks like an MTP model, tries
discovered local draft-model candidates when available, tries ngram
candidates as a model-free fallback, then includes a disabled baseline.
- Use `--no-speculative-tune` when you need to reproduce the older
fit-only/disabled-speculation behavior or isolate non-speculative regressions.
- Use `--speculative-types mtp,draft,ngram,disabled` to force an
explicit speculative sweep. `draft` requires either `--spec-draft-models`, a
configured `draft_model_path`, or a local sibling GGUF whose filename looks
like a draft/EAGLE model for the target.
- MTP and draft sweeps use `--spec-draft-max-tokens` and
`--spec-draft-min-tokens`. Ngram sweeps use `--spec-ngram-min` and
`--spec-ngram-max`.
- Use longer `--max-tokens` when decode throughput is noisy; use shorter values
only for smoke checks.
- Keep `--throughput-tolerance-pct` near the default `10` unless the user asks
for stricter raw throughput optimization.
- Add `--debug-telemetry` when you need proof that speculative decoding is
actually active. It runs trial children with Skippy debug telemetry mirrored
into `target/gpu-tune/.../serve.log`.

## Evidence

Capture machine-readable output and trial logs:

```bash
mkdir -p target/benchmark-tune
mesh-llm benchmark tune ... --json \
| tee target/benchmark-tune/$(hostname)-$(date +%Y%m%d-%H%M%S).json
```

For remote hosts, include host, branch, commit, binary path, command, and output
path in the final report. Benchmark tune keeps per-trial logs under
`target/gpu-tune/`; inspect those logs when a trial fails or startup readiness
is slow.

Useful JSON fields:

- `benchmarks[].best`: tolerance-aware recommendation.
- `benchmarks[].raw_best`: highest observed decode tok/s.
- `benchmarks[].pareto_frontier`: tradeoff set for decode tok/s vs `ctx_size`.
- `benchmarks[].trials[].decode_tok_s`: measured decode throughput.
- `benchmarks[].trials[].candidate.speculative`: speculative mode and settings
used for that isolated trial.
- `benchmarks[].trials[].timings`: lifecycle timing stats: `setup_ms`,
`readiness_ms`, `request_ms`, `shutdown_ms`, `total_ms`, and
`readiness_attempts`.
- `benchmarks[].trials[].error` and `log_path`: first stop for failures.

## Interpretation

Report both raw best and recommended settings. The recommendation is
tolerance-aware: candidates within `--throughput-tolerance-pct` of raw best are
treated as throughput-equivalent, then larger `ctx_size` is preferred.

Call out tradeoffs explicitly:

- If raw best and recommended differ, explain the tok/s delta and context gain.
- If `mmap` or `mlock` changes the winner, report those controls separately.
- If speculative decoding changes the winner, report both tok/s and the active
speculative candidate. For MTP, inspect trial logs/telemetry for
`llama_stage.native_mtp.enabled`, drafted/accepted/rejected counts, and
accept rate before concluding it is helping. Use `--debug-telemetry` if those
attributes are not present in the trial log.
- If all trials fail, summarize the shared failure reason and link the trial log
paths rather than claiming no viable configuration exists.
- If results are close, avoid overfitting decimals; prefer the setting with the
better context or operational posture.
4 changes: 4 additions & 0 deletions .agents/skills/benchmark-tune/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "Benchmark Tune"
short_description: "Run mesh-llm benchmark tune safely."
default_prompt: "Use benchmark tune to evaluate local model-serving settings, choose candidate sweeps, and interpret results."
125 changes: 125 additions & 0 deletions .agents/skills/config-settings-management/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
---
name: config-settings-management
description: Use this skill when adding, renaming, removing, validating, or exposing mesh-llm config settings, including built-in settings, plugin config schemas, owner-control apply behavior, CLI validation, and UI configuration surfaces.
metadata:
short-description: Keep mesh-llm config settings complete
---

# config-settings-management

Use this skill before changing any setting that appears in
`~/.mesh-llm/config.toml`, the owner-control configuration API, the runtime
configuration UI, or an installed plugin's `config_schema`.

## Mental Model

Config settings are not just struct fields. A complete setting has:

- A persisted TOML shape in `crates/mesh-llm-config/src/model.rs`.
- Authoring/editor support in `crates/mesh-llm-config/src/authoring.rs` when
code needs to create or mutate it.
- Built-in schema metadata in
`crates/mesh-llm-config/src/model/built_in_schema.rs` when it is a core
mesh-llm setting.
- Validation diagnostics in `crates/mesh-llm-config/src/validate.rs`, with
stable `ConfigPath` and canonical path metadata.
- Runtime schema aggregation/export in
`crates/mesh-llm-host-runtime/src/config_schema.rs`.
- Owner-control apply behavior in
`crates/mesh-llm-host-runtime/src/runtime/config_state.rs` when it can be
changed dynamically.
- API/protocol conversion coverage in `crates/mesh-llm-host-runtime/src/api/`,
`crates/mesh-llm-host-runtime/src/protocol/`, and
`crates/mesh-llm-protocol/proto/node.proto` when it crosses process or node
boundaries.
- UI adapter and fixture coverage under
`crates/mesh-llm-ui/src/features/configuration/` and
`crates/mesh-llm-host-runtime/tests/fixtures/`.

## Built-In Settings Checklist

When adding or removing a built-in setting:

- Update `MeshConfig` or the owning nested config struct in
`crates/mesh-llm-config/src/model.rs`.
- Update defaults and editor helpers in `authoring.rs` if generated configs,
tests, or command flows need to write the setting.
- Add, rename, or remove the corresponding descriptor in
`model/built_in_schema.rs`. Include owner, value schema, support state,
control surfaces, apply mode, restart scope, visibility, constraints, aliases,
and description.
- Update validation in `validate.rs`. Prefer structured `ConfigDiagnostic`
helpers over plain string errors.
- Preserve compatibility with existing TOML when possible. Use aliases and
warnings for renamed keys; reserve `version = 1` bumps for actual incompatible
persisted config format changes.
- Update schema fixtures and UI adapter expectations when exported schema JSON
changes.
- Run `mesh-llm config validate --config-path <fixture> --json` for at least one
valid and one invalid representative file.

## Plugin Settings Checklist

Plugin settings are install-time schemas, not hard-coded built-in settings.

- The plugin manifest owns its schema through `config_schema` in
`crates/mesh-llm-plugin/src/manifest.rs` and
`crates/mesh-llm-plugin/proto/plugin.proto`.
- Keep `schema_version` at
`mesh_llm_config::SUPPORTED_PLUGIN_CONFIG_SCHEMA_VERSION` unless the schema
format itself becomes incompatible. Tightening validation of existing v1
fields such as `required`, type, enum, object, array, or constraints does not
by itself require a schema version bump.
- Host-side installed plugin schema loading and strict validation live in
`crates/mesh-llm-host-runtime/src/plugin/config.rs` and
`crates/mesh-llm-config/src/plugin_validation.rs`.
- Required plugin settings must be rejected even when `[plugin.settings]` is
absent.
- Missing or unavailable schemas should reject custom settings, but plugin
entries without custom settings should remain loadable when possible.
- `allow_unvalidated_config` should produce warnings, not silently drop
diagnostics from success responses.

## Owner-Control And UI

- Dynamic apply behavior belongs in
`crates/mesh-llm-host-runtime/src/runtime/config_state.rs`.
- The management API should return diagnostics for both rejected applies and
successful applies with warnings.
- Protobuf changes must be additive unless explicitly approved as breaking.
Older nodes and clients should ignore unknown fields.
- The UI should consume exported schema metadata instead of duplicating setting
ownership, labels, constraints, or apply behavior.
- Snapshot fixtures in `crates/mesh-llm-host-runtime/tests/fixtures/` are the
cross-check between Rust schema export and the TypeScript adapter.

## Validation

Run cargo commands serially. For config-surface changes, start with:

```bash
cargo test -p mesh-llm-config --lib
cargo test -p mesh-llm-host-runtime --lib schema_export
cargo test -p mesh-llm-host-runtime --lib runtime_config
cargo test -p mesh-llm-host-runtime --lib plugin_config
cargo test -p mesh-llm-plugin --lib
cargo test -p mesh-llm-plugin-manager --lib
cargo test -p mesh-llm-cli config_validate --lib
cargo test -p mesh-llm config_validate --lib
cargo check -p mesh-llm
cargo clippy -p mesh-llm-config -p mesh-llm-plugin -p mesh-llm-plugin-manager -p mesh-llm-host-runtime -p mesh-llm-cli -p mesh-llm --all-targets -- -D warnings
```

Also run the UI checks when the schema export or adapter changes:

```bash
cd crates/mesh-llm-ui
npm test -- --run src/features/configuration/api/config-adapter.test.ts
npm run typecheck
```

Use the repo build gate before publishing broad changes:

```bash
just build
```
Loading