Worktrunk:并行工作树、生命周期控制与源码分析
安全使用 Worktrunk:项目钩子、敏感差异与后台删除
在自动合并或清理前,检查命令实际权限、可选模型的数据流和恢复边界,不把批准记录或临时垃圾目录当安全保证。
你将学会
- 批准不是沙箱,也不是代码内容签名
- 可选提交生成可能把源代码信息发出机器
- 后台删除中的垃圾目录不是长期回收站
开始前需要
- 基础 Git 分支和命令行导航知识
- 可用于选做练习的一次性仓库
解释工作树边界,核对首次检出结果,并在采用自动化前审阅配置命令。
先看结论
- 已批准的模板仍可能调用后来改变的代码。
- 托管提交信息生成器可能接收敏感代码差异。
- 后台垃圾目录是临时机制,不是备份策略。
批准不是沙箱,也不是代码内容签名
项目钩子是以调用账号权限运行的终端命令。批准机制建立的是同意边界,不是操作系统隔离边界。看起来熟悉的测试命令,也可能调用后续检出中被修改的脚本。因此信任上下文改变时,既要检查项目配置,也要检查命令真正引用的脚本,不能只看模板字符串有没有变化。
用户钩子的批准路径不同,手工模式批准还可能覆盖多个仓库。判断新工作树是否会执行命令前,应同时检查这些来源,不要把 --yes 当作陌生项目的默认参数。工作树分离不会自动隔离凭据、网络访问和文件系统,其边界仍受账号及运行环境权限控制。
可选提交生成可能把源代码信息发出机器
文档中的提交信息功能会构造提示,并经标准输入交给外部命令。如果外部命令调用托管模型,代码差异就可能离开本机。处理保密代码前,需要检查具体提示、选入内容和提供方安排;命令在本地启动,不代表推理过程只发生在本地。
试用钩子不要使用生产凭据,数据环境也应可随时放弃。启动失败时,检查对应钩子日志及它属于阻塞还是后台任务。主命令结束不能证明所有后台进程成功或停止;由钩子启动的服务器和外部资源应有明确负责人,避免任务目录移除后资源仍在运行。
后台删除中的垃圾目录不是长期回收站
固定版本 remove 文档描述了把工作树移入 .git/wt/trash,再由分离进程删除的后台路径;跨文件系统还有另一条处理路线。中间出现垃圾目录,并不构成承诺的恢复窗口。移除前先保存重要工作,不要把恢复方案建立在与清理进程抢时间复制文件上。
两个强制参数针对不同对象:--force 涉及带未提交修改的工作树,-D 涉及未合并分支,都不适合放进没有解释的上手命令。先检查精确分支、路径、工作树状态和保留策略。后台失败可结合文档日志排查,最后应核对 Git 与文件系统状态,而不是把命令返回当作删除已经完成。
如何选择
| 比较维度 | 方案 A | 方案 B |
|---|---|---|
| Best when | You need predictable behavior and easy auditing | You need adaptive optimization and have reliable telemetry |
| Main risk | May leave performance on the table | Can become difficult to explain or debug |
实施步骤
- 1
检查钩子模板及其引用脚本。
- 2
追踪接收源代码内容的外部命令。
- 3
清理前记录分支、路径和工作保存情况。
- 4
异步操作后核对日志与最终状态。
可复制示例
{
"beforeRemoval": {
"exactBranch": null,
"exactPath": null,
"workingTreeReviewed": false,
"importantWorkPreserved": false,
"branchRetentionDecided": false
},
"removalExecuted": false
}常见问题
得到批准就代表钩子安全吗?
不是。批准记录针对模板的同意决定,不是对命令能够触及的一切进行完整安全审计。
以后还能从 trash 找回文件吗?
不要依赖这一点;文档中的后台清理会删除这个中间目录。
资料来源
- Worktrunk / docs/src/content/docs/hook.md来源核查 2026-09-14
- Worktrunk / docs/src/content/docs/llm-commits.md来源核查 2026-09-14
- Worktrunk / docs/src/content/docs/remove.md来源核查 2026-09-14
- Worktrunk / src/config/approvals.rs来源核查 2026-09-14