EnvoyMesh README

The project's README from github.com/allenpeng0705/EnvoyMesh. As one markdown file: README.md.

EnvoyMesh

EnvoyMesh — Secure P2P Agentic Mesh

MIT License Node.js TypeScript Platforms

🌐 Website · ⬇ Download · English · 简体中文

EnvoyMesh

A decentralized, peer-to-peer mesh for autonomous AI agents.

EnvoyMesh is a private social network that you — and your AI agent — actually own. Unlike most social apps and AI assistants that live on someone else's server, EnvoyMesh flips the script:

Install EnvoyMesh on your computer (home node) and EnvoyGo on your phone, chat with friends directly, and let your AI agents negotiate tasks on your behalf — all without any platform in the middle.

The default home node is the standalone desktop app (macOS / Windows). A headless home node (LaunchAgent / logon task) is optional, for advanced operators only.

📖 QuickStart.md — Get up and running in minutes.
📘 EnvoyMesh Guidebook 0.4.0 (中文版 · HTML)


Download

EnvoyMesh (desktop home node)

Install the desktop app to run your private mesh (Social UI + node). Prefer the mirror if GitHub is slow.

Platform Download
macOS (Apple Silicon · DMG) GitHub Releases · Mirror DMG
Windows (EXE) GitHub Releases · Mirror EXE
Linux Build from source (see QuickStart.md)

More options and screenshots: Website downloads.

EnvoyGo (phone)

Pair EnvoyGo to your home node via QR. Requires a running EnvoyMesh desktop install.

Platform Download
iOS (App Store · iOS 18.6+) App Store
Android (Google Play) Google Play · APK mirror · GitHub Releases

EnvoyGo · App Store QR      EnvoyGo · Google Play QR

Scan · App Store      Scan · Google Play


Table of Contents


What can I do with EnvoyMesh?

Core Communication

AI Agent

Knowledge Base

Content

Agent Network

Mobile & Remote Access

Family Network


Getting Started

End users: download a desktop build or EnvoyGo from Download — you do not need source or envoy-harness.

Developers: clone EnvoyMesh and run setup. Setup clones/builds the sibling envoy-harness repo next to EnvoyMesh when missing (requires Node.js, npm, and pnpm).

parent/
  EnvoyMesh/       ← this repo
  envoy-harness/   ← auto-cloned by setup (coding-agent runtime)

macOS / Linux:

git clone https://github.com/allenpeng0705/EnvoyMesh.git
cd EnvoyMesh
./scripts/setup.sh

# Run
npm run node:dev      # Start the P2P node
npm run social:dev    # Open http://localhost:5173

Windows (PowerShell 5.1+):

git clone https://github.com/allenpeng0705/EnvoyMesh.git
cd EnvoyMesh
.\scripts\setup.ps1

# Run
npm run node:dev      # Start the P2P node
npm run social:dev    # Open http://localhost:5173

Optional: clone harness yourself first, or point at an existing tree:

./scripts/setup.sh --local-envoy-harness /path/to/envoy-harness
# Windows: .\scripts\setup.ps1 -LocalEnvoyHarnessPath D:\path\to\envoy-harness
# Or: export ENVOY_HARNESS_DIR=/path/to/envoy-harness

Desktop packaging (./scripts/build-desktop.sh / .\scripts\build-desktop.ps1) stages harness from that sibling into the Tauri bundle. Details: docs/envoy-harness-integration-EnvoyMesh.md · QuickStart.md.

setup.sh and setup.ps1 are kept in sync step-for-step — if you change one, change the other in the same commit. Setup also bootstraps OpenClaw, copies the envoymesh channel extension, builds the OpenClaw gateway, and smoke-tests the webhook.

First launch. A desktop install (DMG / .exe / .AppImage) auto-bonds to the project's author (Allen Peng) on first launch via the bundled bundled-sponsor-friend.json, so you start with one working contact out of the box. Remove it any time from Settings → Contacts. To opt out before launch, delete the file from the bundle (or set bundled-sponsor-friend.json to {"enabled": false} in your installer profile).

Headless home node (advanced)

Most people should keep using the desktop download. The Tauri app already starts the home node and respawns it when it wedges.

If you need the home node always on without a UI (EnvoyGo to a mini-PC, overnight checkout), install an OS supervisor. Quit the desktop app first — one process owns a profile.

# macOS / Linux — portable bundle, or this git checkout if you omit --bundle
./scripts/home-node-service.sh install --bundle /path/to/envoymesh-bundle
./scripts/home-node-service.sh status
./scripts/home-node-service.sh uninstall
# Windows — Scheduled Task at logon (not a Windows Service)
.\scripts\home-node-service.ps1 install -Bundle C:\path\to\envoymesh-bundle
.\scripts\home-node-service.ps1 status
.\scripts\home-node-service.ps1 uninstall

Details: docs/headless-home-node.md · QuickStart.md.

For detailed setup, configuration, Docker, mobile, and packaging: QuickStart.md · packaging.md


How It Works

System architecture

Every home node is a full peer. EnvoyGo is a thin client to your home; friends connect over signed mesh envelopes (optionally via relay).

EnvoyMesh Network architecture — Primary Envoy, EnvoyGo, Friend Envoy, external agents, Obsidian

Primary Envoy (desktop) · EnvoyGo (phone) · Friend Envoy · External agents · Obsidian vault

Interactive version on the website.

Network Architecture

You don't need to understand this to use EnvoyMesh — but here's the short version:

  ┌────────────┐                ┌────────────┐                ┌────────────┐
  │  Your Mac  │   signed msg   │   Relay    │   signed msg   │ Friend's   │
  │  (Envoy)   │ ─────────────▶ │ (helps the │ ─────────────▶ │ Mac        │
  │            │                │  two find  │                │ (Envoy)    │
  │            │                │  each other│                │            │
  └────────────┘                └────────────┘                └────────────┘
       ▲                                                       │
       │                                                       │
   signed                                       signed         │
   reply  ◀────────────────────────────────────── reply  ◀─────┘

   - The relay never reads your message. It only helps you find each other.
   - Your friend's Mac checks the signature, checks that it trusts you, then delivers it.
   - If the relay is offline, the two Macs can still talk directly.

Security Pipeline

Every message goes through four checks before delivery:

   Wire  ──▶  1. Is it really from you?        (signed with your key)
                 │
                 ▼
            2. Do I trust you?                (your trust list — public / referred / direct)
                 │
                 ▼
            3. Is this message allowed?        (policy engine — what can this sender do?)
                 │
                 ▼
            4. Has it been seen before?        (no replays, no duplicates)
                 │
                 ▼
              Delivered

Agent Bridge

Your AI agent doesn't speak the P2P language directly — that would be risky. EnvoyMesh runs a secure bridge that translates between the mesh and your agent. The agent never holds your identity keys — EnvoyMesh signs everything, applies your policy, and the agent just answers plain HTTP requests.

→ Full guide: AI Agent & External Agents


AI Agent & External Agents

EnvoyMesh supports a two-engine agent network — a built-in AI (EnvoyAI/OpenClaw) and an optional external agent connected over HTTP. Both engines share the same mesh tools, chat interface, and policy controls. Only one external agent can be active at a time.

Built-in Agent: OpenClaw (EnvoyAI)

EnvoyAI is the built-in AI assistant that ships with every EnvoyMesh node:

For OpenClaw setup and extension details, see docs/openclaw-extension.md.

External Agent Bridge

For users who prefer a different AI engine, EnvoyMesh provides a secure bridge — a bidirectional HTTP-to-P2P gateway. External agents never get direct mesh access or your identity keys.

Three external agent presets are built in:

Agent Default URL Status Description
HomeClaw http://127.0.0.1:8010/message Enabled The original external agent. Python/FastAPI-based.
Hermes http://127.0.0.1:8020/message Enabled Alternative external agent. Migration tool available to import into OpenClaw.
OpenHuman http://127.0.0.1:8021/message Disabled by default Community external agent.

All three use the same envoymesh-message adapter — the same wire protocol, the same HTTP endpoints, no agent-specific code in EnvoyMesh.

  Friend's Envoy                Your Envoy                    External Agent
  ┌──────────┐              ┌──────────────┐              ┌──────────────┐
  │  Mesh    │ ──chat.msg─▶│   Bridge     │──POST /msg──▶│   HomeClaw   │
  │  (P2P)   │◀─chat.msg──│  (HTTP:3031) │◀─POST /send──│  / Hermes    │
  │          │              │              │              │  / OpenHuman │
  └──────────┘              └──────────────┘              └──────────────┘
                                    │
                          The agent never holds
                          your identity keys or
                          speaks P2P directly

Key rules:

Setting Up Hermes

Step 1: Start Hermes

# Hermes listens on port 8020 by default
hermes serve --port 8020

Step 2: Configure the EnvoyMesh bridge

Open the Social UI → Settings → AI → AI Engine:

  1. In the Ext Agent section, select Hermes from the dropdown
  2. The webhook URL auto-fills to http://127.0.0.1:8020/message
  3. Set the Listen Port (default: 3031) — this is where Hermes sends replies back
  4. Optionally set a Secret for Bearer token authentication
  5. Check Enable to activate the bridge
  6. Click Save

Or via WebSocket RPC:

{
  "method": "applyExtAgentSettings",
  "params": {
    "activeExtAgentId": "hermes",
    "bridgeEnabled": true,
    "bridgeListenPort": 3031,
    "extAgents": [
      {
        "id": "hermes",
        "name": "Hermes",
        "adapter": "envoymesh-message",
        "url": "http://127.0.0.1:8020/message",
        "enabled": true
      }
    ]
  }
}

Step 3: Configure Hermes to send replies to EnvoyMesh

In your Hermes configuration, point the reply endpoint at the EnvoyMesh bridge:

{
  "bridgeUrl": "http://127.0.0.1:3031/bridge/send",
  "bridgeSecret": "your-shared-secret"
}

Step 4: Verify

After saving, the AI Engine mode chip should show "Built-in + Ext" (if EnvoyAI is running) or "Ext only" (if EnvoyAI is disabled). Messages sent to your agent peer ID will be forwarded to Hermes, and Hermes's replies will appear in chat.

Setting Up OpenHuman

Step 1: Start OpenHuman

# OpenHuman listens on port 8021 by default
openhuman serve --port 8021

Step 2: Enable OpenHuman in EnvoyMesh

Open the Social UI → Settings → AI → AI Engine:

  1. In the Ext Agent section, select OpenHuman from the dropdown
  2. The webhook URL auto-fills to http://127.0.0.1:8021/message
  3. Set the Listen Port (default: 3031)
  4. Optionally set a Secret
  5. Check Enable to activate the bridge
  6. Click Save

Or via RPC:

{
  "method": "applyExtAgentSettings",
  "params": {
    "activeExtAgentId": "openhuman",
    "bridgeEnabled": true,
    "bridgeListenPort": 3031,
    "extAgents": [
      {
        "id": "openhuman",
        "name": "OpenHuman",
        "adapter": "envoymesh-message",
        "url": "http://127.0.0.1:8021/message",
        "enabled": true
      }
    ]
  }
}

Step 3: Configure OpenHuman's reply endpoint

{
  "bridgeUrl": "http://127.0.0.1:3031/bridge/send",
  "bridgeSecret": "your-shared-secret"
}

AI Engine Modes

EnvoyMesh supports four engine modes:

Mode EnvoyAI (Built-in) Ext Agent Use Case
Built-in only ✅ On ❌ Off Default — OpenClaw runs in-process, no external agent
Built-in + Ext ✅ On ✅ On Both engines active — EnvoyAI handles assistant turns, ext handles agent tasks
Ext only ❌ Off ✅ On Replace the built-in agent entirely with your preferred external agent
None ❌ Off ❌ Off No AI — just P2P messaging

Note: EnvoyAI (OpenClaw) is read-only in the Settings UI — it's toggled at node startup via node-config.json (openclawEnabled: true/false). The Ext Agent bridge can be enabled/disabled at runtime.

Bridge HTTP Endpoints

The bridge listens on 127.0.0.1:<listenPort> and exposes these endpoints for the external agent:

Method Path Purpose Auth
POST /bridge/send Agent sends a chat reply to a mesh peer Bearer token (if configured)
POST /bridge/execute-tool Agent invokes a mesh tool Bearer token
POST /bridge/agent-share-proposal Agent proposes sharing a vault file Bearer token
GET /bridge/list-tools List available mesh tools Bearer token

Wire Contract

EnvoyMesh → External Agent (POST agentUrl):

{
  "from": "envoy_abc123",
  "fromOwnerId": "envoy:owner:def456",
  "fromName": "Alice",
  "text": "What is EnvoyMesh?",
  "messageId": "msg-unique-id"
}

External Agent → EnvoyMesh (POST /bridge/send):

{
  "to": "envoy_abc123",
  "text": "EnvoyMesh is a decentralized P2P mesh for AI agents."
}

Mesh Tools Available to External Agents

External agents can call EnvoyMesh mesh tools through the bridge:

Tool Description
mesh.findKnowledge Search the local vault knowledge base
mesh.findContact Look up a bonded contact's profile
mesh.sendMessage Send a chat message to a contact
mesh.listContacts List all bonded contacts
mesh.getProfile Get the owner's profile

Migrating from Hermes to OpenClaw

If you're moving from Hermes to the built-in OpenClaw (EnvoyAI), a migration plugin is available:

  1. Install the Hermes Migration OpenClaw extension from packages/openclaw/extensions/migrate-hermes/
  2. The plugin imports your Hermes configuration, memories, skills, and credentials into OpenClaw
  3. After migration, switch to "Built-in only" mode and disable the Hermes bridge

For details, see docs/openclaw-extension.md.

Adding a Custom Agent

You can register any HTTP agent that implements the envoymesh-message wire contract:

  1. Open Settings → AI → AI Engine → Ext Agent
  2. Select a preset (HomeClaw/Hermes/OpenHuman) as a starting point
  3. Edit the Webhook URL to point to your custom agent
  4. Click Save

Or configure programmatically:

{
  "method": "applyExtAgentSettings",
  "params": {
    "activeExtAgentId": "my-custom-agent",
    "bridgeEnabled": true,
    "bridgeListenPort": 3031,
    "extAgents": [
      {
        "id": "my-custom-agent",
        "name": "My Agent",
        "adapter": "envoymesh-message",
        "url": "http://127.0.0.1:9090/webhook",
        "enabled": true
      }
    ]
  }
}

For the bridge developer guide, see docs/agent_bridge_guide.md. For OpenClaw setup, see docs/openclaw-extension.md.


Agent Network

The Agent Network is EnvoyMesh's system for multi-device teams and multi-agent collaboration — from bringing a team online to decomposing complex tasks across AI agents.

Read first: docs/agent-network-guide.md (中文) — membership (opt-in + bonds), Team jobs, settings map, and FAQ.

Fleet & Enterprise Onboarding

EnvoyMesh ships four paths for bringing teams online, from simple invite links to enterprise-scale manifests (all under Settings → Agent Network):

Path Description Best For
Company Invite Issue a shareable link; joiner pastes it in their UI Small teams (1–20)
Fleet Manifest Import a signed JSON roster; pre-stage trust records Medium-large teams (20+)
LAN Auto-bond Auto-bond nodes sharing the same fleet token on LAN Office networks
Pairing Kiosk One-button HTTP server for on-demand invites Office visitors

All paths are opt-in, auditable, and owner-controlled. Bonds alone do not recruit an agent — each owner also enables Join Agent Network to accept Team jobs. See docs/fleet-onboarding.md and docs/agent-network-fleet.md.

Team jobs (multi-agent collaboration)

EnvoyMesh Team jobs (protocol name: chains) let your agent decompose complex work and orchestrate across bonded, opted-in peers:

Owner asks: "Translate this document, then have someone review it"
       │
       ▼
Orchestrator agent decomposes into subtasks:
       ├─ Translate (Worker A)
       └─ Review (Worker B)
       │
       ▼
Worker selection (direct assign by default, or competitive bidding):
       ├─ Workers must have Join Agent Network enabled
       ├─ Optional multi-round bids (up to 3 rounds)
       ├─ Orchestrator awards using score / cost / policy
       │
       ▼
Partial results flow back, then merge into a composite deliverable
       │
       ▼
Final Team job report with citations, audit trail, and optional cost breakdown

Key features:

See docs/agent_network.md for the protocol design.


Knowledge Base

EnvoyMesh includes a built-in knowledge base with in-app note creation and optional plugins for Obsidian-style enrichment and MCP write-back.

Built-in Knowledge Base

The Social app's Library tab is your in-app knowledge UI:

Vault layout (auto-created on first run):

shared_vault/
├── .envoy/                  ← Internal metadata (never shared)
│   ├── sensitivity.json     ← Per-item sensitivity overrides
│   └── plugins/
│       └── obsidian/        ← Link graph + frontmatter cache
├── notes/                   ← User-created Markdown notes
│   ├── research/  tutorials/  personal/  work/
├── documents/               ← Imported files (PDF, Word, images, etc.)
├── inbox/                   ← Received files from peers
└── temp/                    ← Staging for imports

Programmatic access: createNote / listKbPlugins / enableKbPlugin / disableKbPlugin JSON-RPC methods on NodeService.

Obsidian Integration

EnvoyMesh includes a built-in Obsidian-compatible knowledge base plugin (@envoymesh/kb-obsidian) that turns your vault into an Obsidian-style second brain — with YAML frontmatter, [[wiki-links]], bidirectional backlinks, and automatic sensitivity sync — all without any external Obsidian dependency.

Your vault directory doubles as an Obsidian vault. Open the same folder in Obsidian for a rich editing experience while EnvoyMesh handles the mesh networking and sensitivity.

What the Obsidian Plugin Does

When activated, the plugin scans every .md file in your vault and:

Feature Description
Frontmatter parsing Extracts tags, aliases, date, category, published from YAML headers
Wiki-link graph Builds a bidirectional link graph from [[Note]] and [[Note|Display Text]] syntax
Sensitivity sync published: true → note becomes public; published: false → override removed
Embed-aware parsing ![[image]] embeds are preserved (not treated as links)
Heading anchors [[Note#Section]] and [[Note#^block-id]] normalize to "Note" in the graph
Path normalization [[folder/Note]] resolves to "Note" (folder prefix stripped)
Sensitivity-aware resolution Strangers see only public wiki-links; private links become plain text

Setting Up Your Vault for Obsidian

Step 1: Find your vault directory

By default, your vault lives inside your profile directory:

~/.local/share/envoymesh/default/vault/

You can also check the vault path in the Social UI under Settings → Knowledge Base.

Step 2: Create notes with Obsidian-style frontmatter

Create .md files in your vault with YAML frontmatter:

---
title: My Project
tags: [project, research]
aliases: [Project Alpha, Alpha]
date: "2026-07-13"
category: engineering
published: true
---
# My Project

This is a public note about my project.

See [[Meeting Notes]] for related discussions.
Also check [[ideas/Brainstorm|the brainstorm session]].

Step 3: Activate the Obsidian plugin

The plugin is registered automatically when your node starts, but must be activated before it enriches your metadata. Via the Social UI:

  1. Open Settings → Knowledge Base → Plugins
  2. Find Obsidian in the plugin list
  3. Click Activate

Or via WebSocket RPC:

{
  "method": "activateKbPlugin",
  "params": {
    "pluginId": "obsidian"
  }
}

Once active, the plugin enriches every vault document with metadata (tags, aliases, backlinks, outgoing links) that appears in search results and the Library view.

Writing Notes with Obsidian

You have two options for creating notes:

Option A: Create in Obsidian, indexed by EnvoyMesh

  1. Open your vault folder (~/.local/share/envoymesh/default/vault/) in Obsidian
  2. Create or edit .md files with frontmatter and wiki-links
  3. EnvoyMesh automatically picks up changes on the next vault reindex
  4. The Published toggle in the Library UI syncs with published: true/false in frontmatter

Option B: Create via the Social UI Library

  1. Open Library → Notes → New Note
  2. Write Markdown content (frontmatter is optional)
  3. Set sensitivity (public / friends / private)
  4. The note is saved to {vault}/notes/{filename}.md and indexed immediately

The sensitivity of each note controls who can see it in the mesh:

┌─────────────────────────────────────────────────────┐
│                  Sensitivity Tiers                    │
├──────────┬────────────────────────────────────────────┤
│ public   │ Anyone on the mesh can discover & query    │
│ friends  │ Bonded contacts (direct + referred) only   │
│ private  │ Only you and your AI agent               │
└──────────┴────────────────────────────────────────────┘

When a stranger queries your knowledge base, wiki-links are filtered based on the target note's sensitivity:

Link target sensitivity Who sees the link
public Everyone — rendered as [[Note]]
friends Bonded contacts only — strangers see plain text
private Only you — others see plain text (alias or note name)

Frontmatter Reference

Field Type Description
tags [tag1, tag2] or multiline list Note tags — used in search and Library view
aliases [alias1, alias2] or multiline list Alternative names for the note
date "YYYY-MM-DD" or "YYYY-MM-DDTHH:mm:ss" Note date
category string Note category (e.g., engineering, research)
published true or false Controls sensitivity: true → public, false → revert to default

Published sync behavior:

Syntax Description Normalized Target
[[Note]] Basic link Note
[[Note|Display Text]] Link with display alias Note
[[folder/Note]] Path-qualified link Note
[[Note#Section]] Link to heading Note
[[Note#^block-id]] Link to block reference Note
![[Image]] Embed (image, text, etc.) Excluded from link graph

Using Your Existing Obsidian Vault

If you already have an Obsidian vault, you can point EnvoyMesh to use it:

  1. Open Settings → Knowledge Base in the Social UI
  2. Set the Vault Path to your existing Obsidian vault directory
  3. Activate the Obsidian plugin

Important: EnvoyMesh never modifies your notes. It only reads frontmatter and wiki-links for enrichment. All writes go through the Social UI or the createNote RPC.

MCP Write-Back to Obsidian Notes

When your AI agent discovers knowledge from an external MCP server, it can save the results as vault notes:

---
source: mcp
mcp-server: "http://127.0.0.1:9999/mcp"
mcp-tool: "memex_search"
mcp-query: "deployment guide"
mcp-queried-at: "2026-07-13T10:30:00Z"
published: false
tags: [mcp, knowledge]
---
# MCP deployment-guide

> Sourced from memex_search on 2026-07-13T10:30:00Z

## Results

### 1. EnvoyMesh Deployment Guide
Deployment notes...

### 2. Network Configuration
Networking config...

MCP-sourced notes default to friends sensitivity (not public). You can toggle them to published: true in the Library UI to make them discoverable on the mesh.

Plugin Management

All KB plugins can be managed via the Social UI or RPC:

Action RPC Method Description
List plugins listKbPlugins({ activeOnly: true }) See all registered plugins and their status
Activate activateKbPlugin({ pluginId: "obsidian" }) Start a plugin
Deactivate deactivateKbPlugin({ pluginId: "obsidian" }) Stop a plugin (link graph deleted)
Get config getKbPluginConfig("obsidian") Read plugin settings
Update config updateKbPluginConfig({ pluginId: "obsidian", config: { ... } }) Update settings

Plugin status values: registered → active → disabled / error

How It Works Internally

You write a .md file with frontmatter and wiki-links
           │
           ▼
    Obsidian plugin reads all .md files from vault
           │
           ├─ Parse YAML frontmatter (tags, aliases, date, published)
           │
           ├─ Sync published: true/false → per-item sensitivity overrides
           │     ├── published: true  → sensitivity override = "public"
           │     └─ published: false → override removed
           │
           ├─ Build wiki-link graph from [[links]] in content
           │     ├── Normalize targets (strip paths, anchors, .md)
           │     ├── Deduplicate outgoing links
           │     └─ Compute bidirectional backlinks
           │
           └─ Enrich vault documents with metadata
                 ├── frontmatter:tags → ["tag1", "tag2"]
                 ├── frontmatter:aliases → ["alias1"]
                 ├── links:outgoing → ["NoteB", "NoteC"]
                 └── links:backlinks → ["NoteA"]

When a peer queries your knowledge:
           │
           ▼
    Sensitivity-aware resolution
           ├── Owner (you): sees all links and notes
           ├── Bonded contact: sees public + friends links
           └── Stranger: sees only public links (private → plain text)

For the full design, see docs/knowledge-base-and-rag.md.


Mobile (EnvoyGo)

Product mobile app: EnvoyGo (apps/envoygo/) — Flutter thin client. This is what “mobile / phone / iOS / Android” means in this repo.

A lightweight app that acts as a remote client to your home node:

Install: Download EnvoyGo (App Store / Google Play + QR codes).
Pairing: Scan a QR code from your desktop Social UI → instant connection.
Design: docs/flutter-thin-client-design.md.

The old Capacitor full-node stack (apps/mobile/) was removed. Do not recreate it unless explicitly requested.


Project Structure

EnvoyMesh/
├── apps/
│   ├── node/        # Home node runtime (CLI, mesh, WebSocket API)
│   ├── relay/       # Relay binary (lean: connectivity + lookup, no LLMs)
│   ├── tauri/       # Native desktop wrapper (Social + node → DMG/EXE)
│   ├── social/      # Social/chat UI (Vite + React) — desktop
│   └── envoygo/     # ★ PRODUCT mobile app (Flutter thin client)
├── packages/        # protocol, identity, bonds, network, vault, models, local-store, mobile-identity (browser), …
├── sites/           # Public website + download QR assets
├── docs/            # Design docs, security model, implementation plan
├── QuickStart.md    # Step-by-step guide
└── AGENTS.md        # Architecture reference

Current Status

Active product surfaces: Social (desktop) + EnvoyGo (mobile), with Envoy Harness for coding chat / Terminal and Pi for Terminal + Ext Agent. Dynamic relay roster (CN + US community hubs) ships in the desktop package seed.

Recent milestones (see docs/implementation-plan.md for the full list):

Earlier phases (trust modes, Agent Network / Team jobs, fleet onboarding, terminals, audio messages, family network, …) are also shipped — details in the roadmap.


Want to Read More?


License

MIT

EnvoyMesh (allenpeng0705/EnvoyMesh)

Searching Database…

这是什么?EnvoyMesh 是一个去中心化的点对点网状网络,专为自主 AI 智能体打造——一个你和你的智能体真正拥有的私人社交网络,支持聊天、语音、文件传输,还能让 AI 代表你协商任务。没有中央服务器:网络就跑在你自己的设备上。
那这是要安装的应用,还是需要注册的托管服务?这是你自己运行的软件,不是托管服务:EnvoyMesh 桌面版就是你的家庭节点(包含社交界面和节点本身),EnvoyGo 则是手机上的 Flutter 轻客户端,扫码即可与家庭节点配对。没有账号,也不依赖云端。
怎么在我的设备上把它跑起来?从 GitHub Releases 下载桌面版安装包(macOS Apple Silicon 用 DMG,Windows 用 EXE;Linux 需按 QuickStart.md 从源码构建),然后从 App Store 或 Google Play 安装 EnvoyGo,扫码配对到你的家庭节点即可。
我需要先安装别的东西吗?正常使用不需要——普通用户直接下载安装包或 EnvoyGo 就行。只有从源码构建的开发者才需要 Node.js、npm 和 pnpm;环境配置在缺少同级 envoy-harness 仓库时也会自动克隆它。
第一次启动前,有什么容易让人意外的事我该知道?首次启动会通过内置的 sponsor-friend 文件自动与项目作者(Allen Peng)建立好友绑定,所以你一打开就有一个能用的联系人。你随时可以在 Settings → Contacts 里删掉这个联系人,也可以在启动前从安装包中禁用该文件。
我的数据到底会去向哪里?不会发往任何中央位置——每个家庭节点都是完整的对等节点,消息以签名信封的形式在设备之间传递(可选经过中继),信任等级(blocked、public、referred、direct)控制每个联系人能访问的内容。
这个 AI 智能体自己能做些什么?在你的安全规则范围内,它可以交友、搜索知识并执行任务,包括把工作拆解(翻译 → 审校 → 总结)后分发给已绑定且同意参与的智能体的团队任务。还有一个智能体市场,可以让你找到能力提供者并积累声誉评分。
语音通话需要做端口转发或者有服务器吗?不需要——语音是在已绑定的联系人之间通过点对点的 WebRTC 实现的,信令也走网状网络本身,所以不用开放新端口,也没有中央服务器。视频通话已在计划中,但目前还不是通用功能。
它有普通社交应用那样的信息流和博客吗?有——信息流按时间顺序展示你关注的作者和主题的帖子,没有任何算法排序;博客则以 envoy:// 页面的形式把长文章发布到你自己的节点上,并同步到已绑定的对等节点。Explore(探索)页面以元数据优先的卡片形式展示作者、主题和 Bazaar(集市)商品。
Size
794.5 MB
Stars
3.1K
Age
5mo
Commits · 90 Days