Hermes Agent Wiki 非公式・日本語wiki

セッションの定期確認(/heartbeat)

目次

/heartbeat は、いま開いているセッションに繰り返しの指示をひとつ持たせます。セッションが手すきで、決めた間隔が過ぎていれば、その指示がふつうのユーザー発言として流れます。同じ会話、同じ文脈、同じプロンプトキャッシュのままです。

/heartbeat every 10m Check the deployment and report meaningful changes

Prime-Agent の /heartbeat に着想を得たものです。Hermes 版は、メッセージの流れに関する厳しい決まりを守っています。定期確認が差し込まれるのは応答と応答のあいだだけで(実行の途中には割り込みません)、形もふつうのユーザー発言そのものです。

heartbeat と cron のどちらを使うか

見た目は似ていますが、役割が違います。

/heartbeat hermes cron
走る場所 この会話の中。文脈も、ここまでのやり取りの記憶もそのまま 実行のたびに、独立した新しいセッション
プロセスを再起動しても残るか 状態は残ります(SessionDB)。プラットフォーム連携の見張りは、再起動のあと自動で戻ります はい。予定を持つ仕組みそのものが残ります
いくつ持てるか 1 セッションにつき 1 つ ジョブ数の上限なし
向いていること 「作業しながら、*このやり取りの中で* X を見張っておきたい」 定型のジョブ、報告、見張り、配信

目安として、繰り返したい指示にこの会話の文脈が要るなら /heartbeat、それだけで完結するジョブなら cron を使います。

コマンド

コマンド 何をするか
/heartbeat every <interval> <prompt> そのセッションの定期確認を設定(または置き換え)します。間隔は 90s、10m、2h、1d のように書きます(最短 60 秒)。
/heartbeat または /heartbeat status 設定されている指示、間隔、次に流れるまでの時間を表示します。
/heartbeat pause 設定を消さずに、流れるのを止めます。
/heartbeat resume 再開します(タイマーを取り直すので、止めていた分がいきなり流れることはありません)。
/heartbeat clear 定期確認を取り消します。

/hb は同じ意味の短い書き方です。CLI、TUI・デスクトップアプリ、各プラットフォーム連携で使えます(Slack では /hermes heartbeat … の形になります)。

動きの詳細

  • 手すきのときだけ。 実行中の応答に割り込むことはありません。時間が来たときにエージェントが動いていれば、次に手すきになったときに流れます。プラットフォーム連携では、見張っているセッションが手すきになると自分から動き出すので、新しい受信メッセージは要りません。
  • 飛ばした分はまとめて 1 回。 セッションが忙しかったり、プロセスが動いていなかったりして何回分か過ぎていても、流れるのは1 回だけで、たまった分が押し寄せることはありません。タイマーは流れるたびに取り直します。
  • ユーザーの発言が優先。 待っているユーザーの発言があれば必ずそちらが先で、定期確認は入力の列が空くまで待ちます。
  • 設定した場所のもの。 メッセージのチャットで設定した定期確認は、同じセッションを TUI・デスクトップアプリで開いていても、ゲートウェイから流れてそのチャットに返信します。見ている側が時間の到来を横取りすることはありません。
  • キャッシュを壊さない。 差し込まれるのはふつうのユーザー発言です。システムプロンプトも、使えるツールの構成も変わりません。
  • 連携側の復帰。 起動のときに、保存されている今の会話とスレッドの宛先を使って、持ち主のプロファイルのまま、動いている定期確認を戻します。保存先の一時的な不調や連携の停止があっても、確認のたびに復帰をやり直します。止めてあるもの、取り消したもの、休止中の会話は戻りません。新しくメッセージを送る必要もありません。
  • どこに残り、どこで切れるか。 状態は SessionDB.state_meta に heartbeat:<session_id> という鍵で入っていて、文脈の圧縮でセッションが入れ替わってもついていきます。メッセージ連携では、会話をリセットしたり、別の会話に切り替えたり、休止したりすると、その会話の定期確認は消えます。あとからその会話を開き直しても戻りません。実際に流れるには、持ち主のプロセス(CLI のセッションか、プラットフォーム連携)が動いている必要があります。連携側でいったん受け付けた分も、どのセッションで動かすかが決まったあと、エージェントが動き出す前にもう一度確かめます。圧縮でできた続きのセッションにはついていきますが、リセットしたり切り替えたりしたあとの会話へ古い指示を持ち込むことはありません。
  • 回数の数え方。 連携側は、時間が来た分を受け付けた時点で 1 回ぶんを押さえます。その試行がエージェントの実行に入る前に終わったとき(取り消し、宛先・権限・緊急停止・準備段階での却下を含みます)は、そのあいだに設定が変わっていなければ 1 回ぶんを戻します。エージェントの実行に入ったあとは、途中で失敗しても中断されても 1 回として数えたままです。この回数は、モデルがちゃんと答えたことや、外へ送れたことの証拠にはなりません。プロセスが突然落ちると、戻す処理そのものが動かないこともあります。
  • 言うことがなければ黙る(ゲートウェイ)。 定期確認のターンは、沈黙の印(NO_REPLY / [SILENT])だけで終わることがあります。このときゲートウェイは何も送りません。人が送ったメッセージへの返答が印だけで返ってきた場合とは違います(そちらは「もう一度試してください」という案内が見える形で出ます)。定期確認が動いているあいだは、入力中の表示も、ツールの進み具合も、流れてくる下書きも、「まだ作業中です」の吹き出しも出ません。結果を届けるときは、定期確認を設定したメッセージを引用せずにチャットやトピックへ流します。承認を求める問いかけと失敗は、これまでどおり見える形で出ます。
  • 仕事を作り出さないための歯止め。 差し込まれる指示には、めぼしい変化がなければ短く答えて終わるように書いてあります。何も起きていないときに無駄な作業が生まれません。

例

You: /heartbeat every 15m Check whether the CI run for PR #1234 finished; summarize the result when it does

  ♥ Heartbeat set (every 15m): Check whether the CI run for PR #1234 finished; ...

[15 minutes of you working on other things in the same session]

Hermes: [Heartbeat — recurring instruction, fires every 15m]
  💻 gh pr checks 1234   (1.2s)
  CI is still running (14/37 checks complete). Nothing to report yet.

答えが変わらなくなったら /heartbeat clear で外します。そのまま見張らせておいても構いません。