ANTIGRAVITY LABEN
記事一覧/Agents & Manager
Agents & Manager/2026-06-29上級

止まったまま生きているエージェントを見抜く — 進捗ハートビートとウォッチドッグの設計

プロセスは生きているのに作業が進まない——バックグラウンドエージェントで一番厄介なこの状態を、生存ではなく進捗で見張る設計に切り替えて検知し、安全に止めるための実装をコード付きで整理します。

バックグラウンドエージェント3Antigravity288ウォッチドッグタイムアウト設計運用設計20

プレミアム記事

朝、ダッシュボードは緑のままでした。プロセスは動いている、CPUもわずかに食っている、ログの最終行も「モデルに問い合わせ中」で止まっている——なのに、6時間前から1文字も先に進んでいませんでした。

私自身、個人開発で記事生成のエージェントを夜間に走らせています。その夜は外部APIの応答が返らず、リトライにも入らず、ただ待ち続けていました。プロセスは確かに生きていました。だから「生きているか」を見る監視は、ずっと緑を返し続けていたのです。問題は、生存と進捗を同じものとして扱っていたことでした。

「生きている」と「進んでいる」は別の問い

サーバ監視の習慣で、私たちはつい「プロセスが存在するか」「ポートが応答するか」を健全性の指標にします。短時間で終わるリクエストならそれで十分です。けれどバックグラウンドエージェントは、1回のジョブが数分から数十分かかり、その間ずっと「正常に存在しつつ、何も進めていない」状態になり得ます。

停滞の典型は、応答が返らない外部呼び出し、解けない依存関係を前にした無限の思考ループ、そして自分で自分を待つデッドロックです。どれもプロセスは生きています。生存監視(liveness)はこれらを一切捕まえられません。必要なのは**進捗監視(progress)**です。

監視の種類答える問い停滞を捕まえられるか
生存監視(プロセス存在・ポート応答)動いているか捕まえられない
ログ出力の有無何か喋っているか「待機中」を吐き続けると誤魔化される
進捗監視(前進した量)仕事が進んだか捕まえられる

ログを吐いているかどうかで判断するのも危険です。「待機中…」を出し続けるコードは、喋ってはいても進んでいません。見るべきは饒舌さではなく、前進した量です。

進捗をマーカーとして外に出す

進捗で見張るには、まずエージェント自身が「ここまで進んだ」を外部から観測できる形で残す必要があります。単調増加するステップ番号と、最後に前進した時刻を、共有できる場所へ書き出します。

# progress.py — 進捗マーカーを共有ファイルに刻む
import json, os, tempfile, time
 
def mark_progress(path: str, step: int, note: str = "") -> None:
    """step は単調増加。前進したときだけ呼ぶ(待機中には呼ばない)。"""
    payload = {"step": step, "note": note, "ts": int(time.time())}
    fd, tmp = tempfile.mkstemp(dir=os.path.dirname(path) or ".")
    with os.fdopen(fd, "w") as f:
        json.dump(payload, f)
    os.replace(tmp, path)        # 原子的に差し替え

ここで大事なのは、前進したときだけ mark_progress を呼ぶという規律です。ハートビートを「定期的に必ず打つ」設計にすると、停滞していても鼓動だけは続き、結局は生存監視に逆戻りします。鼓動は「生きている合図」ではなく「進んだ合図」でなければ意味がありません。

エージェント本体では、意味のある区切りごとにステップを進めます。

mark_progress(P, 1, "収集完了")
# ... 外部API呼び出し(ここが固まりやすい) ...
mark_progress(P, 2, "下書き生成")
# ... 整形 ...
mark_progress(P, 3, "検証通過")

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
「生きているか」と「進んでいるか」はまったく別の問いだと理解でき、生存監視だけでは沈黙した停滞を見逃す理由が腑に落ちる
進捗ハートビート・無進捗タイムアウト・安全な強制終了までを通した完全な実装(Python のウォッチドッグと bash の組み込み例)。そのまま自分のジョブに差し込める
個人開発で夜間に走らせていたエージェントが朝まで無言で固まっていた実体験から、どこに進捗マーカーを刻むべきかの判断基準が得られる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

Agents & Manager2026-06-29
二重起動するバックグラウンドエージェント — リースとフェンシングトークンで止める設計
同じスケジュールジョブが2台のマシンから同時に走り、成果物を上書きし合う。Antigravity 2.0 のバックグラウンドエージェントで起きるこの事故を、リースとフェンシングトークンで根本から防ぐ設計をコード付きで整理します。
Agents & Manager2026-06-21
無人エージェントの実行ログを、ディスクを溢れさせずに後から追える形で残す
スケジュール実行のエージェントは、落ちた理由を後から追えなければ直せません。実行ログをディスクを溢れさせずに残すため、3層保持・スキーマ版付与・圧縮ジョブで設計する方法を、複数サイトを自動運用する個人開発の現場からまとめます。
Agents & Manager2026-04-29
Antigravity エージェントの『失敗から学ばせる』を仕組み化する — 失敗履歴を次のタスクに活かす設計
Antigravity エージェントは同じ失敗を繰り返すことがあります。失敗履歴を構造化して次の実行に渡すことで、個人開発の運用コストを抑えながら賢く育てる方法を、廣川政樹の運用例とともに解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →