Releases: chinesewebman/mnelo
Release list
v1.1.0 — Multi-Agent 共用版
v1.1.0 is the Multi-Agent 共用版 of mnelo. Building on v1.0.0 (single-agent Task/Loop subsystem feature-complete), this release crosses the single-agent → multi-agent boundary:
- Entity host namespace guard — multiple agents writing to the same DB use
host:<agent>prefix to avoid id collisions - Tailscale CGNAT hosts accepted by mcp_server — cross-network multi-agent access (loopback / Tailscale mesh listen modes)
MneloRemoteClientwrapper — Hermes gateway wrapper withsource='hermes-gw'attribution- streamable-http transport (MCP 2025-03-26 spec) — replaces SSE as the main transport
- Linux systemd support —
install.shauto-installs systemd unit, full $10/year VPS deployment story - Config 化 —
[rate_limit],[validation],[task],[client]four sections extracted toconfig.tomlfor multi-agent tuning
PR #6 + #7 close out fresh-DB CI stability + drop Python 3.9 (usearch>=2.26 wheels are 3.10+ only). CI matrix now Python 3.10 / 3.11 / 3.12, all green.
Schema
task_states/state_transitionstables — Task/Loop state machine persisted (M1 v0.2 schema bump)audit_log— L2 autonomous 自主层 audit (H-1 §3)host:namespace validation — multi-agent write isolationschema_version→ 1.1
Tools (27 total)
| Group | Count | Examples |
|---|---|---|
| Memory core | 19 | remember / recall / relate / update / forget / graph_query / stats / audit_list / audit_undo / maintenance |
| Task/Loop | 8 | task_create / task_transition / task_list / task_replay / loop_create / loop_update / loop_list / loop_tick |
Migration from v1.0.0
- No data migration required. Existing single-agent v1.0.0 DBs work as-is in v1.1.0.
- New writes enforce
host:namespace prefix — v1.0.0 entities without prefix will trigger ValidationError on first remember() in v1.1.0. Runscripts/migrate_stock_namespace_2026_08_09.pyto addhost:defaultprefix in bulk before the first v1.1.0 remember(). install.shnow offerslisten modefor multi-agent — re-runbash scripts/install.shto enable.- Config additions: see
config.toml.examplefor new[rate_limit],[validation],[task],[client]sections.
Breaking changes
- None. v1.1.0 is backwards-compatible with v1.0.0 single-agent deployments.
CI status
✅ Lint (ruff) success
✅ Security (bandit) success
✅ Tests Python 3.10 success
✅ Tests Python 3.11 success
✅ Tests Python 3.12 success
Contributors
- chinesewebman (owner) — multi-agent architecture + review + releases
- Hermes (agent) — CI stability (PR #6 + #7) + CHANGELOG
- Yanru-cafe (PR #2) — PII audit_log UNIQUE collision + tool count docs consistency
📖 Full changelog: see CHANGELOG.md
v1.0.0 — Task/Loop subsystem feature-complete (M1-M5)
v1.0.0 — Task/Loop subsystem feature-complete (M1-M5)
DESIGN §12 milestones M1-M5 all shipped. Task and Loop entities gain a full state-machine
core with audit log, concurrent safety, crontab-style recurring tasks, and stuck-task
proposals.
Highlights
- State machine:
transition/list/replaywith 6 task states + 3 loop states- bi-temporal valid_from/valid_until windows
- Concurrent safety:
BEGIN IMMEDIATEcross-connection forapply_stale_proposal,
forget_task,forget_loop— eliminates check-then-update races loop_tick_cron: recurring tasks with configurable intervalspropose_stale_tasks: open>7d / waiting>14d / blocked>3d / in_progress>3d
thresholds → audit_log proposals → apply/resolution loop- Forgetting with reason: explicit corrective gate (D8) — min length + strip +
str type guards - usearch f16 runtime contract: double assertion (init + load) prevents the
mixed-precision file corruption class entirely
MCP tools (22 total)
| Group | Tools |
|---|---|
| Memory core | remember / recall / lanes / compact / digest / start |
| Task/Loop | list_tasks / get_task_state / propose_stale_tasks / |
| list_stale_proposals / apply_resolution / forget_task / | |
| forget_loop / start_loop / list_loops / loop_state / forget |
Plus 8 other tools across lanes, audit, vector maintenance.
API boundary guards
Every public function enforces isinstance + range + whitelist for each
parameter. M33-M36 series:
| Pass | Concern |
|---|---|
| M30 | race fix + threshold validation + digest ≤2000 chars |
| M33 | forget race fix + reason ≥5 chars |
| M34 | status/limit whitelist on list_stale_proposals |
| M35 | reason isinstance(str) on forget path |
| M36 | transition() reason/task_id/to_state/evidence guards |
Search backend
| Backend | Status |
|---|---|
| usearch HNSW (f16) | default; load+init runtime f16 assertion |
| zvec HNSW + INT8 + FTS5 | optional; auto-preferred over usearch |
Operational changes
- WAL checkpoint warning persists (MCP long connections block truncate);
manualwal_checkpoint(TRUNCATE)recommended when MCP is down usearch.indexrebuild path:scripts/rebuild_index.py --backend usearch --fresh(data-loss-safe; rebuilds from SQLite chunks only)- RUNBOOK § usearch-f16 + index-corruption diagnosis added
Stats
| Metric | Value |
|---|---|
| Commits since v0.5.12.1 | 162 (51 feat / 39 fix / 62 docs) |
| Tests passing | 103 (full suite, isolated DB) |
| Review-pass audits | 5 (M28-M37), all findings closed |
| Tags | v1.0.0 (this) |
| Latest commit | 6e06dbf |
Upgrade notes
transition()reason is now always required (was force-only);
callers must supply a non-empty string ≥1 char (post-strip)list_stale_proposalsaccepts{proposed, applied, reverted, all}
forstatus; limit clamped to 1-1000forget_task/forget_loopreason is now validated (isinstance str,
strip, min length 5)transition()race fix: callers no longer need explicit
BEGIN/COMMIT wrapping for atomicity on the simple API path; the
function still accepts a caller-provided connection for full
transaction control
Docs: DESIGN_TASK_LOOP.md ·
RUNBOOK.md ·
REVIEW_LOG.md
mnelo v0.1.1 — Documentation update
"# mnelo v0.1.1 — Documentation update\n\nDocs-only patch bump. No code or API changes — this release makes mnelo easier to discover and to install.\n\n## What changed\n\n### Top-of-README blurb\n- New "Why 4-way recall wins" paragraph on the README landing — explains in one read what each lane catches (vector misses literals like stock codes, meta misses semantic paraphrases, graph misses orphaned chunks, entity misses long-form prose), why RRF fuses them without score normalization, and links down to the math + latency numbers.\n- GitHub repo description rewritten from a flat tech-stack list to a hook that names real use cases: "The memory layer that remembers your stock picks, your wife's birthday, AND where you left your keys."\n\n### RRF finally explained\n- New "🔀 What is RRF?" section after At a glance. Cormack et al. 2009 paper link, a worked 3-lane example with hand-computed scores, and a side-by-side comparison table vs weighted-score fusion (normalization cost, robustness, extensibility, LOC). Closes the "RRF mentioned 5 times, defined 0 times" gap in v0.1.\n\n### Install fixed\n- Quick start now runs cd mnelo after git clone (v0.1 silently piped pip install into system Python) and adds a venv step.\n- New "🤖 One-line agent install" subsection — a copy-paste prompt for Hermes / Claude / Cursor / Codex that handles venv + plist + health probe. Typical install: ~90s (bge-small-zh model download is the slow part, ~95 MB).\n\n### Embedding model links\n- BAAI/bge-small-en-v1.5 now linked in both Acknowledgements and Known limitations (was bare text in v0.1). Swap target is now discoverable from the README without opening HuggingFace.\n\n### Bilingual parity\n- Every change above is mirrored in README.zh.md. No drift.\n\n## Diff\n\n\nREADME.md | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++--------\nREADME.zh.md | 55 +++++++++++++++++++++++++++++++++++++++++++++++++-----\n2 files changed, 103 insertions(+), 13 deletions(-)\n\n\n## Upgrade notes\n\nNo action required. Re-pull, re-read the README, profit.\n\n## Languages / 语言\n\n- English: see README.md\n- 中文: see README.zh.md\n\n## Install (unchanged from v0.1)\n\nbash\ngit clone https://github.com/chinesewebman/mnelo.git\ncd mnelo\npip install \"mcp[cli]>=1.26.0\" \"sqlite-vec>=0.1.9\" \"fastembed>=0.8.0\"\npython scripts/init_db.py\n\n\n## License\n\nMIT"
mnelo v0.1
mnelo v0.1 — Initial Public Release
Local-first knowledge-graph memory layer for AI agents. Single SQLite file + sqlite-vec + MCP + RRF. Bilingual (English + 中文).
Languages / 语言
- English: see README.md (default)
- 中文: see README.zh.md
Highlights
- Storage: single SQLite file (~24 MB @ 4500 chunks, 4600 entities)
- Vector: sqlite-vec (vec0) + BAAI/bge-small-zh-v1.5 (512-dim, CN-native)
- Graph: native relations table, 2-hop BFS traversal
- Recall: 4-way concurrent (vec + graph + meta + entity) → RRF fusion
- Protocol: MCP over SSE (127.0.0.1:8086), 7 tools
- Latency (warm): p50 = 12.5 ms, p95 = 36 ms
- Bilingual: English + 中文 (auto-detect locale)
- Test coverage: 50 tests passing
Install
git clone https://github.com/chinesewebman/mnelo
cd mnelo
pip install "mcp[cli]>=1.26.0" "sqlite-vec>=0.1.9" "fastembed>=0.8.0"
python scripts/init_db.pyFull docs: see RUNBOOK.md in this repo.
License
MIT