mcpField
S
scripts

scripts

github.com/alekzonderAgent 工作流0106 次安装2 天前更新
代码仓库

关于 scripts

Durable Scripts 是通过脚本启动器管理一次性或定期 shell 命令的 skill,面向使用 Agent 处理持久化任务的场景。它规定运行、结果处理和生命周期控制,并要求用脚本 ID 操作定义。

主要功能

  1. 01启动一次性或定期命令
  2. 02查看定义、运行记录与日志
  3. 03按脚本 ID 重跑、取消或移除
  4. 04通过静默退出码维持计划
  5. 05处理发布结果后的计划状态

适用场景

  1. 01运行一次命令并在后续处理结果
  2. 02定期执行检查并在结果发布后恢复或移除
  3. 03管理因外部依赖失败而停止的计划

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/alekzonder/tariboy-store --skill scripts

安装后在 Claude Code 中输入/scripts确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

evals/
evals.json
results.md
scripts/
scripts.py
scripts.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

必需: 处理结果,然后在迭代结束前通过以下两种决定之一将其关闭,且只能选择一种。 如果两者都不做,观察会悄然结束。

  1. 仍然需要 — 恢复同一定义:

    scripts/scripts.sh rerun <script-id>
    

    rerun 会立即运行它,并将定义恢复为 active,之后仍会继续按固定 间隔运行。对于已停止定义所描述的工作,绝不要创建替代计划。

  2. 不再需要 — 移除它:

    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:

  1. 提及客户并提出一个阻塞性问题。若已有匹配的未回答问题,请复用,不要新建或重复提问。
  2. 如果任务尚未处于 wait_customer 状态,则将其设为该状态,并将此问题记录为唯一的恢复事件。
  3. 将通过 loop skill 执行 scripts/loop.sh done 作为最后一项操作,结束本次迭代。

只有在定义已移除、任务已进入一次等待客户答复的状态,并且迭代已结束后,才算处理完此次失败。操作记录若遗漏其中任何一项,都不完整。

暂停或禁用会留下无用的定义,不能完成这套流程。只要问题仍未得到答复,就不要重新运行命令、创建替代计划或重复失败评论。

危险信号

想法实际情况
“计划还在运行,所以我可以直接结束。”任何已发布的结果都会使它停止。使用 rerun <script-id> 恢复,或将其移除。
“取消一次运行后,计划仍会保留。”该次运行仍会发布结果,从而使定义停止。
“我会再次安排它,以恢复监控。”第二个定义会重复执行相同工作。rerun <script-id> 会恢复已记录的定义。
“rerun <name> 比 ID 更清楚。”名称不会被解析;只有 scr-... ID 有效。
“它成功了,所以没有停止。”成功并非静默退出。只有 $TARIBOY_QUIET_EXIT(111)才表示静默退出。

评论

支持 Markdown