Mesh
High-speed shared semantic & hybrid memory layer for AI agents.
When one agent learns something, every other agent can recall it — by meaning, keyword, or exact identifier.
The Problem
Every AI agent starts each session with amnesia. Claude in your terminal doesn't know what Claude in your editor discovered. Your coding agent cannot access what your review agent found. Every agent repeats work already done.
The Solution
Mesh provides persistent, shared agent memory with:
- 5-Stage Hybrid Search: Dense Vector SIMD Cosine (
cache.matrix @ q_vecin<0.1 ms) + SQLite FTS5 BM25 + Robertson-Sparck Jones Smoothed IDF + Domain Synonyms + Exact Token Overlap. - Unified Local Storage: Pure SQLite WAL per namespace (
~/.mesh/, mode0700) — zero external database daemons, zero multi-process synchronization issues. - Smart Deduplication & Contradiction Tracking: Identical facts are reinforced in-place; contradictory facts are flagged for review without silent data loss.
- Time-to-Live (TTL) Confidence Decay: Ephemeral facts gradually decay towards staleness (
--ttl <days>/--clear-ttl). - Explicit Consent for Background Actions: Interactive
y/nuser permission prompts before starting background processes, registering OS login auto-start, downloading model weights, or sending logs to cloud APIs (bypassable in automation via--yesorMESH_AUTO_APPROVE=1). - Multi-Interface: MCP Server (10 tools for Claude Desktop, Cursor, Windsurf), Web Dashboard, HTTP REST API, and CLI.
Quickstart
1. Installation & Setup
pip install mesh-context-layer
# Interactive setup (asks y/n before registering auto-start, starting the daemon, or downloading the ONNX model)
mesh setup
# Non-interactive setup for CI or automated environments
mesh setup --yes
Explicit Consent & Non-Blocking Embedding Engine
Mesh respects your machine and network:
- No Silent Background Daemons or Downloads: Mesh asks for
y/nconfirmation before starting the background HTTP daemon ([http://127.0.0.1:7701](http://127.0.0.1:7701)), registering OS login auto-start, or downloading the ~90 MBall-MiniLM-L6-v2ONNX weights into~/.mesh/models/. - Instant Local Fallback: In non-interactive environments (or if you decline the ONNX download), Mesh serves requests in
<0.05 msusing its built-in 384-dimensional semantic feature-hash engine (hash-384), and automatically heals vectors in-place if the ONNX model is downloaded later. - No Silent Phone-Home:
mesh statusandmesh helpnever contact PyPI unless you passmesh status --check-updatesor setMESH_CHECK_UPDATES=1.
2. Python SDK
from mesh import Mesh
# Agent 1: Learns an architecture constraint
agent_a = Mesh(namespace="checkout-service", agent_id="backend-agent")
agent_a.learn(
"Production PostgreSQL 16 database runs on port 5432 with pgBouncer connection pooling",
memory_type="fact",
tags=["db", "postgres", "prod"]
)
# Agent 2: Recalls it without direct communication
agent_b = Mesh(namespace="checkout-service", agent_id="frontend-agent")
results = agent_b.recall("what port does production postgres use?", n=3)
for r in results:
print(f"[{r['similarity']:.2f}] {r['content']} (from {r['source_agent']})")
MCP Server (Claude Desktop, Cursor & Windsurf)
Mesh provides 10 MCP tools directly to your AI agents.
Claude Desktop Configuration
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"mesh": {
"command": "mesh-server",
"env": {
"MESH_NAMESPACE": "my-project",
"MESH_AGENT_ID": "claude-desktop"
}
}
}
}
Cursor Configuration
Create .cursor/mcp.json in your project root:
{
"mcpServers": {
"mesh": {
"command": "mesh-server",
"env": {
"MESH_NAMESPACE": "my-project",
"MESH_AGENT_ID": "cursor"
}
}
}
}
Available MCP Tools
| MCP Tool | Description |
|---|---|
mesh_learn |
Store a fact, preference, instruction, or decision with deduplication and contradiction checking. |
mesh_recall |
5-stage hybrid search across shared memory (excludes local_only private memories by default unless include_private=true). |
mesh_update |
Update existing memory content, tags, or TTL (clear_ttl=true supported) in-place preserving UUID and history. |
mesh_forget |
Permanently delete a specific memory by its ID (scrubbing audit & contradiction logs). |
mesh_inspect |
Browse recent memories in a namespace (excludes local_only memories by default unless include_private=true). |
mesh_context |
Generate prompt-injection-safe context blocks (markdown, xml, json, or plain) for system prompts. |
mesh_patterns |
Discover frequently accessed topics, memory gaps, unused memories, and stale memories. |
mesh_contradictions |
Inspect conflicting memories identified during learning. |
mesh_resolve_contradiction |
Mark a contradiction ID (or 4+ char short ID) as resolved. |
mesh_sync |
Save a turn summary and incrementally capture facts from session logs using local extraction. |
Web Dashboard
Launch the zero-build local visualizer:
mesh-dashboard --namespace checkout-service --port 7433
Mesh prints and opens a pre-authenticated launch URL (http://localhost:7433/?ns=checkout-service&token=...) that sets an HttpOnly; SameSite=Strict session cookie and strips the token from the URL bar. Features:
- Real-Time Hybrid Search with instant score breakdowns and peripheral snippets.
- Contradiction Inspector: Review and resolve flagged memory conflicts.
- Memory Gaps & Patterns: See queries agents asked that had low recall similarity.
- Audit Stream: Real-time log of agent reads, writes, updates, and deletes.
- Keyboard Shortcuts:
/to focus search,nto create a memory,Escto close modals.
HTTP REST API
Start the local background server:
mesh-http --port 7701
All endpoints (except GET /health) require your local per-user token (~/.mesh/auth_token, mode 0600) via Authorization: Bearer <token> or X-Mesh-Token: <token>:
TOKEN=$(cat ~/.mesh/auth_token)
# Store a memory
curl -s -X POST http://127.0.0.1:7701/learn \
-H "Content-Type: application/json" \
-H "X-Mesh-Token: $TOKEN" \
-d '{"content": "Auth service requires JWT RS256 signatures", "memory_type": "instruction"}'
# Recall memories
curl -s -X POST http://127.0.0.1:7701/recall \
-H "Content-Type: application/json" \
-H "X-Mesh-Token: $TOKEN" \
-d '{"query": "auth JWT algorithm", "n": 3}'
CLI Commands
# Setup & daemon management
mesh setup # Interactive setup (daemon + ONNX model)
mesh daemon start # Start background daemon (port 7701)
mesh daemon stop # Stop background daemon
mesh daemon status # Inspect daemon health & model RAM residency
mesh daemon warmup # Cache ONNX model & warm local daemon
mesh daemon unload # Immediately release model weights from RAM
# Memory operations (automatically proxy through warm local daemon)
mesh add "PostgreSQL 16 runs on port 5432" --tags db,prod --type fact
mesh ask "what port does postgres use?" --n 3
mesh update <id> --content "Updated content" --clear-ttl
mesh forget <id>
mesh context --query "database config" --format markdown
# Inspection, diagnostics & utilities
mesh inspect # Browse memories in namespace
mesh conflicts # List or --resolve contradictions
mesh patterns # View top queries & memory gaps
mesh doctor # Verify SQLite FTS5, permissions, ONNX SHA-256 & MCP configs
mesh shell # Interactive REPL shell
mesh completion zsh --install # Install shell Tab completion (bash, zsh, fish, powershell)
mesh namespaces # List, stats, rename, or delete namespaces
mesh export backup.json # Export non-private memories to JSON
mesh import backup.json # High-speed validated batch import
mesh capture --file session.log # Extract memories from logs
mesh digest --hours 24 # UTC session summary
Security, Privacy & Boundaries
local_only=True (--private)
Marking a memory as local_only=True:
- Excludes it from
mesh export(export_namespace()). - Excludes it by default from
mesh context(build_context()),mesh_recall,mesh_inspect,/recall, and/inspectunlessinclude_private=Trueis explicitly passed. - Redacts its text in
audit_log,contradictions,mesh digest, and conflict warnings returned bylearn(). - Scrubs previous versions from
audit_logandcontradictionswhenever a memory is edited viaupdate()or deleted viaforget().
Namespace Isolation (MESH_LOCKED_NAMESPACE) & Dynamic Storage (MESH_HOME)
MESH_HOME/MESH_DIR: Override the default~/.meshdirectory dynamically for full test isolation or containerized volumes.MESH_LOCKED_NAMESPACE: Namespaces (mesh_<namespace>.db) are logical project partitions designed to keep different codebases separated; by default, any authenticated local agent with your~/.mesh/auth_tokencan pass anamespaceparameter. If you want to strictly confine an MCP server or HTTP instance to a single namespace, setMESH_LOCKED_NAMESPACE=1(orMESH_LOCKED_NAMESPACE=<allowed-namespace>) in its environment.MESH_ENFORCE_AGENT_OWNERSHIP: When set to1, prevents agents from updating or forgetting memories authored by other agents (human-clianddashboardremain exempt).MESH_INCLUDE_PRIVATE: Set to0orfalseto globally excludelocal_onlyprivate memories in Python SDKrecall()andinspect()calls.
License
MIT © billighost
Metadata
Release files for mesh-context-layer 0.6.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mesh_context_layer-0.6.2.tar.gz | 185.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mesh_context_layer-0.6.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 334.7 kB
Release files / mesh_context_layer-0.6.2.tar.gz
| Download URL | mesh_context_layer-0.6.2.tar.gz |
|---|---|
| Size | 185.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7e7128c2139c831ec08c066de1c1d1a0d8ef7ce9a651ab14114f77b8e7a9af6d
|
|
BLAKE2b-256 checksum How to use checksums |
07d61304feb12787ad4857d4f76994b0a8baac9f84bcf083da0dbc5b544f2098
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.0
|
Release files / mesh_context_layer-0.6.2-py3-none-any.whl
| Download URL | mesh_context_layer-0.6.2-py3-none-any.whl |
|---|---|
| Size | 149.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
26c255961a56fca7ff08d59a781228e6581ecd7cf958f9f1b0ac935c2b916c0a
|
|
BLAKE2b-256 checksum How to use checksums |
8398bb0b6ff11e17b4d0ea5e40500cad2be75036ec72f02aaf74468e8fb7975b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.0
|