ByteNoteByteNote

字节笔记本

2026年6月21日

hermes教程-仅脚本定时任务(无LLM)

API中转
¥120

仅脚本定时任务(无LLM)

有时你已确切知道要发送什么消息。你不需要智能体来推理——你只需要一个脚本按定时器运行,并将其输出(如果有)发送到 Telegram / Discord / Slack / Signal。

Hermes 将此称为无智能体模式。它是去掉了 LLM 的定时任务系统。

text
   ┌──────────────────┐          ┌──────────────────┐
   │ scheduler tick   │  every   │ run script       │
   │ (every N minutes)│ ──────▶ │ (bash or python) │
   └──────────────────┘          └──────────────────┘
                                          │
                                          │ stdout
                                          ▼
                                 ┌──────────────────┐
                                 │ delivery router  │
                                 │ (telegram/disc…) │
                                 └──────────────────┘
  • 无 LLM 调用。 零 token、零智能体循环、零模型开销。
  • 脚本即任务。 脚本决定是否告警。有输出 → 发送消息。无输出 → 静默触发。
  • Bash 或 Python。 .sh / .bash 文件在 /bin/bash 下运行;其他扩展名在当前 Python 解释器下运行。~/.hermes/scripts/ 中的任何脚本均可接受。
  • 相同的调度器。 与 LLM 任务一起存在于 cronjob 中——暂停、恢复、列出、日志和投递目标的工作方式完全相同。

何时使用

在以下场景使用无智能体模式:

  • 内存 / 磁盘 / GPU 监控。 每 5 分钟运行一次,仅在阈值被突破时告警。
  • CI 钩子。 部署完成 → 发布提交 SHA。构建失败 → 发送日志最后 100 行。
  • 周期性指标。 “每天早上 9 点 Stripe 收入”作为简单的 API 调用 + 美化输出。
  • 外部事件轮询。 检查 API,状态变化时告警。
  • 心跳。 每 N 分钟 ping 一次仪表板,证明主机存活。

当你需要智能体决定说什么时——例如总结长文档、从信息流中挑选有趣条目、起草友好消息——请使用常规(LLM 驱动)定时任务。无智能体路径适用于脚本的标准输出本身就是消息的情况。

从聊天中创建

无智能体模式的真正优势在于智能体本身可以为你设置监控——无需编辑器、无需 shell、无需记忆 CLI 标志。你描述需求,Hermes 编写脚本、调度它,并告诉你何时触发。

示例对话

你: 如果内存超过 85%,每 5 分钟在 Telegram 上 ping 我

Hermes: (写入 ~/.hermes/scripts/memory-watchdog.sh,然后调用 cronjob(...) 并设置 no_agent=true)

已设置。每 5 分钟运行一次,仅在内存超过 85% 时通过 Telegram 告警。脚本:memory-watchdog.sh。任务 ID:abc123

在底层,智能体进行了两次工具调用:

python
## 1. 编写检查脚本
write_file(
    path="~/.hermes/scripts/memory-watchdog.sh",
    content='''#!/usr/bin/env bash
ram_pct=$(free | awk '/^Mem:/ {printf "%d", $3 * 100 / $2}')
if [ "$ram_pct" -ge 85 ]; then
  echo "RAM ${ram_pct}% on $(hostname)"
fi
## 空标准输出 = 静默触发;不发送消息。
''',
)
## 2. 调度它——no_agent=True 在每次触发时跳过 LLM
cronjob(
    action="create",
    schedule="every 5m",
    script="memory-watchdog.sh",
    no_agent=True,
    deliver="telegram",
    name="memory-watchdog",
)

从那时起,每次触发都是免费的:调度器运行脚本,如果标准输出非空则将其通过管道发送到 Telegram,并且从不接触模型。

智能体为你决定什么

当你提出类似“当 X 时告警我”或“每 N 分钟检查 Y 并在 Z 时告诉我”的请求时,Hermes 的 cronjob 工具描述会告诉它在消息内容完全由脚本确定时使用 no_agent=True。当请求需要推理时(“总结新问题”“挑选最有趣的标题”“起草友好提醒”),它会回退到正常的 LLM 驱动路径。

你无需自己指定 --no-agent。只需描述行为即可。

从聊天中管理监控

智能体可以像创建任务一样暂停、恢复、编辑和删除任务:

你: 今晚停止内存监控

Hermes: (调用 cronjob(action='pause', job_id='abc123'))

已暂停。使用“重新打开”或通过 hermes cron resume abc123 恢复。

你: 改为每 15 分钟

Hermes: (调用 cronjob(action='update', job_id='abc123', schedule='every 15m'))

完整的生命周期(创建 / 列出 / 更新 / 暂停 / 恢复 / 立即运行 / 删除)对智能体可用,无需你学习任何 CLI 命令。

从 CLI 创建

更喜欢 shell?CLI 路径通过三个命令给你相同的结果:

bash
## 1. 编写你的脚本
cat > ~/.hermes/scripts/memory-watchdog.sh <<'EOF'
#!/usr/bin/env bash
## 当内存使用率超过 85% 时告警。否则静默。
RAM_PCT=$(free | awk '/^Mem:/ {printf "%d", $3 * 100 / $2}')
if [ "$RAM_PCT" -ge 85 ]; then
  echo "⚠ RAM ${RAM_PCT}% on $(hostname)"
fi
## 空标准输出 = 静默运行;不发送消息。
EOF
chmod +x ~/.hermes/scripts/memory-watchdog.sh
## 2. 调度它
hermes cron create "every 5m" \
  --no-agent \
  --script memory-watchdog.sh \
  --deliver telegram \
  --name "memory-watchdog"
## 3. 验证
hermes cron list
hermes cron run <job_id>    # 触发一次以测试

就是这样。没有提示、没有技能、没有模型。

脚本输出如何映射到投递

脚本行为结果
退出码 0,非空标准输出标准输出原样投递
退出码 0,空标准输出静默触发——不投递
退出码 0,标准输出最后一行包含 {"wakeAgent": false}静默触发(与 LLM 任务共享门控)
非零退出码投递错误告警(这样损坏的监控不会静默失败)
脚本超时投递错误告警

“空时静默”行为是经典监控模式的关键:脚本可以每分钟运行,但通道仅在需要关注时看到消息。

脚本规则

脚本必须位于 ~/.hermes/scripts/ 中。这在任务创建时和运行时都强制执行——绝对路径、~/ 扩展和路径遍历模式(../)均被拒绝。同一目录与 LLM 任务使用的预检查脚本门控共享。

解释器选择依据文件扩展名:

扩展名解释器
.sh, .bash/bin/bash
其他sys.executable(当前 Python)

我们有意不处理 #!/... shebang——保持解释器集明确且精简,减少调度器信任的攻击面。

调度语法

与所有其他定时任务相同:

bash
hermes cron create "every 5m"        # 间隔
hermes cron create "every 2h"
hermes cron create "0 9 * * *"       # 标准 cron:每天上午 9 点
hermes cron create "30m"             # 一次性:30 分钟后运行一次

完整语法请参见 cron 功能参考

投递目标

--deliver 接受网关已知的所有内容。一些常见形式:

bash
--deliver telegram                       # 平台主频道
--deliver telegram:-1001234567890        # 特定聊天
--deliver telegram:-1001234567890:17585  # 特定 Telegram 论坛主题
--deliver discord:#ops
--deliver slack:#engineering
--deliver signal:+15551234567
--deliver local                          # 仅保存到 ~/.hermes/cron/output/

对于机器人令牌平台(Telegram、Discord、Slack、Signal、SMS、WhatsApp),脚本运行时不需要运行中的网关——工具直接使用 ~/.hermes/.env / ~/.hermes/config.yaml 中已有的凭据调用每个平台的 REST 端点。

编辑和生命周期

bash
hermes cron list                                    # 查看所有任务
hermes cron pause <job_id>                          # 停止触发,保留定义
hermes cron resume <job_id>
hermes cron edit <job_id> --schedule "every 10m"    # 调整频率
hermes cron edit <job_id> --agent                   # 切换到 LLM 模式
hermes cron edit <job_id> --no-agent --script …     # 切换回来
hermes cron remove <job_id>                         # 删除它

所有适用于 LLM 任务的操作(暂停、恢复、手动触发、投递目标更改)同样适用于无智能体任务。

工作示例:磁盘空间告警

bash
cat > ~/.hermes/scripts/disk-alert.sh <<'EOF'
#!/usr/bin/env bash
## 当 / 或 /home 超过 90% 时告警。
THRESHOLD=90
df -h / /home 2>/dev/null | awk -v t="$THRESHOLD" '
  NR > 1 && $5+0 >= t {
    printf "⚠ Disk %s full on %s\n", $5, $6
  }
'
EOF
chmod +x ~/.hermes/scripts/disk-alert.sh

hermes cron create "*/15 * * * *" \
  --no-agent \
  --script disk-alert.sh \
  --deliver telegram \
  --name "disk-alert"

当两个文件系统都低于 90% 时静默;当某个文件系统填满时,每个超阈值文件系统触发一行。

与其他模式的比较

方法运行什么何时使用
cronjob --no-agent(本页)你的脚本在 Hermes 调度上运行不需要推理的周期性监控/告警/指标
cronjob(默认,LLM)智能体(带可选的预检查脚本)消息内容需要对数据进行推理时
系统 cron + curlwebhook 订阅你的脚本在系统调度上运行当 Hermes 可能不健康时(你正在监控的东西)

对于关键的系统健康监控,必须即使网关宕机也要触发,请使用系统级 cron 配合简单的 curl 到 Hermes webhook 订阅(或任何外部告警端点)——这些作为独立的系统进程运行,不依赖 Hermes 是否在线。当被监控的对象是外部时,网关内调度器是正确的选择。

相关



分享: