Persistent memory system for Kimi Code CLI โ remember context across sessions
Project description
๐ง kimi-mem
Persistent memory system for Kimi Code CLI.
Remember context across sessions. Never repeat yourself.
Inspired by claude-mem, built for the Kimi ecosystem.
โจ Features
- ๐ Persistent Memory โ Context survives across Kimi sessions
- ๐ช Native Hooks โ Uses Kimi CLI's built-in lifecycle hooks (
SessionStart,UserPromptSubmit,PostToolUse,Stop,SessionEnd) - ๐ค MCP Tools โ 6 auto-search tools the agent can invoke during conversations
- ๐ Full-Text + Semantic Search โ SQLite FTS5 + sqlite-vec for hybrid retrieval
- ๐ฏ Progressive Disclosure โ 3-layer retrieval:
indexโtimelineโget - ๐ง AI Summarization โ Automatically compresses sessions into actionable memories via Moonshot API
- ๐ท๏ธ Tagged & Typed โ Memories categorized as pattern, decision, bugfix, architecture, note
- ๐ Privacy Tags โ
<private>blocks are automatically excluded from search/storage - ๐ Web Viewer โ Local dashboard at
http://localhost:37777 - ๐ Token-Efficient โ Injects only the most relevant memories, respects context limits
- โก Zero External Services โ SQLite is all you need; vector search included
๐ฆ Installation
1. Install the package
pip install kimi-mem
# With web viewer support
pip install "kimi-mem[web]"
Or from source:
git clone https://github.com/theretech/kimi-mem.git
cd kimi-mem
pip install -e ".[web]"
2. Install hooks into Kimi CLI
Make sure kimi-mem is available in your PATH:
# If installed in a virtual environment, link the binary:
ln -s "$(pwd)/.venv/bin/kimi-mem" ~/.local/bin/kimi-mem
# Or install globally
pip install kimi-mem
Then install the hooks:
kimi-mem install
This appends hook entries to your ~/.kimi/config.toml.
๐ Restart Kimi Code CLI for the hooks to take effect.
3. Install MCP server (optional, for auto-search)
kimi-mem mcp-install
This registers the kimi-mem MCP server so the agent can search memories automatically during conversations.
๐ Restart Kimi Code CLI after installing MCP.
4. Set your API key (optional, for AI summarization)
export KIMI_API_KEY="your-moonshot-api-key"
If not set, kimi-mem still works โ it just won't auto-summarize sessions with AI.
๐ Quick Start
Let it run automatically
Once installed, kimi-mem works in the background:
- Start a Kimi session โ relevant memories are injected into context via
additionalContext - Type a prompt โ your question is saved to the session history
- Use tools (ReadFile, Shell, etc.) โ observations are captured silently
- End the session โ session is summarized with AI and memories are stored
The agent can also search memories on its own by calling MCP tools:
"What was that JWT fix we did last week?" โ Agent auto-invokes
kimi_mem_search
CLI Commands
# Search your memory (full-text)
kimi-mem search "authentication bug"
# Semantic search (vector)
kimi-mem search "how to handle jwt errors" --semantic
# Progressive disclosure
kimi-mem index "database migration" # Layer 1: compact index
kimi-mem timeline <id> # Layer 2: chronological context
kimi-mem get <id> # Layer 3: full detail
# Recent memories
kimi-mem recent --limit 5
# Add a memory manually
kimi-mem add "Use jwt.ParseWithClaims for custom claims" \
--type pattern --tag go --tag jwt
# Start web viewer
kimi-mem serve
# Check status
kimi-mem status
# MCP server (stdio transport)
kimi-mem mcp
๐๏ธ Architecture
โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ Kimi CLI โโโโโโถโ Hooks โโโโโโถโ kimi-mem core โ
โ (session) โ โ (stdin JSON)โ โ (Python + SQLite)โ
โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ โ
โ โโโโโโโโโโโโโโโโโโโ โ
โ โ MCP Server โโโโโโโโโโโโโโโโโโ
โ โ (6 tools) โ
โ โโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโ
โ SQLite + FTS5 โ
โ + sqlite-vec โ
โ (sessions + โ
โ prompts + โ
โ observations +โ
โ memories) โ
โโโโโโโโโโโโโโโโโโโ
Hooks used
| Event | What it does |
|---|---|
SessionStart |
Creates session in DB + retrieves relevant memories โ injects via additionalContext |
UserPromptSubmit |
Saves the user's prompt to the session history |
PostToolUse |
Captures tool calls/outputs as observations (skips low-value tools) |
Stop / SessionEnd |
Summarizes session with AI โ stores compressed memories |
MCP Tools
| Tool | Purpose |
|---|---|
kimi_mem_search |
Full-text or semantic search over memories |
kimi_mem_index |
Layer 1: compact index (~50 tokens/result) |
kimi_mem_timeline |
Layer 2: chronological context around a memory ID |
kimi_mem_get |
Layer 3: full memory detail by ID |
kimi_mem_recent |
List recent memories |
kimi_mem_add |
Manually add a memory |
Progressive Disclosure (3 layers)
Inspired by claude-mem, kimi-mem uses token-efficient layered retrieval:
| Layer | Command | Tokens | Purpose |
|---|---|---|---|
| L1 | kimi-mem index <query> |
~50-100/result | Compact preview with IDs |
| L2 | kimi-mem timeline <id> |
~200-500/result | Chronological context around a memory |
| L3 | kimi-mem get <id> |
~500-1000/result | Full content + metadata |
๐ Privacy
kimi-mem respects your privacy:
<private>...</private>tags in any content are automatically detected and excluded from search, vector index, and session injection- Private memories are still stored (for your reference) but never retrieved automatically
- Heuristics detect secrets, passwords, and API keys in observations (without blocking library names like
jsonwebtoken) - Use
--include-privateto explicitly search private memories
โ๏ธ Configuration
Environment variables:
| Variable | Description | Default |
|---|---|---|
KIMI_API_KEY |
Moonshot API key for summarization | โ |
KIMI_MEM_DATA_DIR |
Where to store the SQLite DB | ~/.kimi-mem |
KIMI_MEM_DB_PATH |
Direct path to SQLite file | ~/.kimi-mem/memory.db |
KIMI_MEM_MODEL |
Model for summarization | moonshot-v1-8k |
KIMI_MEM_EMBEDDING_MODEL |
Model for embeddings | moonshot-v1-embedding |
KIMI_MEM_EMBEDDING_DIM |
Embedding dimension | 1024 |
๐ ๏ธ Development
# Setup
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev,web]"
# Run tests
pytest
# Lint
ruff check .
# Format
ruff format .
๐ Roadmap
- SQLite + FTS5 persistent storage
- Native Kimi CLI hooks (5 lifecycle hooks)
- AI-powered session summarization
- Semantic vector search (sqlite-vec)
- Progressive disclosure (3-layer retrieval)
- Web viewer dashboard
- Privacy tags (
<private>exclusion) - MCP server for auto agent search
- PyPI publication
- Cross-project memory linking
- Memory import/export
- Team/shared memory
๐ค Contributing
This is an early alpha built by the community for the community.
PRs, issues, and ideas are welcome!
- Fork the repo
- Create a feature branch
- Make your changes
- Submit a PR
๐ License
MIT โ see LICENSE for details.
โ Support
If you find kimi-mem useful, consider supporting the project:
PIX (Brazil):
54802231000148 โ THE RETECH LTDA - EPP
Built with ๐ by The Retech and friends.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kimi_mem-0.2.3.tar.gz.
File metadata
- Download URL: kimi_mem-0.2.3.tar.gz
- Upload date:
- Size: 34.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
996e2d706eb474cbaef7c3c494bda3c4d941f52d2520022739ddfc0322e983c2
|
|
| MD5 |
828dead808de3a68e06779228779ab9a
|
|
| BLAKE2b-256 |
c3e5c17ea9b3b5d4383e50f7eccf6aa613c33481e3f2b3883b64919970c29e95
|
File details
Details for the file kimi_mem-0.2.3-py3-none-any.whl.
File metadata
- Download URL: kimi_mem-0.2.3-py3-none-any.whl
- Upload date:
- Size: 32.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
659eaa58178a98b1ab497269bac4eddf4ba02eff27adcf4efa9cacf862237783
|
|
| MD5 |
603c2ea07a373a7e6b1a773fd03abc14
|
|
| BLAKE2b-256 |
a09aef916cc6c894794d8cafd556833c3e1ce26be717ad8fb00ac2bbce255c74
|