safe-mode について
コーディングセッションに任意の保護機能を追加するClaude Code向けスキルです。慎重モードは危険なBashコマンドの実行前に確認を求め、ロックダウンモードはEditとWriteの対象を指定ディレクトリ内に制限します。
主な機能
- 01危険と判定したコマンドへの警告
- 02EditとWriteのディレクトリ制限
- 03慎重モードとロックダウンの併用
- 04コマンドによるセッション制限の解除
活用シーン
- 01限定的なリファクタリングで編集範囲を制限
- 02コードレビュー中の変更対象ファイルの限定
- 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 DATABASE | SQL データの損失 |
TRUNCATE | SQL データの破壊 |
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 の操作を単一のディレクトリツリー内に制限します。無関係なコードを誤って変更するのを防ぎます。
仕組み:
- 許可するパスを設定します(絶対パス、またはリポジトリのルートからの相対パス)
- すべての Edit/Write 呼び出しで、対象ファイルが許可されたパス内にあるかを確認します
- パス外の操作は、説明を添えてブロックされます
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 ブランチの代わりにセーフモードを使う(ブランチは履歴を保護し、セーフモードはセッションを保護します)
- 慎重モードの警告を繰り返し無視する(いつも続行するなら、オフにしてください。誤った安心感はさらに危険です)