top of page

Tesslのコーディングエージェント向けガードレール、リポジトリファイルを制御レイヤーへ

1 日前
読了時間: 20分

Tesslは、ホスト型モデルへの依存が高まるなかでも、チームが所有するファイルを通じてコーディングエージェントを制御する4部構成のフレームワークを公開した。Tesslのコーディングエージェント向けガードレールは、永続的な指示、パス固有のルール、再利用可能な機能、自動フックを分離する。この区別は重要だ。文章で記された依頼と強制される制約は、同じ保護をもたらすわけではない。

このフレームワークは、CLAUDE.md、.claude/rules/、.claude/ 配下の機能ファイル、そしてClaude Codeの設定を通じて接続されるフックを用いる。各レイヤーは、エージェントのワークフローにおける異なる地点を担う。これらを組み合わせることで、運用上の知識を一時的な会話から、バージョン管理されたリポジトリアセットへ移す。

中心となる対立は、Tesslと別の開発者ツールの比較ではない。助言的なコンテキストと決定論的な強制の違いである。モデルは文章を誤解したり見落としたりする可能性がある一方、フックはアクションの実行前に拒否できる。チームは今、どの期待をプロンプトに置き、どれに実行可能な制御が必要かを判断する必要がある。

Tesslのコーディングエージェント向けガードレール、1つのプロンプトを4層に分割

Tesslの重要なアプローチは、いつ読み込まれるか、何を制御するか、エージェントが無視できるかどうかに基づいてガイダンスを分離する点にある。

4ファイルのフレームワークは、CLAUDE.md から始まる。このリポジトリファイルは、Claude Codeに永続的なプロジェクトコンテキストを与える。適した内容には、ビルドコマンド、アーキテクチャ上の境界、ディレクトリの規約、テストに関する期待が含まれる。

このレイヤーには、多くのタスクにわたってエージェントが必要とする事実を記述すべきである。たとえば、サービスが特定のパッケージマネージャーを使うことや、データベースマイグレーションが追記のみであることを説明できる。また、変更が正しく動作するかを確認するコマンドを特定することもできる。

第2のレイヤーでは、焦点を絞ったルールを .claude/rules/ に配置する。ルールには、どの時点でその指示をアクティブコンテキストに入れるかを決めるパスパターンを含められる。たとえば、API検証ポリシーは、エージェントがAPIハンドラーに触れる場合にのみ表示できる。

パスによるスコープ設定は、大きな指示ファイルに伴う実務上の問題に対処する。ドキュメントを扱うエージェントには、すべてのバックエンド規約をコンテキストに入れる必要はない。無関係な内容の読み込みはトークンを消費し、現在のタスクに重要な指示と競合する。

第3のレイヤーは、再利用可能な機能を .claude/ 配下に保存する。スキルは、SKILL.md ファイル、指示、スクリプト、補助リソースを含むフォルダーである。エージェントまたは開発者が必要に応じて呼び出せる手順をパッケージ化する。

リリースチェックリストは、その違いをよく示す。リポジトリの概要ではリリース方法を記載できるが、完全な手順はリリーススキルに置くべきだ。これにより、より長い手順を通常のコーディングセッションから外せる。

第4のレイヤーは、定義されたライフサイクルイベントで実行すべきアクションにフックを用いる。フックは、提案されたツール呼び出しを検査したり、編集後にフォーマッターを実行したり、危険なコマンドを停止したりできる。通常、その設定はsettingsまたは関連するプロジェクトファイルに置かれる。

この分離は、「エージェントへの指示」の意味を変える。ファイルは、モデルにすべてを記憶するよう求める1つの大きなプロンプトではなくなる。それぞれ異なる読み込みと強制の振る舞いを持つ、独立した制御になる。

Anthropic自身のステアリングに関するガイダンスも、この割り当てを支持している。同社は、常時読み込まれるコンテキスト、パススコープのルール、オンデマンドの手順、隔離されたサブエージェント、ライフサイクル自動化を区別している。

Tesslは、そのより広範な選択肢を、リポジトリの所有権という論点へ絞り込む。モデルプロバイダーは引き続きモデルとエージェントランタイムを運用する。開発チームは、コードベース内でエージェントがどう振る舞うべきかを記述するファイルを所有する。

この所有権により、制御レイヤーは検査可能になる。チームはプルリクエストを通じて変更をレビューし、バージョンを比較し、管理担当者を割り当て、有害なルールを元に戻せる。チャット履歴が同じ運用上の明確さを提供することは稀だ。

ファイルはプロジェクトとともに移動もできる。新しいコントリビューターは、リポジトリをクローンした際に共有された規約を受け取る。新しいエージェントセッションも、誰かの以前の会話に依存せず、同じ指示を復元できる。

このフレームワークは、モデルの不確実性をなくすものではない。不確実性を、チームが個別にテストできるレイヤーへ整理する。より重要な変化はそこにある。

CLAUDE.mdをポリシーエンジンとして扱うチームに圧力

長い指示ファイルはエージェントを導けるが、アクセス制御システムとして確実に機能することはできない。

多くのチームは、すぐに改善効果が得られるため、1つの CLAUDE.md から始める。エージェントは一般的なコマンドを推測しなくなり、確立された命名パターンに従い、リポジトリの基本的な地図を得る。こうした利点により、このファイルは容易に過度な役割を担うようになる。

問題は、例外のたびに別の段落が追加されるときに現れる。セキュリティ要件、リリース手順、フロントエンド規約、データベース制約、個人的な好みが同じ文書に蓄積していく。その結果、すべてのセッションがコンテキストのコストを負担する。

Anthropicは、ルートファイルを概要またはインデックスとして扱うことを推奨している。同社の現行ガイダンスは、CLAUDE.md を200行未満に抑え、所有者を割り当て、コードと同様に変更をレビューすることを示している。この推奨は、単なる書式上の好みではなく、注意力の問題を反映している。

常時読み込まれるすべての指示は、ソースファイル、タスク詳細、ツール出力、直近の会話と競合する。ガイダンスを増やしても、より強い遵守が保証されるわけではない。混雑したプロンプトでは、関連する要件を見つけにくくなる可能性がある。

ネストされた指示ファイルは、一部の知識を局所化する助けになる。公式のプロジェクトメモリドキュメントによると、作業ディレクトリより下にあるファイルは、Claudeがツリーの該当部分にアクセスした際に読み込める。これは、モノレポ内のチーム固有の規約を支援する。

パススコープのルールは、横断的な関心事に対してより直接的な選択肢を提供する。ルールは、複数のディレクトリに指示を複製することなく、複数のファイルパターンを対象にできる。別々のパッケージにまたがるすべてのマイグレーションファイルや、すべてのAPIハンドラーを対象にできる。

この区別は、エンジニアリングリーダーに要件の分類を求める。判断の余地が依然として有用なコーディング規約は、コンテキストに属する。順序立てた手順を必要とする反復可能なワークフローは、スキルに属する。禁止するコマンドには、より強い障壁が必要だ。

この分類がなければ、CLAUDE.md は非公式なポリシーデータベースになる。開発者は、「本番設定を絶対に変更しない」と書けば信頼できる境界が生まれると考えるかもしれない。しかし、そうではない。

エージェントは、変化するコンテキストのなかで文章を解釈する。長いセッション、曖昧な指示、競合するファイル、プロンプトインジェクションは、遵守を弱めうる。そのような状況では、能力の高いモデルであっても誤った判断を下す可能性がある。

この制約は監査にも影響する。レビュー担当者は文が存在することを確認できても、実際の強制率を推測することはできない。ルールが正しく読み込まれていても、より直接的な指示に負ける可能性がある。

自律的または無人のワークフローを導入するチームは、最も大きな圧力に直面する。監督下のコーディングで規約を見落とせば、レビュー作業が発生する。無人の実行で安全制約を見落とせば、ファイルの変更、データの露出、意図しないコマンドの実行につながりうる。

したがってこのフレームワークは、チームに文書の大きさでガバナンスを測るのをやめるよう求める。より良い問いは、各要件が十分な権限を伴って適切なタイミングでエージェントに届くかどうかだ。

この問いはClaude Codeを超えて広がる。他のコーディングエージェントも、異なる名称でリポジトリ指示ファイル、再利用可能なワークフロー、イベントベースの制御をサポートしている。具体的なパスは異なるが、設計上の問題は一貫している。

リポジトリには、簡潔なコンテキスト、選択的な手順、限定的な権限、強制可能な境界が必要である。これらの機能を1つのプロンプトにまとめると、その違いが隠れてしまう。

助言的な指示と決定論的なフックは同等ではない

決定的な境界は、モデルが従うことを選ぶのか、それともランタイムが不遵守を阻止するのかにある。

CLAUDE.md の記述は、モデルの次の判断に影響する。ルールファイルも同様だが、より適切に対象を絞れる。スキルは再利用可能な手順を提供するが、エージェントは依然としてその手順を解釈し、実行する。

フックは別のレイヤーで動作する。Claude Codeは、ツールリクエスト、ファイル編集、セッション開始、完了の試行といった定義済みイベントが発生するとフックをトリガーする。ランタイムがフックを開始するのであり、モデルがそれを思い出すのを待つわけではない。

PreToolUse フックは、実行前に提案されたコマンドを検査できる。コマンドがポリシーに違反する場合、コマンドフックはブロック結果を返せる。その後エージェントは理由を受け取り、別の経路を選ばなければならない。

公式のフックガイドは、複数のハンドラータイプを説明している。コマンドハンドラーはスクリプトを実行する一方、プロンプトハンドラーとエージェントハンドラーはモデルの判断を用いる。この違いは、すべてのフックが完全に決定論的ではないため重要である。

常に起動するフックは、トリガーのレベルでは決定論的である。ただし、LLMがリクエストを評価する場合、その判断は依然として確率的になりうる。チームは、ソフトウェアが直接評価できる条件については、コマンドベースのチェックを使うべきである。

生成ファイルへの変更を禁止するリポジトリを考えてみよう。文章による指示は、エージェントにそれらを避けるよう伝える。パスルールは、関連ファイルが現れた際にその期待を繰り返す。フックは書き込み先を検査し、操作を拒否できる。

これらのレイヤーは連携できる。指示はリポジトリの設計を説明し、フックは既知の失敗モードを防ぐ。エージェントはコンテキストと強制可能な境界の両方を受け取る。

同じパターンはコマンドにも当てはまる。チームはスキルでデプロイ手順を説明し、そのうえで権限またはフックを通じて本番環境への直接コマンドをブロックできる。スキルは承認済みの経路を示し、制御は近道を防ぐ。

編集後フックは別の目的を果たす。エージェントがファイルを変更した後、フォーマット、リンティング、焦点を絞った検証を実行できる。この自動化により、エージェントがチェックリストの項目をもう1つ記憶していることへの依存が減る。

完了フックは、エージェントが停止する前に必要なチェックが通過したかをテストできる。ただし、ループへの対策が必要である。失敗した停止フックがエージェントに継続を繰り返し求めると、結果を改善しないまま時間を消費する可能性がある。

フックは、実行可能なコードを制御プレーンに導入する。欠陥のあるスクリプトは、正当な作業をブロックし、情報を漏えいさせ、該当するすべてのイベントに遅延を加える可能性がある。チームは、ビルドやデプロイの自動化と同じ注意を払ってフックの変更をレビューしなければならない。

所有権があるからといって、自動的に安全になるわけではない。悪意あるリポジトリには、危険な振る舞いを要求する設定が含まれている可能性がある。開発者には依然として、ワークスペースの信頼、制限的な権限、コードレビュー、未知のプロジェクトに対する隔離された実行が必要である。

したがって、「自分たちが所有するファイル」という表現には2つの意味がある。ポータビリティとガバナンスを表すと同時に、責任も割り当てる。チームはそれらのファイルを保守し、その効果をテストし、不正な変更から保護しなければならない。

このため、権限は依然として重要である。Anthropicの権限制御は、ツールとコマンドに対する許可および拒否ルールをサポートする。拒否ルールは、一致する許可ルールより優先される。

フックはより豊かな条件を評価できる一方、権限はより直接的なアクセス境界を提供する。重大な結果を伴う場合、どちらもオペレーティングシステムレベルの隔離に代わるものにはならない。

コンテナ、制限付き認証情報、ブランチ保護、読み取り専用マウントは、依然としてより強力な統制手段である。リポジトリ内のファイルは、そのより大きな防御システムの一部に位置づけられる。インフラセキュリティを置き換えられるかのように装うことなく、リスクを低減すべきだ。

重要なポイントはシンプルだ。要件が「推奨する」としているなら、ガイダンスのままでよい。「決してしてはならない」としているなら、チームは強制可能な統制を探すべきである。

Skillsは反復的なエージェント作業をレビュー可能なリポジトリ資産に変える

Skillsが重要なのは、一時的なプロンプト作成の習慣を、チームが確認、テスト、再利用できる手順へと変換するからだ。

開発者は、試行錯誤を通じて有用なエージェントのワークフローを見つけることが多い。最終的なプロンプトには、診断コマンド、判断基準、書式要件、検証手順が含まれる場合がある。共有ファイルがなければ、その知識は一つの会話の中に消えてしまう。

Skillは、こうしたワークフローを名前付きディレクトリに保存する。SKILL.md にはメタデータと指示が格納され、隣接するスクリプトや参照資料が手順を支える。リポジトリは、完全なパッケージをバージョン管理できる。

Claude Codeは初期段階ではskillの名前と説明だけを読み込む。skillが関連する場面、または誰かが呼び出したときに、全文がコンテキストへ入る。公式のskill documentationでは、この仕組みを長い手順を CLAUDE.md に置く代替手段として位置づけている。

この読み込みモデルには経済的な利点がある。詳細なリリース、移行、レビュー、インシデント対応の手順を、すべてのセッションに負荷をかけることなく利用可能にできる。コンテキストは常設ではなく、条件付きになる。

発見しやすさも向上する。新任のエンジニアはskillsディレクトリを確認し、チームがどのワークフローを正式化しているか把握できる。ファイルは、人間とエージェントの双方に組織が何を期待しているかを示す。

レビュー可能性も同様に重要だ。チャット内で変更されたプロンプトは監査が難しい。変更されたskillは差分を生む。レビュー担当者は、日常的な利用に入る前に、安全確認の削除やコマンドの追加を特定できる。

Skillsには、決定論的なサブタスク向けのスクリプトを含められる。移行skillは、モデルに検証ロジックの再現を求めるのではなく、リポジトリが所有するバリデーターを呼び出せる。エージェントが判断を担い、コードが反復可能な計算を担う。

ただし、skillはあくまで主に手順である。その存在だけで、エージェントが適切なタイミングで呼び出すことを証明できるわけではない。説明にはskillを適用すべき条件を明確に記載し、チームは発火動作を検証するテストを用意する必要がある。

機密性の高い操作では、手動呼び出しによって曖昧さを減らせる。開発者は自動マッチングに頼るのではなく、リリースレビューを明示的に要求できる。skillはその際、一貫したワークフローを提供する。

Capabilitiesは保守義務も生む。コマンド名、アーキテクチャ、デプロイシステムが変われば、手順は古くなる。信頼できるskillには、オーナー、例、レビューサイクルが必要だ。

チームは権威の重複に注意すべきである。同じ要件が CLAUDE.md、3つのrule、2つのskillに書かれていると、後の編集で矛盾が生じうる。するとエージェントは、正しいはずの情報を複数の版で受け取ることになる。

よりよい構成では、各事実に主要な置き場所を一つだけ与える。ルートファイルはcapabilityの完全な本文を複製せず、そこを参照できる。path rulesはローカルな制約を追加し、skillsは複数ステップの手順を所有する。

これは通常のソフトウェア設計に似ている。責務が明確な小さなモジュールは、一つのグローバル設定オブジェクトよりも変更しやすい。エージェント統制レイヤーも、同じ分離の恩恵を受ける。

このアプローチは組織の知識も保持できる。ビルド復旧、依存関係のアップグレード、セキュリティレビューは、少数の経験豊富なエンジニアに依存することが多い。こうしたワークフローをエンコードすれば、将来のセッションでも知識を活用できる。

このつながりは、技術的な根拠が複数の文書に分散している場合に特に重要である。検索可能なengineering knowledge baseはソース資料を支え、skillsはエージェントがそれをどう使うかを定義できる。

両者は異なる問題を解決する。ナレッジストレージは事実と意思決定を保存する。Skillsは、選択された知識を運用手順へと変換する。

実務上の利点は、エージェントが突然無謬になることではない。チームが、エージェントに従わせることを期待する手順を確認できる点にある。

ファイル所有だけではセキュリティギャップを解消できない

リポジトリで管理されるガードレールは説明責任を高めるが、競合、改ざん、不完全な強制の影響を依然として受ける。

第一の不確実性は、指示の優先順位に関するものだ。プロジェクトには、ルートのガイダンス、ネストされたガイダンス、path rules、skill instructions、ユーザー設定、組織による管理設定が存在しうる。これらのレイヤーは互いに矛盾する場合がある。

開発者個人の設定が動作を変えているにもかかわらず、チームはリポジトリが単一のポリシーを表現していると考えるかもしれない。逆の問題も起こりうる。中央ポリシーが、リポジトリが期待するローカルワークフローを妨げる可能性がある。

したがって、設定の可視性は不可欠である。開発者には、どのファイルが読み込まれ、どのルールが一致し、どの権限が判断に影響したかを確認する手段が必要だ。そうでなければ、失敗はランダムに見える。

第二の不確実性は、変更可能性に関するものだ。エージェントが自身を制約するファイルを編集できる場合、統制プレーンは通常のコードと同じ信頼境界を共有する。タスクによって、近くの設定を変更する際にルールが誤って弱められる可能性がある。

重要な統制には、より強い保護を与えるべきである。コードオーナーシップ、必須レビュー、保護ブランチ、読み取り専用の実行環境は、未承認の変更を困難にできる。機密性の高いhookをエージェントの善意に依存させるべきではない。

第三の不確実性は、移植性である。CLAUDE.md は広く認知されているが、rules、skills、agents、hooksのディレクトリは依然としてツール固有だ。複数のコーディングエージェントをサポートするリポジトリには、並列した設定が蓄積される可能性がある。

Tesslには、製品が再利用可能なエージェントコンテキストと仕様を管理するため、この断片化を減らす利害がある。したがって、そのフレームワークには一般的な設計パターンと、特定のツール環境の両方が反映されている。

チームはこの二つの主張を分けて考えるべきだ。レイヤー化モデルはコーディングエージェント全般で有用である。一方、正確なファイルパスと読み込み動作は、各ランタイムに照らして検証しなければならない。

第四の不確実性は、誤った安心感に関するものだ。hookは既知のコマンドパターンをブロックできても、同等の操作を見逃す可能性がある。あるシェルコマンドへのdeny ruleが、そのコマンドと同じ効果を生むスクリプト、パッケージタスク、外部ツールを必ずしも対象にするとは限らない。

統制には敵対的テストが必要だ。チームは、別の構文、間接的なスクリプト、異なるツールによって禁止操作を試みるべきである。元の例だけを通過するガードレールは脆弱なままだ。

正当な作業についてもテストが必要である。広範なブロックは無害なコマンドを妨げたり、一般的なワークフローを中断したりする可能性がある。その結果、開発者は例外を求め、統制を回避し、あるいは完全に無効化するかもしれない。

レイテンシーも別のトレードオフを生む。編集ごとのフォーマッターは許容できるかもしれないが、ファイル変更のたびに完全なテストスイートを実行すると、エージェントは使い物にならなくなる可能性がある。統制は、イベントのコストと影響に合わせるべきだ。

高速なチェックは各編集の近くに置くべきである。より大きな検証は、コミット前または完了前に実行できる。コストの高いセキュリティ分析は、専用skill、継続的インテグレーションジョブ、または隔離されたレビューエージェントに適している場合がある。

プロンプトインジェクションは依然として重大な懸念である。エージェントは、信頼できないissueテキスト、ドキュメント、生成物、依存関係のコンテンツを読み取る可能性がある。これらの入力に含まれる悪意ある指示は、リポジトリのガイダンスと衝突することがある。

決定論的な権限と隔離された実行は、起こりうる被害を抑える。信頼できるテキストと信頼できないテキストの両方を同じモデルが解釈するため、プロンプト指示だけではセキュリティ境界を確立できない。

したがって、Tesslの提案を最も安全に解釈するなら、その見出しが示すほど広範なものではない。ファイルは保守可能な統制レイヤーを作れる。しかし、それだけで安全な自律性を保証することはできない。

フレームワークが有効かどうかは三つのシグナルで分かる

次の検証は、チームが単に設定ファイルを増やすのではなく、遵守、移植性、強制を測定できるかどうかである。

第一のシグナルは、リポジトリ指示のための評価ツールの改善だ。チームには、エージェントがルールに従ったか、正しいskillを呼び出したか、境界を尊重したかを明らかにする反復可能なタスクが必要である。

有用な評価は、クリーンな環境から始めるべきだ。同一のタスクを複数回の実行で提示し、読み込まれた設定を記録し、結果として行われた操作を比較する。これにより、一度の成功したデモでは隠される確率的な失敗を明らかにできる。

評価が日常化すれば、Tesslの所有権に関する主張はより強くなる。リポジトリファイルは、テスト可能なソフトウェア資産に近い振る舞いをするようになる。チームが成果を測定できなければ、このフレームワークは効果が不確かなプロンプト文書になるおそれがある。

第二のシグナルは、移植可能なcapability形式をめぐる収束である。Skillsはすでに、メタデータ、指示、補助ファイルを組み合わせているため、ツール横断のパッケージ標準に似ている。Rulesとhooksは、なお一貫性に欠ける。

移植性があれば、Claude Code、Codex、Cursor、その他のエージェント間で重複する保守を減らせる。また、組織は複数のほぼ同一の定義を突き合わせる代わりに、一つの統制定義をレビューできる。

ただし、表面的な移植性だけでは不十分だ。共有ファイル形式は、発火条件、権限、パスマッチング、強制のセマンティクスを保持しなければならない。同一のMarkdownが同一の動作を保証するわけではない。

エージェントベンダーが正確な読み込みルールと優先順位ルールを公開すれば、このフレームワークは信頼しやすくなる。各ランタイムが同じファイルを密かに異なる方法で解釈するなら、リポジトリ所有では運用上の曖昧さを解消できない。

第三のシグナルは、ガイダンスとハードポリシーのより強い分離である。Anthropicはすでに、モデル向けの指示をhooks、permissions、managed settings、system isolationと区別している。現在チームに必要なのは、この違いを可視化するツールだ。

ポリシーインターフェースは、どの統制が助言的で、どの統制が常に発火し、どの統制が実際に操作をブロックするかを示すべきである。監査ログは、コマンドが許可または拒否された理由を示すべきだ。

開発者があらゆる重要な制限を強制可能なレイヤーまで追跡できれば、このシグナルはフレームワークを強化する。機密性の高いポリシーが文章の中に埋もれたままであれば、フレームワークは弱まる。

エンジニアリングチームが直ちに取るべき行動は、四つのレイヤーを一度にすべて作ることではない。既存の指示を棚卸しし、各記述を機能ごとに分類すべきである。

プロジェクトの事実と一般的なコマンドは、簡潔で永続的なコンテキストに置く。ファイル固有の慣例はスコープ付きrulesに置く。反復的な手順はskillsに置く。禁止操作はpermissions、hooks、またはより強力なシステム統制に置く。

この分類は、Tesslのコーディングエージェント向けガードレールを実用的に検証する基準となる。別のエンジニアがリポジトリを確認し、何がエージェントを導き、何が要求に応じて有効になり、何が回避できないかを説明できるだろうか。

答えが不明確なら、そのリポジトリにはまだ統制レイヤーがない。あるのはプロンプトの集まりにすぎない。この違いが、コーディングエージェントが信頼できる協力者になるのか、それともレビュー作業を速く生み出すだけの存在になるのかを決める。

 
 

無料で始めましょう

ローカルファーストのパーソナル知識管理付きAIアシスタント

より良いAI体験のために、

remio は現在、 Windows 10+ (x64)とM-Chip Mac のみをサポートしています。

仕事のAIパートナー
remioでもっと仕事が進む

計画・作成・仕上げまで
すべてをひとつに

bottom of page