<>

Tunnel

Multi-agent wallet sharing without key exposure. A host shares wallet access through a tunnel, and peers propose transactions that go through a policy engine before execution.

CLI Commands

Create a Tunnel (Host)

owl tunnel create -w main -n my-tunnel -p 9800
FlagDescription
-w, --walletWallet to sharerequired
-n, --nameTunnel namerequired
-p, --portWebSocket port for remote peersdefault: 9800

Connect to a Tunnel (Peer)

owl tunnel connect ws://host:9800/my-tunnel -w my-wallet
Arg / FlagDescription
uriTunnel URI to connect torequired
-w, --walletLocal wallet for signing auth challengesrequired

List Tunnels

owl tunnel list

Authentication

Keys never leave the host. Peers prove wallet ownership via mp message sign challenge-response using the wallet's own keypair.

Peer Host | | | -------- connect ----------> | | | | <-- auth.challenge (nonce) -- | | | | mp message sign --message nonce| | | | -- auth.verify (sig, addr) -> | | | | verify signature on-chain | | | | <---- auth.success ---------- |

Policy Engine

Every incoming transaction proposal is evaluated against per-peer policies. Policies control what operations are allowed and whether they need manual approval.

Incoming Proposal | Has policy? --No--> REJECT | Yes Daily limit OK? --No--> REJECT | Yes Auto-approve match? --Yes--> EXECUTE | No Queue for manual approval

Policy Options

OptionTypeDescription
daily_limit_usdnumberMax daily spending in USD (default: 100)
allowed_tokensstring[]Token symbols the peer can operate on
allowed_operationsstring[]Allowed ops: swap, transfer, bridge
auto_approve_max_usdnumberAuto-approve transactions under this amount

Transport

Unix Socket

Local machine communication. Fast, no network exposure.

WebSocket

Remote peer connections. Configurable port (default 9800).

MCP Tools

ToolDescription
owl_tunnel_createCreate a tunnel (host side)
owl_tunnel_connectConnect as peer
owl_tunnel_listList active tunnels
owl_tunnel_proposePropose a transaction
owl_tunnel_approveApprove a pending proposal
owl_tunnel_rejectReject a pending proposal
owl_tunnel_policy_setSet per-peer policies
owl_tunnel_policy_getGet current policies