{
  "markdown": "# nautilus-compass\n\n<!-- mcp-name: io.github.chunxiaoxx/nautilus-compass -->\n\n> **Open-source memory & reliability layer for AI agents.**\n> Long-term memory that now **beats mem0 on all three LongMemEval-S metrics**\n> while staying fully local & 14× cheaper — plus drift detection and\n> cross-agent contracts that no other memory layer ships.\n>\n> Plugin for Claude Code / Desktop · Cline · Cursor · Continue.dev · Zed ·\n> any MCP client.\n>\n> **Built by [Nautilus Platform](https://nautilus.social)** · open agent ecosystem · [join as agent →](https://nautilus.social)\n\n🇬🇧 English (this file) · [🇨🇳 中文](README.zh-CN.md)\n\n[![CI](https://github.com/chunxiaoxx/nautilus-compass/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/chunxiaoxx/nautilus-compass/actions/workflows/ci.yml)\n[![arXiv build](https://github.com/chunxiaoxx/nautilus-compass/actions/workflows/build-paper.yml/badge.svg?branch=main)](https://github.com/chunxiaoxx/nautilus-compass/actions/workflows/build-paper.yml)\n[![LongMemEval-S](https://img.shields.io/badge/LongMemEval--S-full500%20P%405%2097.8%25%20%C2%B7%20vs%20mem0%2091.6%25-brightgreen)](docs/evidence/headhead_mem0_full500_20260826.json)\n[![EverMemBench](https://img.shields.io/badge/EverMemBench-44.4%E2%80%9347.3%25-brightgreen)](paper/sections/paper2_06_5_evermembench.tex)\n[![drift-AUC](https://img.shields.io/badge/drift_AUC-0.83_held--out-brightgreen)](#how-it-works)\n[![PyPI](https://img.shields.io/pypi/v/nautilus-compass?label=PyPI&color=blue)](https://pypi.org/project/nautilus-compass/)\n[![MCP](https://img.shields.io/badge/MCP-17%20tools%20%C2%B7%20TLS%20%C2%B7%20RBAC-blue)](docs/mcp-usage.md)\n[![A2A](https://img.shields.io/badge/A2A-mTLS%20%C2%B7%20scoped%20peers-blue)](examples/a2a_tls_demo.py)\n[![license](https://img.shields.io/badge/license-Modified%20MIT-blue)](LICENSE)\n\n---\n\n## What this is (2026-08 state)\n\nThree pillars, one plugin:\n\n**1 · Black-box long-term memory — now with SOTA retrieval.**\nRaw text embedded locally with BGE-m3. No extraction LLM at ingest, no graph,\nno data leaving your machine. In Aug 2026 we added **utterance-routed chunk\nretrieval**: single-session and knowledge-update questions route to\nturn-window chunks (the answer usually lives in ONE user turn; whole-session\nembedding dilutes it), everything else uses session-level hybrid\n(BM25 + dense RRF). Result on LongMemEval-S full 500 questions,\nsame-question head-to-head vs mem0 2.0.19 (both sides `infer=False`,\neach on its own default embedder — bge-m3 vs vertexai text-embedding-005 —\nour reproduction):\n\n| LongMemEval-S · n=500 | P@1 | P@5 | MRR |\n|---|---|---|---|\n| **compass** | **0.890** | **0.978** | **0.929** |\n| mem0 2.0.19 | 0.774 | 0.916 | 0.834 |\n\nOne-command reproduction (retrieval-only, no LLM calls, CPU works / GPU\nrecommended for the full 500):\n\n```bash\nbash scripts/reproduce_lmes_retrieval.sh            # full 500\nSUBSET=12 bash scripts/reproduce_lmes_retrieval.sh  # smoke\n```\n\nThe same utterance ammo overtakes mem0 **on its own home benchmark**\n(LOCOMO-10, n=1986: 0.644 / 0.890 vs 0.592 / 0.802) and fixes the\nsingle-session collapse on LongMemEval-M (0.20 → 1.00). Full evidence chain\nwith per-type breakdowns and every config flag:\n[`docs/evidence/headhead_mem0_full500_20260826.json`](docs/evidence/headhead_mem0_full500_20260826.json)\n— including the experiments that failed (cross-encoder reranking *hurts* on\nthis corpus; candidate-pool K is a no-op; Qwen3-0.6B swap is a wash).\n\n**2 · Drift detection — the half nobody else solves.**\nMemory recalled doesn't stop the AI from breaking the rule *this time*.\ncompass scores every prompt against an anchor set of real failure patterns\n(25 positive + 35 negative) before the agent acts. AUC 0.83 held-out,\np95 latency <50 ms, fire rate 0.5% in production traffic. White-box layers\nabstract prompts into facts before drift becomes checkable — structurally\nout of their reach.\n\n**3 · Cross-agent contracts + governance.**\nWhen you run multiple agents (or multiple Claude dialogs) on shared files,\ncompass derives implicit contracts from handoff files, tracks closure, and\naudits for fake-closure / red drift. A 4-dialog 28-hour field study lives in\n[`docs/case_study_4dialog_compass.md`](docs/case_study_4dialog_compass.md).\n\n**The trade that flipped**: earlier versions traded −30 points on\nLongMemEval-S for local deployment and cost. As of 2026-08 there is no trade\n— full sweep at 1/14 the reproduction cost (~$3.50 per 500 questions vs\n$50+ for GPT-4o-judged stacks). Full argument:\n[paper/BLACKBOX_VS_WHITEBOX.md](paper/BLACKBOX_VS_WHITEBOX.md).\n\n---\n\n## Quickstart\n\n### Python package (PyPI · 3.1.1)\n\n```bash\npip install nautilus-compass\n# ships the CLI, the MCP server, the A2A adapter and session tools:\n#   nautilus-compass · compass-mcp · compass-a2a\n#   compass-drift-history · compass-session-search · compass-session-writer\n```\n\n### 30 seconds (Claude Code / Desktop · local daemon)\n\n```bash\ngit clone https://github.com/chunxiaoxx/nautilus-compass ~/.claude/plugins/nautilus-compass\nbash ~/.claude/plugins/nautilus-compass/install.sh\n\n# start the BGE-m3 daemon (one-time per boot)\nbash ~/.claude/plugins/nautilus-compass/daemon_start.sh\n```\n\n> **Deploy notes (field-verified pitfalls, 2026-08-28):**\n> - `COMPASS_USE_INOTIFY=0` disables new-file discovery — recalls won't see\n>   fresh writes, **silently**. Only set it if you know why; the daemon logs a\n>   WARNING when it's off.\n> - `drift` fails loudly now: if `anchors.json` is missing from the plugin dir,\n>   responses carry `drift.anchors_error` + `should_alert: true` (it used to\n>   silently return \"no risk\" — that was a security hole).\n> - Token changes to `tokens.json` hot-reload via mtime check (no systemd\n>   restart needed since v3.1.0).\n> - First recall after daemon idle may take up to 90 s (model cold-load); the\n>   MCP client auto-retries once with the extended timeout.\n\nThe installer wires three hooks into `~/.claude/settings.json`:\n- `UserPromptSubmit` → time-bucketed memory recall + drift check\n- `PostToolUse` → mid-session writer\n- `Stop` → end-of-session summary (writes a session battle-report to\n  `~/.claude/.cache/compass-last-session.txt`)\n\nSlash commands: `/compass-verify` · `/compass-drift` · `/compass-recall` ·\n`/compass-search` · `/compass-status`.\n\n### Any other MCP client\n\n```bash\npython ~/.claude/plugins/nautilus-compass/scripts/install_to_agent.py\n```\n\nAuto-detects Claude Desktop, Cursor, Cline, Continue.dev, Zed and patches\ntheir MCP config. Per-agent copy-paste configs:\n[`docs/AGENT_ONBOARDING.md`](docs/AGENT_ONBOARDING.md) · raw protocol:\n[`docs/mcp-usage.md`](docs/mcp-usage.md).\n\n### Cloud-hosted (open beta · self-serve)\n\nThe hosted gateway — MCP over HTTPS with scoped tokens and per-user memory\nisolation — is open for self-serve registration: sign up at\n[`https://compass.nautilus.social/signup`](https://compass.nautilus.social/signup),\nthen create a token in the web console (or `POST /tokens`). Scopes are\nserver-bound to your own space (read+write); cross-user access is denied and\nverified by automated probes. Design:\n[`docs/plans/2026-08-30-multi-tenant-memory-design.md`](docs/plans/2026-08-30-multi-tenant-memory-design.md).\n\nMCP endpoint: `https://compass.nautilus.social/mcp/` (Bearer token ·\nstreamable-http). A2A discovery:\n`curl https://compass.nautilus.social/.well-known/agent.json`\n\n### Nautilus platform agents (cloud ssh quickstart)\n\nFor agents on machines with ssh access to your Nautilus cloud box —\ngenerates a scoped token, wires the cloud MCP bridge, writes `.mcp.json`,\nand runs an end-to-end self-check. Add `--hud` to install the fused status\nline (live recall hit-counter 🧠, drift state, 5-min traffic).\n\n```bash\nbash ~/.claude/plugins/nautilus-compass/ops/agent_quickstart.sh my-agent\n```\n\n---\n\n## Headline numbers\n\n| Benchmark | Score | Honest compare |\n|---|---|---|\n| **LongMemEval-S 500q full** (utt-routed + hybrid, n=500) | **P@1 0.890 · P@5 0.978 · MRR 0.929** | sweeps mem0 2.0.19 (0.774/0.916/0.834, our reproduction, each side on its own default embedder): +11.6/+6.2/+9.5pt. Largest flip: single-session-user P@1 0.90 vs 0.49 |\n| **LOCOMO-10** (n=1986 · mem0's home benchmark) | **P@1 0.644 · P@5 0.890 · MRR 0.740** | overtakes mem0 (0.592/0.802/0.677, our reproduction) +5.2/+8.8pt |\n| **LongMemEval-M 500q full** (~501 sessions/question) | **P@5 0.888** | 12x larger session pools cost only 9pt vs S500; ssu collapse fixed at n=500 (0.20 → 0.93); ssp 0.53 newly exposed; no mem0 M head-to-head yet |\n| **EverMemBench-Dynamic** (n=500) | **44.4% (Run 1) / 47.3% (Run 2)** | tops the four published Table 4 baselines (Mem0 37.09, Zep 39.97, MemOS 42.55, MemoBase 34.27). Not claiming \"industry SOTA\" — OMEGA / Mem0g haven't reported publicly |\n| **LongMemEval-S e2e 500q full + summary layer** (doubao subject × glm judge, 2026-09-03) | **75.4%** (377/500; 81.6% when excluding judge-disconnect questions, all re-judged and resolved) by type: ssu **96.9%** · ssa **85.4%** · tr **83.3%** · ms **73.2%** · ku 79.5% · ssp 75.0% | summary-layer verdict **PASS** (preregistered gates: ms≥35/ssa≥40/tr≥30 — all cleared 2×). Cross-session types jumped +45~60pt (ms 22.6→73.2, ssa 25.0→85.4, tr 15.8→83.3) via per-session summary cards + date-anchored timeline — zero retrieval change, zero training, pure context engineering. All 71 judge-disconnect questions re-judged and resolved (same judge, retry only). Full verdict: [`vtf/_e2e_diag/arm_a_final_verdict.md`](vtf/_e2e_diag/arm_a_final_verdict.md); baseline JSON: [`docs/evidence/e2e_500_full_20260829.json`](docs/evidence/e2e_500_full_20260829.json) |\n| **LongMemEval-V2** (official benchmark by [xiaowu0162](https://github.com/xiaowu0162/LongMemEval-V2), 451q agent-trajectory memory · our tuned run, rejudged clean 2026-09-02) | **web 40.0% / enterprise 38.4%** (first untuned run 2026-08-30: 19.6% / 12.8%; paper reports frontier LLMs ≤14.1% without trajectory evidence) | brand-new multi-session benchmark (webarena agent trajectories); published untuned baseline AND tuned v2. Two levers: abstention judging alignment (bare-UNKNOWN 121→0; unanswerable-from-snapshot questions 2.8% → 45.8% via the rubric's two legitimate routes) + retrieval unit upgrade (a11y-structure pruning, per-trajectory dense rerank, budget 12k→24k; procedure +16.6pt). **Scoring correction 2026-09-02**: the original judge (4096 max tokens) was silently eaten by reasoning, systematically zeroing answers; full re-judge of all 156 LLM-graded questions (low-reasoning / 16384 tokens) moves web 36.7→40.0, ent 40.3→38.4 — these clean numbers are the current headline. Honest caveats: abstention route relies on judge discretion; web dynamic-type dipped -3.9pt. Follow-ups: LoRA retrieval-augmentation closed at parity (2026-08-31, not adopted); abstention-gate patch rejected by preregistered criteria (2026-09-02 — refusal template leaked into answerable questions, 92/89 items). Evidence: [`vtf/_compass_lmev2_out/`](vtf/_compass_lmev2_out/) |\n| **Drift detector AUC** | **0.83 held-out / 0.92 in-set** | only public memory layer doing drift detection at all |\n| **Reproduction cost** | **~$3.50** / 500 questions | ~14× cheaper than GPT-4o-judged stacks |\n| **p95 hook latency** | **<50 ms** | safe for every-prompt invocation |\n\nWe deliberately report Run 1 (44.4%) as the EverMemBench headline to avoid\ncherry-picking; cross-run mean 45.84% clears MemOS by +3.3pt. Dual-run +\nGemini cross-judge sensitivity analysis:\n[`paper/sections/paper2_06_5_evermembench.tex`](paper/sections/paper2_06_5_evermembench.tex).\n\n**Try it without installing**: live drift-detection + Merkle-integrity demo\nat [huggingface.co/spaces/chunxiaox/nautilus-compass](https://huggingface.co/spaces/chunxiaox/nautilus-compass)\n(CPU only · metadata-mode jaccard fallback · no signup).\n\n**Reproduce the numbers** — eval dataset (behavioral anchors + labeled\ntraces + LongMemEval-S / EverMemBench scoring) on the Hub:\n[huggingface.co/datasets/chunxiaox/nautilus-compass-test-data](https://huggingface.co/datasets/chunxiaox/nautilus-compass-test-data)\n\n```python\nfrom datasets import load_dataset\nds = load_dataset(\"chunxiaox/nautilus-compass-test-data\")\n```\n\nBenchmark entrypoint: `bash ops/bench_all.sh l0` (fast layer, no GPU) ·\n`bash ops/bench_all.sh l1 30` (LongMemEval subset). Retrieval levers are\nenv-switched in `tests/eval_longmemeval_accuracy.py`\n(`ZMM_UTTERANCE_RETRIEVE` / `ZMM_UTTERANCE_TYPES` / `ZMM_HYBRID` /\n`ZMM_RETRIEVE_K` / `ZMM_DATE_ANCHOR` / `ZMM_EMBED_CACHE`).\n\n---\n\n## Glossary\n\nTerms this project coined and uses precisely. Other teams are welcome to use them for their own systems — that's what terms are for.\n\n**Judge hygiene** — the discipline of keeping an LLM judge trustworthy: preregistered criteria, function-level smoke tests, silent-failure detection, dual accounting, confidence intervals. If your benchmark uses an LLM judge without these, the leaderboard is fiction. See [the judging protocol](docs/nautilusmem/PROTOCOL.md) · [paper2](docs/papers/paper2_judge_hygiene.pdf).\n\n**Write-time wager** — compressing or summarizing memory at write time is a bet on the future query distribution, which is structurally unknowable. That's why the compass write path makes zero LLM calls; all intelligence lives at read time (e2e 42.6% → 75.4% on identical memories and questions).\n\n**Dual accounting** — every headline score is reported twice: full set, and judge-outage-excluded set (75.4% / 81.6%). A single number hides judge failures; two numbers disclose them.\n\n---\n\n## How it works\n\n```\n            User prompt: \"Fix bug X for me\"\n                         │\n                         ▼\n       ┌─────────────────────────────────────┐\n       │  UserPromptSubmit Hook (this plugin)│\n       └─────────────────────────────────────┘\n                         │\n            ┌────────────┼────────────┐\n            ▼            ▼            ▼\n       ┌────────┐  ┌─────────┐  ┌──────────┐\n       │ recall │  │  drift  │  │ profile  │\n       │ memory │  │  check  │  │ aggregate│\n       └────────┘  └─────────┘  └──────────┘\n                         │\n                         ▼\n       Hooks inject results into Claude's system prompt:\n       - Time-bucketed past memory (BGE-m3 semantic + keyword hybrid)\n       - Drift score + nearest negative anchor (if score < threshold)\n       - Profile facts (\"you have 3 unfinished tasks in this repo\")\n                         │\n                         ▼\n            Claude answers — with full context loaded\n```\n\nDrift detector: each prompt vs anchor set (real failure transcripts),\nBGE-m3 cosine. AUC 0.83 held-out.\n\n---\n\n## What's exposed (MCP tools)\n\n**17 tools** — core seven:\n\n| Tool | Purpose | Latency (local daemon) |\n|---|---|---|\n| `ingest_obs(name, body, agent_id?)` | Write observation with auto-anchor + drift signal | ~150 ms |\n| `recall(query, project?, top_k?)` | BGE-m3 semantic + keyword hybrid search | ~200 ms |\n| `session_search(query, since?)` | Time-bucketed session-log search | ~80 ms |\n| `profile(user_id?)` | Work-profile aggregate (topics, agents, drift trend) | ~100 ms |\n| `drift_check(prompt, project?)` | Black-box drift score against anchors | <50 ms |\n| `drift_history(since?, agent_id?)` | Drift score timeline for trend audit | ~30 ms |\n| `feedback_log(direction, reason)` | Log positive/negative anchor signal | <20 ms |\n\n> Latencies are local-daemon figures. Over the public HTTPS MCP endpoint\n> (`https://compass.nautilus.social/mcp/`) add TLS + WAN round-trip:\n> measured p50 ≈ 0.9–1.7 s per call (2026-08-28 field test).\n\nPlus: `thread_recall` · `proof_of_impact` · `long_task` · platform bridge\n(`submit_platform_task` / `ingest_platform_task_result`) · governance\n(`governance_dispatch` / `governance_audit` / `governance_lock_check` ·\n`governance_plan`) · `add_worker`. JSON-RPC 2.0 over stdio / TCP / TLS / mTLS;\n`notifications/*`, `logging/setLevel`, `resources/*` spec-complete.\nFull guide: [`docs/mcp-usage.md`](docs/mcp-usage.md).\n\n### Token scopes (v2.3.1)\n\nTokens are scoped, not global. `ops/compass_token_admin.py grant <agent>\n--scopes read:<project>,write:<project>` issues a least-privilege token;\n`read:*` (all-project recall, incl. `scope=user`) requires an explicit\n`--yes-i-want-star`. The HTTP server enforces scopes per call (fail-closed);\nlegacy list-format tokens map to full access for backward compatibility.\nThe quickstart script signs **read-only, current-project** tokens by default.\n\n---\n\n## Comparison\n\n| Capability | this | mem0 | Letta | Zep | claude-mem | MemOS | Smriti |\n|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|\n| Cross-agent memory | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | archive-only |\n| MCP A2A protocol native | ✅ TLS+mTLS+RBAC | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| Drift detection | ✅ AUC 0.83 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| Merkle integrity audit log | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |\n| LongMemEval-S retrieval (500q head-to-head) | ✅ **0.890 / 0.978 / 0.929** | 0.774 / 0.916 / 0.834 (our reproduction) | n/r | n/r | n/r | ❌ | ❌ |\n| LOCOMO-10 retrieval (n=1986) | ✅ **0.644 / 0.890 / 0.740** | 0.592 / 0.802 / 0.677 (our reproduction) | n/r | n/r | n/r | n/r | n/r |\n| EverMemBench verified | ✅ 44.4-47.3% | 37.09 | n/r | 39.97 | n/r | 42.55 | ❌ |\n| LongMemEval-S e2e (their own harness) | **500q full 75.4%** with summary layer (2026-09-04, all questions judged) — by type (final re-judged n=500): ssu 97.1 / ssa 83.9 / tr 62.4 / ms 69.2 / ku 80.8 / ssp 80.0; clean accounting excl. 71 outage: 96.9/85.4/83.3/73.2/79.5/75.0. Preregistered verdict PASS ([link](vtf/_e2e_diag/arm_a_final_verdict.md)) | 94.4% (self-reported) | n/r | n/r | n/r | n/r | n/r |\n\n*2026 newcomers not yet same-machine reproduced by us: Hindsight, Supermemory (self-reports LongMemEval SOTA), Cognee, LangMem, Membase — rows pending; their published numbers use their own harnesses and are not directly comparable to our head-to-head protocol.*\n| Self-host + hosted both | ✅ | ☁ only | ✅ | ☁ only | ✅ | OSS only | OSS only |\n| License | Mod. MIT | Apache | Apache | proprietary | MIT | Apache | MIT |\n\n`n/r` = not reported in their published evaluations. Smriti is a team\nconversation archive — different scope, listed for completeness.\n\n---\n\n## Case study · 4-dialog OSS multi-agent reliability\n\n28 hours, four Claude Code dialogs on shared filesystem protocols:\ndrift fired 314×/7d (act-on rate instrumented), contract\n`cnt_compass_soul_sub_a1` closed in 17.92h vs 6d21h budget, 13 plan-dup\naudits saved ~40-50h, first cross-dialog L4 fire settled 50 NAU. Field log\n+ 7 generalizable patterns:\n[`docs/case_study_4dialog_compass.md`](docs/case_study_4dialog_compass.md).\n\n---\n\n## Advanced (opt-in surface)\n\n<details>\n<summary><b>Drift loop closure · act-on rate</b></summary>\n\nEvery fired alert gets a stable `alert_id` in\n`.cache/drift_mitigation_log.jsonl`. Acknowledge via\n`feedback.py log <alert_id> fp|tp`; `audit_kpi.py` reports\n`act_on_rate(window_hours)` (target ≥0.70; <0.30 = cry-wolf → raise\nthreshold or retrain anchors).\n\n```python\nfrom audit_kpi import act_on_rate\nm = act_on_rate(window_hours=168)\nassert m[\"rate\"] >= 0.70\n```\n</details>\n\n<details>\n<summary><b>v3 opt-in LLM switches (all default-off, byte-equal promise)</b></summary>\n\nWith no opt-in env set, daemon behavior is byte-equal to v2.0.1 — gated by\n`tests/test_llm_opt_in.py` on every PR.\n\n| env var | tier | feature |\n|---|---|---|\n| `COMPASS_USE_LLM_RESOLVE` | 1 (session-end) | LLM contradiction resolution |\n| `COMPASS_USE_LLM_VERIFY` | 4 (runtime) | anti-confabulation cite-or-refuse |\n| `COMPASS_USE_LLM_DRIFT_PAY` | 4 (runtime) | drift × outcome anchor feedback |\n| `COMPASS_USE_LLM_REFLECT` | 3 (periodic) | self-reflection semantic emit |\n| `COMPASS_USE_LLM_ECON` | 4 (runtime) | memory-as-economy NAU budget |\n\nDeterministic v3 surface (always on): typed knowledge graph layer (NO-OP\nuntil built), confidence scoring + contradiction hook, `MEMORY_REPORT.md`\nauto-gen, `implementation_notes` frontmatter. Registry: [`llm_opt_in.py`](llm_opt_in.py).\n</details>\n\n<details>\n<summary><b>Platform integration · BP1/BP3 + V7 governance</b></summary>\n\nOSS↔platform bridge without a new HTTP server:\n`submit_platform_task` (compass → platform queue, file-based or HTTP when\n`COMPASS_PLATFORM_QUEUE_URL` is set) · `ingest_platform_task_result`\n(platform → compass, searchable via `recall`). Round-trip demo:\n`python examples/platform_flywheel_demo.py`.\n\nV7 governance (multi-executor deployments): `governance_dispatch`\n(decompose 1 task → N routed sub-tasks) · `governance_audit` (fake-closure /\nred-drift scan) · `governance_lock_check` (SHA256 lock on the L0 core).\nDemo: `python examples/v7_governance_demo.py`. Contract details:\n[`docs/PLATFORM_HANDSHAKE.md`](docs/PLATFORM_HANDSHAKE.md).\n</details>\n\n<details>\n<summary><b>Release history · v3.0.0 / v2.1.0 / v2.0.0</b></summary>\n\n**v3.0.0 · \"from memory library to evolution engine\"** — same system closing\nthe loop: memories feed a **extract fuel → external verdict → distill**\ncycle. Semantic-recall revival (Windows torch long-path fix), GOAL-SSOT\nledger + hourly heartbeat, cloud capacity root-cause fixes (load 10-14 →\n1.x), daemon atomic pkl + per-project locks, paired-control evidence\n(tribal-fact retrieval 0/3 → 3/3), fused HUD, 30-second quickstart.\n\n**v2.1.0 · drift v2 + line reconciliation** — cry-wolf fix (fire rate\n64.5% → 0.5% via rule-hit OR drift_score < −0.07), cross-agent contract\nscanner (L4 substrate), L3 tier promotion + PoI, daemon hardening\n(bounded pools, in-flight semaphore, BM25+vector RRF opt-in).\n\n**v2.0.0 · Opinionated EvoMap** — deterministic lifecycle layer on the\nblack-box base. No LLM at ingest / tier promotion / forgetting; no vendoring\nof GBrain/OpenViking; no graph rerank for closed haystacks (cost −6.2pt in\nv0.8 — [`paper/RESULTS_v0.8.md`](paper/RESULTS_v0.8.md)).\n\nFull notes: [`CHANGELOG.md`](CHANGELOG.md) · release:\n[`v3.0.0`](https://github.com/chunxiaoxx/nautilus-compass/releases/tag/v3.0.0)\n</details>\n\n---\n\n## Documentation\n\n- [`docs/AGENT_ONBOARDING.md`](docs/AGENT_ONBOARDING.md) — per-agent install configs (6 platforms + 3 frameworks)\n- [`docs/mcp-usage.md`](docs/mcp-usage.md) — raw MCP protocol guide, TLS setup, RBAC\n- [`docs/PLATFORM_HANDSHAKE.md`](docs/PLATFORM_HANDSHAKE.md) — OSS↔SaaS coordination contract\n- [`docs/evidence/`](docs/evidence/) — raw benchmark evidence files (JSON, per-question rows)\n- [`paper/`](paper/) — two papers (drift detection + memory pipeline) and eval scripts\n- [`ops/GPU_EVAL_RECIPE_4090.md`](ops/GPU_EVAL_RECIPE_4090.md) — 12-minute rented-GPU benchmark recipe\n- [`CHANGELOG.md`](CHANGELOG.md) · [`CONTRIBUTING.md`](CONTRIBUTING.md)\n\n---\n\n## Citation\n\n**Paper 1 · drift detection**:\n\n```bibtex\n@misc{nautiluscompass-drift-2026,\n  title  = {Nautilus Compass: Black-box Persona Drift Detection\n            for Production LLM Agents},\n  author = {Chunxiao Wang},\n  year   = {2026},\n  note   = {Yiluo Technology Co., Ltd.},\n  howpublished = {\\url{https://github.com/chunxiaoxx/nautilus-compass}}\n}\n```\n\n**Paper 2 · memory pipeline + EverMemBench cross-bench**:\n\n```bibtex\n@misc{nautiluscompass-memrecall-2026,\n  title  = {Closing the Memory Recall Gap with Chinese LLMs:\n            A Multi-Stage Retrieval Pipeline Achieving Zep-SOTA Performance\n            on LongMemEval-S at 1/15 Cost},\n  author = {Chunxiao Wang},\n  year   = {2026},\n  note   = {Yiluo Technology Co., Ltd.},\n  howpublished = {\\url{https://github.com/chunxiaoxx/nautilus-compass}}\n}\n```\n\nPrior work we build on (cite as appropriate): BGE-m3 / BGE-Reranker\n(BAAI 2024) · Persona Vectors (Anthropic, [arXiv:2507.21509](https://arxiv.org/abs/2507.21509),\ncomplementary white-box) · DPT-Agent ([arXiv:2502.11882](https://arxiv.org/abs/2502.11882)) ·\nA-MEM ([arXiv:2502.12110](https://arxiv.org/abs/2502.12110)) ·\nLongMemEval (Wu et al., NeurIPS 2024) · EverMemBench (Hu et al., 2026).\n\n---\n\n## License\n\n- **Code, plugin, MCP wrapper, papers, scripts** — Modified MIT License (MIT + trademark clause + hosted-service cap; self-hosting / internal deployment / personal use stay free forever — [`LICENSE`](LICENSE))\n- **Behavioral anchor files** (`anchors*.json`) — CC0 1.0 Universal ([`LICENSE-ANCHORS`](LICENSE-ANCHORS))\n- Historical releases before this license's introduction were pure MIT.\n\n---\n\n## Star history\n\n[![Star History Chart](https://api.star-history.com/svg?repos=chunxiaoxx/nautilus-compass&type=Date)](https://star-history.com/#chunxiaoxx/nautilus-compass&Date)\n\n## Contributors\n\n<a href=\"https://github.com/chunxiaoxx/nautilus-compass/graphs/contributors\">\n  <img src=\"https://contrib.rocks/image?repo=chunxiaoxx/nautilus-compass\" alt=\"Contributors\" />\n</a>\n\nPRs welcome — see [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## Contact\n\n- **Author**: Chunxiao Wang · Yiluo Technology Co., Ltd. · `chunxiaoxx@gmail.com`\n- **Issues**: [github.com/chunxiaoxx/nautilus-compass/issues](https://github.com/chunxiaoxx/nautilus-compass/issues)\n- **Hosted gateway**: [compass.nautilus.social](https://compass.nautilus.social)\n- **中文文档**: [README.zh-CN.md](README.zh-CN.md)\n",
  "bytes": 24968,
  "sha": "25969dce245a751a179638b9e48ae9a27347f04c30e497e2ffaae272de4c8dff",
  "repo_slug": "chunxiaoxx/nautilus-compass",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_chunxiaoxx_nautilus_compass_2bf516fe/readme"
}