mempal
Memory framework
First committed by ZhangHanDong
Published in ZhangHanDong/mempal. Publisher page
284 GitHub stars
What it is
AI Agent Memory
AutoGineer overview, from the brain’s own files
Mempal is a project memory system designed for coding agents, implemented as a single binary. It enables agents to store, search, and retrieve decision context across sessions. The system utilizes a hybrid search approach combining BM25 keyword matching and vector semantic search, alongside a knowledge graph for tracking entity relationships. It includes a self-describing protocol that allows agents to understand how to interact with the memory system without manual system prompt configuration. Mempal supports cross-project tunnels, multilingual embedding, and collaborative agent workflows through inbox-based handoffs.
How it works
Memory model: Hybrid
AutoGineer overview, from the brain’s own files
Mempal stores data in a SQLite database located at ~/.mempal/palace.db. It ingests project information by chunking and embedding content, which is then searchable via CLI or MCP tools. The system uses a memory protocol to guide agent behavior, such as verifying facts before ingestion and citing sources. It supports collaborative agent interactions by allowing agents to push messages to a per-project inbox, which are then processed via hooks during user prompt submission. The knowledge graph tracks triples with temporal validity, and the system provides tools for fact-checking and context assembly.
| Folder | Role | Files |
|---|---|---|
| .claude | agent-config | 2 |
| .github | agent-config | 3 |
| docs | docs | 129 |
| hooks | hooks | 2 |
| src | source-code | 30 |
| tests | tests | 31 |
| benchmarks | folder | 1 |
| books | folder | 41 |
| crates | folder | 71 |
| specs | folder | 131 |
The agent writes
- record_checked evidence: AGENTS.md
Requirements
Runtimes: Rust
Databases: SQLite
Works with: Claude Code, OpenAI Codex, GitHub Copilot, Cursor, Kiro, OpenCode, Amp, Cline, JetBrains Junie, Devin (ex-Windsurf)
Set it up
This brain runs code automatically: 2 hooks (claude-code). Review .claude/settings.json before opening the folder in Claude Code. No step below turns a hook on for you.
.claude/settings.json:if echo "$TOOL_INPUT" | grep -q 'git commit'; then echo 'MEMPAL REMINDER: You just committed code. Call mempal_ingest to save the decision context (what was built, why, what was considered). Rule 4: SAVE AFTER DECISIONS.'; fi.claude/settings.json:bash .claude/hooks/user-prompt-submit.sh
- Not scanned by AutoGineerThe author’s MCP configuration (.mcp.json) also starts it in a way AutoGineer does not offer. Read that file: AutoGineer did not scan that path; what it runs is listed under “This brain runs”. https://github.com/ZhangHanDong/mempal/blob/9ed705d78321daf5878e9579777b1a471e97c6f1/.mcp.json
- Not scanned by AutoGineerThe author’s README also describes installing it with cargo. Read its install section: AutoGineer did not scan that path. https://github.com/ZhangHanDong/mempal/blob/9ed705d78321daf5878e9579777b1a471e97c6f1/README.md#quick-start
First committed by ZhangHanDong. Published in ZhangHanDong/mempal. Licence: MIT License.
Usage
AutoGineer overview, from the brain’s own files
- Initialize project memory for a directory
- Ingest project files into a specific wing
- Perform hybrid search for past decisions
- Fact-check assertions against the knowledge graph
- Collaborate between agents using inbox pushes
- Manage knowledge lifecycle and anchor publication
- “mempal search "auth decision clerk"”
- Returns past decisions related to authentication and Clerk, including source citations.
- “mempal fact-check path/to/file”
- Identifies potential contradictions like similar name conflicts or stale facts against the knowledge graph.
Documentation by ZhangHanDong
mempal
Image: Crates.io Image: Downloads Image: docs.rs Image: CI Image: Release Image: License: MIT
Project memory for coding agents. Single binary, cargo install mempal, find past decisions with citations in seconds.
Latest release: v0.9.1 (2026-08-19).
What It Does
Agent writes code → commits → mempal saves the decision context
Next session (any agent) → mempal search → finds the decision with source citationHybrid search: BM25 keyword matching + vector semantic search, merged via Reciprocal Rank Fusion
Knowledge graph: subject-predicate-object triples with temporal validity (valid_from/valid_to)
Cross-project tunnels: automatic discovery when the same room appears in multiple wings
Self-describing protocol: MEMORY_PROTOCOL embedded in MCP ServerInfo teaches any agent how to use mempal — no system prompt configuration required
Multilingual: model2vec-rs (BGE-M3 distilled) as default embedder, zero native dependencies
Single file: everything lives in
~/.mempal/palace.db(SQLite + sqlite-vec)
Quick Start
cargo install mempal --version 0.9.1 --locked
mempal init ~/code/myapp
mempal ingest ~/code/myapp --wing myapp
mempal search "auth decision clerk"
mempal wake-upWith REST support:
cargo install mempal --version 0.9.1 --locked --features restFrom a source checkout:
cargo install --path . --lockedConfiguration
Config at ~/.mempal/config.toml (optional, defaults work without it):
db_path = "~/.mempal/palace.db"
[embed]
backend = "model2vec" # default, zero native deps
# model = "minishlab/potion-multilingual-128M" # default multilingual model (1024d)Other backends:
# Local ONNX (requires --features onnx)
[embed]
backend = "onnx"
# External API
[embed]
backend = "api"
api_endpoint = "http://localhost:11434/api/embeddings"
api_model = "nomic-embed-text"
dimensions = 768 # optional; defaults to 384 when omittedCommands
| Command | Purpose |
|---|---|
mempal init <DIR> [--dry-run] | Infer wing/rooms from project tree |
mempal ingest <DIR> --wing <W> [--dry-run] | Chunk, embed, and store |
mempal search <QUERY> [--wing W] [--room R] [--json] | Hybrid search (BM25 + vector + RRF) |
mempal wake-up [--format aaak] | Context refresh, sorted by importance |
mempal compress <TEXT> | AAAK format output |
mempal delete <DRAWER_ID> | Soft-delete a drawer |
mempal purge [--before TIMESTAMP] | Permanently remove soft-deleted drawers |
mempal kg add <S> <P> <O> | Add a knowledge graph triple |
mempal kg query [--subject S] [--predicate P] | Query triples |
mempal kg timeline <ENTITY> | Chronological view of an entity |
mempal kg stats | Knowledge graph statistics |
mempal tunnels | Cross-wing room links |
mempal taxonomy list / edit | Manage routing keywords |
mempal reindex | Re-embed all drawers after model change |
mempal status | DB stats, schema version, scopes |
mempal serve [--mcp] | MCP server (+ REST with feature) |
mempal cowork-install-hooks [--global-codex] | Install UserPromptSubmit hooks for Claude Code (+ optional Codex merge) |
mempal cowork-drain --target <claude|codex> | Drain inbox messages (for hook use; exits 0 on any failure) |
mempal cowork-status --cwd <PATH> | Read-only view of both inboxes at <PATH> |
mempal fact-check [PATH|-] [--wing W] [--room R] [--now <UNIX_SECS>] | Offline contradiction check against KG triples + known entities |
mempal bench longmemeval <FILE> | LongMemEval retrieval benchmark |
Project ignore rules
mempal init <DIR> and directory-mode mempal ingest <DIR> use the target
project's ignore rules by default. They respect .gitignore, .git/info/exclude,
global Git excludes, and a root-level .mempalignore. Built artifacts that should
never become project memory can be listed in .mempalignore without changing the
project's Git behavior.
Use --ignore-file <PATH> to add one or more extra ignore files for a run. Use
--no-gitignore or --no-mempalignore to disable either default source. Explicit
file ingest remains explicit: mempal ingest path/to/file --wing <W> still ingests
that file even if the project ignore rules would skip it during directory traversal.
MCP Server (10 tools)
mempal serve --mcp exposes these tools via Model Context Protocol:
| Tool | Purpose |
|---|---|
mempal_status | State + protocol + AAAK spec (teaches agent on first call) |
mempal_search | Hybrid search with tunnel hints, citations, and AAAK-derived structured signals |
mempal_ingest | Store memories with optional importance (0-5) and dry_run; reports lock_wait_ms when concurrent ingest was observed |
mempal_delete | Soft-delete with audit trail |
mempal_taxonomy | List or edit routing keywords |
mempal_kg | Knowledge graph: add/query/invalidate/timeline/stats |
mempal_tunnels | Cross-wing room discovery |
mempal_peek_partner | Read partner agent's live session (Claude ↔ Codex), pure read, never writes |
mempal_session_peek | Read an explicit Claude/Codex local session by concrete tool + cwd, including same-tool cross-project reads |
mempal_cowork_push | Send a short handoff message to partner agent's inbox (at-next-submit delivery) |
mempal_fact_check | Offline contradiction detection vs KG triples + known entities (similar-name, relation mismatch, stale facts) |
The server embeds MEMORY_PROTOCOL (11 behavioral rules) in the MCP initialize.instructions field. Any MCP client learns the workflow automatically.
Memory Protocol
mempal teaches agents these rules through self-description:
FIRST-TIME SETUP — call
mempal_statusto discover wings before filteringWAKE UP — different clients have different pre-load mechanisms
VERIFY BEFORE ASSERTING — search before stating project facts
QUERY WHEN UNCERTAIN — search on "why did we...", "last time we..." 3a. TRANSLATE TO ENGLISH — translate non-English queries before searching
SAVE AFTER DECISIONS — persist rationale, not just outcomes
CITE EVERYTHING — reference drawer_id and source_file 5a. KEEP A DIARY — record behavioral observations in wing="agent-diary"
PARTNER AWARENESS — use
mempal_peek_partnerfor live partner-agent session,mempal_session_peekfor explicit same-tool/cross-project local sessions, and mempal search only for crystallized drawersDECISION CAPTURE —
mempal_ingestis for firm decisions only; include partner input when peek informed the callCOWORK PUSH — use
mempal_cowork_pushas the SEND primitive in the SEND/READ/PERSIST triad; at-next-submit delivery, not real-timeVERIFY BEFORE INGEST — call
mempal_fact_checkbefore persisting a decision that asserts entity relationships; it catches similar-name typos, relation mismatches against the KG, and stale facts with expiredvalid_to
Agent Cowork (P6 peek + P8 push)
Two coding agents (Claude Code and Codex) can collaborate on the same repo through a per-project inbox + hook-driven injection channel, on top of mempal_peek_partner (read live partner session), mempal_session_peek (read an explicit local session by concrete tool + cwd), and mempal_cowork_push (send ephemeral handoff).
Install hooks once per repo (run at the repo root):
mempal cowork-install-hooks --global-codexThis writes:
.claude/hooks/user-prompt-submit.sh+ merges a registration entry into.claude/settings.jsonso Claude Code fires the hook on every user prompt.~/.codex/hooks.jsonUserPromptSubmit entry so Codex fires the same drain on every user prompt.
The --global-codex part is optional. The re-run is idempotent and self-heals stale/wrong drain entries — re-installing after a mempal upgrade is always safe.
Delivery is at-next-UserPromptSubmit, not real-time: a push from Claude to Codex becomes visible only when the Codex user submits their next prompt, at which point the hook drains the inbox and prepends the message as additionalContext on that turn.
Check inbox state at any time without draining:
mempal cowork-status --cwd "$PWD"Known limitations
Codex feature flag dependency: Codex's hooks runtime is gated behind the
codex_hooksfeature flag (currently "under development" in shippedcodex-cli). If the flag is off, Codex silently ignores~/.codex/hooks.json.install-hooksdetects this and prints a warning with the activation command:codex features enable codex_hooks.Two Claude-side artifacts: Claude Code does not auto-discover hook scripts by filename. Both
.claude/hooks/user-prompt-submit.shand the matching entry in.claude/settings.jsonare required.install-hookswrites both; do not remove either by hand.TUI restart needed after config changes on the Codex side: Codex reads
config.toml+hooks.jsonat process startup only. After enabling the feature flag or runninginstall-hooks, fully quit and relaunch the Codex TUI before expecting hooks to fire.MCP server re-spawn: Claude Code spawns the mempal MCP server at client startup. After upgrading the mempal binary (
cargo install ...), restart Claude Code so the MCP server respawns and exposes newly added tools likemempal_cowork_pushormempal_fact_check.Bidirectional scope:
mempal_cowork_pushcurrently requires an MCP client identifying itself asclaude-codeorcodex(or their aliases). Generic MCP clients cannot push because caller identity is required to fill thefromfield and enforce self-push rejection. This is by design for the Claude ↔ Codex pair.
Concurrent Ingest Safety (P9-B)
Two agents writing to the same source simultaneously used to be a TOCTOU race: both would pass the dedup check, both would insert, producing duplicate drawers or mismatched vectors. Since 0.4.0, mempal_ingest and ingest_file_with_options acquire a per-source advisory lock before entering the dedup + insert critical section.
Lock files live at
~/.mempal/locks/<16-hex>.lock, created lazily, released on guard drop.5 s timeout, 50 ms retry + jitter;
LockError::Timeoutsurfaces as aningesterror.Every non-dry-run response carries
lock_wait_ms: Option<u64>so agents can detect contention.Dry-run does not acquire the lock (no writes, no race).
Unix only in 0.4.0. On Windows the lock path is a no-op fallback;
LockFileExsupport is tracked for a follow-up.
Offline Fact Checking (P9-A)
mempal_fact_check — and its CLI counterpart mempal fact-check — compare a text blob against the existing KG triples + the entity registry derived from recent drawers. It flags three issue classes, all deterministic and zero-LLM:
| Issue | Trigger |
|---|---|
SimilarNameConflict | Text mentions a name within Levenshtein distance ≤ 2 of a known entity, and the names are not equal. |
RelationContradiction | Text asserts a predicate (e.g. brother_of) that's in the incompatibility dictionary against an existing KG triple with the same (subject, object) endpoints. |
StaleFact | Text asserts a triple whose KG row has valid_to < now (Unix seconds). |
Extracted triples today cover three narrow patterns: "X is Y's ROLE", "X works at / for Y", and "X is [the|a|an] ROLE of Y". Unknown sentence shapes are silently ignored, so the tool errs toward under-reporting rather than false positives.
Protocol Rule 11 guides agents to run this before ingesting a decision that asserts entity relationships. See specs/p9-fact-checker.spec.md for the full contract.
Search Architecture
query → BM25 (FTS5) → ranked by keyword match
→ Vector (sqlite-vec) → ranked by semantic similarity
→ RRF Fusion (k=60) → merged ranking
→ Wing/Room filter → scoped results
→ Tunnel hints → cross-project referencesKnowledge Graph
mempal kg add "Kai" "recommends" "Clerk"
mempal kg add "Clerk" "replaced" "Auth0" --source-drawer drawer_xxx
mempal kg timeline "Kai"
mempal kg statsTriples support temporal validity — relationships can be invalidated when they expire.
Agent Diary
Cross-session behavioral learning — agents record observations, lessons, and patterns:
# Search diary entries
mempal search "lesson" --wing agent-diary
mempal search "pattern" --wing agent-diary --room claudeDiary entries use the existing mempal_ingest tool with wing="agent-diary" and room=agent-name. MEMORY_PROTOCOL Rule 5a teaches agents to write diary entries. Integrates with Claude Code's auto-dream for automatic memory consolidation.
Ingest Formats (5)
| Format | Auto-detected by |
|---|---|
| Claude Code JSONL | type + message fields |
| ChatGPT JSON | Array or mapping tree |
| Codex CLI JSONL | session_meta + event_msg entries |
| Slack DM JSON | type: "message" + user + text |
| Plain text | Fallback |
AAAK Compression
Output-only format readable by any LLM without decoding:
mempal compress "Kai recommended Clerk over Auth0 based on pricing and DX"
# V1|manual|compress|1744156800|cli
# 0:KAI+CLK+AUT|kai_clerk_auth0|"Kai recommended Clerk over Auth0..."|★★★★|determ|DECISIONChinese text uses jieba-rs POS tagging for proper word segmentation.
Architecture
| Crate | Responsibility |
|---|---|
mempal | Installable CLI package, REST entrypoint, and legacy facade paths |
mempal-embed | Public Embedder / EmbedderFactory traits, API embedder, model2vec and ONNX implementations |
mempal-search-core | Public FTS5 query escaping and RRF rank-fusion primitives |
mempal-agent-memory | Public agent-memory domain types and anchor helpers |
mempal-mcp-protocol | Public self-describing MEMORY_PROTOCOL text |
mempal-store-sqlite | Public SQLite storage layer: schema, migrations, Database, FTS5, sqlite-vec, KG, tunnels, cards, adoption tables |
mempal-runtime | Public runtime workflows: ingest, search orchestration, context, brief, knowledge, factcheck, projects, cowork, doctor, AAAK |
mempal-mcp-server | Public MCP server adapter and tool wiring for the runtime |
Key design choices:
model2vec-rs default embedder — zero native deps, multilingual (BGE-M3 distilled)
ort (ONNX) available behind
onnxfeature flag for max qualityFTS5 for BM25 keyword search — synced via SQLite triggers
Soft-delete with audit trail —
mempal delete+mempal purgeImportance ranking — drawers have 0-5 importance, wake-up sorts by importance
Semantic dedup — ingest warns (doesn't block) when similar content exists
Public workspace crates — reusable libraries are maintained in this repo and published as versioned crates while
cargo install mempalremains the CLI path. P114 keeps the split coarse: storage, runtime, and MCP server are separate crates, but feature families such as knowledge, cowork, and context remain inmempal-runtime.
Development
cargo test --workspace
cargo test --workspace --all-features
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo fmt --all --checkAfter changing the embedding model or dimensions, re-embed existing drawers:
mempal reindexDocs
Usage guide:
docs/usage.mdAAAK dialect:
docs/aaak-dialect.mdSpecs (internal agent-spec contracts, on GitHub): https://github.com/ZhangHanDong/mempal/tree/main/specs
Plans (internal implementation plans, on GitHub): https://github.com/ZhangHanDong/mempal/tree/main/docs/plans
Benchmark:
benchmarks/longmemeval_s_summary.md— includes the older 384d baseline and the newer model2vec 256d run
Book: MemPalace — Reforging Memory in Rust
mempal 的设计分析和完整技术叙事,收录在《MemPalace: AI 记忆的第一性原理》Part 10(第 26-30 章):
| 章节 | 内容 |
|---|---|
| 第 26 章 | 为什么用 Rust 重铸 — 触发点、重写判断、语言选择 |
| 第 27 章 | 保留了什么、改变了什么 — 5 维度对比 + 架构图 |
| 第 28 章 | 自描述协议 — MEMORY_PROTOCOL、7 条规则、agent 生命周期 |
| 第 29 章 | 多 Agent 协作 — Claude↔Codex 接力、反模式发现、agent 日记 |
| 第 30 章 | 诚实的差距 — benchmark 数据、6 个 gap |
docs/usage.md
mempal Usage Guide
This guide is for the repository as it exists today: local CLI workflows, MCP usage, AAAK output, the optional REST server, and the native LongMemEval harness.
mempal is a local memory system for coding agents. It stores raw text in SQLite, builds embeddings for retrieval, and always returns citations such as drawer_id and source_file.
Mental Model
Before using the CLI, keep four nouns straight:
wing: the top-level scope, usually one project or knowledge domainroom: a sub-scope inside a wing, usually inferred from directory names or edited by taxonomydrawer: one stored memory item or chunksource_file: where the drawer came from; for directory ingest, stored relative to the ingest root
mempal is raw-first:
original text lives in the
drawerstablevectors live in
drawer_vectorsAAAK is output-only and does not replace stored raw text
Install
Install the latest released CLI from crates.io:
cargo install mempal --version 0.9.1 --lockedInstall with REST support:
cargo install mempal --version 0.9.1 --locked --features restFor development without installation:
cargo run -- --help
cargo run --features rest -- serve --helpSource checkouts are Cargo workspaces. The root package is still mempal and
still owns the installable CLI binary, while reusable public crates live under
crates/:
mempal-embed: embedding traits and implementationsmempal-search-core: FTS5 query escaping and RRF rank fusionmempal-agent-memory: memory domain types and anchor helpersmempal-mcp-protocol: self-describing MCP protocol textmempal-store-sqlite: SQLite schema, migrations,Database, FTS5, sqlite-vec, KG, tunnels, cards, and adoption tablesmempal-runtime: ingest, search orchestration, context, brief, knowledge, factcheck, projects, cowork, doctor, and AAAK workflowsmempal-mcp-server: MCP server adapter and tool wiring
The split is intentionally coarse. The root mempal package remains the
installable CLI/REST facade, and feature families such as knowledge, cowork,
context, and factcheck stay grouped under mempal-runtime instead of becoming
separate crates.
Configuration
Config file path:
~/.mempal/config.tomlDefault config:
db_path = "~/.mempal/palace.db"
[embed]
backend = "model2vec"
# model = "minishlab/potion-multilingual-128M" # default multilingual modelUse local ONNX instead of the default model2vec backend:
db_path = "~/.mempal/palace.db"
[embed]
backend = "onnx"Use an external embedding API instead of local embeddings:
db_path = "~/.mempal/palace.db"
[embed]
backend = "api"
api_endpoint = "http://localhost:11434/api/embeddings"
api_model = "nomic-embed-text"
dimensions = 768 # optional; defaults to 384 when omittedNotes:
model2vecis the default backend.The default local model is
minishlab/potion-multilingual-128M.First use of
model2vecoronnxmay download model assets.If
config.tomlis missing,mempalstill works with defaults.The benchmark and search commands use whatever embedder backend is configured here.
Command Cheat Sheet
Use this when you already know the concepts and just need the right command quickly.
| Command | Purpose |
|---|---|
mempal init <DIR> [--dry-run] [--ignore-file PATH] | infer a wing and seed initial taxonomy rooms from a project tree |
mempal ingest --wing <WING> <DIR> [--dry-run] [--ignore-file PATH] | chunk, embed, and store a project tree |
mempal search <QUERY> [--wing W] [--room R] [--json] | hybrid search (BM25 + vector + RRF) with tunnel hints |
mempal context <QUERY> [--format json] [--include-evidence] [--dao-tian-limit N] | assemble mind-model runtime context (dao_tian -> dao_ren -> shu -> qi); default dao_tian budget is 1 |
mempal field-taxonomy [--format json] | inspect read-only recommended field values for typed memory |
mempal knowledge distill --statement ... --content ... --tier dao_ren --supporting-ref <ID> | create candidate knowledge from evidence refs |
mempal knowledge policy [--format json] | inspect read-only Stage-1 promotion policy thresholds |
mempal knowledge gate <ID> [--format json] | evaluate whether knowledge satisfies promotion gate policy without mutating it |
mempal knowledge promote <ID> --status promoted --verification-ref <ID> --reason ... | promote bootstrap knowledge into active runtime use |
mempal knowledge demote <ID> --status demoted --evidence-ref <ID> --reason ... --reason-type contradicted | demote or retire contradicted / obsolete bootstrap knowledge |
mempal wake-up [--format aaak] | L0/L1 refresh sorted by importance; not a typed mind-model context pack |
mempal compress <TEXT> | format arbitrary text as AAAK |
mempal kg add <S> <P> <O> [--source-drawer ID] | add a knowledge graph triple |
mempal kg query [--subject S] [--predicate P] [--object O] | query triples |
mempal kg timeline <ENTITY> | chronological view of an entity's relationships |
mempal kg stats | knowledge graph statistics |
mempal tunnels | discover rooms shared across multiple wings |
mempal taxonomy list | inspect current routing keywords |
mempal taxonomy edit <WING> <ROOM> --keywords ... | tune routing behavior |
mempal reindex | re-embed all drawers after model/backend change |
mempal status | schema version, drawer counts, triples, deleted drawers, scopes |
mempal delete <DRAWER_ID> | soft-delete one drawer |
mempal purge [--before ...] | permanently remove soft-deleted drawers |
mempal serve --mcp | run the MCP server over stdio |
mempal bench longmemeval <DATA_FILE> | run the native LongMemEval retrieval benchmark |
First 5 Minutes
This is the shortest realistic flow for a new project.
1. Inspect the inferred taxonomy
Preview which wing and room names mempal will infer:
mempal init ~/code/myapp --dry-runTypical output:
dry_run=true
wing: myapp
rooms:
- auth
- deploy
- docsWrite those taxonomy entries:
mempal init ~/code/myappBy default, init and directory-mode ingest respect the target project's
.gitignore, .git/info/exclude, global Git excludes, and a root-level
.mempalignore. Add generated files, build outputs, or caches that should stay
out of project memory to .mempalignore.
For one-off runs, pass --ignore-file <PATH> more than once to add custom ignore
files. Use --no-gitignore or --no-mempalignore when you need to disable one
of the default sources. Mempal still hard-skips .git/, target/, and
node_modules/ during project traversal. Explicit file ingest bypasses traversal
ignore rules.
2. Preview ingest before writing
mempal ingest ~/code/myapp --wing myapp --dry-runTypical output:
dry_run=true files=12 chunks=34 skipped=2This reads, normalizes, chunks, and counts, but does not write drawers or vectors.
3. Ingest the project
mempal ingest ~/code/myapp --wing myappOptional explicit format selector:
mempal ingest ~/code/myapp --wing myapp --format convosEvery ingest appends a JSONL audit record to:
~/.mempal/audit.jsonlBootstrap Knowledge Lifecycle
P18 adds the explicit Stage-1 distillation entry point: create candidate knowledge from existing evidence drawers.
mempal knowledge distill \
--statement "Prefer evidence before asserting project facts" \
--content "When answering project-specific questions, cite source-backed memory before making claims." \
--tier dao_ren \
--supporting-ref drawer_evidenceDistill always creates status=candidate and currently only allows tier=dao_ren
or tier=qi. dao_tian and shu are intentionally excluded from candidate
distill because the current P12 status policy does not allow candidate states
for those tiers. Use promote only after review.
P17 adds manual lifecycle commands for Stage-1 knowledge drawers. P19 hardens those commands so lifecycle refs must be existing evidence drawers, not arbitrary ids or other knowledge drawers:
P18 adds deterministic CLI distill. P22 exposes the same operation to MCP agents
as mempal_knowledge_distill: create candidate dao_ren / qi knowledge from
existing evidence refs without LLM summarization or auto-promotion. P23 exposes
the lifecycle mutation side as mempal_knowledge_promote and
mempal_knowledge_demote: MCP promotion is gate-enforced, and demotion requires
counterexample evidence.
Equivalent MCP distill request:
{
"statement": "Prefer evidence first",
"content": "Use cited evidence before asserting project facts.",
"tier": "dao_ren",
"supporting_refs": ["drawer_evidence"]
}P20 adds a read-only promotion gate report. P27 exposes the current Stage-1 policy table directly:
mempal knowledge policy --format jsonUse gate before promote to check the minimum deterministic policy against a
specific drawer without changing status, refs, vectors, schema, or the audit
log. P21 exposes the same drawer-specific gate to MCP agents as
mempal_knowledge_gate, while P27 exposes the policy table as
mempal_knowledge_policy.
mempal knowledge gate drawer_knowledge --format jsonP24 adds explicit anchor publication. This is separate from tier/status promotion: it only moves an already active knowledge drawer outward across anchor scope, without rewriting content or vectors.
mempal knowledge publish-anchor drawer_knowledge \
--to repo \
--reason "stable across this repository"Supported publication chain is worktree -> repo -> global. Publishing to
global requires domain=global and an explicit --target-anchor-id global://.... P25 exposes the same metadata-only operation to MCP agents as
mempal_knowledge_publish_anchor.
For dao_tian -> canonical, provide a reviewer for the advisory gate:
mempal knowledge gate drawer_dao_tian \
--target-status canonical \
--reviewer human \
--format jsonEquivalent MCP request:
{
"drawer_id": "drawer_dao_tian",
"target_status": "canonical",
"reviewer": "human"
}mempal knowledge promote drawer_knowledge \
--status promoted \
--verification-ref drawer_evidence \
--reason "validated across repeated runs" \
--reviewer "human"mempal knowledge demote drawer_knowledge \
--status demoted \
--evidence-ref drawer_counterexample \
--reason "new evidence contradicts this heuristic" \
--reason-type contradictedLifecycle commands only update existing memory_kind=knowledge drawers. They validate that --verification-ref / --evidence-ref values start with drawer_, exist, and point to memory_kind=evidence. They do not change content, re-embed vectors, bump schema, or add Phase-2 knowledge_cards. Successful distill and lifecycle changes append JSONL audit entries.
Phase-2 knowledge card tables exist in schema v8, but user-facing card runtime
APIs are not implemented yet. drawers remain the active evidence/citation
root, while knowledge_cards, knowledge_evidence_links, and
knowledge_events are reserved for the Phase-2 runtime.
4. Search
mempal search "auth decision clerk"Structured JSON output:
mempal search "auth decision clerk" --jsonRestrict to a wing:
mempal search "database decision" --wing myappRestrict to a wing and room:
mempal search "token refresh bug" --wing myapp --room auth5. Generate a context refresh
mempal wake-upCompact AAAK-formatted refresh:
mempal wake-up --format aaakUse mempal context when the agent needs typed operating guidance such as
dao_tian -> dao_ren -> shu -> qi. wake-up may show selected knowledge
statements, but it keeps the L0/L1 refresh shape and does not assemble typed
tier sections or apply dao_tian_limit.
Core Workflows
Search
What a search result includes:
drawer_idcontentwingroomsource_filesimilarityroute
route explains whether the query used explicit filters or taxonomy routing.
source_file is stored relative to the ingest root, so citations stay stable whether the project was ingested via an absolute or relative path.
If you care about deterministic scope, pass --wing and optionally --room explicitly instead of relying on routing.
Field Taxonomy
field is a mind-model metadata dimension used by typed memory search and
context assembly. It is separate from wing/room routing taxonomy. P28 exposes a
read-only recommended field list:
mempal field-taxonomy
mempal field-taxonomy --format jsonThe field taxonomy is guidance only. Custom fields remain valid for ingest, distill, search, and context when the recommended Stage-1 fields are too coarse.
Wake-Up and AAAK
wake-up emits a short memory summary for agent context refresh:
mempal wake-upAAAK output:
mempal wake-up --format aaak
mempal compress "Kai recommended Clerk over Auth0 based on pricing and DX"Example AAAK output:
V1|manual|compress|1744156800|cli
0:KAI+CLK+AUT|kai_clerk_auth0|"Kai recommended Clerk over Auth0 based on pricing and DX"|★★★★|determ|DECISIONAAAK is an output formatter only:
it does not affect how drawers are stored
it is not required for ingest or search
benchmark
--mode aaakmeans "index AAAK-formatted retrieval text", not "change the storage layer"
Chinese Text
AAAK supports Chinese and mixed Chinese-English text:
mempal compress "张三推荐Clerk替换Auth0,因为价格更优"Chinese entities and topics are extracted with jieba-rs POS tagging. People, places, organizations, and content words are turned into entity/topic fields before AAAK formatting.
This section is about AAAK output formatting, not retrieval quality. Chinese AAAK support is currently stronger than Chinese search quality.
For the full format specification, see docs/aaak-dialect.md.
Taxonomy
List taxonomy entries:
mempal taxonomy listEdit or add taxonomy keywords:
mempal taxonomy edit myapp auth --keywords "auth,login,clerk"Use taxonomy when:
you want routing to pick the right room more reliably
your repo directory layout is not enough
you want search behavior to reflect domain language instead of folder names
Status
Show storage stats:
mempal statusThe command reports:
schema_versiondrawer_countdeleted_drawerswhen soft-deleted content existstaxonomy_entriesDB file size
per-
wingand per-roomcounts
Schema version is backed by SQLite PRAGMA user_version. On open, mempal applies bundled forward migrations needed to bring an older local database up to the current binary's schema.
Agent Diary
mempal supports cross-session behavioral learning through a diary convention. Agents (or humans) record observations, lessons, and patterns that future sessions can learn from.
The diary uses existing tools — no special commands needed:
# Write a diary entry (via MCP or by asking your AI agent)
# Convention: wing="agent-diary", room=agent-name
# Prefix content with OBSERVATION:, LESSON:, or PATTERN:
# Search diary entries
mempal search "lesson" --wing agent-diary
mempal search "pattern infrastructure" --wing agent-diary --room claude
# Search all entries for a specific agent
mempal search "observation" --wing agent-diary --room codexExample diary entry (written by AI agent via MCP mempal_ingest):
{
"content": "LESSON: always check repo docs before writing infrastructure code",
"wing": "agent-diary",
"room": "claude",
"importance": 4
}Content prefixes:
| Prefix | Use for |
|---|---|
OBSERVATION: | Factual behavioral observations |
LESSON: | Actionable takeaways from mistakes or successes |
PATTERN: | Recurring behavioral patterns across sessions |
MEMORY_PROTOCOL Rule 5a tells AI agents to write diary entries after sessions. Human users can also write diary entries — use room to identify the author (e.g., room="alex").
Delete and Purge
These are destructive operations. Use them carefully.
Soft-delete one drawer:
mempal delete drawer_myapp_auth_1234abcdCurrent behavior:
looks up the drawer first
soft-deletes it
prints a short summary of what was deleted
writes an audit log entry
does not permanently remove it yet
Permanent removal:
mempal purgePurge only drawers soft-deleted before an ISO timestamp:
mempal purge --before 2026-04-10T00:00:00ZImportant:
deleteis reversible only untilpurgerunsstatuswill tell you when deleted drawers are waiting to be purged
Common Recipes
Index a repo and search one subsystem
mempal init ~/code/myapp
mempal ingest ~/code/myapp --wing myapp
mempal search "token refresh bug" --wing myapp --room authPreview a large ingest before committing disk and compute
mempal init ~/code/monorepo --dry-run
mempal ingest ~/code/monorepo --wing monorepo --dry-runTune routing when search keeps landing in the wrong room
mempal taxonomy list
mempal taxonomy edit myapp deploy --keywords "render,railway,postgres,migration"
mempal search "postgres migration" --wing myappRefresh an AI agent before continuing work
mempal wake-up
mempal wake-up --format aaakRun a fast benchmark sample instead of the full dataset
mempal bench longmemeval /path/to/longmemeval_s_cleaned.json \
--limit 20 \
--out benchmarks/results_longmemeval_20.jsonlMCP Server
Run stdio MCP explicitly:
mempal serve --mcpIf mempal was built without the rest feature, plain mempal serve behaves the same way.
The MCP server exposes nineteen tools:
mempal_status— state + protocol + AAAK specmempal_search— hybrid search (BM25 + vector + RRF) with tunnel hints and AAAK-derived structured signals (entities/topics/flags/emotions/importance_stars)mempal_context— mind-model runtime context pack (dao_tian -> dao_ren -> shu -> qi, evidence opt-in,dao_tian_limitdefault 1); guides workflow / skill / tool choice but never executes skillsmempal_field_taxonomy— read-only recommendedfieldvalues for typed evidence / knowledge; guidance only, custom fields remain validmempal_knowledge_distill— create candidatedao_ren/qiknowledge from existing evidence refs; deterministic and never auto-promotesmempal_knowledge_policy— read-only Stage-1 promotion policy table fordao_tian,dao_ren,shu, andqimempal_knowledge_gate— read-only promotion readiness check for knowledge drawers; returns the same deterministic gate report asmempal knowledge gate --format jsonmempal_knowledge_promote— gate-enforced lifecycle promotion with supplied verification refsmempal_knowledge_demote— demote or retire knowledge with counterexample evidence refsmempal_knowledge_publish_anchor— metadata-only outward anchor publication for active knowledgemempal_ingest— store memories with optional importance (0-5) and dry_runmempal_delete— soft-delete with auditmempal_taxonomy— list or edit routing keywordsmempal_kg— knowledge graph: add/query/invalidate/timeline/statsmempal_tunnels— cross-wing room discoverymempal_peek_partner— read the partner coding agent's live session (Claude ↔ Codex); pure read, never writes to mempalmempal_session_peek— read an explicit local Claude/Codex session by concretetool + cwd; use for same-tool or cross-project session readsmempal_cowork_push— send a short handoff message (≤ 8 KB) to the partner agent's inbox; delivered at the partner's next UserPromptSubmit via a drain hookmempal_fact_check— offline contradiction detection against KG triples and known entities
The server also embeds MEMORY_PROTOCOL (behavioral rules) in the MCP initialize.instructions field so any MCP client learns the workflow on connect — zero configuration. The protocol treats wake-up as an L0/L1 refresh surface, mempal_context as typed guidance for choosing an approach, workflow, skill, or tool, mempal_field_taxonomy as guidance for choosing typed-memory field values, and trigger_hints as bias metadata only. These hints never override system, user, repo, or client-native skill rules.
Example request shapes:
{
"query": "auth decision clerk",
"wing": "myapp",
"room": "auth",
"top_k": 5
}{
"content": "decided to use Clerk for auth",
"wing": "myapp",
"room": "auth",
"source": "/repo/README.md",
"dry_run": false
}Preview an ingest without writing (returns the predicted drawer_id):
{
"content": "decided to use Clerk for auth",
"wing": "myapp",
"dry_run": true
}Soft-delete a drawer:
{
"drawer_id": "drawer_myapp_auth_1234abcd"
}{
"action": "edit",
"wing": "myapp",
"room": "auth",
"keywords": ["auth", "login", "clerk"]
}mempal_status also returns the self-describing memory protocol and a dynamically generated AAAK spec so AI clients can learn the tool without a hardcoded prompt.
Agent Cowork (peek + push)
Two coding agents running on the same repo — typically Claude Code and Codex — can collaborate through two primitives:
mempal_peek_partner(P6) — read the partner's live session file without storing anything in mempal. Use for "what is partner currently doing" questions.mempal_session_peek(P112) — read an explicit local session by concretetool + cwd. Use for same-tool or cross-project inspection such as Codex reading another Codex project's transcript.mempal_cowork_push(P8) — send a short handoff (≤ 8 KB) to the partner's inbox. The partner sees it prepended to their next user prompt via a UserPromptSubmit hook. Use for "make sure partner notices X" status updates that are too transient for an ingest drawer.
Install hooks
Hooks land the pushed message into the partner's next prompt automatically. Install once per repo (run at the repo root):
mempal cowork-install-hooks --global-codexThis writes two Claude-side artifacts (both required — Claude Code does not auto-discover bare hook scripts):
.claude/hooks/user-prompt-submit.sh— the drain scriptan entry in
.claude/settings.jsonunderhooks.UserPromptSubmitregistering the script
and merges the equivalent entry into ~/.codex/hooks.json (top-level hooks.UserPromptSubmit with {type:"command", command:"mempal cowork-drain --target codex --format codex-hook-json --cwd-source stdin-json"}).
Re-running is idempotent and self-heals stale/wrong drain entries from prior mempal versions, preserving any unrelated hooks already in those files.
Check current state
mempal cowork-status --cwd "$PWD"Lists both inbox targets (claude and codex) for the given cwd along with message counts, byte sizes, and a preview. Read-only — does not drain.
Known limitations
Codex
codex_hooksfeature flag: Codex's hooks runtime is gated behind thecodex_hooksfeature flag ("under development" in current shippedcodex-cli). If the flag is off, Codex silently ignores~/.codex/hooks.json.install-hooksdetects this and prints an activation prompt (codex features enable codex_hooks).TUI restart required on Codex side: Codex caches
config.toml+hooks.jsonat TUI startup only. After changing the feature flag or runninginstall-hooks, fully quit and relaunch Codex before new hooks take effect.MCP server re-spawn required in Claude Code: Claude Code spawns the mempal MCP server at client startup. After upgrading the mempal binary, restart Claude Code so the MCP server respawns with the new tool list (notably
mempal_cowork_push).Claude ↔ Codex scope:
mempal_cowork_pushrequires the MCP client to identify itself asclaude-codeorcodex(or their recognized aliases). Generic MCP clients cannot push because caller identity is required to fill the messagefromfield and enforce self-push rejection. This is by design for the Claude ↔ Codex pair.At-next-submit, not real-time: a push is visible on the partner's next user prompt turn — never mid-turn. Codex's TUI will not re-render to inject a message on an external trigger.
REST Server
Build with --features rest to enable REST:
mempal serveWith REST enabled:
MCP still runs over stdio
REST listens on
127.0.0.1:3080CORS only allows localhost origins
Endpoints:
GET /api/statusGET /api/search?q=...&wing=...&room=...&top_k=...POST /api/ingestGET /api/taxonomy
Examples:
curl 'http://127.0.0.1:3080/api/status'
curl 'http://127.0.0.1:3080/api/search?q=clerk&wing=myapp'
curl -X POST 'http://127.0.0.1:3080/api/ingest' \
-H 'content-type: application/json' \
-d '{"content":"decided to use Clerk","wing":"myapp","room":"auth"}'
curl 'http://127.0.0.1:3080/api/taxonomy'Benchmark LongMemEval
mempal includes a native LongMemEval harness. It reuses the dataset shape and retrieval metrics documented in mempalace, while indexing and searching through mempal itself.
Default session-granularity raw benchmark:
mempal bench longmemeval /path/to/longmemeval_s_cleaned.jsonOther modes:
mempal bench longmemeval /path/to/longmemeval_s_cleaned.json --mode aaak
mempal bench longmemeval /path/to/longmemeval_s_cleaned.json --mode roomsTurn granularity and results log:
mempal bench longmemeval /path/to/longmemeval_s_cleaned.json \
--granularity turn \
--out benchmarks/results_longmemeval.jsonlSupported options:
--mode raw|aaak|rooms--granularity session|turn--limit N--skip N--top-k N--out path/to/results.jsonl
What the benchmark does:
loads the cleaned LongMemEval JSON
builds a temporary benchmark DB per question
indexes retrieval text using the configured embedder
runs retrieval and reports
Recall@kandNDCG@k
What it does not do:
it does not generate final answers with an LLM
it is not the same as the official answer-generation evaluation pipeline
rawmode does not automatically mean zero API cost if your embedder backend is configured asapi
For the current local benchmark snapshot in this repository, see benchmarks/longmemeval_s_summary.md. That summary now separates the older 384d baseline from the newer model2vec 256d run.
Recommended: Auto-Remind After Commit
mempal works best when AI agents save decision context after every commit — not just the code diff, but why the change was made, what was considered, and what's left to do. This is MEMORY_PROTOCOL Rule 4 (SAVE AFTER DECISIONS).
The problem: agents forget. The solution: a Claude Code hook that reminds the agent after every git commit.
Setup for Claude Code
Create .claude/settings.json in your project root:
{
"hooks": {
"afterToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "if echo \"$TOOL_INPUT\" | grep -q 'git commit'; then echo 'MEMPAL REMINDER: You just committed code. Call mempal_ingest to save the decision context (what was built, why, what was considered). Rule 4: SAVE AFTER DECISIONS.'; fi"
}
]
}
]
}
}After this, every time the agent runs git commit, it sees a reminder to save the decision to mempal. The agent still decides what to save — the hook just ensures it doesn't forget.
What makes a good decision record
Bad (just restating the diff):
Added CI workflowGood (captures context a future agent needs):
Added CI with default + all-features matrix. Deliberately omitted rustfmt
because formatting drift exists in 2 test files — cleanup is a separate
commit. Follow-up: cargo fmt --all then add fmt check step. This completes
priority #1 from drawer_mempal_default_a295458d.The difference: a future agent reading the good version knows what was omitted, why, and what to do next. The bad version tells them nothing they can't learn from git log.
For other AI tools
Codex: Configure in
~/.codex/instructions.md— add "After every commit, call mempal_ingest with decision context"Cursor: Add to
.cursorrules— same instructionAny MCP client: The MEMORY_PROTOCOL in
mempal_statusalready contains Rule 4; the hook is a reinforcement for clients that sometimes skip it
Auto-Dream Integration
Claude Code's auto-dream feature consolidates session memory while you're away — like REM sleep for AI. mempal integrates with this process to ensure project decisions survive across sessions.
How it works
When auto-dream runs (automatically between sessions or manually via "dream"):
Claude reviews recent session transcripts
Extracts key decisions and knowledge
With mempal: verifies facts via
mempal_search, saves consolidated insights viamempal_ingestwith importance >= 3, and records a dream diary entry
Setup
Add to your project's CLAUDE.md:
## Auto-Dream Integration
When performing auto-dream or manual dream:
1. Call mempal_search to verify facts being consolidated
2. Save high-value insights to mempal (mempal_ingest, importance >= 3)
3. If MEMORY.md and mempal contradict, trust mempal (has citations)
4. Write dream summary as agent diary (wing="agent-diary", room="claude")
5. Check triples for expired relationships to invalidateWhat this gives you
Without mempal, auto-dream consolidates into MEMORY.md files that only Claude Code reads. With mempal, dream insights are stored in palace.db where any MCP-connected agent (Codex, Cursor, etc.) can find them. Dream becomes a cross-agent memory consolidation mechanism, not just a Claude Code internal process.
Identity File
If you use wake-up regularly with AI agents, you can add a user-edited identity file:
mkdir -p ~/.mempal
$EDITOR ~/.mempal/identity.txtExample:
Role: Rust backend engineer at Acme.
Current focus: auth rewrite, Clerk migration.
Working style: small reversible edits, verify before asserting.wake-up can include this as part of the agent context refresh.
FAQ
Search results look wrong or too broad
Pass
--wingexplicitly. Global search is convenient, but it broadens retrieval.Pass
--roomwhen you already know the subsystem.Inspect taxonomy with
mempal taxonomy listand add better keywords withmempal taxonomy edit.Check which embedder backend you are using. Different embedding models shift retrieval behavior.
Search returns irrelevant results for Chinese (or other non-English) queries
The default embedder is now a multilingual model2vec model, but English queries still retrieve more reliably than Chinese (and other non-English) queries in practice.
For AI agents: MEMORY_PROTOCOL rule 3a tells agents to translate queries to English before calling mempal_search. This is handled automatically by agents that read the protocol.
For CLI users: translate your query to English manually, or use the --wing filter to narrow scope:
# Poor results:
mempal search "它不再是一个高级原型"
# Good results:
mempal search "no longer just an advanced prototype"This is mostly a retrieval-stack limitation, not a storage limitation:
the embedder is multilingual but still stronger on English queries
the search path does not currently use a Chinese-specific lexical tokenizer for FTS5
AAAK uses
jieba-rs, but the search path does not
So the practical guidance is still: translate the query to English first, or narrow scope with --wing / --room.
Why did ingest store relative paths instead of absolute ones?
mempal stores source_file relative to the ingest root on purpose. This keeps citations stable if you ingest the same project through different absolute paths.
Is raw benchmark mode always zero API cost?
No. raw only means raw retrieval text. API cost depends on the embedder backend:
local
onnxbackend: zero external API callsapibackend: embedding requests still go to the configured API
Why is --granularity turn so much slower?
Because it expands one session into many more indexed items. On the current LongMemEval s_cleaned runs in this repository, raw + turn was dramatically slower than raw + session while not improving overall retrieval quality enough to justify being the default.
Should I use delete freely because it is soft-delete?
Use it carefully anyway. delete is safer than hard removal, but once mempal purge runs, the data is permanently gone.
Verify Changes
If you modify code or behavior in this repository, the current validation baseline is:
cargo test --workspace
cargo test --workspace --all-features
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo fmt --all --check453 files · 436 not served here
- .claude/hooks/user-prompt-submit.sh (not served here)
- .claude/settings.json
- .github/workflows/ci.yml (not served here)
- .github/workflows/pages.yml (not served here)
- .github/workflows/release.yml (not served here)
- .gitignore (not served here)
- .mcp.json
- AGENTS.md
- ATTRIBUTION.md
- AUTOGINEER-RUNS.md
- CHANGELOG.md
- CLAUDE.md
- Cargo.lock (not served here)
- Cargo.toml (not served here)
- LICENSE
- README.md
- README_zh.md
- benchmarks/longmemeval_s_summary.md (not served here)
- books/README.md (not served here)
- books/zh-CN/book.toml (not served here)
- books/zh-CN/mermaid-init.js (not served here)
- books/zh-CN/mermaid.min.js (not served here)
- books/zh-CN/plans/00-preface.plan.md (not served here)
- books/zh-CN/plans/01-problem.plan.md (not served here)
- books/zh-CN/plans/02-principles.plan.md (not served here)
- books/zh-CN/plans/03-architecture.plan.md (not served here)
- books/zh-CN/plans/04-storage-search.plan.md (not served here)
- books/zh-CN/plans/05-mind-model.plan.md (not served here)
- books/zh-CN/plans/06-knowledge-governance.plan.md (not served here)
- books/zh-CN/plans/07-runtime-context.plan.md (not served here)
- books/zh-CN/plans/08-cowork.plan.md (not served here)
- books/zh-CN/plans/09-self-evolution.plan.md (not served here)
- books/zh-CN/plans/10-ops-and-usage.plan.md (not served here)
- books/zh-CN/plans/99-appendix-commands.plan.md (not served here)
- books/zh-CN/specs/00-preface.spec.md (not served here)
- books/zh-CN/specs/01-problem.spec.md (not served here)
- books/zh-CN/specs/02-principles.spec.md (not served here)
- books/zh-CN/specs/03-architecture.spec.md (not served here)
- books/zh-CN/specs/04-storage-search.spec.md (not served here)
- books/zh-CN/specs/05-mind-model.spec.md (not served here)
- books/zh-CN/specs/06-knowledge-governance.spec.md (not served here)
- books/zh-CN/specs/07-runtime-context.spec.md (not served here)
- books/zh-CN/specs/08-cowork.spec.md (not served here)
- books/zh-CN/specs/09-self-evolution.spec.md (not served here)
- books/zh-CN/specs/10-ops-and-usage.spec.md (not served here)
- books/zh-CN/specs/99-appendix-commands.spec.md (not served here)
- books/zh-CN/src/SUMMARY.md (not served here)
- books/zh-CN/src/appendix-commands.md (not served here)
- books/zh-CN/src/ch01-problem.md (not served here)
- books/zh-CN/src/ch02-principles.md (not served here)
- books/zh-CN/src/ch03-architecture.md (not served here)
- books/zh-CN/src/ch04-storage-search.md (not served here)
- books/zh-CN/src/ch05-mind-model.md (not served here)
- books/zh-CN/src/ch06-knowledge-governance.md (not served here)
- books/zh-CN/src/ch07-runtime-context.md (not served here)
- books/zh-CN/src/ch08-cowork.md (not served here)
- books/zh-CN/src/ch09-self-evolution.md (not served here)
- books/zh-CN/src/ch10-ops-and-usage.md (not served here)
- books/zh-CN/src/preface.md (not served here)
- crates/mempal-agent-memory/Cargo.toml (not served here)
- crates/mempal-agent-memory/src/anchor.rs (not served here)
- crates/mempal-agent-memory/src/lib.rs (not served here)
- crates/mempal-agent-memory/src/types.rs (not served here)
- crates/mempal-embed/Cargo.toml (not served here)
- crates/mempal-embed/src/api.rs (not served here)
- crates/mempal-embed/src/lib.rs (not served here)
- crates/mempal-embed/src/model2vec.rs (not served here)
- crates/mempal-embed/src/onnx.rs (not served here)
- crates/mempal-mcp-protocol/Cargo.toml (not served here)
- crates/mempal-mcp-protocol/src/lib.rs (not served here)
- crates/mempal-mcp-server/Cargo.toml (not served here)
- crates/mempal-mcp-server/src/lib.rs (not served here)
- crates/mempal-mcp-server/src/server.rs (not served here)
- crates/mempal-mcp-server/src/tools.rs (not served here)
- crates/mempal-runtime/Cargo.toml (not served here)
- crates/mempal-runtime/src/aaak/codec.rs (not served here)
- crates/mempal-runtime/src/aaak/mod.rs (not served here)
- crates/mempal-runtime/src/aaak/model.rs (not served here)
- crates/mempal-runtime/src/aaak/parse.rs (not served here)
- crates/mempal-runtime/src/aaak/signals.rs (not served here)
- crates/mempal-runtime/src/aaak/spec.rs (not served here)
- crates/mempal-runtime/src/adoption_analytics.rs (not served here)
- crates/mempal-runtime/src/brief.rs (not served here)
- crates/mempal-runtime/src/context.rs (not served here)
- crates/mempal-runtime/src/core/config.rs (not served here)
- crates/mempal-runtime/src/core/mod.rs (not served here)
- crates/mempal-runtime/src/core/phase3.rs (not served here)
- crates/mempal-runtime/src/core/protocol.rs (not served here)
- crates/mempal-runtime/src/core/utils.rs (not served here)
- crates/mempal-runtime/src/cowork/bus.rs (not served here)
- crates/mempal-runtime/src/cowork/claude.rs (not served here)
- crates/mempal-runtime/src/cowork/codex.rs (not served here)
- crates/mempal-runtime/src/cowork/inbox.rs (not served here)
- crates/mempal-runtime/src/cowork/mod.rs (not served here)
- crates/mempal-runtime/src/cowork/peek.rs (not served here)
- crates/mempal-runtime/src/cowork/receipts.rs (not served here)
- crates/mempal-runtime/src/doctor.rs (not served here)
- crates/mempal-runtime/src/embed/mod.rs (not served here)
- crates/mempal-runtime/src/factcheck/contradictions.rs (not served here)
- crates/mempal-runtime/src/factcheck/mod.rs (not served here)
- crates/mempal-runtime/src/factcheck/names.rs (not served here)
- crates/mempal-runtime/src/factcheck/relations.rs (not served here)
- crates/mempal-runtime/src/field_taxonomy.rs (not served here)
- crates/mempal-runtime/src/ingest/chunk.rs (not served here)
- crates/mempal-runtime/src/ingest/detect.rs (not served here)
- crates/mempal-runtime/src/ingest/diary.rs (not served here)
- crates/mempal-runtime/src/ingest/lock.rs (not served here)
- crates/mempal-runtime/src/ingest/mod.rs (not served here)
- crates/mempal-runtime/src/ingest/noise.rs (not served here)
- crates/mempal-runtime/src/ingest/normalize.rs (not served here)
- crates/mempal-runtime/src/ingest/reindex.rs (not served here)
- crates/mempal-runtime/src/knowledge_anchor.rs (not served here)
- crates/mempal-runtime/src/knowledge_card_backfill.rs (not served here)
- crates/mempal-runtime/src/knowledge_card_lifecycle.rs (not served here)
- crates/mempal-runtime/src/knowledge_card_retrieval.rs (not served here)
- crates/mempal-runtime/src/knowledge_distill.rs (not served here)
- crates/mempal-runtime/src/knowledge_gate.rs (not served here)
- crates/mempal-runtime/src/knowledge_lifecycle.rs (not served here)
- crates/mempal-runtime/src/lib.rs (not served here)
- crates/mempal-runtime/src/longmemeval.rs (not served here)
- crates/mempal-runtime/src/path_filter.rs (not served here)
- crates/mempal-runtime/src/projects.rs (not served here)
- crates/mempal-runtime/src/search/filter.rs (not served here)
- crates/mempal-runtime/src/search/mod.rs (not served here)
- crates/mempal-runtime/src/search/rerank.rs (not served here)
- crates/mempal-runtime/src/search/route.rs (not served here)
- crates/mempal-search-core/Cargo.toml (not served here)
- crates/mempal-search-core/src/lib.rs (not served here)
- crates/mempal-store-sqlite/Cargo.toml (not served here)
- crates/mempal-store-sqlite/src/lib.rs (not served here)
- docs/COWORK-RUNBOOK.md
- docs/MAINTENANCE-RUNBOOK.md
- docs/MIND-MODEL-DESIGN.md
- docs/MIND-MODEL-IMPLEMENTATION-ARTICLE.md
- docs/MIND-MODEL-IMPLEMENTATION-ARTICLE.zh-CN.md
- docs/aaak-dialect.md
- docs/plans/2026-04-08-p0-implementation.md (not served here)
- docs/plans/2026-04-09-p1-p4-implementation.md (not served here)
- docs/plans/2026-04-11-p5-implementation.md (not served here)
- docs/plans/2026-04-13-p6-implementation.md (not served here)
- docs/plans/2026-04-13-p7-implementation.md (not served here)
- docs/plans/2026-04-15-p8-implementation.md (not served here)
- docs/plans/2026-04-17-p9-implementation.md (not served here)
- docs/plans/2026-04-21-p12-implementation.md (not served here)
- docs/plans/2026-04-23-p10-explicit-tunnels-implementation.md (not served here)
- docs/plans/2026-04-23-p10-normalize-version-implementation.md (not served here)
- docs/plans/2026-04-23-p11-transcript-noise-strip-implementation.md (not served here)
- docs/plans/2026-04-23-p13a-implementation.md (not served here)
- docs/plans/2026-04-23-p13b-implementation.md (not served here)
- docs/plans/2026-04-24-p11-chunk-neighbors-implementation.md (not served here)
- docs/plans/2026-04-24-p11-diary-daily-rollup-implementation.md (not served here)
- docs/plans/2026-04-24-p14-context-assembler-implementation.md (not served here)
- docs/plans/2026-04-24-p15-mcp-context-implementation.md (not served here)
- docs/plans/2026-04-24-p16-context-skill-guidance-implementation.md (not served here)
- docs/plans/2026-04-24-p17-knowledge-lifecycle-implementation.md (not served here)
- docs/plans/2026-04-24-p18-knowledge-distill-implementation.md (not served here)
- docs/plans/2026-04-24-p19-lifecycle-ref-validation-implementation.md (not served here)
- docs/plans/2026-04-25-p20-promotion-gate-policy-implementation.md (not served here)
- docs/plans/2026-04-25-p21-mcp-knowledge-gate-implementation.md (not served here)
- docs/plans/2026-04-25-p22-mcp-knowledge-distill-implementation.md (not served here)
- docs/plans/2026-04-26-p23-mcp-knowledge-lifecycle-implementation.md (not served here)
- docs/plans/2026-04-26-p24-anchor-publication-implementation.md (not served here)
- docs/plans/2026-04-26-p25-mcp-anchor-publication-implementation.md (not served here)
- docs/plans/2026-04-26-p26-dao-tian-runtime-budget-implementation.md (not served here)
- docs/plans/2026-04-26-p27-knowledge-policy-surface-implementation.md (not served here)
- docs/plans/2026-04-26-p28-field-taxonomy-surface-implementation.md (not served here)
- docs/plans/2026-04-26-p29-wake-up-context-boundary-implementation.md (not served here)
- docs/plans/2026-04-27-p30-knowledge-card-storage-boundary-implementation.md (not served here)
- docs/plans/2026-04-27-p31-knowledge-card-schema-spec.md (not served here)
- docs/plans/2026-04-27-p32-knowledge-card-schema-v8-implementation.md (not served here)
- docs/plans/2026-04-27-p33-knowledge-card-core-api-implementation.md (not served here)
- docs/plans/2026-04-27-p34-knowledge-card-cli-implementation.md (not served here)
- docs/plans/2026-04-27-p35-knowledge-card-mcp-read-implementation.md (not served here)
- docs/plans/2026-04-27-p36-knowledge-card-backfill-report-implementation.md (not served here)
- docs/plans/2026-04-27-p37-knowledge-card-backfill-apply-implementation.md (not served here)
- docs/plans/2026-04-27-p38-p42-knowledge-card-runtime-implementation.md (not served here)
- docs/plans/2026-04-28-p43-knowledge-card-retrieval-contract.md (not served here)
- docs/plans/2026-04-28-p44-card-context-assembler.md (not served here)
- docs/plans/2026-04-28-p45-card-linked-evidence-retrieval.md (not served here)
- docs/plans/2026-04-28-p46-card-context-default-policy.md (not served here)
- docs/plans/2026-04-28-p47-card-embedding-policy.md (not served here)
- docs/plans/2026-04-29-p48-card-audit-policy.md (not served here)
- docs/plans/2026-04-29-p49-research-ingestion-policy.md (not served here)
- docs/plans/2026-04-29-p50-evaluator-promotion-policy.md (not served here)
- docs/plans/2026-04-29-p51-mind-model-closure-audit.md (not served here)
- docs/plans/2026-05-01-p52-phase-3-intake-roadmap.md (not served here)
- docs/plans/2026-05-02-p53-phase-3-candidate-evidence-audit.md (not served here)
- docs/plans/2026-05-02-p54-runtime-adoption-evidence.md (not served here)
- docs/plans/2026-05-02-p55-runtime-adoption-cli.md (not served here)
- docs/plans/2026-05-02-p56-card-context-default-gate.md (not served here)
- docs/plans/2026-05-02-p57-card-embedding-evidence-gate.md (not served here)
- docs/plans/2026-05-02-p58-evaluator-api-evidence-gate.md (not served here)
- docs/plans/2026-05-02-p59-research-adapter-ingestion-contract.md (not served here)
- docs/plans/2026-05-05-p60-mcp-phase3-runtime-surface.md (not served here)
- docs/plans/2026-05-10-p61-runtime-adoption-recording-protocol.md (not served here)
- docs/plans/2026-05-12-p62-runtime-adoption-cli-guidance.md (not served here)
- docs/plans/2026-05-12-p63-runtime-adoption-record-helper.md (not served here)
- docs/plans/2026-05-13-p64-runtime-adoption-record-quality-policy.md (not served here)
- docs/plans/2026-05-13-p65-runtime-adoption-review-report.md (not served here)
- docs/plans/2026-05-13-p66-card-context-default-readiness.md (not served here)
- docs/plans/2026-05-13-p67-research-adapter-ingest.md (not served here)
- docs/plans/2026-05-13-p68-mcp-research-ingest-plan.md (not served here)
- docs/plans/2026-05-13-p69-runtime-adoption-checked-record.md (not served here)
- docs/plans/2026-05-13-p70-self-evolution-completion-audit.md (not served here)
- docs/plans/2026-05-13-p71-self-evolution-loop-replay.md (not served here)
- docs/plans/2026-05-13-p72-runtime-adoption-capture-helper.md (not served here)
- docs/plans/2026-05-13-p73-evaluator-advisory-api.md (not served here)
- docs/plans/2026-05-13-p74-card-context-default-proposal.md (not served here)
- docs/plans/2026-05-13-p75-self-evolution-completion-audit.md (not served here)
- docs/plans/2026-05-13-p76-spec-completeness-invariant.md (not served here)
- docs/plans/2026-05-13-p77-live-adoption-instrumentation-boundary.md (not served here)
- docs/plans/2026-05-13-p78-card-context-default-runtime-flag.md (not served here)
- docs/plans/2026-05-13-p79-rollback-executor-policy.md (not served here)
- docs/plans/2026-05-13-p80-autonomous-promotion-boundary-audit.md (not served here)
- docs/plans/2026-05-13-p81-self-evolution-completion-audit.md (not served here)
- docs/plans/2026-05-25-p82-opt-in-runtime-instrumentation-wrapper.md (not served here)
- docs/plans/2026-05-25-p83-cognitive-brief.md (not served here)
- docs/plans/2026-05-25-p84-multi-agent-cowork-bus.md (not served here)
- docs/plans/2026-05-25-p85-mcp-multi-agent-cowork-bus.md (not served here)
- docs/plans/2026-05-25-p86-tmux-cowork-transport.md (not served here)
- docs/plans/2026-05-25-p87-cowork-bus-event-log.md (not served here)
- docs/plans/2026-05-25-p88-cowork-delivery-ack-status.md (not served here)
- docs/plans/2026-05-25-p89-cowork-agent-presence.md (not served here)
- docs/plans/2026-05-25-p90-cowork-threads-channels.md (not served here)
- docs/plans/2026-05-25-p91-tmux-live-peek.md (not served here)
- docs/plans/2026-05-26-p100-guided-maintenance-run.md (not served here)
- docs/plans/2026-05-26-p101-cowork-session-close-capture.md (not served here)
- docs/plans/2026-05-26-p102-mcp-cognitive-brief.md (not served here)
- docs/plans/2026-05-26-p103-adoption-analytics.md (not served here)
- docs/plans/2026-05-26-p104-release-readiness-checklist.md (not served here)
- docs/plans/2026-05-26-p92-multi-agent-runbook.md (not served here)
- docs/plans/2026-05-26-p93-cowork-doctor.md (not served here)
- docs/plans/2026-05-26-p94-cowork-team-session.md (not served here)
- docs/plans/2026-05-26-p95-cowork-handoff-summary.md (not served here)
- docs/plans/2026-05-26-p96-cowork-memory-capture.md (not served here)
- docs/plans/2026-05-26-p97-maintenance-runbook.md (not served here)
- docs/plans/2026-05-26-p98-release-install-doctor.md (not served here)
- docs/plans/2026-05-26-p99-mcp-runtime-doctor.md (not served here)
- docs/plans/2026-05-28-p105-mempal-book-zh-cn.md (not served here)
- docs/plans/2026-06-04-p106-context-distill-signal.md (not served here)
- docs/plans/2026-06-09-p107-ingest-entrypoint-discoverability.md (not served here)
- docs/plans/2026-06-17-p108-peek-cwd-cross-project.md (not served here)
- docs/plans/2026-06-22-p109-cross-project-resume.md (not served here)
- docs/plans/2026-07-02-p110-public-issue-compatibility.md (not served here)
- docs/plans/2026-07-06-p111-project-ignore-rules.md (not served here)
- docs/plans/2026-07-07-p112-session-peek.md (not served here)
- docs/plans/2026-07-08-p113-public-workspace-crates.md (not served here)
- docs/plans/2026-07-09-p114-coarse-workspace-split.md (not served here)
- docs/plans/2026-07-26-p115-codex-preamble-noise-strip.md (not served here)
- docs/plans/2026-07-26-p116-cowork-pair-delivery-receipts.md (not served here)
- docs/plans/2026-08-18-p117-reindex-atomic-replace.md (not served here)
- docs/site/en/index.html (not served here)
- docs/site/index.html (not served here)
- docs/site/ja/index.html (not served here)
- docs/specs/2026-04-08-mempal-design.md (not served here)
- docs/specs/2026-04-13-cowork-peek-and-decide.md (not served here)
- docs/specs/2026-04-13-p7-search-structured-signals.md (not served here)
- docs/specs/2026-04-14-p8-cowork-inbox-push.md (not served here)
- docs/usage.md
- hooks/mempal_precompact_hook.sh (not served here)
- hooks/mempal_save_hook.sh (not served here)
- specs/p0-core-scaffold.spec.md (not served here)
- specs/p0-embed-trait.spec.md (not served here)
- specs/p0-ingest.spec.md (not served here)
- specs/p0-search-cli.spec.md (not served here)
- specs/p1-routing-citation.spec.md (not served here)
- specs/p10-explicit-tunnels.spec.md (not served here)
- specs/p10-normalize-version.spec.md (not served here)
- specs/p100-guided-maintenance-run.spec.md (not served here)
- specs/p101-cowork-session-close-capture.spec.md (not served here)
- specs/p102-mcp-cognitive-brief.spec.md (not served here)
- specs/p103-adoption-analytics.spec.md (not served here)
- specs/p104-release-readiness-checklist.spec.md (not served here)
- specs/p105-mempal-book-zh-cn.spec.md (not served here)
- specs/p106-context-distill-signal.spec.md (not served here)
- specs/p107-ingest-entrypoint-discoverability.spec.md (not served here)
- specs/p108-peek-cwd-cross-project.spec.md (not served here)
- specs/p109-cross-project-resume.spec.md (not served here)
- specs/p11-chunk-neighbors.spec.md (not served here)
- specs/p11-diary-daily-rollup.spec.md (not served here)
- specs/p11-transcript-noise-strip.spec.md (not served here)
- specs/p110-public-issue-compatibility.spec.md (not served here)
- specs/p111-project-ignore-rules.spec.md (not served here)
- specs/p112-session-peek.spec.md (not served here)
- specs/p113-public-workspace-crates.spec.md (not served here)
- specs/p114-coarse-workspace-split.spec.md (not served here)
- specs/p115-codex-preamble-noise-strip.spec.md (not served here)
- specs/p116-cowork-pair-delivery-receipts.spec.md (not served here)
- specs/p117-reindex-atomic-replace.spec.md (not served here)
- specs/p12-mind-model-bootstrap.spec.md (not served here)
- specs/p13-ingest-identity.spec.md (not served here)
- specs/p13-wake-up-statement.spec.md (not served here)
- specs/p14-context-assembler.spec.md (not served here)
- specs/p15-mcp-context.spec.md (not served here)
- specs/p16-context-skill-guidance.spec.md (not served here)
- specs/p17-knowledge-lifecycle.spec.md (not served here)
- specs/p18-knowledge-distill.spec.md (not served here)
- specs/p19-lifecycle-ref-validation.spec.md (not served here)
- specs/p2-mcp.spec.md (not served here)
- specs/p20-promotion-gate-policy.spec.md (not served here)
- specs/p21-mcp-knowledge-gate.spec.md (not served here)
- specs/p22-mcp-knowledge-distill.spec.md (not served here)
- specs/p23-mcp-knowledge-lifecycle.spec.md (not served here)
- specs/p24-anchor-publication.spec.md (not served here)
- specs/p25-mcp-anchor-publication.spec.md (not served here)
- specs/p26-dao-tian-runtime-budget.spec.md (not served here)
- specs/p27-knowledge-policy-surface.spec.md (not served here)
- specs/p28-field-taxonomy-surface.spec.md (not served here)
- specs/p29-wake-up-context-boundary.spec.md (not served here)
- specs/p3-aaak.spec.md (not served here)
- specs/p30-knowledge-card-storage-boundary.spec.md (not served here)
- specs/p31-knowledge-card-schema.spec.md (not served here)
- specs/p32-knowledge-card-schema-v8.spec.md (not served here)
- specs/p33-knowledge-card-core-api.spec.md (not served here)
- specs/p34-knowledge-card-cli.spec.md (not served here)
- specs/p35-knowledge-card-mcp-read.spec.md (not served here)
- specs/p36-knowledge-card-backfill-report.spec.md (not served here)
- specs/p37-knowledge-card-backfill-apply.spec.md (not served here)
- specs/p38-knowledge-card-gate.spec.md (not served here)
- specs/p39-knowledge-card-lifecycle-cli.spec.md (not served here)
- specs/p4-rest-api.spec.md (not served here)
- specs/p40-mcp-knowledge-card-lifecycle.spec.md (not served here)
- specs/p41-knowledge-card-runtime-boundary.spec.md (not served here)
- specs/p42-mind-model-completion-audit.spec.md (not served here)
- specs/p43-knowledge-card-retrieval-contract.spec.md (not served here)
- specs/p44-card-context-assembler.spec.md (not served here)
- specs/p45-card-linked-evidence-retrieval.spec.md (not served here)
- specs/p46-card-context-default-policy.spec.md (not served here)
- specs/p47-card-embedding-policy.spec.md (not served here)
- specs/p48-card-audit-policy.spec.md (not served here)
- specs/p49-research-ingestion-policy.spec.md (not served here)
- specs/p5-agent-diary.spec.md (not served here)
- specs/p5-format-support.spec.md (not served here)
- specs/p5-kg-timeline-stats.spec.md (not served here)
- specs/p5-semantic-dedup.spec.md (not served here)
- specs/p5-wake-up-importance.spec.md (not served here)
- specs/p50-evaluator-promotion-policy.spec.md (not served here)
- specs/p51-mind-model-closure-audit.spec.md (not served here)
- specs/p52-phase-3-intake-roadmap.spec.md (not served here)
- specs/p53-phase-3-candidate-evidence-audit.spec.md (not served here)
- specs/p54-runtime-adoption-evidence.spec.md (not served here)
- specs/p55-runtime-adoption-cli.spec.md (not served here)
- specs/p56-card-context-default-gate.spec.md (not served here)
- specs/p57-card-embedding-evidence-gate.spec.md (not served here)
- specs/p58-evaluator-api-evidence-gate.spec.md (not served here)
- specs/p59-research-adapter-ingestion-contract.spec.md (not served here)
- specs/p6-cowork-peek-and-decide.spec.md (not served here)
- specs/p60-mcp-phase3-runtime-surface.spec.md (not served here)
- specs/p61-runtime-adoption-recording-protocol.spec.md (not served here)
- specs/p62-runtime-adoption-cli-guidance.spec.md (not served here)
- specs/p63-runtime-adoption-record-helper.spec.md (not served here)
- specs/p64-runtime-adoption-record-quality-policy.spec.md (not served here)
- specs/p65-runtime-adoption-review-report.spec.md (not served here)
- specs/p66-card-context-default-readiness.spec.md (not served here)
- specs/p67-research-adapter-ingest.spec.md (not served here)
- specs/p68-mcp-research-ingest-plan.spec.md (not served here)
- specs/p69-runtime-adoption-checked-record.spec.md (not served here)
- specs/p7-search-structured-signals.spec.md (not served here)
- specs/p70-self-evolution-completion-audit.spec.md (not served here)
- specs/p71-self-evolution-loop-replay.spec.md (not served here)
- specs/p72-runtime-adoption-capture-helper.spec.md (not served here)
- specs/p73-evaluator-advisory-api.spec.md (not served here)
- specs/p74-card-context-default-proposal.spec.md (not served here)
- specs/p75-self-evolution-completion-audit.spec.md (not served here)
- specs/p76-spec-completeness-invariant.spec.md (not served here)
- specs/p77-live-adoption-instrumentation-boundary.spec.md (not served here)
- specs/p78-card-context-default-runtime-flag.spec.md (not served here)
- specs/p79-rollback-executor-policy.spec.md (not served here)
- specs/p8-cowork-inbox-push.spec.md (not served here)
- specs/p80-autonomous-promotion-boundary-audit.spec.md (not served here)
- specs/p81-self-evolution-completion-audit.spec.md (not served here)
- specs/p82-opt-in-runtime-instrumentation-wrapper.spec.md (not served here)
- specs/p83-cognitive-brief.spec.md (not served here)
- specs/p84-multi-agent-cowork-bus.spec.md (not served here)
- specs/p85-mcp-multi-agent-cowork-bus.spec.md (not served here)
- specs/p86-tmux-cowork-transport.spec.md (not served here)
- specs/p87-cowork-bus-event-log.spec.md (not served here)
- specs/p88-cowork-delivery-ack-status.spec.md (not served here)
- specs/p89-cowork-agent-presence.spec.md (not served here)
- specs/p9-fact-checker.spec.md (not served here)
- specs/p9-ingest-lock.spec.md (not served here)
- specs/p90-cowork-threads-channels.spec.md (not served here)
- specs/p91-tmux-live-peek.spec.md (not served here)
- specs/p92-multi-agent-runbook.spec.md (not served here)
- specs/p93-cowork-doctor.spec.md (not served here)
- specs/p94-cowork-team-session.spec.md (not served here)
- specs/p95-cowork-handoff-summary.spec.md (not served here)
- specs/p96-cowork-memory-capture.spec.md (not served here)
- specs/p97-maintenance-runbook.spec.md (not served here)
- specs/p98-release-install-doctor.spec.md (not served here)
- specs/p99-mcp-runtime-doctor.spec.md (not served here)
- specs/project.spec.md (not served here)
- src/aaak/mod.rs (not served here)
- src/adoption_analytics.rs (not served here)
- src/api/handlers.rs (not served here)
- src/api/mod.rs (not served here)
- src/api/state.rs (not served here)
- src/brief.rs (not served here)
- src/context.rs (not served here)
- src/core/db.rs (not served here)
- src/core/mod.rs (not served here)
- src/core/protocol.rs (not served here)
- src/cowork/mod.rs (not served here)
- src/doctor.rs (not served here)
- src/embed/mod.rs (not served here)
- src/factcheck/mod.rs (not served here)
- src/field_taxonomy.rs (not served here)
- src/ingest/mod.rs (not served here)
- src/knowledge_anchor.rs (not served here)
- src/knowledge_card_backfill.rs (not served here)
- src/knowledge_card_lifecycle.rs (not served here)
- src/knowledge_card_retrieval.rs (not served here)
- src/knowledge_distill.rs (not served here)
- src/knowledge_gate.rs (not served here)
- src/knowledge_lifecycle.rs (not served here)
- src/lib.rs (not served here)
- src/longmemeval.rs (not served here)
- src/main.rs (not served here)
- src/mcp/mod.rs (not served here)
- src/path_filter.rs (not served here)
- src/projects.rs (not served here)
- src/search/mod.rs (not served here)
- tests/cognitive_brief.rs (not served here)
- tests/context_assembler.rs (not served here)
- tests/cowork_bus.rs (not served here)
- tests/cowork_inbox.rs (not served here)
- tests/cowork_peek.rs (not served here)
- tests/cowork_receipts.rs (not served here)
- tests/diary_rollup.rs (not served here)
- tests/fact_check.rs (not served here)
- tests/fixtures/cowork/claude/session.jsonl (not served here)
- tests/fixtures/cowork/claude/session_with_tools.jsonl (not served here)
- tests/fixtures/cowork/claude_since/session.jsonl (not served here)
- tests/fixtures/cowork/codex/2026/04/12/rollout-2026-04-12T12-00-00-otherproject.jsonl (not served here)
- tests/fixtures/cowork/codex/2026/04/13/rollout-2026-04-13T12-00-00-fake.jsonl (not served here)
- tests/ingest_lock.rs (not served here)
- tests/knowledge_card_backfill.rs (not served here)
- tests/knowledge_card_cli.rs (not served here)
- tests/knowledge_card_core.rs (not served here)
- tests/knowledge_card_retrieval.rs (not served here)
- tests/knowledge_card_schema.rs (not served here)
- tests/knowledge_lifecycle.rs (not served here)
- tests/mind_model_bootstrap.rs (not served here)
- tests/noise_strip.rs (not served here)
- tests/normalize_version.rs (not served here)
- tests/ops_runtime.rs (not served here)
- tests/phase3_runtime.rs (not served here)
- tests/phase3_self_evolution_replay.rs (not served here)
- tests/projects_resume.rs (not served here)
- tests/reindex_safety.rs (not served here)
- tests/search_neighbors.rs (not served here)
- tests/tunnels_explicit.rs (not served here)
- tests/workspace_crates.rs (not served here)
Advantages
- Hybrid search combines BM25 and vector semantic search for improved retrieval. evidence: README.md
- Self-describing protocol allows agents to learn interaction rules automatically. evidence: README.md
- Per-source advisory locking prevents race conditions during concurrent agent ingestion. evidence: README.md
Limitations
- Codex integration requires a specific feature flag to be enabled. evidence: README.md
- Bidirectional cowork push is restricted to identified Claude and Codex agents. evidence: README.md
- Advisory locking for concurrent ingest is currently limited to Unix systems. evidence: README.md
Security
Risk level: Low risk
This brain runs
Hooks (2)
.claude/settings.json(PostToolUse):if echo "$TOOL_INPUT" | grep -q 'git commit'; then echo 'MEMPAL REMINDER: You just committed code. Call mempal_ingest to save the decision context (what was built, why, what was considered). Rule 4: SAVE AFTER DECISIONS.'; fi.claude/settings.json(UserPromptSubmit):bash .claude/hooks/user-prompt-submit.sh
MCP servers (1)
.mcp.json(mempal):mempal serve --mcp
Agent instructions that run or fetch something (22)
AGENTS.md:Rust 实现的 coding agent 项目记忆工具。单二进制,`cargo install mempal`,10 秒内带出处找回历史决策。AGENTS.md:| Spec | 状态 | 范围 | |------|------|------| | `specs/p0-core-scaffold.spec.md` | 完成 | workspace 骨架 + SQLite schema | | `specs/p0-embed-trait.spec.md` | 完成 | Embedder trait(model2vec 默认 + ort 可选) | | `specs/p0-ingest.spec.md` | 完成 | 导入管道(格式检测/归一化/分块/存储) | | `specs/p0-search-cli.spec.md` …[+7715 chars]AGENTS.md:`docs/plans/2026-05-26-p98-release-install-doctor.md` — P98 release install doctor(已完成)AGENTS.md:`docs/plans/2026-05-26-p100-guided-maintenance-run.md` — P100 guided maintenance run(已完成)AGENTS.md:`docs/plans/2026-08-18-p117-reindex-atomic-replace.md` — P117 atomic reindex replace + dry-run feasibility report(已完成)AGENTS.md:| 工具 | 作用 | |------|------| | `mempal_status` | 状态 + 协议 + AAAK spec | | `mempal_doctor` | release/install + MCP runtime diagnostics:报告 binary/PATH/schema 兼容性和 required MCP tool/action 能力清单(P99) | | `mempal_search` | 混合检索(BM25 + 向量 + RRF + tunnel hints)+ AAAK 结构化 signals(P7) | | `mempa …[+2688 chars]AGENTS.md:Cargo workspace,root package 仍是 `mempal`,并继续提供 `cargo install mempal` 的 CLI binary。P113/P114 已把可复用边界拆成公开 workspace crates;root crate 现在主要负责 CLI、REST entrypoint、package metadata 和 legacy facade paths。AGENTS.md:**`mempal cowork-install-hooks` 写两件 Claude 侧制品**:`.claude/hooks/user-prompt-submit.sh`(脚本)+ `.claude/settings.json` 下的 `hooks.UserPromptSubmit` 条目(注册)。Claude Code 不按文件名约定自动发现脚本,两件**都必须有**hook 才会 fire。`install-hooks` 已自动处理 + 自愈 stale 条目;请勿手工移除其中任一。AGENTS.md:**Codex 侧依赖 `codex_hooks` feature flag**:shipped `codex-cli ≤ 0.120.0` 该 flag 处于 "under development" 且默认 `false`,此时 Codex runtime 完全忽略 `~/.codex/hooks.json`。`install-hooks` 检测到会打印 warning + 激活命令 `codex features enable codex_hooks`。AGENTS.md:**Codex TUI 进程启动时一次性缓存 config**:改完 `config.toml` 或 `hooks.json`(含 feature flag / install-hooks)后,必须完全退出并重启 Codex TUI;已在跑的进程拿不到新配置。AGENTS.md:**Claude Code 的 MCP server 是 session startup spawn**:`cargo install` 升级 mempal binary 后,Claude Code 还在用旧 MCP server 进程,**不认识新加的工具**(如 `mempal_cowork_push`)。升级后重启 Claude Code,MCP server 会 respawn 到新 binary。CLAUDE.md:Rust 实现的 coding agent 项目记忆工具。单二进制,`cargo install mempal`,10 秒内带出处找回历史决策。CLAUDE.md:| Spec | 状态 | 范围 | |------|------|------| | `specs/p0-core-scaffold.spec.md` | 完成 | workspace 骨架 + SQLite schema | | `specs/p0-embed-trait.spec.md` | 完成 | Embedder trait(model2vec 默认 + ort 可选) | | `specs/p0-ingest.spec.md` | 完成 | 导入管道(格式检测/归一化/分块/存储) | | `specs/p0-search-cli.spec.md` …[+7715 chars]CLAUDE.md:`docs/plans/2026-05-26-p98-release-install-doctor.md` — P98 release install doctor(已完成)CLAUDE.md:`docs/plans/2026-05-26-p100-guided-maintenance-run.md` — P100 guided maintenance run(已完成)CLAUDE.md:`docs/plans/2026-08-18-p117-reindex-atomic-replace.md` — P117 atomic reindex replace + dry-run feasibility report(已完成)CLAUDE.md:| 工具 | 作用 | |------|------| | `mempal_status` | 状态 + 协议 + AAAK spec | | `mempal_doctor` | release/install + MCP runtime diagnostics:报告 binary/PATH/schema 兼容性和 required MCP tool/action 能力清单(P99) | | `mempal_search` | 混合检索(BM25 + 向量 + RRF + tunnel hints)+ AAAK 结构化 signals(P7) | | `mempa …[+2688 chars]CLAUDE.md:Cargo workspace,root package 仍是 `mempal`,并继续提供 `cargo install mempal` 的 CLI binary。P113/P114 已把可复用边界拆成公开 workspace crates;root crate 现在主要负责 CLI、REST entrypoint、package metadata 和 legacy facade paths。CLAUDE.md:**`mempal cowork-install-hooks` 写两件 Claude 侧制品**:`.claude/hooks/user-prompt-submit.sh`(脚本)+ `.claude/settings.json` 下的 `hooks.UserPromptSubmit` 条目(注册)。Claude Code 不按文件名约定自动发现脚本,两件**都必须有**hook 才会 fire。`install-hooks` 已自动处理 + 自愈 stale 条目;请勿手工移除其中任一。CLAUDE.md:**Codex 侧依赖 `codex_hooks` feature flag**:shipped `codex-cli ≤ 0.120.0` 该 flag 处于 "under development" 且默认 `false`,此时 Codex runtime 完全忽略 `~/.codex/hooks.json`。`install-hooks` 检测到会打印 warning + 激活命令 `codex features enable codex_hooks`。CLAUDE.md:**Codex TUI 进程启动时一次性缓存 config**:改完 `config.toml` 或 `hooks.json`(含 feature flag / install-hooks)后,必须完全退出并重启 Codex TUI;已在跑的进程拿不到新配置。CLAUDE.md:**Claude Code 的 MCP server 是 session startup spawn**:`cargo install` 升级 mempal binary 后,Claude Code 还在用旧 MCP server 进程,**不认识新加的工具**(如 `mempal_cowork_push`)。升级后重启 Claude Code,MCP server 会 respawn 到新 binary。
- Low risk: scripts-present (.claude/hooks/user-prompt-submit.sh)
Attribution and licence
- First committed by
ZhangHanDong
- Publisher
- Alex (Community)
- Source
- ZhangHanDong/mempal · commit 9ed705d
- Licence
- MIT License (files served here)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
- Contributors
- ZhangHanDong, LiuZiqi-dual, TigerInYourDream, jolestar, ryushione
AutoGineer is not affiliated with or endorsed by ZhangHanDong.
Install from source
436 of its files are not served here, so there is no ZIP. ZhangHanDong/mempal at 9ed705d