ヘッドレスCLI実行がライフサイクルhook経由で通知/ミラーを汚染する問題の恒久対策
定期バッチで非対話起動するCLIエージェントが終了hookで通知/一覧を毎時汚染する問題。--no-session-persistenceだけでは不足、発生源での環境フラグ+entrypoint allowlist+永続トランスクリプト有無での一掃、の多層防御手順。
約7,500トークンの節約 (API料金換算で約11円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。
この巻物について
「ヘッドレスCLI実行がライフサイクルhook経由で通知/ミラーを汚染する問題の恒久対策」は、業務自動化カテゴリのAI指示書(MDファイル)です。定期バッチで非対話起動するCLIエージェントが終了hookで通知/一覧を毎時汚染する問題。--no-session-persistenceだけでは不足、発生源での環境フラグ+entrypoint allowlist+永続トランスクリプト有無での一掃、の多層防御手順。この巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約7,500トークン(API料金換算で約11円)・83%のトークンを節約できます。
- カテゴリ
- 業務自動化
- 対応AI
- claude-code、cursor、codex-cli
- ライセンス
- 商用利用可 (再販不可)
- 価格
- 無料
- ゼロから開発時
- 約9,000トークン
- この巻物使用時
- 約1,500トークン
- 節約量
- 約7,500トークン (約11円)
- 更新日
- 2026-08-20
使い方 (AIに渡す3つの方法)
いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。
claude "https://makimono-md.vercel.app/api/v1/files/cli-hook/raw を読み込んで、この指示書どおりに実装して"
中身
ヘッドレス CLI 実行が「ライフサイクル hook」経由で通知/ミラーを汚染する問題の恒久対策
誰向け・何の問題か
CLI エージェント(Claude Code / 類似の LLM CLI)を バックグラウンドの定期ジョブ(メール収集・カレンダー同期・要約バッチ等)で --print/-p のような非対話モードで大量に自動起動している環境向け。
症状:
- スマホ/Web のセッション一覧・通知チャンネル・ミラー画面に、自動ジョブ由来の項目が毎時積み上がる
- ユーザーが削除しても、次の自動実行でまた現れる(実際は毎回別 ID の新規項目なので「復活」に見える)
根本原因
多くの CLI エージェントには「実行終了時 hook」「プロンプト送信時 hook」等の ライフサイクル hook がある。ここに「実行内容を外部(通知/ミラー)へ転送する」処理を仕込むと、対話セッションだけでなく非対話バッチ実行でも hook が発火し、そのたびに転送される。
よくある誤解: 「セッションを永続化しないオプション(例 --no-session-persistence)を付けたから大丈夫」。これはローカルのセッション保存を止めるだけで、hook の発火は止めない。転送 hook は依然として動く。
対策(多層防御)
1. 発生源で環境変数フラグを立てる(確実・第一層)
非対話ジョブを起動する すべての launcher で、CLI 起動の直前にスキップ用フラグを立てる。
# 例(POSIX)
export AGENT_HEADLESS=1
printf '%s' "$PROMPT" | agent-cli -p --no-session-persistence
# 例(Windows PowerShell)
$env:AGENT_HEADLESS = '1'
$prompt | & $agentExe -p --no-session-persistence
# 例(cmd 経由でパイプする場合)
set "AGENT_HEADLESS=1"&& type prompt.txt | agent-cli -p
転送 hook の冒頭でこのフラグを見て即 return:
if ($env:AGENT_HEADLESS -eq '1') { exit 0 } # 何も転送しない
ポイント: launcher を1つでも直し忘れると漏れる。-p/--print を叩く箇所を全部洗い出して統一する。将来 launcher を足す時の規約としてコメントに残す。
2. hook 側で「対話 entrypoint 許可リスト」を保険にする(第二層)
多くの CLI は起動モードを環境変数で公開する(例: AGENT_ENTRYPOINT が対話版だと xxx-vscode / xxx-desktop、非対話だと cli 等)。hook 側で 対話の値以外なら転送しないallowlist を入れると、フラグを立て忘れた未知の launcher も捕捉できる。
$ep = $env:AGENT_ENTRYPOINT
# 対話(vscode/desktop)以外は headless とみなしスキップ。空/不明は fail-open(本物を誤って隠さない)
if ($ep -and $ep -ne 'agent-vscode' -and $ep -ne 'agent-desktop') { exit 0 }
注意: launcher が「対話セッションの環境を継承したまま」子プロセスで CLI を起動すると、entrypoint が対話値のまま漏れることがある。だから 第1層(明示フラグ)が主、第2層は保険。
3. 既存の溜まったゴミを確実に判別して一掃
「本物の対話セッションだけ残す」判別は、永続トランスクリプトの有無が確実な指標になる(非対話は --no-session-persistence で保存されない)。ミラー/一覧の各 ID について、CLI のセッション保存ディレクトリに対応ファイルがあるものだけ残す。
// 疑似コード
const realIds = new Set(listPersistedTranscriptIds()); // 保存ディレクトリを走査
store.items = store.items.filter(x => realIds.has(x.id)); // 無い ID = headless ゴミ → 除去
// 実行前に必ずバックアップを取る
削除が「効かない」ように見える時の切り分け
削除ロジック自体(tombstone/hidden 方式)は正しくても、発生源が毎回別 ID を作っていれば「消しても出る」。まず「同じ ID が復活しているのか、別 ID が増えているのか」を確認する。後者なら削除ロジックではなく**発生源(本ドキュメントの対策1)**を直すのが本質。
チェックリスト
-
-p/--printを叩く launcher を全部列挙したか - 各 launcher でスキップフラグを立てたか(cmd 経由も忘れず)
- 転送 hook 冒頭でフラグを見て return しているか
- entrypoint allowlist を保険で入れたか(fail-open)
- 既存ゴミを「永続トランスクリプト有無」で判別し、バックアップの上で一掃したか
- 対策後に「対話セッションは今も転送される・非対話は転送されない」を実際に発火させて確認したか
よくある質問
+「ヘッドレスCLI実行がライフサイクルhook経由で通知/ミラーを汚染する問題の恒久対策」とは何ですか?
定期バッチで非対話起動するCLIエージェントが終了hookで通知/一覧を毎時汚染する問題。--no-session-persistenceだけでは不足、発生源での環境フラグ+entrypoint allowlist+永続トランスクリプト有無での一掃、の多層防御手順。
+どれくらいトークン(費用)を節約できますか?
ゼロから開発すると約9,000トークンかかりますが、この巻物を使えば約1,500トークンで済みます。差し引き約7,500トークン(API料金換算で約11円)・83%の節約です。
+どうやって使いますか?
無料です。MDファイルを Claude Code などのAIに読み込ませるだけ。ワンライナーをターミナルに貼れば実装が始まります。要件定義や技術調査を省いて実装だけにトークンを使えます。
+どのAIツールに対応していますか?
claude-code、cursor、codex-cli に対応しています。
+商用利用できますか?
ライセンスは「商用利用可 (再販不可)」です。
🤝 自分でAIを動かすのは、まだ不安…という方へ
この巻物の内容を、AIを使うプロに丸ごと任せることもできます。姉妹サービスAI代行堂なら「LINEで頼むだけで、仕事が完成」。
関連する巻物
Google Meet 自動参加&動画配信Bot 開発指示書
指定した時刻に Google Meet へ自動参加し、動画を再生しながら画面共有する Bot を、Claude Code に一発で作らせる開発指示 MD。朝会の定例動画配信・ウェビナーの自動放送に。
受信メール添付を案件フォルダへ自動取込するパイプライン
メールを読むアプリとドライブに書くアプリが別、という現実的な構成で顧客メールの添付を案件フォルダへ無人保存する設計。権限追加を避ける理由、実行時間制限下の予算3本立て、二重の重複防止、base64url/行数上限/変換判定などの実装罠、案件と顧客のマッチング、名寄せは候補提示+人の承認にする型まで。
Gmail 自動仕分け&返信ドラフト生成MD
受信メールを AI が分類 (要返信/情報/営業/スパム) してラベル付けし、要返信メールには返信ドラフトまで自動生成する仕組みを作らせる指示書。DWD (ドメイン全体委任) 設定手順込み。
この巻物、誰かのトークンも救えます
𝕏 で節約レシートをシェア