{"id":"8717895c-eb7a-4d66-93e7-a07a4e5e0353","entityType":"agent","slug":"clawhub-victorqr-anamnesis-hub","name":"Anamnesis Hub","canonicalUrl":"https://www.xpersona.co/agent/clawhub-victorqr-anamnesis-hub","canonicalPath":"/agent/clawhub-victorqr-anamnesis-hub","generatedAt":"2026-10-13T06:59:19.969Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T23:23:31.661Z","emptyReason":null},"description":"四层记忆架构 (Four-tier memory architecture for OpenClaw AI agents). 提供 L0 运行时语义检索 (Ollama bge-m3 + SQLite-vec 向量库)、L1 工作记忆 (每日 Markdown 日志)、L2 长期记忆 (MEMORY.md 索引... Skill: Anamnesis Hub Owner: victorqr Summary: 四层记忆架构 (Four-tier memory architecture for OpenClaw AI agents). 提供 L0 运行时语义检索 (Ollama bge-m3 + SQLite-vec 向量库)、L1 工作记忆 (每日 Markdown 日志)、L2 长期记忆 (MEMORY.md 索引... Tags: latest:v1.13.2 Version history: v1.13.2 | 2026-05-18T06:53:44.888Z | user Release 1.13.2 vv1.13.2 | 2026-05-18T03:37:59.901Z | user v1.13.2: fix P0/P1 bugs v1.13.1 | 2026-05-16T17:42:53.096Z | user v1.13.1: 更","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 977 downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s175qsdgwdkzn5wes1h4qnq9fx84sfq1:anamnesis-hub","sourceUrl":"https://clawhub.ai/victorqr/anamnesis-hub","homepage":"https://clawhub.ai/victorqr/skills/anamnesis-hub","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/victorqr/anamnesis-hub","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/victorqr/skills/anamnesis-hub","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"四层记忆架构 (Four-tier memory architecture for OpenClaw AI agents). 提供 L0 运行时语义检索 (Ollama bge-m3 + SQLite-vec 向量库)、L1 工作记忆 (每日 Markdown 日志)、L2 长期记忆 (MEMORY.md 索引... "},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T23:23:31.661Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T23:23:31.661Z","emptyReason":null},"stars":null,"forks":null,"downloads":977,"likes":null,"task":null,"library":null,"packageName":null,"latestVersion":"1.13.2","tractionLabel":"977 downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T23:23:31.591Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T23:23:31.661Z","lastCrawledAt":"2026-10-11T23:23:31.591Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T23:23:31.591Z","lastVerifiedAt":null,"highlights":[{"version":"1.13.2","createdAt":"2026-05-18T06:53:44.888Z","changelog":"Release 1.13.2","fileCount":21,"zipByteSize":77783},{"version":"v1.13.2","createdAt":"2026-05-18T03:37:59.901Z","changelog":"v1.13.2: fix P0/P1 bugs","fileCount":22,"zipByteSize":78995},{"version":"1.13.1","createdAt":"2026-05-16T17:42:53.096Z","changelog":"v1.13.1: 更新 Session Analysis Daily 命名 + 文档版本号统一更新","fileCount":21,"zipByteSize":76697},{"version":"1.13.0","createdAt":"2026-05-16T17:24:49.092Z","changelog":"v1.13.0","fileCount":21,"zipByteSize":76059},{"version":"1.12.1","createdAt":"2026-05-16T06:06:03.416Z","changelog":"fix: flatten skill package structure","fileCount":16,"zipByteSize":60067},{"version":"1.12.0","createdAt":"2026-05-16T06:01:22.085Z","changelog":"rename: victor-memory-hub → anamnesis-hub","fileCount":16,"zipByteSize":60066}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s175qsdgwdkzn5wes1h4qnq9fx84sfq1:anamnesis-hub","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-victorqr-anamnesis-hub/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-victorqr-anamnesis-hub/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-victorqr-anamnesis-hub/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-victorqr-anamnesis-hub/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-victorqr-anamnesis-hub/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-victorqr-anamnesis-hub/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-13T06:59:19.967Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-victorqr-anamnesis-hub/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-victorqr-anamnesis-hub/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-victorqr-anamnesis-hub/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-victorqr-anamnesis-hub/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T23:23:31.661Z","emptyReason":null},"readme":"Skill: Anamnesis Hub\n\nOwner: victorqr\n\nSummary: 四层记忆架构 (Four-tier memory architecture for OpenClaw AI agents). 提供 L0 运行时语义检索 (Ollama bge-m3 + SQLite-vec 向量库)、L1 工作记忆 (每日 Markdown 日志)、L2 长期记忆 (MEMORY.md 索引...\n\nTags: latest:v1.13.2\n\nVersion history:\n\nv1.13.2 | 2026-05-18T06:53:44.888Z | user\n\nRelease 1.13.2\n\nvv1.13.2 | 2026-05-18T03:37:59.901Z | user\n\nv1.13.2: fix P0/P1 bugs\n\nv1.13.1 | 2026-05-16T17:42:53.096Z | user\n\nv1.13.1: 更新 Session Analysis Daily 命名 + 文档版本号统一更新\n\nv1.13.0 | 2026-05-16T17:24:49.092Z | user\n\nv1.13.0\n\nv1.12.1 | 2026-05-16T06:06:03.416Z | user\n\nfix: flatten skill package structure\n\nv1.12.0 | 2026-05-16T06:01:22.085Z | user\n\nrename: victor-memory-hub → anamnesis-hub\n\nArchive index:\n\nArchive v1.13.2: 21 files, 77783 bytes\n\nFiles: README.md (7033b), references/architecture.md (18643b), references/candidates-review.md (4156b), references/INDEX.md (2465b), references/memory-directory.md (8422b), references/pipeline-stages.md (11055b), references/scripts-reference.md (12796b), references/setup-guide.md (7382b), references/sync-api.md (2292b), references/upgrade-reset.md (5761b), scripts/auto_memory_extract.py (18373b), scripts/auto-setup.sh (12699b), scripts/candidates_review.py (6702b), scripts/check_current_session.py (1888b), scripts/daily-memory-pipeline.sh (7255b), scripts/facts_activation.py (7982b), scripts/seed-facts-db.py (8456b), scripts/session-extract.py (33227b), scripts/write_file.py (23228b), SKILL.md (8367b), _meta.json (133b)\n\nFile v1.13.2:SKILL.md\n\n---\nname: anamnesis-hub\ndescription: \"四层记忆架构 (Four-tier memory architecture for OpenClaw AI agents). 提供 L0 运行时语义检索 (Ollama bge-m3 + SQLite-vec 向量库)、L1 工作记忆 (每日 Markdown 日志)、L2 长期记忆 (MEMORY.md 索引 + ARCHIVE.md 档案 + facts.db 结构化知识图谱)、Dreaming 自动化提炼管线、三方同步 (Cloud ↔ Markdown ↔ Vector)、Active Memory 主动召回、auto-memory v3 两阶段提取 (ARCHIVE.md 归档 → MEMORY.md 摘要)、cross-platform-writer 跨平台写入。适用于首次配置持久化记忆、安装 memory-core/MemOS Cloud 插件、搭建多层记忆系统。\"\nversion: 1.13.2\n---\n\n# anamnesis-hub\n\nFour-tier memory architecture with automated Dreaming pipeline, three-way synchronization, Active Memory recall, and two-stage auto-extraction.\n\n## Overview\n\n| Tier | Layer | Technology | Purpose |\n|------|-------|-----------|---------|\n| **L0** | Runtime Retrieval | memory-core plugin (Ollama bge-m3 → SQLite + sqlite-vec) | Real-time semantic + BM25 hybrid search |\n| **L0** | Cloud Recall | MemOS Cloud plugin (*optional*) | Cross-device memory capture and recall |\n| **L0** | Active Memory | Built-in OpenClaw plugin | Pre-reply sub-agent memory search + context injection |\n| **L1** | Working Memory | `memory/YYYY-MM-DD.md` files | Daily summaries, todos, technical notes |\n| **L2a** | Long-term Index | `MEMORY.md` (~90 lines, read-only base) | Bidirectional index → ARCHIVE.md, 0% Auto-Extracted pollution |\n| **L2b** | Detailed Archive | `ARCHIVE.md` (~220 lines) | Full records with ← MEMORY.md:XX reverse references |\n| **L2c** | Structured KB | `facts.sqlite` (entity/key/value) | Precise lookup for IPs, ports, versions; activation/decay tracking |\n\n### Automated Pipelines\n\n| Pipeline | Schedule | Description |\n|----------|----------|-------------|\n| **Dreaming** | 03:00 UTC daily | Scan logs → DeepSeek analysis → promote to L2 |\n| **Three-way Sync** | 18:00 / 20:00 / 22:00 CST | Cloud ↔ Markdown ↔ Vector alignment |\n| **auto-memory v3** | 18:30 / 22:30 CST | MemOS Cloud facts → qwen3 filter → Stage1: ARCHIVE.md (SHA-256 dedup) → Stage2: MEMORY.md (summary) |\n| **session-extract** | 22:00 CST | Scan session JSONL → MemOS extractor/reranker → `.learnings/` + `memory/YYYY-MM-DD.md` (two-pass) |\n\n### Memory Flow (Unified Daily Pipeline)\n\n```\nagent_end → MemOS Cloud (cloud extraction)\n              ↓\n    ┌─ 18:00 sync-pull (Cloud → local cache) ─┐\n    │  18:30 auto-memory.py                    │\n    │  → Stage 1: ARCHIVE.md (SHA-256 dedup)   │\n    │  → Stage 2: MEMORY.md (one-line summary) │\n    │                                           │\n    │  20:00 sync-push + reindex                │\n    │  22:00 session-extract.py                 │\n    │  → Pass 1: .learnings/ERRORS.md           │\n    │  → Pass 2: memory/YYYY-MM-DD.md           │\n    │  → archive analyzed → trash               │\n    └───────────────────────────────────────────┘\n\nbefore_agent_start → MemOS Cloud recall\n                  + Active Memory sub-agent\n                  + memory-core (bge-m3 + BM25)\n              ↓\n        Layered context injected before reply\n```\n\n## Scripts\n\n| Script | Purpose |\n|--------|--------|\n| `auto_memory_extract.py` | v3 two-stage pipeline: ARCHIVE.md archive → MEMORY.md summary |\n| `session-extract.py` | Scan session JSONL → .learnings/ + memory/ (two-pass) |\n| `seed-facts-db.py` | Initialize facts.sqlite from ARCHIVE.md |\n| `facts_activation.py` | Hebbian activation + daily decay + Hot/Warm/Cool |\n| `daily-memory-pipeline.sh` | 6-stage unified daily pipeline |\n| `write_file.py` | Cross-platform text writer (UTF-8/BOM/CRLF) |\n| `auto-setup.sh` | One-command Ollama + memory-core + MemOS Cloud setup |\n\n## Setup\n\n### One-command auto-setup\n\n```bash\nbash scripts/auto-setup.sh\n```\n\n### Options\n\n```bash\nbash scripts/auto-setup.sh --skip-ollama   # Skip Ollama install\nbash scripts/auto-setup.sh --skip-memos    # Skip MemOS Cloud\nbash scripts/auto-setup.sh --dry-run       # Preview only\n```\n\n### Manual setup\n\nSee `references/setup-guide.md` for step-by-step manual configuration.\n\n## When to Use\n\n- Setting up OpenClaw memory for the first time\n- Configuring memory-core plugin with local Ollama embedding\n- Installing MemOS Cloud plugin for cross-device sync\n- Enabling Active Memory for pre-reply context injection\n- Setting up auto-memory pipeline for MEMORY.md curation\n- Installing cross-platform-writer for cross-OS file compatibility\n- Configuring automatic Dreaming and promotion pipelines\n- Setting up three-way sync between cloud, files, and vector DB\n\n## Plugin Conflicts\n\n### ❌ subconscious-personality-guardian ↔ memory-core\n\n**Incompatible.** Both use the same OpenClaw memory slot.\n\n**Fix**: Disable in openclaw.json:\n```json\n{\n  \"plugins\": {\n    \"disabled\": [\"subconscious-personality-guardian\"],\n    \"deny\": [\"subconscious-personality-guardian\"]\n  }\n}\n```\n\n### ✅ memory-core + MemOS Cloud\n\n**Compatible — designed to work in layers.**\n\n```\nUser message → MemOS Cloud (static facts) → memory-core (recent context)\n```\n\n### ✅ Active Memory + MemOS Cloud + memory-core\n\n**Compatible — triple-layer recall.**\n\n```\nUser message\n  → Active Memory sub-agent (searches all memory stores)\n  → MemOS Cloud (injects long-term facts & preferences)\n  → memory-core (semantic + BM25 hybrid retrieval)\n  → Agent receives layered context\n```\n\n### ✅ auto-memory + MemOS Cloud + memos-extractor\n\n**Designed to work together.** MemOS captures at `agent_end`, syncs to local files, then auto-memory reads those files for MEMORY.md curation. v1.10 adds a second channel: memos-extractor-0.6b API (MemOS self-developed model) returns structured facts + preferences, cross-validated against qwen3 output.\n\n## Components\n\n### 1. Memory Plugins (L0)\n\nSee `references/architecture.md` for full configuration.\n\n### 2. Memory Files (L1 + L2)\n\n```\n~/.openclaw/workspace/\n├── memory/\n│   ├── YYYY-MM-DD.md          # Daily working memory (auto-indexed)\n│   ├── MEMORY_INDEX.md        # Vector BM25 cluster summaries\n│   └── .sync-*.json           # Sync state files\n├── MEMORY.md                  # Long-term memory index (~90 lines)\n├── ARCHIVE.md                 # Detailed archive (~220 lines, ← bidirectional refs)\n├── AGENTS.md                  # Runtime context + memory rules\n└── user_workspace/\n    ├── memos-cloud-cache/         # Cloud-pulled memory (isolated from index)\n    │   └── memos-cloud-*.md\n    ├── scripts/\n    │   └── sync-*.py              # Sync scripts (pull/push/vector)\n    └── skills/\n        └── anamnesis-hub/   # Installed from ClawHub\n            └── scripts/           # Pipeline scripts (auto-memory, session-extract, etc.)\n```\n\n### 3. Pipeline Scripts (in anamnesis-hub/scripts/)\n\n- `auto_memory_extract.py` — v3 two-stage pipeline (ARCHIVE.md → MEMORY.md)\n- `session-extract.py` — Session JSONL scan → .learnings/ + memory/\n- `seed-facts-db.py` — Initialize facts.sqlite from ARCHIVE.md\n- `facts_activation.py` — Hebbian activation + daily decay\n- `daily-memory-pipeline.sh` — 6-stage unified daily pipeline\n- `write_file.py` — Cross-platform text file writer\n- `auto-setup.sh` — One-command Ollama + memory-core + MemOS Cloud setup\n\nSee `references/INDEX.md` for full documentation index.\n\n## File Reference\n\n👉 **完整文档请查阅 `references/INDEX.md`**\n\n| 文档 | 说明 |\n|------|------|\n| `references/INDEX.md` | 📌 文档入口索引（快速定位） |\n| `references/architecture.md` | 四层架构设计、插件配置、协同流程 |\n| `references/setup-guide.md` | 环境配置、手动安装步骤、cron 设置 |\n| `references/memory-directory.md` | memory/ 目录结构、状态文件、LCM 机制 |\n| `references/sync-api.md` | MemOS Cloud API 参考 |\n| `references/scripts-reference.md` | 所有脚本统一说明（用途、cron、依赖） |\n| `references/pipeline-stages.md` | 日终管线 6 阶段详解 |\n| `references/candidates-review.md` | P3 记忆候选审核机制 |\n| `references/upgrade-reset.md` | 升级路径、重置流程、卸载步骤 |\n\nFile v1.13.2:README.md\n\n# 🧠 anamnesis-hub\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![ClawHub](https://img.shields.io/badge/ClawHub-anamnesis--hub-blue)](https://clawhub.ai/victorqr/anamnesis-hub)\n\n**Three-tier memory architecture for OpenClaw AI agents.**  \nPersistent, automated, cross-device memory that never forgets.\n\n---\n\n## 中文简介\n\n**anamnesis-hub** 是一套面向 OpenClaw AI Agent 的**四层记忆架构**，解决跨会话的\"AI 失忆\"问题，v1.13 起支持自动记忆审核（P3 候选机制）和 Dreaming 自动化提炼管线。\n\n| 层级 | 功能 | 技术栈 |\n|------|------|--------|\n| **L0** 运行时检索 | 语义 + BM25 混合搜索，实时注入上下文 | memory-core + Ollama bge-m3 + SQLite-vec |\n| **L0** 云召回 *可选* | 多设备记忆同步，跨实例共享 | MemOS Cloud 插件 |\n| **L0** 主动召回 | 回复前 sub-agent 搜索相关记忆 | Active Memory 插件（内置） |\n| **L1** 工作记忆 | 按日归档的 Markdown 日志，人工可编辑 | `memory/YYYY-MM-DD.md` |\n| **L2a** 索引层 | 双向索引 ←→ ARCHIVE.md，零污染 ~90行 | `MEMORY.md`（只读基底） |\n| **L2b** 档案层 | 详细记录含反向引用 ← MEMORY.md:XX | `ARCHIVE.md`（~220行，历史垃圾已清理） |\n| **L2c** 知识图谱 | 结构化 entity/key/value，精确查找 + 热度追踪 | `facts.sqlite` |\n\n**自动化管线（v1.13.2）**：Dreaming（每日 UTC 03:00）→ 三方同步（18:00/20:00/22:00）→ auto-memory v3（两阶段管道：ARCHIVE.md 归档 → MEMORY.md 摘要）→ session-extract（扫描会话JSONL → MemOS提取 → .learnings/ + memory/）。\n\n### v1.13.2 Bug Fix Release\n- ✅ 修复 `auto_memory_extract.py` 缺少 `import os` 导致运行时崩溃\n- ✅ 修复 `daily-memory-pipeline.sh` `set -e` 下 `result=$(...)` 提前终止脚本\n- ✅ 修复 `session-extract.py` pass=2 跳过历史文件的逻辑错误\n- ✅ 修复 `facts_activation.py` GC 只预览不删除的问题（新增 `--force` 参数）\n- ✅ 修复 `write_file.py` 非原子写入（新增 tempfile+rename 原子写入）\n- ✅ 修复 `candidates_review.py` 状态文件非原子写入和 `approve_all()` 循环数据不一致问题\n\n### 附赠技能\n- **cross-platform-writer** — 跨平台文本写入，自动处理编码/BOM/CRLF\n- **auto-memory** — 对话记忆自动提取 (v3: 两阶段管道 + SHA-256 去重)\n- **seed-facts-db** — 从 ARCHIVE.md 初始化结构化知识图谱\n\n一行命令部署：`bash scripts/auto-setup.sh`\n\n---\n\n## One-Command Setup\n\n```bash\n# Clone and run\ngit clone https://github.com/VictorQR/anamnesis-hub.git\ncd anamnesis-hub\nbash scripts/auto-setup.sh\n```\n\nThe interactive script handles everything:\n\n| Step | What it does | Toggle |\n|------|-------------|--------|\n| ✅ | Install **Ollama** (standard or Intel) | `--skip-ollama` |\n| ✅ | Download **bge-m3** embedding model | — |\n| ✅ | **Plugin conflict check** (auto-detect subconscious-personality-guardian) | — |\n| ✅ | Install **memory-core** plugin | — |\n| ✅ | Configure **openclaw.json** with optimized defaults | Auto-insert on confirm |\n| ✅ | Install **MemOS Cloud** (*optional*) with full recommended config | `--skip-memos` |\n| ✅ | Create `memory/` directory | — |\n| ✅ | Set up **Dreaming cron** (03:00 UTC) | — |\n\n```bash\n# Preview mode\nbash scripts/auto-setup.sh --dry-run\n\n# Skip Ollama (already installed)\nbash scripts/auto-setup.sh --skip-ollama\n\n# Skip MemOS Cloud\nbash scripts/auto-setup.sh --skip-memos\n```\n\n---\n\n## Architecture\n\n| Tier | Layer | Technology | Purpose |\n|------|-------|-----------|---------|\n| **L0** | Runtime Retrieval | memory-core + Ollama bge-m3 + SQLite-vec | Real-time semantic + BM25 hybrid search |\n| **L0** | Cloud Recall | MemOS Cloud plugin (*optional*) | Cross-device memory capture & recall |\n| **L1** | Working Memory | `memory/YYYY-MM-DD.md` | Daily summaries, notes, decisions |\n| **L2a** | Long-term Index | `MEMORY.md` (~90 lines, 0% pollution) | Bidirectional index → ARCHIVE.md |\n| **L2b** | Detailed Archive | `ARCHIVE.md` (~220 lines) | Full records with ← MEMORY.md:XX references |\n| **L2c** | Structured KB | `facts.sqlite` (entity/key/value) | Precise lookup + activation/decay |\n\n### Automated Pipelines\n\n| Pipeline | Schedule | Job |\n|----------|----------|-----|\n| **Dreaming** | 03:00 UTC daily | Scan logs → DeepSeek analysis → promote to L2 |\n| **Three-Way Sync** | 18:00 / 20:00 / 22:00 CST (*optional*) | Cloud ↔ Markdown ↔ Vector alignment |\n| **auto-memory v3** | 18:30 / 22:30 CST | Stage 1: ARCHIVE.md (SHA-256 dedup) → Stage 2: MEMORY.md (summary) |\n| **session-extract** | 22:00 CST | Scan session JSONL → MemOS extractor/reranker → `.learnings/` + `memory/` (two-pass) |\n| **Wiki Compilation** | 04:00 UTC daily (*optional*) | Entity extraction → wiki vault pages |\n\n---\n\n## Installation via ClawHub\n\n```bash\nopenclaw skills install victorqr/anamnesis-hub\n```\n\nThis loads the SKILL.md into your agent's context so it knows how to set up and maintain the memory system.\n\n---\n\n## Prerequisites\n\n- [OpenClaw](https://openclaw.ai) >= 3.x\n- Node.js >= 18\n- Internet connection (for Ollama download and bge-m3 model)\n\n---\n\n## Skill Structure\n\n```\nanamnesis-hub/\n├── SKILL.md                          # Main skill entry (loaded into agent context)\n├── anamnesis-hub.skill                # Packaged .skill distribution file\n├── scripts/\n│   └── auto-setup.sh                  # One-command interactive setup script\n├── references/\n│   ├── INDEX.md                      # 📌 文档入口索引\n│   ├── architecture.md                # 四层架构设计、插件配置、协同流程\n│   ├── setup-guide.md                 # 环境配置、手动安装步骤、cron 设置\n│   ├── memory-directory.md           # memory/ 目录结构、状态文件、LCM 机制\n│   ├── sync-api.md                   # MemOS Cloud API 参考\n│   ├── scripts-reference.md         # 所有脚本统一说明（用途、cron、依赖）\n│   ├── pipeline-stages.md            # 日终管线 6 阶段详解\n│   ├── candidates-review.md          # P3 记忆候选审核机制\n│   └── upgrade-reset.md              # 升级路径、重置流程、卸载步骤\n└── README.md                         # This file\n```\n\n👉 **完整文档请查阅 `references/INDEX.md`**\n\n---\n\n## How It Works\n\n1. **Every conversation** is automatically indexed into the vector database\n2. **Each session** retrieves relevant context via semantic + BM25 hybrid search\n3. **Daily** the Dreaming pipeline analyzes logs and promotes insights to long-term memory\n4. **Tri-hourly** (*optional*) the three-way sync keeps cloud, local files, and vector store aligned\n5. **The Agent** never starts from scratch — it remembers you across sessions\n\n---\n\n## License\n\nMIT — free to use, modify, and redistribute.\n\n---\n\n## Author\n\n**VictorQR** — Open source OpenClaw memory infrastructure\n\nFile v1.13.2:_meta.json\n\n{\n  \"ownerId\": \"kn79ykbnfmj09fxeevf1k0y88d82snbp\",\n  \"slug\": \"anamnesis-hub\",\n  \"version\": \"1.13.2\",\n  \"publishedAt\": 1779087224888\n}\n\nFile v1.13.2:references/architecture.md\n\n# OpenClaw Memory Hub — Architecture\n\n## Design Principles\n\n1. **Local-first**: Primary storage is local SQLite + markdown files; cloud is sync target, not source of truth\n2. **Progressive disclosure**: L0 catches everything, L1 structures daily context, L2 curates what matters\n3. **Zero-latency retrieval**: bge-m3 embedding runs on local Ollama; no API latency\n4. **Multi-language**: bge-m3 supports 100+ languages, 1024-dim vectors\n5. **DAG-based composition**: memory-core uses DAG for multi-agent memory lineage\n\n## Four-Tier Architecture\n\n```\n┌─────────────────────────────────────────────┐\n│                L0 — Runtime                  │\n│  ┌─────────────────┐  ┌──────────────────┐  │\n│  │  memory-core     │  │  MemOS Cloud     │  │\n│  │  (Ollama bge-m3) │  │  (Cloud Recall)  │  │\n│  │  SQLite + vec    │  │  Lifecycle hooks │  │\n│  └────────┬────────┘  └────────┬─────────┘  │\n│           │                     │            │\n│  ┌────────▼─────────────────────▼─────────┐  │\n│  │  Active Memory (built-in plugin)       │  │\n│  │  Pre-reply sub-agent memory search     │  │\n│  └────────┬───────────────────────────────┘  │\n│           │                                  │\n│  ┌────────▼───────────────────────────────┐  │\n│  │  Hybrid Search (semantic + BM25)       │  │\n│  └────────────────┬───────────────────────┘  │\n└───────────────────┼──────────────────────────┘\n                    │\n┌───────────────────▼──────────────────────────┐\n│              L1 — Working Memory              │\n│  memory/YYYY-MM-DD.md (30-90 day retention)  │\n│  - Daily conversation summaries              │\n│  - Technical notes & decisions               │\n│  - TODOs & reminders                         │\n│  - Hand-editable, human-readable             │\n└───────────────────┬──────────────────────────┘\n             L2a — Index Layer (MEMORY.md, ~90 lines)\n             L2b — Archive Layer (ARCHIVE.md, ~220 lines)\n             L2c — Knowledge Graph (facts.sqlite)\n                    │  Dreaming pipeline\n                    │  (Daily 03:00 UTC)\n                    ▼\n┌──────────────────────────────────────────────┐\n│           L2 — Long-term Memory               │\n│  MEMORY.md (read-only base, auto-curated)     │\n│  - Key user facts & profile                   │\n│  - Permanent decisions & preferences          │\n│  - Encrypted sensitive info (SHA-256)         │\n│  - Promoted high-scoring insights             │\n└──────────────────────────────────────────────┘\n```\n\n## Memory Plugins\n\n### memory-core (Primary)\n\n- **Provider**: OpenClaw Plugin Registry\n- **Embedding Backend**: Ollama (`http://127.0.0.1:11434`)\n- **Model**: `bge-m3` (BAAI, 1024-dimension, multi-language)\n- **Vector Storage**: SQLite + sqlite-vec extension\n- **Search**: Semantic vector similarity + BM25 keyword hybrid\n- **Database**: `~/.openclaw/memory/main.sqlite`\n- **Indexing**: Automatic on file save; manual via `openclaw memory index --force`\n\n### MemOS Cloud Plugin (Supplementary)\n\n- **Lifecycle Hook**: Captures and recalls memory via `POST /api/memo` hooks\n- **Recall**: Injects relevant memory context into session at bootstrap\n- **Cross-device**: Syncs memory across multiple OpenClaw instances\n\n## Dual-Plugin Collaborative Workflow\n\nThis is the core innovation of the architecture — **two plugins working in layers, not competing**:\n\n```\nUser sends message → Gateway receives\n         │\n         ▼\n┌─────────────────────────────────────────────┐\n│ 1. MemOS Cloud Plugin                       │\n│    (before_agent_start lifecycle hook)       │\n│                                              │\n│    → Injects:                                │\n│      • Long-term facts (\"User rides a 703F\") │\n│      • User preferences (\"Hates sweets\")     │\n│      • Profile constants (\"Name is Victor\")  │\n│                                              │\n│    Layer: Static / low-frequency truths      │\n└──────────────────┬──────────────────────────┘\n                   │\n                   ▼\n┌─────────────────────────────────────────────┐\n│ 2. memory-core                               │\n│    (Runtime semantic retrieval)               │\n│                                              │\n│    → Injects:                                │\n│      • Recent conversation snippets          │\n│      • Topically relevant past discussions   │\n│      • Working memory (today's context)      │\n│                                              │\n│    Layer: Dynamic / high-frequency context   │\n└──────────────────┬──────────────────────────┘\n                   │\n                   ▼\n┌─────────────────────────────────────────────┐\n│ Agent receives complete memory context:      │\n│                                              │\n│  \"Victor rides a 703F\" (fact — MemOS)        │\n│  + \"Yesterday discussed Zettelkasten\"        │\n│    (recent — memory-core)                    │\n│  + \"Today's weather forecast\" (today — L1)  │\n└─────────────────────────────────────────────┘\n```\n\n### Division of Responsibility\n\n| Aspect | MemOS Cloud | memory-core |\n|--------|-------------|-------------|\n| **Data type** | Facts, preferences, profile | Conversations, working context |\n| **Frequency** | Static / rarely changes | Dynamic / every session |\n| **Source** | Cloud API (`POST /api/memo`) | Local SQLite-vec index |\n| **Trigger** | `before_agent_start` hook | Runtime semantic query |\n| **Retention** | Permanent (cloud) | Configurable (last N chunks) |\n| **Scope** | Cross-device, long-term | Single device, recent history |\n| **Conflict** | None — complementary | None — complementary |\n\n### Critical Configurations\n\nThese settings in `openclaw.json` are **required** for the two plugins to work together without blocking each other:\n\n#### MemOS Cloud Plugin (`plugins.entries.memos-cloud-openclaw-plugin`)\n\n```json\n{\n  \"enabled\": true,\n  \"config\": {\n    \"resetOnNew\": true,\n    \"recallEnabled\": true,\n    \"recallFilterFailOpen\": true,\n    \"asyncMode\": true,\n    \"addEnabled\": true\n  },\n  \"hooks\": {\n    \"allowConversationAccess\": true\n  }\n}\n```\n\n| Setting | Why it matters |\n|---------|----------------|\n| `recallFilterFailOpen: true` | **Critical.** If MemOS recall fails (API timeout/network), don't block the pipeline — let memory-core still inject context |\n| `asyncMode: true` | **Critical.** MemOS runs asynchronously so memory-core can execute its own retrieval afterward |\n| `resetOnNew: true` | Fresh context per session — no stale data carried over |\n| `hooks.allowConversationAccess: true` | Allows hooks to read/write conversation data for memory injection |\n| `recallEnabled: true` | Enable recall at session start |\n| `addEnabled: true` | Auto-capture new memories during conversation |\n\n#### Recommended Full Config (with all tunable params)\n\n```json\n{\n  \"enabled\": true,\n  \"config\": {\n    \"resetOnNew\": true,\n    \"recallEnabled\": true,\n    \"recallFilterFailOpen\": true,\n    \"asyncMode\": true,\n    \"addEnabled\": true,\n    \"queryPrefix\": \"important user context preferences decisions \",\n    \"memoryLimitNumber\": 9,\n    \"preferenceLimitNumber\": 6,\n    \"relativity\": 0.45,\n    \"maxItemChars\": 8000,\n    \"includeAssistant\": true,\n    \"includePreference\": true,\n    \"tags\": [\"openclaw\", \"memory\"]\n  },\n  \"hooks\": {\n    \"allowConversationAccess\": true\n  }\n}\n```\n\n#### memory-core Plugin (`plugins.entries.memory-core`)\n\n```json\n{\n  \"enabled\": true,\n  \"config\": {\n    \"dreaming\": {\n      \"enabled\": true\n    }\n  }\n}\n```\n\n`dreaming.enabled: true` activates the daily Dreaming pipeline.\n\n### Why This Works\n\n- **No overlap**: MemOS handles static facts; memory-core handles dynamic conversation context\n- **Fail-safe**: If MemOS Cloud is unreachable, `recallFilterFailOpen: true` keeps the pipeline running\n- **Async execution**: MemOS hooks fire async; memory-core retrieval runs independently\n- **Layered context**: Agent receives who-you-are facts first, then what-we-talked-about context\n\n## File Anatomy\n\n### Runtime Context Files\n\n| File | Purpose |\n|------|---------|\n| `AGENTS.md` | Memory rules, safe operation protocol, execution guidelines |\n| `SOUL.md` | Agent persona, core principles, independent values |\n| `USER.md` | User profile, preferences, communication style |\n| `TOOLS.md` | Environment-specific configuration, known issues |\n| `MEMORY.md` | Long-term facts (L2), read-only base loaded at bootstrap |\n\n### Daily Memory Files\n\n```\nmemory/\n├── YYYY-MM-DD.md          # Day's conversation log, key decisions\n├── MEMORY_INDEX.md         # Auto-generated vector BM25 summary\n├── memos-cloud-*.md        # Cloud-pulled memory (read-only cache)\n├── .sync-cloud-state.json  # Cloud pull cursor (last fetch timestamp)\n├── .sync-push-state.json   # Cloud push state (SHA256 per file)\n└── DREAMS.md              # Latest Dreaming analysis output\n├── projects/\n│   ├── README.md          # Project memory index\n│   ├── clawguard.md       # Per-project memory (clawguard)\n│   ├── anamnesis-hub.md\n│   └── openclaw-dir-inventory.md\n```\n\n### Project Memory (P2)\n\nEach GitHub project gets an independent `memory/projects/{slug}.md` file:\n- Isolates project-specific decisions, lessons, and conventions\n- Prevents project context from polluting MEMORY.md\n- Agent-independent: can be loaded by specific sub-agents\n- Template: project slug, GitHub URL, status, key decisions, TODOs\n\n### Alias Resolution (P2)\n\nfacts.db `aliases` table maps colloquial names to canonical entities:\n- \"软路由\" → \"iStoreOS\"\n- \"小爱\" → \"卧室小爱音箱\"\n- \"anamnesis-hub\" → \"anamnesis-hub\"\n\nEnables natural language queries like \"软路由的IP是多少\" to resolve to `SELECT * FROM facts WHERE entity='iStoreOS' AND key='ip'`.\n\n## Automated Pipelines\n\n### Dreaming Pipeline\n\nRuns daily at **03:00 UTC** (11:00 CST):\n\n1. **REM Backfill**: Scans recent session logs, extracts structured facts\n2. **DeepSeek Analysis**: Runs AI analysis on extracted facts:\n   - Preference changes\n   - Lessons learned\n   - Relationship updates\n   - Project criteria\n3. **Dreaming Promotion**: Evaluates candidates against threshold (minScore: 0.8, max 10 items) and promotes to MEMORY.md\n\nOutput delivered via QQ:\n- 📄 REM Backfill: status report\n- 🔬 DeepSeek 分析: extracted insights count\n- 🌙 Dreaming Promotion: promoted count\n\n### auto-memory v3 (Two-Stage Pipeline)\n\nRuns at **18:30 / 22:30 CST** (30 min after three-way sync):\n\nReads the latest MemOS Cloud synced facts, filters noise, and writes in two stages:\n1. **Stage 1 — ARCHIVE.md archive**: Full entries with SHA-256 dedup, organized under `## Auto-Extracted 历史归档`\n2. **Stage 2 — MEMORY.md summary**: One-line index like `Auto-Extracted ({date}): {n} 条新记忆 → ARCHIVE.md:{line}`\n\n**Key difference from v2**: No longer appends raw entries to MEMORY.md. Detailed content goes to ARCHIVE.md, only a summary line stays in MEMORY.md.\n\n```\nagent_end → MemOS Cloud (real-time capture + cloud LLM extraction)\n              ↓\n        sync-cloud-pull.py (every 30 min)\n              ↓\n        memos-cloud-YYYY-MM-DD.md (structured facts)\n              ↓\n        auto_memory_extract.py → qwen3 filter + memos-extractor-0.6b\n              ↓\n        ┌─ Stage 1: ARCHIVE.md (完整归档, SHA-256 去重)\n        └─ Stage 2: MEMORY.md (一行摘要, 不写入详细内容)\n```\n\n**Key difference from v2**: No longer appends raw entries to MEMORY.md. Two-stage pipeline ensures ARCHIVE.md gets full content with SHA-256 dedup, and MEMORY.md stays clean as a pure index layer (~90 lines).\n\n### Three-Way Sync\n\nRuns at **18:00 / 20:00 / 22:00 CST** (covering user active hours 19–23):\n\n```\n┌──────────┐    ┌──────────┐    ┌──────────┐\n│  Cloud   │◄──►│Markdown  │◄──►│  Vector  │\n│ (Memos)  │    │ (Files)  │    │ (SQLite) │\n└──────────┘    └──────────┘    └──────────┘\n     │               │               │\n     │  sync-pull    │  sync-push    │  sync-index\n     ▼               ▼               ▼\n  memos-cloud*.md → Cloud API     MEMORY_INDEX.md\n```\n\n**Sync Rules**:\n- Cloud → MD: New/changed entries since last pull (cursor-based)\n- MD → Cloud: SHA256 hash comparison, push only changed files\n- Vector → MD: FTS5 BM25 clustering, score > 0.65, grouped by source_file\n- Excluded from push: `memos-cloud-*.md`, `MEMORY_INDEX.md`, `DREAMS.md`, `.sync-*.json`\n\n### Wiki Compilation (Planned)\n\nRuns daily at **04:00 UTC** after Dreaming completes:\n- Scan memory-core DB + latest Dreaming output\n- Extract new entities, concepts, syntheses\n- Deduplicate via fuzzy filename matching\n- Write new wiki vault pages\n- Report new page count only\n\n### session-extract\n\nRuns at **22:00 CST** as part of unified pipeline:\n- Scans `~/.openclaw/agents/main/sessions/` JSONL files\n- Two-pass extraction via MemOS extractor + reranker\n- **Pass 1**: `.jsonl` → `.analyzed1` → `.learnings/ERRORS.md` + `.learnings/LEARNINGS.md`\n- **Pass 2**: `.analyzed1` → `.analyzed2` → archive to trash\n- Output: `.learnings/` (permanent) + `memory/YYYY-MM-DD.md`\n- State tracking: `memory/.session-extract-state.json`\n- Auto-skips running session to prevent corruption\n\n### facts.db Activation & Decay\n\n**facts.db** provides structured entity/key/value lookup with Hebbian activation:\n\n| Component | Mechanism |\n|-----------|----------|\n| **Activation** | Each fact query triggers `activation += 0.5, access_count += 1` |\n| **Daily Decay** | Non-permanent facts: `activation *= 0.95` (floor: 0.005) |\n| **Classification** | HOT (>2.0) / WARM (0.02~2.0) / COOL (<0.02) |\n| **GC Candidates** | COOL facts flagged for review, not auto-deleted |\n\n### LCM Pre-Write Protection\n\nConfigured in `openclaw.json` under `agents.defaults.memoryFlush`:\n- `enabled: true` — activate pre-compaction flush\n- `triggerPercent: 80` — flush when context window reaches 80%\n- `flushTo: memory/YYYY-MM-DD.md` — write critical decisions to daily log\n- `flushMode: critical_decisions_only` — preserve confirmed decisions, skip noise\n\nThis prevents the \"Summer Yue scenario\" where compaction causes loss of chat-only instructions.\n\n## Sensitive Information\n\nSHA-256 hashing with salt `VictorQR_7x9K2mP` for:\n\n- Passwords & verification hashes\n- Phone numbers, ID numbers\n- Email addresses (all accounts)\n- Social media IDs (WeChat, QQ, Douyin)\n\nStored in `MEMORY.md` hash table, verified by SHA-256 comparison before access.\n\n## Known Conflicts & Compatibility\n\n### ❌ subconscious-personality-guardian ↔ memory-core\n\n**Status: Incompatible**\n\nBoth plugins attempt to use the same OpenClaw memory slot. Installing both causes:\n- Memory write conflicts (race conditions on save)\n- Retrieval logic duplication (both inject into context)\n- Context management conflicts (duplicate or conflicting memory context in prompts)\n\n**Fix**: Disable or remove `subconscious-personality-guardian`:\n```json\n// openclaw.json\n{\n  \"plugins\": {\n    \"disabled\": [\"subconscious-personality-guardian\"],\n    \"deny\": [\"subconscious-personality-guardian\"]\n  }\n}\n```\n\n### ✅ memory-core + MemOS Cloud Plugin\n\n**Status: Compatible — designed to work in layers**\n\nThey are **not competing** memory systems. They operate at different layers with different responsibilities:\n\n| | memory-core | MemOS Cloud |\n|--|-------------|-------------|\n| Role | Recent/working context | Long-term facts & preferences |\n| Data | Conversations, discussions | User profile, habits, decisions |\n| Timing | Every session (runtime query) | Session start (lifecycle hook) |\n| Storage | Local SQLite-vec | Remote cloud API |\n\n**Execution order**:\n1. MemOS Cloud fires `before_agent_start` → injects static facts\n2. memory-core queries local vector DB → injects dynamic context\n3. Agent receives layered memory: \"who the user is\" + \"what we talked about recently\"\n\n**No overlap**: One handles local retrieval, the other handles cloud sync. Both should be enabled simultaneously for best results.\n\n### ⚠️ MemOS Cloud Plugin + ReMe\n\n**Status: Potentially conflicting**\n\nBoth provide cloud memory functionality. Installing both may cause:\n- File layer overlap (both write to `memory/`)\n- Retrieval logic duplication\n- API endpoint conflicts (competing memory services)\n\n**Recommendation**: Choose one. MemOS Cloud is recommended if using OpenClaw natively.\n\n## Performance Characteristics\n\n- **Embedding speed**: ~50ms per query on RTX 4070 Super (12GB VRAM)\n- **Database size**: ~100MB for 10K+ memory chunks\n- **Hybrid search latency**: <100ms for top-10 results\n- **Dreaming pipeline**: ~30 seconds per full run\n- **Sync run**: ~10 seconds per direction\n\nFile v1.13.2:references/candidates-review.md\n\n# Candidates Review — P3 记忆候选审核机制\n\n> Dreaming / auto-memory 产出的候选记忆不再直接写入，需人工确认后再归档。\n> 最后更新：2026-05-17 | v1.13.1\n\n---\n\n## 一、背景与目的\n\n传统流程中，Dreaming 和 auto-memory 自动将记忆写入 ARCHIVE.md/MEMORY.md，存在噪音污染风险。P3 机制引入人工审核层：\n\n```\n自动产出（Dreaming/auto-memory）\n    ↓\nmemory/.candidates/YYYY-MM-DD.json（待审队列）\n    ↓\n用户确认（approve / reject）\n    ↓\n写入 ARCHIVE.md / MEMORY.md\n```\n\n**P3 含义**：Priority 3，第三优先级审核（低于 P1 即时生效、P2 自动归档）。\n\n---\n\n## 二、流程详解\n\n### 2.1 候选来源\n\n| 来源 | 说明 |\n|------|------|\n| **Dreaming** | 每日 UTC 03:00，扫描日志 → DeepSeek 分析 → 高分候选（minScore 0.8，max 10 items） |\n| **auto-memory v3** | CST 18:30/22:30，MemOS Cloud → qwen3 过滤 → 候选条目 |\n| **session-extract** | CST 22:00，JSONL 扫描 → MemOS extractor/reranker → 候选条目 |\n\n### 2.2 候选文件格式\n\n`memory/.candidates/YYYY-MM-DD.json`：\n```json\n{\n  \"pending\": {\n    \"cand_001\": {\n      \"date\": \"2026-05-17\",\n      \"category\": \"偏好/习惯\",\n      \"content\": \"用户偏好晚上工作，凌晨1点后效率最高\",\n      \"source\": \"dreaming\",\n      \"score\": 0.92\n    },\n    \"cand_002\": {\n      \"date\": \"2026-05-17\",\n      \"category\": \"技术/配置\",\n      \"content\": \"升仕703F摩托车每8000km需要更换机油\",\n      \"source\": \"auto-memory\",\n      \"score\": 0.87\n    }\n  },\n  \"approved\": {},\n  \"rejected\": {},\n  \"total_reviewed\": 0\n}\n```\n\n### 2.3 审核状态\n\n| 状态 | 说明 |\n|------|------|\n| `pending` | 待审核，需用户确认 |\n| `approved` | 已批准，写入 ARCHIVE.md |\n| `rejected` | 已拒绝，不写入 |\n\n---\n\n## 三、审核命令\n\n```bash\n# 列出所有待审候选（按 score 倒序）\npython3 scripts/candidates_review.py list\n\n# 批准指定候选（写入 ARCHIVE.md）\npython3 scripts/candidates_review.py approve --id cand_001\n\n# 拒绝指定候选\npython3 scripts/candidates_review.py reject --id cand_001\n\n# 批准所有待审\npython3 scripts/candidates_review.py approve-all\n\n# 审核统计\npython3 scripts/candidates_review.py stats\n```\n\n---\n\n## 四、输出示例\n\n### list 输出\n```json\n{\n  \"status\": \"ok\",\n  \"pending_count\": 2,\n  \"candidates\": [\n    {\n      \"id\": \"cand_001\",\n      \"date\": \"2026-05-17\",\n      \"category\": \"偏好/习惯\",\n      \"content\": \"用户偏好晚上工作，凌晨1点后效率最高\",\n      \"source\": \"dreaming\",\n      \"score\": 0.92\n    },\n    {\n      \"id\": \"cand_002\",\n      \"date\": \"2026-05-17\",\n      \"category\": \"技术/配置\",\n      \"content\": \"升仕703F摩托车每8000km需要更换机油\",\n      \"source\": \"auto-memory\",\n      \"score\": 0.87\n    }\n  ]\n}\n```\n\n### approve 输出\n```json\n{\n  \"status\": \"approved\",\n  \"id\": \"cand_001\",\n  \"written_to\": \"/home/victor/.openclaw/workspace/ARCHIVE.md\"\n}\n```\n\n### stats 输出\n```json\n{\n  \"status\": \"ok\",\n  \"pending\": 2,\n  \"approved\": 15,\n  \"rejected\": 3,\n  \"total_reviewed\": 18\n}\n```\n\n---\n\n## 五、approve-all 行为\n\n`approve-all` 依次对每个 pending 候选执行 approve：\n1. 读取当前 state\n2. 写入 ARCHIVE.md（追加到末尾）\n3. 从 pending 移到 approved\n4. 重载 state（避免状态冲突）\n5. 重复直到所有 pending 处理完毕\n\n---\n\n## 六、ARCHIVE.md 写入格式\n\n批准后的条目写入 ARCHIVE.md 末尾，格式：\n```markdown\n<!-- candidate:cand_001 -->\n- **偏好/习惯** (已审核 2026-05-17): 用户偏好晚上工作，凌晨1点后效率最高\n```\n\n---\n\n## 七、与记忆架构的集成\n\n```\nDreaming / auto-memory / session-extract\n    ↓ 产出候选\nmemory/.candidates/YYYY-MM-DD.json\n    ↓ 用户审核\nARCHIVE.md（完整条目）\n    ↓\nMEMORY.md（两阶段摘要）\n    ↓\nfacts.sqlite（结构化查询）\n```\n\n候选审核是自动归档前的最后一层过滤，确保只有用户确认过的内容进入长期记忆。\n\n---\n\n## 八、状态文件位置\n\n`memory/.candidates/review-state.json`（由 `candidates_review.py` 自动管理）\n\n> ⚠️ 不要手动编辑此文件。\n\nFile v1.13.2:references/INDEX.md\n\n# anamnesis-hub — 文档索引\n\n> 本目录包含 anamnesis-hub 技能的完整技术文档。\n> 最新版本：v1.13.1 | 最后更新：2026-05-17\n\n---\n\n## 📚 文档总览\n\n| 文档 | 说明 |\n|------|------|\n| **[architecture.md](architecture.md)** | 四层记忆架构设计、插件协同工作流、文件解剖、插件冲突说明 |\n| **[setup-guide.md](setup-guide.md)** | 环境配置、手动安装步骤、cron 任务设置、所有配置参数详解 |\n| **[memory-directory.md](memory-directory.md)** | `memory/` 目录结构、状态文件、LCM 防失控机制、P3 候选审核流程 |\n| **[sync-api.md](sync-api.md)** | MemOS Cloud API 端点、同步状态文件、安全机制 |\n| **[scripts-reference.md](scripts-reference.md)** | 所有脚本统一说明：用途、cron 触发时间、依赖关系、关键参数 |\n| **[pipeline-stages.md](pipeline-stages.md)** | 日终管线 6 阶段详解：输入/输出/依赖/失败处理 |\n| **[candidates-review.md](candidates-review.md)** | P3 记忆候选审核机制：Dreaming → 审核队列 → ARCHIVE.md 完整流程 |\n| **[upgrade-reset.md](upgrade-reset.md)** | 升级路径、重置流程、卸载步骤 |\n\n---\n\n## 🗂️ 文档层级关系\n\n```\n入口：README.md / SKILL.md\n    ↓\nreferences/INDEX.md（本文档）\n    ├── architecture.md       ← 必读：理解架构\n    ├── setup-guide.md        ← 必读：安装配置\n    ├── memory-directory.md   ← 进阶：目录结构\n    ├── sync-api.md           ← 进阶：云同步\n    ├── scripts-reference.md  ← 运维：脚本说明\n    ├── pipeline-stages.md    ← 运维：管线流程\n    ├── candidates-review.md ← 运维：候选审核\n    └── upgrade-reset.md      ← 运维：升级重置\n```\n\n---\n\n## 🔗 外部链接\n\n| 平台 | 链接 |\n|------|------|\n| **ClawHub** | https://clawhub.ai/victorqr/anamnesis-hub |\n| **GitHub** | https://github.com/VictorQR/anamnesis-hub |\n| **Skill 安装** | `openclaw skills install victorqr/anamnesis-hub` |\n\n---\n\n## 📌 快速定位\n\n| 场景 | 文档 |\n|------|------|\n| 首次安装 | `setup-guide.md` + `architecture.md` |\n| 理解管线流程 | `pipeline-stages.md` + `scripts-reference.md` |\n| 排查同步问题 | `sync-api.md` + `memory-directory.md` |\n| 配置 cron | `setup-guide.md` 第 5 步 |\n| P3 记忆审核 | `memory-directory.md` 第十节 + `candidates-review.md` |\n| 升级/重置 | `upgrade-reset.md` |\n\nFile v1.13.2:references/memory-directory.md\n\n# memory/ 目录结构详解\n\n> 最后更新：2026-05-16 (v1.13.1)\n> 本文档说明 `~/.openclaw/workspace/memory/` 下所有文件的作用及其与记忆架构的关系。\n\n---\n\n## 目录总览\n\n```\nmemory/\n├── YYYY-MM-DD.md              # L1 短时记忆日志\n├── MEMORY_INDEX.md            # 向量索引快照（自动生成）\n├── projects/                  # P2: 项目独立记忆\n│   ├── README.md\n│   └── {slug}.md\n├── .dreams/                   # Dreaming 管线工作目录\n│   ├── daily-ingestion.json\n│   ├── events.jsonl\n│   ├── phase-signals.json\n│   ├── session-corpus/\n│   ├── session-ingestion.json\n│   └── short-term-recall.json\n├── archive/                   # 归档记录\n├── dreaming/                  # Dreaming 产出目录\n│   └── light/\n│       └── YYYY-MM-DD.md\n├── .sync-cloud-state.json     # Cloud 同步游标\n├── .sync-push-state.json      # Cloud 推送状态\n├── .session-extract-state.json # 会话提取状态\n├── .cron-delivery-heartbeat.json # 心跳消息队列\n├── .cron-delivery.json        # 历史投递记录\n├── .gateway-pid.json          # Gateway 进程跟踪\n└── .pipeline-run-YYYY-MM-DD.log # 管道运行日志\n```\n\n---\n\n## 一、L1 短时记忆日志 (`YYYY-MM-DD.md`)\n\n| 属性 | 值 |\n|------|-----|\n| **来源** | Agent 会话中自主写入 / session-extract.py 提取 |\n| **内容** | 当日会话摘要、关键决策、技术笔记、待办事项 |\n| **格式** | 自由 Markdown，人工可编辑 |\n| **生命周期** | 30-90 天保留 |\n| **与记忆架构关系** | **核心 L1 层** — 向量搜索的主要语料来源 |\n\n---\n\n## 二、向量索引快照 (`MEMORY_INDEX.md`)\n\n| 属性 | 值 |\n|------|-----|\n| **来源** | `sync-vector-index.py` 自动生成，三方同步时更新 |\n| **生成方式** | FTS5 BM25 聚类，score > 0.65 的高权重 chunks |\n| **内容** | 来源分布（memory/sessions 占比）、高频文件 Top10、最近更新文件 |\n| **频率** | 每日更新 |\n| **与记忆架构关系** | **辅助可读层** — 不是检索用，是人类可读的索引健康快照 |\n\n### 示例内容\n\n```markdown\n# 向量索引快照\n\n> 总索引: 1394 个语义块, 2 个来源\n\n## 📊 来源分布\n- **memory**: 1331 chunks (95%)\n- **sessions**: 63 chunks (5%)\n\n## 📂 高频文件\n- memory/2026-05-12.md → 242 chunks\n```\n\n### 注意事项\n- ❌ **不要**写入 L2 或 ARCHIVE —— 它是自动生成的衍生数据\n- ✅ 用于验证向量库是否正常工作（chunk 数量/分布是否合理）\n\n---\n\n## 三、P2 项目记忆 (`projects/`)\n\n| 属性 | 值 |\n|------|-----|\n| **来源** | 手动创建 + Agent 维护 |\n| **内容** | 每个 GitHub 项目独立一个 `{slug}.md` |\n| **格式** | 标准模板：项目名、GitHub URL、状态、关键决策、待办 |\n| **与记忆架构关系** | **L2c 扩展** — 防止项目记忆污染主 MEMORY.md |\n\n### 当前活跃项目\n\n| 文件 | GitHub | 说明 |\n|------|--------|------|\n| `clawguard.md` | VictorQR/clawguard | 安全守护插件 |\n| `anamnesis-hub.md` | VictorQR/anamnesis-hub | 记忆架构 hub |\n| `openclaw-dir-inventory.md` | VictorQR/openclaw-dir-inventory | 目录清单管理 |\n\n---\n\n## 四、状态文件 (`.json`)\n\n### 4.1 `.sync-cloud-state.json`\n\n追踪 MemOS Cloud 同步游标，防止重复拉取。\n\n```json\n{\n  \"lastPullTime\": \"2026-05-15 22:03:32\",\n  \"lastPage\": 6,\n  \"hasMore\": false\n}\n```\n\n| 字段 | 说明 |\n|------|------|\n| `lastPullTime` | 上次拉取的时间戳 |\n| `lastPage` | 上次拉取的页码 |\n| `hasMore` | 是否还有更多数据 |\n\n**使用者**: `sync-cloud-pull.py`\n\n---\n\n### 4.2 `.sync-push-state.json`\n\n追踪本地文件 SHA-256 哈希，用于云端增量推送比对。\n\n```json\n{\n  \"files\": {\n    \"MEMORY.md\": \"abc123...\",\n    \"ARCHIVE.md\": \"def456...\"\n  }\n}\n```\n\n| 字段 | 说明 |\n|------|------|\n| `files` | 文件名 → SHA-256 哈希映射 |\n\n**使用者**: `sync-cloud-push.py`\n\n---\n\n### 4.3 `.session-extract-state.json`\n\n追踪已处理的会话 ID，防止重复提取。\n\n```json\n{\n  \"version\": 1,\n  \"lastRun\": \"2026-05-15\",\n  \"processedIds\": [\"62463b70-...\", \"8fc31a7c-...\"]\n}\n```\n\n| 字段 | 说明 |\n|------|------|\n| `version` | 状态格式版本 |\n| `lastRun` | 上次运行日期 |\n| `processedIds` | 已处理的 session ID 列表 |\n\n**使用者**: `session-extract.py`\n\n---\n\n### 4.4 `.cron-delivery-heartbeat.json`\n\n心跳消息投递队列。\n\n```json\n{\n  \"pending\": []\n}\n```\n\n| 字段 | 说明 |\n|------|------|\n| `pending` | 待投递消息数组 |\n\n**使用者**: HEARTBEAT.md 心跳机制\n\n---\n\n### 4.5 `.cron-delivery.json`\n\n历史投递记录，用于审计和调试。\n\n---\n\n### 4.6 `.gateway-pid.json`\n\nOpenClaw Gateway 进程 ID 追踪，用于健康检查。\n\n---\n\n## 五、管线日志\n\n### `.pipeline-run-YYYY-MM-DD.log`\n\n统一日终管线的运行日志。\n\n```bash\n[18:00:01] 📋 daily-memory-pipeline start — stage: full\n[18:00:02] ↓ 阶段1: sync-pull\n[18:05:30] 🧠 阶段2: auto-memory v3\n[18:05:35]   归档: 3 新增 / 12 重复跳过\n[18:06:00] ↑ 阶段3: sync-push + reindex\n[22:00:01] 📊 阶段4: session-extract\n[22:05:30] ⏳ 阶段5: activation decay\n[22:05:31]    facts.db: 55 facts decayed\n[22:05:32] 🏥 阶段6: healthcheck\n[22:05:32]    MEMORY.md: 88 行 ✅\n```\n\n**使用者**: `daily-memory-pipeline.sh`\n\n---\n\n## 六、Dreaming 目录 (`.dreams/`)\n\n| 文件 | 说明 |\n|------|------|\n| `daily-ingestion.json` | 每日摄入数据（Dreaming 输入） |\n| `events.jsonl` | Dreaming 事件日志 |\n| `phase-signals.json` | 阶段信号（REM/DeepSeek/Promotion 状态） |\n| `session-corpus/` | 会话分析语料库 |\n| `session-ingestion.json` | 会话摄入状态 |\n| `short-term-recall.json` | 短时召回状态 |\n\n**注意**: 这是 memory-core 插件的内部数据，**不要手动修改**。\n\n---\n\n## 七、dreaming/ 产出目录\n\n`dreaming/light/YYYY-MM-DD.md` — Dreaming 每日分析结果摘要。\n\n**用途**: 被 auto_memory_extract.py 消费，作为记忆提取的补充语料源（P1 整合后）。\n\n---\n\n## 八、文件分类速查\n\n| 类别 | 文件 | 可手动编辑 | 可删除 | 来源 |\n|------|------|----------|--------|------|\n| 🔴 核心记忆 | `YYYY-MM-DD.md` | ✅ | ❌ (30天内) | Agent + session-extract |\n| 🔴 核心记忆 | `projects/*.md` | ✅ | ❌ | 手动 + Agent |\n| 🟡 自动衍生 | `MEMORY_INDEX.md` | ❌ | ✅ (会重建) | sync-vector-index.py |\n| 🟡 自动衍生 | `dreaming/light/*.md` | ❌ | ✅ | Dreaming |\n| 🟢 状态文件 | `.sync-*.json` | ❌ | ⚠️ (重置状态) | sync 脚本 |\n| 🟢 状态文件 | `.session-extract-state.json` | ❌ | ⚠️ (重置进度) | session-extract |\n| 🟢 状态文件 | `.cron-delivery*.json` | ✅ | ⚠️ | cron 系统 |\n| 🟢 状态文件 | `.gateway-pid.json` | ❌ | ✅ | Gateway |\n| 🔵 管线日志 | `.pipeline-run-*.log` | ❌ | ✅ (7天后) | daily-memory-pipeline.sh |\n| ⚫ 内部数据 | `.dreams/` | ❌ | ❌ | memory-core 插件 |\n| ⚫ 历史归档 | `archive/` | ❌ | ⚠️ | 操作记录 |\n\n---\n\n## 九、与记忆架构层级映射\n\n```\nL0 (memory-core SQLite + sqlite-vec)\n    ↑ 索引自\nL1 memory/YYYY-MM-DD.md  ← session-extract.py\n    ↑ Dreaming 提升至\nL2a MEMORY.md (索引层 ~88行)\n    ↓ 双向索引 ←→\nL2b ARCHIVE.md (档案层 ~218行)\n    ↓ seed-facts-db.py\nL2c facts.sqlite (结构化)\n    ↑ 激活/衰减\n    facts_activation.py\n```\n\n\n## 十、P3 记忆候选审核 (`.candidates/`)\n\n| 属性 | 值 |\n|------|-----|\n| **路径** | `memory/.candidates/` |\n| **脚本** | `scripts/candidates_review.py` |\n| **流程** | Dreaming 产出 → candidates.json → 待审队列 → 用户确认 → ARCHIVE.md |\n\n### 命令\n\n```bash\npython3 candidates_review.py list           # 列出待审\npython3 candidates_review.py approve --id X # 批准写入ARCHIVE.md\npython3 candidates_review.py reject --id X  # 拒绝\npython3 candidates_review.py approve-all    # 全批准\npython3 candidates_review.py stats          # 统计\n```\n\n## 十一、LCM 替代方案 (P3)\n\nOpenClaw 不支持 `memoryFlush` 配置键。LCM 通过 **AGENTS.md 规则** 实现：\n- 会话中确认的关键决策，必须在 compaction 前写入 `memory/YYYY-MM-DD.md`\n- 禁止仅在对话中给出约束而不写入文件（夏季悦失控案例）\n\nFile v1.13.2:references/pipeline-stages.md\n\n# Pipeline Stages — 日终管线 6 阶段详解\n\n> 每日统一管线流程：CST 18:00 → 22:00，覆盖 sync、extract、decay、healthcheck。\n> 最后更新：2026-05-17 | v1.13.1\n\n---\n\n## 一、管线总览\n\n```\n时间 (CST)      阶段                      脚本                          状态\n──────────────────────────────────────────────────────────────────────\n18:00           阶段1: sync-pull          sync-cloud-pull.py            ✅\n18:30           阶段2: auto-memory v3     auto_memory_extract.py        ✅\n18:40           阶段3: sync-push+reindex  sync-cloud-push.py            ✅\n                               +         openclaw memory index --force\n20:30           阶段X: Session 分析       Session Analysis Daily     ✅\n22:00           阶段4: session-extract   session-extract.py            ✅\n22:05           阶段5: facts decay       facts_activation.py (inline)  ✅\n22:06           阶段6: healthcheck       healthcheck (inline)          ✅\n```\n\n统一编排脚本：`daily-memory-pipeline.sh`\n\n---\n\n## 二、阶段详解\n\n### 阶段 1：sync-pull — Cloud → 本地\n\n**时间**：18:00 CST | **脚本**：`sync-cloud-pull.py` | **日志**：`memory/.pipeline-run-YYYY-MM-DD.log`\n\n**输入**：MemOS Cloud API（`GET /api/memo`）\n**输出**：`user_workspace/memos-cloud-cache/memos-cloud-YYYY-MM-DD.md`\n\n**流程**：\n1. 读取 `.sync-cloud-state.json` 的 `lastPullTime` 作为游标\n2. 请求 `create_time >= lastPullTime` 的条目\n3. 追加到 `memos-cloud-YYYY-MM-DD.md`\n4. 更新 `.sync-cloud-state.json`\n\n**失败处理**：非致命错误，记录 ⚠️ 继续管线\n**依赖**：MemOS API Token（`MEMOS_API_KEY` 环境变量或 `~/.openclaw/.env`）\n\n---\n\n### 阶段 2：auto-memory v3 — 两阶段提取\n\n**时间**：18:30 CST | **脚本**：`auto_memory_extract.py` | **日志**：stdout → 管道日志\n\n**输入**：`user_workspace/memos-cloud-cache/memos-cloud-*.md`\n**输出**：\n- 阶段1 → `ARCHIVE.md`（完整条目，SHA-256 去重，hash 标记）\n- 阶段2 → `MEMORY.md`（一行摘要索引）\n\n**Pipeline 内部流程**：\n```\nmemos-cloud-YYYY-MM-DD.md\n    ↓\n┌─ 通道A: qwen3:8b 过滤去重 ─→ {add: [...], update: [], remove: []}\n│   提取 prompt：与已有 MEMORY.md 对比去重，输出 JSON\n└─ 通道B: memos-extractor-0.6b API 结构化提取\n│   → memory_detail_list + preference_detail_list\n    ↓ 交叉验证（宽松 OR 逻辑）\n    ↓ 过滤 NOISE_KEYWORDS\n    ↓ SHA-256 去重（已有 hash 不写入）\n    ↓\nStage 1: ARCHIVE.md\n  - 写入完整条目：<!-- hash:{16位hash} -->\n  - 组织在 ## Auto-Extracted 历史归档 下\n  - 同一日期内的条目归并到同一 ### YYYY-MM-DD 块\n    ↓\nStage 2: MEMORY.md\n  - 更新/追加一行：Auto-Extracted ({date}): {n} 条新记忆 → ARCHIVE.md:{line}\n  - 不写入详细内容，只做索引\n```\n\n**去重机制**：\n- SHA-256(content) 前 16 位 → `<!-- hash:xxxxxxxxxxxxxxxx -->`\n- 已在 ARCHIVE.md 存在 hash 的条目跳过\n- NOISE_KEYWORDS 过滤：标题含系统级噪音关键词的条目跳过\n\n**输出示例**：\n```json\n{\n  \"status\": \"ok\",\n  \"pipeline\": \"two-stage (archive → summarize)\",\n  \"stage1_archive\": {\"added\": 3, \"skipped\": 12, \"section_line\": 88},\n  \"stage2_memory\": {\"memory_md_updated\": true, \"summary\": \"Auto-Extracted (2026-05-17): 3 条新记忆 → ARCHIVE.md:88\"},\n  \"summary\": {\n    \"total_candidates\": 5,\n    \"added_after_dedup\": 3,\n    \"duplicates_skipped\": 12,\n    \"qwen3_count\": 4,\n    \"extractor_count\": 3,\n    \"extractor_extra\": 1\n  }\n}\n```\n\n**失败处理**：非致命错误，记录 ⚠️ 继续管线\n\n---\n\n### 阶段 3：sync-push + reindex — 本地 → Cloud + 向量\n\n**时间**：18:40 CST | **脚本**：`sync-cloud-push.py` + `openclaw memory index --force` | **日志**：stdout → 管道日志\n\n**输入**：本地 Markdown 文件（MEMORY.md、ARCHIVE.md、memory/YYYY-MM-DD.md）\n**输出**：\n- MemOS Cloud（`POST /api/memo`，增量推送）\n- 向量索引（`memory-core` rebuild）\n\n**流程**：\n1. 读取 `.sync-push-state.json` 中各文件的 SHA256 哈希\n2. 计算当前文件哈希，与存储的哈希比对\n3. 只推送变化的文件（SHA256 不同）\n4. 更新 `.sync-push-state.json`\n5. 执行 `openclaw memory index --force` 重建向量索引\n\n**排除文件**（不推送）：\n- `memos-cloud-*.md`（来自云端）\n- `MEMORY_INDEX.md`（自动生成的本地衍生文件）\n- `DREAMS.md`（瞬态分析输出）\n- `.sync-*.json`（内部状态文件）\n\n**失败处理**：非致命错误，记录 ⚠️ 继续管线\n\n---\n\n### 阶段 4：session-extract — JSONL → .learnings + memory\n\n**时间**：22:00 CST | **脚本**：`session-extract.py` | **日志**：stdout → 管道日志\n\n**输入**：`~/.openclaw/agents/main/sessions/*.jsonl`\n**输出**：\n- `.learnings/ERRORS.md`（踩坑记录）\n- `.learnings/LEARNINGS.md`（经验教训）\n- `memory/YYYY-MM-DD.md`（日记忆）\n- 状态文件：`memory/.session-extract-state.json`\n\n**两遍流程**：\n```\nPass 1: 未处理的 .jsonl → .analyzed1\n  → 提取问题解决类内容 → .learnings/ERRORS.md\n  → 提取偏好经验类内容 → .learnings/LEARNINGS.md\n\nPass 2: .analyzed1.jsonl → .analyzed2.jsonl → gio trash\n  → 提取技术细节类内容 → memory/YYYY-MM-DD.md\n```\n\n**保护逻辑**：\n- 自动跳过最新 2 条会话（main + qqbot），防止正在运行的会话被重命名\n- `cleanup_trashable_files()` 通过 sessions.json 保护 main 和 qqbot 会话\n\n**reranker 三路 query（宽松 OR 逻辑）**：\n| Query | 内容 | 阈值 |\n|-------|------|------|\n| 问题解决 | 问题解决 错误修复 配置调试... | 0.15 |\n| 偏好经验 | 偏好 习惯 用户喜欢 用户要求... | 0.20 |\n| 技术细节 | error message报错 账号密码 key配置... | 0.15 |\n\n**可回收文件**：`.trajectory.jsonl`、`.trajectory-path.json`、`.analyzed1`、`.analyzed2`、`.jsonl.reset.*`、`.deleted.*`\n\n**失败处理**：非致命错误，记录 ⚠️ 继续管线\n\n---\n\n### 阶段 5：facts decay — 激活衰减\n\n**时间**：22:05 CST | **实现**：内联在 `daily-memory-pipeline.sh` 中 | **数据库**：`~/.openclaw/memory/facts.sqlite`\n\n**流程**：\n```python\nUPDATE facts SET activation = activation * 0.95 WHERE permanent = 0 AND activation > 0.01\n```\n- 非永久 facts：`activation *= 0.95`（下限 0.005）\n- 永久 facts：不参与衰减\n- 记录受影响行数到日志\n\n**分级阈值**：\n| 等级 | 条件 | 说明 |\n|------|------|------|\n| HOT | activation > 2.0 | 高频 facts |\n| WARM | 0.02 ≤ activation ≤ 2.0 | 正常 facts |\n| COOL | activation < 0.02 | GC 候选，待审核 |\n\n---\n\n### 阶段 6：healthcheck — 健康检查\n\n**时间**：22:06 CST | **实现**：内联在 `daily-memory-pipeline.sh` 中\n\n**检查项**：\n| 检查项 | 阈值 | 超标处理 |\n|--------|------|----------|\n| MEMORY.md 行数 | ≤ 100 | ⚠️ 记录警告 |\n| ARCHIVE.md 行数 | ≤ 250 | ⚠️ 记录警告 |\n| facts.db 总数 | — | 记录统计 |\n| facts.db HOT 数量 | — | 记录统计 |\n| facts.db COOL 数量 | — | 记录统计 |\n\n**输出示例**：\n```\n[22:06:01] 🏥 阶段6: healthcheck\n[22:06:02]    MEMORY.md: 88 行 ✅\n[22:06:02]    ARCHIVE.md: 218 行 ✅\n[22:06:03]    facts.db: 55 total / 3 HOT / 12 COOL\n```\n\n---\n\n## 三、失败处理策略\n\n所有 6 阶段均采用**非致命错误**策略：\n- 阶段失败 → 记录 ⚠️ 到日志 → 继续下一阶段\n- 不会因单阶段失败中断整条管线\n- 需要人工干预的场景：API Token 过期、磁盘空间不足、sessions.json 损坏\n\n**失败恢复**：\n| 阶段 | 失败场景 | 恢复方式 |\n|------|----------|----------|\n| sync-pull | 网络断开 | 下次 cron 自动重试（基于游标） |\n| auto-memory | API 超时 | 下次 cron 自动重试 |\n| sync-push | Token 过期 | 手动刷新 token 后重试 |\n| session-extract | 文件锁定 | 保护机制生效，不会处理运行中的会话 |\n| facts decay | db 不存在 | 跳过，继续管线 |\n| healthcheck | 文件不存在 | 记录 ⚠️，不影响管线 |\n\n---\n\n## 四、日志文件\n\n每次完整运行生成：`memory/.pipeline-run-YYYY-MM-DD.log`\n\n**结构**：\n```\n[18:00:01] 📋 daily-memory-pipeline start — stage: full\n[18:00:02] ↓ 阶段1: sync-pull (Cloud → local)\n[18:05:30] 🧠 阶段2: auto-memory v3\n[18:05:35]   归档: 3 新增 / 12 重复跳过\n[18:06:00] ↑ 阶段3: sync-push + reindex\n20:30           阶段X: Session 分析       Session Analysis Daily     ✅\n[22:00:01] 📊 阶段4: session-extract\n[22:00:05]   提取: 2 errors / 3 lessons\n[22:05:01] ⏳ 阶段5: activation decay\n[22:05:02]    facts.db: 55 facts decayed\n[22:06:01] 🏥 阶段6: healthcheck\n[22:06:02]    MEMORY.md: 88 行 ✅\n[22:06:02]    ARCHIVE.md: 218 行 ✅\n[22:06:03] ✅ pipeline complete — stage: full\n```\n\n---\n\n## 五、独立运行 vs 统一管线\n\n| 运行方式 | 命令 | 适用场景 |\n|----------|------|----------|\n| 独立运行（单阶段） | `python3 auto_memory_extract.py --mode full` | 调试单阶段 |\n| 统一管线（全部） | `bash daily-memory-pipeline.sh full` | 生产环境推荐 |\n| 仅同步 | `bash daily-memory-pipeline.sh sync-only` | 快速同步 |\n| 仅提取 | `bash daily-memory-pipeline.sh extract-only` | 离线调试 |\n| 查看状态 | `bash daily-memory-pipeline.sh status` | 快速检查 |\n\n**推荐配置**：使用 `daily-memory-pipeline.sh full` 作为单一 cron 任务，替代多个独立 cron，避免时序依赖问题。\n### 阶段 X：Session 分析 — 历史会话深度分析\n\n**时间**：20:30 CST | **Job**：`Session Analysis Daily` | **触发**：cron agentTurn | **日志**：cron 投递队列\n\n**输入**：已索引的 sessions JSONL + `memory_search` 搜索结果\n**输出**：`memory/YYYY-MM-DD.md`（分析摘要）\n\n**流程**：\n1. `openclaw memory index --force` — 确保 bge-m3 索引最新\n2. `memory_search` — 搜索过去 24-48 小时内的新会话内容\n3. **OpenClaw 默认模型深度分析** — 使用 `minimax/MiniMax-M2.7`（主模型）或配置的默认回退模型，分析已索引的会话内容，提取：\n   - 关键决策和教训\n   - 偏好和习惯的变化\n   - 重要上下文更新\n4. `openclaw memory rem-backfill --path ./memory --stage-short-term` — 写入数据库\n5. 将分析摘要追加到 `memory/YYYY-MM-DD.md`\n6. 汇报摘要写入 `memory/.cron-delivery-heartbeat.json`\n\n**关键说明**：\n- 使用 OpenClaw **默认模型**（主模型 `minimax/MiniMax-M2.7`，回退 `deepseek-v4-flash`），无需额外配置 DeepSeek\n- 不是脚本管道，而是 **agentTurn payload**，完全由 agent 的工具驱动\n- 属于日间（而非日终）分析，在 session-extract 之前运行，提前捕获重要决策\n\n**状态文件**：无（纯 agent workflow）\n**失败处理**：非致命，记录 ⚠️ 到 cron 投递队列后继续\n\nFile v1.13.2:references/scripts-reference.md\n\n# Scripts Reference — anamnesis-hub 脚本说明\n\n> 所有脚本的统一参考：用途、触发方式、依赖关系、关键参数。\n> 最后更新：2026-05-17 | v1.13.1\n\n---\n\n## 一、脚本总表\n\n| 脚本 | 位置 | 用途 | cron 触发 |\n|------|------|------|-----------|\n| `auto-setup.sh` | `scripts/` | 一键安装交互脚本 | 手动 |\n| `auto_memory_extract.py` | `user_workspace/scripts/` | 两阶段记忆提取（ARCHIVE → MEMORY） | 18:30 / 22:30 CST |\n| `session-extract.py` | `user_workspace/scripts/` | 会话 JSONL 扫描 → .learnings/ + memory/ | 22:00 CST |\n| `daily-memory-pipeline.sh` | `user_workspace/scripts/` | 统一编排 6 阶段管线 | 可作单一 cron |\n| `sync-cloud-pull.py` | `user_workspace/scripts/` | MemOS Cloud → 本地 | 18:00 / 20:00 / 22:00 CST |\n| `sync-cloud-push.py` | `user_workspace/scripts/` | 本地 → MemOS Cloud | 18:00 / 20:00 / 22:00 CST |\n| `sync-vector-index.py` | `user_workspace/scripts/` | 向量库 → MEMORY_INDEX.md | 随 sync-push |\n| `sync-all.sh` | `user_workspace/scripts/` | sync 三合一编排 | 18:00 / 20:00 / 22:00 CST |\n| `seed-facts-db.py` | `scripts/` | 从 ARCHIVE.md 初始化 facts.sqlite | 手动 |\n| `facts_activation.py` | `scripts/` | Hebbian 激活 + 衰减 | 手动或 cron |\n| `candidates_review.py` | `scripts/` | P3 记忆候选审核 | 手动 |\n| `check_current_session.py` | `scripts/` | 查看最近会话（调试用） | 手动 |\n| `write_file.py` | `scripts/` | 跨平台文本写入（UTF-8/BOM/CRLF） | 被调用 |\n\n---\n\n## 二、脚本详解\n\n### 2.1 auto-setup.sh\n\n**用途**：一键交互式安装 anamnesis-hub 环境。\n\n```bash\ncd /home/victor/github/anamnesis-hub\nbash scripts/auto-setup.sh\n```\n\n**交互步骤**：\n1. 检查 Ollama 是否安装 → 建议安装或跳过\n2. 下载 `bge-m3` embedding 模型\n3. 检测 `subconscious-personality-guardian` 冲突插件 → 自动加入禁用列表\n4. 安装 memory-core 插件\n5. 配置 `openclaw.json`（自动插入推荐配置）\n6. 安装 MemOS Cloud 插件（可选）\n7. 创建 `memory/` 目录\n8. 设置 Dreaming cron（03:00 UTC）\n\n**参数**：\n| 参数 | 说明 |\n|------|------|\n| `--skip-ollama` | 跳过 Ollama 安装（已安装时用） |\n| `--skip-memos` | 跳过 MemOS Cloud 安装 |\n| `--dry-run` | 预览模式，不实际执行 |\n\n---\n\n### 2.2 auto_memory_extract.py\n\n**用途**：两阶段记忆提取管道，从 MemOS Cloud 拉取的缓存文件中提取有价值记忆，写入 ARCHIVE.md（阶段一）和 MEMORY.md（阶段二）。\n\n```bash\npython3 user_workspace/scripts/auto_memory_extract.py --mode full --days 1\n```\n\n**核心参数**：\n| 参数 | 说明 |\n|------|------|\n| `--mode status` | 查看缓存文件状态，不执行提取 |\n| `--mode dry-run` | 测试模式，输出预览 |\n| `--mode full` | 生产模式执行提取 |\n| `--days N` | 拉取最近 N 天的 memos-cloud 缓存 |\n\n**Pipeline 流程（两通道）**：\n```\nmemos-cloud-YYYY-MM-DD.md\n    ↓\n┌─ 通道A: qwen3:8b 过滤去重 ─→ {add: [...], update: [], remove: []}\n└─ 通道B: memos-extractor-0.6b 结构化提取 ─→ memory_detail_list + preference_detail_list\n    ↓ 交叉验证（宽松 OR 逻辑）\n    ↓ SHA-256 去重\n    ↓\nStage 1 → ARCHIVE.md（完整条目，hash:xxxxxx 标记）\nStage 2 → MEMORY.md（一行摘要索引）\n```\n\n**关键配置**（读取环境变量或 `~/.openclaw/.env`）：\n- `MEMOS_API_KEY` — MemOS Cloud API Token\n- `OLLAMA_BASE=http://127.0.0.1:11434`\n- `LLM_MODEL=qwen3:8b`\n\n**NOISE_KEYWORDS**：标题含以下关键词的条目跳过不处理：\n```\nCron delivery check, Cron delivery process, OpenClaw doctor,\nDreams of a rack, Dashboard URL, Wiki同步, Cron delivery result,\n无待投递, 已搬运, heartbeat, HEARTBEAT, cron-delivery\n```\n\n---\n\n### 2.3 session-extract.py\n\n**用途**：扫描 sessions 目录的 `.jsonl` 文件，通过 MemOS extractor + reranker 两遍提取，写入 `.learnings/ERRORS.md`（错误记录）和 `memory/YYYY-MM-DD.md`（日记忆）。\n\n```bash\npython3 user_workspace/scripts/session-extract.py --days 5\npython3 user_workspace/scripts/session-extract.py --full    # 全量\npython3 user_workspace/scripts/session-extract.py --cleanup # 提取后清理可回收文件\npython3 user_workspace/scripts/session-extract.py --reset  # 重置处理状态\n```\n\n**核心参数**：\n| 参数 | 说明 |\n|------|------|\n| `--days N` | 拉取最近 N 天（默认 5） |\n| `--full` | 全量模式（等同于 `--days` 不限） |\n| `--pass-num 1\\|2` | 分析遍次：1=首次全量，2=查漏补缺 |\n| `--cleanup` | 提取完成后清理可回收文件 |\n| `--reset` | 重置 processedIds 状态，重新全量运行 |\n| `--dry-run` | 测试模式 |\n\n**两遍流程**：\n```\nPass 1: .jsonl → .analyzed1.jsonl\n  → .learnings/ERRORS.md（踩坑记录）\n  → .learnings/LEARNINGS.md（经验教训）\n\nPass 2: .analyzed1.jsonl → .analyzed2.jsonl → trash\n  → memory/YYYY-MM-DD.md\n```\n\n**保护逻辑**：\n- 自动跳过最新 2 条会话（main + qqbot），防止正在运行的会话被重命名\n- `cleanup_trashable_files()` 通过 sessions.json 双重保护 main 和 qqbot 会话\n\n**可回收文件类型**：\n| 类型 | 模式 | 保护 |\n|------|------|------|\n| trajectory | `*.trajectory.jsonl` | 清理 |\n| trajectory-path | `*.trajectory-path.json` | 清理 |\n| analyzed1 | `*.analyzed1` | 清理 |\n| analyzed2 | `*.analyzed2` | 清理 |\n| reset | `*.jsonl.reset.*` | 清理 |\n| deleted | `*.deleted.*` | 清理 |\n\n**状态文件**：`memory/.session-extract-state.json`（记录 processedIds）\n\n**reranker 三路 query**：\n```python\nQUERIES = [\n    (\"问题解决\", \"问题解决 错误修复 配置调试...\"),   # THRESHOLD_PROBLEM=0.15\n    (\"偏好经验\", \"偏好 习惯 用户喜欢 用户要求...\"),   # THRESHOLD_PREF=0.20\n    (\"技术细节\", \"error message报错 账号密码 key...\"),  # THRESHOLD_TECH=0.15\n]\n# 宽松 OR 逻辑：通过任一 query 即保留\n```\n\n---\n\n### 2.4 daily-memory-pipeline.sh\n\n**用途**：统一编排日终管线，替代三个独立 cron 任务。\n\n```bash\nbash user_workspace/scripts/daily-memory-pipeline.sh full    # 全量运行\nbash user_workspace/scripts/daily-memory-pipeline.sh sync-only  # 仅同步\nbash user_workspace/scripts/daily-memory-pipeline.sh extract-only # 仅提取\nbash user_workspace/scripts/daily-memory-pipeline.sh status     # 查看状态\n```\n\n**6 阶段流程**：\n```\n18:00 ─┬─ 阶段1: sync-pull  (Cloud → local)\n       │\n18:30 ─┼─ 阶段2: auto-memory v3 (ARCHIVE.md → MEMORY.md)\n       │\n18:40 ─┼─ 阶段3: sync-push + reindex (local → Cloud)\n       │\n22:00 ─┼─ 阶段4: session-extract (JSONL → .learnings/ + memory/)\n       │\n22:05 ─┤─ 阶段5: facts.db decay (激活 * 0.95)\n       │\n22:06 ─┴─ 阶段6: healthcheck (MEMORY.md/ARCHIVE.md 行数 + facts.db 统计)\n```\n\n**日志输出**：每次运行写入 `memory/.pipeline-run-YYYY-MM-DD.log`\n\n**非致命错误**：所有阶段失败时记录 ⚠️ 而不中断管线\n\n---\n\n### 2.5 sync-cloud-pull.py / sync-cloud-push.py / sync-all.sh\n\n**用途**：三方同步脚本，保持 MemOS Cloud ↔ 本地 Markdown ↔ 向量库三者一致。\n\n**sync-all.sh** 是编排脚本，同时调用 pull、push 和 index：\n```bash\nbash user_workspace/scripts/sync-all.sh\n```\n\n**sync-cloud-pull.py**：从 MemOS Cloud API 拉取新条目，写入 `memos-cloud-YYYY-MM-DD.md`\n**sync-cloud-push.py**：将本地 Markdown 变化推送到 MemOS Cloud（增量，只推 SHA256 变化的文件）\n\n**排除文件**（不推送到云）：\n- `memos-cloud-*.md`\n- `MEMORY_INDEX.md`\n- `DREAMS.md`\n- `.sync-*.json`\n\n---\n\n### 2.6 seed-facts-db.py\n\n**用途**：从 ARCHIVE.md 初始化 facts.sqlite 结构化知识图谱。\n\n```bash\npython3 scripts/seed-facts-db.py\n```\n\n提取 ARCHIVE.md 中的结构化条目，写入 facts.sqlite（entity/key/value + activation），用于精确查询和热度追踪。\n\n---\n\n### 2.7 facts_activation.py\n\n**用途**：Hebbian 激活 + 每日衰减，维持 facts 热度分级（HOT/WARM/COOL）。\n\n```bash\npython3 scripts/facts_activation.py\n```\n\n**激活规则**：每次查询触发 `activation += 0.5, access_count += 1`\n**衰减规则**：非永久 facts 每日 `activation *= 0.95`（下限 0.005）\n**分级**：\n| 等级 | 阈值 | 说明 |\n|------|------|------|\n| HOT | > 2.0 | 高频访问 facts |\n| WARM | 0.02 ~ 2.0 | 正常 facts |\n| COOL | < 0.02 | 待审核 GC 候选 |\n\n---\n\n### 2.8 candidates_review.py\n\n**用途**：P3 记忆候选审核机制，人工确认后再写入 ARCHIVE.md。\n\n```bash\npython3 scripts/candidates_review.py list          # 列出待审\npython3 scripts/candidates_review.py approve --id X # 批准写入ARCHIVE.md\npython3 scripts/candidates_review.py reject --id X  # 拒绝\npython3 scripts/candidates_review.py approve-all   # 批准所有\npython3 scripts/candidates_review.py stats          # 统计\n```\n\n**状态文件**：`memory/.candidates/review-state.json`\n\n---\n\n### 2.9 check_current_session.py\n\n**用途**：调试脚本，列出最近 5 个会话及其时间、路径、sessionKey。\n\n```bash\npython3 scripts/check_current_session.py\n```\n\n输出示例：\n```\nTop 5 most recent sessions:\n  [1] 2026-05-17 01:05:00 | 06d8446a-35df-4b1d-9230-d307b724fe6a.jsonl ← CURRENT SESSION (DO NOT RENAME)\n       sessionKey: c4e539d2-3c6c-43e8-9629-9ceb2d4e548c\n       path: /home/victor/.openclaw/agents/main/sessions/06d8446a-35df-4b1d-9230-d307b724fe6a.jsonl\n  [2] 2026-05-16 22:30:00 | 6b6ebef5-a2f0-4096-b2e9-5acac0e0622b.jsonl\n```\n\n---\n\n### 2.10 write_file.py\n\n**用途**：跨平台文本写入，自动处理 UTF-8 编码、BOM、CRLF 换行符。\n\n**不能直接调用**（被其他脚本间接调用）：\n```bash\npython3 scripts/write_file.py --path /tmp/test.txt --content-file /tmp/content.txt\n```\n\n或通过 `cross-platform-writer` skill 拦截所有 `write` 工具调用。\n\n---\n\n## 三、Cron 调度参考\n\n### 完整 cron 配置表\n\n```cron\n# ┌─────────── minute (0-59)\n# │ ┌───────── hour (0-23, UTC)\n# │ │ ┌─────── day of month (1-31)\n# │ │ │ ┌───── month (1-12)\n# │ │ │ │ ┌── day of week (0-7, 0=Sun)\n# │ │ │ │ │\n# ▼ ▼ ▼ ▼ ▼\n# ↓ ↓ ↓ ↓ ↓\n\n# Dreaming — 每日 UTC 03:00 (CST 11:00)\n0 3 * * *  /home/victor/github/anamnesis-hub/scripts/daily-memory-pipeline.sh full >> /home/victor/.openclaw/workspace/memory/.pipeline-run-$(date +\\%Y-\\%m-\\%d).log 2>&1\n\n# 三方同步 — CST 18:00 / 20:00 / 22:00 (= UTC 10:00 / 12:00 / 14:00)\n0 10,12,14 * * *  bash /home/victor/.openclaw/workspace/user_workspace/scripts/sync-all.sh\n\n# auto-memory v3 — CST 18:30 / 22:30 (= UTC 10:30 / 14:30)\n30 10,14 * * *  python3 /home/victor/.openclaw/workspace/user_workspace/scripts/auto_memory_extract.py --mode full --days 1\n\n# session-extract — CST 22:00 (= UTC 14:00)\n0 14 * * *  python3 /home/victor/.openclaw/workspace/user_workspace/scripts/session-extract.py --days 5 --cleanup\n\n# facts 衰减 — CST 22:05 (= UTC 14:05)\n5 14 * * *  python3 /home/victor/.openclaw/workspace/user_workspace/scripts/facts_activation.py\n```\n\n> 注：daily-memory-pipeline.sh 已覆盖大部分阶段，可作为单一 cron 替代上述多个独立任务。\n\n---\n\n## 四、依赖关系图\n\n```\nauto-setup.sh\n  ├── 安装 Ollama + bge-m3\n  ├── 安装 memory-core 插件\n  ├── 配置 openclaw.json\n  └── 安装 MemOS Cloud 插件（可选）\n\ndaily-memory-pipeline.sh\n  ├── 阶段1: sync-cloud-pull.py\n  ├── 阶段2: auto_memory_extract.py\n  │     └── 调用 memos-extractor-0.6b API + qwen3:8b\n  ├── 阶段3: sync-cloud-push.py + openclaw memory index\n  ├── 阶段4: session-extract.py\n  │     └── 调用 memos-extractor + memos-reranker API\n  ├── 阶段5: facts_activation.py (inline)\n  └── 阶段6: healthcheck (inline)\n\ncandidates_review.py\n  └── 读取 memory/.candidates/review-state.json\n  └── 写入 ARCHIVE.md\n\nseed-facts-db.py\n  └── 读取 ARCHIVE.md\n  └── 写入 facts.sqlite\n\nwrite_file.py\n  └── 被 auto_memory_extract.py / session-extract.py 间接调用\n  └── cross-platform-writer skill 拦截所有 write 工具\n```\n\n---\n\n## 五、常见问题\n\n| 问题 | 原因 | 解决 |\n|------|------|------|\n| extractor 返回 400 | tokens 超限 | 自动减半重试 |\n| sync-pull 无反应 | MEMOS_API_KEY 未设置 | 检查 `~/.openclaw/.env` |\n| session-extract 跳过所有文件 | pass 筛选模式错误 | 确认通配符 `.jsonl` vs `.analyzed1` |\n| facts.db 无数据 | 未运行 seed-facts-db.py | 先执行 seed 初始化 |\n| 跨平台写入乱码 | 未用 write_file.py | 所有文本写入统一走 cross-platform-writer |\n\nFile v1.13.2:references/setup-guide.md\n\n# OpenClaw Memory Hub — Manual Setup Guide\n\n> **Tip**: Use `bash scripts/auto-setup.sh` for one-command interactive setup. This is the manual alternative.\n\n## Prerequisites\n\n- OpenClaw >= v25.9.0\n- Node.js >= 18\n- Internet connection (for downloading Ollama and bge-m3 model)\n\n## Step 1: Install Ollama\n\n### Option A: Standard\n```bash\ncurl -fsSL https://ollama.com/install.sh | sh\n```\n\n### Option B: Intel Edition (OpenVINO backend)\n```bash\ncurl -L -o /usr/local/bin/ollama https://github.com/intel/ollama/releases/latest/download/ollama-linux-amd64\nchmod +x /usr/local/bin/ollama\n```\n\nStart Ollama:\n```bash\nollama serve\n```\n\nVerify:\n```bash\ncurl http://127.0.0.1:11434/api/tags\n```\n\n### Step 1.5: Pull bge-m3 Embedding Model\n\n```bash\nollama pull bge-m3\n```\n\n## Step 2: Plugin Conflict Check\n\nBefore installing memory-core, check if `subconscious-personality-guardian` is present:\n\n```bash\ngrep -q \"subconscious-personality-guardian\" ~/.openclaw/openclaw.json\n```\n\nIf found, add to `plugins.disabled` and `plugins.deny` in `openclaw.json`:\n```json\n{\n  \"plugins\": {\n    \"disabled\": [\"subconscious-personality-guardian\"],\n    \"deny\": [\"subconscious-personality-guardian\"]\n  }\n}\n```\n\n## Step 3: Install memory-core Plugin\n\n### Manual Config\n\nAdd to `openclaw.json`:\n\n```json\n{\n  \"plugins\": {\n    \"entries\": {\n      \"memory-core\": {\n        \"config\": {\n          \"embeddingUrl\": \"http://127.0.0.1:11434/api/embed\",\n          \"embeddingModel\": \"bge-m3\",\n          \"dimension\": 1024\n        }\n      }\n    }\n  }\n}\n```\n\nRestart Gateway:\n\n```bash\nopenclaw gateway restart\n```\n\nVerify status:\n\n```bash\nopenclaw memory status\n```\n\n## Step 3: Install MemOS Cloud Plugin (Optional)\n\nRequired for cross-device memory sync.\n\n### Recommended Full Config (in `openclaw.json`):\n\n```json\n{\n  \"plugins\": {\n    \"entries\": {\n      \"memos-cloud-openclaw-plugin\": {\n        \"enabled\": true,\n        \"config\": {\n          \"url\": \"https://your-memos-server.com\",\n          \"token\": \"your-memos-api-token\",\n          \"resetOnNew\": true,\n          \"recallEnabled\": true,\n          \"recallFilterFailOpen\": true,\n          \"asyncMode\": true,\n          \"addEnabled\": true,\n          \"queryPrefix\": \"important user context preferences decisions \",\n          \"memoryLimitNumber\": 9,\n          \"preferenceLimitNumber\": 6,\n          \"relativity\": 0.45,\n          \"maxItemChars\": 8000,\n          \"includeAssistant\": true,\n          \"includePreference\": true,\n          \"tags\": [\"openclaw\", \"memory\"]\n        },\n        \"hooks\": {\n          \"allowConversationAccess\": true\n        }\n      }\n    }\n  }\n}\n```\n\n**Key parameters explained:**\n\n| Parameter | Value | Why |\n|-----------|-------|-----|\n| `recallFilterFailOpen` | `true` | Don't block pipeline if MemOS API is unreachable — let memory-core still serve context |\n| `asyncMode` | `true` | Run asynchronously so memory-core can execute its own retrieval |\n| `resetOnNew` | `true` | Fresh context per session, no stale data carried over |\n| `queryPrefix` | `\"important user context preferences decisions \"` | Semantic anchor to prioritize recall relevance |\n| `memoryLimitNumber` | `9` | Max recalled memory items per session |\n| `preferenceLimitNumber` | `6` | Max recalled preference items per session |\n| `relativity` | `0.45` | Relevance threshold — filter out low-confidence matches |\n| `maxItemChars` | `8000` | Max characters per memory item |\n| `includeAssistant` | `true` | Include AI's own past outputs as memory context |\n| `includePreference` | `true` | Include detected user preferences in recall |\n| `tags` | `[\"openclaw\", \"memory\"]` | Tagging for multi-instance filtering |\n\n## Step 4: Configure Runtime Files\n\n### AGENTS.md — Memory Rules\n\nAdd to your `AGENTS.md`:\n\n```markdown\n## 🧠 Memory System\n\n- **L0 Runtime Retrieval**: memory-core plugin (Ollama bge-m3 → SQLite-vec), semantic + BM25 hybrid\n- **L1 Working Memory**: `memory/YYYY-MM-DD.md` files, 30-90 day retention\n- **L2 Long-term Memory**: `MEMORY.md` read-only base\n- **Dreaming**: Daily 03:00 UTC — auto-analyze and promote to L2\n- **Writing Rules**: Important decisions → L1 log; \"记住\" → L1 + verify via memory_search\n- **Lessons**: Update AGENTS.md / TOOLS.md\n- **Errors**: `.learnings/ERRORS.md`\n\n**MEMORY.md is read-only** — agent loads at bootstrap. New memories go to L1 files.\n```\n\n### SOUL.md — Core Identity\n\n```markdown\n## Continuity\n\nEach session is a fresh start. These files _are_ your memory. Read them. Update them.\n\n## Memory\n\n- Use memory files for persistence, not session recall\n- The Dreaming pipeline runs daily — no need to report it\n- Trust the system: auto-indexing + daily promotion covers continuity\n```\n\n### TOOLS.md — Environment Config\n\n```markdown\n## 🧠 Memory System (memory-core)\n\n- **Embedding backend**: Ollama (`http://127.0.0.1:11434`)\n- **Embedding model**: `bge-m3` (1024-dim, multi-language)\n- **Database**: `~/.openclaw/memory/main.sqlite`\n- **Index**: `openclaw memory index --force`\n- **Status**: `openclaw memory status`\n- **Dreaming**: Daily 03:00 UTC\n```\n\n## Step 5: Set Up Cron Jobs\n\n### Dreaming Pipeline (Daily 03:00 UTC)\n\n```bash\n# Using openclaw cron\nopenclaw cron add --name \"memory-dreaming-pipeline\" \\\n  --cron \"0 3 * * *\" \\\n  --agent \"default\" \\\n  --announce \\\n  --message \"Run Dreaming pipeline: scan logs, extract insights, promote to MEMORY.md\"\n```\n\n### Active Memory (Built-in Plugin)\n\nEnable in `openclaw.json` to activate pre-reply sub-agent memory search:\n\n```json5\n{\n  plugins: {\n    entries: {\n      \"active-memory\": {\n        enabled: true,\n        config: {\n          enabled: true,\n          agents: [\"main\"],\n          allowedChatTypes: [\"direct\"],\n          promptStyle: \"balanced\",\n          timeoutMs: 15000,\n          modelFallback: \"ollama/qwen3:8b\",\n        },\n      },\n    },\n  },\n}\n```\n\n### auto-memory v2 (18:30, 22:30 CST)\n\nPlace `scripts/auto_memory_extract.py` in `user_workspace/scripts/` and install the `auto-memory` skill:\n\n```bash\nopenclaw cron add --name \"auto-memory-extract\" \\\n  --cron \"30 18,22 * * *\" \\\n  --tz \"Asia/Shanghai\" \\\n  --task \"python3 user_workspace/scripts/auto_memory_extract.py --mode full\"\n```\n\nRequires MemOS Cloud plugin + sync to provide input data (`memos-cloud-*.md` files).\n\n### Three-Way Sync (18:00, 20:00, 22:00 CST)\n\nPlace sync scripts in `user_workspace/scripts/`:\n\n1. `sync-cloud-pull.py` — Pulls new entries from MemOS Cloud API\n2. `sync-cloud-push.py` — Pushes local markdown changes to Cloud\n3. `sync-vector-index.py` — Generates MEMORY_INDEX.md from vector DB\n4. `sync-all.sh` — Orchestrator\n\nCron schedule (UTC):\n\n```bash\n# 10:00 / 12:00 / 14:00 UTC = 18:00 / 20:00 / 22:00 CST\n0 10,12,14 * * * ~/.openclaw/workspace/user_workspace/scripts/sync-all.sh\n```\n\n## Step 6: Verify Setup\n\n```bash\n# Check memory status\nopenclaw memory status\n\n# Force index\nopenclaw memory index --force\n\n# List cron jobs\nopenclaw cron list\n\n# Check logs\nopenclaw logs --follow --plain\n```\n\n## Troubleshooting\n\n| Issue | Cause | Fix |\n|-------|-------|-----|\n| Embedding fails | Ollama not running | `ollama serve` |\n| bge-m3 not found | Model not pulled | `ollama pull bge-m3` |\n| Plugin not loaded | Restart needed | `openclaw gateway restart` |\n| Slow search | Index stale | `openclaw memory index --force` |\n| Cloud sync fails | Token expired | Refresh MemOS API token |\n| Dreaming not running | Cron disabled | `openclaw cron list` → verify |\n\nFile v1.13.2:references/sync-api.md\n\n# MemOS Cloud Sync API Reference\n\n## API Endpoints\n\n### GET /api/memo — Pull Memory\n\nFetch paginated memory entries from cloud.\n\n**Request**:\n\n```\nPOST /api/memo\nContent-Type: application/json\nAuthorization: Bearer <token>\n```\n\n**Body** (optional filter):\n\n```json\n{\n  \"and\": [\n    {\"create_time\": {\"gte\": \"2026-04-29 10:00:00\"}}\n  ]\n}\n```\n\n**Response**:\n\n```json\n{\n  \"memo\": [\n    {\n      \"id\": 1234,\n      \"content\": \"memory content...\",\n      \"create_time\": \"2026-04-29T10:30:00+08:00\"\n    }\n  ]\n}\n```\n\n**Pagination**: Not returned explicitly — use `filter` with `create_time.gte` cursor to paginate.\n\n### POST /api/memo — Push Memory\n\nAdd new memory entries to cloud.\n\n**Request**:\n\n```\nPOST /api/memo\nContent-Type: application/json\nAuthorization: Bearer <token>\n```\n\n**Push Multiple**:\n\n```json\n[\n  {\n    \"content\": \"# memory content\\nkey facts...\",\n    \"created_ts\": 1714350000\n  }\n]\n```\n\n**Response**: Returns created memo objects.\n\n## Sync State Files\n\n### `.sync-cloud-state.json` (Pull State)\n\nTracks last successful pull timestamp.\n\n```json\n{\n  \"last_pull\": \"2026-04-30 10:00:00\"\n}\n```\n\n### `.sync-push-state.json` (Push State)\n\nTracks SHA256 hashes per file for incremental push.\n\n```json\n{\n  \"memory/2026-04-29.md\": \"sha256hash...\",\n  \"memory/2026-04-30.md\": \"sha256hash...\"\n}\n```\n\n## Sync Flow Details\n\n### Pull (Cloud → MD)\n\n1. Read `last_pull` from state file\n2. Request `create_time >= last_pull` from cloud\n3. Append new entries to `memory/memos-cloud-*.md`\n4. Update `last_pull` to current time\n\n### Push (MD → Cloud)\n\n1. Calculate SHA256 for each `memory/*.md` file\n2. Compare with stored hash in state file\n3. Only push files with changed hashes\n4. Update state file with new hashes\n\n### Excluded Files\n\nNever pushed to cloud:\n- `memos-cloud-*.md` (already in cloud)\n- `MEMORY_INDEX.md` (generated locally)\n- `DREAMS.md` (transient analysis)\n- `.sync-*.json` (internal state)\n\n## Error Handling\n\n- HTTP 401: Token expired — renew and retry\n- HTTP 429: Rate limited — backoff and retry\n- Network error: Log and skip, retry next cycle\n- Partial failure: Continue with remaining items\n\n## Security\n\n- Token stored in `openclaw.json` or `.env`, never in memory files\n- SHA256 content verification before push\n- No sensitive data (hashed values) pushed to cloud\n\nFile v1.13.2:references/upgrade-reset.md\n\n# Upgrade & Reset — anamnesis-hub 升级与重置指南\n\n> 覆盖版本升级路径、重置处理状态、迁移数据、卸载步骤。\n> 最后更新：2026-05-17 | v1.13.1\n\n---\n\n## 一、版本升级路径\n\n### 从旧版本升级（< v1.11）\n\n| 旧版本 | 升级内容 | 操作 |\n|--------|----------|------|\n| < v1.9 | → v1.10：引入两阶段 pipeline | 运行 `auto_memory_extract.py --mode full` |\n| v1.10 | → v1.11：引入 P3 candidates 机制 | 运行 `candidates_review.py stats` 初始化状态文件 |\n| v1.11+ | → 最新：无需特殊迁移 | 直接覆盖脚本 |\n\n### 升级步骤\n\n```bash\ncd /home/victor/github/anamnesis-hub\n\n# 1. 拉取最新代码\ngit pull origin main\n\n# 2. 检查版本\ncat SKILL.md | grep version\n\n# 3. 更新 openclaw skill（如果通过 clawhub 安装）\nopenclaw skills update victorqr/anamnesis-hub\n\n# 4. 验证脚本可执行权限\nchmod +x scripts/*.sh scripts/*.py\n\n# 5. 可选：重置 session-extract 状态以重新全量处理历史会话\npython3 scripts/session-extract.py --reset\n\n# 6. 验证 healthcheck\nbash scripts/daily-memory-pipeline.sh status\n```\n\n---\n\n## 二、重置处理状态\n\n### session-extract 重置\n\n**场景**：历史会话需要重新提取，或 processedIds 状态损坏。\n\n```bash\n# 查看当前状态\ncat memory/.session-extract-state.json\n\n# 重置（清除 processedIds，重新全量运行）\npython3 scripts/session-extract.py --reset\n\n# 验证\ncat memory/.session-extract-state.json\n# 应显示: {\"processedIds\": []}\n```\n\n**效果**：重新扫描所有 .jsonl 文件，不再跳过已处理的会话。\n\n---\n\n### auto-memory 重置\n\n**场景**：需要重新从 memos-cloud 缓存提取所有记忆。\n\n**无专用 reset 参数**，但可以通过删除状态文件实现：\n```bash\n# 清除缓存，重新从云端拉取\nrm user_workspace/memos-cloud-cache/memos-cloud-*.md\n# 下次 sync-pull 会重新拉取全部历史\n```\n\n---\n\n### facts.db 重建\n\n**场景**：facts.sqlite 损坏或需要完全重建。\n\n```bash\n# 1. 备份现有 facts.db\ncp ~/.openclaw/memory/facts.sqlite ~/.openclaw/memory/facts.sqlite.bak.$(date +%Y%m%d)\n\n# 2. 删除现有 facts.db\nrm ~/.openclaw/memory/facts.sqlite\n\n# 3. 从 ARCHIVE.md 重新 seed\npython3 scripts/seed-facts-db.py\n\n# 4. 验证\npython3 -c \"\nimport sqlite3\nconn = sqlite3.connect('/home/victor/.openclaw/memory/facts.sqlite')\nn = conn.execute('SELECT COUNT(*) FROM facts').fetchone()[0]\ne = conn.execute('SELECT COUNT(DISTINCT entity) FROM facts').fetchone()[0]\nprint(f'facts.db: {n} facts / {e} entities')\n\"\n```\n\n---\n\n## 三、迁移数据\n\n### 从备份恢复\n\n```bash\n# 恢复 MEMORY.md\ncp ~/.openclaw/workspace/MEMORY.md.bak.20260512 ~/.openclaw/workspace/MEMORY.md\n\n# 恢复 ARCHIVE.md\ncp ~/.openclaw/workspace/ARCHIVE.md.bak.20260512 ~/.openclaw/workspace/ARCHIVE.md\n\n# 恢复 facts.db\ncp ~/.openclaw/memory/facts.sqlite.bak.20260512 ~/.openclaw/memory/facts.sqlite\n\n# 恢复 memory/ 日志\ncp -r ~/.openclaw/workspace/memory/*.md.bak.20260512 ~/.openclaw/workspace/memory/\n```\n\n### 迁移到新设备\n\n```bash\n# 1. 在新设备安装 anamnesis-hub\ngit clone https://github.com/VictorQR/anamnesis-hub.git\ncd anamnesis-hub\nbash scripts/auto-setup.sh\n\n# 2. 复制 workspace 文件\nrsync -avz --exclude='memos-cloud-*.md' --exclude='MEMORY_INDEX.md' \\\n  user@old-device:/home/victor/.openclaw/workspace/ \\\n  /home/victor/.openclaw/workspace/\n\n# 3. 复制 memory-core 向量库（可选）\nrsync -avz user@old-device:/home/victor/.openclaw/memory/ \\\n  /home/victor/.openclaw/memory/\n\n# 4. 配置 MemOS API Token\n# 将 ~/.openclaw/.env 从旧设备复制到新设备\n```\n\n---\n\n## 四、卸载步骤\n\n### 完全卸载\n\n```bash\n# 1. 停止并删除所有 cron 任务\nopenclaw cron list\n# 手动删除每个 cron 任务：\nopenclaw cron remove --id <job-id>\n\n# 2. 删除 memory-core 插件配置（从 openclaw.json 中移除）\n# 编辑 ~/.openclaw/openclaw.json，删除 plugins.entries.memory-core\n\n# 3. 删除 MemOS Cloud 插件配置（从 openclaw.json 中移除）\n# 编辑 ~/.openclaw/openclaw.json，删除 plugins.entries.memos-cloud-openclaw-plugin\n\n# 4. 重启 Gateway\nopenclaw gateway restart\n\n# 5. 删除工作区文件（可选，保留备份）\n# 先备份\ntar -czf ~/anamnesis-hub-backup-$(date +%Y%m%d).tar.gz \\\n  ~/.openclaw/workspace/memory/ \\\n  ~/.openclaw/workspace/MEMORY.md \\\n  ~/.openclaw/workspace/ARCHIVE.md \\\n  ~/.openclaw/memory/main.sqlite\n\n# 删除\nrm -rf ~/.openclaw/workspace/memory/\nrm -f ~/.openclaw/workspace/MEMORY.md\nrm -f ~/.openclaw/workspace/ARCHIVE.md\nrm -f ~/.openclaw/workspace/AGENTS.md\nrm -f ~/.openclaw/workspace/SOUL.md\nrm -f ~/.openclaw/workspace/USER.md\nrm -f ~/.openclaw/workspace/TOOLS.md\n\n# 6. 删除 scripts 目录\nrm -rf ~/.openclaw/workspace/user_workspace/scripts/\n\n# 7. 验证\nopenclaw memory status\n# 应显示: memory-core not configured 或类似\n```\n\n---\n\n## 五、常见问题\n\n| 问题 | 原因 | 解决 |\n|------|------|------|\n| 升级后脚本报错 | 依赖路径变化 | 检查 `WORKSPACE` 变量是否指向正确路径 |\n| 重置后重复提取 | state 未清除 | 确认 `processedIds` 列表为空 |\n| 迁移后向量检索失效 | 向量库未同步 | `openclaw memory index --force` 重建索引 |\n| MemOS Cloud 不同步 | API Token 失效 | 在新设备重新配置 token |\n| Ollama 模型缺失 | 新设备未安装 | `ollama pull bge-m3` |\n\n---\n\n## 六、备份策略建议\n\n| 数据 | 备份频率 | 保留份数 | 存储位置 |\n|------|----------|----------|----------|\n| MEMORY.md / ARCHIVE.md | 每日 | 7 份 | 本地 + 云端 |\n| memory/YYYY-MM-DD.md | 每周 | 30 份 | 本地 |\n| facts.sqlite | 每周 | 4 份 | 本地 |\n| openclaw.json | 每次配置变更 | 3 份 | 本地 |\n| .env | 每次 token 刷新 | 2 份 | 密码管理器 |\n\nArchive vv1.13.2: 22 files, 78995 bytes\n\nFiles: README.md (6366b), references/architecture.md (18643b), references/candidates-review.md (4156b), references/INDEX.md (2465b), references/memory-directory.md (8422b), references/pipeline-stages.md (11055b), references/scripts-reference.md (12796b), references/setup-guide.md (7382b), references/sync-api.md (2292b), references/upgrade-reset.md (5761b), scripts/auto_memory_extract.py (18373b), scripts/auto-setup.sh (12699b), scripts/candidates_review.py (6702b), scripts/check_current_session.py (1888b), scripts/daily-memory-pipeline.sh (7255b), scripts/facts_activation.py (7982b), scripts/seed-facts-db.py (8456b), scripts/session-extract.py (33227b), scripts/write_file.py (23228b), skill-card.md (3194b), SKILL.md (8367b), _meta.json (134b)\n\nFile vv1.13.2:SKILL.md\n\n---\nname: anamnesis-hub\ndescription: \"四层记忆架构 (Four-tier memory architecture for OpenClaw AI agents). 提供 L0 运行时语义检索 (Ollama bge-m3 + SQLite-vec 向量库)、L1 工作记忆 (每日 Markdown 日志)、L2 长期记忆 (MEMORY.md 索引 + ARCHIVE.md 档案 + facts.db 结构化知识图谱)、Dreaming 自动化提炼管线、三方同步 (Cloud ↔ Markdown ↔ Vector)、Active Memory 主动召回、auto-memory v3 两阶段提取 (ARCHIVE.md 归档 → MEMORY.md 摘要)、cross-platform-writer 跨平台写入。适用于首次配置持久化记忆、安装 memory-core/MemOS Cloud 插件、搭建多层记忆系统。\"\nversion: 1.13.2\n---\n\n# anamnesis-hub\n\nFour-tier memory architecture with automated Dreaming pipeline, three-way synchronization, Active Memory recall, and two-stage auto-extraction.\n\n## Overview\n\n| Tier | Layer | Technology | Purpose |\n|------|-------|-----------|---------|\n| **L0** | Runtime Retrieval | memory-core plugin (Ollama bge-m3 → SQLite + sqlite-vec) | Real-time semantic + BM25 hybrid search |\n| **L0** | Cloud Recall | MemOS Cloud plugin (*optional*) | Cross-device memory capture and recall |\n| **L0** | Active Memory | Built-in OpenClaw plugin | Pre-reply sub-agent memory search + context injection |\n| **L1** | Working Memory | `memory/YYYY-MM-DD.md` files | Daily summaries, todos, technical notes |\n| **L2a** | Long-term Index | `MEMORY.md` (~90 lines, read-only base) | Bidirectional index → ARCHIVE.md, 0% Auto-Extracted pollution |\n| **L2b** | Detailed Archive | `ARCHIVE.md` (~220 lines) | Full records with ← MEMORY.md:XX reverse references |\n| **L2c** | Structured KB | `facts.sqlite` (entity/key/value) | Precise lookup for IPs, ports, versions; activation/decay tracking |\n\n### Automated Pipelines\n\n| Pipeline | Schedule | Description |\n|----------|----------|-------------|\n| **Dreaming** | 03:00 UTC daily | Scan logs → DeepSeek analysis → promote to L2 |\n| **Three-way Sync** | 18:00 / 20:00 / 22:00 CST | Cloud ↔ Markdown ↔ Vector alignment |\n| **auto-memory v3** | 18:30 / 22:30 CST | MemOS Cloud facts → qwen3 filter → Stage1: ARCHIVE.md (SHA-256 dedup) → Stage2: MEMORY.md (summary) |\n| **session-extract** | 22:00 CST | Scan session JSONL → MemOS extractor/reranker → `.learnings/` + `memory/YYYY-MM-DD.md` (two-pass) |\n\n### Memory Flow (Unified Daily Pipeline)\n\n```\nagent_end → MemOS Cloud (cloud extraction)\n              ↓\n    ┌─ 18:00 sync-pull (Cloud → local cache) ─┐\n    │  18:30 auto-memory.py                    │\n    │  → Stage 1: ARCHIVE.md (SHA-256 dedup)   │\n    │  → Stage 2: MEMORY.md (one-line summary) │\n    │                                           │\n    │  20:00 sync-push + reindex                │\n    │  22:00 session-extract.py                 │\n    │  → Pass 1: .learnings/ERRORS.md           │\n    │  → Pass 2: memory/YYYY-MM-DD.md           │\n    │  → archive analyzed → trash               │\n    └───────────────────────────────────────────┘\n\nbefore_agent_start → MemOS Cloud recall\n                  + Active Memory sub-agent\n                  + memory-core (bge-m3 + BM25)\n              ↓\n        Layered context injected before reply\n```\n\n## Scripts\n\n| Script | Purpose |\n|--------|--------|\n| `auto_memory_extract.py` | v3 two-stage pipeline: ARCHIVE.md archive → MEMORY.md summary |\n| `session-extract.py` | Scan session JSONL → .learnings/ + memory/ (two-pass) |\n| `seed-facts-db.py` | Initialize facts.sqlite from ARCHIVE.md |\n| `facts_activation.py` | Hebbian activation + daily decay + Hot/Warm/Cool |\n| `daily-memory-pipeline.sh` | 6-stage unified daily pipeline |\n| `write_file.py` | Cross-platform text writer (UTF-8/BOM/CRLF) |\n| `auto-setup.sh` | One-command Ollama + memory-core + MemOS Cloud setup |\n\n## Setup\n\n### One-command auto-setup\n\n```bash\nbash scripts/auto-setup.sh\n```\n\n### Options\n\n```bash\nbash scripts/auto-setup.sh --skip-ollama   # Skip Ollama install\nbash scripts/auto-setup.sh --skip-memos    # Skip MemOS Cloud\nbash scripts/auto-setup.sh --dry-run       # Preview only\n```\n\n### Manual setup\n\nSee `references/setup-guide.md` for step-by-step manual configuration.\n\n## When to Use\n\n- Setting up OpenClaw memory for the first time\n- Configuring memory-core plugin with local Ollama embedding\n- Installing MemOS Cloud plugin for cross-device sync\n- Enabling Active Memory for pre-reply context injection\n- Setting up auto-memory pipeline for MEMORY.md curation\n- Installing cross-platform-writer for cross-OS file compatibility\n- Configuring automatic Dreaming and promotion pipelines\n- Setting up three-way sync between cloud, files, and vector DB\n\n## Plugin Conflicts\n\n### ❌ subconscious-personality-guardian ↔ memory-core\n\n**Incompatible.** Both use the same OpenClaw memory slot.\n\n**Fix**: Disable in openclaw.json:\n```json\n{\n  \"plugins\": {\n    \"disabled\": [\"subconscious-personality-guardian\"],\n    \"deny\": [\"subconscious-personality-guardian\"]\n  }\n}\n```\n\n### ✅ memory-core + MemOS Cloud\n\n**Compatible — designed to work in layers.**\n\n```\nUser message → MemOS Cloud (static facts) → memory-core (recent context)\n```\n\n### ✅ Active Memory + MemOS Cloud + memory-core\n\n**Compatible — triple-layer recall.**\n\n```\nUser message\n  → Active Memory sub-agent (searches all memory stores)\n  → MemOS Cloud (injects long-term facts & preferences)\n  → memory-core (semantic + BM25 hybrid retrieval)\n  → Agent receives layered context\n```\n\n### ✅ auto-memory + MemOS Cloud + memos-extractor\n\n**Designed to work together.** MemOS captures at `agent_end`, syncs to local files, then auto-memory reads those files for MEMORY.md curation. v1.10 adds a second channel: memos-extractor-0.6b API (MemOS self-developed model) returns structured facts + preferences, cross-validated against qwen3 output.\n\n## Components\n\n### 1. Memory Plugins (L0)\n\nSee `references/architecture.md` for full configuration.\n\n### 2. Memory Files (L1 + L2)\n\n```\n~/.openclaw/workspace/\n├── memory/\n│   ├── YYYY-MM-DD.md          # Daily working memory (auto-indexed)\n│   ├── MEMORY_INDEX.md        # Vector BM25 cluster summaries\n│   └── .sync-*.json           # Sync state files\n├── MEMORY.md                  # Long-term memory index (~90 lines)\n├── ARCHIVE.md                 # Detailed archive (~220 lines, ← bidirectional refs)\n├── AGENTS.md                  # Runtime context + memory rules\n└── user_workspace/\n    ├── memos-cloud-cache/         # Cloud-pulled memory (isolated from index)\n    │   └── memos-cloud-*.md\n    ├── scripts/\n    │   └── sync-*.py              # Sync scripts (pull/push/vector)\n    └── skills/\n        └── anamnesis-hub/   # Installed from ClawHub\n            └── scripts/           # Pipeline scripts (auto-memory, session-extract, etc.)\n```\n\n### 3. Pipeline Scripts (in anamnesis-hub/scripts/)\n\n- `auto_memory_extract.py` — v3 two-stage pipeline (ARCHIVE.md → MEMORY.md)\n- `session-extract.py` — Session JSONL scan → .learnings/ + memory/\n- `seed-facts-db.py` — Initialize facts.sqlite from ARCHIVE.md\n- `facts_activation.py` — Hebbian activation + daily decay\n- `daily-memory-pipeline.sh` — 6-stage unified daily pipeline\n- `write_file.py` — Cross-platform text file writer\n- `auto-setup.sh` — One-command Ollama + memory-core + MemOS Cloud setup\n\nSee `references/INDEX.md` for full documentation index.\n\n## File Reference\n\n👉 **完整文档请查阅 `references/INDEX.md`**\n\n| 文档 | 说明 |\n|------|------|\n| `references/INDEX.md` | 📌 文档入口索引（快速定位） |\n| `references/architecture.md` | 四层架构设计、插件配置、协同流程 |\n| `references/setup-guide.md` | 环境配置、手动安装步骤、cron 设置 |\n| `references/memory-directory.md` | memory/ 目录结构、状态文件、LCM 机制 |\n| `references/sync-api.md` | MemOS Cloud API 参考 |\n| `references/scripts-reference.md` | 所有脚本统一说明（用途、cron、依赖） |\n| `references/pipeline-stages.md` | 日终管线 6 阶段详解 |\n| `references/candidates-review.md` | P3 记忆候选审核机制 |\n| `references/upgrade-reset.md` | 升级路径、重置流程、卸载步骤 |\n\nFile vv1.13.2:README.md\n\n# 🧠 anamnesis-hub\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![ClawHub](https://img.shields.io/badge/ClawHub-anamnesis--hub-blue)](https://clawhub.ai/victorqr/anamnesis-hub)\n\n**Three-tier memory architecture for OpenClaw AI agents.**  \nPersistent, automated, cross-device memory that never forgets.\n\n---\n\n## 中文简介\n\n**anamnesis-hub** 是一套面向 OpenClaw AI Agent 的**四层记忆架构**，解决跨会话的\"AI 失忆\"问题：\n\n| 层级 | 功能 | 技术栈 |\n|------|------|--------|\n| **L0** 运行时检索 | 语义 + BM25 混合搜索，实时注入上下文 | memory-core + Ollama bge-m3 + SQLite-vec |\n| **L0** 云召回 *可选* | 多设备记忆同步，跨实例共享 | MemOS Cloud 插件 |\n| **L0** 主动召回 | 回复前 sub-agent 搜索相关记忆 | Active Memory 插件（内置） |\n| **L1** 工作记忆 | 按日归档的 Markdown 日志，人工可编辑 | `memory/YYYY-MM-DD.md` |\n| **L2a** 索引层 | 双向索引 ←→ ARCHIVE.md，零污染 ~90行 | `MEMORY.md`（只读基底） |\n| **L2b** 档案层 | 详细记录含反向引用 ← MEMORY.md:XX | `ARCHIVE.md`（~220行，历史垃圾已清理） |\n| **L2c** 知识图谱 | 结构化 entity/key/value，精确查找 + 热度追踪 | `facts.sqlite` |\n\n**自动化管线**：Dreaming（每日 UTC 03:00）→ 三方同步（18:00/20:00/22:00）→ auto-memory v3（两阶段管道：ARCHIVE.md 归档 → MEMORY.md 摘要）→ session-extract（扫描会话JSONL → MemOS提取 → .learnings/ + memory/）。\n\n### 附赠技能\n- **cross-platform-writer** — 跨平台文本写入，自动处理编码/BOM/CRLF\n- **auto-memory** — 对话记忆自动提取 (v3: 两阶段管道 + SHA-256 去重)\n- **seed-facts-db** — 从 ARCHIVE.md 初始化结构化知识图谱\n\n一行命令部署：`bash scripts/auto-setup.sh`\n\n---\n\n## One-Command Setup\n\n```bash\n# Clone and run\ngit clone https://github.com/VictorQR/anamnesis-hub.git\ncd anamnesis-hub\nbash scripts/auto-setup.sh\n```\n\nThe interactive script handles everything:\n\n| Step | What it does | Toggle |\n|------|-------------|--------|\n| ✅ | Install **Ollama** (standard or Intel) | `--skip-ollama` |\n| ✅ | Download **bge-m3** embedding model | — |\n| ✅ | **Plugin conflict check** (auto-detect subconscious-personality-guardian) | — |\n| ✅ | Install **memory-core** plugin | — |\n| ✅ | Configure **openclaw.json** with optimized defaults | Auto-insert on confirm |\n| ✅ | Install **MemOS Cloud** (*optional*) with full recommended config | `--skip-memos` |\n| ✅ | Create `memory/` directory | — |\n| ✅ | Set up **Dreaming cron** (03:00 UTC) | — |\n\n```bash\n# Preview mode\nbash scripts/auto-setup.sh --dry-run\n\n# Skip Ollama (already installed)\nbash scripts/auto-setup.sh --skip-ollama\n\n# Skip MemOS Cloud\nbash scripts/auto-setup.sh --skip-memos\n```\n\n---\n\n## Architecture\n\n| Tier | Layer | Technology | Purpose |\n|------|-------|-----------|---------|\n| **L0** | Runtime Retrieval | memory-core + Ollama bge-m3 + SQLite-vec | Real-time semantic + BM25 hybrid search |\n| **L0** | Cloud Recall | MemOS Cloud plugin (*optional*) | Cross-device memory capture & recall |\n| **L1** | Working Memory | `memory/YYYY-MM-DD.md` | Daily summaries, notes, decisions |\n| **L2a** | Long-term Index | `MEMORY.md` (~90 lines, 0% pollution) | Bidirectional index → ARCHIVE.md |\n| **L2b** | Detailed Archive | `ARCHIVE.md` (~220 lines) | Full records with ← MEMORY.md:XX references |\n| **L2c** | Structured KB | `facts.sqlite` (entity/key/value) | Precise lookup + activation/decay |\n\n### Automated Pipelines\n\n| Pipeline | Schedule | Job |\n|----------|----------|-----|\n| **Dreaming** | 03:00 UTC daily | Scan logs → DeepSeek analysis → promote to L2 |\n| **Three-Way Sync** | 18:00 / 20:00 / 22:00 CST (*optional*) | Cloud ↔ Markdown ↔ Vector alignment |\n| **auto-memory v3** | 18:30 / 22:30 CST | Stage 1: ARCHIVE.md (SHA-256 dedup) → Stage 2: MEMORY.md (summary) |\n| **session-extract** | 22:00 CST | Scan session JSONL → MemOS extractor/reranker → `.learnings/` + `memory/` (two-pass) |\n| **Wiki Compilation** | 04:00 UTC daily (*optional*) | Entity extraction → wiki vault pages |\n\n---\n\n## Installation via ClawHub\n\n```bash\nopenclaw skills install victorqr/anamnesis-hub\n```\n\nThis loads the SKILL.md into your agent's context so it knows how to set up and maintain the memory system.\n\n---\n\n## Prerequisites\n\n- [OpenClaw](https://openclaw.ai) >= 3.x\n- Node.js >= 18\n- Internet connection (for Ollama download and bge-m3 model)\n\n---\n\n## Skill Structure\n\n```\nanamnesis-hub/\n├── SKILL.md                          # Main skill entry (loaded into agent context)\n├── anamnesis-hub.skill                # Packaged .skill distribution file\n├── scripts/\n│   └── auto-setup.sh                  # One-command interactive setup script\n├── references/\n│   ├── INDEX.md                      # 📌 文档入口索引\n│   ├── architecture.md                # 四层架构设计、插件配置、协同流程\n│   ├── setup-guide.md                 # 环境配置、手动安装步骤、cron 设置\n│   ├── memory-directory.md           # memory/ 目录结构、状态文件、LCM 机制\n│   ├── sync-api.md                   # MemOS Cloud API 参考\n│   ├── scripts-reference.md         # 所有脚本统一说明（用途、cron、依赖）\n│   ├── pipeline-stages.md            # 日终管线 6 阶段详解\n│   ├── candidates-review.md          # P3 记忆候选审核机制\n│   └── upgrade-reset.md              # 升级路径、重置流程、卸载步骤\n└── README.md                         # This file\n```\n\n👉 **完整文档请查阅 `references/INDEX.md`**\n\n---\n\n## How It Works\n\n1. **Every conversation** is automatically indexed into the vector database\n2. **Each session** retrieves relevant context via semantic + BM25 hybrid search\n3. **Daily** the Dreaming pipeline analyzes logs and promotes insights to long-term memory\n4. **Tri-hourly** (*optional*) the three-way sync keeps cloud, local files, and vector store aligned\n5. **The Agent** never starts from scratch — it remembers you across sessions\n\n---\n\n## License\n\nMIT — free to use, modify, and redistribute.\n\n---\n\n## Author\n\n**VictorQR** — Open source OpenClaw memory infrastructure\n\nFile vv1.13.2:_meta.json\n\n{\n  \"ownerId\": \"kn79ykbnfmj09fxeevf1k0y88d82snbp\",\n  \"slug\": \"anamnesis-hub\",\n  \"version\": \"v1.13.2\",\n  \"publishedAt\": 1779075479901\n}\n\nFile vv1.13.2:references/architecture.md\n\n# OpenClaw Memory Hub — Architecture\n\n## Design Principles\n\n1. **Local-first**: Primary storage is local SQLite + markdown files; cloud is sync target, not source of truth\n2. **Progressive disclosure**: L0 catches everything, L1 structures daily context, L2 curates what matters\n3. **Zero-latency retrieval**: bge-m3 embedding runs on local Ollama; no API latency\n4. **Multi-language**: bge-m3 supports 100+ languages, 1024-dim vectors\n5. **DAG-based composition**: memory-core uses DAG for multi-agent memory lineage\n\n## Four-Tier Architecture\n\n```\n┌─────────────────────────────────────────────┐\n│                L0 — Runtime                  │\n│  ┌─────────────────┐  ┌──────────────────┐  │\n│  │  memory-core     │  │  MemOS Cloud     │  │\n│  │  (Ollama bge-m3) │  │  (Cloud Recall)  │  │\n│  │  SQLite + vec    │  │  Lifecycle hooks │  │\n│  └────────┬────────┘  └────────┬─────────┘  │\n│           │                     │            │\n│  ┌────────▼─────────────────────▼─────────┐  │\n│  │  Active Memory (built-in plugin)       │  │\n│  │  Pre-reply sub-agent memory search     │  │\n│  └────────┬───────────────────────────────┘  │\n│           │                                  │\n│  ┌────────▼───────────────────────────────┐  │\n│  │  Hybrid Search (semantic + BM25)       │  │\n│  └────────────────┬───────────────────────┘  │\n└───────────────────┼──────────────────────────┘\n                    │\n┌───────────────────▼──────────────────────────┐\n│              L1 — Working Memory              │\n│  memory/YYYY-MM-DD.md (30-90 day retention)  │\n│  - Daily conversation summaries              │\n│  - Technical notes & decisions               │\n│  - TODOs & reminders                         │\n│  - Hand-editable, human-readable             │\n└───────────────────┬──────────────────────────┘\n             L2a — Index Layer (MEMORY.md, ~90 lines)\n             L2b — Archive Layer (ARCHIVE.md, ~220 lines)\n             L2c — Knowledge Graph (facts.sqlite)\n                    │  Dreaming pipeline\n                    │  (Daily 03:00 UTC)\n                    ▼\n┌──────────────────────────────────────────────┐\n│           L2 — Long-term Memory               │\n│  MEMORY.md (read-only base, auto-curated)     │\n│  - Key user facts & profile                   │\n│  - Permanent decisions & preferences          │\n│  - Encrypted sensitive info (SHA-256)         │\n│  - Promoted high-scoring insights             │\n└──────────────────────────────────────────────┘\n```\n\n## Memory Plugins\n\n### memory-core (Primary)\n\n- **Provider**: OpenClaw Plugin Registry\n- **Embedding Backend**: Ollama (`http://127.0.0.1:11434`)\n- **Model**: `bge-m3` (BAAI, 1024-dimension, multi-language)\n- **Vector Storage**: SQLite + sqlite-vec extension\n- **Search**: Semantic vector similarity + BM25 keyword hybrid\n- **Database**: `~/.openclaw/memory/main.sqlite`\n- **Indexing**: Automatic on file save; manual via `openclaw memory index --force`\n\n### MemOS Cloud Plugin (Supplementary)\n\n- **Lifecycle Hook**: Captures and recalls memory via `POST /api/memo` hooks\n- **Recall**: Injects relevant memory context into session at bootstrap\n- **Cross-device**: Syncs memory across multiple OpenClaw instances\n\n## Dual-Plugin Collaborative Workflow\n\nThis is the core innovation of the architecture — **two plugins working in layers, not competing**:\n\n```\nUser sends message → Gateway receives\n         │\n         ▼\n┌─────────────────────────────────────────────┐\n│ 1. MemOS Cloud Plugin                       │\n│    (before_agent_start lifecycle hook)       │\n│                                              │\n│    → Injects:                                │\n│      • Long-term facts (\"User rides a 703F\") │\n│      • User preferences (\"Hates sweets\")     │\n│      • Profile constants (\"Name is Victor\")  │\n│                                              │\n│    Layer: Static / low-frequency truths      │\n└──────────────────┬──────────────────────────┘\n                   │\n                   ▼\n┌─────────────────────────────────────────────┐\n│ 2. memory-core                               │\n│    (Runtime semantic retrieval)               │\n│                                              │\n│    → Injects:                                │\n│      • Recent conversation snippets          │\n│      • Topically relevant past discussions   │\n│      • Working memory (today's context)      │\n│                                              │\n│    Layer: Dynamic / high-frequency context   │\n└──────────────────┬──────────────────────────┘\n                   │\n                   ▼\n┌─────────────────────────────────────────────┐\n│ Agent receives complete memory context:      │\n│                                              │\n│  \"Victor rides a 703F\" (fact — MemOS)        │\n│  + \"Yesterday discussed Zettelkasten\"        │\n│    (recent — memory-core)                    │\n│  + \"Today's weather forecast\" (today — L1)  │\n└─────────────────────────────────────────────┘\n```\n\n### Division of Responsibility\n\n| Aspect | MemOS Cloud | memory-core |\n|--------|-------------|-------------|\n| **Data type** | Facts, preferences, profile | Conversations, working context |\n| **Frequency** | Static / rarely changes | Dynamic / every session |\n| **Source** | Cloud API (`POST /api/memo`) | Local SQLite-vec index |\n| **Trigger** | `before_agent_start` hook | Runtime semantic query |\n| **Retention** | Permanent (cloud) | Configurable (last N chunks) |\n| **Scope** | Cross-device, long-term | Single device, recent history |\n| **Conflict** | None — complementary | None — complementary |\n\n### Critical Configurations\n\nThese settings in `openclaw.json` are **required** for the two plugins to work together without blocking each other:\n\n#### MemOS Cloud Plugin (`plugins.entries.memos-cloud-openclaw-plugin`)\n\n```json\n{\n  \"enabled\": true,\n  \"config\": {\n    \"resetOnNew\": true,\n    \"recallEnabled\": true,\n    \"recallFilterFailOpen\": true,\n    \"asyncMode\": true,\n    \"addEnabled\": true\n  },\n  \"hooks\": {\n    \"allowConversationAccess\": true\n  }\n}\n```\n\n| Setting | Why it matters |\n|---------|----------------|\n| `recallFilterFailOpen: true` | **Critical.** If MemOS recall fails (API timeout/network), don't block the pipeline — let memory-core still inject context |\n| `asyncMode: true` | **Critical.** MemOS runs asynchronously so memory-core can execute its own retrieval afterward |\n| `resetOnNew: true` | Fresh context per session — no stale data carried over |\n| `hooks.allowConversationAccess: true` | Allows hooks to read/write conversation data for memory injection |\n| `recallEnabled: true` | Enable recall at session start |\n| `addEnabled: true` | Auto-capture new memories during conversation |\n\n#### Recommended Full Config (with all tunable params)\n\n```json\n{\n  \"enabled\": true,\n  \"config\": {\n    \"resetOnNew\": true,\n    \"recallEnabled\": true,\n    \"recallFilterFailOpen\": true,\n    \"asyncMode\": true,\n    \"addEnabled\": true,\n    \"queryPrefix\": \"important user context preferences decisions \",\n    \"memoryLimitNumber\": 9,\n    \"preferenceLimitNumber\": 6,\n    \"relativity\": 0.45,\n    \"maxItemChars\": 8000,\n    \"includeAssistant\": true,\n    \"includePreference\": true,\n    \"tags\": [\"openclaw\", \"memory\"]\n  },\n  \"hooks\": {\n    \"allowConversationAccess\": true\n  }\n}\n```\n\n#### memory-core Plugin (`plugins.entries.memory-core`)\n\n```json\n{\n  \"enabled\": true,\n  \"config\": {\n    \"dreaming\": {\n      \"enabled\": true\n    }\n  }\n}\n```\n\n`dreaming.enabled: true` activates the daily Dreaming pipeline.\n\n### Why This Works\n\n- **No overlap**: MemOS handles static facts; memory-core handles dynamic conversation context\n- **Fail-safe**: If MemOS Cloud is unreachable, `recallFilterFailOpen: true` keeps the pipeline running\n- **Async execution**: MemOS hooks fire async; memory-core retrieval runs independently\n- **Layered context**: Agent receives who-you-are facts first, then what-we-talked-about context\n\n## File Anatomy\n\n### Runtime Context Files\n\n| File | Purpose |\n|------|---------|\n| `AGENTS.md` | Memory rules, safe operation protocol, execution guidelines |\n| `SOUL.md` | Agent persona, core principles, independent values |\n| `USER.md` | User profile, preferences, communication style |\n| `TOOLS.md` | Environment-specific configuration, known issues |\n| `MEMORY.md` | Long-term facts (L2), read-only base loaded at bootstrap |\n\n### Daily Memory Files\n\n```\nmemory/\n├── YYYY-MM-DD.md          # Day's conversation log, key decisions\n├── MEMORY_INDEX.md         # Auto-generated vector BM25 summary\n├── memos-cloud-*.md        # Cloud-pulled memory (read-only cache)\n├── .sync-cloud-state.json  # Cloud pull cursor (last fetch timestamp)\n├── .sync-push-state.json   # Cloud push state (SHA256 per file)\n└── DREAMS.md              # Latest Dreaming analysis output\n├── projects/\n│   ├── README.md          # Project memory index\n│   ├── clawguard.md       # Per-project memory (clawguard)\n│   ├── anamnesis-hub.md\n│   └── openclaw-dir-inventory.md\n```\n\n### Project Memory (P2)\n\nEach GitHub project gets an independent `memory/projects/{slug}.md` file:\n- Isolates project-specific decisions, lessons, and conventions\n- Prevents project context from polluting MEMORY.md\n- Agent-independent: can be loaded by specific sub-agents\n- Template: project slug, GitHub URL, status, key decisions, TODOs\n\n### Alias Resolution (P2)\n\nfacts.db `aliases` table maps colloquial names to canonical entities:\n- \"软路由\" → \"iStoreOS\"\n- \"小爱\" → \"卧室小爱音箱\"\n- \"anamnesis-hub\" → \"anamnesis-hub\"\n\nEnables natural language queries like \"软路由的IP是多少\" to resolve to `SELECT * FROM facts WHERE entity='iStoreOS' AND key='ip'`.\n\n## Automated Pipelines\n\n### Dreaming Pipeline\n\nRuns daily at **03:00 UTC** (11:00 CST):\n\n1. **REM Backfill**: Scans recent session logs, extracts structured facts\n2. **DeepSeek Analysis**: Runs AI analysis on extracted facts:\n   - Preference changes\n   - Lessons learned\n   - Relationship updates\n   - Project criteria\n3. **Dreaming Promotion**: Evaluates candidates against threshold (minScore: 0.8, max 10 items) and promotes to MEMORY.md\n\nOutput delivered via QQ:\n- 📄 REM Backfill: status report\n- 🔬 DeepSeek 分析: extracted insights count\n- 🌙 Dreaming Promotion: promoted count\n\n### auto-memory v3 (Two-Stage Pipeline)\n\nRuns at **18:30 / 22:30 CST** (30 min after three-way sync):\n\nReads the latest MemOS Cloud synced facts, filters noise, and writes in two stages:\n1. **Stage 1 — ARCHIVE.md archive**: Full entries with SHA-256 dedup, organized under `## Auto-Extracted 历史归档`\n2. **Stage 2 — MEMORY.md summary**: One-line index like `Auto-Extracted ({date}): {n} 条新记忆 → ARCHIVE.md:{line}`\n\n**Key difference from v2**: No longer appends raw entries to MEMORY.md. Detailed content goes to ARCHIVE.md, only a summary line stays in MEMORY.md.\n\n```\nagent_end → MemOS Cloud (real-time capture + cloud LLM extraction)\n              ↓\n        sync-cloud-pull.py (every 30 min)\n              ↓\n        memos-cloud-YYYY-MM-DD.md (structured facts)\n              ↓\n        auto_memory_extract.py → qwen3 filter + memos-extractor-0.6b\n              ↓\n        ┌─ Stage 1: ARCHIVE.md (完整归档, SHA-256 去重)\n        └─ Stage 2: MEMORY.md (一行摘要, 不写入详细内容)\n```\n\n**Key difference from v2**: No longer appends raw entries to MEMORY.md. Two-stage pipeline ensures ARCHIVE.md gets full content with SHA-256 dedup, and MEMORY.md stays clean as a pure index layer (~90 lines).\n\n### Three-Way Sync\n\nRuns at **18:00 / 20:00 / 22:00 CST** (covering user active hours 19–23):\n\n```\n┌──────────┐    ┌──────────┐    ┌──────────┐\n│  Cloud   │◄──►│Markdown  │◄──►│  Vector  │\n│ (Memos)  │    │ (Files)  │    │ (SQLite) │\n└──────────┘    └──────────┘    └──────────┘\n     │               │               │\n     │  sync-pull    │  sync-push    │  sync-index\n     ▼               ▼               ▼\n  memos-cloud*.md → Cloud API     MEMORY_INDEX.md\n```\n\n**Sync Rules**:\n- Cloud → MD: New/changed entries since last pull (cursor-based)\n- MD → Cloud: SHA256 hash comparison, push only changed files\n- Vector → MD: FTS5 BM25 clustering, score > 0.65, grouped by source_file\n- Excluded from push: `memos-cloud-*.md`, `MEMORY_INDEX.md`, `DREAMS.md`, `.sync-*.json`\n\n### Wiki Compilation (Planned)\n\nRuns daily at **04:00 UTC** after Dreaming completes:\n- Scan memory-core DB + latest Dreaming output\n- Extract new entities, concepts, syntheses\n- Deduplicate via fuzzy filename matching\n- Write new wiki vault pages\n- Report new page count only\n\n### session-extract\n\nRuns at **22:00 CST** as part of unified pipeline:\n- Scans `~/.openclaw/agents/main/sessions/` JSONL files\n- Two-pass extraction via MemOS extractor + reranker\n- **Pass 1**: `.jsonl` → `.analyzed1` → `.learnings/ERRORS.md` + `.learnings/LEARNINGS.md`\n- **Pass 2**: `.analyzed1` → `.analyzed2` → archive to trash\n- Output: `.learnings/` (permanent) + `memory/YYYY-MM-DD.md`\n- State tracking: `memory/.session-extract-state.json`\n- Auto-skips running session to prevent corruption\n\n### facts.db Activation & Decay\n\n**facts.db** provides structured entity/key/value lookup with Hebbian activation:\n\n| Component | Mechanism |\n|-----------|----------|\n| **Activation** | Each fact query triggers `activation += 0.5, access_count += 1` |\n| **Daily Decay** | Non-permanent facts: `activation *= 0.95` (floor: 0.005) |\n| **Classification** | HOT (>2.0) / WARM (0.02~2.0) / COOL (<0.02) |\n| **GC Candidates** | COOL facts flagged for review, not auto-deleted |\n\n### LCM Pre-Write Protection\n\nConfigured in `openclaw.json` under `agents.defaults.memoryFlush`:\n- `enabled: true` — activate pre-compaction flush\n- `triggerPercent: 80` — flush when context window reaches 80%\n- `flushTo: memory/YYYY-MM-DD.md` — write critical decisions to daily log\n- `flushMode: critical_decisions_only` — preserve confirmed decisions, skip noise\n\nThis prevents the \"Summer Yue scenario\" where compaction causes loss of chat-only instructions.\n\n## Sensitive Information\n\nSHA-256 hashing with salt `VictorQR_7x9K2mP` for:\n\n- Passwords & verification hashes\n- Phone numbers, ID numbers\n- Email addresses (all accounts)\n- Social media IDs (WeChat, QQ, Douyin)\n\nStored in `MEMORY.md` hash table, verified by SHA-256 comparison before access.\n\n## Known Conflicts & Compatibility\n\n### ❌ subconscious-personality-guardian ↔ memory-core\n\n**Status: Incompatible**\n\nBoth plugins attempt to use the same OpenClaw memory slot. Installing both causes:\n- Memory write conflicts (race conditions on save)\n- Retrieval logic duplication (both inject into context)\n- Context management conflicts (duplicate or conflicting memory context in prompts)\n\n**Fix**: Disable or remove `subconscious-personality-guardian`:\n```json\n// openclaw.json\n{\n  \"plugins\": {\n    \"disabled\": [\"subconscious-personality-guardian\"],\n    \"deny\": [\"subconscious-personality-guardian\"]\n  }\n}\n```\n\n### ✅ memory-core + MemOS Cloud Plugin\n\n**Status: Compatible — designed to work in layers**\n\nThey are **not competing** memory systems. They operate at different layers with different responsibilities:\n\n| | memory-core | MemOS Cloud |\n|--|-------------|-------------|\n| Role | Recent/working context | Long-term facts & preferences |\n| Data | Conversations, discussions | User profile, habits, decisions |\n| Timing | Every session (runtime query) | Session start (lifecycle hook) |\n| Storage | Local SQLite-vec | Remote cloud API |\n\n**Execution order**:\n1. MemOS Cloud fires `before_agent_start` → injects static facts\n2. memory-core queries local vector DB → injects dynamic context\n3. Agent receives layered memory: \"who the user is\" + \"what we talked about recently\"\n\n**No overlap**: One handles local retrieval, the other handles cloud sync. Both should be enabled simultaneously for best results.\n\n### ⚠️ MemOS Cloud Plugin + ReMe\n\n**Status: Potentially conflicting**\n\nBoth provide cloud memory functionality. Installing both may cause:\n- File layer overlap (both write to `memory/`)\n- Retrieval logic duplication\n- API endpoint conflicts (competing memory services)\n\n**Recommendation**: Choose one. MemOS Cloud is recommended if using OpenClaw natively.\n\n## Performance Characteristics\n\n- **Embedding speed**: ~50ms per query on RTX 4070 Super (12GB VRAM)\n- **Database size**: ~100MB for 10K+ memory chunks\n- **Hybrid search latency**: <100ms for top-10 results\n- **Dreaming pipeline**: ~30 seconds per full run\n- **Sync run**: ~10 seconds per direction\n\nFile vv1.13.2:references/candidates-review.md\n\n# Candidates Review — P3 记忆候选审核机制\n\n> Dreaming / auto-memory 产出的候选记忆不再直接写入，需人工确认后再归档。\n> 最后更新：2026-05-17 | v1.13.1\n\n---\n\n## 一、背景与目的\n\n传统流程中，Dreaming 和 auto-memory 自动将记忆写入 ARCHIVE.md/MEMORY.md，存在噪音污染风险。P3 机制引入人工审核层：\n\n```\n自动产出（Dreaming/auto-memory）\n    ↓\nmemory/.candidates/YYYY-MM-DD.json（待审队列）\n    ↓\n用户确认（approve / reject）\n    ↓\n写入 ARCHIVE.md / MEMORY.md\n```\n\n**P3 含义**：Priority 3，第三优先级审核（低于 P1 即时生效、P2 自动归档）。\n\n---\n\n## 二、流程详解\n\n### 2.1 候选来源\n\n| 来源 | 说明 |\n|------|------|\n| **Dreaming** | 每日 UTC 03:00，扫描日志 → DeepSeek 分析 → 高分候选（minScore 0.8，max 10 items） |\n| **auto-memory v3** | CST 18:30/22:30，MemOS Cloud → qwen3 过滤 → 候选条目 |\n| **session-extract** | CST 22:00，JSONL 扫描 → MemOS extractor/reranker → 候选条目 |\n\n### 2.2 候选文件格式\n\n`memory/.candidates/YYYY-MM-DD.json`：\n```json\n{\n  \"pending\": {\n    \"cand_001\": {\n      \"date\": \"2026-05-17\",\n      \"category\": \"偏好/习惯\",\n      \"content\": \"用户偏好晚上工作，凌晨1点后效率最高\",\n      \"source\": \"dreaming\",\n      \"score\": 0.92\n    },\n    \"cand_002\": {\n      \"date\": \"2026-05-17\",\n      \"category\": \"技术/配置\",\n      \"content\": \"升仕703F摩托车每8000km需要更换机油\",\n      \"source\": \"auto-memory\",\n      \"score\": 0.87\n    }\n  },\n  \"approved\": {},\n  \"rejected\": {},\n  \"total_reviewed\": 0\n}\n```\n\n### 2.3 审核状态\n\n| 状态 | 说明 |\n|------|------|\n| `pending` | 待审核，需用户确认 |\n| `approved` | 已批准，写入 ARCHIVE.md |\n| `rejected` | 已拒绝，不写入 |\n\n---\n\n## 三、审核命令\n\n```bash\n# 列出所有待审候选（按 score 倒序）\npython3 scripts/candidates_review.py list\n\n# 批准指定候选（写入 ARCHIVE.md）\npython3 scripts/candidates_review.py approve --id cand_001\n\n# 拒绝指定候选\npython3 scripts/candidates_review.py reject --id cand_001\n\n# 批准所有待审\npython3 scripts/candidates_review.py approve-all\n\n# 审核统计\npython3 scripts/candidates_review.py stats\n```\n\n---\n\n## 四、输出示例\n\n### list 输出\n```json\n{\n  \"status\": \"ok\",\n  \"pending_count\": 2,\n  \"candidates\": [\n    {\n      \"id\": \"cand_001\",\n      \"date\": \"2026-05-17\",\n      \"category\": \"偏好/习惯\",\n      \"content\": \"用户偏好晚上工作，凌晨1点后效率最高\",\n      \"source\": \"dreaming\",\n      \"score\": 0.92\n    },\n    {\n      \"id\": \"cand_002\",\n      \"date\": \"2026-05-17\",\n      \"category\": \"技术/配置\",\n      \"content\": \"升仕703F摩托车每8000km需要更换机油\",\n      \"source\": \"auto-memory\",\n      \"score\": 0.87\n    }\n  ]\n}\n```\n\n### approve 输出\n```json\n{\n  \"status\": \"approved\",\n  \"id\": \"cand_001\",\n  \"written_to\": \"/home/victor/.openclaw/workspace/ARCHIVE.md\"\n}\n```\n\n### stats 输出\n```json\n{\n  \"status\": \"ok\",\n  \"pending\": 2,\n  \"approved\": 15,\n  \"rejected\": 3,\n  \"total_reviewed\": 18\n}\n```\n\n---\n\n## 五、approve-all 行为\n\n`approve-all` 依次对每个 pending 候选执行 approve：\n1. 读取当前 state\n2. 写入 ARCHIVE.md（追加到末尾）\n3. 从 pending 移到 approved\n4. 重载 state（避免状态冲突）\n5. 重复直到所有 pending 处理完毕\n\n---\n\n## 六、ARCHIVE.md 写入格式\n\n批准后的条目写入 ARCHIVE.md 末尾，格式：\n```markdown\n<!-- candidate:cand_001 -->\n- **偏好/习惯** (已审核 2026-05-17): 用户偏好晚上工作，凌晨1点后效率最高\n```\n\n---\n\n## 七、与记忆架构的集成\n\n```\nDreaming / auto-memory / session-extract\n    ↓ 产出候选\nmemory/.candidates/YYYY-MM-DD.json\n    ↓ 用户审核\nARCHIVE.md（完整条目）\n    ↓\nMEMORY.md（两阶段摘要）\n    ↓\nfacts.sqlite（结构化查询）\n```\n\n候选审核是自动归档前的最后一层过滤，确保只有用户确认过的内容进入长期记忆。\n\n---\n\n## 八、状态文件位置\n\n`memory/.candidates/review-state.json`（由 `candidates_review.py` 自动管理）\n\n> ⚠️ 不要手动编辑此文件。\n\nFile vv1.13.2:references/INDEX.md\n\n# anamnesis-hub — 文档索引\n\n> 本目录包含 anamnesis-hub 技能的完整技术文档。\n> 最新版本：v1.13.1 | 最后更新：2026-05-17\n\n---\n\n## 📚 文档总览\n\n| 文档 | 说明 |\n|------|------|\n| **[architecture.md](architecture.md)** | 四层记忆架构设计、插件协同工作流、文件解剖、插件冲突说明 |\n| **[setup-guide.md](setup-guide.md)** | 环境配置、手动安装步骤、cron 任务设置、所有配置参数详解 |\n| **[memory-directory.md](memory-directory.md)** | `memory/` 目录结构、状态文件、LCM 防失控机制、P3 候选审核流程 |\n| **[sync-api.md](sync-api.md)** | MemOS Cloud API 端点、同步状态文件、安全机制 |\n| **[scripts-reference.md](scripts-reference.md)** | 所有脚本统一说明：用途、cron 触发时间、依赖关系、关键参数 |\n| **[pipeline-stages.md](pipeline-stages.md)** | 日终管线 6 阶段详解：输入/输出/依赖/失败处理 |\n| **[candidates-review.md](candidates-review.md)** | P3 记忆候选审核机制：Dreaming → 审核队列 → ARCHIVE.md 完整流程 |\n| **[upgrade-reset.md](upgrade-reset.md)** | 升级路径、重置流程、卸载步骤 |\n\n---\n\n## 🗂️ 文档层级关系\n\n```\n入口：README.md / SKILL.md\n    ↓\nreferences/INDEX.md（本文档）\n    ├── architecture.md       ← 必读：理解架构\n    ├── setup-guide.md        ← 必读：安装配置\n    ├── memory-directory.md   ← 进阶：目录结构\n    ├── sync-api.md           ← 进阶：云同步\n    ├── scripts-reference.md  ← 运维：脚本说明\n    ├── pipeline-stages.md    ← 运维：管线流程\n    ├── candidates-review.md ← 运维：候选审核\n    └── upgrade-reset.md      ← 运维：升级重置\n```\n\n---\n\n## 🔗 外部链接\n\n| 平台 | 链接 |\n|------|------|\n| **ClawHub** | https://clawhub.ai/victorqr/anamnesis-hub |\n| **GitHub** | https://github.com/VictorQR/anamnesis-hub |\n| **Skill 安装** | `openclaw skills install victorqr/anamnesis-hub` |\n\n---\n\n## 📌 快速定位\n\n| 场景 | 文档 |\n|------|------|\n| 首次安装 | `setup-guide.md` + `architecture.md` |\n| 理解管线流程 | `pipeline-stages.md` + `scripts-reference.md` |\n| 排查同步问题 | `sync-api.md` + `memory-directory.md` |\n| 配置 cron | `setup-guide.md` 第 5 步 |\n| P3 记忆审核 | `memory-directory.md` 第十节 + `candidates-review.md` |\n| 升级/重置 | `upgrade-reset.md` |\n\nFile vv1.13.2:references/memory-directory.md\n\n# memory/ 目录结构详解\n\n> 最后更新：2026-05-16 (v1.13.1)\n> 本文档说明 `~/.openclaw/workspace/memory/` 下所有文件的作用及其与记忆架构的关系。\n\n---\n\n## 目录总览\n\n```\nmemory/\n├── YYYY-MM-DD.md              # L1 短时记忆日志\n├── MEMORY_INDEX.md            # 向量索引快照（自动生成）\n├── projects/                  # P2: 项目独立记忆\n│   ├── README.md\n│   └── {slug}.md\n├── .dreams/                   # Dreaming 管线工作目录\n│   ├── daily-ingestion.json\n│   ├── events.jsonl\n│   ├── phase-signals.json\n│   ├── session-corpus/\n│   ├── session-ingestion.json\n│   └── short-term-recall.json\n├── archive/                   # 归档记录\n├── dreaming/                  # Dreaming 产出目录\n│   └── light/\n│       └── YYYY-MM-DD.md\n├── .sync-cloud-state.json     # Cloud 同步游标\n├── .sync-push-state.json      # Cloud 推送状态\n├── .session-extract-state.json # 会话提取状态\n├── .cron-delivery-heartbeat.json # 心跳消息队列\n├── .cron-delivery.json        # 历史投递记录\n├── .gateway-pid.json          # Gateway 进程跟踪\n└── .pipeline-run-YYYY-MM-DD.log # 管道运行日志\n```\n\n---\n\n## 一、L1 短时记忆日志 (`YYYY-MM-DD.md`)\n\n| 属性 | 值 |\n|------|-----|\n| **来源** | Agent 会话中自主写入 / session-extract.py 提取 |\n| **内容** | 当日会话摘要、关键决策、技术笔记、待办事项 |\n| **格式** | 自由 Markdown，人工可编辑 |\n| **生命周期** | 30-90 天保留 |\n| **与记忆架构关系** | **核心 L1 层** — 向量搜索的主要语料来源 |\n\n---\n\n## 二、向量索引快照 (`MEMORY_INDEX.md`)\n\n| 属性 | 值 |\n|------|-----|\n| **来源** | `sync-vector-index.py` 自动生成，三方同步时更新 |\n| **生成方式** | FTS5 BM25 聚类，score > 0.65 的高权重 chunks |\n| **内容** | 来源分布（memory/sessions 占比）、高频文件 Top10、最近更新文件 |\n| **频率** | 每日更新 |\n| **与记忆架构关系** | **辅助可读层** — 不是检索用，是人类可读的索引健康快照 |\n\n### 示例内容\n\n```markdown\n# 向量索引快照\n\n> 总索引: 1394 个语义块, 2 个来源\n\n## 📊 来源分布\n- **memory**: 1331 chunks (95%)\n- **sessions**: 63 chunks (5%)\n\n## 📂 高频文件\n- memory/2026-05-12.md → 242 chunks\n```\n\n### 注意事项\n- ❌ **不要**写入 L2 或 ARCHIVE —— 它是自动生成的衍生数据\n- ✅ 用于验证向量库是否正常工作（chunk 数量/分布是否合理）\n\n---\n\n## 三、P2 项目记忆 (`projects/`)\n\n| 属性 | 值 |\n|------|-----|\n| **来源** | 手动创建 + Agent 维护 |\n| **内容** | 每个 GitHub 项目独立一个 `{slug}.md` |\n| **格式** | 标准模板：项目名、GitHub URL、状态、关键决策、待办 |\n| **与记忆架构关系** | **L2c 扩展** — 防止项目记忆污染主 MEMORY.md |\n\n### 当前活跃项目\n\n| 文件 | GitHub | 说明 |\n|------|--------|------|\n| `clawguard.md` | VictorQR/clawguard | 安全守护插件 |\n| `anamnesis-hub.md` | VictorQR/anamnesis-hub | 记忆架构 hub |\n| `openclaw-dir-inventory.md` | VictorQR/openclaw-dir-inventory | 目录清单管理 |\n\n---\n\n## 四、状态文件 (`.json`)\n\n### 4.1 `.sync-cloud-state.json`\n\n追踪 MemOS Cloud 同步游标，防止重复拉取。\n\n```json\n{\n  \"lastPullTime\": \"2026-05-15 22:03:32\",\n  \"lastPage\": 6,\n  \"hasMore\": false\n}\n```\n\n| 字段 | 说明 |\n|------|------|\n| `lastPullTime` | 上次拉取的时间戳 |\n| `lastPage` | 上次拉取的页码 |\n| `hasMore` | 是否还有更多数据 |\n\n**使用者**: `sync-cloud-pull.py`\n\n---\n\n### 4.2 `.sync-push-state.json`\n\n追踪本地文件 SHA-256 哈希，用于云端增量推送比对。\n\n```json\n{\n  \"files\": {\n    \"MEMORY.md\": \"abc123...\",\n    \"ARCHIVE.md\": \"def456...\"\n  }\n}\n```\n\n| 字段 | 说明 |\n|------|------|\n| `files` | 文件名 → SHA-256 哈希映射 |\n\n**使用者**: `sync-cloud-push.py`\n\n---\n\n### 4.3 `.session-extract-state.json`\n\n追踪已处理的会话 ID，防止重复提取。\n\n```json\n{\n  \"version\": 1,\n  \"lastRun\": \"2026-05-15\",\n  \"processedIds\": [\"62463b70-...\", \"8fc31a7c-...\"]\n}\n```\n\n| 字段 | 说明 |\n|------|------|\n| `version` | 状态格式版本 |\n| `lastRun` | 上次运行日期 |\n| `processedIds` | 已处理的 session ID 列表 |\n\n**使用者**: `session-extract.py`\n\n---\n\n### 4.4 `.cron-delivery-heartbeat.json`\n\n心跳消息投递队列。\n\n```json\n{\n  \"pending\": []\n}\n```\n\n| 字段 | 说明 |\n|------|------|\n| `pending` | 待投递消息数组 |\n\n**使用者**: HEARTBEAT.md 心跳机制\n\n---\n\n### 4.5 `.cron-delivery.json`\n\n历史投递记录，用于审计和调试。\n\n---\n\n### 4.6 `.gateway-pid.json`\n\nOpenClaw Gateway 进程 ID 追踪，用于健康检查。\n\n---\n\n## 五、管线日志\n\n### `.pipeline-run-YYYY-MM-DD.log`\n\n统一日终管线的运行日志。\n\n```bash\n[18:00:01] 📋 daily-memory-pipeline start — stage: full\n[18:00:02] ↓ 阶段1: sync-pull\n[18:05:30] 🧠 阶段2: auto-memory v3\n[18:05:35]   归档: 3 新增 / 12 重复跳过\n[18:06:00] ↑ 阶段3: sync-push + reindex\n[22:00:01] 📊 阶段4: session-extract\n[22:05:30] ⏳ 阶段5: activation decay\n[22:05:31]    facts.db: 55 facts decayed\n[22:05:32] 🏥 阶段6: healthcheck\n[22:05:32]    MEMORY.md: 88 行 ✅\n```\n\n**使用者**: `daily-memory-pipeline.sh`\n\n---\n\n## 六、Dreaming 目录 (`.dreams/`)\n\n| 文件 | 说明 |\n|------|------|\n| `daily-ingestion.json` | 每日摄入数据（Dreaming 输入） |\n| `events.jsonl` | Dreaming 事件日志 |\n| `phase-signals.json` | 阶段信号（REM/DeepSeek/Promotion 状态） |\n| `session-corpus/` | 会话分析语料库 |\n| `session-ingestion.json` | 会话摄入状态 |\n| `short-term-recall.json` | 短时召回状态 |\n\n**注意**: 这是 memory-core 插件的内部数据，**不要手动修改**。\n\n---\n\n## 七、dreaming/ 产出目录\n\n`dreaming/light/YYYY-MM-DD.md` — Dreaming 每日分析结果摘要。\n\n**用途**: 被 auto_memory_extract.py 消费，作为记忆提取的补充语料源（P1 整合后）。\n\n---\n\n## 八、文件分类速查\n\n| 类别 | 文件 | 可手动编辑 | 可删除 | 来源 |\n|------|------|----------|--------|------|\n| 🔴 核心记忆 | `YYYY-MM-DD.md` | ✅ | ❌ (30天内) | Agent + session-extract |\n| 🔴 核心记忆 | `projects/*.md` | ✅ | ❌ | 手动 + Agent |\n| 🟡 自动衍生 | `MEMORY_INDEX.md` | ❌ | ✅ (会重建) | sync-vector-index.py |\n| 🟡 自动衍生 | `dreaming/light/*.md` | ❌ | ✅ | Dreaming |\n| 🟢 状态文件 | `.sync-*.json` | ❌ | ⚠️ (重置状态) | sync 脚本 |\n| 🟢 状态文件 | `.session-extract-state.json` | ❌ | ⚠️ (重置进度) | session-extract |\n| 🟢 状态文件 | `.cron-delivery*.json` | ✅ | ⚠️ | cron 系统 |\n| 🟢 状态文件 | `.gateway-pid.json` | ❌ | ✅ | Gateway |\n| 🔵 管线日志 | `.pipeline-run-*.log` | ❌ | ✅ (7天后) | daily-memory-pipeline.sh |\n| ⚫ 内部数据 | `.dreams/` | ❌ | ❌ | memory-core 插件 |\n| ⚫ 历史归档 | `archive/` | ❌ | ⚠️ | 操作记录 |\n\n---\n\n## 九、与记忆架构层级映射\n\n```\nL0 (memory-core SQLite + sqlite-vec)\n    ↑ 索引自\nL1 memory/YYYY-MM-DD.md  ← session-extract.py\n    ↑ Dreaming 提升至\nL2a MEMORY.md (索引层 ~88行)\n    ↓ 双向索引 ←→\nL2b ARCHIVE.md (档案层 ~218行)\n    ↓ seed-facts-db.py\nL2c facts.sqlite (结构化)\n    ↑ 激活/衰减\n    facts_activation.py\n```\n\n\n## 十、P3 记忆候选审核 (`.candidates/`)\n\n| 属性 | 值 |\n|------|-----|\n| **路径** | `memory/.candidates/` |\n| **脚本** | `scripts/candidates_review.py` |\n| **流程** | Dreaming 产出 → candidates.json → 待审队列 → 用户确认 → ARCHIVE.md |\n\n### 命令\n\n```bash\npython3 candidates_review.py list           # 列出待审\npython3 candidates_review.py approve --id X # 批准写入ARCHIVE.md\npython3 candidates_review.py reject --id X  # 拒绝\npython3 candidates_review.py approve-all    # 全批准\npython3 candidates_review.py stats          # 统计\n```\n\n## 十一、LCM 替代方案 (P3)\n\nOpenClaw 不支持 `memoryFlush` 配置键。LCM 通过 **AGENTS.md 规则** 实现：\n- 会话中确认的关键决策，必须在 compaction 前写入 `memory/YYYY-MM-DD.md`\n- 禁止仅在对话中给出约束而不写入文件（夏季悦失控案例）\n\nFile vv1.13.2:references/pipeline-stages.md\n\n# Pipeline Stages — 日终管线 6 阶段详解\n\n> 每日统一管线流程：CST 18:00 → 22:00，覆盖 sync、extract、decay、healthcheck。\n> 最后更新：2026-05-17 | v1.13.1\n\n---\n\n## 一、管线总览\n\n```\n时间 (CST)      阶段                      脚本                          状态\n──────────────────────────────────────────────────────────────────────\n18:00           阶段1: sync-pull          sync-cloud-pull.py            ✅\n18:30           阶段2: auto-memory v3     auto_memory_extract.py        ✅\n18:40           阶段3: sync-push+reindex  sync-cloud-push.py            ✅\n                               +         openclaw memory index --force\n20:30           阶段X: Session 分析       Session Analysis Daily     ✅\n22:00           阶段4: session-extract   session-extract.py            ✅\n22:05           阶段5: facts decay       facts_activation.py (inline)  ✅\n22:06           阶段6: healthcheck       healthcheck (inline)          ✅\n```\n\n统一编排脚本：`daily-memory-pipeline.sh`\n\n---\n\n## 二、阶段详解\n\n### 阶段 1：sync-pull — Cloud → 本地\n\n**时间**：18:00 CST | **脚本**：`sync-cloud-pull.py` | **日志**：`memory/.pipeline-run-YYYY-MM-DD.log`\n\n**输入**：MemOS Cloud API（`GET /api/memo`）\n**输出**：`user_workspace/memos-cloud-cache/memos-cloud-YYYY-MM-DD.md`\n\n**流程**：\n1. 读取 `.sync-cloud-state.json` 的 `lastPullTime` 作为游标\n2. 请求 `create_time >= lastPullTime` 的条目\n3. 追加到 `memos-cloud-YYYY-MM-DD.md`\n4. 更新 `.sync-cloud-state.json`\n\n**失败处理**：非致命错误，记录 ⚠️ 继续管线\n**依赖**：MemOS API Token（`MEMOS_API_KEY` 环境变量或 `~/.openclaw/.env`）\n\n---\n\n### 阶段 2：auto-memory v3 — 两阶段提取\n\n**时间**：18:30 CST | **脚本**：`auto_memory_extract.py` | **日志**：stdout → 管道日志\n\n**输入**：`user_workspace/memos-cloud-cache/memos-cloud-*.md`\n**输出**：\n- 阶段1 → `ARCHIVE.md`（完整条目，SHA-256 去重，hash 标记）\n- 阶段2 → `MEMORY.md`（一行摘要索引）\n\n**Pipeline 内部流程**：\n```\nmemos-cloud-YYYY-MM-DD.md\n    ↓\n┌─ 通道A: qwen3:8b 过滤去重 ─→ {add: [...], update: [], remove: []}\n│   提取 prompt：与已有 MEMORY.md 对比去重，输出 JSON\n└─ 通道B: memos-extractor-0.6b API 结构化提取\n│   → memory_detail_list + preference_detail_list\n    ↓ 交叉验证（宽松 OR 逻辑）\n    ↓ 过滤 NOISE_KEYWORDS\n    ↓ SHA-256 去重（已有 hash 不写入）\n    ↓\nStage 1: ARCHIVE.md\n  - 写入完整条目：<!-- hash:{16位hash} -->\n  - 组织在 ## Auto-Extracted 历史归档 下\n  - 同一日期内的条目归并到同一 ### YYYY-MM-DD 块\n    ↓\nStage 2: MEMORY.md\n  - 更新/追加一行：Auto-Extracted ({date}): {n} 条新记忆 → ARCHIVE.md:{line}\n  - 不写入详细内容，只做索引\n```\n\n**去重机制**：\n- SHA-256(content) 前 16 位 → `<!-- hash:xxxxxxxxxxxxxxxx -->`\n- 已在 ARCHIVE.md 存在 hash 的条目跳过\n- NOISE_KEYWORDS 过滤：标题含系统级噪音关键词的条目跳过\n\n**输出示例**：\n```json\n{\n  \"status\": \"ok\",\n  \"pipeline\": \"two-stage (archive → summarize)\",\n  \"stage1_archive\": {\"added\": 3, \"skipped\": 12, \"section_line\": 88},\n  \"stage2_memory\": {\"memory_md_updated\": true, \"summary\": \"Auto-Extracted (2026-05-17): 3 条新记忆 → ARCHIVE.md:88\"},\n  \"summary\": {\n    \"total_candidates\": 5,\n    \"added_after_dedup\": 3,\n    \"duplicates_skipped\": 12,\n    \"qwen3_count\": 4,\n    \"extractor_count\": 3,\n    \"extractor_extra\": 1\n  }\n}\n```\n\n**失败处理**：非致命错误，记录 ⚠️ 继续管线\n\n---\n\n### 阶段 3：sync-push + reindex — 本地 → Cloud + 向量\n\n**时间**：18:40 CST | **脚本**：`sync-cloud-push.py` + `openclaw memory index --force` | **日志**：stdout → 管道日志\n\n**输入**：本地 Markdown 文件（MEMORY.md、ARCHIVE.md、memory/YYYY-MM-DD.md）\n**输出**：\n- MemOS Cloud（`POST /api/memo`，增量推送）\n- 向量索引（`memory-core` rebuild）\n\n**流程**：\n1. 读取 `.sync-push-state.json` 中各文件的 SHA256 哈希\n2. 计算当前文件哈希，与存储的哈希比对\n3. 只推送变化的文件（SHA256 不同）\n4. 更新 `.sync-push-state.json`\n5. 执行 `openclaw memory index --force` 重建向量索引\n\n**排除文件**（不推送）：\n- `memos-cloud-*.md`（来自云端）\n- `MEMORY_INDEX.md`（自动生成的本地衍生文件）\n- `DREAMS.md`（瞬态分析输出）\n- `.sync-*.json`（内部状态文件）\n\n**失败处理**：非致命错误，记录 ⚠️ 继续管线\n\n---\n\n### 阶段 4：session-extract — JSONL → .learnings + memory\n\n**时间**：22:00 CST | **脚本**：`session-extract.py` | **日志**：stdout → 管道日志\n\n**输入**：`~/.openclaw/agents/main/sessions/*.jsonl`\n**输出**：\n- `.learnings/ERRORS.md`（踩坑记录）\n- `.learnings/LEARNINGS.md`（经验教训）\n- `memory/YYYY-MM-DD.md`（日记忆）\n- 状态文件：`memory/.session-extract-state.json`\n\n**两遍流程**：\n```\nPass 1: 未处理的 .jsonl → .analyzed1\n  → 提取问题解决类内容 → .learnings/ERRORS.md\n  → 提取偏好经验类内容 → .learnings/LEARNINGS.md\n\nPass 2: .analyzed1.jsonl → .analyzed2.jsonl → gio trash\n  → 提取技术细节类内容 → memory/YYYY-MM-DD.md\n```\n\n**保护逻辑**：\n- 自动跳过最新 2 条会话（main + qqbot），防止正在运行的会话被重命名\n- `cleanup_trashable_files()` 通过 sessions.json 保护 main 和 qqbot 会话\n\n**reranker 三路 query（宽松 OR 逻辑）**：\n| Query | 内容 | 阈值 |\n|-------|------|------|\n| 问题解决 | 问题解决 错误修复 配置调试... | 0.15 |\n| 偏好经验 | 偏好 习惯 用户喜欢 用户要求... | 0.20 |\n| 技术细节 | error message报错 账号密码 key配置... | 0.15 |\n\n**可回收文件**：`.trajectory.jsonl`、`.trajectory-path.json`、`.analyzed1`、`.analyzed2`、`.jsonl.reset.*`、`.deleted.*`\n\n**失败处理**：非致命错误，记录 ⚠️ 继续管线\n\n---\n\n### 阶段 5：facts decay — 激活衰减\n\n**时间**：22:05 CST | **实现**：内联在 `daily-memory-pipeline.sh` 中 | **数据库**：`~/.openclaw/memory/facts.sqlite`\n\n**流程**：\n```python\nUPDATE facts SET activation = activation * 0.95 WHERE permanent = 0 AND activation > 0.01\n```\n- 非永久 facts：`activation *= 0.95`（下限 0.005）\n- 永久 facts：不参与衰减\n- 记录受影响行数到日志\n\n**分级阈值**：\n| 等级 | 条件 | 说明 |\n|------|------|------|\n| HOT | activation > 2.0 | 高频 facts |\n| WARM | 0.02 ≤ activation ≤ 2.0 | 正常 facts |\n| COOL | activation < 0.02 | GC 候选，待审核 |\n\n---\n\n### 阶段 6：healthcheck — 健康检查\n\n**时间**：22:06 CST | **实现**：内联在 `daily-memory-pipeline.sh` 中\n\n**检查项**：\n| 检查项 | 阈值 | 超标处理 |\n|--------|------|----------|\n| MEMORY.md 行数 | ≤ 100 | ⚠️ 记录警告 |\n| ARCHIVE.md 行数 | ≤ 250 | ⚠️ 记录警告 |\n| facts.db 总数 | — | 记录统计 |\n| facts.db HOT 数量 | — | 记录统计 |\n| facts.db COOL 数量 | — | 记录统计 |\n\n**输出示例**：\n```\n[22:06:01] 🏥 阶段6: healthcheck\n[22:06:02]    MEMORY.md: 88 行 ✅\n[22:06:02]    ARCHIVE.md: 218 行 ✅\n[22:06:03]    facts.db: 55 total / 3 HOT / 12 COOL\n```\n\n---\n\n## 三、失败处理策略\n\n所有 6 阶段均采用**非致命错误**策略：\n- 阶段失败 → 记录 ⚠️ 到日志 → 继续下一阶段\n- 不会因单阶段失败中断整条管线\n- 需要人工干预的场景：API Token 过期、磁盘空间不足、sessions.json 损坏\n\n**失败恢复**：\n| 阶段 | 失败场景 | 恢复方式 |\n|------|----------|----------|\n| sync-pull | 网络断开 | 下次 cron 自动重试（基于游标） |\n| auto-memory | API 超时 | 下次 cron 自动重试 |\n| sync-push | Token 过期 | 手动刷新 token 后重试 |\n| session-extract | 文件锁定 | 保护机制生效，不会处理运行中的会话 |\n| facts decay | db 不存在 | 跳过，继续管线 |\n| healthcheck | 文件不存在 | 记录 ⚠️，不影响管线 |\n\n---\n\n## 四、日志文件\n\n每次完整运行生成：`memory/.pipeline-run-YYYY-MM-DD.log`\n\n**结构**：\n```\n[18:00:01] 📋 daily-memory-pipeline start — stage: full\n[18:00:02] ↓ 阶段1: sync-pull (Cloud → local)\n[18:05:30] 🧠 阶段2: auto-memory v3\n[18:05:35]   归档: 3 新增 / 12 重复跳过\n[18:06:00] ↑ 阶段3: sync-push + reindex\n20:30           阶段X: Session 分析       Session Analysis Daily     ✅\n[22:00:01] 📊 阶段4: session-extract\n[22:00:05]   提取: 2 errors / 3 lessons\n[22:05:01] ⏳ 阶段5: activation decay\n[22:05:02]    facts.db: 55 facts decayed\n[22:06:01] 🏥 阶段6: healthcheck\n[22:06:02]    MEMORY.md: 88 行 ✅\n[22:06:02]    ARCHIVE.md: 218 行 ✅\n[22:06:03] ✅ pipeline complete — stage: full\n```\n\n---\n\n## 五、独立运行 vs 统一管线\n\n| 运行方式 | 命令 | 适用场景 |\n|----------|------|----------|\n| 独立运行（单阶段） | `python3 auto_memory_extract.py --mode full` | 调试单阶段 |\n| 统一管线（全部） | `bash daily-memory-pipeline.sh full` | 生产环境推荐 |\n| 仅同步 | `bash daily-memory-pipeline.sh sync-only` | 快速同步 |\n| 仅提取 | `bash daily-memory-pipeline.sh extract-only` | 离线调试 |\n| 查看状态 | `bash daily-memory-pipeline.sh status` | 快速检查 |\n\n**推荐配置**：使用 `daily-memory-pipeline.sh full` 作为单一 cron 任务，替代多个独立 cron，避免时序依赖问题。\n### 阶段 X：Session 分析 — 历史会话深度分析\n\n**时间**：20:30 CST | **Job**：`Session Analysis Daily` | **触发**：cron agentTurn | **日志**：cron 投递队列\n\n**输入**：已索引的 sessions JSONL + `memory_search` 搜索结果\n**输出**：`memory/YYYY-MM-DD.md`（分析摘要）\n\n**流程**：\n1. `openclaw memory index --force` — 确保 bge-m3 索引最新\n2. `memory_search` — 搜索过去 24-48 小时内的新会话内容\n3. **OpenClaw 默认模型深度分析** — 使用 `minimax/MiniMax-M2.7`（主模型）或配置的默认回退模型，分析已索引的会话内容，提取：\n   - 关键决策和教训\n   - 偏好和习惯的变化\n   - 重要上下文更新\n4. `openclaw memory rem-backfill --path ./memory --stage-short-term` — 写入数据库\n5. 将分析摘要追加到 `memory/YYYY-MM-DD.md`\n6. 汇报摘要写入 `memory/.cron-delivery-heartbeat.json`\n\n**关键说明**：\n- 使用 OpenClaw **默认模型**（主模型 `minimax/MiniMax-M2.7`，回退 `deepseek-v4-flash`），无需额外配置 DeepSeek\n- 不是脚本管道，而是 **agentTurn payload**，完全由 agent 的工具驱动\n- 属于日间（而非日终）分析，在 session-extract 之前运行，提前捕获重要决策\n\n**状态文件**：无（纯 agent workflow）\n**失败处理**：非致命，记录 ⚠️ 到 cron 投递队列后继续\n\nFile vv1.13.2:references/scripts-reference.md\n\n# Scripts Reference — anamnesis-hub 脚本说明\n\n> 所有脚本的统一参考：用途、触发方式、依赖关系、关键参数。\n> 最后更新：2026-05-17 | v1.13.1\n\n---\n\n## 一、脚本总表\n\n| 脚本 | 位置 | 用途 | cron 触发 |\n|------|------|------|-----------|\n| `auto-setup.sh` | `scripts/` | 一键安装交互脚本 | 手动 |\n| `auto_memory_extract.py` | `user_workspace/scripts/` | 两阶段记忆提取（ARCHIVE → MEMORY） | 18:30 / 22:30 CST |\n| `session-extract.py` | `user_workspace/scripts/` | 会话 JSONL 扫描 → .learnings/ + memory/ | 22:00 CST |\n| `daily-memory-pipeline.sh` | `user_workspace/scripts/` | 统一编排 6 阶段管线 | 可作单一 cron |\n| `sync-cloud-pull.py` | `user_workspace/scripts/` | MemOS Cloud → 本地 | 18:00 / 20:00 / 22:00 CST |\n| `sync-cloud-push.py` | `user_workspace/scripts/` | 本地 → MemOS Cloud | 18:00 / 20:00 / 22:00 CST |\n| `sync-vector-index.py` | `user_workspace/scripts/` | 向量库 → MEMORY_INDEX.md | 随 sync-push |\n| `sync-all.sh` | `user_workspace/scripts/` | sync 三合一编排 | 18:00 / 20:00 / 22:00 CST |\n| `seed-facts-db.py` | `scripts/` | 从 ARCHIVE.md 初始化 facts.sqlite | 手动 |\n| `facts_activation.py` | `scripts/` | Hebbian 激活 + 衰减 | 手动或 cron |\n| `candidates_review.py` | `scripts/` | P3 记忆候选审核 | 手动 |\n| `check_current_session.py` | `scripts/` | 查看最近会话（调试用） | 手动 |\n| `write_file.py` | `scripts/` | 跨平台文本写入（UTF-8/BOM/CRLF） | 被调用 |\n\n---\n\n## 二、脚本详解\n\n### 2.1 auto-setup.sh\n\n**用途**：一键交互式安装 anamnesis-hub 环境。\n\n```bash\ncd /home/victor/github/anamnesis-hub\nbash scripts/auto-setup.sh\n```\n\n**交互步骤**：\n1. 检查 Ollama 是否安装 → 建议安装或跳过\n2. 下载 `bge-m3` embedding 模型\n3. 检测 `subconscious-personality-guardian` 冲突插件 → 自动加入禁用列表\n4. 安装 memory-core 插件\n5. 配置 `openclaw.json`（自动插入推荐配置）\n6. 安装 MemOS Cloud 插件（可选）\n7. 创建 `memory/` 目录\n8. 设置 Dreaming cron（03:00 UTC）\n\n**参数**：\n| 参数 | 说明 |\n|------|------|\n| `--skip-ollama` | 跳过 Ollama 安装（已安装时用） |\n| `--skip-memos` | 跳过 MemOS Cloud 安装 |\n| `--dry-run` | 预览模式，不实际执行 |\n\n---\n\n### 2.2 auto_memory_extract.py\n\n**用途**：两阶段记忆提取管道，从 MemOS Cloud 拉取的缓存文件中提取有价值记忆，写入 ARCHIVE.md（阶段一）和 MEMORY.md（阶段二）。\n\n```bash\npython3 user_workspace/scripts/auto_memory_extract.py --mode full --days 1\n```\n\n**核心参数**：\n| 参数 | 说明 |\n|------|------|\n| `--mode status` | 查看缓存文件状态，不执行提取 |\n| `--mode dry-run` | 测试模式，输出预览 |\n| `--mode full` | 生产模式执行提取 |\n| `--days N` | 拉取最近 N 天的 memos-cloud 缓存 |\n\n**Pipeline 流程（两通道）**：\n```\nmemos-cloud-YYYY-MM-DD.md\n    ↓\n┌─ 通道A: qwen3:8b 过滤去重 ─→ {add: [...], update: [], remove: []}\n└─ 通道B: memos-extractor-0.6b 结构化提取 ─→ memory_detail_list + preference_detail_list\n    ↓ 交叉验证（宽松 OR 逻辑）\n    ↓ SHA-256 去重\n    ↓\nStage 1 → ARCHIVE.md（完整条目，hash:xxxxxx 标记）\nStage 2 → MEMORY.md（一行摘要索引）\n```\n\n**关键配置**（读取环境变量或 `~/.openclaw/.env`）：\n- `MEMOS_API_KEY` — MemOS Cloud API Token\n- `OLLAMA_BASE=http://127.0.0.1:11434`\n- `LLM_MODEL=qwen3:8b`\n\n**NOISE_KEYWORDS**：标题含以下关键词的条目跳过不处理：\n```\nCron delivery check, Cron delivery process, OpenClaw doctor,\nDreams of a rack, Dashboard URL, Wiki同步, Cron delivery result,\n无待投递, 已搬运, heartbeat, HEARTBEAT, cron-delivery\n```\n\n---\n\n### 2.3 session-extract.py\n\n**用途**：扫描 sessions 目录的 `.jsonl` 文件，通过 MemOS extractor + reranker 两遍提取，写入 `.learnings/ERRORS.md`（错误记录）和 `memory/YYYY-MM-DD.md`（日记忆）。\n\n```bash\npython3 user_workspace/scripts/session-extract.py --days 5\npython3 user_workspace/scripts/session-extract.py --full    # 全量\npython3 user_workspace/scripts/session-extract.py --cleanup # 提取后清理可回收文件\npython3 user_workspace/scripts/session-extract.py --reset  # 重置处理状态\n```\n\n**核心参数**：\n| 参数 | 说明 |\n|------|------|\n| `--days N` | 拉取最近 N 天（默认 5） |\n| `--full` | 全量模式（等同于 `--days` 不限） |\n| `--pass-num 1\\|2` | 分析遍次：1=首次全量，2=查漏补缺 |\n| `--cleanup` | 提取完成后清理可回收文件 |\n| `--reset` | 重置 processedIds 状态，重新全量运行 |\n| `--dry-run` | 测试模式 |\n\n**两遍流程**：\n```\nPass 1: .jsonl → .analyzed1.jsonl\n  → .learnings/ERRORS.md（踩坑记录）\n  → .learnings/LEARNINGS.md（经验教训）\n\nPass 2: .analyzed1.jsonl → .analyzed2.jsonl → trash\n  → memory/YYYY-MM-DD.md\n```\n\n**保护逻辑**：\n- 自动跳过最新 2 条会话（main + qqbot），防止正在运行的会话被重命名\n- `cleanup_trashable_files()` 通过 sessions.json 双重保护 main 和 qqbot 会话\n\n**可回收文件类型**：\n| 类型 | 模式 | 保护 |\n|------|------|------|\n| trajectory | `*.trajectory.jsonl` | 清理 |\n| trajectory-path | `*.trajectory-path.json` | 清理 |\n| analyzed1 | `*.analyzed1` | 清理 |\n| analyzed2 | `*.analyzed2` | 清理 |\n| reset | `*.jsonl.reset.*` | 清理 |\n| deleted | `*.deleted.*` | 清理 |\n\n**状态文件**：`memory/.session-extract-state.json`（记录 processedIds）\n\n**reranker 三路 query**：\n```python\nQUERIES = [\n    (\"问题解决\", \"问题解决 错误修复 配置调试...\"),   # THRESHOLD_PROBLEM=0.15\n    (\"偏好经验\", \"偏好 习惯 用户喜欢 用户要求...\"),   # THRESHOLD_PREF=0.20\n    (\"技术细节\", \"error message报错 账号密码 key...\"),  # THRESHOLD_TECH=0.15\n]\n# 宽松 OR 逻辑：通过任一 query 即保留\n```\n\n---\n\n### 2.4 daily-memory-pipeline.sh\n\n**用途**：统一编排日终管线，替代三个独立 cron 任务。\n\n```bash\nbash user_workspace/scripts/daily-memory-pipeline.sh full    # 全量运行\nbash user_workspace/scripts/daily-memory-pipeline.sh sync-only  # 仅同步\nbash user_workspace/scripts/daily-memory-pipeline.sh extract-only # 仅提取\nbash user_workspace/scripts/daily-memory-pipeline.sh status     # 查看状态\n```\n\n**6 阶段流程**：\n```\n18:00 ─┬─ 阶段1: sync-pull  (Cloud → local)\n       │\n18:30 ─┼─ 阶段2: auto-memory v3 (ARCHIVE.md → MEMORY.md)\n       │\n18:40 ─┼─ 阶段3: sync-push + reindex (local → Cloud)\n       │\n22:00 ─┼─ 阶段4: session-extract (JSONL → .learnings/ + memory/)\n       │\n22:05 ─┤─ 阶段5: facts.db decay (激活 * 0.95)\n       │\n22:06 ─┴─ 阶段6: healthcheck (MEMORY.md/ARCHIVE.md 行数 + facts.db 统计)\n```\n\n**日志输出**：每次运行写入 `memory/.pipeline-run-YYYY-MM-DD.log`\n\n**非致命错误**：所有阶段失败时记录 ⚠️ 而不中断管线\n\n---\n\n### 2.5 sync-cloud-pull.py / sync-cloud-push.py / sync-all.sh\n\n**用途**：三方同步脚本，保持 MemOS Cloud ↔ 本地 Markdown ↔ 向量库三者一致。\n\n**sync-all.sh** 是编排脚本，同时调用 pull、push 和 index：\n```bash\nbash user_workspace/scripts/sync-all.sh\n```\n\n**sync-cloud-pull.py**：从 MemOS Cloud API 拉取新条目，写入 `memos-cloud-YYYY-MM-DD.md`\n**sync-cloud-push.py**：将本地 Markdown 变化推送到 MemOS Cloud（增量，只推 SHA256 变化的文件）\n\n**排除文件**（不推送到云）：\n- `memos-cloud-*.md`\n- `MEMORY_INDEX.md`\n- `DREAMS.md`\n- `.sync-*.json`\n\n---\n\n### 2.6 seed-facts-db.py\n\n**用途**：从 ARCHIVE.md 初始化 facts.sqlite 结构化知识图谱。\n\n```bash\npython3 scripts/seed-facts-db.py\n```\n\n提取 ARCHIVE.md 中的结构化条目，写入 facts.sqlite（entity/key/value + activation），用于精确查询和热度追踪。\n\n---\n\n### 2.7 facts_activation.py\n\n**用途**：Hebbian 激活 + 每日衰减，维持 facts 热度分级（HOT/WARM/COOL）。\n\n```bash\npython3 scripts/facts_activation.py\n```\n\n**激活规则**：每次查询触发 `activation += 0.5, access_count += 1`\n**衰减规则**：非永久 facts 每日 `activation *= 0.95`（下限 0.005）\n**分级**：\n| 等级 | 阈值 | 说明 |\n|------|------|------|\n| HOT | > 2.0 | 高频访问 facts |\n| WARM | 0.02 ~ 2.0 | 正常 facts |\n| COOL | < 0.02 | 待审核 GC 候选 |\n\n---\n\n### 2.8 candidates_review.py\n\n**用途**：P3 记忆候选审核机制，人工确认后再写入 ARCHIVE.md。\n\n```bash\npython3 scripts/candidates_review.py list          # 列出待审\npython3 scripts/candidates_review.py approve --id X # 批准写入ARCHIVE.md\npython3 scripts/candidates_review.py reject --id X  # 拒绝\npython3 scripts/candidates_review.py approve-all   # 批准所有\npython3 scripts/candidates_review.py stats          # 统计\n```\n\n**状态文件**：`memory/.candidates/review-state.json`\n\n---\n\n### 2.9 check_current_session.py\n\n**用途**：调试脚本，列出最近 5 个会话及其时间、路径、sessionKey。\n\n```bash\npython3 scripts/check_current_session.py\n```\n\n输出示例：\n```\nTop 5 most recent sessions:\n  [1] 2026-05-17 01:05:00 | 06d8446a-35df-4b1d-9230-d307b724fe6a.jsonl ← CURRENT SESSION (DO NOT RENAME)\n       sessionKey: c4e539d2-3c6c-43e8-9629-9ceb2d4e548c\n       path: /home/victor/.openclaw/agents/main/sessions/06d8446a-35df-4b1d-9230-d307b724fe6a.jsonl\n  [2] 2026-05-16 22:30:00 | 6b6ebef5-a2f0-4096-b2e9-5acac0e0622b.jsonl\n```\n\n---\n\n### 2.10 write_file.py\n\n**用途**：跨平台文本写入，自动处理 UTF-8 编码、BOM、CRLF 换行符。\n\n**不能直接调用**（被其他脚本间接调用）：\n```bash\npython3 scripts/write_file.py --path /tmp/test.txt --content-file /tmp/content.txt\n```\n\n或通过 `cross-platform-writer` skill 拦截所有 `write` 工具调用。\n\n---\n\n## 三、Cron 调度参考\n\n### 完整 cron 配置表\n\n```cron\n# ┌─────────── minute (0-59)\n# │ ┌───────── hour (0-23, UTC)\n# │ │ ┌─────── day of month (1-31)\n# │ │ │ ┌───── month (1-12)\n# │ │ │ │ ┌── day of week (0-7, 0=Sun)\n# │ │ │ │ │\n# ▼ ▼ ▼ ▼ ▼\n# ↓ ↓ ↓ ↓ ↓\n\n# Dreaming — 每日 UTC 03:00 (CST 11:00)\n0 3 * * *  /home/victor/github/anamnesis-hub/scripts/daily-memory-pipeline.sh full >> /home/victor/.openclaw/workspace/memory/.pipeline-run-$(date +\\%Y-\\%m-\\%d).log 2>&1\n\n# 三方同步 — CST 18:00 / 20:00 / 22:00 (= UTC 10:00 / 12:00 / 14:00)\n0 10,12,14 * * *  bash /home/victor/.openclaw/workspace/user_workspace/scripts/sync-all.sh\n\n# auto-memory v3 — CST 18:30 / 22:30 (= UTC 10:30 / 14:30)\n30 10,14 * * *  python3 /home/victor/.openclaw/workspace/user_workspace/scripts/auto_memory_extract.py --mode full --days 1\n\n# session-extract — CST 22:00 (= UTC 14:00)\n0 14 * * *  python3 /home/victor/.openclaw/workspace/user_workspace/scripts/session-extract.py --days 5 --cleanup\n\n# facts 衰减 — CST 22:05 (= UTC 14:05)\n5 14 * * *  python3 /home/victor/.openclaw/workspace/user_workspace/scripts/facts_activation.py\n```\n\n> 注：daily-memory-pipeline.sh 已覆盖大部分阶段，可作为单一 cron 替代上述多个独立任务。\n\n---\n\n## 四、依赖关系图\n\n```\nauto-setup.sh\n  ├── 安装 Ollama + bge-m3\n  ├── 安装 memory-core 插件\n  ├── 配置 openclaw.json\n  └── 安装 MemOS Cloud 插件（可选）\n\ndaily-memory-pipeline.sh\n  ├── 阶段1: sync-cloud-pull.py\n  ├── 阶段2: auto_memory_extract.py\n  │     └── 调用 memos-extractor-0.6b API + qwen3:8b\n  ├── 阶段3: sync-cloud-push.py + openclaw memory index\n  ├── 阶段4: session-extract.py\n  │     └── 调用 memos-extractor + memos-reranker API\n  ├── 阶段5: facts_activation.py (inline)\n  └── 阶段6: healthcheck (inline)\n\ncandidates_review.py\n  └── 读取 memory/.candidates/review-state.json\n  └── 写入 ARCHIVE.md\n\nseed-facts-db.py\n  └── 读取 ARCHIVE.md\n  └── 写入 facts.sqlite\n\nwrite_file.py\n  └── 被 auto_memory_extract.py / session-extract.py 间接调用\n  └── cross-platform-writer skill 拦截所有 write 工具\n```\n\n---\n\n## 五、常见问题\n\n| 问题 | 原因 | 解决 |\n|------|------|------|\n| extractor 返回 400 | tokens 超限 | 自动减半重试 |\n| sync-pull 无反应 | MEMOS_API_KEY 未设置 | 检查 `~/.openclaw/.env` |\n| session-extract 跳过所有文件 | pass 筛选模式错误 | 确认通配符 `.jsonl` vs `.analyzed1` |\n| facts.db 无数据 | 未运行 seed-facts-db.py | 先执行 seed 初始化 |\n| 跨平台写入乱码 | 未用 write_file.py | 所有文本写入统一走 cross-platform-writer |\n\nFile vv1.13.2:references/setup-guide.md\n\n# OpenClaw Memory Hub — Manual Setup Guide\n\n> **Tip**: Use `bash scripts/auto-setup.sh` for one-command interactive setup. This is the manual alternative.\n\n## Prerequisites\n\n- OpenClaw >= v25.9.0\n- Node.js >= 18\n- Internet connection (for downloading Ollama and bge-m3 model)\n\n## Step 1: Install Ollama\n\n### Option A: Standard\n```bash\ncurl -fsSL https://ollama.com/install.sh | sh\n```\n\n### Option B: Intel Edition (OpenVINO backend)\n```bash\ncurl -L -o /usr/local/bin/ollama https://github.com/intel/ollama/releases/latest/download/ollama-linux-amd64\nchmod +x /usr/local/bin/ollama\n```\n\nStart Ollama:\n```bash\nollama serve\n```\n\nVerify:\n```bash\ncurl http://127.0.0.1:11434/api/tags\n```\n\n### Step 1.5: Pull bge-m3 Embedding Model\n\n```bash\nollama pull bge-m3\n```\n\n## Step 2: Plugin Conflict Check\n\nBefore installing memory-core, check if `subconscious-personality-guardian` is present:\n\n```bash\ngrep -q \"subconscious-personality-guardian\" ~/.openclaw/openclaw.json\n```\n\nIf found, add to `plugins.disabled` and `plugins.deny` in `openclaw.json`:\n```json\n{\n  \"plugins\": {\n    \"disabled\": [\"subconscious-personality-guardian\"],\n    \"deny\": [\"subconscious-personality-guardian\"]\n  }\n}\n```\n\n## Step 3: Install memory-core Plugin\n\n### Manual Config\n\nAdd to `openclaw.json`:\n\n```json\n{\n  \"plugins\": {\n    \"entries\": {\n      \"memory-core\": {\n        \"config\": {\n          \"embeddingUrl\": \"http://127.0.0.1:11434/api/embed\",\n          \"embeddingModel\": \"bge-m3\",\n          \"dimension\": 1024\n        }\n      }\n    }\n  }\n}\n```\n\nRestart Gateway:\n\n```bash\nopenclaw gateway restart\n```\n\nVerify status:\n\n```bash\nopenclaw memory status\n```\n\n## Step 3: Install MemOS Cloud Plugin (Optional)\n\nRequired for cross-device memory sync.\n\n### Recommended Full Config (in `openclaw.json`):\n\n```json\n{\n  \"plugins\": {\n    \"entries\": {\n      \"memos-cloud-openclaw-plugin\": {\n        \"enabled\": true,\n        \"config\": {\n          \"url\": \"https://your-memos-server.com\",\n          \"token\": \"your-memos-api-token\",\n          \"resetOnNew\": true,\n          \"recallEnabled\": true,\n          \"recallFilterFailOpen\": true,\n          \"asyncMode\": true,\n          \"addEnabled\": true,\n          \"queryPrefix\": \"important user context preferences decisions \",\n          \"memoryLimitNumber\": 9,\n          \"preferenceLimitNumber\": 6,\n          \"relativity\": 0.45,\n          \"maxItemChars\": 8000,\n          \"includeAssistant\": true,\n          \"includePreference\": true,\n          \"tags\": [\"openclaw\", \"memory\"]\n        },\n        \"hooks\": {\n          \"allowConversationAccess\": true\n        }\n      }\n    }\n  }\n}\n```\n\n**Key parameters explained:**\n\n| Parameter | Value | Why |\n|-----------|-------|-----|\n| `recallFilterFailOpen` | `true` | Don't block pipeline if MemOS API is unreachable — let memory-core still serve context |\n| `asyncMode` | `true` | Run asynchronously so memory-core can execute its own retrieval |\n| `resetOnNew` | `true` | Fresh context per session, no stale data carried over |\n| `queryPrefix` | `\"important user context preferences decisions \"` | Semantic anchor to prioritize recall relevance |\n| `memoryLimitNumber` | `9` | Max recalled memory items per session |\n| `preferenceLimitNumber` | `6` | Max recalled preference items per session |\n| `relativity` | `0.45` | Relevance threshold — filter out low-confidence matches |\n| `maxItemChars` | `8000` | Max characters per memory item |\n| `includeAssistant` | `true` | Include AI's own past outputs as memory context |\n| `includePreference` | `true` | Include detected user preferences in recall |\n| `tags` | `[\"openclaw\", \"memory\"]` | Tagging for multi-instance filtering |\n\n## Step 4: Configure Runtime Files\n\n### AGENTS.md — Memory Rules\n\nAdd to your `AGENTS.md`:\n\n```markdown\n## 🧠 Memory System\n\n- **L0 Runtime Retrieval**: memory-core plugin (Ollama bge-m3 → SQLite-vec), semantic + BM25 hybrid\n- **L1 Working Memory**: `memory/YYYY-MM-DD.md` files, 30-90 day retention\n- **L2 Long-term Memory**: `MEMORY.md` read-only base\n- **Dreaming**: Daily 03:00 UTC — auto-analyze and promote to L2\n- **Writing Rules**: Important decisions → L1 log; \"记住\" → L1 + verify via memory_search\n- **Lessons**: Update AGENTS.md / TOOLS.md\n- **Errors**: `.learnings/ERRORS.md`\n\n**MEMORY.md is read-only** — agent loads at bootstrap. New memories go to L1 files.\n```\n\n### SOUL.md — Core Identity\n\n```markdown\n## Continuity\n\nEach session is a fresh start. These files _are_ your memory. Read them. Update them.\n\n## Memory\n\n- Use memory files for persistence, not session recall\n- The Dreaming pipeline runs daily — no need to report it\n- Trust the system: auto-indexing + daily promotion covers continuity\n```\n\n### TOOLS.md — Environment Config\n\n```markdown\n## 🧠 Memory System (memory-core)\n\n- **Embedding backend**: Ollama (`http://127.0.0.1:11434`)\n- **Embedding model**: `bge-m3` (1024-dim, multi-language)\n- **Database**: `~/.openclaw/memory/main.sqlite`\n- **Index**: `openclaw memory index --force`\n- **Status**: `openclaw memory status`\n- **Dreaming**: Daily 03:00 UTC\n```\n\n## Step 5: Set Up Cron Jobs\n\n### Dreaming Pipeline (Daily 03:00 UTC)\n\n```bash\n# Using openclaw cron\nopenclaw cron add --name \"memory-dreaming-pipeline\" \\\n  --cron \"0 3 * * *\" \\\n  --agent \"default\" \\\n  --announce \\\n  --message \"Run Dreaming pipeline: scan logs, extract insights, promote to MEMORY.md\"\n```\n\n### Active Memory (Built-in Plugin)\n\nEnable in `openclaw.json` to activate pre-reply sub-agent memory search:\n\n```json5\n{\n  plugins: {\n    entries: {\n      \"active-memory\": {\n        enabled: true,\n        config: {\n          enabled: true,\n          agents: [\"main\"],\n          allowedChatTypes: [\"direct\"],\n          promptStyle: \"balanced\",\n          timeoutMs: 15000,\n          modelFallback: \"ollama/qwen3:8b\",\n        },\n      },\n    },\n  },\n}\n```\n\n### auto-memory v2 (18:30, 22:30 CST)\n\nPlace `scripts/auto_memory_extract.py` in `user_workspace/scripts/` and install the `auto-memory` skill:\n\n```bash\nopenclaw cron add --name \"auto-memory-extract\" \\\n  --cron \"30 18,22 * * *\" \\\n  --tz \"Asia/Shanghai\" \\\n  --task \"python3 user_workspace/scripts/auto_memory_extract.py --mode full\"\n```\n\nRequires MemOS Cloud plugin + sync to provide input data (`memos-cloud-*.md` files).\n\n### Three-Way Sync (18:00, 20:00, 22:00 CST)\n\nPlace sync scripts in `user_workspace/scripts/`:\n\n1. `sync-cloud-pull.py` — Pulls new entries from MemOS Cloud API\n2. `sync-cloud-push.py` — Pushes local markdown changes to Cloud\n3. `sync-vector-index.py` — Generates MEMORY_INDEX.md from vector DB\n4. `sync-all.sh` — Orchestrator\n\nCron schedule (UTC):\n\n```bash\n# 10:00 / 12:00 / 14:00 UTC = 18:00 / 20:00 / 22:00 CST\n0 10,12,14 * * * ~/.openclaw/workspace/user_workspace/scripts/sync-all.sh\n```\n\n## Step 6: Verify Setup\n\n```bash\n# Check memory status\nopenclaw memory status\n\n# Force index\nopenclaw memory index --force\n\n# List cron jobs\nopenclaw cron list\n\n# Check logs\nopenclaw logs --follow --plain\n```\n\n## Troubleshooting\n\n| Issue | Cause | Fix |\n|-------|-------|-----|\n| Embedding fails | Ollama not running | `ollama serve` |\n| bge-m3 not found | Model not pulled | `ollama pull bge-m3` |\n| Plugin not loaded | Restart needed | `openclaw gateway restart` |\n| Slow search | Index stale | `openclaw memory index --force` |\n| Cloud sync fails | Token expired | Refresh MemOS API token |\n| Dreaming not running | Cron disabled | `openclaw cron list` → verify |\n\nFile vv1.13.2:references/sync-api.md\n\n# MemOS Cloud Sync API Reference\n\n## API Endpoints\n\n### GET /api/memo — Pull Memory\n\nFetch paginated memory entries from cloud.\n\n**Request**:\n\n```\nPOST /api/memo\nContent-Type: application/json\nAuthorization: Bearer <token>\n```\n\n**Body** (optional filter):\n\n```json\n{\n  \"and\": [\n    {\"create_time\": {\"gte\": \"2026-04-29 10:00:00\"}}\n  ]\n}\n```\n\n**Response**:\n\n```json\n{\n  \"memo\": [\n    {\n      \"id\": 1234,\n      \"content\": \"memory content...\",\n      \"create_time\": \"2026-04-29T10:30:00+08:00\"\n    }\n  ]\n}\n```\n\n**Pagination**: Not returned explicitly — use `filter` with `create_time.gte` cursor to paginate.\n\n### POST /api/memo — Push Memory\n\nAdd new memory entries to cloud.\n\n**Request**:\n\n```\nPOST /api/memo\nContent-Type: application/json\nAuthorization: Bearer <token>\n```\n\n**Push Multiple**:\n\n```json\n[\n  {\n    \"content\": \"# memory content\\nkey facts...\",\n    \"created_ts\": 1714350000\n  }\n]\n```\n\n**Response**: Returns created memo objects.\n\n## Sync State Files\n\n### `.sync-cloud-state.json` (Pull State)\n\nTracks last successful pull timestamp.\n\n```json\n{\n  \"last_pull\": \"2026-04-30 10:00:00\"\n}\n```\n\n### `.sync-push-state.json` (Push State)\n\nTracks SHA256 hashes per file for incremental push.\n\n```json\n{\n  \"memory/2026-04-29.md\": \"sha256hash...\",\n  \"memory/2026-04-30.md\": \"sha256hash...\"\n}\n```\n\n## Sync Flow Details\n\n### Pull (Cloud → MD)\n\n1. Read `last_pull` from state file\n2. Request `create_time >= last_pull` from cloud\n3. Append new entries to `memory/memos-cloud-*.md`\n4. Update `last_pull` to current time\n\n### Push (MD → Cloud)\n\n1. Calculate SHA256 for each `memory/*.md` file\n2. Compare with stored hash in state file\n3. Only push files with changed hashes\n4. Update state file with new hashes\n\n### Excluded Files\n\nNever pushed to cloud:\n- `memos-cloud-*.md` (already in cloud)\n- `MEMORY_INDEX.md` (generated locally)\n- `DREAMS.md` (transient analysis)\n- `.sync-*.json` (internal state)\n\n## Error Handling\n\n- HTTP 401: Token expired — renew and retry\n- HTTP 429: Rate limited — backoff and retry\n- Network error: Log and skip, retry next cycle\n- \n\nArchive v1.13.1: 21 files, 76697 bytes\n\nFiles: README.md (6366b), references/architecture.md (18643b), references/candidates-review.md (4156b), references/INDEX.md (2465b), references/memory-directory.md (8422b), references/pipeline-stages.md (11055b), references/scripts-reference.md (12796b), references/setup-guide.md (7382b), references/sync-api.md (2292b), references/upgrade-reset.md (5761b), scripts/auto_memory_extract.py (18363b), scripts/auto-setup.sh (12699b), scripts/candidates_review.py (5824b), scripts/check_current_session.py (1888b), scripts/daily-memory-pipeline.sh (7239b), scripts/facts_activation.py (7613b), scripts/seed-facts-db.py (8456b), scripts/session-extract.py (33231b), scripts/write_file.py (21905b), SKILL.md (8367b), _meta.json (133b)\n\nArchive v1.13.0: 21 files, 76059 bytes\n\nFiles: README.md (6366b), references/architecture.md (18643b), references/candidates-review.md (4156b), references/INDEX.md (2465b), references/memory-directory.md (8422b), references/pipeline-stages.md (9524b), references/scripts-reference.md (12796b), references/setup-guide.md (7382b), references/sync-api.md (2292b), references/upgrade-reset.md (5761b), scripts/auto_memory_extract.py (18363b), scripts/auto-setup.sh (12699b), scripts/candidates_review.py (5824b), scripts/check_current_session.py (1888b), scripts/daily-memory-pipeline.sh (7239b), scripts/facts_activation.py (7613b), scripts/seed-facts-db.py (8456b), scripts/session-extract.py (33231b), scripts/write_file.py (21905b), SKILL.md (8367b), _meta.json (133b)\n\nArchive v1.12.1: 16 files, 60067 bytes\n\nFiles: README.md (5754b), references/architecture.md (18643b), references/memory-directory.md (8422b), references/setup-guide.md (7382b), references/sync-api.md (2292b), scripts/auto_memory_extract.py (18363b), scripts/auto-setup.sh (12699b), scripts/candidates_review.py (5824b), scripts/check_current_session.py (1888b), scripts/daily-memory-pipeline.sh (7239b), scripts/facts_activation.py (7613b), scripts/seed-facts-db.py (8456b), scripts/session-extract.py (33127b), scripts/write_file.py (21905b), SKILL.md (8057b), _meta.json (133b)\n\nArchive v1.12.0: 16 files, 60066 bytes\n\nFiles: README.md (5754b), references/architecture.md (18643b), references/memory-directory.md (8422b), references/setup-guide.md (7382b), references/sync-api.md (2292b), scripts/auto_memory_extract.py (18363b), scripts/auto-setup.sh (12699b), scripts/candidates_review.py (5824b), scripts/check_current_session.py (1888b), scripts/daily-memory-pipeline.sh (7239b), scripts/facts_activation.py (7613b), scripts/seed-facts-db.py (8456b), scripts/session-extract.py (33127b), scripts/write_file.py (21905b), SKILL.md (8057b), _meta.json (133b)","readmeExcerpt":"Skill: Anamnesis Hub Owner: victorqr Summary: 四层记忆架构 (Four-tier memory architecture for OpenClaw AI agents). 提供 L0 运行时语义检索 (Ollama bge-m3 + SQLite-vec 向量库)、L1 工作记忆 (每日 Markdown 日志)、L2 长期记忆 (MEMORY.md 索引... Tags: latest:v1.13.2 Version history: v1.13.2 | 2026-05-18T06:53:44.888Z | user Release 1.13.2 vv1.13.2 | 2026-05-18T03:37:59.901Z | user v1.13.2: fix P0/P1 bugs v1.13.1 | 2026-05-16T17:42:53.096Z | user v1.13.1: 更","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"agent_end → MemOS Cloud (cloud extraction)\n              ↓\n    ┌─ 18:00 sync-pull (Cloud → local cache) ─┐\n    │  18:30 auto-memory.py                    │\n    │  → Stage 1: ARCHIVE.md (SHA-256 dedup)   │\n    │  → Stage 2: MEMORY.md (one-line summary) │\n    │                                           │\n    │  20:00 sync-push + reindex                │\n    │  22:00 session-extract.py                 │\n    │  → Pass 1: .learnings/ERRORS.md           │\n    │  → Pass 2: memory/YYYY-MM-DD.md           │\n    │  → archive analyzed → trash               │\n    └───────────────────────────────────────────┘\n\nbefore_agent_start → MemOS Cloud recall\n                  + Active Memory sub-agent\n                  + memory-core (bge-m3 + BM25)\n              ↓\n        Layered context injected before reply"},{"language":"bash","snippet":"bash scripts/auto-setup.sh"},{"language":"bash","snippet":"bash scripts/auto-setup.sh --skip-ollama   # Skip Ollama install\nbash scripts/auto-setup.sh --skip-memos    # Skip MemOS Cloud\nbash scripts/auto-setup.sh --dry-run       # Preview only"},{"language":"json","snippet":"{\n  \"plugins\": {\n    \"disabled\": [\"subconscious-personality-guardian\"],\n    \"deny\": [\"subconscious-personality-guardian\"]\n  }\n}"},{"language":"text","snippet":"User message → MemOS Cloud (static facts) → memory-core (recent context)"},{"language":"text","snippet":"User message\n  → Active Memory sub-agent (searches all memory stores)\n  → MemOS Cloud (injects long-term facts & preferences)\n  → memory-core (semantic + BM25 hybrid retrieval)\n  → Agent receives layered context"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: anamnesis-hub\ndescription: \"四层记忆架构 (Four-tier memory architecture for OpenClaw AI agents). 提供 L0 运行时语义检索 (Ollama bge-m3 + SQLite-vec 向量库)、L1 工作记忆 (每日 Markdown 日志)、L2 长期记忆 (MEMORY.md 索引 + ARCHIVE.md 档案 + facts.db 结构化知识图谱)、Dreaming 自动化提炼管线、三方同步 (Cloud ↔ Markdown ↔ Vector)、Active Memory 主动召回、auto-memory v3 两阶段提取 (ARCHIVE.md 归档 → MEMORY.md 摘要)、cross-platform-writer 跨平台写入。适用于首次配置持久化记忆、安装 memory-core/MemOS Cloud 插件、搭建多层记忆系统。\"\nversion: 1.13.2\n---\n\n# anamnesis-hub\n\nFour-tier memory architecture with automated Dreaming pipeline, three-way synchronization, Active Memory recall, and two-stage auto-extraction.\n\n## Overview\n\n| Tier | Layer | Technology | Purpose |\n|------|-------|-----------|---------|\n| **L0** | Runtime Retrieval | memory-core plugin (Ollama bge-m3 → SQLite + sqlite-vec) | Real-time semantic + BM25 hybrid search |\n| **L0** | Cloud Recall | MemOS Cloud plugin (*optional*) | Cross-device memory capture and recall |\n| **L0** | Active Memory | Built-in OpenClaw plugin | Pre-reply sub-agent memory search + context injection |\n| **L1** | Working Memory | `memory/YYYY-MM-DD.md` files | Daily summaries, todos, technical notes |\n| **L2a** | Long-term Index | `MEMORY.md` (~90 lines, read-only base) | Bidirectional index → ARCHIVE.md, 0% Auto-Extracted pollution |\n| **L2b** | Detailed Archive | `ARCHIVE.md` (~220 lines) | Full records with ← MEMORY.md:XX reverse references |\n| **L2c** | Structured KB | `facts.sqlite` (entity/key/value) | Precise lookup for IPs, ports, versions; activation/decay tracking |\n\n### Automated Pipelines\n\n| Pipeline | Schedule | Description |\n|----------|----------|-------------|\n| **Dreaming** | 03:00 UTC daily | Scan logs → DeepSeek analysis → promote to L2 |\n| **Three-way Sync** | 18:00 / 20:00 / 22:00 CST | Cloud ↔ Markdown ↔ Vector alignment |\n| **auto-memory v3** | 18:30 / 22:30 CST | MemOS Cloud facts → qwen3 filter → Stage1: ARCHIVE.md (SHA-256 dedup) → Stage2: MEMORY.md (summary) |\n| **session-extract** | 22:00 CST | Scan session JSONL → MemOS extractor/reranker → `.learnings/` + `memory/YYYY-MM-DD.md` (two-pass) |\n\n### Memory Flow (Unified Daily Pipeline)\n\n```\nagent_end → MemOS Cloud (cloud extraction)\n              ↓\n    ┌─ 18:00 sync-pull (Cloud → local cache) ─┐\n    │  18:30 auto-memory.py                    │\n    │  → Stage 1: ARCHIVE.md (SHA-256 dedup)   │\n    │  → Stage 2: MEMORY.md (one-line summary) │\n    │                                           │\n    │  20:00 sync-push + reindex                │\n    │  22:00 session-extract.py                 │\n    │  → Pass 1: .learnings/ERRORS.md           │\n    │  → Pass 2: memory/YYYY-MM-DD.md           │\n    │  → archive analyzed → trash               │\n    └───────────────────────────────────────────┘\n\nbefore_agent_start → MemOS Cloud recall\n                  + Active Memory sub-agent\n                  + memory-core (bge-m3 + BM25)\n              ↓\n        Layered context injected before reply\n```\n\n## Scripts\n\n| Script | Purpose |\n|--------|--------|\n| `aut"},{"path":"README.md","content":"# 🧠 anamnesis-hub\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![ClawHub](https://img.shields.io/badge/ClawHub-anamnesis--hub-blue)](https://clawhub.ai/victorqr/anamnesis-hub)\n\n**Three-tier memory architecture for OpenClaw AI agents.**  \nPersistent, automated, cross-device memory that never forgets.\n\n---\n\n## 中文简介\n\n**anamnesis-hub** 是一套面向 OpenClaw AI Agent 的**四层记忆架构**，解决跨会话的\"AI 失忆\"问题，v1.13 起支持自动记忆审核（P3 候选机制）和 Dreaming 自动化提炼管线。\n\n| 层级 | 功能 | 技术栈 |\n|------|------|--------|\n| **L0** 运行时检索 | 语义 + BM25 混合搜索，实时注入上下文 | memory-core + Ollama bge-m3 + SQLite-vec |\n| **L0** 云召回 *可选* | 多设备记忆同步，跨实例共享 | MemOS Cloud 插件 |\n| **L0** 主动召回 | 回复前 sub-agent 搜索相关记忆 | Active Memory 插件（内置） |\n| **L1** 工作记忆 | 按日归档的 Markdown 日志，人工可编辑 | `memory/YYYY-MM-DD.md` |\n| **L2a** 索引层 | 双向索引 ←→ ARCHIVE.md，零污染 ~90行 | `MEMORY.md`（只读基底） |\n| **L2b** 档案层 | 详细记录含反向引用 ← MEMORY.md:XX | `ARCHIVE.md`（~220行，历史垃圾已清理） |\n| **L2c** 知识图谱 | 结构化 entity/key/value，精确查找 + 热度追踪 | `facts.sqlite` |\n\n**自动化管线（v1.13.2）**：Dreaming（每日 UTC 03:00）→ 三方同步（18:00/20:00/22:00）→ auto-memory v3（两阶段管道：ARCHIVE.md 归档 → MEMORY.md 摘要）→ session-extract（扫描会话JSONL → MemOS提取 → .learnings/ + memory/）。\n\n### v1.13.2 Bug Fix Release\n- ✅ 修复 `auto_memory_extract.py` 缺少 `import os` 导致运行时崩溃\n- ✅ 修复 `daily-memory-pipeline.sh` `set -e` 下 `result=$(...)` 提前终止脚本\n- ✅ 修复 `session-extract.py` pass=2 跳过历史文件的逻辑错误\n- ✅ 修复 `facts_activation.py` GC 只预览不删除的问题（新增 `--force` 参数）\n- ✅ 修复 `write_file.py` 非原子写入（新增 tempfile+rename 原子写入）\n- ✅ 修复 `candidates_review.py` 状态文件非原子写入和 `approve_all()` 循环数据不一致问题\n\n### 附赠技能\n- **cross-platform-writer** — 跨平台文本写入，自动处理编码/BOM/CRLF\n- **auto-memory** — 对话记忆自动提取 (v3: 两阶段管道 + SHA-256 去重)\n- **seed-facts-db** — 从 ARCHIVE.md 初始化结构化知识图谱\n\n一行命令部署：`bash scripts/auto-setup.sh`\n\n---\n\n## One-Command Setup\n\n```bash\n# Clone and run\ngit clone https://github.com/VictorQR/anamnesis-hub.git\ncd anamnesis-hub\nbash scripts/auto-setup.sh\n```\n\nThe interactive script handles everything:\n\n| Step | What it does | Toggle |\n|------|-------------|--------|\n| ✅ | Install **Ollama** (standard or Intel) | `--skip-ollama` |\n| ✅ | Download **bge-m3** embedding model | — |\n| ✅ | **Plugin conflict check** (auto-detect subconscious-personality-guardian) | — |\n| ✅ | Install **memory-core** plugin | — |\n| ✅ | Configure **openclaw.json** with optimized defaults | Auto-insert on confirm |\n| ✅ | Install **MemOS Cloud** (*optional*) with full recommended config | `--skip-memos` |\n| ✅ | Create `memory/` directory | — |\n| ✅ | Set up **Dreaming cron** (03:00 UTC) | — |\n\n```bash\n# Preview mode\nbash scripts/auto-setup.sh --dry-run\n\n# Skip Ollama (already installed)\nbash scripts/auto-setup.sh --skip-ollama\n\n# Skip MemOS Cloud\nbash scripts/auto-setup.sh --skip-memos\n```\n\n---\n\n## Architecture\n\n| Tier | Layer | Technology | Purpose |\n|------|-------|-----------|---------|\n| **L0** | Runtime Retrieval | memory-core + Ollama bge-m3 + SQLite-vec | Real-time semantic + BM25 hybrid search |\n| **L0** | Cloud Recall | MemOS Cloud plugin (*optional*) |"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn79ykbnfmj09fxeevf1k0y88d82snbp\",\n  \"slug\": \"anamnesis-hub\",\n  \"version\": \"1.13.2\",\n  \"publishedAt\": 1779087224888\n}"},{"path":"references/architecture.md","content":"# OpenClaw Memory Hub — Architecture\n\n## Design Principles\n\n1. **Local-first**: Primary storage is local SQLite + markdown files; cloud is sync target, not source of truth\n2. **Progressive disclosure**: L0 catches everything, L1 structures daily context, L2 curates what matters\n3. **Zero-latency retrieval**: bge-m3 embedding runs on local Ollama; no API latency\n4. **Multi-language**: bge-m3 supports 100+ languages, 1024-dim vectors\n5. **DAG-based composition**: memory-core uses DAG for multi-agent memory lineage\n\n## Four-Tier Architecture\n\n```\n┌─────────────────────────────────────────────┐\n│                L0 — Runtime                  │\n│  ┌─────────────────┐  ┌──────────────────┐  │\n│  │  memory-core     │  │  MemOS Cloud     │  │\n│  │  (Ollama bge-m3) │  │  (Cloud Recall)  │  │\n│  │  SQLite + vec    │  │  Lifecycle hooks │  │\n│  └────────┬────────┘  └────────┬─────────┘  │\n│           │                     │            │\n│  ┌────────▼─────────────────────▼─────────┐  │\n│  │  Active Memory (built-in plugin)       │  │\n│  │  Pre-reply sub-agent memory search     │  │\n│  └────────┬───────────────────────────────┘  │\n│           │                                  │\n│  ┌────────▼───────────────────────────────┐  │\n│  │  Hybrid Search (semantic + BM25)       │  │\n│  └────────────────┬───────────────────────┘  │\n└───────────────────┼──────────────────────────┘\n                    │\n┌───────────────────▼──────────────────────────┐\n│              L1 — Working Memory              │\n│  memory/YYYY-MM-DD.md (30-90 day retention)  │\n│  - Daily conversation summaries              │\n│  - Technical notes & decisions               │\n│  - TODOs & reminders                         │\n│  - Hand-editable, human-readable             │\n└───────────────────┬──────────────────────────┘\n             L2a — Index Layer (MEMORY.md, ~90 lines)\n             L2b — Archive Layer (ARCHIVE.md, ~220 lines)\n             L2c — Knowledge Graph (facts.sqlite)\n                    │  Dreaming pipeline\n                    │  (Daily 03:00 UTC)\n                    ▼\n┌──────────────────────────────────────────────┐\n│           L2 — Long-term Memory               │\n│  MEMORY.md (read-only base, auto-curated)     │\n│  - Key user facts & profile                   │\n│  - Permanent decisions & preferences          │\n│  - Encrypted sensitive info (SHA-256)         │\n│  - Promoted high-scoring insights             │\n└──────────────────────────────────────────────┘\n```\n\n## Memory Plugins\n\n### memory-core (Primary)\n\n- **Provider**: OpenClaw Plugin Registry\n- **Embedding Backend**: Ollama (`http://127.0.0.1:11434`)\n- **Model**: `bge-m3` (BAAI, 1024-dimension, multi-language)\n- **Vector Storage**: SQLite + sqlite-vec extension\n- **Search**: Semantic vector similarity + BM25 keyword hybrid\n- **Database**: `~/.openclaw/memory/main.sqlite`\n- **Indexing**: Automatic on file save; manual via `openclaw memory index --force`\n\n### MemOS Cloud Plugin (Supplementary)\n\n- **Lifecycle Hook**: Captures and recall"},{"path":"references/candidates-review.md","content":"# Candidates Review — P3 记忆候选审核机制\n\n> Dreaming / auto-memory 产出的候选记忆不再直接写入，需人工确认后再归档。\n> 最后更新：2026-05-17 | v1.13.1\n\n---\n\n## 一、背景与目的\n\n传统流程中，Dreaming 和 auto-memory 自动将记忆写入 ARCHIVE.md/MEMORY.md，存在噪音污染风险。P3 机制引入人工审核层：\n\n```\n自动产出（Dreaming/auto-memory）\n    ↓\nmemory/.candidates/YYYY-MM-DD.json（待审队列）\n    ↓\n用户确认（approve / reject）\n    ↓\n写入 ARCHIVE.md / MEMORY.md\n```\n\n**P3 含义**：Priority 3，第三优先级审核（低于 P1 即时生效、P2 自动归档）。\n\n---\n\n## 二、流程详解\n\n### 2.1 候选来源\n\n| 来源 | 说明 |\n|------|------|\n| **Dreaming** | 每日 UTC 03:00，扫描日志 → DeepSeek 分析 → 高分候选（minScore 0.8，max 10 items） |\n| **auto-memory v3** | CST 18:30/22:30，MemOS Cloud → qwen3 过滤 → 候选条目 |\n| **session-extract** | CST 22:00，JSONL 扫描 → MemOS extractor/reranker → 候选条目 |\n\n### 2.2 候选文件格式\n\n`memory/.candidates/YYYY-MM-DD.json`：\n```json\n{\n  \"pending\": {\n    \"cand_001\": {\n      \"date\": \"2026-05-17\",\n      \"category\": \"偏好/习惯\",\n      \"content\": \"用户偏好晚上工作，凌晨1点后效率最高\",\n      \"source\": \"dreaming\",\n      \"score\": 0.92\n    },\n    \"cand_002\": {\n      \"date\": \"2026-05-17\",\n      \"category\": \"技术/配置\",\n      \"content\": \"升仕703F摩托车每8000km需要更换机油\",\n      \"source\": \"auto-memory\",\n      \"score\": 0.87\n    }\n  },\n  \"approved\": {},\n  \"rejected\": {},\n  \"total_reviewed\": 0\n}\n```\n\n### 2.3 审核状态\n\n| 状态 | 说明 |\n|------|------|\n| `pending` | 待审核，需用户确认 |\n| `approved` | 已批准，写入 ARCHIVE.md |\n| `rejected` | 已拒绝，不写入 |\n\n---\n\n## 三、审核命令\n\n```bash\n# 列出所有待审候选（按 score 倒序）\npython3 scripts/candidates_review.py list\n\n# 批准指定候选（写入 ARCHIVE.md）\npython3 scripts/candidates_review.py approve --id cand_001\n\n# 拒绝指定候选\npython3 scripts/candidates_review.py reject --id cand_001\n\n# 批准所有待审\npython3 scripts/candidates_review.py approve-all\n\n# 审核统计\npython3 scripts/candidates_review.py stats\n```\n\n---\n\n## 四、输出示例\n\n### list 输出\n```json\n{\n  \"status\": \"ok\",\n  \"pending_count\": 2,\n  \"candidates\": [\n    {\n      \"id\": \"cand_001\",\n      \"date\": \"2026-05-17\",\n      \"category\": \"偏好/习惯\",\n      \"content\": \"用户偏好晚上工作，凌晨1点后效率最高\",\n      \"source\": \"dreaming\",\n      \"score\": 0.92\n    },\n    {\n      \"id\": \"cand_002\",\n      \"date\": \"2026-05-17\",\n      \"category\": \"技术/配置\",\n      \"content\": \"升仕703F摩托车每8000km需要更换机油\",\n      \"source\": \"auto-memory\",\n      \"score\": 0.87\n    }\n  ]\n}\n```\n\n### approve 输出\n```json\n{\n  \"status\": \"approved\",\n  \"id\": \"cand_001\",\n  \"written_to\": \"/home/victor/.openclaw/workspace/ARCHIVE.md\"\n}\n```\n\n### stats 输出\n```json\n{\n  \"status\": \"ok\",\n  \"pending\": 2,\n  \"approved\": 15,\n  \"rejected\": 3,\n  \"total_reviewed\": 18\n}\n```\n\n---\n\n## 五、approve-all 行为\n\n`approve-all` 依次对每个 pending 候选执行 approve：\n1. 读取当前 state\n2. 写入 ARCHIVE.md（追加到末尾）\n3. 从 pending 移到 approved\n4. 重载 state（避免状态冲突）\n5. 重复直到所有 pending 处理完毕\n\n---\n\n## 六、ARCHIVE.md 写入格式\n\n批准后的条目写入 ARCHIVE.md 末尾，格式：\n```markdown\n<!-- candidate:cand_001 -->\n- **偏好/习惯** (已审核 2026-05-17): 用户偏好晚上工作，凌晨1点后效率最高\n```\n\n---\n\n## 七、与记忆架构的集成\n\n```\nDreaming / auto-memory / session-extract\n    ↓ 产出候选\nmemory/.candidates/YYYY-MM-DD.json\n    ↓ 用户审核\nARCHIVE.md（完整条目）\n    ↓\nMEMORY.md（两阶段摘要）\n    ↓\nfacts.sqlite（结构化查询）\n```\n\n候选审核是自动归档前的最后一层过滤，确保只有用户确认过的内容进入长期记忆。\n\n---\n\n## 八、状态文件位置\n\n`memory/.candidates/"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"四层记忆架构 (Four-tier memory architecture for OpenClaw AI agents). 提供 L0 运行时语义检索 (Ollama bge-m3 + SQLite-vec 向量库)、L1 工作记忆 (每日 Markdown 日志)、L2 长期记忆 (MEMORY.md 索引... Skill: Anamnesis Hub Owner: victorqr Summary: 四层记忆架构 (Four-tier memory architecture for OpenClaw AI agents). 提供 L0 运行时语义检索 (Ollama bge-m3 + SQLite-vec 向量库)、L1 工作记忆 (每日 Markdown 日志)、L2 长期记忆 (MEMORY.md 索引... Tags: latest:v1.13.2 Version history: v1.13.2 | 2026-05-18T06:53:44.888Z | user Release 1.13.2 vv1.13.2 | 2026-05-18T03:37:59.901Z | user v1.13.2: fix P0/P1 bugs v1.13.1 | 2026-05-16T17:42:53.096Z | user v1.13.1: 更","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1175,"uniquenessScore":49,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T23:23:31.661Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T23:23:31.661Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-13T06:59:19.969Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}