◉CLAUDE LABEN
●2.1.296 — サブエージェントごとに autoCompactWindow を指定でき、ワークフロー用のモデルも環境変数で固定できます●HAIKU 5.5 — 2.1.293(10/07)から claude-haiku-5-5 が Anthropic API の既定の Haiku モデルになりました●SONNET 4.5 — Claude API での提供終了は 11/30、残り47日。移行先は Sonnet 5.5●Q&A — Mod が「エラーなしで何も描かれない」ときに見る3か所が共有されています●AGENTS.MD — Codex と Claude Code を同じフォルダで使うとき、AGENTS.md と CLAUDE.md の入口をどう分けるかの整理が出ています●NEW — 「cd して git add して commit」の承認が毎回出るのは、設定の抜けではなく仕様でした●2.1.296 — サブエージェントごとに autoCompactWindow を指定でき、ワークフロー用のモデルも環境変数で固定できます●HAIKU 5.5 — 2.1.293(10/07)から claude-haiku-5-5 が Anthropic API の既定の Haiku モデルになりました●SONNET 4.5 — Claude API での提供終了は 11/30、残り47日。移行先は Sonnet 5.5●Q&A — Mod が「エラーなしで何も描かれない」ときに見る3か所が共有されています●AGENTS.MD — Codex と Claude Code を同じフォルダで使うとき、AGENTS.md と CLAUDE.md の入口をどう分けるかの整理が出ています●NEW — 「cd して git add して commit」の承認が毎回出るのは、設定の抜けではなく仕様でした
記事一覧/Claude Code
⟐ Claude Code/2026-07-07上級

背景セッションが実行中のまま固まっていた — agents ビューにハートビートを添えて停滞を数分で捕まえる

Claude Code の agents ビューは背景セッションを一望できますが、実行中の表示は稼働の証明ではありません。ハートビートを外付けして、静かに固まったセッションを翌朝でなく数分で捕まえる運用設計を、実測とつまずきどころとともに共有します。

Claude Code262背景セッション無人運用9個人開発130可観測性5

✦ プレミアム記事

先週の火曜、深夜に回していた背景セッションのひとつが、朝まで「実行中」のまま止まっていました。

agents ビューを開くと、ほかの11本は緑のチェックが並んでいるのに、その1本だけがくるくると回転アイコンのまま。ログの末尾は7時間前で、そこから一文字も進んでいませんでした。処理そのものは軽い依存更新でしたから、本来なら数分で終わっているはずのものです。何が起きていたのかというより、「なぜ朝まで気づけなかったのか」のほうが、私にはこたえました。

私は個人開発でいくつかの壁紙アプリと技術ブログを運営していて、依存更新・変更履歴の下書き・クラッシュ要約・広告設定の点検といった細かな作業を、深夜に Claude Code のヘッドレス実行でまとめて走らせています。多い夜は12セッション。2026年7月6日の更新で agents ビューと背景セッションの信頼性が改善され、複数の実行を一枚の画面で見られるようになったことは、この運用にとって素直にありがたい変化でした。ただ、実際に一週間使ってみて、ひとつはっきりしたことがあります。agents ビューが教えてくれるのは「そこにセッションがある」ことであって、「そのセッションが動いている」ことではない、ということです。

その差を埋めるために私が組んだのが、外付けのハートビート層とリコンサイラでした。設計と実装を、順を追って共有します。

「実行中」が嘘をつく瞬間

まず、なぜ「実行中」の表示だけでは足りないのかを、失敗の側から整理します。

背景セッションが止まる原因は、大きく分けて二種類あります。ひとつはクラッシュで終わるもの。プロセスが落ちれば agents ビューの状態も失敗に変わりますから、これは見つけやすい部類です。厄介なのはもうひとつ、プロセスは生きているのに前に進んでいないタイプです。

私が実際に遭遇したものだけでも、こういう状態がありました。

停滞の種類プロセスagents ビューの表示実際の進捗
ネットワーク応答待ちのハング生存実行中停止
返ってこないツール呼び出し生存実行中停止
無音のリトライループ生存実行中実質停止
入力待ちで固着生存実行中停止

いずれも「実行中」と表示され続けます。プレゼンス(そこに在る)は真ですが、ライブネス(生きて進んでいる)は偽です。可観測性の言葉を借りれば、私たちが欲しいのは在席確認ではなく生存確認のほうなのです。

この区別は、無人運用では致命的な差になります。人が画面を見ている日中なら、回転アイコンが長いと違和感で気づけます。けれど背景セッションは、見ていないから背景に回しているわけで、違和感を抱く人がそこにいません。だから停滞は、翌朝までまるごと放置されます。

セッションの身元をコミットまで一本の糸で辿る設計については、以前可読なセッション名で無人実行に相関キーを通す記事に書きました。今回はその手前、そもそも「そのセッションは今も生きているのか」を問う層の話です。

プレゼンスとライブネスを分ける

設計方針はひとつだけです。agents ビューにライブネスの信号を外から足す。

具体的には、各背景セッションに一定の間隔で「まだ生きています」という小さな刻印を残させます。そして別の小さなプロセスが、その刻印の鮮度を見張ります。刻印が新しければ生存、古ければ停滞の疑い。これがハートビートの発想です。

なぜ外付けなのか。agents ビューやセッション状態そのものを改造することはできませんし、するべきでもありません。私たちが握れるのは、セッションの内側で何かが起きるたびに副作用として信号を出すこと、そしてその信号を外から観察することだけです。この二つを組み合わせれば、公式機能を一切壊さずにライブネス層を後付けできます。

刻印の中身は、驚くほど小さくて構いません。私が実際に書き込んでいるのは、セッション名・エポック秒・現在フェーズの三つだけです。

{"session":"wallpaper-ios-deps-0706-a3f","ts":1751850600,"phase":"tool:bash"}

ここで date の文字列ではなくエポック秒(ts)を使うのが肝心です。以前、ログの日付を素の date で書いていて UTC と JST がずれ、前日のファイルを上書きしてしまう事故をやりました。時刻の比較を機械にさせるなら、タイムゾーンの解釈が入り込まない整数で持つのが安全です。鮮度は「今のエポック秒 − ts」という引き算一回で出ます。

✦

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

この記事の続きを読む

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

この記事で得られること
✦agents ビューの「実行中」表示だけでは停滞を見抜けない理由と、プレゼンス(在席)とライブネス(生存)を分けて考える設計の勘所
✦PostToolUse フックで各セッションにハートビートを刻み、エポック秒でリコンサイラが停滞を判定する動くコード一式
✦検知の中央値が翌朝から9分台へ縮んだ実測と、思考中の無音・クラウド同期の書き込み競合・長い単発ツールの誤検知という三つの落とし穴の潰し方
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⟐ Claude Code2026-10-12
SPM に移したら、起動した瞬間にアプリが落ちるようになりました — dyld の一行を Claude Code と読み解いた記録
CocoaPods から Swift Package Manager へ移した直後、ビルドは通るのに起動した瞬間に落ちました。dyld の一行から原因を切り分け、直し方と確認コマンドまでをまとめます。
⟐ Claude Code2026-09-20
Pro を払っているのに Console に請求が立っていたとき、私が最初に見た一行
サブスクリプションと API の従量は別会計で、Claude Code はそのどちらでも動きます。どちらが選ばれているかを決めるのは優先順位で、ログインはその最下段です。status の読み方と、無人実行だけが別の答えを返す理由を書き残します。
⟐ Claude Code2026-09-10
plugin.json を1枚置くと、スキルの棚がまとめて外せる単位になります
スキルを用途ごとに色分けしたら、毎日使う一群は全体の5パーセントしかありませんでした。.claude-plugin/plugin.json を1枚置いてフォルダをプラグインに変え、その日に使わない棚をグループごと外せるようにするまでの手順と、途中で二度つまずいた読み込みの規則を書き残します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます