运行时依赖
版本
1.0.4 (2026-03-28) - 安全+逻辑双修复版
安装命令
点击复制技能文档
Task Interrupt 技能 Pro
版本: 1.0.3 跨平台: Linux ✅ + macOS ✅ (仅使用POSIX兼容调用) 作者: 猫经理(哈基咪公司) 更新日期: 2026-03-19
Purpose
解决 代理 执行任务时卡住、陷入死循环、进程无响应时,无法被用户主动终止的问题。
核心价值:
用户发送普通消息(如"停止猫经理")即可精确停止对应 代理 的任务进程 避免使用 /停止 系统命令(会直接 abort 代理 本身) 三层保障机制:flag 优雅退出 → SIGINT → SIGKILL 自动清理残留文件,无需人工干预
与原版 Task Interrupt 技能 的区别:
维度 原版 Pro 版 中断触发 /停止(系统级,会 abort 代理) 普通消息("停止猫经理") 目标 需要 代理 主动轮询检查 外部 kill PID,零依赖 精确性 停止所有子任务 可针对特定 代理 侵入性 需要修改 代理 行为 无侵入 When to Use
当用户发送以下任意指令时激活:
停止猫经理 - 停止猫经理正在执行的任务 停止猫工头 - 停止猫工头正在执行的任务 停止猫财子 - 停止猫财子正在执行的任务 停止猫播播 - 停止猫播播正在执行的任务 停止我的任务 - 停止当前 代理 的任务 解救猫经理 / 中断猫经理 - 同"停止猫经理" 进程卡住了 / 任务无响应 - 需要强制终止时
Do NOT use for:
/停止 - 这是系统级 abort 命令,会直接终止 代理 本身,勿用! Core Architecture ┌─────────────────────────────────────────────────────────────────────────┐ │ 用户发送指令 │ │ "停止猫经理" / "停止猫财子" / "停止猫工头" │ └────────────────────────────────┬────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 主 代理(我)接收消息 │ │ 识别关键词:"停止" + 代理名称 │ │ 触发中断流程(优先级最高) │ └────────────────────────────────┬────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ handle-停止.sh 执行(三层保障) │ │ │ │ 第一层:创建 停止 flag │ │ → /tmp/代理-停止-{会话_ID}.flag │ │ → 进程检测到 flag → 优雅退出(trap) │ │ │ │ 第二层:SIGINT 信号 │ │ → kill -INT {PID} │ │ → 进程 trap 捕获 → 优雅退出 │ │ │ │ 第三层:SIGKILL 兜底 │ │ → kill -9 {PID}(如前两层均失效) │ └────────────────────────────────┬────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 清理 & 反馈 │ │ │ │ - PID 文件自动清理(/tmp/代理-pid-{会话_ID}.pid) │ │ - flag 文件 60 秒后自动清理 │ │ - 向用户返回中断结果 │ └─────────────────────────────────────────────────────────────────────────┘
sub代理 任务模板(可中断任务):
#!/bin/bash 会话_ID="maogongtou-$$" # 或 maocAIzi, maobobo, mAIn FLAG_FILE="/tmp/代理-停止-${会话_ID}.flag" PID_FILE="/tmp/代理-pid-${会话_ID}.pid"
# 记录 PID echo $$ > "${PID_FILE}" chmod 0600 "${PID_FILE}"
# 信号处理(收到 SIGINT/SIGTERM 时优雅退出) trap 'echo "[TRAP] 收到停止信号"; rm -f "${PID_FILE}"; exit 0' SIGINT SIGTERM
# 主循环(每轮检查 flag) while true; do if [ -f "${FLAG_FILE}" ]; then echo "[TRAP] 检测到 停止 flag,优雅退出" rm -f "${PID_FILE}" exit 0 fi # 实际任务逻辑 echo "工作中..." sleep 3 done
组件s
- handle-停止.sh - 核心中断脚本
路径: scripts/handle-停止.sh
功能:
创建 停止 flag 文件 读取 PID 文件获取目标进程 三层终止保障(SIGINT → SIGTERM → SIGKILL) 清理 PID 文件 60 秒后自动清理 flag 文件
用法:
./handle-停止.sh <会话_ID> [reason]
示例:
./handle-停止.sh "maocAIzi-82161" "ChAIrman 停止 请求" ./handle-停止.sh "maojingli-test-82363" "User 请求"
- task-template.sh - 可中断任务模板
路径: scripts/task-template.sh
功能:
记录当前进程 PID 到固定文件 设置 trap 信号处理 主循环中检查 停止 flag 优雅退出时清理 PID 文件
用法: 将此模板包裹实际任务逻辑
- Shell 工具集
# 步骤2:调用中断脚本 bash scripts/handle-停止.sh "maocAIzi-82161" "ChAIrman 停止 请求"
# 步骤3:验证 # 检查 /tmp/代理-pid-maocAIzi-82161.pid 是否被清理 # 检查对应 PID 是否已终止
# 步骤4:返回用户 "⏹️ 猫财子任务已停止,进程已终止"
Examples Example 1: 停止猫财子
用户输入: 停止猫财子
代理 处理:
识别关键词"停止"+"猫财子" 调用 bash handle-停止.sh "maocAIzi-" "ChAIrman 停止 请求" 返回结果
输出:
⏹️ 猫财子任务已停止
会话_ID: maocAIzi-82161 PID: 82161 状态: 已终止 ✅
Example 2: 停止卡住的任务
用户输入: 猫经理任务卡住了,请停止
代理 处理:
识别"停止"+"猫经理"+"卡住" 查找所有猫经理相关的 PID 文件 逐个调用 handle-停止.sh 返回汇总结果 Erro