mcpField
S
safe-mode

safe-mode

github.com/rohitg00セキュリティ2.9k147 回インストール4 週間前に更新
リポジトリ

safe-mode について

コーディングセッションに任意の保護機能を追加するClaude Code向けスキルです。慎重モードは危険なBashコマンドの実行前に確認を求め、ロックダウンモードはEditとWriteの対象を指定ディレクトリ内に制限します。

主な機能

  1. 01危険と判定したコマンドへの警告
  2. 02EditとWriteのディレクトリ制限
  3. 03慎重モードとロックダウンの併用
  4. 04コマンドによるセッション制限の解除

活用シーン

  1. 01限定的なリファクタリングで編集範囲を制限
  2. 02コードレビュー中の変更対象ファイルの限定
  3. 03危険なシェルコマンドへの確認追加

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/rohitg00/pro-workflow --skill safe-mode

インストール後、Claude Code で/safe-modeを入力して読み込まれたか確認します。

詳細

セーフモード

AI コーディングセッション中の破壊的な操作を防ぐ、3 段階の保護機能です。

注: これらのフックはスキルのスコープ内でのみ有効です。/safe-mode を呼び出したときにのみ作動します。hooks.json のグローバルな permission-request.js フックは、危険なコマンドに対する常時アラートを提供します。セーフモードでは、オプトイン式のブロック機能とディレクトリ制限を追加できます。

モード

慎重モード
/safe-mode cautious

Bash コマンドを実行前にインターセプトします。危険なパターンを警告しますが、ブロックはしません。判断はユーザーに委ねられます。

検出対象のパターン:

パターンリスク
rm -rf / rm -r再帰的な削除
DROP TABLE / DROP DATABASESQL データの損失
TRUNCATESQL データの破壊
git push --force / git push -fリモート履歴の書き換え
git reset --hardローカル履歴の損失
git clean -f未追跡ファイルの削除
git checkout . / git restore .すべての変更を破棄
chmod 777全ユーザーに書き込み可能な権限
シェルにパイプで渡された curl または wgetリモートコードのパイプ実行
> /dev/sda / dd if=ディスクレベルの操作
:(){ :|:& };:フォーク爆弾
sudo rm管理者権限での削除

動作: フックは権限 ask を返すため、Claude Code は、たとえば Safe mode: rm with -r or -f のように、該当するパターンを示すプロンプトを表示します。コマンドを承認するか拒否してください。このプロンプトは自動モードでも表示されます。

ロックダウンモード
/safe-mode lockdown <path>

Edit と Write の操作を単一のディレクトリツリー内に制限します。無関係なコードを誤って変更するのを防ぎます。

仕組み:

  1. 許可するパスを設定します(絶対パス、またはリポジトリのルートからの相対パス)
  2. すべての Edit/Write 呼び出しで、対象ファイルが許可されたパス内にあるかを確認します
  3. パス外の操作は、説明を添えてブロックされます
LOCKDOWN ACTIVE: Edits restricted to src/api/

  Blocked: Edit to src/utils/helpers.ts
  Reason: File is outside the lockdown path (src/api/)

  To edit files outside the lockdown, run: /safe-mode clear

使用例:

  • 他のモジュールに触れずに、1 つのモジュールを集中的にリファクタリングする
  • テストを別の場所で実行しながら、特定のディレクトリ内のバグを修正する
  • ジュニア開発者向けのガードレールとして、変更の影響範囲を制限する
  • コードレビューセッションで、レビュー対象のファイルのみを編集する

スコープ: プロジェクトルートを基準に設定されます。/safe-mode clear を実行するまで設定が維持され、/safe-mode を呼び出したセッションでのみ適用されます。

解除
/safe-mode clear

現在のセッションの制限をすべて解除します。慎重モードの警告とロックダウンの制限の両方が無効になります。

SAFE MODE: All restrictions cleared for this session.

実装

このスキルを呼び出すと、scripts/safe-mode-guard.js を実行する Bash|Edit|Write 用の PreToolUse フックが 1 つ登録されます。スキルのフックは、セッションの残りの間も登録されたままです。モードが設定されるまでは、ガードは何もしません。

モードを設定する

ユーザーが /safe-mode <mode> を実行したら、プロジェクトルートからガードの setter を実行します。

node "${CLAUDE_PLUGIN_ROOT}/scripts/safe-mode-guard.js" set cautious
node "${CLAUDE_PLUGIN_ROOT}/scripts/safe-mode-guard.js" set lockdown src/api/
node "${CLAUDE_PLUGIN_ROOT}/scripts/safe-mode-guard.js" set clear

その後、setter が出力した行を報告してください。

慎重モード(Bash)

ガードは tool_input.command を、破壊的なパターンの固定リストと照合します。対象は、再帰的または強制的な rm、DROP と TRUNCATE、強制プッシュ、ハードリセット、git clean -f、すべての変更の破棄、chmod 777、シェルへの curl または wget のパイプ、ディスクレベルの書き込み、フォーク爆弾、sudo rm です。一致した場合は、パターンを理由として permissionDecision: "ask" を返します。一致しない場合は、そのまま通過します。

ロックダウンモード(Edit と Write)

ガードは tool_input.file_path をプロジェクトルートに対して解決し、シンボリックリンクをたどったうえで、ロックダウン対象のパス内にあるかを確認します。パス内であれば、そのまま通過します。パス外の場合は終了コード 2 で終了し、編集をブロックして理由を Claude に伝えます。

状態

モードは $TMPDIR/pro-workflow/safe-mode-<hash>.json に保存され、プロジェクトルートをキーとして使用するため、2 つのプロジェクトで状態が共有されることはありません。

{ "cautious": true, "lockdownPath": "/Users/dev/project/src/api", "root": "/Users/dev/project" }

set clear を実行するとファイルが削除されます。ファイルはセッション終了後も残るため、作業が終わったら解除してください。新しいセッションでは、フックがスキルのスコープ内にあるため、/safe-mode を呼び出した後にのみ再び適用されます。

モードの併用

慎重モードとロックダウンモードは同時に実行できます。

/safe-mode cautious
/safe-mode lockdown src/api/

これで、次のように動作します。

  • 破壊的な操作を行う Bash コマンドに警告が表示されます
  • Edit/Write の操作は src/api/ のみに制限されます

解除すると、両方の設定が削除されます。

使用するタイミング

状況モード
本番環境に近いコードで作業する慎重
1 つのモジュールを集中的にリファクタリングするロックダウン
慣れていないコードベースで、慎重に進めたい慎重
ペアプログラミングで、AI の作業範囲を制限するロックダウン
制限が不要になった解除

アンチパターン

  • テストを編集する必要があるのに、ロックダウンを有効にしたままにする(パスを更新するか、解除してください)
  • Git ブランチの代わりにセーフモードを使う(ブランチは履歴を保護し、セーフモードはセッションを保護します)
  • 慎重モードの警告を繰り返し無視する(いつも続行するなら、オフにしてください。誤った安心感はさらに危険です)

コメント