H繁中版
<!-- Source: https://hermesbible.com/docs/user-guide/features/cron -->

Section: Core Features · URL: https://hermesbible.com/docs/user-guide/features/cron

使用自然語言或 cron 表達式排程任務自動執行。Hermes 透過單一 cronjob 工具暴露 cron 管理功能,採用 action 風格的操作方式,而非分別提供 schedule/list/remove 工具。

Cron 目前能做什麼

Cron 排程任務可以:

  • 排程單次或循環執行的任務
  • 暫停、恢復、編輯、觸發及移除排程任務
  • 為排程任務附加零個、一個或多個 skill
  • 將結果回傳到原始聊天、本地檔案或已設定的平台目標
  • 在全新的 agent session 中執行,使用預設的靜態工具列表
  • 無 agent 模式執行——排程執行腳本,直接遞送其 stdout,完全不涉及 LLM(詳見下方無 agent 模式章節)

所有功能都可以透過 cronjob 工具讓 Hermes 自行使用,因此你可以用自然語言建立、暫停、編輯和移除排程任務——不需要操作 CLI。

TIP

Cron 排程任務使用 hermes model 所選定的 provider。hermes setup --portal 是最低門檻的無人值守執行選項,因為 OAuth 刷新是自動的。參見 Nous Portal

WARNING

Cron 執行的 session 無法遞迴建立更多 cron 排程任務。Hermes 會在 cron 執行期間停用 cron 管理工具,以防止失控的排程迴圈。

建立排程任務

在聊天中使用 /cron

/cron add 30m "提醒我檢查 build 狀態"
/cron add "every 2h" "檢查伺服器狀態"
/cron add "every 1h" "摘要化新的 feed 項目" --skill blogwatcher
/cron add "every 1h" "使用兩個 skill 並合併結果" --skill blogwatcher --skill maps

使用獨立 CLI

hermes cron create "every 2h" "檢查伺服器狀態"
hermes cron create "every 1h" "摘要化新的 feed 項目" --skill blogwatcher
hermes cron create "every 1h" "使用兩個 skill 並合併結果" \
  --skill blogwatcher \
  --skill maps \
  --name "Skill combo"

透過自然對話

直接對 Hermes 說:

每天早上 9 點,檢查 Hacker News 上的 AI 新聞,然後在 Telegram 上發送摘要給我。

Hermes 會在內部使用統一的 cronjob 工具。

Skill 驅動的 Cron 排程任務

Cron 排程任務可以在執行 prompt 之前載入一個或多個 skill。

單一 Skill

cronjob(
    action="create",
    skill="blogwatcher",
    prompt="Check the configured feeds and summarize anything new.",
    schedule="0 9 * * *",
    name="Morning feeds",
)

多個 Skill

Skill 會依序載入。Prompt 會成為疊加在這些 skill 之上的任務指令。

cronjob(
    action="create",
    skills=["blogwatcher", "maps"],
    prompt="Look for new local events and interesting nearby places, then combine them into one short brief.",
    schedule="every 6h",
    name="Local brief",
)

當你希望排程 agent 繼承可複用的工作流程,而不必把完整的 skill 文字塞進 cron prompt 本身時,這非常有用。

在專案目錄中執行排程任務

Cron 排程任務預設在任何 repo 之外執行——不會載入 AGENTS.mdCLAUDE.md.cursorrules,terminal / file / code-exec 工具會從 gateway 啟動時的工作目錄執行。使用 --workdir(CLI)或 workdir=(tool call)可以改變這一點:

# 獨立 CLI(schedule 和 prompt 是位置參數)
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 會被注入到系統 prompt 中(與互動式 CLI 相同的發現順序)
  • terminalread_filewrite_filepatchsearch_filesexecute_code 都會使用該目錄作為工作目錄
  • 路徑必須是已存在的絕對目錄——相對路徑和不存在的目錄會在建立/更新時被拒絕
  • 在編輯時傳入 --workdir ""(或透過工具傳入 workdir="")可以清除它並恢復原本的行為

NOTE — 序列化

帶有 workdir 的排程任務會在 scheduler tick 上序列化執行,而非在平行池中執行。這是刻意的設計:cron worker 透過 process-global terminal state 套用排程任務的 workdir,因此兩個帶有 workdir 的排程任務同時執行會互相損壞對方的 cwd。不帶 workdir 的排程任務仍然照常平行執行。

編輯排程任務

你不需要刪除再重建排程任務才能變更它。

TIP — 排程任務參考

下方(以及生命週期操作中)的 <job_id> 佔位符也接受排程任務的名稱(不區分大小寫)——當你記得 morning-digest 但記不得 hex ID 時相當方便。精確的 job 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 會替換排程任務的附加 skill 列表
  • --add-skill 會追加到現有列表而不替換它
  • --remove-skill 移除特定的附加 skill
  • --clear-skills 移除所有附加的 skill

生命週期操作

Cron 排程任務現在擁有比建立/移除更完整的生命週期。

聊天

/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_or_name>
hermes cron resume <job_id_or_name>
hermes cron run <job_id_or_name>
hermes cron remove <job_id_or_name>
hermes cron edit <job_id_or_name> [...flags]
hermes cron status
hermes cron tick

各操作的功能:

  • pause — 保留排程任務但停止排程
  • resume — 重新啟用排程任務並計算下次執行時間
  • run — 在下一個 scheduler tick 觸發排程任務
  • remove — 完全刪除排程任務
  • edit — 修改排程、prompt、遞送方式等

基於名稱的查找。 所有五個變異動詞(pauseresumerunremoveedit)以及 agent 的 cronjob 工具現在都接受排程任務的名稱(不區分大小寫)來取代 hex ID。agent 和 CLI 在存在精確 ID 匹配時都會優先使用;模糊的名稱匹配(多個排程任務共享相同名稱)會被拒絕,並顯示完整的候選 ID 列表讓你明確選擇。名稱不是唯一的,因此這個防護機制至關重要——它能防止在兩個排程任務共享名稱時意外修改到錯誤的任務。

運作原理

Cron 執行由 gateway daemon 處理。 Gateway 每 60 秒觸發一次 scheduler,在隔離的 agent session 中執行所有到期的排程任務。

hermes gateway install     # 安裝為使用者服務
sudo hermes gateway install --system   # Linux:啟動時的系統服務(伺服器用)
hermes gateway             # 或在前景執行

hermes cron list
hermes cron status

Gateway scheduler 行為

每次 tick 時 Hermes:

  1. ~/.hermes/cron/jobs.json 載入排程任務
  2. 檢查 next_run_at 是否已到達當前時間
  3. 為每個到期的排程任務啟動全新的 AIAgent session
  4. 選擇性地將一個或多個附加 skill 注入到該新 session 中
  5. 執行 prompt 直到完成
  6. 遞送最終回應
  7. 更新執行中繼資料和下次排程時間

位於 ~/.hermes/cron/.tick.lock 的檔案鎖防止重疊的 scheduler tick 重複執行同一批排程任務。

遞送選項

在排程任務時,你可以指定輸出去向:

選項說明範例
"origin"回傳到建立排程任務的地方訊息平台的預設值
"local"僅儲存到本地檔案(~/.hermes/cron/output/CLI 的預設值
"telegram"Telegram 主頻道使用 TELEGRAM_HOME_CHANNEL
"telegram:123456"指定 Telegram 聊天的 ID直接送達
"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 傳送 SMS
"homeassistant"Home Assistant
"dingtalk"DingTalk
"feishu"Feishu/Lark
"wecom"WeCom
"weixin"Weixin (WeChat)
"bluebubbles"BlueBubbles (iMessage)
"qqbot"QQ Bot (Tencent QQ)
"all"遞送到所有已連線的主頻道在觸發時解析
"telegram,discord"遞送到一組特定的頻道以逗號分隔的列表
"origin,all"遞送到原始位置加上所有其他已連線的頻道可組合任意 token

Agent 的最終回應會自動遞送。你不需要在 cron prompt 中呼叫 send_message

路由意圖(all

all 讓你可以將一個 cron 排程任務遞送到你設定的所有訊息頻道,而不必逐一列舉。它在觸發時解析,因此在你設定 TELEGRAM_HOME_CHANNEL 之前建立的排程任務,會在下次 tick 時拾取 Telegram。

語義:all 會展開為所有已設定主頻道的平台。零個也沒問題;排程任務只是不會產生遞送目標,並在上游記錄為遞送失敗。

all 可以與明確的目標組合。origin,all 會遞送到原始聊天加上所有其他已連線的主頻道,並依 (platform, chat_id, thread_id) 去重。

Telegram cron 主題(TELEGRAM_CRON_THREAD_ID

當 Telegram 主題模式啟用時,根 DM 被保留為系統大廳——發送到那裡的回覆會被大廳提醒擋回,且 reply_to_message_id 會被丟棄,因此你無法回覆出現在主聊天中的 cron 訊息。

將 cron 指向專用的論壇主題:

  1. 在 Telegram 中,開啟機器人 DM 並建立一個名為例如 Cron 的主題。長按主題標題 → 複製連結;尾端的整數就是該主題的 message_thread_id
  2. 在你的 .env 中設定 TELEGRAM_CRON_THREAD_ID=<該 id>

這僅適用於 cron 遞送。TELEGRAM_HOME_CHANNEL_THREAD_ID(用於其他地方,例如重啟通知)不受影響。明確的 deliver="telegram:chat_id:thread_id" 目標仍然優先於環境變數。對 cron 訊息的回覆現在會出現在現有的主題 session 中,因此你可以直接處理。

回應包裝

預設情況下,遞送的 cron 輸出會加上標頭和標尾包裝,讓接收者知道這來自排程任務:

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

<agent output here>

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

若要遞送不帶包裝的原始 agent 輸出,將 cron.wrap_response 設為 false

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

靜默抑制

如果 agent 的最終回應包含 [SILENT],遞送會完全被抑制。輸出仍會儲存在本地供審計使用(在 ~/.hermes/cron/output/ 中),但不會向遞送目標發送任何訊息。

這對監控型排程任務很有用——它們只在有問題時才需要報告:

Check if nginx is running. If everything is healthy, respond with only [SILENT].
Otherwise, report the issue.

失敗的排程任務無論是否有 [SILENT] 標記都會遞送——只有成功的執行才能被靜默。對於靜默的監控排程任務,請在 prompt 中指示 agent 在沒有可報告事項時僅回覆 [SILENT]

腳本逾時

預執行腳本(透過 script 參數附加)的預設逾時為 120 秒。如果你的腳本需要更長時間——例如包含隨機延遲以避免類似機器人的時序模式——你可以增加這個值:

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

或者設定 HERMES_CRON_SCRIPT_TIMEOUT 環境變數。解析順序為:環境變數 → config.yaml → 120 秒預設值。

無 Agent 模式(純腳本排程任務)

對於不需要 LLM 推理的循環排程任務——經典的看門狗、磁碟/記憶體警報、心跳、CI ping——在建立時傳入 no_agent=True。Scheduler 會按排程執行你的腳本並直接遞送其 stdout,完全跳過 agent:

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

語義:

  • 腳本 stdout(修剪後)→ 原樣作為訊息遞送。
  • 空白 stdout → 靜默 tick,不進行遞送。這是看門狗模式:「只有在出問題時才說話」。
  • 非零退出碼或逾時 → 會遞送錯誤警報,因此損壞的看門狗不會靜默失敗。
  • 最後一行為 {"wakeAgent": false} → 靜默 tick(與 LLM 排程任務使用的閘門相同)。
  • 不使用 token、不使用模型、不使用 provider 回退——排程任務永遠不會觸及推理層。

.sh / .bash 檔案在 /bin/bash 下執行;其他類型在當前 Python 解釋器(sys.executable)下執行。腳本必須位於 ~/.hermes/scripts/(與預執行腳本閘門相同的沙箱規則)。

Agent 會幫你設定這些

cronjob 工具的 schema 直接向 Hermes 暴露 no_agent,因此你可以在聊天中描述一個看門狗並讓 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。同一個工具也讓 agent 可以暫停、恢復、編輯和移除排程任務——因此整個生命週期都可以透過聊天驅動,無需任何人操作 CLI。

參見 Script-Only Cron Jobs 指南 取得實作範例。

使用 context_from 串接排程任務

Cron 排程任務在隔離的 session 中執行,沒有先前執行的記憶。但有時候一個排程任務的輸出恰好是下一個排程任務所需要的。context_from 參數會自動建立這個連接——Job B 的 prompt 會在執行時將 Job A 的最新輸出前置為上下文。

# Job 1: 收集原始資料
cronjob(
    action="create",
    prompt="Fetch the top 10 AI/ML stories from Hacker News. Save them to ~/.hermes/data/briefs/raw.md in markdown format with title, URL, and score.",
    schedule="0 7 * * *",
    name="AI News Collector",
)

# Job 2: 分類 — 接收 Job 1 的輸出作為上下文
# 從 cronjob(action="list") 取得 Job 1 的 ID
cronjob(
    action="create",
    prompt="Read ~/.hermes/data/briefs/raw.md. Score each story 1–10 for engagement potential and novelty. Output the top 5 to ~/.hermes/data/briefs/ranked.md.",
    schedule="30 7 * * *",
    context_from="<job1_id>",
    name="AI News Triage",
)

# Job 3: 發送 — 接收 Job 2 的輸出作為上下文
cronjob(
    action="create",
    prompt="Read ~/.hermes/data/briefs/ranked.md. Write 3 tweet drafts (hook + body + hashtags). Deliver to telegram:7976161601.",
    schedule="0 8 * * *",
    context_from="<job2_id>",
    name="AI News Brief",
)

運作原理:

  • 當 Job 2 觸發時,Hermes 從 ~/.hermes/cron/output/{job1_id}/*.md 讀取 Job 1 的最新輸出
  • 該輸出會自動前置到 Job 2 的 prompt 前
  • Job 2 不需要硬編碼「讀取這個檔案」——它作為上下文接收內容
  • 串接可以是任意長度:Job 1 → Job 2 → Job 3 → ...

context_from 接受的格式:

格式範例
單一 job ID(字串)context_from="a1b2c3d4"
多個 job ID(列表)context_from=["job_a", "job_b"]

輸出會按列出的順序串接。

適用時機:

  • 多階段管線(收集 → 過濾 → 格式化 → 遞送)
  • 相依任務,其中第 N 步的工作依賴第 N−1 步的輸出
  • 扇出/扇入模式,其中一個排程任務彙整來自多個其他排程任務的結果

Provider 恢復機制

Cron 排程任務繼承你設定的回退 provider 和 credential pool 輪替。如果主要 API key 被限流或 provider 回傳錯誤,cron agent 可以:

  • 回退到替代 provider,如果你在 config.yaml 中設定了 fallback_providers(或舊版的 fallback_model
  • 輪替到下一個 credential,在你的 credential pool 中針對同一個 provider

這表示高頻率或在尖峰時段執行的 cron 排程任務更具韌性——單個被限流的 key 不會導致整個執行失敗。

排程格式

Agent 的最終回應會自動遞送——你不需要在 cron prompt 中為同一個目的地包含 send_message。如果 cron 執行中對 scheduler 已經要遞送的確切目標呼叫了 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       → 每週日凌晨 12:00

ISO 時間戳

2026-03-15T09:00:00    → 2026 年 3 月 15 日早上 9:00 一次性執行

重複行為

排程類型預設重複次數行為
單次執行(30m、時間戳)1執行一次
間隔(every 2hforever執行直到移除
Cron 表達式forever執行直到移除

你可以覆寫它:

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

以程式化方式管理排程任務

面向 agent 的 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=[] 可以移除所有附加的 skill。

Cron 排程任務可用的工具集

Cron 在沒有附加聊天平台的全新 agent session 中執行每個排程任務。預設情況下,cron agent 使用你在 hermes tools 中為 cron 平台設定的工具集——不是 CLI 預設值,也不是所有工具。

hermes tools
# → 在 curses UI 中選擇 "cron" 平台
# → 像 Telegram/Discord 等一樣切換工具集的開關

更精細的單一排程任務控制可透過 cronjob.create(或透過 cronjob.update 在現有排程任務上)的 enabled_toolsets 欄位實現:

cronjob(action="create", name="weekly-news-summary",
        schedule="every sunday 9am",
        enabled_toolsets=["web", "file"],      # 僅 web + file,不含 terminal/browser 等
        prompt="Summarize this week's AI news: ...")

當排程任務上設定了 enabled_toolsets 時優先使用;否則使用 hermes tools 的 cron 平台設定;再否則 Hermes 回退到內建預設值。這對成本控制很重要:在每個小型「抓取新聞」排程任務中攜帶 moabrowserdelegation 會膨脹每次 LLM 呼叫的工具 schema prompt。

完全跳過 Agent:wakeAgent

如果你的 cron 排程任務附加了預檢查腳本(透過 script=),該腳本可以在執行時決定 Hermes 是否應該調用 agent。輸出最後一行格式如下:

{"wakeAgent": false}

…cron 就會完全跳過本次 tick 的 agent 執行。適用於高頻率輪詢(每 1–5 分鐘),只有在狀態實際改變時才需要喚醒 LLM——否則你會不斷為零內容的 agent 回合付費。

# 預檢查腳本
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(照常喚醒 agent)。

配方:低成本的預執行閘門

wakeAgent 閘門讓你以 $0 的成本決定排程任務是否應該消耗任何 LLM token。三種模式涵蓋大多數使用場景。

檔案變更閘門 — 僅在監控的檔案自上次成功 tick 以來有新內容時才執行。Scheduler 會記錄每個排程任務的 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 將計數傳遞給 agent,讓 agent 知道要處理多少資料,而無需重新查詢。

#!/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 解析器嵌入 cron 子系統。

TIP

Hermes 自己的 ~/.hermes/state.db 是一個隨版本變更的內部 schema。不要從預執行閘門查詢它——請改用你自己的資料庫或 feed。

致謝:這組配方受 @iankar8 在 #2654 中的探索啟發,該 PR 提議新增 sql/file/command 觸發器作為平行機制。script + wakeAgent 閘門已經以 $0 的成本涵蓋了這三種情況,因此這項工作以文件形式呈現。

串接排程任務:context_from

Cron 排程任務可以透過在 context_from 中列出名稱(或 ID)來消費一個或多個其他排程任務的最新成功輸出:

cronjob(action="create", name="daily-digest",
        schedule="every day 7am",
        context_from=["ai-news-fetch", "github-prs-fetch"],
        prompt="Write the daily digest using the outputs above.")

被引用的排程任務的最新完成輸出會作為本次執行的上下文注入到 prompt 上方。每個上游條目必須是有效的 job ID 或名稱(參見 cronjob action="list")。注意:串接會讀取最新已完成的輸出——它不會等待在同一 tick 中正在執行的上游排程任務。

排程任務儲存

排程任務儲存在 ~/.hermes/cron/jobs.json 中。排程任務執行的輸出儲存在 ~/.hermes/cron/output/{job_id}/{timestamp}.md

排程任務可以將 modelprovider 儲存為 null。當這些欄位被省略時,Hermes 會在執行時從全域設定中解析它們。只有在設定單一排程任務覆寫時才會出現在排程任務記錄中。

儲存使用原子檔案寫入,因此中斷的寫入不會留下部分寫入的排程任務檔案。

獨立的 Prompt 仍然很重要

WARNING — 重要

Cron 排程任務在完全全新的 agent session 中執行。Prompt 必須包含 agent 所需的所有內容,而這些內容不是由附加的 skill 提供的。

不好的範例: "Check on that server issue"

好的範例: "SSH into server 192.168.1.100 as user 'deploy', check if nginx is running with 'systemctl status nginx', and verify https://example.com returns HTTP 200."

安全性

排程任務 prompt 在建立和更新時會被掃描,以偵測 prompt injection 和 credential 外洩模式。包含隱藏 Unicode 技巧、SSH 後門嘗試或明顯 secret 外洩載荷的 prompt 會被封鎖。



Subagent 委派