使用说明
智能叉检测
Claude Code的MCP(模型上下文协议)服务器,支持对过去的会话记录进行语义搜索和智能会话分叉。永远不要再失去上下文——立即找到并继续之前最相关的对话。
概述
Smart Fork Detection通过维护所有Claude Code会话的可搜索向量数据库,解决了人工智能辅助开发中的“上下文丢失”问题。当你需要处理类似的任务或从你停止的地方继续时,只需搜索你的对话历史记录,并从最相关的会话中分叉——保留完整的上下文。
主要优势:
- 克服上下文限制:通过智能会话分叉突破200000代币限制
- 即时上下文恢复:在几秒钟内找到相关的过去对话,而不是重新解释一切
- 知识重用:将数百个孤立的会话转化为相互连接、可搜索的知识
- 提高生产率:将上下文重建时间从几分钟缩短到几秒钟
特性
核心能力
- ✅ 语义搜索 -在所有Claude Code会话中进行人工智能搜索
- ✅ 智能会话分叉 -最相关对话的简历
- ✅ 背景索引 -新会话的自动实时索引
- ✅ 项目范围搜索 -按项目目录筛选结果
- ✅ 分叉历史跟踪 -跟踪最近分叉的会话
性能与智能
- ✅ 查询结果缓存 -重复搜索速度提高50%以上
- ✅ 嵌入缓存 -跳过对未更改内容的重新计算嵌入
- ✅ 偏好学习 -根据您的叉子选择改进结果
- ✅ 时间搜索 -按日期查找会话(“上周二”、“2周前”)
- ✅ 多线程索引 -并行处理使初始设置速度提高2-3倍
组织与分析
- ✅ 会话标记 -使用自定义标签组织会话
- ✅ 主题聚类 -相关会话的自动分组(k-means)
- ✅ 会议总结 -TF-IDF关键主题摘要
- ✅ 会话差异工具 -会话之间的语义比较
- ✅ 重复检测 -自动查找类似会话
- ✅ 会话存档 -将旧会话存档到单独的数据库
集成
- ✅ MCP协议 -与Claude Code的原生集成
- ✅ VS Code 扩展 -直接从VS Code(测试版)搜索和分叉
- ✅ CLI工具 -通过命令行访问所有功能
目录
安装
先决条件
- Python 3.10或更高版本
- 克劳德代码(支持MCP)
- 建议嵌入型号使用1GB+RAM
- 矢量数据库500MB+磁盘空间
从源码安装
- 克隆存储库:
git clone https://github.com/recursive-vibe/smart-fork.git
cd Smart-Fork
- 创建并激活虚拟环境:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
- 安装软件包:
pip install -e .
从PyPI安装(即将推出)
pip install smart-fork
验证安装
运行验证脚本以确保一切设置正确:
python -c "import smart_fork; print(smart_fork.__version__)"
配置克劳德代码MCP
将Smart Fork添加到您的Claude Code MCP配置文件中(~/.claude/mcp_servers.json):
{
"mcpServers": {
"smart-fork": {
"command": "/path/to/smart-fork/venv/bin/python",
"args": ["-m", "smart_fork.server"],
"cwd": "/path/to/smart-fork/src",
"env": {
"PYTHONPATH": "/path/to/smart-fork/src"
}
}
}
}
替换 /path/to/smart-fork 使用您的实际安装路径。
重新启动Claude Code(或重新加载VSCode窗口)以加载MCP服务器。
快速开始
-
启动克劳德代码 -Smart Fork服务器将在后台自动启动,并开始为现有会话建立索引。
-
首次运行设置 -首次启动时,Smart Fork将进行扫描
~/.claude/对于现有的会话文件,并构建初始数据库。这可能需要几分钟的时间,具体取决于您有多少会话。手动初始索引 (建议首次运行):
cd /path/to/smart-fork source venv/bin/activate # For small session counts (<100 sessions) python -m smart_fork.initial_setup # For large session counts (100+ sessions) - recommended python -m smart_fork.initial_setup --batch-mode备注:
-
使用工具 -在任何Claude Code会话中,只需用自然语言描述你想做什么。Claude Code将自动调用
fork-detect在适当的时候使用工具。例子:
You: I want to find my previous work on WebSocket real-time updates Claude: [Automatically invokes fork-detect tool behind the scenes] -
选择会话 -克劳德将介绍过去五次最相关的会议。选择一个叉子,或者重新开始。
-
分叉并继续 -复制生成的命令并将其粘贴到新终端中,以完整上下文从该会话继续。
用法
使用叉检测工具
Smart Fork提供 fork-detect MCP工具与Claude Code无缝集成。当你描述一个任务或问题时,Claude Code可以自动调用此工具来搜索你的会话历史记录,并找到最相关的先前对话。
工作原理:
- 自然语言接口 -只需在与克劳德的对话中描述你的任务
- 自动调用 -克劳德代码调用
fork-detect在适当的时候使用幕后工具 - 语义搜索 -该工具使用AI支持的语义匹配搜索您的整个会话历史记录
- 背景结果 -您将收到一份精心策划的过去最相关会议列表
查询示例:
你可以让克劳德帮你完成以下任务:
- “我想像以前一样用JWT实现用户身份验证”
- “你能找到我以前在数据库连接池方面的工作吗?”
- “显示我在设置中添加了暗模式的会话”
- “查找有关重构API错误处理的对话”
- “帮我找到我的React组件优化工作”
直接调用(可选):
虽然Claude Code通常会自动调用该工具,但您也可以明确地询问:
You: Use the fork-detect tool to search for "WebSocket real-time updates"
注: 这 fork-detect 该工具是MCP工具,而不是斜线命令。它通过模型上下文协议调用,要么由Claude自动调用,要么在您明确请求时调用。
选择会话
搜索后,Smart Fork显示了5个选项:
- 前3个结果 -基于综合评分的最相关课程
- 无-重新开始 -无需分叉即可开始新会话
- 键入其他内容 -使用不同的查询优化您的搜索
每个结果显示:
- 会话ID:会话的唯一标识符
- 日期:会话创建时
- 项目:项目名称(从文件路径中提取)
- 得分:相关性百分比(0-100%)
- 预览:从对话中最相关的部分摘录
- ⭐ 推荐:得分最高的结果
输出示例:
Found 5 relevant sessions:
⭐ [1] Session abc123 (92% match) - Recommended
Date: 2026-01-15
Project: my-dashboard
Preview: "Implemented real-time updates using WebSocket connection with
automatic reconnection logic..."
[2] Session def456 (81% match)
Date: 2026-01-10
Project: my-dashboard
Preview: "Added dashboard component with live data updates and polling
fallback..."
[3] Session ghi789 (67% match)
Date: 2025-12-20
Project: admin-portal
Preview: "Created WebSocket handler for server-sent events with proper
error handling..."
[4] None - start fresh
[5] Type something else
分叉会话
当您选择会话时,Smart Fork会生成两种类型的Fork命令:
1.新码头叉 (推荐)
claude --resume abc123 --fork-session
打开一个新的Claude Code会话,从所选对话继续。
2.会话内分叉 (高级)
/fork abc123 /path/to/project
当前会话中的分叉(如果您的Claude Code版本支持)。
只需复制命令并将其粘贴到新终端中,即可继续使用该会话的完整上下文。
配置
Smart Fork使用合理的默认值开箱即用,但您可以自定义其行为。
配置选项
Smart Fork使用配置文件 ~/.smart-fork/config.json。首次运行时,该文件会自动使用默认值创建。
嵌入模型设置
"embedding": {
"model_name": "sentence-transformers/all-MiniLM-L6-v2",
"dimension": 384,
"batch_size": 32,
"max_batch_size": 128,
"min_batch_size": 8
}
- 型号名称:用于嵌入的HuggingFace模型标识符
- 维度:嵌入向量维度(必须与模型匹配)
- batch_size:嵌入生成的默认批量大小
- max_batch_size:最大批量大小(根据RAM自动调整)
- min_batch_size:最小批量(防止批量过小)
搜索参数
"search": {
"k_chunks": 200,
"top_n_sessions": 5,
"preview_length": 200,
"similarity_threshold": 0.3,
"recency_weight": 0.25
}
- k块:从向量数据库检索的块数
- top_n_sessions:要显示的会话结果数
- 预览_长度:预览片段的字符限制
- 相似性阈值:最小相似性得分(0.0-1.0)
- 收货重量:最近几场比赛的得分权重
分块设置
"chunking": {
"target_tokens": 750,
"overlap_tokens": 150,
"max_tokens": 1000
}
- target_tokes:每个块的目标大小
- overlap_tokes:相邻块之间的重叠(保持上下文)
- max_tokens:最大块大小(硬限制)
背景索引
"indexing": {
"debounce_delay": 5.0,
"checkpoint_interval": 15,
"enabled": true
}
- debounce_delay:文件修改后索引前等待的秒数
- 检查点界面:在这之后索引许多新消息(防止丢失)
- 启用:启用/禁用后台索引
超时处理
"setup": {
"timeout_per_session": 30.0
}
- timeout_per_session:处理每个会话文件的最长时间(秒)(默认值:30.0)
Smart Fork将跳过超过此超时的会话并记录警告。超时的会话可以稍后使用重试 retry_timeouts 旗帜。
处理大型会话文件:
如果您有非常大的会话文件(>5MB),在初始设置过程中超时:
from smart_fork.initial_setup import InitialSetup
# Increase timeout for large files
setup = InitialSetup(timeout_per_session=60.0)
result = setup.run_setup()
# Or retry previously timed-out sessions
if result.get('timeouts'):
print(f"{len(result['timeouts'])} sessions timed out")
result = setup.run_setup(resume=True, retry_timeouts=True)
多线程索引:
通过并行处理会话来加快初始设置:
from smart_fork.initial_setup import InitialSetup
# Use 4 worker threads for parallel processing
setup = InitialSetup(workers=4)
result = setup.run_setup()
print(f"Processed {result['files_processed']} files using {result['workers_used']} workers")
print(f"Elapsed time: {result['elapsed_time']:.1f}s")
# Typical speedup with multiple workers:
# - 2 workers: 1.5-1.8x faster
# - 4 workers: 2-3x faster
# - 8 workers: 3-4x faster (diminishing returns due to I/O)
批处理模式设置(建议用于100多个会话):
对于大量会话计数,批处理模式在批处理之间生成新的Python进程以完全释放内存:
# Run initial setup in batch mode (recommended)
python -m smart_fork.initial_setup --batch-mode
# Custom batch size (default: 5 sessions per batch)
python -m smart_fork.initial_setup --batch-mode --batch-size 10
# Force CPU mode to reduce memory usage
python -m smart_fork.initial_setup --batch-mode --use-cpu
# All batch mode options
python -m smart_fork.initial_setup --batch-mode --batch-size 5 --use-cpu --timeout 60
批处理模式的优点:
- 内存管理:每个批次都在单独的进程中运行,确保完全释放内存
- 可恢复的:每次会话后都会保存状态,因此您可以随时中断和恢复
- 进度跟踪:显示当前进度和剩余会话
- 处理器模式:
--use-cpu禁用GPU/MPS加速以减少内存占用
CLI选项:
--batch-mode:启用基于子流程的批处理--batch-size N:每批会话数(默认值:5)--use-cpu:强制CPU模式(禁用MPS/CUDA)--timeout N:每个会话的超时时间(秒)(默认值:30)--storage-dir PATH:自定义存储目录(默认:~/.smart fork)--claude-dir PATH:自定义Claude会话目录(默认:~/.Claude)
服务器设置
"server": {
"host": "127.0.0.1",
"port": 8741
}
- 主机:绑定地址(出于安全考虑,始终为localhost)
- 端口:本地REST API服务器的端口
内存管理
"memory": {
"max_memory_mb": 2000,
"gc_between_batches": true
}
- max_memory_mb:最大内存使用目标(MB)
- gc_between_batch:在嵌入批之间运行垃圾收集
存储目录
"storage_dir": "~/.smart-fork"
- storage_dir:数据库和注册表文件目录
配置文件
创建或编辑 ~/.smart-fork/config.json:
{
"embedding": {
"model_name": "sentence-transformers/all-MiniLM-L6-v2",
"dimension": 384,
"batch_size": 32,
"max_batch_size": 128,
"min_batch_size": 8
},
"search": {
"k_chunks": 200,
"top_n_sessions": 5,
"preview_length": 200,
"similarity_threshold": 0.3,
"recency_weight": 0.25
},
"chunking": {
"target_tokens": 750,
"overlap_tokens": 150,
"max_tokens": 1000
},
"indexing": {
"debounce_delay": 5.0,
"checkpoint_interval": 15,
"enabled": true
},
"server": {
"host": "127.0.0.1",
"port": 8741
},
"memory": {
"max_memory_mb": 2000,
"gc_between_batches": true
},
"storage_dir": "~/.smart-fork"
}
更改在重新启动Claude Code后生效。
运作原理
背景索引
Smart Fork持续监控 ~/.claude/ 对于新的或修改过的会话文件:
- 文件监控:使用
watchdog用于检测文件系统更改的库 - 防抖:在最后一次修改后等待5秒,然后进行索引(可配置)
- 检查点索引:每10-20条消息对会话进行一次索引,以防止数据丢失
- 优雅的加工:处理快速连续更改而不重复
会话文件被自动解析、分块、嵌入并存储在向量数据库中。
语义搜索
当克劳德调用 fork-detect 智能叉子工具:
- 嵌入您的查询:将自然语言描述转换为384维向量
- 向量搜索:使用ChromaDB的k-NN搜索查找200个最相似的块
- 按会话分组:按父会话聚合块
- 分数会议:计算每个会话的综合分数
- 排名结果:返回按相关性排序的前5个会话
综合评分
每节课都会收到一个基于多个因素的综合分数:
Final Score = (best_similarity × 0.40)
+ (avg_similarity × 0.20)
+ (chunk_ratio × 0.05)
+ (recency × 0.25)
+ (chain_quality × 0.10)
评分组成部分:
- 最佳相似性(40%):匹配块之间的最高相似性得分
- 平均相似性(20%):所有匹配块的平均相似性
- 大块率(5%):匹配的会话块比例
- 近期(25%):基于会话年龄的指数衰减(30天半衰期)
- 链条质量(10%):未来对话质量指标的占位符(目前为0.5)
内存类型增强:
包含克劳德记忆标记的会话将获得额外分数:
- 模式 (例如,“设计模式”、“方法”、“架构”):+5%
- 工作解决方案 (例如,“已测试”、“已验证”、“成功”):+8%
- 等待 (例如,“待办事项”、“待定”、“进行中”):+2%
这些提升有助于使用经过验证的解决方案和记录的模式来优先安排会议。
故障排除
已知限制
- 大型会议:超过1MB的会话可能需要更长的时间才能索引。考虑在初始设置中使用基于超时的索引脚本。
- 空会话:没有可解析消息的会话将自动跳过。
- 克劳德代码格式:仅支持Claude Code JSONL格式。解析器处理嵌套
message结构与role和content领域。
常见问题
“未找到会话”错误
原因:数据库为空或尚未完成初始索引。
解决:
- 等待初始索引完成(检查
~/.smart-fork/session-registry.json) - 验证会话文件是否存在于
~/.claude/ - 检查日志中的索引错误
搜索返回不相关的结果
原因:查询可能太模糊,或者数据库需要更多会话。
解决:
- 使用更具体的技术术语查询
- 尝试不同的措辞
- 使用“键入其他内容”选项进行优化
- 调整
similarity_threshold在配置中(较低=更多结果)
内存使用率高
原因:嵌入模型或大批量消耗RAM。
解决:
- 减少
max_batch_size在配置中(例如,到64或32) - 降低
max_memory_mb触发更激进的批量调整 - 关闭其他应用程序以释放内存
- 启用
gc_between_batches如果禁用
搜索性能缓慢
原因:数据库太大或资源不足。
解决:
- 减少
k_chunks在配置中(例如,到100) - 增加
similarity_threshold更积极地过滤 - 检查系统资源(CPU、RAM、磁盘I/O)
- 考虑为大型数据库使用更快的机器
背景索引不起作用
原因:文件监视可能失败或已禁用。
解决:
- 检查一下
indexing.enabled是true在配置中 - 验证
~/.claude/目录存在并且可读 - 重新启动Claude Code以重新初始化MCP服务器
- 检查监视器错误日志
配置更改未生效
原因:启动时加载一次配置。
解决:
- 更改配置后重新启动Claude代码
- 验证配置文件是否具有有效的JSON语法
- 检查上的文件权限
~/.smart-fork/config.json
性能调优
对于RAM有限(<8GB)的系统:
{
"embedding": {
"batch_size": 16,
"max_batch_size": 32
},
"memory": {
"max_memory_mb": 1000,
"gc_between_batches": true
}
}
对于高性能系统(16GB+RAM):
{
"embedding": {
"batch_size": 64,
"max_batch_size": 256
},
"search": {
"k_chunks": 300
},
"memory": {
"max_memory_mb": 4000
}
}
为了以牺牲准确性为代价实现更快的搜索:
{
"search": {
"k_chunks": 100,
"similarity_threshold": 0.5
}
}
隐私和安全
数据存储
所有数据都存储在您的机器上:
- 向量数据库:
~/.smart-fork/vector_db/(ChromaDB) - 会话注册表:
~/.smart-fork/session-registry.json - 配置:
~/.smart-fork/config.json
从未向外部服务器发送任何数据 (第一次运行时下载嵌入模型除外)。
网络安全
- REST API服务器以独占方式绑定到
127.0.0.1(本地主机) - 无法访问外部网络
- 只有本地计算机上的进程才能访问API
会话隐私
- 会话文件位于
~/.claude/可能包含敏感信息 - 矢量数据库存储嵌入(语义表示),但不存储全文
- 会话元数据(项目、时间戳、块计数)存储在注册表中
- 预览片段是根据匹配的块按需生成的
最佳实践
- 保护您的机器:使用全磁盘加密和强用户密码
- 小心备份:如果正在备份
~/.smart-fork/,将其视为敏感数据 - 分叉前的审查:检查预览片段以避免泄露敏感上下文
- 清理旧会话:定期删除不再需要的会话文件
- 环境变量:避免在会话中存储机密(使用
.env文件代替)
删除数据
要完全删除Smart Fork数据:
# Stop Claude Code first
rm -rf ~/.smart-fork/
这将删除矢量数据库、会话注册表和配置。您的原始会话文件位于 ~/.claude/ 保持不变。
示例使用场景
场景1:实现类似功能
上下文:您之前使用WebSockets构建了一个实时仪表板。现在,您需要将实时通知添加到其他项目中。
You: I need to implement real-time notifications with WebSocket.
Can you help me find my previous work on this?
Claude: [Invokes fork-detect tool automatically]
Fork Detection Results:
⭐ [1] Session abc123 (94% match) - Recommended
Date: 2026-01-10
Project: my-dashboard
Preview: "Set up WebSocket connection with automatic reconnection,
heartbeat ping/pong, and exponential backoff..."
[2] Session def456 (81% match)
...
To fork from the recommended session, run:
Terminal command: claude --resume abc123 --fork-session
You: (paste command in new terminal)
Claude: (continues with full context from the dashboard implementation)
结果:您可以节省20多分钟的时间来重新解释WebSocket设置、重新连接逻辑、错误处理等。
场景2:调试重复出现的问题
上下文:您在3周前修复了应用程序中的内存泄漏。另一个组件中出现了类似的问题。
You: I'm seeing a memory leak in React components again.
Can you find my previous debugging session on this?
Claude: [Invokes fork-detect tool]
Fork Detection Results:
⭐ [1] Session def456 (89% match) - Recommended
Date: 2025-12-28
Project: web-app
Preview: "Identified memory leak caused by missing cleanup in useEffect.
Added return function to cancel subscriptions and clear intervals..."
To fork from this session, run:
claude --resume def456 --fork-session
You: (pastes command to continue)
结果:Claude记得上次修复中的确切调试方法、使用的工具和解决方案模式。
场景3:在上下文限制后继续
上下文:您正在进行一个长时间的重构会话,达到了20万个令牌的限制。
You: I need to continue refactoring the authentication module from my
previous session. Can you find where I left off?
Claude: [Invokes fork-detect tool]
Fork Detection Results:
⭐ [1] Session ghi789 (98% match) - Recommended
Date: Today, 2 hours ago
Project: api-server
Preview: "Refactoring auth module: completed user service, working on
token validation. Next: implement refresh token rotation..."
To continue from where you left off, run:
claude --resume ghi789 --fork-session
You: (continues seamlessly)
结果:无缝地继续重构,所有架构决策和进度上下文保持不变。
场景4:测试多种方法
上下文:您想为同一功能尝试不同的UI框架。
# First approach
You: Find my work on implementing settings page with form validation
Claude: [Shows results, you fork to session with React + Formik]
# Later, try another approach
You: Find that same settings page session again, I want to try
a different approach
Claude: [Shows same results]
You: Let's fork from that session but use Vue 3 with Vuelidate instead
结果:在不丢失上下文或重复设置工作的情况下,从同一基线测试多种方法。
场景5:加入新项目
上下文:新团队成员需要了解项目的模式。
You: Can you help me understand this project's structure and coding patterns?
Find any sessions where the architecture was discussed.
Claude: [Invokes fork-detect tool]
Fork Detection Results:
⭐ [1] Session jkl012 (85% match) - Recommended
Date: 2025-11-15
Project: api-server
Preview: "Explained project architecture: 3-tier design with controllers,
services, and repositories. Error handling uses custom exception
classes..."
To review this architectural discussion, run:
claude --resume jkl012 --fork-session
结果:新开发人员可以从架构讨论中获得上下文感知指导。
高级主题
手动会话索引
要手动触发特定会话的索引,请执行以下操作:
from smart_fork.background_indexer import BackgroundIndexer
from smart_fork.embedding_service import EmbeddingService
from smart_fork.vector_db_service import VectorDBService
from smart_fork.session_registry import SessionRegistry
# Initialize services
embedding_service = EmbeddingService()
vector_db = VectorDBService()
registry = SessionRegistry()
# Create indexer
indexer = BackgroundIndexer(
embedding_service=embedding_service,
vector_db=vector_db,
registry=registry
)
# Index a specific file
indexer.index_file("/path/to/session.jsonl")
用程序查询数据库
from smart_fork.search_service import SearchService
# Initialize search service
search_service = SearchService(
embedding_service=embedding_service,
vector_db=vector_db,
scoring_service=scoring_service,
registry=registry
)
# Search for sessions
results = search_service.search(
query="implement user authentication",
k_chunks=200,
top_n_sessions=5
)
for result in results:
print(f"{result.session_id}: {result.score:.2%} - {result.preview[:100]}")
自定义嵌入模型
要使用不同的嵌入模型,请更新您的配置:
{
"embedding": {
"model_name": "sentence-transformers/all-MiniLM-L6-v2",
"dimension": 384
}
}
备注:更改模型需要重新索引所有会话(维度必须匹配)。
数据库统计
检查数据库统计信息:
from smart_fork.vector_db_service import VectorDBService
vector_db = VectorDBService()
stats = vector_db.get_stats()
print(f"Total chunks: {stats['total_chunks']}")
print(f"Total sessions: {stats['total_sessions']}")
路线图
最新版本(v1.0)
所有第1-3阶段功能均已完成,并准备投入生产:
第一阶段(MVP): ✅ 完成
- 语义搜索、背景索引、MCP集成
第2阶段(增强功能): ✅ 完成
- 进度显示、超时处理、会话预览
第3阶段(高级功能): ✅ 完成
- 缓存、分叉历史、项目过滤器、时间搜索、标记
- 聚类、摘要、差异工具、归档、VS代码扩展
未来增强功能(v1.1+)
- 链条质量跟踪:跟踪分叉会话的成功率,以改进建议
- 高级搜索筛选器:布尔运算符、正则表达式模式、元数据过滤器
- 团队特色:具有隐私控制的共享会话库
- 更多IDE插件:JetBrains、Cursor、其他与Claude兼容的编辑器
- 会话分析:使用模式、生产力指标、知识图谱
- 云同步:可选的跨设备加密同步(隐私优先)
想贡献吗?请参阅 贡献 下面的部分!
贡献
我们欢迎捐款!请看 贡献.md 作为指导方针。
贡献领域:
- 其他嵌入模型支持
- 性能优化
- UI/UX改进
- 文档增强
- Bug修复和测试
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
问题? 加入我们 讨论 或者在GitHub上联系。