プロセスガード

エージェントはプロセスを残していきます。
AgentsRoomがそれを見つけます。

AIコーディングエージェントは、呼び出すツールごとに本物のシステムプロセスを起動します。ほとんどは数秒で終わります。一部は永遠に終わらず、CPUをまったく使わないまま数ギガバイトのメモリを人質に取り続けます。

プロセスガードはエージェントの子プロセスを走査し、進捗が止まったものを通知し、原因となったエージェントの名前を示し、ワンクリックで終了させます。あなたの知らないところで何かが終了させられることはありません。

プロセスガード
スキャン:1回 / 分
Full-Stack Dev の子プロセス
ripgrep18 MB
71%
tsc --noEmit1.4 GB
96%
search6.4 GB
3%
node2.1 GB
0%
スタックしたプロセス 2件
6.4 GB を占有、CPU 0%
23分間スタック、進捗なし
Full-Stack Dev が起動
プロセスを終了
大きい + 古い + CPUが動いていない。3つ揃わなければ何も通知されません。メモリはすぐに戻ります

プロセスガードが実際に見ているもの:あるエージェントが起動したプロセスと、そのうちどれが働くのをやめたか。

AIコーディングエージェントは1つのプロセスではありません。エージェントが呼び出すツールは、そのたびにあなたのマシンで本物のプロセスを起動します。検索、ビルド、型チェック、テスト実行、スクリプト。それを並行して動く数体のエージェント分、丸一日ぶん掛け合わせると、あなたが一度も目にしないまま生まれて葬られるプロセスが数百になります。

そのほとんどは終わります。問題は終わらないほうです。パターンが正規表現エンジンを爆発させてしまった検索は、クラッシュもしなければ遅くもなりません。メモリを確保し、圧縮メモリに押し出され、あとはCPU 4%でページフォルトを起こし続けるだけの一生を送ります。終わることは永遠にありません。誰も殺してくれません。そして起動元のエージェントが閉じられると、initプロセスに付け替えられ、マシン上の誰も責任を持たない孤児プロセスになります。

だから遅さはじわじわ忍び寄ります。どこかで派手に壊れるわけではなく、一日かけて積み上がるだけです。そしてこの形こそが、人に見当違いの犯人を疑わせます。熱暴走か、エージェントの数が多すぎるのか、アプリのメモリリークか。私たちが実測したセッションでは、アプリ自体は91プロセスで2.8 GB、8つのエージェントCLIは合わせて1.6 GBでした。どちらも原因ではありませんでした。

プロセスガードはセーフティネットです。エージェントが残していったものを監視し、どれがスタックしていて誰が起動したのかを伝え、終了させられるようにします。根本原因はこれからも変わり続けます。別のツール、別のパターン、別のプロバイダー。ネットのほうは変わらなくて済みます。

AIエージェントを動かすマシンが遅くなる理由

以下の数字は、8エージェントを動かした16 GBのノートPCでの実測セッションのものです。推定値は1つもありません。

マシンは5時間半動き続けていました。熱の問題はまったくありません。サーマルスロットリングの記録はゼロ、バッテリーは30.6度。ロードアベレージは8コアで17から21、CPUは56%の時間をカーネルで過ごし、アイドルは1.5%でした。この比率がすべてを物語ります。本当に仕事をしているマシンはユーザーコードに時間を使います。システム時間が56%のマシンは、メモリを圧縮し、展開し、スワップすることしかしていないカーネルです。

スタックした検索プロセス7件が、それぞれ3.9から8.0 GBを抱え、RAMが16 GBしかないマシンで合計41.8 GBを占有していました。スワップは23.5 GB中22.3 GB、起動以降におよそ993 GBがスワップに書き込まれていました。その7件を終了させたところ、エージェントを1つも再起動せず、アプリも再起動せずに、15.5 GBが即座に戻ってきました。

これを手作業で誰も捕まえられない理由は、いつものツールがこの件について嘘をつくからです。macOSでは、スタックしたプロセスが実際には8 GBを抱えているのに、レジデントメモリ20 MBと表示されることがあります。触れたものすべてがメモリコンプレッサーを通ったからです。私たちは動いているものを実際に計測し、実フットプリント14 GBに対してレジデントは4.7 GBでした。仮想サイズも役に立ちません。このプラットフォームではlaunchdでさえ約440 GBの仮想サイズを報告するので、そこで絞り込むとマシン全体が引っかかります。

一日、8エージェント、16 GB09:14
マシンのメモリすべて正常
スワップ11%
実測したセッションです。イメージ図ではありません。15.5 GB が即座に復帰

同じセッションを時間ごとに:もう誰も使っていないメモリの塊と、それを解放したときに何が起きるか。

41.8 GB
16 GBのマシンでスタックした7プロセスが占有
95%
スワップ使用率、23.5 GB中22.3 GB
21
8コアでのロードアベレージ、システム時間56%
993 GB
5時間半でスワップに書き込まれた量

そしてこれらのプロセスには、明日もまだそこに居座ることを保証する4つの性質があります。

終わることがない

自分のメモリがスワップに入っているので、計算する代わりにページフォルトで時間を使います。健全な検索は1コアを使い切ります。こちらは4%です。このスパイラルから抜け出す道はなく、どれだけ待っても何も変わりません。

死ぬこともない

ツール呼び出しにタイムアウトはありません。50分間アイドルのプロセスについて、マシン上の何ひとつ意見を持ちません。誰かが殺すか、マシンが再起動するまで、そこに居座り続けます。

起動元のエージェントより長生きする

エージェントのタブを閉じてもプロセスは生き残ることがあり、initプロセスに付け替えられます。その時点で、もう何にも紐づいていません。孤児プロセスであり、誰も回収しません。実測した7件のうち2件は、すでにその状態でした。

積み上がっていく

検証パスごとに1つ、運の悪い検索ごとに1つ。だから遅さは一日を通して増える一方で、再起動すると直ったように見えます。何も直っていません。カウンターがゼロに戻っただけです。

プロセスガードがすること

エージェントが起動したプロセスを監視し、手を出す対象は意図的にごく狭く絞っています。

本当のメモリを測る

レジデントサイズではありません。それはスタックしたプロセスを数ギガバイト分も過小評価します。プロセスガードは圧縮されたページとスワップアウトされたページを含む実フットプリントを読むので、20 MBと表示しながら8 GBを抱えているプロセスもありのまま見えます。

RAMだけでなくCPUも見る

メモリだけを見ていたら、マシン上のあらゆるビルドが通知されてしまいます。プロセスガードはプロセッサ使用率を2回のスキャンの間の変化率として測るので、さんざん働いたあとで固まったプロセスもちゃんと捕まり、本当に働いているビルドは放っておかれます。

孤児プロセスを捕まえる

起動元のエージェントより長生きしたプロセスは、それ自体を理由に通知されます。ほかの誰も回収しないからです。所有関係はプロセスがまだ紐づいているうちに記憶されます。そこが確定できる唯一の瞬間だからです。

ワンクリックで終了

ステータスバーのチップが、スタックした各プロセスを、起動したエージェント、メモリ、経過時間、CPUとともに一覧にします。1つ終了させれば、それがフォークしたものも一緒に終わります。メモリはすぐに戻り、エージェントは動き続けます。

macOS、Windows、Linux

メモリについて本当のことを言うには、システムごとに違う測り方が要ります。macOSでは圧縮ページ、Linuxではレジデントとスワップアウト分、Windowsではプライベートコミット。3つとも実装済みで、予定ではありません。

コストはほぼゼロ

プロセスのスナップショットを1分に1回、824プロセスが動くマシンで約40 msという実測値です。高価なメモリ測定は、すでにスタックしていそうなものがあるときにしか走りません。エージェントが動いていない間はスキャン自体が走りません。

オオカミ少年にならないためのルール

ビルドを通知してくる番人は、1週間で切られる番人です。だからプロセスがメモリだけを理由に通知されることはありません。大きくて、しばらく生きていて、プロセッサを使うのをやめている。この3つが同時に揃う必要があります。

仕事をしているのは3つめの条件です。型チェックやバンドラーも数分にわたって数ギガバイトを抱えますが、そのあいだ1コアを使い切っています。スワップに囚われたプロセスは4%前後です。計算する代わりにページフォルトを待つことに一生を費やしているからです。この差こそ、働いているマシンと溺れているマシンを分けるものであり、両者を確実に分ける唯一のシグナルです。

プロセッサ使用率も、読むのではなく測ります。システムツールが出すいつもの数字はプロセスの一生の平均なので、20分働いたあとで固まったものも忙しそうに見えたままです。プロセスガードは2回のスキャンの間に消費されたプロセッサ時間を比べるので、見ているのは直近1分であって直近1時間ではありません。

仕組み

1分に1回、4ステップ。しかも高価なステップはほとんど走りません。

01

マシンの安価なスナップショットを1枚

毎分、プロセスガードは動作中の全プロセスのスナップショットを1枚だけ撮り、各エージェントターミナルの配下のツリーをたどります。824プロセスが動くマシンでの実測コストは約40 ms。エージェントが1つも動いていない間は、これ自体が起きません。

02

容疑者を絞り込む

そのスナップショットから、あなたが決めたしきい値より長く生きていて、もうプロセッサを使っていないエージェントの子プロセスだけを残します。通常の使い方ならこのリストは空で、すべてここで止まります。

03

スタックしていそうなものだけ測る

その短いリストに対してだけ、プロセスガードは圧縮ページとスワップアウトページを含む実メモリ測定のコストを払います。測れなかったプロセスが通知されることはありません。わからないことは判定ではないからです。

04

報告して、判断はあなたに任せる

ステータスバーにチップが現れ、通知が一度だけ知らせます。リストを開けば、そのプロセスが何で、どれだけ抱えていて、どれくらいスタックしていて、どのエージェントが起動したのかが見えます。終了させるかどうかはあなた次第です。

ガードレール

決して手を出さないもの

プロセスを終了できるツールは、自分の管轄をごく狭く定めなければなりません。ここに挙げる制限は構造的なもので、あなたが有効にするのを忘れられるようなオプションではありません。

  • エージェントのCLIそのもの。 どのプロバイダーを使っていても、プロセスガードはアプリがそのターミナルを起動するのに使ったバイナリを保護します。その名前はハードコードされた一覧からではなく起動そのものから読むので、同じCLIのサブプロセスも、どんな深さでも保護されます。
  • 開発コマンドのターミナル。 アイドル状態の開発サーバーは、暴走プロセスの条件をすべて満たします。大きく、古く、プロセッサを使っていない。しかもそれは、あなたが本当に動かしておきたい唯一のプロセスです。監視されるのはエージェントのターミナルだけなので、開発サーバーが視界に入ることはありません。
  • シェルとアプリ自身の配管。 ターミナルヘルパーと、エージェントが動いているシェルは、構造上除外されています。候補になりうるのは、エージェントCLIの配下にあるツールのプロセスだけです。
  • 自分で引き取っていないもの。 プロセスを終了できる唯一の経路は、プロセスガードがエージェント自身のツリーから拾っていないプロセスをすべて拒否します。あなたのマシンの別の何かを終了させる手段になることはありません。

そして、あなたが望まないかぎり自動で終了されるものは何もありません。既定ではプロセスガードは見つけたものを報告し、決めるのはあなたです。大きくて静かなプロセスが想定内かどうかを知っているのは、あなただからです。

本領を発揮する場面

どれも実際にあった状況で、想像上の話は1つもありません。

朝9時より夕方6時のほうが遅いマシン

壊れた瞬間があるわけではなく、一日かけてじわじわ下がっていくだけ。この形はほぼ必ずスタックしたプロセスの蓄積で、どの瞬間を切り取っても異常に見えないぶん、手作業では最も診断しづらいものです。

複数のエージェントを並行で動かす

動かすエージェントが増えるほどツール呼び出しは増え、そのどれかが固まる可能性も増えます。1回あたりの失敗率はごくわずかですが、並行作業の一日を掛ければ、もうわずかではなくなります。

戻ってこない検索

正規表現エンジンを爆発させるパターンは、数百キロバイトのファイルに対して数ギガバイトを確保します。エージェントはそれを待ち、あなたはエージェントを待ち、マシンが両方の代金を払います。

エージェントを閉じたのに、プロセスは残った

タブを閉じても何かが解放されるとはかぎりません。すでに切り離されていたプロセスはメモリを抱えたまま、アプリから見える何かとの最後のつながりを失います。

16 GBのノートPC

RAMがたっぷりあるマシンなら、スタックしたプロセスが数件あっても長いあいだ隠れていられます。16 GBのノートPCではすぐにスワップに届き、システムがメモリを圧縮し始めた瞬間から、すべてのエージェントが一斉に遅くなります。

アプリを疑う前に

AgentsRoomを開いた状態でマシンが這うように遅くなれば、まずアプリが疑われます。プロセスごとの本当の数字が、それぞれを起動したエージェントとセットで手に入れば、疑いは実際に確かめられるものに変わります。

決めるのはあなた

限界を決めるのはあなた

既定値は意図的に慎重にしてあります。以下はすべて設定のターミナルタブにあり、どれもAgentsRoomのMCPツール経由でエージェントが読むことも変更することもできます。

エージェントの子プロセスを監視する
既定でオン。オフにすれば、スキャンは一切、二度と走りません。
メモリしきい値を超えたら通知する
既定で2ギガバイト。それ以下なら、スタックしたプロセスのためにあなたの手を止める価値はありません。RAMに余裕のあるワークステーションでは上げ、メモリが厳しいノートPCでは下げてください。
最低限の生存時間を過ぎてから
既定で5分。遅くても正当なタスクが通知されないようにしているのがこれです。あなたが本当に必要としているもので、プロセッサをまったく使わずに5分かかるものは、まずありません。
スタックしたプロセスを自動で終了する
既定でオフ。これは慎重さというより、意図した製品判断です。プロセスガードは判断を下していますが、大きくて静かなプロセスが想定内だったかを知っているのはあなただけです。オンにすれば自分で動き、事後に通知します。

プロセッサのしきい値はわざと公開していません。働いているビルドとスタックしたプロセスを分けているのがこの測定であり、好みの問題ではないからです。

よくある質問

つまりAgentsRoomが私のコンピュータを遅くしているということ?

いいえ。そして、まさにそのためにこの機能があります。実測したセッションでは、アプリは91プロセスで2.8 GB、8つのエージェントCLIは合わせて1.6 GBでした。41.8 GBを抱えていたのは、固まったツールのプロセスです。AgentsRoomはたまたま、すべてのエージェントとそれが起動したすべてのプロセスを見られる唯一の場所なので、判定を下せる唯一の場所でもあります。

ビルドやテスト実行を殺してしまわない?

いいえ。プロセスが通知されるのは、大きくて、かつ古くて、かつプロセッサを使うのをやめている場合だけです。本当に働いているビルドは1コアを使い切るので3つめの条件を満たさず、候補になることはありません。この条件は、まさにこの区別のために存在します。

開発サーバーも監視される?

いいえ。これからもしません。アイドル状態の開発サーバーは暴走プロセスの条件をすべて満たします。メモリをたくさん抱え、何時間も動き続け、リクエストの合間はプロセッサを使いません。監視されるのはエージェントターミナルの子プロセスだけなので、開発コマンドは構造上、対象外です。

エージェント自体を終了させてしまうことはある?

いいえ。エージェントのCLIは、どのプロバイダーを使っていても保護されます。保護の根拠は既知の名前の一覧ではなく、アプリがそのターミナルを起動するのに使ったバイナリです。シェルとアプリ自身のターミナルヘルパーも同様に除外されています。

孤児プロセスとは何で、なぜ特別扱いされるの?

親が終了したプロセスは、システムのinitプロセスに付け替えられます。その瞬間から、起動したエージェントとの結びつきは何も残らないので、誰も片付けません。AgentsRoomはプロセスがまだ紐づいているうちに所有関係を記憶します。そこが確定できる唯一の瞬間だからで、おかげであとからでも報告できます。

監視そのもののコストは?

プロセスのスナップショットを1分に1回、824プロセスが動くマシンで約40 msという実測値です。より高価なメモリ測定は、すでにスタックしていそうなプロセスにしか走らないので、通常の使い方では走らないということです。そしてエージェントが動いていない間は、スキャン自体が存在しません。

アクティビティモニタのメモリ欄を見ればいいのでは?

macOSではその欄が問題を1桁分も小さく見せるからです。圧縮メモリに押し出されたプロセスは、8 GBを抱えながらレジデント20 MBと表示されることがあります。私たちは動いているものを実際に計測し、実フットプリント14 GBに対してレジデントは4.7 GBでした。仮想サイズも同じくらい役に立ちません。システムプロセスでさえ数百ギガバイトを報告します。

Claude CodeやCodex、ほかのツールでも動く?

はい。プロセスガードは特定のツールやプロバイダーについて何も知りません。あなたが起動したエージェントターミナルの子プロセスを監視し、保護するCLIは起動そのものから読み取ります。プロバイダーが増えても、ここは何も変わりません。

WindowsとLinuxでも動く?

はい。メモリを正直に測るには、プラットフォームごとに違う測り方が要ります。macOSでは圧縮ページ、Linuxではレジデントとスワップアウト分、Windowsではプライベートコミット。3つとも実装済みです。

確認なしにプロセスを終了させることはある?

あなたがその設定をオンにしないかぎりありません。既定では、見つけたものをエージェント、メモリ、経過時間、プロセッサ使用率とともに報告し、決めるのはあなたです。自動終了は設定項目で、初期状態ではオフです。

自分のプロセスを終了させられたエージェントはどうなる?

エージェントは動き続けます。そのツール呼び出しは永遠に固まる代わりにエラーを受け取ります。それが望ましい結果です。どのみちそのプロセスが終わることはなかったからです。何も再起動されず、コンテキストも失われません。

根本原因は直る?

いいえ。直そうともしていません。原因は変わります。今日はあるツール、明日は別のパターン、来月は別のプロバイダー。これはセーフティネットであり、まだ誰も見たことのない原因が来ても動き続けるように作られています。

こちらもおすすめ

誰も使っていないプロセスに払い続けるのをやめる

AgentsRoomは無料でダウンロードでき、プロセスガードは初回起動から有効です。

無料AgentsRoomをダウンロード

コンパニオンアプリ:外出先でもエージェントを確認

Claude、Codex、Antigravity CLI、またはその他の AI プロバイダーを使用します。

拡張機能を入手
Chrome Web Store

バグや要望を公開バックログに直接送信できます。

実際の AgentsRoom の様子。

マルチプロジェクト
マルチプロバイダー
マルチエージェント
ライブステータス
ファイル差分
モバイルアプリ
ライブプレビュー
エージェントチーム
ブラウザテスト
バックログ駆動開発
プロンプトライブラリ
スキルライブラリ
すべての機能を見る