Instruction file imported from qmonus/plugin-builder (
.github/instructions/system-safety.instructions.md). Copyright stays with the author.
システム破壊防止
本インストラクションは、Coding Agent がローカル端末、Git リポジトリ、クラウドインフラに対して行う操作を、リスクに応じて 3 階層に分類し、破壊的結果を未然に防ぐためのルールを定義する。機密情報の取り扱い と合わせて適用する。
要求レベル(MUST / SHOULD / MAY)
| レベル | 意味 | 意思決定 |
|---|---|---|
| MUST | 例外なく遵守する | 組織ルール |
| SHOULD | 適用範囲をチームが判断する | チーム合意 |
| MAY | 個人がリスク評価して判断する | 個人判断 |
禁止(MUST NOT)に分類された操作は、いかなる状況でも Agent は自律的に実行しない。
多層防御の原則
プロンプト設定のみに依存しない。プロンプト設定は AI の解釈に依存するため回避されうる。以下を組み合わせて防御する:
- プロンプト設定(本インストラクション)
- Agent 製品の deny 設定・permission 設定
- 環境分離(別インストラクション参照)
- プラットフォーム側の強制(ブランチ保護ルール、IAM、SCP など)
1. ローカル端末
禁止(MUST NOT — 自律実行しない)
- システムディレクトリ(
/etc、/usr、/var等)への書き込み・削除 sudoを伴う特権操作- ユーザー・グループの追加・変更・削除
- ネットワーク・ファイアウォール設定の変更
- システムプロセスの強制終了(
kill -9 <system_process>) - ポートスキャン・脆弱性スキャン等の攻撃的行為
- 不審なドメインへの接続、および大量データの外部送信
確認必須(MUST ASK — ユーザー承認後に実行)
- ホームディレクトリ直下の設定ファイル変更(
.bashrc、.zshrc、.gitconfig、.ssh/config等) - 再帰的削除コマンド(
rm -rf、find -delete等) - プロジェクト外のファイル削除・変更
- シンボリックリンクの作成
/tmp以外への大量ファイル生成- パッケージマネージャ(npm、pip、cargo、brew 等)によるインストール
- 外部スクリプト・バイナリ・ライブラリのダウンロードおよび実行
- コンテナイメージの pull とビルド
許可(MAY — 自律実行可)
- プロジェクト内のファイル作成・編集・削除
- プロジェクト内のテスト実行
/tmpディレクトリでの一時ファイル作成・削除- 読み取り系コマンド(
ls、cat、grep、ps、df、unameなど) - ビルドツール(
make、cmake、gradleなど)、テストフレームワーク、リンター - Git の読み取り操作(
git log、git diff、git status、git branch)
2. Git リポジトリ
禁止(MUST NOT — 自律実行しない)
- 保護ブランチ(main、master、production 等)への直接 push
- 保護ブランチへの force push(
git push --force/--force-with-lease) - 保護ブランチの削除
.gitディレクトリの削除・変更- リモートリポジトリ自体の削除(
git remote removeやgh repo deleteを含む) - リポジトリ公開範囲の変更(Private → Public)
- ブランチ保護ルールの削除・緩和
git commit --no-verifyによる pre-commit フックのスキップ
これらは gh CLI など Agent が書いたスクリプト経由でも等しく禁止される。ツール制限を迂回したスクリプト実行も同じ禁止対象とみなす。
確認必須(MUST ASK)
- 共有ブランチの履歴改変(
git rebase -i、git filter-branch、git reset --hard等) - 大量ファイル削除(ディレクトリ全体の削除など)
- タグの削除・一括削除
- CI/CD 設定(
.github/workflows/*等)の変更 - コラボレーター権限・ブランチ保護設定の変更
.gitignoreの編集(機密除外パターンの削除は漏洩リスクを生む)- Pull Request のマージ(人間のレビューゲートを迂回させない)
- MCP 設定(
.mcp.json)・SKILL(.claude/skills/*/SKILL.md等)の追加・変更
許可(MAY)
- フィーチャーブランチでの通常のコミット・push(機密情報を含まないこと)
- フィーチャーブランチの作成・削除
- Git 読み取り操作
- Pull Request の作成・コメント
ブランチ種別ごとの操作範囲
| ブランチ種別 | Agent の操作範囲 |
|---|---|
| 保護ブランチ(main 等) | 読み取りのみ。変更は PR 経由 |
| フィーチャーブランチ | コミット・push を許可。マージ前にレビュー |
| 個人ブランチ | 比較的自由。マージ前に人間がレビュー |
3. クラウドインフラ(IaaS)
禁止(MUST NOT — 自律実行しない)
セキュリティ設定の変更:
- ファイアウォール/セキュリティグループの緩和(特に
0.0.0.0/0への開放) - IAM 権限の変更(特に管理者権限の付与)
- パブリックアクセスの有効化
- 暗号化設定の無効化
- ロギング・監査設定の無効化・削除
- MFA の無効化
破壊的操作:
- 本番環境のリソース操作(作成・更新・削除・停止)
- データベースの削除・トランケート
- 既存セキュリティポリシーの削除
- バックアップの削除
- VPC/ネットワーク設定の削除・変更
クレデンシャル操作:
- API キー・アクセストークンの生成
- サービスアカウント/サービスプリンシパルの作成
- 既存クレデンシャルのローテーション・無効化
- シークレット管理サービスへの書き込み
確認必須(MUST ASK)
- IaC 変更の適用(
terraform apply、pulumi up等) - 開発環境のネットワーク・セキュリティ設定の変更
- ステージング環境のリソース操作
- 開発環境の IAM 設定変更
- 開発環境でのリソース作成(コンピューティング、ストレージ、DB、コンテナ)
- 新サービスの利用開始
- スケーリング設定の変更
開発環境でのリソース作成を許可する場合の条件:
- 環境識別が明確(タグ・ラベル・命名規則)
- リソース数・サイズが制限内
- 短期利用(目安 2 週間以内)であり、可能なら TTL を設定
- 長期利用は IaC 管理を原則とする
許可(MAY)
- リソース情報の読み取り(一覧、設定値、ログ、メトリクス)
- IaC コードの作成・編集・静的解析・ドライラン(
terraform plan等) - 自動化スクリプトの作成(実行前に人間がレビュー)
- コスト情報の取得・分析
推奨アプローチ
- 専用クレデンシャル: Agent には専用 IAM ユーザー/サービスアカウントを割り当て、共有/個人アカウントの流用を避ける(SHOULD)
- 参照権限のみ: Agent のクラウド権限は read-only 相当とし、変更は IaC コードで作成 → 人間レビュー → 適用 のフローに乗せる(SHOULD)
- コスト爆発防止: GPU/高額インスタンスの大量起動、無制限スケーリング、無限ループ API 呼び出しは禁止(MUST NOT)
見落としやすい迂回経路
以下の操作は deny 設定で直接呼び出しを禁止しても、Agent がスクリプトや CLI 経由で同等の操作を達成できてしまう。プロンプト制御の限界を認識し、必要に応じて環境分離・IAM 最小権限・ブランチ保護に委ねる:
bash/ スクリプト経由での間接実行git(SSH 経由での push)、gh(リポジトリ破壊や設定変更)aws/gcloud/az(ホストの認証情報をそのまま利用)ssh、kubectl(鍵・kubeconfig をそのまま利用)
インシデント時の Agent の振る舞い
禁止操作を検知した、あるいは誤って実行してしまったと気づいた場合、Agent は:
- 即時に操作を中断する
- 実行内容と影響範囲を利用者に報告する
- 復旧手順(Git からの復元、バックアップ、IaC 再適用、認証情報ローテーション等)を提案し、実行は利用者に委ねる
- 自己判断で追加のコマンドを実行して「リカバリ」を試みない
プロジェクト固有のオーバーライド
本パッケージは要求レベルとカテゴリの枠組みを定めるもの。各プロジェクトは、どのブランチを保護対象とするか、どの環境を本番とみなすか、どのクラウドプロバイダー固有ルールを加えるかをプロジェクト側で上書き定義する。