Tap 定时触发器
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_7f11a9a1/tap-triggers。
技能介绍
它解决什么问题
plan 只回答做什么和怎么验证,刻意不回答何时做。云端 routines 把决策、触发和执行打包,但每次触发都要付一个 agent 会话。Tap 的要求相反:触发层应当零 token。macOS 自带 launchd,本技能负责从可版本化声明到 launchd 产物的确定性编译,并把编译和激活拆成两阶段。
核心能力
- 声明在
~/.tap/triggers/<name>/<slot>.trigger.json,一个文件一个触发;第三段slot可让同一 plan 拥有多个独立触发,例如visibility-recheck.am.trigger.json与…pm.trigger.json。 - 工具提供
inspect、diff、render三个入口,只编译声明到产物,不在引擎里做调度循环。 - 日志写入
~/Library/Logs/taprun/<name>.log与<name>.err;未变更的声明不重写,有变更则报告updated。
编译时硬闸门
- 前台闸门(安全):声明包含
trusted:trueop 的 plan 直接被拒。trusted 输入是 CDP 坐标级操作,需要前台标签页,凌晨 3 点的无人值守运行无法提供;判定是结构性 JSON 检查,不是文本匹配。 - 引用完整性:悬空 ref(磁盘上没有对应 plan)在声明阶段即被拒,而不是等到失败日志才发现。
- 写变体警告(质量):变更类 plan 可以编译,但会告警,需确认后置条件非空虚,且
intent_key在无人值守前已完成去重。 - 命名空间 containment(安全):孤儿清扫与
--prune结构性限定在dev.taprun.trigger.*,外部 LaunchAgents 构造上不可达。
适用边界
- 当前只支持 macOS +
launchd;Linux/Windows 的端口方向是同一声明格式下的systemd timer等价物。 - 触发层不做自动 bootstrap。写文件是幂等且可审阅的,改
launchd状态是单独、人类可见的一步:先编译,再激活。 - 浏览器事件触发(如“打开 Xero 时拉报表”)是本地优先才能做的类,但当前没有命名消费者,待有需求再议。
- 无人值守运行只有 Chrome 运行时才能抵达扩展 peer(
launchd→ tap CLI →host.sock→ NM host);L1/L2 fetch 类 plan 没有 tab,触发场景应优先选它们。
使用场景
- 凌晨 3 点运行可见性复查的 fetch 类 plan,让 launchd 按声明式 JSON 编译并触发,避免每次支付 agent 会话。
- 维护多个 slot 触发时,把同一 plan 拆成 `visibility-recheck.am.trigger.json` 与下午版本,分别管理早晚执行。
- 提交声明前用引用完整性闸门检查悬空 ref,确保磁盘上存在对应 plan,而不是等失败日志暴露。
- 处理变更类 plan 时,确认后置条件非空虚且 `intent_key` 已完成去重,再让无人值守运行继续执行。
适合人员
- 维护 macOS launchd 工作流的自动化工程师,想把 plan 触发从调度逻辑里拆成可审阅的声明到产物编译。
- 构建无人值守 agent 的开发者,需要零 token 触发并接受 trusted 操作必须前台运行的硬闸门。
- 管理多计划触发配置的技术负责人,希望用 slot 给同一 plan 配置早晚独立触发并保留 diff 记录。