关于 setup-auto-handoff
setup-auto-handoff 是面向 Claude Code 的技能,要求先有近期交接文件才允许压缩上下文。它通过 PreCompact 钩子执行,并说明 OpenCode 和 Codex 基于会话记录的替代方式。
主要功能
- 01缺少近期交接文件时阻止压缩
- 02调用 hand-off 技能
- 03提供配置与验证步骤
- 04说明 OpenCode 和 Codex 的替代方式
适用场景
- 01在 Claude Code 压缩前保留上下文
- 02配置并测试 PreCompact 钩子
- 03在 OpenCode 或 Codex 中处理交接
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dyrits/ skills --skill setup-auto-handoff安装后在 Claude Code 中输入/setup-auto-handoff确认已加载。
附带文件agents/openai.yamlscripts/precompact-handoff-gate.sh
详细介绍
设置自动交接
限制上下文压缩:当 Claude Code 即将压缩上下文(自动或手动)时,PreCompact 钩子会阻止操作,除非最近 5 分钟内已将交接记录写入 .agents/handoffs/。阻止原因会提示 Agent 先运行 hand-off 技能;交接记录写入后,下一次压缩尝试即可通过。
调用:hand-off。如果未安装所调用的技能,请告知用户其名称和安装命令 npx skills@latest add Dyrits/SKILLS --skill=<name>,然后根据该技能声明的意图执行相应步骤,并在没有该技能的情况下报告步骤已完成。
各环境中的支持情况
- Claude Code:完全支持(
PreCompact钩子)。这是本设置的主要工作方式。 - OpenCode / Codex:没有压缩前钩子。备用方式是使用它们持久化的对话记录(
codex resume、OpenCode 会话存储),并由用户养成在阶段交界处运行hand-off的习惯。请如实告知用户;不要假装此功能已覆盖。
步骤
1. 复制钩子脚本
附带的脚本位于 scripts/precompact-handoff-gate.sh
将其复制到 .claude/hooks/precompact-handoff-gate.sh,并赋予可执行权限(chmod +x)。
阻止消息会调用 hand-off,因此该技能必须出现在技能列表中,才能让检查顺利通过。如果未安装,请建议先安装;消息中的备用方案(直接写入交接文件)仍可让压缩继续进行。
2. 注册钩子
在 .claude/settings.json(项目级作用域;钩子无法设置更窄的作用域)中,将以下内容合并到现有的 hooks 对象中:
{
"hooks": {
"PreCompact": [
{
"hooks": [
{
"type": "command",
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/precompact-handoff-gate.sh"
}
]
}
]
}
}
不要覆盖其他钩子;请合并数组。
3. 验证
-
.claude/hooks/precompact-handoff-gate.sh文件存在且可执行 -
.claude/settings.json可解析(jq . .claude/settings.json),并包含PreCompact条目 - 模拟没有新交接记录时的自动压缩:
echo '{"trigger":"auto"}' | .claude/hooks/precompact-handoff-gate.sh; echo "exit: $?"
预期标准输出中会有 decision: block 的 JSON,退出代码为 0。
- 模拟存在新交接记录时的情况:
mkdir -p .agents/handoffs && touch .agents/handoffs/test.md
echo '{"trigger":"auto"}' | .claude/hooks/precompact-handoff-gate.sh; echo "exit: $?"
rm .agents/handoffs/test.md
预期输出为空,退出代码为 0。
4. 向用户说明工作流程
达到上下文限制时:自动压缩触发,钩子根据提示阻止操作,Agent 运行 hand-off(在 .agents/handoffs/ 中生成一个新文件),随后重试压缩并通过。如果确实不希望压缩,用户可以从 .claude/settings.json 中移除该钩子。手动执行 /compact 也会受到同样的限制;/clear 不受影响(这是另一种事件)。
注意事项
- 5 分钟的新鲜度窗口可防止一小时前的旧交接记录通过检查。可编辑脚本中的
FRESH_WINDOW_MINUTES进行调整。 - 如果
.agents/handoffs/不存在,检查会创建该目录,因此第一次被阻止的压缩也会是第一次交接。 - 钩子需要 PATH 中有
jq;如果未安装,请检查并告知用户。