Let Paseo agents on different daemons list and message each other.
npmjs · Paseo 0.9+
paseo plugin add npm:paseo-cross-daemon@0.2.0GitHub · Paseo 0.8 fallback
paseo plugin add maxwell-01/maxs-paseo-plugins --ref 975f8c4c062cb78ca82b203c8952e6c31621a9e6 --path cross-daemonGit security status and fallback installation are pinned to commit 975f8c4c062c.
From the plugin's README
Install it on every daemon that takes part, then switch each one on in the app:
paseo plugin install paseo-cross-daemon
That installs the npm package. To install from Git instead:
paseo plugin install https://github.com/maxwell-01/maxs-paseo-plugins.git:cross-daemon.
Update with paseo plugin update cross-daemon.
README
A Paseo plugin that lets agents on different Paseo daemons list and message each other. Requires Paseo 0.9.2 or newer, installed on every daemon that takes part.
Open Cross-daemon in the app's sidebar. It lists every daemon the app is connected to, each with a switch and the daemons it can reach. Switches are off by default. Daemons that are switched on can reach each other; a switched-off daemon shares no link and keeps no peers. A daemon without the plugin, or offline, is shown but cannot be switched.
The same switch is in each host's settings: Settings → Plugins → cross-daemon ⋯ → Cross-daemon.
While the app is open it syncs every host that has the plugin, one sync at a time: at connect, after a switch change, and every minute. Each daemon gets the names and links of the other switched-on daemons. The app is the only party that can reach every daemon, so a peer list changes only while it is open; daemons keep their last list when it closes.
Switching off clears that daemon's peer list at once. The other daemons drop it at their next sync.
A daemon that does not answer a sync, for example a sleeping Mac, keeps its place on its peers' lists until it answers switched off.
Each daemon gives its own relay pairing link, the same as paseo pair, only while it is switched
on. A pairing link grants full control of that daemon. Peers are stored owner-only in
$PASEO_HOME/plugin-data/cross-daemon/, which keeps other users out but not the daemon's own
agents: they run as the same user. The cross-daemon tools never print a link.
Every new Claude, Codex or OpenCode agent on a daemon with the plugin gets a cross-daemon MCP
server. Other providers are left unchanged: Paseo refuses to create them with MCP servers or tool
approvals. Claude and Codex agents get the tools pre-approved; OpenCode does not, because a tool
policy turns off its auto-accept.
An agent keeps the tools it was created with. Agents created before the plugin, or before an update that adds a tool, do not see the new tools.
Codex does not pass PASEO_AGENT_ID to MCP servers, so a message from a Codex agent cannot say
which agent sent it, and the receiver cannot reply to it.
| Tool | What it does |
|---|---|
list_daemons |
The daemons this one can reach, by name and server ID. |
list_workspaces(daemon) |
That daemon's workspaces. |
list_agents(daemon) |
That daemon's agents, with status and folder. |
get_agent_activity(daemon, agentId, tail) |
An agent's recent activity. |
send_agent_prompt(daemon, agentId, prompt, notifyOnFinish) |
Sends a message; see below. |
daemon is a name or a server ID; use the server ID when two daemons share a name.
send_agent_prompt never interrupts a working agent:
paseo send.notifyOnFinish (on by default), the sender is told when the agent finishes, with its last
message. Paseo's own tool steers that notice into the sender's running turn; this one waits until
the sender is idle, so it never interrupts the sender either.The plugin checks and sends to one agent at a time, so two messages cannot both find an agent idle.
A target that starts a turn of its own between the plugin's check and its send is still interrupted,
as it would be by Paseo's own send_agent_prompt.
Limits, each reported to the sender:
Every line the plugin adds to a message or notice carries a random marker, so text inside a message cannot pose as the sender or as a reply target.
Install it on every daemon that takes part, then switch each one on in the app:
paseo plugin install paseo-cross-daemon
That installs the npm package. To install from Git instead:
paseo plugin install https://github.com/maxwell-01/maxs-paseo-plugins.git:cross-daemon.
Update with paseo plugin update cross-daemon.
MIT.
Scanned 27 Sep 2026, 08:57 UTC from maxwell-01/maxs-paseo-plugins/cross-daemon.