Cross-instance peek for pi — let one pi instance glance at, or ask a question to, another instance without disturbing it.
Adds two tools for the main agent (peek_list, peek) and runs a lightweight Unix domain socket mesh so instances can discover and consult each other.
- Discovery: each instance writes a tiny PID-file marker to
~/.pi/peek/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). The connection is bidirectional, so the answer streams token-by-token. - Read-after-burn: the peeked instance's main agent is never touched. The answer comes from its side
utilitymodel via the sharedpi-peekconsult core.
List other pi instances online, grouped by project. Peers appear only if they have pi-peek-agent loaded.
Ask another instance a question without disturbing its main conversation.
| Parameter | Required | Description |
|---|---|---|
question |
yes | The question to ask. |
at |
no | Target instance name (e.g. "Fox"). Omit to auto-pick the other same-project instance. |
sessionId |
no | Pin a specific instance by sessionId (use when names collide). |
pi install npm:@d3ara1n/pi-model-roles
pi install npm:@d3ara1n/pi-peek
pi install npm:@d3ara1n/pi-peek-agentOr add to ~/.pi/agent/settings.json:
{
"extensions": [
"/absolute/path/to/pi-extensions/packages/pi-model-roles",
"/absolute/path/to/pi-extensions/packages/pi-peek",
"/absolute/path/to/pi-extensions/packages/pi-peek-agent"
]
}@d3ara1n/pi-peek— consult core (serialize + investigate + tracker)
Optional, in ~/.pi/agent/settings.json under peek:
{
"peek": {
"registryDir": "~/.pi/peek/registry",
"heartbeatMs": 15000,
"askTimeoutMs": 120000,
"role": "utility"
}
}registryDir accepts a leading ~. heartbeatMs and askTimeoutMs must be positive finite numbers; invalid values fall back to their defaults.
Each instance gets a stable display name shown in peek_list. The name is
derived deterministically from the session id (a hash into an
adjective+noun pool) — so the same session always gets the same name across
/reload, restarts, even across machines. Switching sessions (resume / fork /
new) yields a different name.
Set it explicitly to override:
PI_PEEK_NAME=Fox piOtherwise the derived name (e.g. QuietBrook) is used. Name collisions across
sessions are disambiguated by peek({sessionId}).
MIT