🤖HermesBlog
Hermes Feature Guides · パート 168/9/2026

Script-Only Cron Jobs: Automate Without Burning Tokens

Script-Only Cron Jobs — easy-to-understand guide based on official docs

guide-cron-script-only

スクリプト専用Cronジョブ:トークンを消費せずに自動化する

Hermesのcronジョブを触ったことがあるなら、そのパワーはもうご存知ですよね。でも、ここで一つ質問です。LLMに「考える」必要がなくて、ただスケジュール通りに何かを実行して、結果を教えてくれればいいだけ、という場合はどうでしょう?

そこで登場するのがスクリプト専用cronジョブです。これは、まさに「余計な機能なし」の自動化レイヤーだと思ってください。同じスケジューラー、同じ配信機能、そしてLLMトークン消費はゼロ。

スクリプト専用Cronジョブはどんな時に使うべき?

スクリプト専用ジョブが真価を発揮するのは、スクリプト自体が、あなたが見たいと思っているメッセージを正確に生成できる場合です。推論は不要、要約も不要。ただ、純粋で決定的な出力だけが必要な時です。

典型的なユースケースはこちら:

  • メモリ警告 – スクリプトがRAM使用率をチェックして「メモリ使用率92%」と出力
  • ディスク容量警告 – 同じ考え方で、指標が違うだけ
  • ハートビート – サービスがまだ生きている、その証拠を送る
  • スクリプトが答えを知っているモニタリング全般 – 壊れていたら知らせる、問題なければ黙っている

その素晴らしさは、スクリプトの信頼性とHermesの配信力を組み合わせられる点です。トークンコストも、レイテンシも、「ちょっと考えさせて」という遅延もありません。

セットアップ方法

一番簡単な方法は? チャットでHermesに頼むだけです。cronjobツールは、no_agent=Trueをいつ使うべきかを賢く判断します。スクリプトを書いて、全てセットアップしてくれます。

でも、手動でやりたい場合は、こんな感じのパターンです:

/cron add "every 1h" "このプロンプトは使われません" --script ~/.hermes/scripts/my-check.py --name "マイモニター" --deliver telegram

ちょっと待って、このプロンプト、変に見えますよね。説明します。

スクリプトが語る

スクリプト専用cronジョブでは、スクリプトの標準出力(stdout)がそのままメッセージになります。LLMは介在しません。つまり、スクリプトは、配信したい内容を正確に出力する必要があるのです。

簡単な例を見てみましょう:

#!/usr/bin/env python3
import shutil

total, used, free = shutil.disk_usage("/")
percent = used / total * 100

if percent > 90:
    print(f"⚠️ ディスク使用率 {percent:.1f}% — 今すぐ掃除してください!")
else:
    print("[SILENT]")

最後にある[SILENT]、見えますか? これが魔法の「静音」マーカーです。Hermesは出力に[SILENT]を見つけると、何も送信しません。あなたを煩わせる価値があるかどうかを、スクリプト自身が決めるのです。

[SILENT] のトリック

これは、モニタリングスクリプトにとって最高の機能です。毎時間「全部順調です」と通知が来る代わりに、実際に注意が必要な時だけHermesから連絡が来るようになります。

スクリプトのロジックはこうです:

  • 問題を検出? → アラートメッセージを出力
  • 問題なし?[SILENT] を出力

後はHermesが処理します。静かな時間帯に通知は来ませんし、通知疲れもありません。「健康なサーバーなのに、なんで午前3時にスマホが鳴るんだ?」ということもなくなります。

スクリプト専用 vs. hermes send

もう一つ、トークン消費ゼロのオプションを知っておくと便利です:hermes sendです。これは、すでにどこかで実行されているスクリプト(CIステップ、コミット後フック、デプロイスクリプトなど)があって、その出力をTelegramやDiscordにパイプで送りたい、という場合に使います。

./my-deploy-script.sh | hermes send --channel telegram

違いは何でしょうか? スクリプト専用cronジョブは繰り返し実行される、スケジュールされたチェック用です。hermes sendは、スクリプトが「話す時だ」と判断した一回限りの瞬間用です。

実例:ウェブサイト変更モニター

全てを組み合わせてみましょう。これは、ウェブページを監視し、何か変更があった時だけ知らせるスクリプトです:

import hashlib, json, os, urllib.request

URL = "https://example.com/pricing"
STATE_FILE = os.path.expanduser("~/.hermes/scripts/.watch-state.json")

content = urllib.request.urlopen(URL, timeout=30).read().decode()
current_hash = hashlib.sha256(content.encode()).hexdigest()

prev_hash = None
if os.path.exists(STATE_FILE):
    with open(STATE_FILE) as f:
        prev_hash = json.load(f).get("hash")

with open(STATE_FILE, "w") as f:
    json.dump({"hash": current_hash}, f)

if prev_hash and prev_hash != current_hash:
    print(f"CHANGE DETECTED on {URL}")
    print(f"Previous hash: {prev_hash}")
    print(f"Current hash: {current_hash}")
    print(f"\nFirst 2000 chars:\n{content[:2000]}")
else:
    print("[SILENT]")

セットアップは次のように行います:

/cron add "every 1h" "unused" --script ~/.hermes/scripts/watch-site.py --name "価格モニター" --deliver telegram

スクリプトはページを取得し、ハッシュを比較し、違いがある時だけ通知します。LLMトークンも、ノイズもなし。純粋な自動化です。

まとめ

スクリプト専用cronジョブは、トークン消費ゼロの自動化の主力ツールです。以下のようなケースに最適です:

  • 答えが二択であるような決定的なチェック
  • 高頻度モニタリング(LLMコストがかさむ場合)
  • LLMの解釈よりも、スクリプトの判断を信頼したいあらゆる場面

そして、何より素晴らしいのは、スクリプト専用ジョブとLLM搭載ジョブのどちらかを選ぶ必要がないことです。同じワークフロー内で混在させることができます。機械的なチェックにはスクリプトを使い、LLMにはもっと面白いこと、例えば、なぜそのウェブサイトの変更が重要なのかを要約させる、といった具合にです。

もっと深く知りたいですか? 完全なcronドキュメントデイリーブリーフィングボットチュートリアルで、LLM搭載の側面もチェックしてみてください。


📖 公式ドキュメント

この記事は Hermes Agent の公式ドキュメントに基づいています:公式ドキュメント › guides/automate-with-cron