Skip to content

架构概述

系统组件

Claude-Mem 作为 Claude Code 插件运行,具有五个核心组件:

  1. 插件钩子 - 捕获生命周期事件(6 个钩子文件)
  2. 智能安装 - 缓存依赖检查器(预钩子脚本,在上下文钩子之前运行)
  3. Worker 服务 - 通过 Claude Agent SDK HTTP API 处理观察(10 个搜索端点)
  4. 数据库层 - 存储会话和观察记录(SQLite FTS5 ChromaDB)
  5. mem-search 技能 - 基于技能的搜索与渐进式披露 (v5.4.0)
  6. 查看器界面 - 基于网页的实时内存流可视化

技术栈

技术
语言TypeScript (ES2022, ESNext 模块)
运行时Node.js 18
数据库使用 bun:sqlite 驱动的 SQLite 3
向量存储ChromaDB(可选,用于语义搜索)
HTTP 服务器Express.js 4.18
实时服务器发送事件 (SSE)
用户界面框架React TypeScript
人工智能 SDK@anthropic-ai/claude-agent-sdk
Build Toolesbuild (bundling TypeScript)
进程管理器Bun
测试Node.js 内置测试运行器

数据流

内存流水线

Hook (stdin) → Database → Worker Service → SDK Processor → Database → Next Session Hook
  1. 输入:Claude Code 通过标准输入将工具执行数据发送到 hooks
  2. 存储:钩子将观察结果写入 SQLite 数据库
  3. 处理:Worker 服务读取观测数据,通过 SDK 处理
  4. 输出:处理后的摘要已写回数据库
  5. 检索:下一次会话的上下文挂钩从数据库读取摘要

搜索管道

User Query → MCP Tools Invoked → HTTP API → SessionSearch Service → FTS5 Database → Search Results → Claude
  1. 用户查询:用户自然地问:“我们修复了哪些漏洞?”
  2. MCP 工具已调用:Claude 识别意图并调用 MCP 搜索工具
  3. HTTP API:MCP 工具调用 HTTP 端点(例如,/api/search/observations
  4. SessionSearch:Worker 服务查询 FTS5 虚拟表
  5. 格式:结果通过 MCP 格式化并返回
  6. 返回:Claude向用户呈现格式化结果

使用三层渐进式显示:搜索 → 时间线 → 获取观察结果

会话生命周期

┌─────────────────────────────────────────────────────────────────┐
│ 0. Smart Install Pre-Hook Fires                                 │
│    Checks dependencies (cached), only runs on version changes   │
│    Not a lifecycle hook - runs before context-hook starts       │
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│ 1. Session Starts → Context Hook Fires                          │
│    Starts Bun worker if needed, injects context from previous   │
│    sessions (configurable observation count)                    │
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│ 2. User Types Prompt → UserPromptSubmit Hook Fires              │
│    Creates session in database, saves raw user prompt for FTS5  │
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│ 3. Claude Uses Tools → PostToolUse Hook Fires (100+ times)      │
│    Captures tool executions, sends to worker for AI compression │
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│ 4. Worker Processes → Claude Agent SDK Analyzes                 │
│    Extracts structured learnings via iterative AI processing    │
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│ 5. Claude Stops → Summary Hook Fires                            │
│    Generates final summary with request, completions, learnings │
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│ 6. Session Ends → Cleanup Hook Fires                            │
│    Marks session complete (graceful, not DELETE), ready for     │
│    next session context. Skips on /clear to preserve ongoing    │
└─────────────────────────────────────────────────────────────────┘

目录结构

claude-mem/
├── src/
│   ├── hooks/                  # Hook implementations (6 hooks)
│   │   ├── context-hook.ts     # SessionStart
│   │   ├── user-message-hook.ts # UserMessage (for debugging)
│   │   ├── new-hook.ts         # UserPromptSubmit
│   │   ├── save-hook.ts        # PostToolUse
│   │   ├── summary-hook.ts     # Stop
│   │   ├── cleanup-hook.ts     # SessionEnd
│   │   └── hook-response.ts    # Hook response utilities
│   │
│   ├── sdk/                    # Claude Agent SDK integration
│   │   ├── prompts.ts          # XML prompt builders
│   │   ├── parser.ts           # XML response parser
│   │   └── worker.ts           # Main SDK agent loop
│   │
│   ├── services/
│   │   ├── worker-service.ts   # Express HTTP + SSE service
│   │   └── sqlite/             # Database layer
│   │       ├── SessionStore.ts # CRUD operations
│   │       ├── SessionSearch.ts # FTS5 search service
│   │       ├── migrations.ts
│   │       └── types.ts
│   │
│   ├── ui/                     # Viewer UI
│   │   └── viewer/             # React + TypeScript web interface
│   │       ├── components/     # UI components
│   │       ├── hooks/          # React hooks
│   │       ├── utils/          # Utilities
│   │       └── assets/         # Fonts, logos
│   │
│   ├── shared/                 # Shared utilities
│   │   ├── config.ts
│   │   ├── paths.ts
│   │   └── storage.ts
│   │
│   └── utils/
│       ├── logger.ts
│       ├── platform.ts
│       └── port-allocator.ts

├── scripts/                    # Build and utility scripts
│   └── smart-install.js        # Cached dependency checker (pre-hook)

├── plugin/                     # Plugin distribution
│   ├── .claude-plugin/
│   │   └── plugin.json
│   ├── hooks/
│   │   └── hooks.json
│   ├── scripts/                # Built executables
│   │   ├── context-hook.js
│   │   ├── user-message-hook.js
│   │   ├── new-hook.js
│   │   ├── save-hook.js
│   │   ├── summary-hook.js
│   │   ├── cleanup-hook.js
│   │   └── worker-service.cjs  # Background worker + HTTP API
│   │
│   ├── skills/                 # Agent skills (v5.4.0+)
│   │   ├── mem-search/         # Search skill with progressive disclosure (v5.5.0)
│   │   │   ├── SKILL.md        # Skill frontmatter (~250 tokens)
│   │   │   ├── operations/     # 12 detailed operation docs
│   │   │   └── principles/     # 2 principle guides
│   │   ├── troubleshoot/       # Troubleshooting skill
│   │   │   ├── SKILL.md
│   │   │   └── operations/     # 6 operation docs
│   │   └── version-bump/       # Version management skill (deprecated)
│   │
│   └── ui/                     # Built viewer UI
│       └── viewer.html         # Self-contained bundle

├── tests/                      # Test suite
├── docs/                       # Documentation
└── ecosystem.config.cjs        # Process configuration (deprecated)

组件详情

1. 插件钩子(6 个钩子)

  • context-hook.js - SessionStart:启动 Bun Worker 进程,注入上下文
  • user-message-hook.js - 用户消息:调试钩子
  • new-hook.js - 用户提交提示:创建会话,保存提示
  • save-hook.js - PostToolUse:捕获工具执行
  • summary-hook.js - Stop: Generate session summary
  • cleanup-hook.js - 会话结束:标记会话完成

注意:smart-install.js 是一个预钩子依赖检查器(不是生命周期钩子)。它通过 hooks.json 中的命令链在 context-hook 之前被调用,并且只在需要更新依赖时运行。

请参阅 Plugin Hooks 了解详细的钩子文档。

2. Worker 服务

Express.js HTTP 服务器,端口 37777(可配置),具备以下功能:

  • 10 个搜索 HTTP API 端点(v5.4.0)
  • 8 个查看器 UI HTTP/SSE 端点
  • 通过 Claude Agent SDK 进行异步观察处理
  • 通过服务器发送事件的实时更新
  • 由 Bun 自动管理

Please refer to Worker Service] for HTTP API and endpoint information.

3. 数据库层

Using bun:sqlite driver for SQLite3, features include:

  • 用于全文搜索的 FTS5 虚拟表
  • 用于 CRUD 操作的会话存储
  • FTS5 查询的会话搜索
  • 地点:~/.claude-mem/claude-mem.db

请参见 Database Architecture 了解架构和 FTS5 搜索。

4. mem-search 技能 (v5.4.0)

基于技能的搜索,采用渐进式披露,提供10种搜索操作:

  • 搜索观测、会话、提示(全文本 FTS5)
  • 按类型、概念、文件筛选
  • 获取最近的上下文、时间线、按查询的时间线
  • API 帮助文档

token 节省:每次会话约 2,250 个 token,相比 MCP 方法

  • 技能前言:约250个标记(在会话开始时加载)
  • 完整说明:约 2,500 个标记(在调用时按需加载)
  • HTTP API endpoint instead of MCP tool

Skill Enhancement (v5.5.0): Renamed 'search' to 'mem-search' for better scope distinction. Effectiveness increased from 67% to 100% through enhanced triggers and complete documentation.

有关技术细节和示例,请参见 Search Architecture

5. 查看器界面

In the React TypeScript web interface of http://localhost:37777, features include:

  • 通过服务器发送事件的实时内存流
  • 无限滚动分页与自动去重
  • 项目筛选和设置持久化
  • GPU加速动画
  • Independent HTML Package (viewer.html)

Use esbuild to build for single-file deployment.