定时任务 (Cron)

使用自然语言或 cron 表达式调度自动运行的任务。Hermes 通过一个单一的 cronjob 工具暴露定时任务管理,使用操作风格的操作,而非独立的 schedule/list/remove 工具。

定时任务现在可以做什么

定时任务可以:

  • 调度一次性或重复任务
  • 暂停、恢复、编辑、触发和移除任务
  • 为任务附加零个、一个或多个技能
  • 将结果投递回原始聊天、本地文件或配置的平台目标
  • 在新的代理会话中使用正常的静态工具列表运行
  • 无代理模式下运行——一个按计划运行的脚本,其 stdout 逐字交付,零 LLM 参与(参见下面的无代理模式部分)

所有这些都通过 cronjob 工具对 Hermes 自身可用,因此你可以通过自然语言创建、暂停、编辑和移除任务——无需 CLI。

:::warning 定时任务运行的会话不能递归创建更多定时任务。Hermes 在定时任务执行期间禁用定时任务管理工具,以防止失控的调度循环。 :::

创建定时任务

使用 /cron 在聊天中

/cron add 30m "提醒我检查构建状态"
/cron add "every 2h" "检查服务器状态"
/cron add "every 1h" "汇总新 Feed 项目" --skill blogwatcher
/cron add "every 1h" "使用两个技能并组合结果" --skill blogwatcher --skill maps

从独立 CLI

hermes cron create "every 2h" "检查服务器状态"
hermes cron create "every 1h" "汇总新 Feed 项目" --skill blogwatcher
hermes cron create "every 1h" "使用两个技能并组合结果" \
  --skill blogwatcher \
  --skill maps \
  --name "技能组合"

通过自然对话

直接问 Hermes:

每天早上 9 点,查看 Hacker News 上的 AI 新闻并在 Telegram 上给我发送摘要。

Hermes 会在内部使用统一的 cronjob 工具。

技能支持的定时任务

定时任务可以在运行提示之前加载一个或多个技能。

单个技能

cronjob(
    action="create",
    skill="blogwatcher",
    prompt="检查配置的 Feed 并汇总任何新内容。",
    schedule="0 9 * * *",
    name="早间 Feed",
)

多个技能

技能按顺序加载。提示成为叠加在这些技能之上的任务指令。

cronjob(
    action="create",
    skills=["blogwatcher", "maps"],
    prompt="查找新的本地活动和有趣附近的场所,然后将它们组合成一份简短简报。",
    schedule="every 6h",
    name="本地简报",
)

当你希望定时代理继承可重复工作流,而不必将完整技能文本塞入定时任务提示本身时,这很有用。

在项目目录中运行任务

定时任务默认以与任何仓库分离的方式运行——不加载 AGENTS.mdCLAUDE.md.cursorrules,终端/文件/代码执行工具从网关启动时的工作目录运行。传递 --workdir(CLI)或 workdir=(工具调用)来改变这一点:

# 独立 CLI(调度和提示是位置参数)
hermes cron create "every 1d at 09:00" \
  "审计开放的 PR,汇总 CI 健康状况,并发布到 #eng" \
  --workdir /home/me/projects/acme
# 从聊天中,通过 cronjob 工具
cronjob(
    action="create",
    schedule="every 1d at 09:00",
    workdir="/home/me/projects/acme",
    prompt="审计开放的 PR,汇总 CI 健康状况,并发布到 #eng",
)

当设置 workdir 时:

  • 该目录中的 AGENTS.mdCLAUDE.md.cursorrules 会注入到系统提示中(与交互式 CLI 相同的发现顺序)
  • terminalread_filewrite_filepatchsearch_filesexecute_code 都使用该目录作为其工作目录(通过 TERMINAL_CWD
  • 路径必须是存在的绝对目录——相对路径和缺失的目录在创建/更新时被拒绝
  • 在编辑时传递 --workdir ""(或通过工具传递 workdir="")以清除它并恢复旧行为

:::note 串行化 带有 workdir 的任务在调度器 tick 上顺序运行,而非在并行池中。这是有意为之——TERMINAL_CWD 是进程全局的,因此两个 workdir 任务同时运行会互相破坏对方的 cwd。没有 workdir 的任务仍然像以前一样并行运行。 :::

在特定配置文件中运行定时任务

默认情况下,定时任务继承创建它的网关/CLI 所拥有的 Hermes 配置文件。传递 --profile <name>(CLI)或 profile=(cronjob 工具)来将任务重新定位到不同的配置文件——调度器解析该配置文件的 HERMES_HOME,在运行期间临时切换进去,加载其 .env + config.yaml,并在那里执行任务:

# 将任务固定到 `night-ops` 配置文件,无论它在何处被调度
hermes cron create "every 1d at 03:00" \
  "跟踪安全日志并标记异常" \
  --profile night-ops
# 从聊天中,通过 cronjob 工具
cronjob(
    action="create",
    schedule="every 1d at 03:00",
    prompt="跟踪安全日志并标记异常",
    profile="night-ops",
)

使用 --profile default 显式固定到根 Hermes 配置文件。命名的配置文件必须已存在;调度器拒绝动态创建配置文件。要在 cron edit 期间清除配置文件固定,传递空字符串(--profile ""profile="")——任务恢复为在调度器自身所在的配置文件中运行。

如果固定的配置文件稍后删除,调度器会记录警告并回退到在其当前配置文件中运行任务,而不是崩溃——因此过时的 profile 引用永远不会卡住任务。

:::note 串行化 设置了 profile 的任务也顺序运行,原因与 workdir 固定的任务相同:切换 HERMES_HOME 是进程全局的变更,因此两个配置文件固定的任务并行运行会互相竞争。未固定的任务仍在正常的并行池中运行。 :::

编辑任务

你无需为了更改任务而删除并重新创建它。

:::tip 任务引用 下面的 <job_id> 占位符(以及生命周期操作中的)也接受任务的名称(不区分大小写)——当你记得 morning-digest 但不记得十六进制 ID 时很方便。精确的任务 ID 优先于名称匹配;如果引用不是 ID 且名称匹配多个任务,命令会拒绝并打印候选 ID,以便你消除歧义。 :::

聊天

/cron edit <job_id> --schedule "every 4h"
/cron edit <job_id> --prompt "使用修订后的任务"
/cron edit <job_id> --skill blogwatcher --skill maps
/cron edit <job_id> --remove-skill blogwatcher
/cron edit <job_id> --clear-skills

独立 CLI

hermes cron edit <job_id> --schedule "every 4h"
hermes cron edit <job_id> --prompt "使用修订后的任务"
hermes cron edit <job_id> --skill blogwatcher --skill maps
hermes cron edit <job_id> --add-skill maps
hermes cron edit <job_id> --remove-skill blogwatcher
hermes cron edit <job_id> --clear-skills

注意:

  • 重复的 --skill 替换任务附加的技能列表
  • --add-skill 追加到现有列表而不替换
  • --remove-skill 移除特定的附加技能
  • --clear-skills 移除所有附加技能

生命周期操作

定时任务现在拥有比仅创建/移除更完整的生命周期。

聊天

/cron list
/cron pause <job_id>
/cron resume <job_id>
/cron run <job_id>
/cron remove <job_id>

独立 CLI

hermes cron list
hermes cron pause <job_id>
hermes cron resume <job_id>
hermes cron run <job_id>
hermes cron remove <job_id>
hermes cron status
hermes cron tick

各自作用:

  • pause——保留任务但停止调度它
  • resume——重新启用任务并计算下一次运行时间
  • run——在下一次调度器 tick 时触发任务
  • remove——完全删除它

工作原理

定时任务执行由网关守护进程处理。 网关每 60 秒 tick 一次调度器,在隔离的代理会话中运行任何到期的任务。

hermes gateway install     # 安装为用户服务
sudo hermes gateway install --system   # Linux:服务器开机自启系统服务
hermes gateway             # 或在前台运行
 
hermes cron list
hermes cron status

网关调度器行为

每次 tick 时 Hermes:

  1. ~/.hermes/cron/jobs.json 加载任务
  2. 检查 next_run_at 与当前时间
  3. 为每个到期的任务启动一个新的 AIAgent 会话
  4. 可选地将一个或多个附加技能注入到该新会话中
  5. 运行提示至完成
  6. 投递最终响应
  7. 更新运行元数据和下次调度时间

~/.hermes/cron/.tick.lock 处的文件锁可防止重叠的调度器 tick 重复运行同一批任务。

投递选项

调度任务时,你需要指定输出投递到哪里:

选项描述示例
"origin"返回到创建任务的位置消息平台上的默认值
"local"仅保存到本地文件(~/.hermes/cron/output/CLI 上的默认值
"telegram"Telegram 主页频道使用 TELEGRAM_HOME_CHANNEL
"telegram:123456"按 ID 指定的 Telegram 聊天直接投递
"telegram:-100123:17585"特定 Telegram 话题chat_id:thread_id 格式
"discord"Discord 主页频道使用 DISCORD_HOME_CHANNEL
"discord:#engineering"特定 Discord 频道按频道名称
"slack"Slack 主页频道
"whatsapp"WhatsApp 主页
"signal"Signal
"matrix"Matrix 主页房间
"mattermost"Mattermost 主页频道
"email"电子邮件
"sms"通过 Twilio 的短信
"homeassistant"Home Assistant
"dingtalk"钉钉
"feishu"飞书
"wecom"企业微信
"weixin"微信
"bluebubbles"BlueBubbles(iMessage)
"qqbot"QQ 机器人
"all"扇出到每个已连接的主页频道在触发时解析
"telegram,discord"扇出到特定的一组频道逗号分隔列表
"origin,all"投递到原始位置加上每个其他已连接的频道可组合任意 token

代理的最终响应会自动投递。你无需在定时任务提示中调用 send_message

路由意图(all

all 让你将单个定时任务发送到你已配置的每个消息平台,无需逐一列举名称。它在触发时解析,因此在你设置 TELEGRAM_HOME_CHANNEL 之前创建的任务会在你设置后的下一个 tick 收到 Telegram。

语义:all 展开为每个配置了主页频道的平台。零个也可以;任务仅仅不产生投递目标,并在上游记录为投递失败。

all 可与显式目标组合。origin,all 投递到原始聊天加上每个其他已连接的主页频道,按 (platform, chat_id, thread_id) 去重。

Telegram 定时任务话题(TELEGRAM_CRON_THREAD_ID

当启用了 Telegram 话题模式时,根 DM 保留为系统大厅——发送到那里的回复会收到大厅提醒,并且 reply_to_message_id 会被丢弃,因此你不能回复落在主聊天中的定时任务消息。

将定时任务指向专门的话题线程:

  1. 在 Telegram 中,打开机器人 DM 并创建一个名为 Cron 的话题。长按话题标题 → 复制链接;末尾的整数是话题的 message_thread_id
  2. 在你的 .env 中设置 TELEGRAM_CRON_THREAD_ID=<该 ID>

这仅适用于定时任务投递。TELEGRAM_HOME_CHANNEL_THREAD_ID(在其他地方使用,例如重启通知)保持不变。显式的 deliver="telegram:chat_id:thread_id" 目标始终优先于环境变量。对定时任务消息的回复现在到达现有的话题会话中,因此你可以直接对它们采取行动。

响应包装

默认情况下,投递的定时任务输出会带有头部和尾部,以便接收者知道它来自定时任务:

Cronjob Response: Morning feeds
-------------

<agent output here>

Note: The agent cannot see this message, and therefore cannot respond to it.

要投递原始代理输出而不带包装,将 cron.wrap_response 设置为 false

# ~/.hermes/config.yaml
cron:
  wrap_response: false

静默抑制

如果代理的最终响应以 [SILENT] 开头,投递会被完全抑制。输出仍然本地保存以供审计(在 ~/.hermes/cron/output/ 中),但不会向投递目标发送消息。

这对于仅应在有问题时报告的监控任务很有用:

检查 nginx 是否在运行。如果一切正常,仅回复 [SILENT]。
否则,报告问题。

失败的任务始终投递,无论 [SILENT] 标记如何——只有成功的运行可以被静默。

脚本超时

预运行脚本(通过 script 参数附加)的默认超时时间为 120 秒。如果你的脚本需要更长时间——例如,包含避免类似机器人时序模式的随机延迟——你可以增加此值:

# ~/.hermes/config.yaml
cron:
  script_timeout_seconds: 300   # 5 分钟

或设置 HERMES_CRON_SCRIPT_TIMEOUT 环境变量。解析顺序为:环境变量 → config.yaml → 120 秒默认值。

无代理模式(仅脚本任务)

对于不需要 LLM 推理的重复任务——经典的看门狗、磁盘/内存警报、心跳、CI 心跳——在创建时传递 no_agent=True。调度器按计划运行你的脚本并直接投递其 stdout,完全跳过代理:

hermes cron create "every 5m" \
  --no-agent \
  --script memory-watchdog.sh \
  --deliver telegram \
  --name "memory-watchdog"

语义:

  • 脚本 stdout(修剪后)→ 作为消息逐字投递。
  • 空 stdout → 静默 tick,不投递。这是看门狗模式:“仅当有问题时才说话”。
  • 非零退出或超时 → 发送错误警报,因此损坏的看门狗不能静默失败。
  • 最后一行的 {"wakeAgent": false} → 静默 tick(与 LLM 任务使用的相同门控)。
  • 无 token、无模型、无提供商回退——任务从不触及推理层。

.sh / .bash 文件在 /bin/bash 下运行;其他所有内容在当前 Python 解释器(sys.executable)下运行。脚本必须位于 ~/.hermes/scripts/ 中(与预运行脚本门控相同的沙箱规则)。

代理会为你设置这些

cronjob 工具的模式直接向 Hermes 暴露了 no_agent,因此你可以在聊天中描述一个看门狗,让代理来配置:

如果 RAM 超过 85%,每 5 分钟在 Telegram 上通知我。

Hermes 会通过 write_file 将检查脚本写入 ~/.hermes/scripts/,然后调用:

cronjob(action="create", schedule="every 5m",
        script="memory-watchdog.sh", no_agent=True,
        deliver="telegram", name="memory-watchdog")

当消息内容完全由脚本决定时(看门狗、阈值警报、心跳),它会自动选择 no_agent=True。同样的工具还允许代理暂停、恢复、编辑和移除任务——因此整个生命周期都是聊天驱动的,无需任何人接触 CLI。

有关工作示例,请参见仅脚本定时任务指南

使用 context_from 链式任务

定时任务在隔离的会话中运行,没有对之前运行的记忆。但有时一个任务的输出正是下一个任务需要的。context_from 参数自动连接该依赖——在运行时,任务 B 的提示会自动前置任务 A 的最新输出作为上下文。

# 任务 1:收集原始数据
cronjob(
    action="create",
    prompt="从 Hacker News 获取前 10 个 AI/ML 故事。以 markdown 格式保存到 ~/.hermes/data/briefs/raw.md,包含标题、URL 和分数。",
    schedule="0 7 * * *",
    name="AI 新闻收集器",
)
 
# 任务 2:分类——接收任务 1 的输出作为上下文
# 从 cronjob(action="list") 获取任务 1 的 ID
cronjob(
    action="create",
    prompt="读取 ~/.hermes/data/briefs/raw.md。对每个故事按参与潜力和新颖性评分 1-10。输出前 5 名到 ~/.hermes/data/briefs/ranked.md。",
    schedule="30 7 * * *",
    context_from="<job1_id>",
    name="AI 新闻分类",
)
 
# 任务 3:发送——接收任务 2 的输出作为上下文
cronjob(
    action="create",
    prompt="读取 ~/.hermes/data/briefs/ranked.md。编写 3 条推文草稿(钩子 + 正文 + 话题标签)。投递到 telegram:7976161601。",
    schedule="0 8 * * *",
    context_from="<job2_id>",
    name="AI 新闻简报",
)

工作原理:

  • 当任务 2 触发时,Hermes 从 ~/.hermes/cron/output/{job1_id}/*.md 读取任务 1 的最新输出
  • 该输出自动前置到任务 2 的提示中
  • 任务 2 无需硬编码”读取此文件”——它作为上下文接收内容
  • 链可以是任意长度:任务 1 → 任务 2 → 任务 3 → …

context_from 接受的内容:

格式示例
单个任务 ID(字符串)context_from="a1b2c3d4"
多个任务 ID(列表)context_from=["job_a", "job_b"]

输出按列出顺序拼接。

何时使用:

  • 多阶段流水线(收集 → 过滤 → 格式化 → 投递)
  • 依赖任务,其中步骤 N 的工作依赖于步骤 N−1 的输出
  • 扇出/扇入模式,其中一个任务聚合多个其他任务的结果

提供商恢复

定时任务继承你配置的回退提供商和凭证池轮换。如果主 API 密钥被速率限制或提供商返回错误,定时任务代理可以:

  • 回退到备用提供商,如果你在 config.yaml 中配置了 fallback_providers(或旧版 fallback_model
  • 轮换到下一个凭证,在你的凭证池中针对同一提供商

这意味着高频运行或高峰时段运行的定时任务更具弹性——单个被速率限制的密钥不会使整个运行失败。

调度格式

代理的最终响应会自动投递——你需要在定时任务提示中为了同一目标包含 send_message。如果定时任务运行调用 send_message 到调度器将要投递的精确目标,Hermes 会跳过该重复发送,并告诉模型将面向用户的内容放在最终响应中。仅将 send_message 用于额外或不同的目标。

相对延迟(一次性)

30m     → 在 30 分钟后运行一次
2h      → 在 2 小时后运行一次
1d      → 在 1 天后运行一次

间隔(重复)

every 30m    → 每 30 分钟
every 2h     → 每 2 小时
every 1d     → 每天

Cron 表达式

0 9 * * *       → 每天上午 9:00
0 9 * * 1-5     → 工作日上午 9:00
0 */6 * * *     → 每 6 小时
30 8 1 * *      → 每月 1 日上午 8:30
0 0 * * 0       → 每个周日午夜

ISO 时间戳

2026-03-15T09:00:00    → 在 2026 年 3 月 15 日上午 9:00 一次性运行

重复行为

调度类型默认重复行为
一次性(30m、时间戳)1运行一次
间隔(every 2h永远运行直到被移除
Cron 表达式永远运行直到被移除

你可以覆盖它:

cronjob(
    action="create",
    prompt="...",
    schedule="every 2h",
    repeat=5,
)

编程式管理任务

代理面向的 API 是一个工具:

cronjob(action="create", ...)
cronjob(action="list")
cronjob(action="update", job_id="...")
cronjob(action="pause", job_id="...")
cronjob(action="resume", job_id="...")
cronjob(action="run", job_id="...")
cronjob(action="remove", job_id="...")

对于 update,传递 skills=[] 以移除所有附加技能。

定时任务可用的工具集

定时任务在没有任何聊天平台附加的新代理会话中运行每个任务。默认情况下,定时任务代理获得你在 hermes tools 中为 cron 平台配置的工具集——不是 CLI 默认,也不是所有可能的工具。

hermes tools
# → 在 curses UI 中选择 "cron" 平台
# → 像为 Telegram/Discord 等切换工具集一样开关

每个任务更精细的控制可通过 cronjob.create 上的 enabled_toolsets 字段(或通过 cronjob.update 更新现有任务)实现:

cronjob(action="create", name="weekly-news-summary",
        schedule="every sunday 9am",
        enabled_toolsets=["web", "file"],      # 仅 web + file,无 terminal/browser 等
        prompt="总结本周的 AI 新闻:...")

当任务设置了 enabled_toolsets 时,它优先;否则 hermes tools 的定时任务平台配置优先;否则 Hermes 回退到内置默认值。这对成本控制很重要:将 moabrowserdelegation 带入每个微小的”获取新闻”任务会膨胀每个 LLM 调用上的工具模式提示。

完全跳过代理:wakeAgent

如果你的定时任务附加了预检查脚本(通过 script=),脚本可以在运行时决定 Hermes 是否应该调用代理。发送一个最终 stdout 行,格式为:

{"wakeAgent": false}

……定时任务会为此 tick 完全跳过代理运行。适用于频繁轮询(每 1-5 分钟),仅当状态实际发生变化时才需要唤醒 LLM——否则你会一次又一次地为零内容的代理轮次付费。

# 预检查脚本
import json, sys
latest = fetch_latest_issue_count()
prev = read_state("issue_count")
if latest == prev:
    print(json.dumps({"wakeAgent": False}))   # 跳过此 tick
    sys.exit(0)
write_state("issue_count", latest)
print(json.dumps({"wakeAgent": True, "context": {"new_issues": latest - prev}}))

当省略 wakeAgent 时,默认为 true(照常唤醒代理)。

配方:廉价的预运行门控

wakeAgent 门控为你提供了一种零成本的方式,来决定定时任务是否应该花费任何 LLM token。三种模式覆盖大多数用例。

文件变更门控——仅在监视的文件自上次成功 tick 后有新内容时才运行。调度器记录每个任务的 last_run_at;将其与文件的 mtime 进行比较。

#!/bin/bash
# ~/.hermes/scripts/feed-changed.sh
FEED="$HOME/data/feed.json"
STATE="$HOME/.hermes/scripts/.feed-changed.last"
test -f "$FEED" || { echo '{"wakeAgent": false}'; exit 0; }
mtime=$(stat -c %Y "$FEED")
last=$(cat "$STATE" 2>/dev/null || echo 0)
if [ "$mtime" -le "$last" ]; then
  echo '{"wakeAgent": false}'
else
  echo "$mtime" > "$STATE"
  echo '{"wakeAgent": true}'
fi
cronjob(action="create", name="process-feed",
        schedule="every 30m",
        script="feed-changed.sh",
        prompt="新的 ~/data/feed.json 已到达。总结更改内容。")

外部标志门控——仅当其他进程发出了就绪信号时才运行(例如部署钩子放置文件、CI 任务在你的状态存储中设置值)。

#!/bin/bash
# ~/.hermes/scripts/flag-ready.sh
if test -f /tmp/new-data-ready; then
  rm -f /tmp/new-data-ready
  echo '{"wakeAgent": true}'
else
  echo '{"wakeAgent": false}'
fi
cronjob(action="create", name="nightly-analysis",
        schedule="0 9 * * *",
        script="flag-ready.sh",
        prompt="对今天的批次进行夜间分析。")

SQL 计数门控——仅当你的数据库中有新行需要处理时才运行。脚本还可以通过 context 将计数传递给代理,因此代理无需重新查询就知道它正在处理多少数据。

#!/usr/bin/env python
# ~/.hermes/scripts/new-rows.py
import json, sqlite3
conn = sqlite3.connect("/home/me/data/app.db")
n = conn.execute(
    "SELECT COUNT(*) FROM messages WHERE ts > strftime('%s','now','-2 hours')"
).fetchone()[0]
if n < 1:
    print(json.dumps({"wakeAgent": False}))
else:
    print(json.dumps({"wakeAgent": True, "context": {"new_rows": n}}))
cronjob(action="create", name="summarize-new-msgs",
        schedule="every 2h",
        script="new-rows.py",
        prompt="总结过去 2 小时的新消息。")

同样的模式适用于你可以从脚本查询的任何数据源——Postgres、HTTP API、你自己的状态存储——无需将 SQL 求值器构建到定时任务子系统中。

:::tip Hermes 自己的 ~/.hermes/state.db 是在不同版本之间变化的内置模式。不要从预运行门控中查询它——请指向你自己的数据库或 Feed。 :::

致谢:这套配方由 @iankar8 在 #2654 中的探索启发,该探索提议添加 sql/file/command 触发器作为并行机制。script + wakeAgent 门控已经以零成本覆盖了所有三种情况,因此相关工作以文档形式落地。

链式任务:context_from

定时任务可以通过在 context_from 中列出其他任务的名称(或 ID)来消费一个或多个任务的最新成功输出:

cronjob(action="create", name="daily-digest",
        schedule="every day 7am",
        context_from=["ai-news-fetch", "github-prs-fetch"],
        prompt="使用上述输出编写每日摘要。")

引用的任务的最新完成输出作为上下文注入到提示之上。每个上游条目必须是有效的任务 ID 或名称(参见 cronjob action="list")。注意:链式读取最新完成的输出——它不会等待同一 tick 中正在运行的上游任务。

任务存储

任务存储在 ~/.hermes/cron/jobs.json 中。任务运行的输出保存到 ~/.hermes/cron/output/{job_id}/{timestamp}.md

任务可以将 modelprovider 存储为 null。当这些字段被省略时,Hermes 在执行时从全局配置解析它们。它们仅在设置了每个任务覆盖时才出现在任务记录中。

存储使用原子文件写入,因此中断的写入不会留下部分写入的任务文件。

自包含提示仍然很重要

:::warning 重要 定时任务在完全新的代理会话中运行。提示必须包含代理所需的所有内容,这些内容尚未由附加的技能提供。 :::

不好的: "检查那个服务器问题"

好的: "SSH 到服务器 192.168.1.100,以 'deploy' 用户登录,使用 'systemctl status nginx' 检查 nginx 是否在运行,并验证 https://example.com 返回 HTTP 200。"

安全性

定时任务提示在创建和更新时会扫描提示注入和凭证外泄模式。包含不可见 Unicode 技巧、SSH 后门尝试或明显秘密外泄负载的提示会被阻止。