Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Provides end-to-end encrypted, authenticated, and forward-secret messaging between AI agents with cryptographic identities and tamper-proof delivery.
Provides end-to-end encrypted, authenticated, and forward-secret messaging between AI agents with cryptographic identities and tamper-proof delivery.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.
WhatsApp-style end-to-end encrypted messaging for AI agents. GitHub: https://github.com/cerbug45/AgentMesh | Author: cerbug45
AgentMesh gives every AI agent a cryptographic identity and lets agents exchange messages that are: PropertyMechanismEncryptedAES-256-GCM authenticated encryptionAuthenticatedEd25519 digital signatures (per message)Forward-secretX25519 ECDH ephemeral session keysTamper-proofAEAD authentication tagReplay-proofNonce + counter deduplicationPrivateThe Hub (broker) never sees message contents No TLS certificates. No servers required for local use. One pip install.
Python 3.10 or newer pip
pip install git+https://github.com/cerbug45/AgentMesh.git
git clone https://github.com/cerbug45/AgentMesh.git cd AgentMesh pip install .
git clone https://github.com/cerbug45/AgentMesh.git cd AgentMesh pip install -e ".[dev]" pytest # run all tests
python -c "import agentmesh; print(agentmesh.__version__)" # โ 1.0.0
from agentmesh import Agent, LocalHub hub = LocalHub() # in-process broker alice = Agent("alice", hub=hub) # keys generated automatically bob = Agent("bob", hub=hub) @bob.on_message def handle(msg): print(f"[{msg.recipient}] โ {msg.sender}: {msg.text}") alice.send("bob", text="Hello, Bob! This is end-to-end encrypted.") Output: [bob] โ alice: Hello, Bob! This is end-to-end encrypted.
An Agent is an AI agent with a cryptographic identity (two key pairs): Ed25519 identity key โ signs every outgoing message X25519 exchange key โ used for ECDH session establishment from agentmesh import Agent, LocalHub hub = LocalHub() alice = Agent("alice", hub=hub) # See the agent's fingerprint (share out-of-band to verify identity) print(alice.fingerprint) # โ a1b2:c3d4:e5f6:g7h8:i9j0:k1l2:m3n4:o5p6
A Hub is the message router. It stores public key bundles (for discovery) and routes encrypted envelopes. It cannot decrypt messages. HubUse caseLocalHubSingle Python process (demos, tests, notebooks)NetworkHubMulti-process / multi-machine (production)
@bob.on_message def handle(msg): msg.sender # str โ sender agent_id msg.recipient # str โ recipient agent_id msg.text # str โ shortcut for msg.payload["text"] msg.type # str โ shortcut for msg.payload["type"] (default: "message") msg.payload # dict โ full decrypted payload msg.timestamp # int โ milliseconds since epoch
alice.send( "bob", text = "Run this task", task_id = 42, priority = "high", data = {"key": "value"}, ) All keyword arguments beyond text are included in msg.payload.
# Handler as decorator @alice.on_message def handler_one(msg): ... # Handler as lambda alice.on_message(lambda msg: print(msg.text)) # Multiple handlers โ all called in registration order alice.on_message(log_handler) alice.on_message(process_handler)
Save keys to disk so an agent has the same identity across restarts: alice = Agent("alice", hub=hub, keypair_path=".keys/alice.json") File is created on first run (new keys). File is loaded on subsequent runs (same keys = same fingerprint). Store this file securely โ it contains the private key.
# List all agents registered on the hub peers = alice.list_peers() # โ ["bob", "carol", "dave"] # Check agent status print(alice.status()) # { # "agent_id": "alice", # "fingerprint": "a1b2:โฆ", # "active_sessions": ["bob"], # "known_peers": ["bob"], # "handlers": 2 # }
On the broker machine (or in its own terminal): # Option A โ module python -m agentmesh.hub_server --host 0.0.0.0 --port 7700 # Option B โ entry-point (after pip install) agentmesh-hub --host 0.0.0.0 --port 7700
# Machine A from agentmesh import Agent, NetworkHub hub = NetworkHub(host="192.168.1.10", port=7700) alice = Agent("alice", hub=hub) # Machine B (different process / different computer) from agentmesh import Agent, NetworkHub hub = NetworkHub(host="192.168.1.10", port=7700) bob = Agent("bob", hub=hub) bob.on_message(lambda m: print(m.text)) alice.send("bob", text="Cross-machine encrypted message!")
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ NetworkHubServer โ โ Stores public bundles. Routes encrypted envelopes. โ โ Cannot read message contents. โ โโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ TCP (newline-delimited JSON) โโโโโโโโโโโโโผโโโโโโโโโโโโ โ โ โ Agent A Agent B Agent C (encrypted) (encrypted) (encrypted)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ Application layer (dict payload) โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ Ed25519 signature (sender authentication) โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ AES-256-GCM (confidentiality + integrity) โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ HKDF-SHA256 key derivation (directional keys) โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ X25519 ECDH (shared secret / forward secrecy) โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
AttackDefenceEavesdroppingAES-256-GCM encryptionMessage tamperingAES-GCM authentication tag (AEAD)ImpersonationEd25519 signature on every messageReplay attackNonce + monotonic counter deduplicationKey compromiseX25519 ephemeral sessions (forward secrecy)Hub compromiseHub stores only public keys; cannot decrypt
โ Agent IDs (to route messages) โ Public key bundles (required for discovery) โ Metadata: sender, recipient, timestamp, message counter โ Message contents (always encrypted) โ Payload data (always encrypted)
FileWhat it showsexamples/01_simple_chat.pyTwo agents, basic send/receiveexamples/02_multi_agent.pyCoordinator + 4 workers, task distributionexamples/03_persistent_keys.pyKeys saved to disk, identity survives restartexamples/04_llm_agents.pyLLM agents (OpenAI / any API) in a pipeline Run any example: python examples/01_simple_chat.py
MethodDescriptionsend(recipient_id, text="", **kwargs)Send encrypted messagesend_payload(recipient_id, payload: dict)Low-level sendon_message(handler)Register message handler (decorator or call)connect(peer_id)Pre-establish session (optional, auto-connects)connect_with_bundle(bundle)P2P: connect using public bundle directlylist_peers()List all peer IDs on the hubstatus()Dict with agent statefingerprintHuman-readable hex identity fingerprintpublic_bundleDict with public keys (share with peers)
MethodDescriptionregister(agent)Register an agent (called automatically)deliver(envelope)Route an encrypted envelopeget_bundle(agent_id)Get a peer's public bundlelist_agents()List all registered agent IDsmessage_count()Number of messages routed
Same interface as LocalHub, but communicates with a NetworkHubServer over TCP.
MethodDescriptionstart(block=True)Start listening (block=False for background thread)
from agentmesh.crypto import ( AgentKeyPair, # key generation, serialisation, fingerprint CryptoSession, # encrypt / decrypt perform_key_exchange,# X25519 ECDH โ CryptoSession seal, # sign + encrypt (high-level) unseal, # decrypt + verify (high-level) CryptoError, # raised on any crypto failure )
You are sending the same encrypted envelope twice. Each call to send() produces a fresh envelope โ do not re-use envelopes.
The envelope was modified in transit. Check that your transport does not corrupt binary data (use JSON-safe base64).
The recipient has not registered with the hub yet. Ensure both agents are created with the same hub instance (LocalHub) or connected to the same hub server (NetworkHub).
You created Agent("name") without a hub. Pass hub=LocalHub() or hub=NetworkHub(...) to the constructor.
git clone https://github.com/cerbug45/AgentMesh.git cd AgentMesh pip install -e ".[dev]" pytest -v Issues and PRs welcome at https://github.com/cerbug45/AgentMesh/issues
MIT ยฉ cerbug45 โ see LICENSE
Messaging, meetings, inboxes, CRM, and teammate communication surfaces.
Largest current source with strong distribution and engagement signals.