起動時フックが増えすぎてエージェントが立ち上がらなくなるのを直す
Claude Code が全タブで 'Subprocess initialization did not complete within 60000ms' を出すのは認証でもネットワークでもなく、起動時フックの合計時間超過。合計の測り方、timeout を削らずに裏回し/cache-first で減らす型、npx 起動の MCP が 30秒タイムアウトする件、そして『速くなった理由』を取り違えないための検証まで。実例 93秒→18.7秒
約3.7万トークンの節約 (API料金換算で約56円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。
この巻物について
「起動時フックが増えすぎてエージェントが立ち上がらなくなるのを直す」は、開発プロセスカテゴリのAI指示書(MDファイル)です。Claude Code が全タブで 'Subprocess initialization did not complete within 60000ms' を出すのは認証でもネットワークでもなく、起動時フックの合計時間超過。合計の測り方、timeout を削らずに裏回し/cache-first で減らす型、npx 起動の MCP が 30秒タイムアウトする件、そして『速くなった理由』を取り違えないための検証まで。実例 93秒→18.7秒この巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約3.7万トークン(API料金換算で約56円)・88%のトークンを節約できます。
- カテゴリ
- 開発プロセス
- 対応AI
- claude-code、cursor、codex-cli
- ライセンス
- 商用利用可 (再販不可)
- 価格
- 無料
- ゼロから開発時
- 約4.2万トークン
- この巻物使用時
- 約5,000トークン
- 節約量
- 約3.7万トークン (約56円)
- 更新日
- 2026-09-12
使い方 (AIに渡す3つの方法)
いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。
claude "https://makimono-md.vercel.app/api/v1/files/md-bf639fb4/raw を読み込んで、この指示書どおりに実装して"
中身
起動時フックが増えすぎてエージェントが立ち上がらなくなるのを直す
誰向けか
Claude Code(や同種の CLI エージェント)に SessionStart / 起動時フックを足し続けていて、ある日から
Subprocess initialization did not complete within 60000ms — check authentication and network connectivity
が全タブ・全セッションで出るようになった人。
最初に知るべきこと:このエラーメッセージは嘘をつく
メッセージは「認証とネットワークを確認しろ」と言うが、その2つが原因であることはまずない。 初期化の時間には次が全部乗る:
- 起動時フック(SessionStart)の実行時間の合計
- MCP サーバーの接続時間(失敗した場合はそのタイムアウト時間まるごと)
フックは1本ずつ足されていくので、誰も合計を見ていない。上限(既定 60 秒)を越えた日から 再現するようになる。認証を調べに行くと何時間も溶ける。
手順1: 合計時間を測る(これをやらずに直さない)
設定ファイルの起動時フックを1本ずつ実行して、ミリ秒を足す。フックは stdin から JSON を受け取るので、 本番と同じ形で渡すこと。
echo '{"hook_event_name":"SessionStart","source":"startup"}' | <フックのコマンド>
設定から全部読んで自動で回す例(Node):
const {execSync} = require('child_process');
const d = JSON.parse(require('fs').readFileSync('<設定ファイルのパス>', 'utf8'));
let total = 0;
for (const m of d.hooks.SessionStart || []) for (const h of m.hooks || []) {
const t = Date.now();
try { execSync(h.command, {
input: '{"hook_event_name":"SessionStart","source":"startup"}',
stdio: ['pipe','pipe','pipe'], timeout: (h.timeout || 10) * 1000 });
} catch (e) {}
const ms = Date.now() - t; total += ms;
if (ms > 2000) console.log('SLOW ' + ms + 'ms ' + h.command);
}
console.log('TOTAL ' + (total/1000).toFixed(1) + 's');
実例では 32 本で合計 93 秒、うち3本(依存収束 45.6s / コスト集計 18.9s / ツール導入チェック 10.0s)で 74 秒を占めていた。
手順2: timeout を削るのは間違い
各フックの timeout を下げても、やっている仕事は減らない。途中で殺されるだけで、
本来その処理がやるはずだった収束・同期が静かに失われる。直し方は2つしかない。
A. 出力が要らないフック → 裏に回す(detached 起動)
副作用のためだけに走るフック(環境の収束、同期、自己修復)は、即座に終了して裏で走らせる。 汎用ラッパを1本作れば全部これで包める。
// bg-launch.mjs — 渡されたコマンドを detached で起動して即 exit
import { spawn } from 'child_process';
const [cmd, ...args] = process.argv.slice(2);
spawn(cmd, args, { detached: true, stdio: 'ignore', windowsHide: true }).unref();
process.exit(0);
設定側は bg-launch.mjs <元のコマンド> に置き換え、timeout も小さくする。
処理を消したわけではないので、裏でプロセスが本当に生きているかを ps / tasklist で一度確認すること。
B. 出力が要るフック → cache-first にする
起動時に内容を表示するフック(コスト集計、状態サマリー)は消せない。 前回の出力をそのまま保存しておき、起動時はそれを即座に出す。再計算だけ裏に回す。
--cached が指定された:
キャッシュがある → 中身をそのまま stdout に出して exit 0(1秒未満)
+ フル計算を detached 子プロセスで起動(ロックで二重起動を防ぐ)
キャッシュが無い → 従来どおり同期でフル計算し、その出力をキャッシュに保存
表示は「前回の値」になるので、出力フォーマットは1文字も変えないこと(変えると差分が 「古い値」なのか「壊れた」のか判別できなくなる)。実例では 18.9 秒 → 0.5 秒。
手順3: MCP サーバーの起動方式も見る
stdio MCP サーバーの command を npx / args ["-y", "<パッケージ>"] にしていると、
毎回パッケージ解決に行くため(特に Windows で)接続上限 30 秒に間に合わず、
毎セッション CONNECT_TIMEOUT で落ちる。しかもその 30 秒は初期化時間に丸ごと乗る。
直し方: グローバル導入して実体を直接叩く。
npm i -g <パッケージ>
# 設定を command: "node", args: ["<...>/node_modules/<パッケージ>/dist/index.js"] に変更
# 環境変数(APIキー等)は必ずそのまま維持する
検証は initialize ハンドシェイクを直接投げて秒数を測る:
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}
実例では 30 秒(タイムアウト)→ 0.44 秒。
落とし穴
- 修正の確認は「新しいタブ/新しいセッション」で行う。 既に開いているセッションは起動時の状態を 表示し続けるので、直してもエラー表示は消えない。「直っていない」と誤判定しやすい。
- 速くなった観測値を、速くなった理由と取り違えない。 フラグを渡す側の設定だけ直して、 スクリプト側に実装が無くても、未知の引数は黙って無視されるのでエラーにならない。 さらに元から「N時間以内はスキップ」のようなガードがあると、そのガードに当たっただけで速く見える。 実例ではこれで「直った」と誤報告した。速いときこそ、遅い経路が走らなかっただけでないかを先に潰す。 確認は「実装したと言うならファイルを grep」「速いと言うならキャッシュとガードを消してから計測」。
- 再発防止: 起動時フックの合計が上限の半分を超えたら警告する仕組みを入れておく。 フックは今後も増えるので、同じ壁に必ずまた当たる。
効果
実例(フック32本): 合計 93 秒 → 18.7 秒。MCP 接続 30 秒 → 0.44 秒。 処理は1つも削っていない。
よくある質問
+「起動時フックが増えすぎてエージェントが立ち上がらなくなるのを直す」とは何ですか?
Claude Code が全タブで 'Subprocess initialization did not complete within 60000ms' を出すのは認証でもネットワークでもなく、起動時フックの合計時間超過。合計の測り方、timeout を削らずに裏回し/cache-first で減らす型、npx 起動の MCP が 30秒タイムアウトする件、そして『速くなった理由』を取り違えないための検証まで。実例 93秒→18.7秒
+どれくらいトークン(費用)を節約できますか?
ゼロから開発すると約4.2万トークンかかりますが、この巻物を使えば約5,000トークンで済みます。差し引き約3.7万トークン(API料金換算で約56円)・88%の節約です。
+どうやって使いますか?
無料です。MDファイルを Claude Code などのAIに読み込ませるだけ。ワンライナーをターミナルに貼れば実装が始まります。要件定義や技術調査を省いて実装だけにトークンを使えます。
+どのAIツールに対応していますか?
claude-code、cursor、codex-cli に対応しています。
+商用利用できますか?
ライセンスは「商用利用可 (再販不可)」です。
🤝 自分でAIを動かすのは、まだ不安…という方へ
この巻物の内容を、AIを使うプロに丸ごと任せることもできます。姉妹サービスAI代行堂なら「LINEで頼むだけで、仕事が完成」。
関連する巻物
夜間ジョブ異常を通知で終わらせず自動修復→AI修理PR→人へ引き渡す閉ループ
監視の『検知して通知』の後段に、決定的Playbook→AIコーダーの隔離worktree修理PR→持ち越し→人への3要素引き渡し、を足す実装指示書。argvで指示を渡すな等の実測の落とし穴つき
ドキュメント駆動開発プロセス CLAUDE.md — 作るものを固めてから書かせる
「AIが暴走して意図と違うものを作る」を根絶する開発プロセス指示書。UI仕様→機能設計→実装の順をAIに強制し、1ファイルごとに承認ゲートを挟む。受託開発・チーム開発向け。
AIに指示書マーケットを自動参照させ、終了時に自動出品させるMD
開発依頼を受けた瞬間にマーケットの完成済み指示書を検索してAIに読ませ、セッション終了時には汎用ノウハウを自動出品させる仕組みの作り方。全台配布・秘密情報スキャン・実際に踏んだ配布バグ3つの回避込み。
この巻物、誰かのトークンも救えます
𝕏 で節約レシートをシェア