運用ルールをAIに守らせる「宣言強制ゲート」hook
依頼受領時(UserPromptSubmit)に割り込み、応答冒頭で1行の判定宣言を出させることで、委譲・夜間バッチ等の運用ルールを実効化する hook の型。実装コード・登録方法・発火/非発火の検証コマンド・実際に踏んだ落とし穴つき。
約3.8万トークンの節約 (API料金換算で約57円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。
この巻物について
「運用ルールをAIに守らせる「宣言強制ゲート」hook」は、AIのしつけカテゴリのAI指示書(MDファイル)です。依頼受領時(UserPromptSubmit)に割り込み、応答冒頭で1行の判定宣言を出させることで、委譲・夜間バッチ等の運用ルールを実効化する hook の型。実装コード・登録方法・発火/非発火の検証コマンド・実際に踏んだ落とし穴つき。この巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約3.8万トークン(API料金換算で約57円)・90%のトークンを節約できます。
- カテゴリ
- AIのしつけ
- 対応AI
- claude-code、cursor、codex-cli
- ライセンス
- 商用利用可 (再販不可)
- 価格
- 無料
- ゼロから開発時
- 約4.2万トークン
- この巻物使用時
- 約4,000トークン
- 節約量
- 約3.8万トークン (約57円)
- 更新日
- 2026-08-20
使い方 (AIに渡す3つの方法)
いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。
claude "https://makimono-md.vercel.app/api/v1/files/ai-hook-2/raw を読み込んで、この指示書どおりに実装して"
中身
運用ルールを AI に守らせる「宣言強制ゲート」hook の作り方
CLAUDE.md や社内ルールに「安いモデルへ委譲せよ」「大量処理は夜間バッチへ回せ」と書いても守られない。 守らせる唯一の実効手段は 依頼を受けた瞬間に、応答冒頭で1行の判定を宣言させる こと。 この MD は、その「宣言強制ゲート」を UserPromptSubmit hook として実装する型を渡す。
なぜ宣言させるのか(設計の核)
- 強制点は「実装を書く瞬間」では遅い。 ファイル書き込み時点(PreToolUse)で警告しても、 高価な推論は既に終わっている=捨てるしかないので無視される。**依頼受領時(UserPromptSubmit)**に割り込む。
- 受動的なリマインドは効かない。出力を要求する。 「〜を検討せよ」は無視されるが、
「応答冒頭に
**[判定]** A(理由: …)を1行書け」は書かざるを得ず、しかも人間から見えて監査できる。 - ブロックしない。 警告と宣言要求だけに留める。人間の承認プロンプトを潜脱させたり、 選択肢を伏せたりする設計にしてはいけない(同意の剥奪になる)。
- 黙る条件を必ず作る。 毎回出すとノイズ化して無視を学習する。無関係な依頼・質問・ 既に宣言済みのプロンプトでは何も出さない。
実装(Node.js / hook 1ファイル)
hooks/policy-gate.mjs — stdin に JSON、stdout に1行 JSON。例外は握って必ず exit 0(人間の操作をブロックしない)。
#!/usr/bin/env node
let raw = '';
process.stdin.setEncoding('utf8');
for await (const chunk of process.stdin) raw += chunk;
try {
if (!raw) process.exit(0);
const input = JSON.parse(raw);
const prompt = String(input.prompt || '');
if (prompt.length < 2) process.exit(0);
const parts = [];
// --- ルール1: 実装依頼 → 安い/定額の実行系へ委譲させる ---
const impl = /実装|作って|書いて|直して|修正|リファクタ|バグ|fix|implement|デバッグ/i;
const question = /どう思う|教えて|説明して|とは|なぜ|比較|調べて/;
const strong = /実装|作って|書いて|直して|修正|fix|implement/i;
if (!prompt.includes('[委譲判定]') && impl.test(prompt) && (!question.test(prompt) || strong.test(prompt))) {
parts.push('[委譲ゲート] 応答冒頭に必ず1行: `**[委譲判定]** 実装=<定額のコード生成CLI>(理由: …)` ' +
'または `**[委譲判定]** 自分で実施(理由: 数行の修正 / 設定ファイル / 設計試行錯誤中)`。宣言せず着手は違反。');
}
// --- ルール2: 大量処理 → 夜間バッチ(半額)か即時かを宣言させる ---
const count = prompt.match(/(\d{2,})\s*(件|社|行|本|通|人|個|ファイル)/);
const bulk = /一括生成|全件|バックフィル|エンリッチ|棚卸し|全部に対して|再生成/;
if (!prompt.includes('[夜間判定]') && ((count && Number(count[1]) >= 20) || bulk.test(prompt))) {
if (/今すぐ|すぐに|至急|急ぎ|今日中|即時|リアルタイム/.test(prompt)) {
// 依頼者が急ぎと明示している時に夜間を勧めるのは有害。即時側で確定させる。
parts.push('[夜間ゲート] 応答冒頭に `**[夜間判定]** 即時実行(理由: 依頼者が急ぎと明示)` と宣言し同期実行へ。');
} else {
parts.push('[夜間ゲート] 応答冒頭に `**[夜間判定]** 夜間バッチ(半額・翌朝) — 投入: <キュー投入コマンド>` ' +
'または `**[夜間判定]** 即時実行(理由: 依頼者が待っている / ブロッキング)` と宣言。' +
'夜間に落とすなら黙って遅延させず、依頼者に「夜間(半額・翌朝結果)でよいか、今すぐ必要か」を伝え、' +
'今すぐなら同期実行に切替える。');
}
}
if (!parts.length) process.exit(0);
console.log(JSON.stringify({
hookSpecificOutput: { hookEventName: 'UserPromptSubmit', additionalContext: parts.join('\n') },
}));
} catch {}
process.exit(0);
登録(~/.claude/settings.json。追加のみ・既存 hook を消さない):
{ "hooks": { "UserPromptSubmit": [ { "hooks": [ { "command": "node \"<絶対パス>/hooks/policy-gate.mjs\"" } ] } ] } }
必須の型(ここを外すと静かに壊れる)
- context 注入 hook(UserPromptSubmit / SessionStart / Stop / Notification)に
async: trueを付けない。 付けると注入が黙殺される。 - 例外は全部握って exit 0。 hook の失敗が依頼をブロックしてはいけない。
- 既に宣言タグを含むプロンプトでは黙る(
prompt.includes('[委譲判定]'))。人間が判定済みの時に再要求しない。 - 急ぎ表明の検知を必ず入れる。 これが無いと「今すぐ」と言われた依頼に夜間バッチを勧めて信頼を失う。
- 設定ファイルは BOM 無し UTF-8 で保存。 BOM があると JSON パースに失敗して hook 登録が丸ごと無効になる。
- PowerShell 版を書くなら stdin を UTF-8 として明示的に読む(既定のままだと日本語が化ける)。
検証(ここまでやって初めて「入った」と言える)
ユニットテストだけでは不十分。hook を実プロセスとして起動し、発火/非発火の両方を確認する。
printf '%s' '{"prompt":"300件の会社を分類して"}' | node hooks/policy-gate.mjs # → 夜間判定の要求が出る
printf '%s' '{"prompt":"500件を今すぐ分類して"}' | node hooks/policy-gate.mjs # → 即時側になる
printf '%s' '{"prompt":"1件だけ分類して"}' | node hooks/policy-gate.mjs # → 何も出ない
printf '%s' '{"prompt":"[夜間判定] 300件を分類して"}' | node hooks/policy-gate.mjs # → 再注入されない
printf '%s' '{"prompt":"ログイン機能を実装して"}' | node hooks/policy-gate.mjs # → 既存ルールが非回帰
回帰テストは「注入文に含まれるべき語」で assert する(例: [夜間判定] を含む / 小規模では含まない)。
文面をリファクタしても壊れないよう、キーワード単位で検査するのがコツ。
落とし穴(実際に踏んだもの)
- 直すファイルを間違える。 同名・似た名前の旧実装が残っていて、そちらを直しても1行も発火しない。
着手前に必ず
settings.jsonに登録されているコマンド文字列を読み、今動いている実体を特定する。 - 複数PCへ配る場合、「マージした=各PCで動いている」ではない。 リポジトリを
git pull --ff-onlyで 同期する設計だと、未コミット変更やローカル専用コミットがある端末では pull が abort し、 配布だけが静かに止まる。配布物のバージョン一致(ハッシュ or 機能マーカー)を点検する仕組みを別に持つ。 - 文面を強くしても守られない時は、発火点が意思決定より後になっていないかを疑う。強制点の位置が本質。
よくある質問
+「運用ルールをAIに守らせる「宣言強制ゲート」hook」とは何ですか?
依頼受領時(UserPromptSubmit)に割り込み、応答冒頭で1行の判定宣言を出させることで、委譲・夜間バッチ等の運用ルールを実効化する hook の型。実装コード・登録方法・発火/非発火の検証コマンド・実際に踏んだ落とし穴つき。
+どれくらいトークン(費用)を節約できますか?
ゼロから開発すると約4.2万トークンかかりますが、この巻物を使えば約4,000トークンで済みます。差し引き約3.8万トークン(API料金換算で約57円)・90%の節約です。
+どうやって使いますか?
無料です。MDファイルを Claude Code などのAIに読み込ませるだけ。ワンライナーをターミナルに貼れば実装が始まります。要件定義や技術調査を省いて実装だけにトークンを使えます。
+どのAIツールに対応していますか?
claude-code、cursor、codex-cli に対応しています。
+商用利用できますか?
ライセンスは「商用利用可 (再販不可)」です。
🤝 自分でAIを動かすのは、まだ不安…という方へ
この巻物の内容を、AIを使うプロに丸ごと任せることもできます。姉妹サービスAI代行堂なら「LINEで頼むだけで、仕事が完成」。
関連する巻物
AI運用ルールを機械的に守らせる hook 設計 — ルール文が守られない本当の理由
チームでAIエージェントを使うと運用ルールが必ず守られなくなる。真因は「読んでいない」ではなく hook がそのマシンで登録されていない/委譲先が沈黙して壊れていること。禁止=実行前拒否・誘導=依頼時の具体コマンド注入・担保=セッション開始時の自己修復の3層、明示例外の短命トークン、warn→blockの段階昇格、BOM/サンドボックス/timeout など失敗が沈黙する罠と、環境依存で落ちないテストの作り方までを実測ベースでまとめた導入手順。
マキモノ検索スキル — AIが自分で巻物を探して使えるようになるMD
あなたのAIエージェント (Claude Code等) にこのMDを読ませると、開発タスクを受けたとき自動でマキモノAPIを検索し、最適な指示書を取得してから作業するようになります。導入は貼るだけ。
無人AIセッションのバックグラウンド委譲が静かに殺される事故を潰す
ヘッドレスで起動したAIエージェントがバックグラウンド委譲した子プロセスは、ターン終了で kill されるのに親は exit 0 を返す。機械的に deny するフック、通知の作り方、対応中フラグの戻し忘れ、Windows製worktreeがLinux側から解決できない罠までを含む恒久対策。
この巻物、誰かのトークンも救えます
𝕏 で節約レシートをシェア