资讯动态

claude-code-tips 实战:用 half-clone Skill 克隆对话后半段,为超长 Claude Code 会话瘦身续命

发布时间:2026/10/9 2:04:50 来源:尧图企业网站定制
AI 技能教程开发工具【免费下载链接】claude-code-tips45 tips for getting the most out of Claude Code, from basics to advanced - includes a custom status line script and Claude Code running itself in a container. Also includes the dx plugin: skills for everyday dev workflows.项目地址https://gitcode.com/gh_mirrors/cl/claude-code-tips点击查看免费下载本篇指南以本仓库中的half-cloneSkill 为骨架讲透只保留当前 Claude Code 会话的后半段、丢弃早前上下文这一省 token 技巧从 Skill 定义的标准操作流程到 half-clone-conversation.sh 的源码级实现细节再到 check-context.sh 自动触发与 test-half-clone.sh 的完整测试验证。读完你将掌握如何用一个命令把一条 20 万 token 的长会话裁剪成只含最近一半/四分之一内容的新会话并立即claude --resume无缝续工。为什么要 half-clone长会话的 token 治理Claude Code 的上下文窗口有限以当前主流 200k 配置为例会话越长历史上下文占用越多模型性能与响应速度都会随之下滑。官方/compact会压缩会话但压缩本质是改写摘要会丢失原始措辞与细节而本仓库提供的 half-clone 思路是确定性的裁剪——把早前的对话记录直接截断丢弃只保留最近的内容原样搬运保留完整可用的上下文语义。这一点在仓库的 README.md Tip 21 中有明确总结half-clone reduces token usage while preserving your recent work且相比自动压缩它是确定性的、快速的保留的是真实消息而不是摘要。作为补充同目录的 quarter-clone Skill 提供了只保留最后四分之一的更激进变体。half-clone Skill 是什么skills/half-clone/SKILL.md 是一个 Claude Code Skill其 front matter 声明为name: half-clonedescription: Clone the later half of the current conversation, discarding earlier context to reduce token usage while preserving recent work.它的定位是让 Claude 在会话过长时主动发起克隆复制当前会话的后半段到一个全新 session丢弃早前上下文以降低 token 消耗同时保住最近的工作成果。该 Skill 本身只是一份操作说明书真正干活的是仓库中的 bash 脚本。标准操作流程Skill 定义的 5 步按照 SKILL.md 的原始步骤一个完整的 half-clone 操作如下第 1 步获取当前会话 ID 与项目路径tail -1 ~/.claude/history.jsonl | jq -r [.sessionId, .project] | tsvhistory.jsonl是 Claude Code 本地的会话历史记录文件最后一行即当前会话条目jq提取出sessionId与project两个字段制表符分隔。第 2 步定位 half-clone-conversation.sh 脚本find ~/.claude -name half-clone-conversation.sh 2/dev/null | sort -V | tail -1无论脚本是通过 dx 插件安装还是手动 symlink 到~/.claude/scripts/都能被找到sort -V版本排序保证多版本并存时优先选中最新版。第 3 步预览会话校验 session IDscript-path --preview session-id project-path预览模式会输出会话文件路径、总行数、首条与末条用户消息用于确认拿到的 session ID 确实对应当前会话。第 4 步执行克隆script-path session-id project-path注意 SKILL 特别强调project-path必须来自 history 条目即第 1 步的输出而不是当前工作目录。第 5 步恢复克隆会话脚本会打印New session: id行。把新 session ID 直接交给用户执行无需再打开选择器claude --resume new-session-id脚本会自动在克隆文件末尾追加一条指向原始会话的引用消息同时新会话第一条真实用户消息会被打上[HALF-CLONE timestamp]标记形如[HALF-CLONE Jan 7 14:30]因此claude -r后手动选择标记的会话同样可行。脚本源码剖析一个纯 bash 实现的 JSONL 手术核心实现位于 scripts/half-clone-conversation.sh约 600 行零 Python/Node 依赖兼容 macOSbash 3.2与 Linux。脚本默认以set -euo pipefail严格模式运行全程通过awk单遍扫描处理会话文件。命令行参数half-clone-conversation.sh [--quarter] session-id [project-path]参数说明默认值/示例--quarter只保留最后四分之一而不是一半标签变为[QUARTER-CLONE ...]half-clone-conversation.sh --quarter d96c899d-...--preview仅预览不克隆输出首/末用户消息便于核对script --preview session-id projectsession-id待克隆会话 UUID必填会被正则校验格式d96c899d-7501-4e81-a31b-e0095bb3b501project-path项目路径默认当前目录对应~/.claude/projects/下的目录名路径中的/会被替换为-并加前缀-/home/user/myproject→-home-user-myproject参数解析见脚本 main 段--preview、--quarter依次处理后剩余的第一个位置参数必须是 session ID并校验 UUID 格式见 L600-L603不合规则报错退出。会话文件的定位与干净用户消息过滤脚本先按project-path派生的目录名定位~/.claude/projects/dirname/session-id.jsonl找不到时再全目录按文件名搜索find_conversation_file。关键的一步是 filter_clean_user_msgs 这个 awk 过滤器它只统计顶层type:user或type:queue-operation的消息并排除三类噪声——tool_result工具返回依赖被裁剪的前置tool_use、isMeta:true元消息、以及 Request interrupted by user被打断的消息。之所以要看顶层 type是因为 progress/subagent 数据里常嵌套type:user若误计会把裁剪点算错。这一点被测试 test_progress_with_nested_user_type 专门覆盖脚本输出Total clean user messages in conversation: 3而不是 5。裁剪点的计算统计出干净的 user 消息总数 N 后L223-L237skip_clean_count$((total_clean_user_messages * (KEEP_DENOM - 1) / KEEP_DENOM))half 模式KEEP_DENOM2跳过前 N/2 条保留后一半quarter 模式KEEP_DENOM4跳过前 3N/4 条保留后四分之一。若 N 2脚本直接报错退出fewer than 2 clean user messages, nothing to half-clone对应测试 test_single_message_error。随后用filter_clean_user_msgs -n拿到每条第skip_clean_count 1个干净 user 消息所在的行号从而确定从原始文件的哪一行开始保留L239-L249。逐字段重映射让克隆文件自洽裁剪后直接把 JSONL 行复制过去是不够的因为每条消息的uuid、parentUuid、messageId、sessionId互相引用。awk 单遍处理做了四件事L425-L491sessionId 替换所有行中的sessionId统一换成新生成的 UUIDuuid / messageId 重映射维护uuid_map旧 UUID 一一映射为新预生成 UUID保证克隆文件内部引用闭合预生成的 UUID 由 pre_generate_uuids 批量产出优先hexdump从/dev/urandom快速生成首消息接驳文件开头先写入一条合成 user 消息作为 marker内容形如[HALF-CLONE ts] Continued from session 原id并把保留部分第一条非tool_result消息的parentUuid指向 markerL302-L309。这样claude -r才能在前 16KB 内找到firstPrompt而正常列出会话首条真实用户消息打标签在内容前插入[HALF-CLONE timestamp]前缀。三个避免恢复即炸的防御性处理源码里埋了三处专门针对真实场景的坑值得重点理解剥离 thinking 块strip_thinking 删除消息内容中的{type:thinking...}/redacted_thinking块含字符串转义的括号匹配。注释明确说明原因这类瞬时块在恢复时会导致 API Error 400thinking or redacted_thinking blocks in the latest assistant message cannot be modified。测试 test_thinking_blocks_stripped 验证克隆后 thinking 块为 0 且 text 块保留。丢弃 session-config 尾行新版 Claude Code 会在每个会话末尾追加last-prompt、ai-title、mode、permission-mode类型的行L418-L423。其中last-prompt携带leafUuid指向会话指针脚本只重映射uuid/parentUuid/messageId而不动leafUuid照抄会导致悬空指针、恢复后会话显示为空。测试 test_session_config_lines_stripped 同时验证了末尾引用消息的parentUuid指向克隆文件中真实存在的 uuid。缩放 token 计数divide_number 将每条保留消息中的input_tokens、cache_read_input_tokens、cache_creation_input_tokens按分母整除half 除 2、quarter 除 4见 L481-L484。测试 test_quarter_token_division 与 test_half_token_division 验证 400→200half与 400→100quarter的换算。收尾引用消息、history 更新与展示文本克隆完成后L494-L568在文件末尾追加一条isMeta:true的 assistant 消息父节点指向克隆文件最后一个真实消息 uuid文本说明此会话仅含原会话的后半部分原始会话为source_session——这就是 SKILL.md 所说的自动追加原始会话引用touch克隆文件使其在claude -r列表中排到顶部向~/.claude/history.jsonl追加一条历史记录display文本取保留部分第一条带内容字段的干净 user 消息最多 200 字符并加上[HALF-CLONE timestamp]前缀L520-L552。测试 test_history_entry 验证 history 增加且带标签。测试验证17 个用例如何保障正确性scripts/test-half-clone.sh 是一个自包含测试套件它用mktemp创建隔离的假~/.claude目录用generate_message生成 mock JSONL 会话再以HOME$TEST_DIR覆盖的方式运行被测脚本不触碰真实数据。覆盖点包括裁剪数量偶数/奇数消息、最小 4 条、少于 2 条报错test_even_messages、test_odd_messages、test_minimum_messages、test_single_message_error结构正确性首消息parentUuid:null、[HALF-CLONE]标签存在、sessionId 全部重映射test_parent_uuid_nullified、test_half_clone_tag、test_session_id_remapped重复克隆对已带标签的会话再 half-clone新标签叠加而不覆盖两个标签共存test_double_tagging防御性处理thinking 块剥离、嵌套 type 不计入、session-config 尾行丢弃见上文quarter 模式保留数量、[QUARTER-CLONE]标签、token 除以 4、最小会话仍可用test_quarter_eight_messages、test_quarter_tag、test_quarter_token_division、test_quarter_minimum_messages。运行方式bash scripts/test-half-clone.sh全部通过时输出All tests passed!。三种安装方式手动 symlink按 README.md Tip 21 的说明把脚本与两个 skill 软链到~/.claude对应目录ln -s /path/to/this/repo/scripts/half-clone-conversation.sh ~/.claude/scripts/half-clone-conversation.sh ln -s /path/to/this/repo/skills/half-clone ~/.claude/skills/half-clone ln -s /path/to/this/repo/skills/quarter-clone ~/.claude/skills/quarter-clonedx 插件本仓库同时是名为dx的 Claude Code 插件安装后即可用/dx:half-clone、/dx:quarter-clone无需手动 symlinkclaude plugin marketplace add ykdojo/claude-code-tips claude plugin install dxykdojo快速安装脚本scripts/setup.sh 会询问跳过项其中第 5 项会向~/.claude/settings.json追加Read(~/.claude)权限jq .permissions.allow (.permissions.allow // []) [Read(~/.claude)]专门服务于 half-clone 读取会话历史。推荐配置权限与自动触发权限half-clone 脚本需要读取~/.claude会话文件与 history。为避免在任意项目中反复触发权限弹窗在~/.claude/settings.json的全局设置中加入{ permissions: { allow: [Read(~/.claude)] } }自动触发scripts/check-context.sh 是一个 Stop hook每次 Claude 响应结束后读取 transcript按input_tokens cache_read_input_tokens cache_creation_input_tokens计算上下文占用超过 85%阈值max_context200000时返回{decision:block,...}阻止 Claude 停止并指示它运行/half-clone让新 agent 在只含后半段的新会话中继续。安装方式cp /path/to/this/repo/scripts/check-context.sh ~/.claude/scripts/check-context.sh chmod x ~/.claude/scripts/check-context.sh并在~/.claude/settings.json注册 hook{ hooks: { Stop: [ { hooks: [ { type: command, command: ~/.claude/scripts/check-context.sh } ] } ] } }使用前提README.md 中的说明需在/config中关闭 Auto-compact否则 Claude Code 可能在 hook 触发前就先压缩上下文hook 用stop_hook_active标志防止自身无限循环。相比自动压缩half-clone 的确定性、无损性是核心优势。与 fork、quarter-clone 的分工如果只是想从某一点尝试不同路线而不丢掉原线程应使用 Claude Code 原生 fork/branch、claude -c --fork-session而 half-clone/quarter-clone 解决的是长度问题——会话太长、上下文告急时裁剪掉早前内容换取可用空间。当连一半都嫌多时用--quarter或/dx:quarter-clone保留最后四分之一。三者组合fork 换思路 half-clone 保空间可以应对绝大多数长会话场景。小结half-clone 的本质是一台确定性 JSONL 手术台按干净用户消息数计算裁剪点用 UUID 重映射保持内部引用闭合用 marker 消息接驳让claude -r可识别再剥离 thinking 块、丢弃 session-config 尾行、缩放 token 计数以规避恢复时的已知错误。配合 Skill 的 5 步标准流程、check-context hook 的自动触发以及 17 个隔离测试用例的保障它成为长会话 token 治理中一个可靠、可复现、无损于近期工作的实用方案。后续深入阅读可继续查看 half-clone-conversation.sh、test-half-clone.sh、quarter-clone Skill、check-context.sh 与 README.md 的 Tip 21 部分。赞分享AI 技能教程开发工具【免费下载链接】claude-code-tips45 tips for getting the most out of Claude Code, from basics to advanced - includes a custom status line script and Claude Code running itself in a container. Also includes the dx plugin: skills for everyday dev workflows.项目地址https://gitcode.com/gh_mirrors/cl/claude-code-tips点击查看免费下载相关推荐ag-kit 的 React Native 移动应用脚手架指南Expo TypeScript NativeWind 现代化开发方案ag kit 的 React Native 移动应用脚手架指南Expo TypeScript NativeWind 现代化开发方案 本指南完整解读 aAI 技能教程开发工具用 /color 命令区分 Claude Code 多会话TIL 仓库中的会话着色实战用 /color 命令区分 Claude Code 多会话TIL 仓库中的会话着色实战 Claude Code 终端会话通常长时间驻留开发者常在同一时间打开文档教程知识库Claude Code 新手进阶实战从安装、CLAUDE.md 到多会话并行的 11 条核心技巧claude-code-tips 仓库实战指南Claude Code 新手进阶实战从安装、CLAUDE.md 到多会话并行的 11 条核心技巧claude code tips 仓库实战指南 本文基于AI 技能教程开发工具上一篇frp 安全加固指南Token 认证、OIDC 与 TLS 加密防止穿透服务被滥用下一篇ControlNet-v1-1 FP16 Safetensors 深度优化指南5个高效方案解决效果不佳问题创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑