@d3ara1n/pi-mesh
Agent mesh for pi — peer discovery + cross-instance transport. The neutral foundation that pi-peek-agent, chat-room, and other multi-instance workflows build on. Self-sufficient: install alone to discover peers and self-introduce a role.
Package details
Install @d3ara1n/pi-mesh from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@d3ara1n/pi-mesh- Package
@d3ara1n/pi-mesh- Version
0.1.0- Published
- Jul 29, 2026
- Downloads
- 108/mo · 108/wk
- Author
- d3ara1n
- License
- MIT
- Types
- extension
- Size
- 56.1 KB
- Dependencies
- 0 dependencies · 1 peer
Pi manifest JSON
{
"extensions": [
"./src/index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
@d3ara1n/pi-mesh
Agent mesh for pi — peer discovery and cross-instance transport. The neutral foundation that pi-peek-agent and pi-chat-room build on.
Self-sufficient: install alone to discover other pi instances and self-declare a role. Knows nothing about peek, chat, or any specific workflow — it just discovers named peers and carries typed bytes between them.
How it works
- Discovery: each instance writes a PID-file marker to
~/.pi/mesh/registry/. Liveness is verified bykill(pid, 0)+ a socket connect probe — no heartbeat drift, no stale leftovers (the kernel reclaims the socket fd on exit, including SIGKILL/crash). - Transport: Unix domain sockets via
node:net(zero runtime dependencies). Requests are routed by a caller-definedtypestring to handlers registered viaserve(); consumers (pi-peek-agent's"ask",pi-chat-room's"message") define their own types. - Identity: each instance gets a stable name derived deterministically from its session id (a hash into an adjective+noun pool). Renameable at runtime.
PI_MESH_NAMEoverrides. - Profile: runtime role/description other agents see — the "name card" for multi-agent workflows.
Tools
mesh_list
List other pi instances online, with each peer's name, cwd, model, git branch, and self-declared role. Same-project peers first.
mesh_get_profile
Read a peer's (or your own) role/description and basic identity.
mesh_set_profile
Declare or update this instance's role and description — how you self-introduce on the mesh.
Commands
/mesh:rename <name>— override the derived identity name/mesh:status— show self info, registry dir, and online peers
Installation
pi install npm:@d3ara1n/pi-mesh
Or add to ~/.pi/agent/settings.json:
{
"extensions": [
"/absolute/path/to/pi-extensions/packages/pi-mesh"
]
}
Dependencies
None beyond the pi framework itself.
Configuration
Optional, in ~/.pi/agent/settings.json under mesh:
{
"mesh": {
"registryDir": "~/.pi/mesh/registry",
"heartbeatMs": 15000
}
}
registryDir accepts a leading ~. heartbeatMs must be a positive finite number.
Naming
Each instance gets a stable display name shown by mesh_list. The name is derived deterministically from the session id (hash → adjective+noun pool), so the same session always gets the same name across /reload, restarts, even machines. Renameable at runtime via /mesh:rename.
Override at startup:
PI_MESH_NAME=Fox pi
Otherwise the derived name (e.g. QuietBrook) is used. Name collisions are flagged in mesh_list; disambiguate by sessionId.
Order-agnostic consumers
Extensions that depend on pi-mesh register their serve() handlers via the mesh:ready event (+ a tryGetMeshAPI fallback), so load order in settings.json is irrelevant — put pi-mesh anywhere.
License
MIT