关于 scripts
Durable Scripts 是通过脚本启动器管理一次性或定期 shell 命令的 skill,面向使用 Agent 处理持久化任务的场景。它规定运行、结果处理和生命周期控制,并要求用脚本 ID 操作定义。
主要功能
- 01启动一次性或定期命令
- 02查看定义、运行记录与日志
- 03按脚本 ID 重跑、取消或移除
- 04通过静默退出码维持计划
- 05处理发布结果后的计划状态
适用场景
- 01运行一次命令并在后续处理结果
- 02定期执行检查并在结果发布后恢复或移除
- 03管理因外部依赖失败而停止的计划
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ alekzonder/ tariboy-store --skill scripts安装后在 Claude Code 中输入/scripts确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
evals/evals.jsonresults.mdscripts/scripts.pyscripts.sh详细介绍
持久化脚本
此技能的 scripts/scripts.sh 启动器位于此技能目录中,
并通过 TARIBOY_TOOLS_SOCKET 调用绑定身份的守护进程。
如果可以执行命令,请执行此启动器。如果无法执行,
则返回确切的命令;除非命令执行成功,否则绝不要声称脚本已排队、已安排、
已重新运行、已取消或已移除。
使用 scripts/scripts.sh run <name> -- <command> 运行一次。只排队一次,
完成本轮迭代,并在之后接收 script.result 消息,而不是在当前迭代中等待。
使用 scripts/scripts.sh schedule <name> --every <seconds> -- <command> 重复运行。
运行之间不会重叠。以 $TARIBOY_QUIET_EXIT(111)退出的运行不会发布任何内容,并会保留计划;这是唯一如此的结果。
守护进程会将此代码导出给每次运行,因此 shell 命令可通过
exit "${TARIBOY_QUIET_EXIT:-111}" 保持静默,Python 命令则可通过
sys.exit(int(os.environ.get("TARIBOY_QUIET_EXIT", "111"))) 保持静默。
使用 scripts/scripts.sh ls、scripts/scripts.sh runs 和
scripts/scripts.sh logs 检查;使用 scripts/scripts.sh rerun、
scripts/scripts.sh cancel 或 scripts/scripts.sh rm 控制生命周期。
每次都通过脚本 ID 定位定义
必需: rerun、cancel 和 rm 只接受 scr-... 脚本 ID
或 srun-... 运行 ID。名称并不唯一,也不会被解析:传入名称会失败并返回 not found,而 run <name> -- <command> 会创建第二个
定义,而不是恢复已停止的定义。
从唤醒你的 script.result 消息中的 script_id 字段、创建输出或
scripts/scripts.sh ls 获取 ID。记录持久化监控时,记录脚本 ID,而不只是名称。
已发布的结果会停止计划
只有当每次运行都保持静默时,重复定义才会保留计划。
一旦运行发布 script.result 消息,守护进程就会将定义设为 completed,并清除其下一次运行时间:Agent 只会收到一次通知,而不是反复收到,且在恢复之前不会再运行。
这涵盖所有已发布的结果:
| 事件 | 对重复定义的影响 |
|---|---|
运行以 $TARIBOY_QUIET_EXIT(111)退出 | 不发送消息;计划继续运行 |
| 运行以任何其他代码退出,无论成功或失败 | 发布结果;定义停止 |
命令未以 $TARIBOY_QUIET_EXIT 退出 | 每次运行都会发布结果,因此计划在首次运行后停止 |
对一个活动运行执行 cancel <run-id> | 该运行仍会发布结果,因此定义也会停止 |
| 运行因守护进程重启而中断 | 恢复过程会发布中断结果,因此定义会停止 |
cancel <script-id> | 定义已取消;永远不会再次运行 |
处理重复定义的 script.result
必需: 处理结果,然后在迭代结束前通过以下两种决定之一将其关闭,且只能选择一种。 如果两者都不做,观察会悄然结束。
-
仍然需要 — 恢复同一定义:
scripts/scripts.sh rerun <script-id>rerun会立即运行它,并将定义恢复为active,之后仍会继续按固定 间隔运行。对于已停止定义所描述的工作,绝不要创建替代计划。 -
不再需要 — 移除它:
scripts/scripts.sh rm <script-id>已发布的结果已使其停止,因此不需要执行
cancel。只有在ls仍报告state: active时,才先运行scripts/scripts.sh cancel <script-id>。
已停止的定义不是等待对象。绝不要在迭代结束时将已发布结果的定义描述为活动监控:要么它已在本次迭代中通过 rerun 恢复,要么本次迭代等待的是其他对象。
外部先决条件失败
必需: 如果某个定期计划的命令在外部先决条件发生变化之前无法成功(例如缺少凭据、二进制文件或依赖项),那么它不再是有效的等待对象。它的失败结果已经使其停止,因此应采用上文的分支 2,绝不要对它执行 rerun:
scripts/scripts.sh rm <script-id>
只有当 ls 仍显示 state: active 时,才先运行 scripts/scripts.sh cancel <script-id>。然后,对于 Native Task:
- 提及客户并提出一个阻塞性问题。若已有匹配的未回答问题,请复用,不要新建或重复提问。
- 如果任务尚未处于
wait_customer状态,则将其设为该状态,并将此问题记录为唯一的恢复事件。 - 将通过
loopskill 执行scripts/loop.sh done作为最后一项操作,结束本次迭代。
只有在定义已移除、任务已进入一次等待客户答复的状态,并且迭代已结束后,才算处理完此次失败。操作记录若遗漏其中任何一项,都不完整。
暂停或禁用会留下无用的定义,不能完成这套流程。只要问题仍未得到答复,就不要重新运行命令、创建替代计划或重复失败评论。
危险信号
| 想法 | 实际情况 |
|---|---|
| “计划还在运行,所以我可以直接结束。” | 任何已发布的结果都会使它停止。使用 rerun <script-id> 恢复,或将其移除。 |
| “取消一次运行后,计划仍会保留。” | 该次运行仍会发布结果,从而使定义停止。 |
| “我会再次安排它,以恢复监控。” | 第二个定义会重复执行相同工作。rerun <script-id> 会恢复已记录的定义。 |
“rerun <name> 比 ID 更清楚。” | 名称不会被解析;只有 scr-... ID 有效。 |
| “它成功了,所以没有停止。” | 成功并非静默退出。只有 $TARIBOY_QUIET_EXIT(111)才表示静默退出。 |