mcpField
C
claude-handoff

claude-handoff

本地服务
github.com/Vasilispapg记忆与知识18 周前更新

关于 claude-handoff

claude-handoff 是面向 Claude Code 用户的本地命令行工具,可将会话整理成便于其他 AI 继续工作的交接文档,也能从项目历史提炼带来源的长期记忆。默认离线、确定性运行,并可选调用 LLM 总结。

主要功能

  1. 01生成会话交接文档
  2. 02检索和筛选历史会话
  3. 03提炼带引用的项目记忆
  4. 04自动注入和刷新记忆
  5. 05输出前识别并遮蔽密钥

适用场景

  1. 01会话崩溃后恢复工作上下文
  2. 02将 Claude Code 工作交给其他模型
  3. 03让新会话载入项目历史
  4. 04从过往会话查找讨论内容

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"vasilispapg-claude-handoff": {
"command": "uvx",
"args": [
"claude-handoff"
]
}
}
}
启动命令uvx claude-handoff

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypiclaude-handoff0.19.0

工具

2

收录的工具列表 · 更新于 2 周前

参数类型必填说明
projectstring否项目路径的子字符串筛选条件

详细介绍

claude-handoff

claude-handoff:嘈杂的对话记录经 chf 处理后,变成简洁的 handoff.md 和持续维护的项目记忆

PyPI Python CI Downloads License: MIT

将任意 Claude Code 会话(即使是崩溃的会话)转换为简洁的 handoff.md,让另一个 AI 可以接着处理。还可以从你自己的历史记录中提炼项目记忆,永久提供给 Claude Code。

chf

就这么简单。你最近的会话会变成 handoff.md:去除杂音的对话、已更改的文件、运行过的命令,并以给接手助手的说明开头,让你可以直接粘贴到 Gemini、GPT、claude.ai 或全新的 Claude Code 会话中,无需额外提示词。

chf -o clipboard 实际运行效果——从会话到可直接粘贴的交接文档只需五秒

Claude Code 会将每个会话以 JSONL 格式存储在本地 (~/.claude/projects/…/*.jsonl),其中包含大量工具调用、工具结果、思考区块和系统提醒。现有的导出工具会将所有内容都倾倒进 Markdown。claude-handoff 则会生成交接文档;此外,由于它可以读取你的全部历史记录,还能生成项目记忆简报。

  • 零依赖。 仅使用标准库,支持 Python 3.9+。这是一个包含九个模块的包,也提供生成的单文件脚本,可供你通过 curl 下载并审查。
  • 默认行为可预测。 无需 API 调用,不产生费用,可离线使用。
  • 需要真正的摘要时,可使用 --llm。 通过你自己的 API 密钥使用 Claude、OpenAI 或 Gemini;也可以使用 --llm claude-cli,通过你现有的 Pro/Max 套餐运行本机安装的 Claude Code CLI:完全无需 API 密钥。
  • 去除杂音。 丢弃工具结果、思考区块、系统提醒、子 Agent 对话和斜杠命令封装。保留用户意图、助手回答、修改的文件和运行的命令——包括子 Agent 的文件和命令(agent-*.jsonl);子 Agent 的完整对话记录则由 --include-sidechains 保留。
  • 项目记忆。 chf --brief 会将项目的全部会话历史提炼成一份持续更新的简报,涵盖项目内容、当前进展、决策、修复、约定,以及按顺序排列的未完成事项恢复计划;每项内容均注明来源会话。使用 --install-brief-hook 将其注入每个新的 Claude Code 会话,让 Claude 一开始就了解项目。
  • 粘贴安全。 所有输出中的疑似机密字符串(API 密钥、令牌、password= 等)都会被删去——粘贴到网页聊天中的交接文档同样属于数据外发。公开分享时,--anonymize 可进行更彻底的匿名化。

前置条件

要求最低要求检查命令说明
Python3.9+python3 --version唯一的硬性要求
Claude Code任意版本claude --version仅供 --llm claude-cli 使用(使用你的 Pro/Max 登录)
pipx (推荐)任意版本pipx --version使用 pip install pipx 安装,也可以使用 brew / 普通 pip

永远不需要第三方 Python 包——所有功能都通过标准库实现。

安装

pipx install claude-handoff        # or: pip install claude-handoff
brew install Vasilispapg/tap/claude-handoff   # Homebrew
# or just grab the generated single-file build — stdlib-only, auditable:
curl -O https://raw.githubusercontent.com/Vasilispapg/claude-handoff/main/single/claude_handoff.py
python3 claude_handoff.py --list

安装此包后,你将获得两个功能相同的命令:claude-handoff 和简短别名 chf。启用 Tab 补全:

eval "$(claude-handoff --completions zsh)"    # bash works too

60 秒:选择你的场景

会话崩溃、达到使用上限,或你关闭了终端:

chf -o clipboard

……然后粘贴到 claude.ai、ChatGPT、Gemini,或新的 claude 会话中。 适用于任何旧会话;崩溃前无需安装任何内容。

将工作从 Claude Code 转移到其他模型:

chf --fit 32k -o clipboard         # sized to the receiver's context window

“我们在哪个会话里讨论过 CORS?”

chf --list --grep "CORS"           # every match, with a 🔍 context preview
chf --grep "CORS"                  # or export the newest match directly

让 Claude Code 永久记住这个项目:

chf --brief --llm claude-cli       # distill ALL sessions → one cited brief
chf --install-brief-hook           # every new session starts knowing it

生成真正的摘要,而非对话记录(目标 / 决策 / 状态 / 下一步):

chf --llm claude-cli               # your Claude Code login — no API key

使用 claude.ai 或 ChatGPT 网页聊天,而非终端会话:

chf conversations.json --list      # each app's data export works as input
chf conversations.json --name "webhook bug"

项目记忆(--brief)

Claude Code 会在会话之间忘记一切,但所有历史记录都在你的磁盘上。chf --brief 会读取当前项目的所有会话,并将一份记忆文档写入 ~/.claude/briefs/<project>.md:

  • 一份事实性的会话时间线,以及最常访问的文件(确定性生成,免费);
  • 使用 --llm 时,会生成一份提炼后的记忆,开篇介绍这是什么(产品、技术栈、当前状态)和目前进展如何(已完成 / 进行中 / 尚未开始),然后列出决策及其原因、已修复的 bug、约定,以及按顺序排列的待处理事项恢复计划。每项都包含具体的下一步操作,并标记 [in flight] / [blocked] / [not started]。每条要点都会注明其来源会话的 ID(chf --name <id> 可打开来源)。

chf --brief 实际效果——将整个项目历史提炼为带引用的记忆

每个会话的笔记都会缓存,因此有新会话后刷新时只需处理新增内容;超长会话(超过约 120k 个字符)会在笔记内部进行映射归约,因此记忆路径永远不会被截断:无论内容多长,都不会被悄悄丢弃。

你还可以筛选哪些内容会纳入记忆:--exclude <id> 可排除一个会话(例如重复内容或实验会话——单独使用 --exclude 会打开带编号的选择器,并记住之前的选择:已存储的排除项会预先选中并显示为 ✗,输入编号可切换选择,因此你修改的是当前集合,而不是重新选择);--keep first:2,last:20 可将庞大的历史记录限制为最初的会话,加上一个滑动的近期会话窗口。两者都会持续生效——设置会存储在 brief 的标记中,因此钩子和后续刷新都会继续遵循这些设置,直到你更改它们(--exclude none、--keep all)。chf --brief -o clipboard 还可以将当前 brief(包括提炼内容)直接复制到剪贴板,只需粘贴一次,即可将项目记忆交给另一个模型。

brief 还支持项目存储之外的内容:chf --brief --grep X -o - 可提炼主题记忆(仅包含讨论过 X 的会话);chf conversations.json --brief -o brief.md 则可从 claude.ai 或 ChatGPT 导出文件构建常驻记忆,并为每段对话标注其 ID。两者都设计为导出操作(仅显式指定 -o 时才会导出),因此绝不会覆盖常驻 brief。

如果你正在运行 graphify,这两个工具可以双向组合,无需配置:chf --brief -o graphify 会将当前记忆存入 raw/——形成一份不断演进的 project-memory.md,供下一次 /graphify --update 链接到代码知识图谱中;而一旦 graphify-out/graph.json 存在,每份 brief 都会免费附带一个 ## Code map(社区、枢纽概念、跨社区的 bridges:、带标签的 flows:),让新会话了解代码的结构,而不仅仅是它的历史。项目内副本(raw/project-memory.md、可选的根目录 BRIEF.md)会在每次写入 brief 时刷新——严格来说只刷新已有文件,钩子绝不会创建文件。完整流程请参阅 docs/GUIDE.md。

chf --install-brief-hook

会安装两个钩子:SessionStart 会将 brief 注入上下文(Claude 启动时就已了解你的项目,执行 /compact 后也会再次注入);SessionEnd 会免费自动刷新事实性内容。钩子绝不会运行 LLM;只有在你主动要求时,才会刷新提炼后的内容。brief 会附带新鲜度标记;如果存在更新的会话或提交,文件和注入内容不只会发出警告,还会列出具体内容(会话标题、提交主题),因此新会话能看到具体变更,而不只是知道有变更。完全在本地运行;与其他所有地方一样,适用脱敏规则。

→ 分步说明工作机制、如实列出的成本表,以及完整的一日使用流程:docs/GUIDE.md。

自动完成

chf --install-hook                 # SessionEnd + PreCompact → handoff to ~/.claude/handoffs/
chf --install-brief-hook           # SessionStart/End + PreCompact → project memory (above)
chf --install-skill                # /claude-handoff skill → Claude Code drives chf correctly

PreCompact 很重要:Claude Code 即将压缩长会话的上下文时,两个钩子都会立即快照状态——交接内容保留了压缩即将挤掉的细节,而简要提纲则能在会话中途保持最新。

两者都会以非破坏性方式编辑 ~/.claude/settings.json,具有幂等性,并提供对应的 --uninstall-* 标志。钩子失败不会中断宿主会话,钩子也不会自行触发 LLM 调用或创建文件。

第三个是给 Claude 本身用的:--install-skill 会将 /claude-handoff 技能放入 ~/.claude/skills/(并在 ~/.claude/CLAUDE.md 中添加相应的触发说明),让 Claude Code 知道该工具的语法,而不是靠猜测——例如在实时会话中,裸用 chf 会选择哪个会话、claude-cli(订阅)与 claude(API 密钥)的区别、用于适配令牌预算的 --fit,以及避免在 Agent shell 中使用交互式选择器。此操作具有幂等性,会保留手写的章节;--uninstall-skill 会移除这两部分,且不会改动任一文件中的其他内容。


输出示例

# Conversation handoff

> To the receiving assistant: … you are taking over …

## Session
- Project: /home/you/myapp (branch main)
- When: 2026-08-20 09:00 → 09:04
- Activity: 2 user messages, 2 assistant replies, 4 tool calls

## Files created / modified
- auth.py

## Commands run
- python -m pytest tests/test_auth.py -q

_🤖 2 subagent(s) contributed to the work above (--include-sidechains for their transcripts)._

## Conversation

_Condensed digest, every turn capped — verbatim messages with --full, a real summary with --llm._

- **🧑 User:** the login breaks on unicode passwords…
- **🤖 Assistant:** Found it — ascii encoding. Changed to utf-8, tests pass. _[4 tool calls]_
- 🔔 Agent "Update the docs" finished

这里包含每一轮对话,并压缩为其要点——这是一个摘要工具,而不是导出工具。--full 会切换到经典的逐字消息模式,而 --llm 会用真正读完所有内容后生成的摘要替换简报。

常用命令

chf                                # latest session → handoff.md
chf -i                             # numbered picker; "1,3" or "2-4" merges several
chf --list                         # what sessions do I have? (title · first prompt)
chf --list --format json           # the same, machine-readable
chf --name "login bug"             # newest session whose title/prompt matches
chf "login bug"                    # same — a non-path argument is a name search
chf --grep "CORS"                  # newest session that *talked about* CORS
chf --grep CORS --grep auth        # …that talked about BOTH (AND)
chf a.jsonl b.jsonl                # several paths → ONE merged handoff
chf --project myrepo               # latest session of a specific project
chf path/to/session.jsonl -o -     # explicit file → stdout
chf -o clipboard                   # straight to the clipboard — go paste it
chf --full                         # verbatim messages instead of the digest
chf --last 5                       # only the last 5 user turns
chf --since 2h                     # only the last 2 hours of the session
chf --fit 32k                      # sized to fit a 32k-token context
chf --include-tools                # keep collapsed per-tool-call detail
chf --include-sidechains           # append full subagent transcripts
chf --anonymize                    # public-safe: ~ paths, no emails/IPs/username
chf --project myrepo --merge       # whole project in ONE handoff, oldest → newest
chf --format json -o session.json  # machine-readable handoff

# LLM summaries (goal / decisions / current state / next steps).
# --llm composes with EVERYTHING above — picker, --name/--grep/--project,
# --merge, --last/--since, clipboard, JSON… (only --fit stays
# deterministic-only, by design):
chf --llm claude-cli               # your Claude Code login — no API key
chf --llm ollama                   # local model — fully offline
chf --llm claude                   # Anthropic API   (ANTHROPIC_API_KEY)
chf --llm openai --model gpt-4o    # OpenAI API      (OPENAI_API_KEY)
chf --llm gemini --with-transcript # Google API      (GEMINI_API_KEY)
chf --llm claude-cli --focus "emphasize the API decisions"
chf --grep CORS --llm claude-cli   # find the session, then summarize it
chf -i --merge --llm claude-cli -o clipboard   # pick several → ONE summary, pasted
chf --since 2h --llm claude-cli    # summarize just the last two hours

# project memory:
chf --brief                        # free factual brief (timeline + files)
chf --brief --llm claude-cli       # + distilled decisions/fixes/conventions
chf --brief --exclude              # numbered picker: edit the sticky exclusions (✗ pre-selected, numbers toggle)
chf --brief --keep first:2,last:20 # bound a huge history: founding + recent
chf --brief --keep since:30d       # …or by time — the window slides
chf --brief --grep auth -o -       # thematic memory: only the auth sessions
chf conversations.json --brief -o brief.md   # memory from a claude.ai/ChatGPT export

它会在哪里查找? 会话存储在 Claude Code 的全局存储目录(~/.claude/projects)中,因此你可以在任何位置运行 chf。如果当前目录本身就是某个项目(或其子目录),它会限定在该项目的会话范围内;父级“主文件夹”会涵盖其下的所有项目;--any 则会完全忽略目录。自动选择会跳过几乎为空的会话(例如 claude /login 留下的空壳会话),因此“最新”指的是你最新的真实对话——显式指定路径、--name 或 -i 始终优先。

大型会话。 超过一次处理上限(约 400k 个字符)的文字记录会采用 map-reduce 方式总结:先为每个分块生成笔记,再综合成一份摘要——不会悄无声息地丢弃内容,已完成的分块会缓存到 ~/.cache/claude-handoff,因此中断后可免费续跑。使用 API 提供商时,分块会以 4 路并行处理;claude-cli 和 ollama 则按设计保持顺序处理。在终端中,你可以看到实时进度条:

[█████████░░░░░░░░░░░░░░░] 3/9 chunks | 4m12s elapsed | ~8m left | summarizing part 4/8 (199,867 chars)…

含有 API usage 数据的会话也会在标题中显示 Tokens 行,每次运行还会报告输出的大致令牌数。

隐私与零信任

  • 除非你传入 --llm,否则不会向任何地方发送数据——确定性模式完全离线。
  • 所有输出都会进行脱敏,不仅限于 LLM 流量:形似机密的字符串(API 密钥、令牌、JWT、password= 等)都会从交接内容、钩子文件和 MCP 回复中删除——粘贴的文档也属于数据外传。使用 --no-redact 可在单次运行中选择退出(且有意禁止在配置文件中使用)。
  • --anonymize 还会将你的主目录路径统一替换为 ~,并将电子邮箱、IPv4 地址和用户名替换为占位符——方便粘贴到公开问题和论坛中。
  • --llm claude-cli 和 --llm ollama 会将所有内容保留在你已掌控的账户和设备内。
  • 提示词注入防御:文字记录中经常嵌入不可信文本(工具结果中的网页、粘贴的 README)。所有会读取文字记录的提示词、交接前言和简报注入包装都会将这些内容标明为数据,而非指令——并通过测试加以验证。这是一种缓解措施,而非安全性证明;解析器本身不会执行任何内容。

配置(可选)

将你总是使用的默认值写入 ~/.config/claude-handoff/config.json(CLI 标志始终优先;CLAUDE_HANDOFF_CONFIG 可覆盖路径):

{ "llm": "claude-cli", "fit": "32k", "include_tools": true }

允许的键:llm、model、fit、output、include_tools、include_sidechains、max_chars、anonymize、focus。安全开关(no_redact)有意不设为可配置项——必须通过每次运行时的显式选择才能削弱脱敏。配置损坏时会发出警告并忽略,不会导致程序失败。

环境变量

变量用途
ANTHROPIC_API_KEY / CLAUDE_API--llm claude 的密钥(优先使用第一个已设置的变量)
OPENAI_API_KEY / GPT_API--llm openai 的密钥
GEMINI_API_KEY / GOOGLE_API_KEY / GEMINI_API--llm gemini 的密钥
OLLAMA_MODEL / OLLAMA_BASE_URL本地 Ollama 模型和端点
CLAUDE_HOMEClaude Code 主目录(默认 ~/.claude)——会话、交接文档和摘要的存放位置
CLAUDE_HANDOFF_CACHE分块/笔记缓存目录(默认 ~/.cache/claude-handoff)
CLAUDE_HANDOFF_CONFIG配置文件路径(默认 ~/.config/claude-handoff/config.json)
CLAUDE_HANDOFF_DEBUG1 = 等同于 --debug;同时启用钩子(将其添加到钩子命令或 shell 环境中)

claude-cli 无需设置变量——它会调用已安装的 Claude Code CLI,费用计入你的 Pro/Max 计划 (运行一次 claude 即可登录)。

MCP 服务

任何 MCP 客户端(Claude Desktop、Claude Code 等)都可以直接获取交接文档:

claude mcp add claude-handoff -- claude-handoff --mcp

工具:list_sessions(查看此机器上的内容)和 handoff(按名称/项目/路径为会话生成文档;传入 anonymize 可生成可分享的版本)。默认采用确定性方式——只有在启动服务时添加 --allow-llm,MCP 客户端才能触发 LLM 摘要。

故障排除

运行 pip install 后提示 claude-handoff: command not found pip 会将脚本安装到用户的 bin 目录,该目录可能不在 PATH 中。使用 pipx install claude-handoff 或 brew——两者都会管理 PATH——或者将 ~/.local/bin(Linux)/ ~/Library/Python/3.x/bin(macOS)添加到 PATH。

提示“在 ~/.claude/projects 下未找到会话” 你正在使用的机器(或用户)尚未运行过 Claude Code,或者数据存放在其他位置——将 CLAUDE_HOME 指向对应位置。在项目文件夹内,工具只会搜索该项目;传入 --any 可搜索所有内容。

选错了会话 “最新”会跳过内容极少的临时文件,但仍然只是选择最新的文件。使用 -i(选择器)、--name "标题中的部分内容" 或 --grep "提到的内容"。

--llm claude-cli 失败或要求进行身份验证 运行一次 claude 并登录(/login)。即使在 Claude Code 会话内部调用也能正常工作——继承的 CLAUDE* 环境变量会被清除,因此嵌套 CLI 会像全新启动一样进行身份验证。

--llm claude-cli 失败并提示“Credit balance is too low” 你在 shell 中导出的 ANTHROPIC_API_KEY 覆盖了 Pro/Max 登录信息,并向(余额为零的)Console 账户计费。从 0.18.0 起,启动的 CLI 会自动清除此密钥——如果旧版本出现此问题,请升级,或在运行前执行 unset ANTHROPIC_API_KEY。

提示“设置 ANTHROPIC_API_KEY … 以使用 --llm claude” API 提供商需要在环境中设置密钥——参见上表。没有密钥?可使用 --llm claude-cli(订阅)或 --llm ollama(本地)。

--fit 不允许与 --llm / --max-chars 组合使用 --fit 会独立调整确定性输出的大小。如果你没有手动指定它,可能是配置文件设置了 fit——移除显式的 --max-chars 覆盖,或删除该配置项。

注入摘要时警告“存在比此摘要更新的会话” 这是新鲜度标记在发挥作用:运行 chf --brief --llm claude-cli 以重新提炼摘要(会使用缓存——只有新会话会产生费用)。如果已安装 SessionEnd 钩子,事实部分会自动更新。

某些操作悄无声息地没有执行? 按设计采用宽容处理的路径(损坏的 JSONL 行、无法读取的文件、缓存问题)不会导致运行崩溃——添加 --debug(或 CLAUDE_HANDOFF_DEBUG=1)即可查看具体跳过了什么以及原因。钩子始终会将错误报告到 stderr,同时以状态码 0 退出。

Windows 上出现乱码 设置 PYTHONUTF8=1(CI 运行整个测试套件时也使用此设置)。

完整标志参考

标志含义
--list列出会话(日期、大小、项目、标题 · 首条提示词);如果提供 conversations.json,则列出其中的聊天
--name QUERY选择标题或首条提示词中包含 QUERY 的最新会话(或网页对话)
--grep TEXT选择对话中包含 TEXT 的最新会话(重复此标志可要求包含所有词项);与 --list/-i 搭配时,显示每个匹配项及 🔍 预览
--project NAME选择项目路径中包含 NAME 的最新会话(可重复使用,合并多个项目)
-i / --interactive从编号列表中选择会话 — 1,3 或 2-4 可将多个会话合并为一个交接记录
--any忽略当前目录;考虑所有项目的会话
--last N / --since 2h仅保留对话的末尾部分(N 轮用户发言 / 一个时间范围)
--merge将范围内的所有会话合并为一个交接记录(含会话分隔标记、汇总活动)
--brief将项目的完整历史提炼到 ~/.claude/briefs/<project>.md(确定性生成;使用 --llm 进行实际提炼)
--exclude ID与 --brief 搭配时:将会话排除在记忆之外 — 使用 ID 前缀(来自 --list 或简报的引用),多个 ID 用逗号分隔或重复此标志;单独使用 --exclude 会打开编号选择器,并预选已保存的集合(✗)— 输入编号可切换,留空则保留,输入 none 则清除;刷新后仍生效,使用 --exclude none 可清除
--keep SPEC与 --brief 搭配时:限定用于生成记忆的会话范围 — 20 / last:20(最近会话)、first:2(最早的会话)、since:7d(按最近活动时间;也可使用 ISO 日期),或 first:2,since:30d 这样的组合;会持续生效,因此刷新时会保留一个滑动窗口;使用 --keep all 可清除
--install-brief-hook / --uninstall-brief-hook项目记忆钩子:在 SessionStart 时注入简报,在 SessionEnd 时自动刷新事实
--install-hook / --uninstall-hook每次会话结束时,自动将交接记录写入 ~/.claude/handoffs/
--install-skill / --uninstall-skill安装 /claude-handoff Claude Code 技能(~/.claude/skills/ 下的 SKILL.md + ~/.claude/CLAUDE.md 中的触发器部分),以便 Claude 正确使用 chf — 可重复执行,尊重手写部分,卸载时保留 CLAUDE.md 的其他内容
--format md|jsonMarkdown(默认)或机器可读的 JSON — 也适用于 --list
-o FILE / -o - / -o clipboard / -o graphify输出到文件 / 标准输出 / 剪贴板 / graphify 语料库(raw/,用于知识图谱);默认值为 handoff.md
--fit TOKENS通过收紧转录截断范围,将确定性生成的交接记录调整为符合令牌预算(32k、128k、1m)
--full使用逐字记录的对话轮次(经典转录),而非默认的精简摘要
--max-chars N限制转录部分的字符数(默认 80 000;保留开头和最近的结尾)
--include-tools使用折叠的 <details> 块展示每次工具调用
--include-sidechains附加完整的子 Agent 转录(内联支线对话和 <session-id>/subagents/agent-*.jsonl);其文件/命令活动始终计入统计
--llm claude|openai|gemini|claude-cli|ollama使用大模型摘要,而非未经处理的清理后转录
--model ID覆盖大模型
--focus TEXT为摘要添加额外指示(例如 --focus "emphasize the API decisions")
--with-transcript与 --llm 搭配时,也附加清理后的转录
--anonymize去除身份信息以便公开分享:将主目录路径替换为 ~,将电子邮件地址/IP 地址/用户名替换为占位符
--no-redact保留看起来像机密的字符串(默认情况下,所有输出都会进行脱敏,无论是否使用大模型)
--no-cache禁用分块笔记缓存(~/.cache/claude-handoff)
--mcp通过标准输入/输出以 MCP 服务模式运行
--allow-llm与 --mcp 搭配时:允许 handoff 工具运行大模型摘要(需明确启用)
--completions bash|zsh打印制表符补全代码片段
--debug将已容忍的故障(损坏的行、无法读取的文件)报告到 stderr — 不会导致进程失败

路线图

  • 将 Gemini 导出内容作为输入(Google Takeout 只提供 HTML — 请提供真实且已脱敏的导出内容,以便用于开发)
  • 会话链:自动检测通过 /compact 续接的会话,并提供合并会话沿袭的选项(--follow)

欢迎提交 PR。

对比

这个领域并非空白 — 只是比较分散。选择适合你情况的工具:

  • 导出工具 — claude-conversation-extractor、claude-code-log、claude-code-transcripts、claude-to-markdown — 将对话记录转换为易读的 Markdown/HTML,包含工具调用噪声,不提供交接框架。
  • 跨 CLI 会话迁移工具 — cli-continues(npm i -g continues)读取 16 种编码 CLI 的原生会话存储(包括 Claude Code),并将上下文文档注入另一个终端工具。它非常适合 Claude Code → Codex/Cursor/Gemini CLI;但无法面向网页聊天,不会使用大模型进行摘要,并且需要 Node 22.5+。
  • 会话内交接技能/插件 — thepushkarp/handoff、claude-session-handoff、claude-code-handoff — 前提是你记得在会话结束前运行它们;模型会利用当前会话的上下文撰写摘要,输出则面向下一个 Claude 会话。
  • 浏览器扩展 — Handoff、LLM Context Bridge、ContextSwitch — 在 ChatGPT/Claude/Gemini 之间迁移网页聊天;它们无法读取 Claude Code 会话。

claude-handoff 位于这个版图中事后处理、可粘贴到任何地方的角落:它会事后处理 JSONL — 旧会话、崩溃的会话、达到用量上限的会话都可以;无需提前安装任何东西,默认不消耗任何令牌,也可以在你提出要求时生成真正的摘要(--llm),并产出任何接收模型都能接续使用的文档,包括浏览器或手机上的 claude.ai、ChatGPT 和 Gemini。使用 --brief 时,它还是唯一能将历史记录转化为长期项目记忆的工具。

开发

git clone https://github.com/Vasilispapg/claude-handoff && cd claude-handoff
python3 -m unittest discover -s tests -v      # the whole suite (no deps needed)
python3 -m claude_handoff tests/fixtures/agent_session.jsonl -o -   # smoke run
python3 scripts/build_single.py --check       # single-file build is fresh
uvx ruff check claude_handoff scripts tests   # lint (config in pyproject)

运行时代码位于 claude_handoff/ 包中;single/claude_handoff.py 是生成文件 — 修改任何包内容后,都要运行 python3 scripts/build_single.py 重新生成 (如果文件未更新,CI 将失败)。新增解析器行为时,应先在 tests/fixtures/ 中添加脱敏测试样例 — 参见 CONTRIBUTING.md 和 AGENTS.md(面向人类和 AI 贡献者的说明 与不变量)。

了解更多

docs/GUIDE.md — claude-handoff 的一天:操作演示、--brief 的逐步工作原理、真实的成本表、速查表 · INDEX.md — 文件索引 · docs/DEVELOPMENT.md — 架构、JSONL 架构说明、设计决策 · AGENTS.md — 面向 AI 编码 Agent 的贡献者指南 · CONTRIBUTING.md · CHANGELOG.md

许可证

MIT


mcp-name: io.github.Vasilispapg/claude-handoff

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。