自律エージェントの支出を制限する2026年版Claude Codeの7つのルール
Markdown自律エージェントによる破産を防ぐため、Claude Codeに制限を設定する7つのルールを解説します。プロバイダーの上限、Task Budgets、フック、許可リスト、キルスイッチ、サンドボックスキー、反復回数の上限です。
記事の全文を読む
重要なポイント
クラウドへの無制限のアクセス権を持つ自律エージェントは、一晩で高額な請求を発生させることがあります。こうした失敗を防ぐため、その日のうちに導入できるClaude Codeのルールを7つ解説します。
Ailootのドキュメントでサービスの使い方をご覧ください。
お金の使い道:自律エージェントの支出カテゴリ3つ
重要なポイント
自律エージェントはどこでお金を使うのでしょうか。経路は3つに分かれます。Anthropic/OpenAIでのトークン、クラウドリソース(AWS/GCP/Yandex Cloud)、そしてサードパーティAPIの有料アクション(Stripeの課金、SMSゲートウェイ、Twilio、サブスクリプション付きTelegramボット)です。それぞれに独自の請求方法と、支出の暴走を止める方法があります。
この3つの経路を混同しないでください。互いに独立しており、別々の設定が必要です。
- LLMトークン。 Claude、OpenAI、Geminiは、リクエストごとの入力と出力のコンテキストに対して課金します。Anthropic Task Budgets(ルール2を参照)や、APIの従量課金の代わりにサブスクリプションを使う方法が役立ちます。
- クラウドインフラ。 MCPやBashツールを通じて、エージェントがEC2、RDS、S3リソースを作成したり、Lambdaをデプロイしたりします。AWS Budgets、GCP、またはキルスイッチ付きのYandex Cloudが役立ちます(ルール5)。
- サードパーティAPI。 エージェントがStripeで課金したり、ゲートウェイ経由でSMSを100通送ったり、Telegramのサブスクリプションを1,000件設定したりします。権限範囲を絞ったサンドボックスキーと、プロバイダーのダッシュボードに設定するハード上限が役立ちます(ルール6)。
続いて、7つのルールを紹介します。それぞれが1つまたは2つの経路を扱います。
API支出にハード上限を設定する方法(ルール1)
重要なポイント
API支出にハード上限を設定するにはどうすればよいでしょうか。AnthropicとOpenAIには、指定額に達するとアカウントを自動的に制限する、組織向け支出上限が組み込まれています。メールを送るだけのアラートと混同しないでください。ハード上限は障壁、アラートは電球です。両方を設定し、まず障壁を設けましょう。
有効化する場所(各プロバイダーで少なくとも2分を見込んでください):
Anthropic Console。 console.anthropic.com → Settings → Limits → Monthly spend limit。最悪の月に使ってもよい金額を設定します。上限に達すると、APIは429を返し、イベントを記録します。「1分後にもう一度試そう」とはなりません。月末までブロックされます。
OpenAI Platform。 platform.openai.com → Billing → Usage limits。同様に、ソフト上限(メールアラート)とハード上限(API停止)があります。両方を設定し、対応する時間を確保できるよう、ハード上限はソフト上限の1.5倍にします。
AWS Bedrock / Google Vertex。 Claude/Anthropicにクラウド仲介サービス経由でアクセスする場合、ハード上限はAnthropic側ではなくクラウド側に設定する必要があります。これはルール5です。
ハード上限にならないもの:メールアラート(「予算の80%を使いました」)。通知は遅れて届き、夜にメールを読む人はいません。同期的に機能するプロバイダー側の障壁だけが有効です。
Anthropic Task Budgetsの仕組みと設定場所(ルール2)
重要なポイント
Anthropic Task Budgetsとは何で、何から保護してくれるのでしょうか。Opus 4.7/4.8とFable/Mythosシリーズのベータ機能です。自律ワークフローごとに予算を設定すると、予算が少なくなるにつれてClaudeは推論の深さを抑え、タスクの途中で「もう予算がない」と言う代わりに、要約を返して完了します。万能ではなく、クラウド支出には効きませんが、エージェントが「ループにはまり、気づかない」ケースの80%を防げます。
詳細はAnthropicの公式ドキュメントをご覧ください。重要なのは、これはハード上限ではなくソフトな境界だということです。エージェントがすでにEC2インスタンスを作成していた場合、Task Budgetがそれを元に戻すことはありません。
実際の使い方は、リクエストのペイロードでtask_budgetフィールドを渡します(例:タスク全体で入力トークン100,000個)。Claudeは予算の情報を受け取り、自分で計画を縮小し、手順を簡略化したり、サブタスクを省いたりします。予算がゼロに近づくと、作業を切り上げて「最後まで聞いてくれてありがとう」ではなく、途中経過の要約を返します。
制限事項:
- Anthropic APIのみ。 独自の課金を行うBedrock/Vertexでは使えません
- ベータモデルのみ(Opus 4.7、4.8、Fable 5、Mythos 5)。Sonnet 4.6やHaikuでは使えません
- クラウド支出やサードパーティAPIは対象外です。 ClaudeがEC2インスタンスを起動しても、Task Budgetは何も通知しません
ルール1(ハード上限)と併用し、置き換えないでください。
コストのガードレールはコンテキストエンジニアリングの一部です。エージェントに何を許可し、何を許可しないか、緊急停止をどこに設けるかを決めます。
Claude CodeのPreToolUseフックでブロックする内容(ルール3)
重要なポイント
Claude CodeのPreToolUseフックとは何で、なぜ必要なのでしょうか。Claudeがツール呼び出しを実行する前に動くスクリプトです。リクエストをブロック(exit 2)したり、ユーザーの確認を求めたり、確認なしで通したりできます。重要なのは、フックが--dangerously-skip-permissionsより前に実行される点です。そのため、バイパスモードでも危険なアクションをブロックできます。
2026年6月1日時点のClaude Codeの権限評価順序は、deny → ask → allowです。つまり、次のようになります。
- 選択した権限モードは別途確認してください。通常モードでのdenyルールのテストから、バイパスモードでも保護されるとは判断できません
- フックが
exit 2を返すと、ツール呼び出しはブロックされます allowedToolsが適用されるのは、denyルールとフックが何も指定しない場合だけです
いくつかの危険なコマンド表記を検査する最小限のPreToolUseフックです。これは文字列フィルターで、完全なシェル解析やアクセス制限ではありません。同等のコマンド、スクリプト、別ツール、既存のクラウドリソースには別の対策が必要です。
#!/usr/bin/env bash
# ~/.claude/hooks/block-dangerous-bash.sh
INPUT=$(cat)
if ! COMMAND=$(printf '%s\n' "$INPUT" | jq -er '.tool_input.command | select(type == "string")'); then
echo "Blocked: invalid Bash hook input" >&2
exit 2
fi
# 指定した文字列パターンを検査。同等の操作をすべて検出するものではない
if echo "$COMMAND" | grep -qiE '(rm -rf|aws s3 rb|terraform destroy|kubectl delete|drop database)'; then
echo "Blocked: destructive command" >&2
exit 2
fi
exit 0
指定のパスにスクリプトを保存し、jqが使えることを確認して、chmod +x ~/.claude/hooks/block-dangerous-bash.shで実行権限を付けます。~/.claude/settings.jsonで紐付けます。
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [{ "type": "command", "command": "~/.claude/hooks/block-dangerous-bash.sh" }]
}
]
}
}
公式ドキュメントをご覧ください。
/hooksで登録を確認してから、無害なサンプルJSONをスクリプトに渡します。commandフィールドの中身は実行しません。列挙した破壊的な表記なら終了コード2、安全なコマンドなら0になること、不正な入力も拒否することを確認します。この正規表現が検査するのは対象のBash呼び出しだけです。実際の権限境界には、権限を絞った認証情報と環境の隔離を使ってください。フックの入出力の公式例も参照してください。
allowedToolsの許可リストを使う理由と、ホストで--dangerously-skip-permissionsを使ってはいけない理由(ルール4)
重要なポイント
許可するツールの許可リストはどこに設定し、なぜホストでバイパスモードを使うのは危険なのでしょうか。settings.jsonのallowedToolsは、確認なしでエージェントが実行できる特定のコマンドのリストです。それ以外はすべて確認を求めます。--dangerously-skip-permissionsはその確認を完全に無効にします。そのため、ホストマシンでは実行せず、コンテナかVMだけで使ってください。
許可リストは最小権限の原則です。「すべて許可」(--dangerously-skip-permissions)する代わりに、タスクに必要なものだけを追加します。
{
"permissions": {
"allow": [
"Bash(npm install:*)",
"Bash(npm run build)",
"Bash(git add:*)",
"Bash(git commit:*)",
"Read(./src/**)",
"Write(./src/**)"
],
"deny": [
"Bash(rm -rf:*)",
"Bash(curl * | sh)",
"Write(/etc/**)",
"Write(~/.ssh/**)"
]
}
}
バイパスモードについて知っておくべきこと:
- Linux/macOSでは、rootまたはsudoでのバイパスモードによるClaude Codeの起動は拒否されます。組み込みの保護機能です
- 自分のマシンでは、バイパスによりすべての確認が無効になり、エージェントは好きなものを
rm -rfで削除したり、SSHキーを開いたり、データをクラウドにアップロードしたりできます - ホスト上では絶対に
--dangerously-skip-permissionsを実行せず、次の環境だけで使ってください。- マウントするボリュームを必要なフォルダーだけに絞ったDockerコンテナ
- 隔離されたVM(Multipass、Lima、Orbstack)
- GitHub Codespaces / Replit / その他のサンドボックス
バイパスモードの最小限のdocker run:
docker run --rm -it \
-v "$PWD:/workspace" \
-w /workspace \
--network host \
ghcr.io/anthropics/claude-code:latest \
claude --dangerously-skip-permissions
エージェントがクラウドの認証情報を必要とする場合は、主キーではなく、権限範囲を絞った別のキーを使ってください(ルール6)。
AWS、GCP、Yandex Cloudでキルスイッチ付きのクラウド予算アラートを設定する方法(ルール5)
重要なポイント
予算アラートは、観測済みまたは予測される支出を通知しますが、遅れて届く場合があります。対応用の関数でエージェントの新たな操作を拒否することと、特定のリソースを停止することは別の処理です。IAMキーを無効化しても、稼働中のリソースの課金は止まりません。リソース停止の手順を別に定義し、テストしてください。
各クラウドでの設定方法:
AWS Budgets(ドキュメント)。月次予算としきい値(50%、80%、100%)を作成します。100%のしきい値ではSNSトピックから対応用Lambdaを呼び出せます。以下の例は指定ユーザーのIAMアクセスキーを無効化するだけで、リソースの停止や厳密な支出上限は実現しません。
import boto3
def lambda_handler(event, context):
iam = boto3.client('iam')
# Deactivate all keys for the 'claude-agent' user
keys = iam.list_access_keys(UserName='claude-agent')['AccessKeyMetadata']
for key in keys:
iam.update_access_key(
UserName='claude-agent',
AccessKeyId=key['AccessKeyId'],
Status='Inactive'
)
return {'statusCode': 200, 'body': 'IAM keys deactivated; existing resources unchanged'}
対象を限定したリソース停止手順: 承認済みのEBSベースEC2インスタンスがある専用サンドボックスでは、実行前にアカウント、リージョン、正確なインスタンスIDを記録します。EC2コンソールでそのインスタンスだけを選び、Instance state → Stop instanceから確認して、すべてがstoppedになることを確かめます。インスタンスストアのデータは停止すると消えるため、必要なものを先に保存してください。スケジューラーやスケーリング機構が代替インスタンスを起動しないことも確認します。止まるのはそのコンピューティング利用で、アカウント全体の請求ではありません。保持するストレージや別サービスは個別に調べてください。EC2の公式停止手順に従います。
AWS Budgetsのドキュメントは、リソース利用から通知までに遅延があり、通知の前後にも追加料金が発生しうると説明しています。100%で発動しても、金額を正確な上限に抑えることはできません。
GCP Budget Alerts。Budget → Pub/Subトピック → Service Accountを無効化するCloud Functionを作成します。ドキュメントにある重要なヒント:アラートは通知するだけで、サービスを停止しません。そのため、Cloud Functionが欠かせません。
Yandex Cloud(ドキュメント)。Billing → Budgetsで予算を設定し、ハード上限としてリソースクォータも設定します。Cloud Functions経由でTelegramボットに通知を接続できます。
OpenAI API。ソフト上限とハード上限はダッシュボードにあります。ハード上限はAPIを自動停止するため、Lambdaは不要です。
利用できる場合は検証済みのプロバイダー側ハード上限を使い、遅延のある予算アラート、権限を絞った認証情報、エージェントが作成できるリソースに応じた検証済みの対応手順を組み合わせます。認証情報の無効化は一部の新規操作を止めますが、継続中の利用には停止状態の確認が必要です。アラートやキー無効化Lambdaの成功メッセージだけでは、すべての課金が止まった証拠になりません。
狭い権限範囲を持つ別のサンドボックスAPIキーがエージェントに必要な理由(ルール6)
重要なポイント
エージェントに別のAPIキーが必要なのはなぜでしょうか。障害の影響を封じ込めるためです。1つのエージェント専用のIAMユーザーまたはService Accountを作成し、最小限の権限(*ではなくEC2)だけを付与し、ハード上限を設けた別の課金プロジェクトに紐付けます。エージェントが上限を使い切っても、会社全体の資金ではなく、自分専用の50ドルを1時間で使い切るだけです。
AWSの最小限の設定:
- IAMユーザー
claude-agent-scanを作成する - ポリシーには必要なアクションのみを指定する(例:1つのリージョン内で、VPCのElastic IPなしで、サイズ
t3.microのインスタンスを起動するec2:RunInstances) - 月100ドルの予算を設定した別のAWSアカウント(Organizations経由)に紐付ける
- アクセスキーを生成してエージェントだけに渡す。自分の
~/.aws/credentialsには入れない - セッションの後、キーをローテーションするかユーザーを削除する
ほかのプロバイダーでも同様です。
- OpenAI / Anthropic: エージェントごとに別のAPIキーを作り、ダッシュボードで各キーにハード上限を設定し、リクエストのメタデータに
agent_idタグを付ける - Stripe / YooKassa: 1つのアクションに絞った制限付きAPIキー(例:
charges:readのみ)を使い、可能なら別の加盟店アカウントを用意する - Telegram Bot API: メインのトークンではなく、別のボットトークンを使う
ここでは古くからあるセキュリティ原則、最小権限が当てはまります。エージェントに与えるのはタスクに必要な権限だけで、それ以上は一切与えません。タスクが「ネットワークをスキャンする」ことなら、ec2:*やs3:*を与えず、ec2:DescribeInstancesだけを与えれば十分です。
起動前のドライランと反復回数の上限を使うタイミング(ルール7)
重要なポイント
エージェントに起動前の計画を提示させるのはなぜでしょうか。また、反復を最大何回まで許可すべきでしょうか。Plan ModeはClaude Codeに組み込まれた機能です。エージェントが最初に実行予定を説明し、あなたが承認します。無料で使える起動前チェックです。また、--max-turns Nは1セッションのステップ数を制限し、エージェントがいつまでも回り続けるのを防ぎます。自律モードでは、10~30ターンまでに設定してください。
Plan Mode(/plan)はセッション開始時に有効にします。エージェントが計画を作成してチャットに表示し、承認を待ち、承認されてから作業を始めます。無料で使え、「先に確認すると思っていたのに」という事態の70%を防げます。
--max-turnsは起動フラグです。1ターンは「エージェントの思考 + ツール呼び出し + 結果」の1サイクルです。自律タスクでは次を目安にしてください。
- 小さな変更:5~10ターン
- 中程度のタスク:15~30ターン
- 大規模な自律タスク:50~80ターン
追加の方法:
- Linuxの
timeoutコマンドで実行時間を制限する:
timeout 1800 claude --dangerously-skip-permissions --max-turns 30 -p "scan task"
# 1800 seconds = 30 minutes. Stop the process gracefully.
- PostToolUseフックを使って、すべてのツール呼び出しをファイルに記録し、後から何が起きたかを確認できるようにする
- Cronで監視する――5分ごとにClaudeプロセスが同時に10個動いていないか確認する(何か問題が起きたときによく見られる兆候です)
自律型Claude Codeの起動前に使える5分チェックリスト
重要なポイント
自律タスクでEnterを押す前に、何を準備しておく必要があるでしょうか。各項目は約1分で確認できる、7つのチェック項目です。1つでも空欄があれば起動しないでください。
claude --dangerously-skip-permissionsを実行する前のチェックリスト:
[ ] 1. APIプロバイダーにハード上限(Anthropic Console → Limits → Monthly spend limit)
[ ] 2. リクエストのペイロードにTask Budget(Opus 4.7+/Fable/Mythosを使用する場合)
[ ] 3. rm -rf、aws s3 rb、terraform destroyをブロックするPreToolUseフック
[ ] 4. settings.jsonにallowedTools許可リストを設定、またはDockerコンテナ内で作業
[ ] 5. 遅延のあるクラウド予算アラート + 検証済みのキー無効化と承認済みリソースの停止
[ ] 6. サンドボックスAPIキー(メインキーではなく、エージェント専用の別キー)
[ ] 7. --max-turns N + timeout NNN秒 + プロセスのCron監視
7項目がすべてそろっていれば起動してください。1つでも欠けていれば、停止して設定してください。今の30分で、後の6,000~500,000ドルを節約できます。
参考のため、一つの事例を紹介します。あるバイブコーダーが、Postgresデータベースのデフォルトパスワードを変更せずにオンラインストアアプリを公開しました。数日以内に誰かに見つかり、マイナーをインストールされ、独自のバックドアを仕掛けられました。サーバーを停止する必要があり、他人の暗号資産マイニングのせいで月の請求額も増えました。
この事例はセクション1のカテゴリ3(自分のインフラ上で第三者が実行する処理)ですが、考え方は同じです。支出管理は、支出を始めたのが自分のエージェントか、従業員か、ナイジェリアのマイナーかに左右されるべきではありません。
さらに読む:
- Claude Codeを壊さずに使う方法—
--dangerously-skip-permissionsと権限を別の角度から解説 - バイブコーディングのセキュリティ—セキュリティの柱
- Claude Codeの上限を1日で使い切らない方法—サブスクリプションのトークンについて(クラウド請求についてのこのガイドと混同しないでください)
出典
Ailootについて知る。
詳細を見る
自律エージェントの支出を制限する2026年版Claude Codeの7つのルール:よくある質問
エージェントのIAMキーを無効化すればクラウドの請求も止まりますか?
いいえ。そのキーを使う新たな認証リクエストは止められても、作成済みリソースの課金は続く場合があります。所有するリソースの許可リストを用意し、承認済みインスタンスを停止して状態を確認してください。残るストレージや他のサービスの料金は別に調べます。
例のコマンド正規表現だけで安全な境界を強制できますか?
いいえ。対象となるBash呼び出しの一部のコマンド文字列を調べるだけです。JSONの解析と終了コードをテストし、実際のアクセス範囲は絞ったクラウド権限と環境の隔離で制限してください。同等の操作や別ツールは文字列フィルターを通り抜ける可能性があります。