部落格

2026 年限制自主代理支出的 7 條 Claude Code 規則

Markdown

Claude Code 的 7 條限額設定規則,避免自主代理讓你傾家蕩產:供應商上限、Task Budgets、hooks、允許清單、緊急停止開關、沙盒金鑰和迭代次數上限。

閱讀全文

重點

擁有不受限制雲端存取權的自主代理,可能在一夜之間累積高額帳單。我整理了 7 條 Claude Code 規則,你可以在一個晚上設定好,避免這類失誤。

在 Ailoot 文件中了解如何使用這項服務。

錢花在哪裡:自主代理的 3 種支出類別

重點

自主代理會在哪些地方花你的錢?分成三個獨立管道:Anthropic/OpenAI 的權杖、雲端資源(AWS/GCP/Yandex Cloud),以及第三方 API 的付費操作(Stripe 扣款、簡訊閘道、Twilio、附帶訂閱的 Telegram 機器人)。每個管道各自計費,也各有停止支出失控的方法。

不要混淆這三個管道——它們各自獨立,需要不同的設定:

  1. LLM 權杖。 Claude、OpenAI 或 Gemini 會針對每次請求的輸入與輸出上下文收費。Anthropic Task Budgets(見規則 2)以及改用訂閱方案而非 API 隨用隨付,都能在這方面提供協助。
  2. 雲端基礎架構。 透過 MCP 或 Bash 工具,代理會建立 EC2、RDS、S3 資源,或部署 Lambda。AWS Budgets、GCP 或搭配緊急停止開關的 Yandex Cloud 能提供協助(規則 5)。
  3. 第三方 API。 代理呼叫 Stripe 扣款、透過閘道傳送 100 則簡訊,或設定 1,000 個 Telegram 訂閱。使用權限範圍狹窄的沙箱金鑰,並在供應商的控制面板中設定硬性上限,會有所幫助(規則 6)。

接下來是 7 條規則。每條規則涵蓋一個或兩個管道。

如何為 API 支出設定硬性上限(規則 1)

重點

如何為 API 支出設定硬性上限?Anthropic 和 OpenAI 都內建了組織支出上限,達到指定金額時會自動限制帳戶。不要把它和只會寄電子郵件的警示混為一談。硬性上限是一道屏障;警示只是一盞燈。兩者都要設定,先設好屏障。

啟用位置(每個供應商至少預留 2 分鐘):

Anthropic Console。 console.anthropic.com → Settings → Limits → Monthly spend limit。設定一個你願意在最糟糕的月份花掉的金額。達到上限時,API 會回傳 429 並記錄事件。沒有「我一分鐘後再試一次」——系統會封鎖到月底。

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 系列的 beta 功能:你可以替單一自主工作流程設定預算,預算逐漸用完時,Claude 會降低推理深度,最後以摘要收尾,而不是在任務進行到一半時說「就這樣,我沒預算了」。它無法解決所有問題,也無法控制雲端支出,但能避免 80% 的代理「卡在迴圈中卻沒有察覺」的情況。

詳細資訊請參閱 Anthropic 的官方文件。關鍵在於:這是軟性界線,不是硬性界線。如果代理已經建立 EC2 執行個體,Task Budget 不會撤銷這項操作。

實際運作方式:你會在請求酬載中傳入task_budget欄位(例如整個任務使用 100,000 個輸入權杖)。Claude 會取得預算資訊,並自行縮減計畫、簡化步驟或略過子任務。預算接近零時,它會逐步收尾並回傳階段性摘要,而不是說「謝謝收聽」。

限制:

  • 僅支援 Anthropic API。 不適用於 Bedrock/Vertex,這些平台有各自的計費方式
  • 僅支援 beta 模型(Opus 4.7、4.8、Fable 5、Mythos 5)。不支援 Sonnet 4.6 或 Haiku
  • 不涵蓋雲端支出或第三方 API。 如果 Claude 啟動 EC2 執行個體,Task Budget 不會有任何反應

請搭配規則 1(硬性上限)使用,不要用它取代硬性上限。

費用防護措施是上下文工程的一部分:你要決定代理能做什麼、不能做什麼,以及緊急停止機制在哪裡。

Claude Code 的 PreToolUse hooks 應封鎖哪些內容(規則 3)

重點

Claude Code 中的 PreToolUse hooks 是什麼?為什麼需要它們?它們是在 Claude 執行工具呼叫之前執行的指令碼。你可以封鎖請求(exit 2)、要求使用者確認,或直接放行。請依所選權限模式驗證 hook 的實際執行與涵蓋範圍,不要把一般模式的 deny 測試當成略過權限模式的保護證明。

截至 2026 年 6 月 1 日,Claude Code 會依照deny → ask → allow的順序檢查權限。這表示:

  • 請另行檢查所選權限模式;一般模式下 deny 規則成功,不代表略過權限模式也受相同保護
  • 如果 hook 回傳exit 2,工具呼叫就會遭到封鎖
  • 只有在 deny 規則和 hooks 都沒有動作時,allowedTools才會生效

以下基本 PreToolUse hook 只檢查幾種危險指令寫法。它是文字過濾器,不是完整的 shell 解析器或存取邊界;等效指令、指令碼、其他工具與既有雲端資源都需要另外管控。

#!/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,也要測試格式錯誤的輸入。正規表示式只檢查符合 matcher 的 Bash 呼叫;實際權限邊界應靠狹窄憑證與環境隔離。請參閱官方 hook 輸入輸出範例。

為什麼要使用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 執行個體,請在作業前記錄帳戶、Regions 與確切 instance IDs。在 EC2 主控台只選取這些執行個體 → Instance state → Stop instance → 確認,並逐一驗證到達 stopped。先保存需要的 instance-store 資料,停止會清除這些資料;也要確認排程或擴展系統不會重新建立執行個體。這只停止該部分運算,不會終止帳戶所有費用;保留儲存與其他服務仍需另查。請遵循 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 金鑰?為了將故障的影響控制在一定範圍內。建立一個專供單一代理使用的 IAM 使用者或 Service Account,只授予最低限度的權限(EC2,而不是 *),並將它連結至設有硬性上限的獨立計費專案。如果代理把額度用完,它只會在 1 小時內燒光自己的 50 美元,而不是整間公司的錢。

AWS 的基本設定:

  1. 建立 IAM 使用者claude-agent-scan
  2. 政策只允許必要的操作(例如,在單一區域中使用t3.micro大小,且不配置 VPC 彈性 IP 的ec2:RunInstances)
  3. 將它連結至每月預算為 100 美元的獨立 AWS 帳戶(透過 Organizations)
  4. 產生存取金鑰,只提供給代理;不要放進你自己的~/.aws/credentials
  5. 工作階段結束後,輪替金鑰或刪除使用者

其他供應商也採取相同做法:

  • OpenAI / Anthropic: 每個代理使用獨立 API 金鑰,在控制面板中為每個金鑰設定硬性上限,並在請求中繼資料加入agent_id標籤
  • Stripe / YooKassa: 只允許單一操作的受限 API 金鑰(例如只允許charges:read),若可行,另設一個商家帳戶
  • Telegram Bot API: 使用專用機器人權杖,不要使用主要權杖

這裡適用的是老牌的安全原則:最小權限——代理只能取得任務所需的權限,不能多一分一毫。如果任務是「掃描網路」,不要授予它ec2:*和s3:*;只給它ec2:DescribeInstances就好。

何時使用啟動前試跑與迭代次數限制(規則 7)

重點

為什麼要讓代理在啟動前先展示計畫?最多應允許它迭代幾次?Plan Mode 是 Claude Code 內建功能:代理會先說明打算做什麼,再由你核准。這是免費的啟動前檢查。此外,--max-turns N會限制單一工作階段的步驟數,避免代理無限循環。自主模式最多設定 10–30 個回合。

Plan Mode(/plan)會在工作階段開始時啟用。代理先擬定計畫,在聊天中展示,等待核准,之後才開始工作。這項功能免費,可避免 70% 的「我以為它會先問」狀況。

--max-turns是啟動旗標。每個回合是一個「代理思考 + 工具呼叫 + 結果」的循環。自主任務可參考以下設定:

  • 小型變更: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 hook 將每次工具呼叫記錄到檔案,以便事後查看發生了什麼事
  • 以 Cron 監控——每 5 分鐘檢查一次,確認沒有同時執行 10 個 Claude 程序(這通常是出問題的徵兆)

啟動自主 Claude Code 前的即用型 5 分鐘檢查清單

重點

在自主任務中按下 Enter 前,需要準備好哪些事項?7 個核取方塊,每項大約花 1 分鐘。如果有任何一項未完成,就不要啟動。

執行claude --dangerously-skip-permissions前的檢查清單:

[ ] 1. 在 API 供應商處設定硬性上限(Anthropic Console → Limits → Monthly spend limit)
[ ] 2. 在請求酬載中設定 Task Budget(使用 Opus 4.7+/Fable/Mythos 時)
[ ] 3. 設定 PreToolUse hook,封鎖 rm -rf、aws s3 rb、terraform destroy
[ ] 4. 在 settings.json 中設定 allowedTools 允許清單,或在 Docker 容器內工作
[ ] 5. 設定可能延遲的雲端預算警示,並測試金鑰撤銷與已核准資源的關閉
[ ] 6. 設定沙箱 API 金鑰(代理使用專用金鑰,不用主要金鑰)
[ ] 7. 設定 --max-turns N + timeout NNN 秒 + Cron 監控程序

7 項全數完成後再啟動。如果缺少任何一項,請停止並完成設定。現在花 30 分鐘,之後可能省下 6,000–500,000 美元。

以下是一則案例,供參考:一位氛圍式程式設計師啟動線上商店應用程式,卻保留 PostgreSQL 資料庫的預設密碼。幾天內就有人找到它、安裝挖礦程式,並部署自己的後門。伺服器只好關閉,而當月帳單也因為別人挖掘加密貨幣而增加。

這則故事屬於第 1 節的類別 3(第三方在你的基礎架構上執行作業),但道理相同:支出控管不應取決於發起支出的是你的代理、員工,還是奈及利亞的挖礦者。

延伸閱讀:

認識 Ailoot。

更多詳情

常見問題:2026 年限制自主代理支出的 7 條 Claude Code 規則

撤銷代理的 IAM 金鑰就能停止雲端帳單嗎?

不能。它會阻擋使用這些金鑰發起的新驗證請求,但既有資源仍可能持續計費。請記錄自有資源允許清單,停止已核准的執行個體並驗證狀態,再分別檢查保留儲存空間與其他服務。

範例中的指令正規表示式能建立完整安全邊界嗎?

不能。它只檢查符合條件的 Bash 工具呼叫和部分指令文字。應測試 JSON 解析與結束碼,真正的存取邊界則需靠狹窄的雲端權限與環境隔離;等效操作及其他工具可能繞過文字過濾。

所有文章