The Developer Platform
Build apps on top of MeshHold.
Build apps on top of MeshHold. REST API, Server-Sent Events stream, libp2p protocols, and a Claude Code / OpenCode / Gemini CLI agent surface.
REST API
All endpoints live under /api/v1/. Bearer-token auth (the same token
the web UI uses). Configurable bind on api.listen_addr.
Key endpoints:
GET /api/v1/vaults— list vaultsPOST /api/v1/vaults— createGET/PUT/DELETE /api/v1/vaults/{id}/files/{path}— file opsGET /api/v1/events/stream— global SSE for chat / call / topology events
The full reference is at REST API reference (TODO: dedicated page).
SSE event stream
const es = new EventSource('/api/v1/events/stream?token=...');
es.addEventListener('chat_message', (e) => {
const m = JSON.parse(e.data);
console.log(m.room_id, m.from, m.text);
});
libp2p protocol IDs
| Protocol | Purpose |
|---|---|
/meshhold/hello/1.0 |
Initial handshake + topology gossip |
/meshhold/blocks/1.0 |
Block fetch/push |
/meshhold/chat/1.0 |
Chat-room gossipsub |
/meshhold/call/1.0 |
WebCodecs media transport |
/meshhold/tunnel/1.0 |
TCP/UDP tunnel sub-streams |
/meshhold/plugin/agent/1.0 |
HTTP/1.1-over-libp2p proxy for AI agents |
MCP / Claude Code integration
MeshHold embeds Claude Code as a vault-analog. Each instance has its own encrypted state, syncs across nodes, and proxies over libp2p.
meshhold agent create --type claude --name "Claude 1"
meshhold agent workspace add <instance-id> ~/projects/foo
meshhold agent share <instance-id>
See the Claude rollout devlog for details, and the comparison with Paseo, Happy Coder, CloudCLI and VibeTunnel for how this surface lines up against the dedicated mobile agent clients.
OpenCode driver
The same agent surface drives OpenCode through its native HTTP/SSE serve mode. Pick the driver in the Add-Instance UI; provider OAuth flows are in Settings → Providers.
Gemini CLI driver
Google's Gemini CLI is driven over ACP (the Agent Client Protocol —
newline-delimited JSON-RPC 2.0 over stdio), spawned as gemini --acp. Every
instance is fully isolated: its own ~/.gemini (a per-instance HOME
override), its own long-running process, and its own API key stored in that
instance's ~/.gemini/.env — so several accounts coexist on one node.
Streaming updates and tool-call approvals (session/request_permission maps
to the same Allow / Deny cards as the other drivers) flow through the one
agent surface. Add a Gemini API key under Settings → Providers.
MCP for gemini is not yet wired. Gemini's ACP mode blocks session creation while an MCP server is configured, so the MCP tab is hidden for gemini pending an ACP-native fix. Claude and OpenCode support MCP normally.
All three drivers sit behind a single SessionBackend interface, so the
REST surface and the Web UI are identical regardless of which CLI backs an
instance.