Mesh Lane Service Mode
April 3, 2026 ยท View on GitHub
Status: implemented on 2026-04-02 as the published install and service-mode entrypoint for durable inference-mesh lanes.
psionic-mesh-lane is the supported operator entrypoint for installing one
durable pooled-inference lane on one machine.
It is also the owned integration seam for the rest of the stack. openagents
may shell out to this binary for install, export, or import workflows, and
probe may attach to the resulting management surface, but neither repo
depends on a separate external mesh sidecar product.
It does four things that the lower-level server binaries do not:
- materializes one stable on-disk root for config, model paths, logs, node identity, and durable network state
- writes platform service artifacts for macOS
launchdand Linuxsystemd - starts the normal OpenAI-compatible Psionic server above file-backed mesh identity and join state
- preserves node identity and trusted membership state across restart and binary upgrades
The current published service mode is intentionally bounded:
- shared-admission join bundles are supported
- signed-introduction bootstrap is not published here yet
- relative model paths resolve inside the mesh-lane root
Published Binary
Build the supported binary:
cargo build -p psionic-serve --bin psionic-mesh-lane --release
The binary exposes three commands:
./target/release/psionic-mesh-lane install --root <dir> -m <model> ...
./target/release/psionic-mesh-lane run --root <dir>
./target/release/psionic-mesh-lane export-join-bundle --root <dir> --out <path>
Durable Root Layout
One installed lane root has this layout:
bin/- generated wrapper script used by
launchdandsystemd
- generated wrapper script used by
config/mesh-lane.json- durable operator config for serving, transport, and join material
state/node.identity.json- file-backed Psionic node identity
state/network-state.json- durable join state including last imported bundle and last joined mesh preference
logs/stdout.loglogs/stderr.logmodels/- relative
-mor--modelpaths land here
- relative
run/service/- generated
systemdunit andlaunchdplist
- generated
Install One Host
Example single-host install:
./target/release/psionic-mesh-lane install \
--root ~/psionic/mesh-lanes/gemma4-e4b-a \
-m gemma4-e4b.gguf \
--backend cuda \
--host 0.0.0.0 \
--port 8080 \
--mesh-bind 0.0.0.0:47470 \
--service-name gemma4-e4b-a \
--namespace gemma4-e4b-home \
--node-role mixed
That command writes the durable root, generates a shared admission token if none was supplied, and emits:
bin/gemma4-e4b-a.shservice/gemma4-e4b-a.serviceservice/com.openagents.psionic.gemma4-e4b-a.plist
Start the installed lane:
launchctl bootstrap gui/$(id -u) \
~/psionic/mesh-lanes/gemma4-e4b-a/service/com.openagents.psionic.gemma4-e4b-a.plist
systemctl --user enable --now \
~/psionic/mesh-lanes/gemma4-e4b-a/service/gemma4-e4b-a.service
Then verify it:
curl -s http://127.0.0.1:8080/psionic/management/status | jq
open http://127.0.0.1:8080/psionic/management/console
Join A Second Host
Export a shared-admission join bundle from the first machine:
./target/release/psionic-mesh-lane export-join-bundle \
--root ~/psionic/mesh-lanes/gemma4-e4b-a \
--out /tmp/gemma4-e4b-home.join.json \
--mesh-label gemma4-e4b-home \
--advertise 10.0.0.10:47470
Install the second machine against that join bundle:
./target/release/psionic-mesh-lane install \
--root ~/psionic/mesh-lanes/gemma4-e4b-b \
-m gemma4-e4b.gguf \
--backend cuda \
--mesh-bind 0.0.0.0:47470 \
--service-name gemma4-e4b-b \
--join-bundle /tmp/gemma4-e4b-home.join.json \
--node-role mixed
On first run, the lane imports the configured bundle into durable network
state and publishes the resulting join posture on
/psionic/management/status.
Upgrade And Restart Contract
Reinstalling against the same --root is the supported upgrade path:
./target/release/psionic-mesh-lane install \
--root ~/psionic/mesh-lanes/gemma4-e4b-a \
-m gemma4-e4b.gguf \
--backend cuda
That refreshes config and service artifacts without rotating the lane identity.
The durable contract is:
state/node.identity.jsonis reused, so the node comes back with the samenode_idstate/network-state.jsonis reused, so imported join material and last joined mesh preference survive restart- node epoch advances on restart, which keeps session generation explicit
- changing
namespaceoradmission_tokenis refused once durable identity or network-state files exist
If you need a different mesh identity, use a different --root.
Service Notes
- wrapper scripts append to
logs/stdout.logandlogs/stderr.log - service units restart automatically
- the service-mode root is the source of truth for future upgrades and restarts, not ad hoc shell flags
- management join state is populated from durable Psionic network state before the HTTP server starts