エージェントがファイルの読み取り、シェルの実行、コードの編集、PRのshipができる状態において、プロンプト内の一言の注意書きでは不十分です。ツールが実際に実行される前に検査する層が必要です。
エージェントに小さな作業を依頼しました:あるモジュールのバリデーションを修正する。より確実にしたいと判断したエージェントは追加でいくつかのディレクトリをスキャンし、センシティブなconfigファイルを開き、さらについでに無関係なcleanupもまとめて同じPRに含めました。
一見すると問題なさそうです。テストもpassしています。しかしcontextには不要なファイルが混入し、secretがtranscript(あなたとエージェントの会話の全記録)に入り込んだ可能性があり、修正すべき部分と「ついで」の部分が同じPRに混在しているためレビューが散漫になっています。
cat .env — secretがtranscriptに入る.env — privacy-blockがユーザーに確認エージェントは自然と慎重にはなりません。ただ、何かを実行しようとする前に、「これは実行を許可すべきか?」と問う層が立ちはだかるのです。
Hookが本物のブロック層です。
Guard railはモデルをより賢くするわけではありません。ツールが実行される前にアクションを検査します。Rule、hard-gate、guard skillは追加の方向付け層であり有用ですが、モデルまたはユーザーが呼び出すかどうかに依存します。
I. 概念
Guard railはエージェントとアクションの間に立つ層です:リスクのある操作はブロックし、疑わしい操作は警告します。階段の端にある手すりのようなもので、歩き方が上手くなるわけではありませんが、一歩踏み外しても事故になる可能性を減らします。プロンプト内の指示(prompt instruction)と異なり、guard railはモデルが「覚えているか」に依存せず、ツール調整層で動作します。
| Guard rail | 指示 | |
|---|---|---|
| 動作する場所 | Harness、モデルの外側 | context内、モデルが読む |
| 強制力 | コードで実際にブロック | モデルが自発的に従う |
| contextが長い場合 | 引き続き動作 | 忘れやすい・スリップしやすい |
| モデルが誤解した場合 | 引き続きブロック(クラッシュしなければ) | モデルに従って誤解 |
| 変更方法 | コード・configの修正が必要 | テキスト修正で完了 |
Harnessはモデルを包むruntime層です。モデルは「このファイルを読みたい」または「このコマンドを実行したい」と決定するだけで、harnessがtool callを受け取り、権限を管理し、hookを呼び出し、ツールを実行またはブロックし、結果をモデルに返します。Hookは、検査や状態記録のために介入するため、harnessがtool callのライフサイクル(prompt受信時、tool前、tool後)の固定タイミングで自動的に呼び出す小さなスクリプトです。すべての実際のアクションがharnessを通過するため、guard railを組み込む場所はここです。
概念の背景についてはこちら:Duy /zuey/ による Harness Engineering とは?
ClaudeKit Hooksの詳細はVividKit Guidesで読めます。
HookはモデルI内にはありません。Claude Codeのライフサイクルに位置します:settings.jsonがどのhookを呼び出すかを決定し、.ck.json/ENVがruntime behaviorを決定します。hookの出力は、実行を許可・ブロックし、contextをinjectし、ツールまたはセッション終了後にstate/artifactを記録できます。
重要なポイント:pre-tool hookはexit codeを返します。Exit 0でツール実行、exit 2でブロックして理由をモデルへ送信。フロー内の3つの主要な介入ポイントには対応する技術名があります:UserPromptSubmit(prompt受信時)、PreToolUse(tool前)、PostToolUse(tool後)。Stop/SubagentStopはセッションまたはsubagent終了時に実行されるため、上のライフサイクルマップに示されています。
Exit codeはプロセス終了時に返す数値です。Claude Codeはこれを読んでツールを実行するか決定します:
exit 0 — OK、ツール実行。stdoutをJSON outputとして読み取ります。exit 2 — ブロック。stdoutを無視し、stderrをエラーメッセージとしてモデルへ送信。exit 1(またはその他のコード)— エラーだがブロックしない。エラーを報告してもツールは続行します。exit 2だけが実際にブロックします。ポリシーを強制したいhookは必ずexit 2を使用してください。Unix習慣で誤ってexit 1を使うと、guard railがオンのつもりで実際にはオープンになります。
Hook exit 2、ツール実行なし。ただしhookがクラッシュするとClaude Codeは通過させます(fail-open)。hookのバグがguardをサイレントに無効にします。
contextにテキストを追加します(rule、hard-gate)。モデルが自発的に従う必要があります。強度はモデルに依存します。
.envを読もうとする、広すぎるスキャン、スコープ外のcleanupをPRに引き込むII. CKにおける実装
freshなCKインストール後、file-access guardはscout-blockやprivacy-blockなどのPreToolUse hookに存在します。Claude Codeセッションがpermission promptをスキップするモードで動作している場合も、これらのhookはCKの主要なブロック層です。ただしCKのhookはfail-openです:クラッシュまたは無効化された場合、tool callはそのまま通過する可能性があります。
| グループ | メカニズム | 例 | 強制力 |
|---|---|---|---|
| ファイル・パスのブロック | PreToolUse | scout-block | コード · fail-open |
| 誤ったステップのブロック | UserPromptSubmit | simplify-gate | code |
| contextの追加 | UserPromptSubmit | dev-rules-reminder | code |
| クリーンな命名の維持 | Pre/Post/Stop | descriptive-name | コード · 促す |
| Hard-gate skill | XML markdown | <HARD-GATE> | 指示 |
| Ruleによる指示 | CLAUDE.md | review-audit | 指示 |
| Guard skill | ユーザーが呼び出す | ck:security-scan | user |
scout-block、privacy-block · Section 05-06simplify-gate、workflow gate · Section 07-08dev-rules-reminder がテキストをpromptにinject · Section 10descriptive-name · Section 04のhook grid<HARD-GATE> · Section 09CLAUDE.md のruleはinjectされるコンテンツ · Section 10ck:security-scan、ck:ship · Section 11| シナリオ | 処理する層 |
|---|---|
node_modules/react/ を読み取る | scout-block、exit 2 |
.env を読んでkeyを確認 | privacy-block、exit 2 + approval prompt |
ルートで **/*.ts をGlob | scout-block broad-pattern |
| diffが膨らんだ状態でshipをprompt | simplify-gate(gate.enabled=true の場合) |
| plan・reviewなしでコーディングを開始 | ck:cook HARD-GATE |
| ユーザーが確定したthresholdを変更 | review-audit rule:変更前に再確認 |
| 曖昧な名前の新ファイル | descriptive-name, PreToolUse(Write) |
| Planが誤ったフォーマットのリンク・テキストを使用 | plan-format-kanban, PostToolUse(Edit/Write/MultiEdit) |
| 2人のteammateが同じファイルに触れる | team-coordination rule、Agent Team内のみ |
どのguardが動作するかを決定する2つのconfig層:settings.jsonがhookをClaude Codeのライフサイクルに組み込み、.ck.jsonが各hookのオン・オフを切り替え、thresholdを調整します。
# グローバルスコープ
~/.claude/settings.json
~/.claude/.ck.json
~/.claude/hooks/*.cjs
# プロジェクトスコープ
.claude/settings.json
.claude/.ck.json
.claude/hooks/*.cjs
以下のsnippetはfreshなCKインストールにおけるPreToolUseの一断面のみを示しています:CKはscout-blockとprivacy-blockを提供し、ツール実行前にClaude Codeが呼び出せるようライフサイクルにwireします。インストール済み環境のfull hook configにはさらに多くのlifecycle eventがあります。確認すべき場所はClaude Codeのsettings.jsonです。
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash|Glob|Grep|Read|Edit|Write",
"hooks": [
{ "command": "node \".claude/hooks/scout-block.cjs\"" },
{ "command": "node \".claude/hooks/privacy-block.cjs\"" }
]
}
]
}
}
settings.jsonはlifecycleマップです:ユーザーがpromptを送信したときにどのhookが動作するか、ツール実行前にどのhookが呼び出されるか、ツール完了後にどのhookが処理を続けるか。グローバルインストールの場合、CLIはテンプレート内の相対コマンドをnode "$HOME/.claude/hooks/scout-block.cjs"形式に変換します。プロジェクトインストールの場合、pathは通常.claude/hooks/...形式のままです。
すべてを「デフォルトでオン・オフ」と単純化しないでください。hookの状態には3つの異なる層があります:
| ラベル | 監査時の意味 |
|---|---|
script file | .cjsファイルが.claude/hooks/に存在します。ファイルが存在するだけではhookが動作しているとは言えません。 |
wired | settings.jsonがスクリプトをClaude CodeのLifecycle eventに組み込んでいます。wireしていないとClaude Codeはそのhookを自動呼び出ししません。 |
runtime flag | hookが呼び出された後、内部のコードが.ck.json/DEFAULT_CONFIG/ENVを読んで実際に処理を続けるか決定します。privacyBlockやsimplify.gate.enabledなどのサブスイッチを持つguardもあります。 |
以下のテーブルは stable claudekit-engineer@2.19.1 時点の hook リストのスナップショットです。2026-06-09 更新:claudekit-engineer@2.19.2-beta では task-completed-handler と teammate-idle-handler の削除が準備されています。upstream ClaudeKit が新しい version を release すると、このリストは14 hookになる可能性があります。
session-initwired起動・再開・クリア・compactのプロジェクト・環境セットアップ。
usage-quota-cache-refreshwiredhook flagは個別に読み取らない。wireされたときに動作。
simplify-gategate offスクリプトは呼び出されますが、simplify.gate.enabledはデフォルトでfalse。
dev-rules-reminderwireddev rules・contextをinjectします。
subagent-initwiredsubagentにcontextをinjectします。
descriptive-namewiredファイル・スクリプトに分かりやすい名前をつけるよう促します。
scout-blockwired重いディレクトリと広すぎるglobをブロックします。
privacy-blockwiredsecretパスをブロックし、approvalを求めます。
plan-format-kanbanwiredhook flagは個別に読み取らない。planフォーマットについて警告。
session-statewiredsession・taskの状態を記録します。
cook-after-plan-reminderwiredDEFAULT_CONFIG.hooksに個別keyはないが、isHookEnabled()はflagがfalseのときのみ無効化。
workflow-artifact-gatenot wiredartifact gateのopt-in:hookのwireとflag・gate configの有効化が必要。
task-completed-handlerremovingAgent Teamsのtask完了。2.19.1以降も残る安定hookとして扱わないでください。
teammate-idle-handlerremovingAgent Teamsのteammate idle。2.19.1以降も残る安定hookとして扱わないでください。
team-context-injectnot wiredDEFAULT_CONFIG.hooksに個別keyはなし。workflow・team layerが呼び出す場合のみ意味を持ちます。
usage-context-awarenessnot wiredUsage・context injection hook。settings.jsonテンプレートには含まれていません。
見落としやすいポイント:isHookEnabled()はhooks.<name>がfalseのときのみ無効化されます。keyがなければ通常enabledとみなされます。ただし個別のスイッチを持つguardもあります:privacy-blockは旧keyprivacyBlock=falseを読み取り、simplify-gateはsimplify.gate.enabledとENV変数CK_SIMPLIFY_DISABLED=1を持ちます。
素早く変更するには、対象スコープの.ck.jsonを編集します。keyが明示的に設定されている場合、プロジェクトconfigがグローバルより優先されます。keyがなければinherit・デフォルトに従います。settings.jsonでwire済みのhookに対しては、falseで無効化し、上位スコープで無効化されていた場合はtrueで再有効化できます。以下のHook列のhook名はhooks.<name>で使用するkeyと同じです。
// .claude/.ck.json または ~/.claude/.ck.json
{
"hooks": {
"scout-block": false,
"privacy-block": true
},
"privacyBlock": true,
"simplify": {
"gate": {
"enabled": true
}
}
}
| やりたいこと | どこで変更するか | 注意 |
|---|---|---|
| wire済みhookを無効化する | .ck.json {"hooks":{"scout-block":false}} | hookスクリプトは残りますが、runtimeは通過させます。 |
| グローバルで無効化されたhookを再有効化する | project .ck.json {"hooks":{"scout-block":true}} | ローカルのkeyが明示的にグローバルをoverrideします。 |
| privacy guardを無効化する | .ck.json {"hooks":{"privacy-block":false}}.ck.json(旧key) {"privacyBlock":false} | privacyBlock=falseは旧keyですが有効です。 |
| simplify-gateを実際のブロックモードで有効化する | .ck.json {
"hooks": {
"simplify-gate": true
},
"simplify": {
"gate": {
"enabled": true
}
}
} | simplify.gate.enabled=trueがなければgateのブロックモードは有効になりません。 |
| session・スコープごとにsimplify-gateを無効化する | settings.json {
"env": {
"CK_SIMPLIFY_DISABLED": "1"
}
} | EnvのoverrideはconfigのgateよりI強力です。 |
| workflow-artifact-gateを有効化する | settings.json UserPromptSubmit / PreToolUse(Bash) をwireする.ck.json {"hooks":{"workflow-artifact-gate":true}} | freshインストールはデフォルトでwireされていないため、<code>.ck.json</code>の変更だけでは不十分です。 |
hookがトリガーされるか確認したいときは、ファイル名ではなくlifecycle eventを確認してください。同じhookスクリプトは、settings.jsonのevent・matcherが現在のアクションと一致するときのみ動作します。以下のテーブルは各hookを素早く確認する方法です。not wiredのhookは先にwireするか、スクリプトが対応していれば手動CLIで呼び出す必要があります。
| Hook | 手動トリガー | 注記 |
|---|---|---|
session-init | Claude Codeセッションを開く・再開・クリア・compact。 | SessionStart(startup|resume|clear|compact)。 |
usage-quota-cache-refresh | セッションを開く、新しいpromptを送信、またはTask・Todoを更新する。 | Usageをキャッシュ。hook flagは個別に読み取らない。 |
simplify-gate | diffが十分大きい状態でship・merge・pr・deploy・publishの意図を持つpromptを送信する。 | simplify.gate.enabled=trueが必要。デフォルトはブロックしません。 |
dev-rules-reminder | 新しいpromptを送信する。 | UserPromptSubmit。TTLに従ってrulesをinject。 |
subagent-init | Task・agent flowでsubagentを起動する。 | SubagentStart. |
descriptive-name | ClaudeにWriteでファイルを作成させる。 | PreToolUse(Write)。ファイル名を分かりやすくするよう促します。 |
scout-block | Claudeにnode_modules・distを読ませるか、広すぎるglobを使わせる。 | Bash・Glob・Grep・Read・Edit・WriteへのPreToolUse。 |
privacy-block | Claudeに.env・keyファイル・secretパスを読ませる。 | PreToolUse。privacyBlockも使用。 |
plan-format-kanban | ClaudeにEdit・Write・MultiEditでplanファイルを編集させる。 | PostToolUse。フォーマットについて警告。hook flagは個別に読み取らない。 |
session-state | Task・Todoを更新し、subagentを終了、またはturnを終了する。 | PostToolUse、SubagentStop、Stop。 |
cook-after-plan-reminder | PlanのsubagentをI終了させる。 | SubagentStop(Plan)。keyなしでもenabled。 |
workflow-artifact-gate | UserPromptSubmit/PreToolUse(Bash)にwireするか、--stage付きでスクリプトを実行する。 | freshインストールではhookモードが自動トリガーされません。 |
task-completed-handler | Agent Teamsでtaskを完了する。 | TaskCompleted。claudekit-engineer@2.19.2-betaで削除予定です。 |
teammate-idle-handler | Agent TeamsのteammateがI作業を終えてidleになる。 | TeammateIdle。claudekit-engineer@2.19.2-betaで削除予定です。 |
team-context-inject | SubagentStartにwireし、teamのsubagentを起動する。 | agent idがteamに所属する場合のみスクリプトが意味を持ちます。 |
usage-context-awareness | 目的のeventにwireするか、既にwireされているhookキャッシュのリフレッシュを使用する。 | usage quota cache refreshのレガシーラッパーです。 |
// ~/.claude/settings.json または .claude/settings.json
{
"env": {
"CK_SIMPLIFY_DISABLED": "1"
}
}
エージェントはよくnode_modules/を読んだり、ルートで**/*.tsをglobしたり(globはパスマッチングパターン。**/*.tsはすべてのサブディレクトリのすべての.tsファイルを意味します)、dist/index.jsをcatしたりします。その都度、数万tokenがcontextに詰め込まれ、コストと次のturnの品質を低下させます。scout-block.cjsはPreToolUseを登録し、すべてのRead・Bash・Glob・Grepの前に動作します。
# ベースライン .ckignore — pattern-matcher.cjs が処理
node_modules
dist
build
.next
.nuxt
__pycache__
.venv
venv
vendor
target
.git
coverage
ビルドコマンドは通過します。npm build、go build、make、docker buildなどのコマンドは、ビルドプロセスがnode_modulesやdistに触れる場合でも実行されます。このグループをブロックすると、CKのship・testフローがビルドステップで自己ブロックしやすくなります。
Fail-open:parseエラーはすべてexit 0につながり、ツールは通過します。hookにバグがある → その層のguardがサイレントに無効化されます。
エージェントが.env、id_rsa、*.pem、credentials.yamlに触れると — secretがtranscriptに漏れます。一度contextに入ると、ログに残ったり、reviewer outputに引用されたり、PRにペーストされる可能性があります。
@@PRIVACY_PROMPT_START@@
{ "type": "PRIVACY_PROMPT", "question": {...}, "options": [...] }
@@PRIVACY_PROMPT_END@@
ClaudeはJSONをparseし、AskUserQuestionを呼び出します。ユーザーが承認した場合、hookメッセージは承認済みの方法でファイルを読むよう案内します。例えば確認後にcat ".env"を実行するなど。コードはプレフィックスAPPROVED:もサポートしています。重要な点:明示的なapprovalが必要であり、モデルに同意を自己解釈させません。
privacy-blockはBashを通過させ、警告のみを出します。Bashを実行する権限があれば誰でもapprovalフローなしにsecretを読み取れます。
Privacy-blockはREADのみをブロックします。すぐにcredentialをrotateし、会話ログを監査し、git historyでsecretがcommitされていないか確認してください。
小さなタスクが多数のファイルに触れるPRに膨らむことがあります:バリデーションの修正、cleanupの追加、フォーマット変更、周辺helperの調整。エージェントが「OK ship」と言うとき、simplify-gate.cjsはUserPromptSubmitを登録し、git diff HEADを読み取り、promptに以下のいずれかが含まれる場合のみ評価します:ship merge pr deploy publish。
simplify.thresholdのデフォルト値:追加+削除行の合計、変更ファイル数、1ファイル内の最大追加行数。gateがブロックするのはsimplify.gate.enabled=trueの場合のみで、これらの値は.ck.jsonでoverrideできます。
hooks.simplify-gate = trueはClaude Codeがスクリプトを呼び出すことを許可するだけです。スクリプトを実際にPRの肥大化をブロックさせるには、simplify.gate.enabled = trueを追加で有効化する必要があります。freshインストールではこのフラグが有効になっていないため、gateは軽いチェックのみを行いブロックしません。
// プロジェクト .ck.json — 実際に有効化する
{ "simplify": { "gate": { "enabled": true } } }
matchedSeverity()は"don't ship"を無視し、"ship on"から"ship on Friday"も通過します。あるスコープのすべてのセッションでgateを無効にするには、settings.jsonのenvキーにCK_SIMPLIFY_DISABLED=1を設定してください。
フルパイプライン → 各フェーズが決定を記録したJSONファイルを残します。各ステップ後の領収書のようなものです。このhookはUserPromptSubmit + PreToolUse(Bash)にアタッチするよう設計されていますが、freshインストール後のデフォルトのhookセットには含まれておらず、使用するにはopt-inが必要です。
| Artifact | フェーズ | 内容 |
|---|---|---|
context-snippets.json | scout/plan | 読み取ったコードスニペット |
risk-gate.json | predict | 高リスクフラグ、自動停止 |
verification.json | fix/cook | 5項目チェックリスト |
review-decision.json | code-review | Reviewerの判定 |
adversarial-validation.json | adversarial | Adversarialパス |
このgateには2段階の処理があります。ship・push・PR・deployなどのリスクの高いステップでは、hookはフローを即座に停止し、理由をモデルに返せます(emitBlock())。finalizeやcommitなどの軽いステップでは、hookはフローを続行しながら、モデルが自己修正できるよう警告をcontextに追加します(emitSoft())。
workflow-artifact-gateは最も強力なartifact検査層ですが、freshインストールでは自動的に呼び出されません。使用するには、settings.jsonでhookをwireし、.ck.jsonでconfigを有効化する必要があります。この手順を省くと、ship・push・PR・deployはgateによってブロックされません。
Hookはtool callのみをブロックします。tool callではなく順序の問題があります:plan前のコーディング、scout前のfix。CKはskill markdownに<HARD-GATE>を組み込んでいます。
<HARD-GATE> Do NOT write implementation code until a plan exists and has been reviewed. Exception: --fast skips research but still requires a plan step. User override: if user explicitly says 'just code it', respect their instruction. </HARD-GATE>
ck:cookとck:fixはそれぞれ4つのhard-gate(plan/scout-first、exact-reqまたはroot-cause、no-side-effects)を持ちます。
「hard」という言葉は誤解されやすいですが、コードによるブロックではありません。promptの中の指示です。モデルが無視した場合、exit 2でブロックすることはありません。XMLラップは、モデルが近道を正当化しにくくするため、通常のruleより強いシグナルを作ります。
dev-rules-reminder.cjsはUserPromptSubmitを登録し、各promptにrulesテキストをinjectします。ここで明確に区別すべき2つの層があります:hookはcontextをinjectするメカニズムであり、CLAUDE.md内のruleはinjectされるコンテンツです。TTLは(sessionId, baseDir)ごとに5分で、tokenの無駄遣いを防ぎます。
| ファイル | 防ぐもの | 特性 |
|---|---|---|
review-audit-self-decision | 確認済み決定の監査による覆し | verified sticky |
development-rules | テストのスキップ・フェイクデータ | YAGNI/KISS/DRY |
team-coordination-rules | 2つのエージェントが同じファイルを編集 | ownership glob |
commit-messages | 長いコミットbody | single-line |
orchestration-protocol | 全履歴を渡す | context isolation |
Ruleはコードではなくcontextのテキストです。ユーザーのpromptが上書きするとClaudeは逸脱する可能性があります。その代わり、追加・修正が非常に容易です。セキュリティguardよりもスタイル規約に向いています。
| Skill | 使用タイミング | 検出対象 |
|---|---|---|
ck:security-scan | Pre-release | Secret、CVE、SQLi、XSS、path traversal |
ck:predict | リスクの高い機能の前 | 5つのペルソナ、GO・CAUTION・STOP |
ck:scenario | Pre-impl | 12次元のエッジケーススイープ |
ck:ship | Pre-PR | テスト失敗で停止、force-pushなし |
code-reviewerエージェントは9項目のチェックリストを実行します:concurrency、error boundary、API contract、backwards compat、input validation、auth/authz、N+1、data leak、fact-check。マージ前の最後のguardです。
III. 制限と実践
scout-block/privacy-blockに依存し、secret・重いディレクトリ用の専用permissions.denyリストはない制御を失ったエージェントは数千のRead・Glob・Bashを呼び出す可能性があります。CKのhookはtool callの回数を数えず、quotaの枯渇が近づいても自動停止しません。quota・costの制限はClaude Code、プロバイダー、またはアカウントの課金側にあり、このguard railには存在しません。
gate.enabled = trueを設定する.ckignoreでoverride.envのapproval:よく読んで、auto-yesしないsettings.jsonは現在どのhookをどのlifecycleにアタッチしているか?.ck.jsonはどのhookを無効化しているか?(outer + inner config).ckignoreでoverrideがあるか?node_modulesが!でallowlistされているか?| 用語 | 簡潔な説明 |
|---|---|
| harness | モデルとマシンの間の調整層:toolコマンドの送信、権限管理、hookの実行を担います。Guard railを組み込む場所です。 |
| hook | prompt・tool・sessionのライフサイクルの固定タイミングで、検査や状態記録のためにharnessが自動呼び出しする小さなスクリプトです。 |
| lifecycle event | hookが呼び出されるタイミング:UserPromptSubmit(prompt受信時)、PreToolUse(tool前)、PostToolUse(tool後)、Stop/SubagentStop(session・subagent終了時)。 |
| exit code | プロセス終了時に返す数値。0は通過、2はブロック、1はエラーだがブロックしません。 |
| fail-open | hookがエラー・クラッシュした場合、harnessはブロックせずにツールの実行を継続します。guardがサイレントに無効化されます。 |
| transcript | セッションにおけるユーザーとエージェントの会話の全記録。 |
| context | モデルが推論時に「見ている」情報の領域。不要なファイルで溢れるとコストが上がり、品質が低下します。 |
| glob | パスマッチングパターン。**/*.ts = すべてのサブディレクトリのすべての.tsファイル。 |
| secret | センシティブな情報:APIキー、秘密鍵、credential。transcriptへの漏洩はリスクです。 |
| LOC | Lines of code — コードの行数。diffのサイズ測定に使用します。 |
| artifact | 各フェーズのパイプラインが残すJSONファイルで、次のフェーズが確認できるよう決定を記録します。 |
エージェントが広い権限を持つ場合、「CKをインストールすれば安全」とは結論づけないでください。Guard railを信頼する前に、2つの場所を確認してください:settings.jsonがどのhookをwireしているか、.ck.jsonが何を有効・無効にしているか。
各層はそれぞれ異なるリスクを保護します:hookはtool callをブロックし、ruleは動作を促し、hard-gateはプロセスを維持し、guard skillは呼び出されたときのみ動作します。どの層が動作していて、どの層が単なる指示なのかを把握することで、バグがPRに入り込んでPRODに上がる前に、適切な場所で監査できます。
guardrailsシステムを構築しているなら、ClaudeKitで実際に使われているpatternsを参考にできます。 hooks、skills、workflow guard railsを自分で組み合わせる代わりに、ClaudeKitの購入を検討している場合は、このreferral linkから20%割引で購入できます。
20%割引を使う