Claude Code の解禁: 未公開の設定と隠された強力な機能
Claude Codeは強力なAIコーディングアシスタントとして設計されていますが、公式ドキュメントはその表面をなぞっているに過ぎません。ソースコード(具体的にはバージョン 2.1.87)を分析することで、フックを介したプログラマブルなミドルウェア層から、自己改善型のメモリシステムに至るまで、膨大な未公開の設定と機能が明らかになりました。
これらの機能は、Claude Codeを単なるチャットインターフェースから、カスタマイズ可能な開発環境へと変貌させます。このガイドでは、最も影響力のある隠された設定と、それらをプロジェクトに実装する方法を探ります。
プログラマブルなミドルウェア: 高度なフック
ドキュメントでは、フックが stdin で JSON を受け取り、終了コード 2 で操作をブロックできると言及されていますが、ソースコードによれば、フックは stdout に JSON を返すことで、Claude の挙動をリアルタイムで変更できることが判明しました。
イベント固有のレスポンスフィールド
フックのタイプに応じて、特定のフィールドを返すことで実行フローを変更できます。
- PreToolUse:
updatedInput: ツールが実行される前に、ツールの入力を書き換えます(例: git コマンドに--dry-runを追加する)。permissionDecision: ユーザーへのプロンプトなしに、「許可 (allow)」または「拒否 (deny)」を強制します。permissionDecisionReason: UI に表示される決定の理由を提供します。additionalContext: 会話のコンテキストにテキストを直接注入します。
- SessionStart:
watchPaths: 自動ファイル監視を設定し、FileChangedイベントをトリガーします。initialUserMessage: 最初のユーザーメッセージの前にコンテンツを挿入します。additionalContext: セーション全体で持続的なコンテキストを注入します。
- PostToolUse:
updatedMCPToolOutput: Claude が MCP ツールから受け取る出力を変更します。additionalContext: ツールが実行された直後にコンテキストを注入します。
- PermissionRequest:
decision:updatedInputまたはupdatedPermissionsを使用して、プログラム的に許可または拒否を行います。
フックの実行制御
標準的な type と command フィールド以外に、3つの未公開フラグがフックの挙動を根本的に変えます。
once: true: フックは一度だけ実行され、その後自動的に削除されます。一度限りの環境セットアップ(例: テンプレートから.envファイルを作成する)に理想的です。async: true: モデルをブロックせずにバックグラウンドでフックを実行します。監査ログの記録やテレメトリに最適です。asyncRewake: true: フックは非同期で実行されますが、終了コード 2 で終了した場合にモデルを「起こす」ことができ、操作をブロックできます。これにより、機密情報の検出のような、違反が見つかったときのみフローを中断する非ブロッキングな安全スキャンが可能になります。
スキルとエージェントの拡張
.claude/ 内のスキルとエージェントは、基本ドキュメントをはるかに超える frontmatter フィールドをサポートしています。
高度なスキル設定
model: 特定のスキルに対してモデルをオーバーライドします(例:haikuを高速な linting 用に、opusを深いアーキテクチャレビュー用に使用する)。effort: 推論の深さをlow,medium,high, またはmaxの値で制御します。hooks: スキルの活動期間に特化したスコープのフックを定義します。これらはスキルが開始されるときに登録され、終了時に解除されます。agent: スキルの実行を特定のカスタムエージェントに委任します。disable-model-invocation: true: モデルによるスキルの自動呼び出しを防止します。スキルは/skill-nameを通じてのみトリガー可能です。
カスタムエージェントの強化
.claude/agents/ 内のカスタムエージェントは、以下のフィールドでさらにチューニング可能です。
color: UI の色(例:red,blue,green)を設定し、異なるエージェントを視覚的に区別します。memory: 呼び出しをまたいで持続的なメモリを有効にします。オプションにはuser(グローバル),project(プロジェクトごと),local(プロジェクトごとのプライベート) があります。これにより、エージェントントがコードベースのパターンや過去の知見を注入することが可能になります。omitClaudeMd: true:CLAUDE.mdの指示階層の読み込みをスキップします。これにより、エージェントがプロジェクト固有の慣習ではなく、業界標準に基づいた偏りのないレビューを提供できるようになります。criticalSystemReminder_EXPERIMENTAL: すべてのターンにおいて再注入されるメッセージです。会話の圧縮(compaction)中に、重要な安全ルールが失われないようにすることを保証します。
「YOLO Classifier」とオートモード
内部的に、Claude Code のオートモードの権限システムは「YOLO Classifier」と呼ばれています。allow や soft_deny パターンを定義することはできますが、settings.json の environment 配列には、セットアップに関する自然言語による説明を記述できます。
「This is a local dev machine with no production database access」(これは本番稼働中のデータベースへのアクセス権のないローカル開発環境です)や、「The test suite is safe to run repeatedly」(テストスイートは繰り返し実行しても安全です)といった文字列を追加することで、分類器にコンテキストを提供し、曖昧なコマンドに対する安全性の判断に役立てることができます。これにより、実質的に AI に対して環境のリスクレベルを「ブリーフィング」していることになります。
自己改善: オートメモリとドリーミング
2つの設定により、モデルの再学習なしに Claude Code が進化するための複合的な学習ループを可能にします。
autoMemoryEnabled: true: バックグラウンドエージェントがセッションから永続的なメモリ(好み、パターン、決定事項)を抽出し、プロジェクトメモリに保存します。autoDreamEnabled: true: 24時間ごとに、十分なセッションが蓄積された場合、バックグラウンドエージェントがトランスクリプトをレビューしてメモリを統合、重複の削除、および古いエントリの Pruning(枝切り)を行っています。
技術的な注意点とコミュニティの視点
これらの機能は絶大な大な力を提供しますが、リスクも伴います。Hacker News のコミュニティメンバーは、いくつかの重要な考慮事項を指摘しています。
「Claude パッケージは週に 10 個の新バージョンが公開されています... 未公開のトリックを頼りにすることは決してはいけません。それは変更され、非常に特定の構成を壊す可能性があります。」
これらの機能はソースコードの分析によって発見されたものであり、一部は明示的に EXPERIMENTAL とマークされているため、予告なしに変更される可能性があります。さらに、一部のユーザーは、機能セットは膨大なですが、モデルが複雑なタスクに対して時折「諦める」ことがあると指摘しており、設定だけで全ての信頼性の問題を解決することはできないことを示唆しています。
権限のためのパターン言語の要約
permissions や hooks のマッチャーを構成する場合、ソースコードによれば、以下のような glob-like なパターン言語が使用可能です。
| Pattern | Description |
|---|---|
Bash(npm *) |
「npm 」の後にワイルドカードを使用 |
Read(src/**/*.ts) |
TypeScript ファイルに対する再帰的なディレクトリ一致 |
mcp__slack__post_message |
特定の MCP サーバー上の特定のツール |
mcp__slack__* |
Slack サーバー上のすべてのツール |
これらの隠された設定を活用することで、開発者は標準的なチャット体験を超え、自身のコードベースや安全要件に合わせた、真に自律的で自己学習型の開発エージェントをビルドアップすることが可能になります。