# Claude Agent SDKの便利だけど知られていない機能
🌍 Bashは使わせたいけどrmは禁止したい?スコープ付きルールでコマンド単位の制御ができます!
Claude Agent SDKでは、`Bash(npm *)` のようにツール名にスコープを付けて、コマンド単位で許可・拒否を細かく制御できます。
📌 タイトル:コマンド単位のスコープ指定
🔗 URL:
🧩 概要
`allowed_tools` や `disallowed_tools` にスコープ付きのルール(例:`Bash(npm *)`)を指定すると、ツール内の特定コマンドだけを許可・拒否できます。スコープなしでツール名を `disallowed_tools` に入れると(例:`Bash`)、ツール定義自体がClaudeのコンテキストから除去され、Claudeはそのツールの存在すら認識しません。一方、スコープ付きの拒否ルール(例:`Bash(rm *)`)は、Bashツール自体は利用可能に保ちつつ、マッチするコマンドだけを拒否します。
🛠 使い方
```python
# Python - npmコマンドのみ許可し、rmを明示的に禁止
import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions
async def main():
async for message in query(
prompt="依存関係をインストールしてテストを実行してください",
options=ClaudeAgentOptions(
allowed_tools=[
"Read", "Grep", "Glob",
"Bash(npm *)", # npmコマンドのみ自動承認
"Bash(npx jest *)", # テスト実行も許可
],
disallowed_tools=[
"Bash(rm *)", # 削除は禁止(bypassPermissionsでも拒否)
"Bash(sudo *)", # sudoも禁止
],
permission_mode="dontAsk",
),
):
if hasattr(message, "result"):
print(message.result)
```
```typescript
// TypeScript
const options = {
allowedTools: [
"Read", "Grep", "Glob",
"Bash(npm *)", // Only npm commands auto-approved
"Bash(npx jest *)", // Test execution allowed
],
disallowedTools: [
"Bash(rm *)", // Delete denied even in bypassPermissions
"Bash(sudo *)", // sudo also denied
],
permissionMode: "dontAsk"
};
```
🏗 本番システムへの組み込み方
・CIエージェントで `Bash(npm *)` や `Bash(make *)` だけを許可し、それ以外のシェル操作を禁止します
・`disallowed_tools` のスコープ付きルールは `bypassPermissions` モードでも有効なため、最終防衛ラインとして使えます
・ベアネーム(スコープなし)の拒否はツールをコンテキストから完全に除去し、スコープ付き拒否はステップ2で評価される点を理解して設計します
・環境ごとに異なるスコープルールを設定し、開発/ステージング/本番で適切な制限を適用します
💡 ユースケース
🔧 ビルドエージェントで `npm install` と `npm test` だけを許可する
🛡 `rm -rf` や `sudo` を全モードで禁止する安全ガードレール
📦 パッケージマネージャのコマンドだけを許可するデプロイエージェント
⚠️ 注意点
・ベアネーム拒否(`disallowed_tools=["Bash"]`)はツール定義自体を除去するため、Claudeはそのツールを使おうとすらしません
・スコープ付き拒否(`disallowed_tools=["Bash(rm *)"]`)はBashを残したまま特定パターンだけを拒否します
・スコープパターンのマッチングはグロブベースです。複雑なコマンドチェーンやパイプには注意してください
・`allowed_tools` に入れたスコープルールは自動承認ですが、`bypassPermissions` を制限するものではありません
✨ スコープ付きルールを使えば、「このツールは使えるけど、この操作だけはダメ」という精密な制御が可能です。安全なエージェントの設計に欠かせない機能です!
#
ClaudeAgentSDK# #
AIAgent#