ce-pickup
使用本地模型从过去的 Hermes 会话中提取 ce-handoff/v1 文档。零前沿代币成本。输出为标准 ce-handoff/v1 Markdown,因此 /ce-handoff resume <path> 可立即使用。
在冷会话上运行会消耗订阅配额才能赶上的情况下,使用此技能代替运行 /ce-handoff。
何时使用
- 用户想要恢复未完成的会话,而不花前沿代币重新阅读它
- 需要从一个或多个过去的会话中获取手稿,但上下文窗口已满载
- 用户要求对旧会话进行“拾取”或“追赶”
- 在大型冷会话上运行
/ce-handoff成本过高
快速开始
bash ~/.hermes/scripts/ce-pickup.sh SESSION_ID[,SESSION_ID,...]
默认输出到 /tmp/compound-engineering-$(id -u)/ce-pickup/。
然后从任何输出文件恢复:
/ce-handoff resume /tmp/compound-engineering-<uid>/ce-pickup/<slug>.md
参数
- 参数 1(必需):逗号分隔的会话 ID(来自
session_search或 Hermes 浏览) - 参数 2(可选):Ollama 模型名称 — 默认为
hf.co/ornith-ai/Ornith-1.5-35B-A3B-GGUF:Q5_K_M - 参数 3(可选):输出目录覆盖
环境变量覆盖(用于测试和备用主机):CE_PICKUP_DB(默认 ~/.hermes/state.db)、CE_PICKUP_OLLAMA_URL(默认 http://localhost:11434/api/chat)、CE_PICKUP_MAX_CHARS(默认 24000)。
模型路由
默认:Ornith-1.5-35B-A3B-GGUF:Q5_K_M — 已验证良好的提取质量,本地运行。
如果 Ornith 未加载,任何可用的本地 Ollama 模型都可以工作。不要使用前沿模型(那将违背目的)。
检查可用模型:ollama list
工作原理
- 通过
sqlite3读取~/.hermes/state.db— 无 Python,无 TCC 提示 - 按时间戳顺序提取
user+assistant消息 - 将对话记录截断为 24000 个字符(约 6000 个 token)— 足够进行有意义的提取
- 通过
curl调用 Ollama/api/chat,使用结构化提取提示 - 将
ce-handoff/v1前置元数据和模型主体写入输出目录 - 文件名为会话标题的小写形式;冲突时添加数字后缀
输出格式
每个输出文件都是有效的 ce-handoff/v1,包含:
- 前置元数据
artifact_contract: "ce-handoff/v1" session_id、cwd、branch、repository(如果可用)- 提取内容涵盖:目标、已完成工作、当前状态、决策/约束、阻塞项、失败方法、参考资料、后续步骤
上下文警戒守护进程(配套)
scripts/context-ceiling-watchdog.sh 是一个确定性的无代理监视器,用于实时会话上下文。它估算每个实时会话的当前上下文(active=1 消息内容 ÷ 4 字符/token — 切勿使用 sessions.input_tokens,这是包括上下文重读的累计计费量)并强制执行:
>= 50k提醒 — 单行提示,每小时重复一次>= 70k警报 — 检查点警告,每 30 分钟重复一次>= 80k提取 — 本地运行 ce-pickup 并报告 ce-handoff/v1 路径;提取后,仅当会话再上升约 10k 时才会重新警报(临界)
除非触发阈值,否则它保持静默(空标准输出),因此可以直接插入带有变更检测的无代理 cron 作业。状态保存在 ~/.cache/context-ceiling-watchdog/ 中(纯 TSV — 无 LLM 内存,无递归连续性)。它从不写入 Hermes 配置或运行时状态;state.db 以 sqlite3 -readonly 模式打开。
无需真实模型即可测试:运行 bash scripts/mock-ollama.sh 21143 &,然后运行 bash scripts/test-watchdog.sh(固定数据库 + 缩放阈值,20 次检查)。
陷阱
来自 Python 的 TCC 对话框(macOS Sequoia+):作为具有广泛授权的应用程序的子进程运行 Python 可能会触发 iCloud Drive 或 Documents 的 TCC 提示 — 即使只读取 ~/.hermes/state.db。此 Shell 脚本仅使用 sqlite3 + curl + jq + awk,不会触发 TCC。除非用户明确接受 TCC 提示,否则切勿使用此工作流的基于 Python 的实现。
对话记录截断:24000 个字符覆盖大多数会话。非常长的会话(200 多条消息,包含大型工具输出)会被尾部截断。如果手稿感觉不够充实,可拆分为更窄范围的查询。
思考模型 + num_predict:Ollama 的 num_predict 限制生成的总 token 数(包括 message.thinking)。思考模型(Ornith 就是其中之一)可能会在思考通道中消耗整个预算,并返回空或尾部截断的 message.content — 脚本只读取该字段。症状:"来自 Ollama 的空响应" 或手稿在句子中间停止,看起来像模型质量问题,但实际上是有效负载错误。脚本发送 think:false(带有一个无标志重试回退,适用于拒绝该标志的模型)。来自 Wesley 的范围说明:该标志仅对此机械提取任务正确 — Ornith 的思考在 agentic 工程使用中是一种资产,而一次提取运行并不能说明 agentic 能力。不要将糟糕的提取泛化为对模型的评价。
Ollama 必须正在运行:在调用前使用 ollama list 检查。
输出位于 /tmp:操作系统可能在重启时回收。如果要在重启后恢复,请复制到稳定路径。
脚本
规范实现位于此技能的 scripts/ce-pickup.sh — 通过其技能路径调用。主机端副本历史上位于 ~/.hermes/scripts/ce-pickup.sh(记录为符号链接);在存在该副本但不是符号链接的机器上,它已过时 — 请信任技能目录。
另请参阅:ce-handoff 技能,了解手稿文档创建后的恢复工作流程。