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

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

Source: https://ailoot.ai/blog/zh-hant-tw/ai-agent-burned-budget-claude-code/
Canonical: https://ailoot.ai/blog/zh-hant-tw/ai-agent-burned-budget-claude-code/
Language: zh-Hant-TW
Publisher: Ailoot (https://ailoot.ai/)
Translation: guide-122
Revision: sha256-38b68913aab28794566734351becf02172f5bcd3145a59f121b0a52d514dabde


<div class="aside" data-semantic="key-takeaway" role="note" aria-label="本節重點">

重點

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

</div>

在 [Ailoot 文件](https://ailoot.ai/docs/)中了解如何使用這項服務。



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

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="本節重點">

重點

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

</div>

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

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）

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="本節重點">

重點

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

</div>

啟用位置（每個供應商至少預留 2 分鐘）：

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

**OpenAI Platform。** [platform.openai.com](https://platform.openai.com/account/billing/limits) → Billing → Usage limits。同樣有軟性上限（電子郵件警示）和硬性上限（API 關閉）。兩者都要設定；硬性上限設為軟性上限的 1.5 倍，為應變留出時間。

**AWS Bedrock / Google Vertex。** 如果你透過雲端中介服務存取 Claude/Anthropic，硬性上限必須設在雲端端，而不是 Anthropic。這是規則 5。

哪些**不算**硬性上限：電子郵件警示（「你已花掉預算的 80%」）。警示會延遲，而且沒有人會在半夜讀電子郵件。只有供應商端同步生效的屏障才算。

## Anthropic Task Budgets 的運作方式與設定位置（規則 2）

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="本節重點">

重點

Anthropic Task Budgets 是什麼？它能保護你免於哪些狀況？這是 Opus 4.7/4.8 和 Fable/Mythos 系列的 beta 功能：你可以替單一自主工作流程設定預算，預算逐漸用完時，Claude 會降低推理深度，最後以摘要收尾，而不是在任務進行到一半時說「就這樣，我沒預算了」。它無法解決所有問題，也無法控制雲端支出，但能避免 80% 的代理「卡在迴圈中卻沒有察覺」的情況。

</div>

詳細資訊請參閱 Anthropic 的[官方文件](https://platform.claude.com/docs/en/build-with-claude/task-budgets)。關鍵在於：這是**軟性界線**，不是硬性界線。如果代理已經建立 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）

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="本節重點">

重點

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

</div>

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

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

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

```bash
#!/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` 中綁定它：

```json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [{ "type": "command", "command": "~/.claude/hooks/block-dangerous-bash.sh" }]
      }
    ]
  }
}
```

請參閱[官方文件](https://code.claude.com/docs/en/permissions)。

使用 `/hooks` 確認註冊，再把無害的範例 JSON 傳給指令碼，切勿執行 command 欄位。列出的破壞性寫法應回傳 2，安全指令應回傳 0，也要測試格式錯誤的輸入。正規表示式只檢查符合 matcher 的 Bash 呼叫；實際權限邊界應靠狹窄憑證與環境隔離。請參閱[官方 hook 輸入輸出範例](https://code.claude.com/docs/en/hooks-guide#read-input-and-return-output)。

## 為什麼要使用`allowedTools`允許清單，以及為什麼不能在主機上使用`--dangerously-skip-permissions`（規則 4）

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="本節重點">

重點

允許使用的工具清單要放在哪裡？為什麼在主機上使用略過權限檢查模式不妥？settings.json 中的`allowedTools`會列出代理可以不經確認直接執行的特定指令；其他所有操作都會提示你確認。`--dangerously-skip-permissions`會完全停用確認提示，因此不要在主機上執行，只能在容器或 VM 中使用。

</div>

允許清單遵循最小權限原則。不要「全部允許」（`--dangerously-skip-permissions`），只新增任務所需的項目：

```json
{
  "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：

```bash
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）

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="本節重點">

重點

預算警示回報已觀測或預測的支出，且可能延遲送達。回應函式可阻擋代理的新操作，或停止特定資源，兩者並不相同。停用 IAM 金鑰不會停止已執行資源的費用；必須另行定義並測試資源關閉流程。

</div>

各雲端平台的設定方法：

**AWS Budgets**（[文件](https://aws.amazon.com/aws-cost-management/aws-budgets/)）。建立每月預算和門檻（50%、80%、100%）。在 100% 門檻處，可用 SNS 主題叫用回應 Lambda。以下範例僅停用指定使用者的 IAM 存取金鑰；不會停止資源，也不能建立硬性支出上限：

```python
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 官方停止流程](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Stop_Start.html)。

[AWS Budgets 文件](https://docs.aws.amazon.com/cost-management/latest/userguide/budgets-managing-costs.html) 提醒，通知晚於資源用量，警示前後仍可能增加費用，因此在 100% 觸發無法強制精確的金額上限。

**GCP Budget Alerts**。建立 Budget → Pub/Sub 主題 → 停用 Service Account 的 Cloud Function。文件中的重要提示：**警示只會通知，不會關閉服務**，因此 Cloud Function 不可或缺。

**Yandex Cloud**（[文件](https://yandex.cloud/ru/docs/billing/concepts/budget)）。在 Billing → Budgets 中設定預算，並加上資源配額作為硬性上限。你可以透過 Cloud Functions 將通知連接至 Telegram 機器人。

**OpenAI API**。控制面板中就有軟性和硬性支出上限；硬性上限會自動停止 API，不需要 Lambda。

若有提供，使用已驗證的供應商端硬性上限，再搭配可能延遲的預算警示、狹窄憑證，以及針對代理可建立資源測試過的回應流程。撤銷憑證只阻擋部分新操作；對持續使用的資源，仍需驗證關閉狀態。警示或撤銷金鑰 Lambda 的成功訊息，都不能證明所有計費已停止。

## 為什麼代理需要權限範圍狹窄的專用沙箱 API 金鑰（規則 6）

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="本節重點">

重點

代理為什麼需要專用 API 金鑰？為了將故障的影響控制在一定範圍內。建立一個專供單一代理使用的 IAM 使用者或 Service Account，只授予最低限度的權限（EC2，而不是 *），並將它連結至設有硬性上限的獨立計費專案。如果代理把額度用完，它只會在 1 小時內燒光自己的 50 美元，而不是整間公司的錢。

</div>

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）

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="本節重點">

重點

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

</div>

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

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

- 小型變更：5–10 個回合
- 中型任務：15–30 個回合
- 大型自主任務：50–80 個回合

其他技巧：

- 使用 Linux 的`timeout`指令設定**執行時間上限**：

```bash
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 分鐘檢查清單

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="本節重點">

重點

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

</div>

**執行`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（第三方在你的基礎架構上執行作業），但道理相同：支出控管不應取決於發起支出的是你的代理、員工，還是奈及利亞的挖礦者。

延伸閱讀：

- [如何避免 Claude Code 出問題](https://ailoot.ai/blog/zh-hant-tw/claude-code-safe-overnight-setup/)——從另一個角度談`--dangerously-skip-permissions`與權限
- [氛圍式程式設計的安全性](https://ailoot.ai/blog/zh-hant-tw/vibe-coding-security/)——安全性支柱
- [如何避免一天內用完 Claude Code 限額](https://ailoot.ai/blog/zh-hant-tw/claude-code-token-limits-saving/)——關於訂閱權杖（不要和這份探討雲端帳單的指南混淆）

<div class="section" role="doc-bibliography" aria-label="來源">

### 來源

- [Anthropic Docs：Task budgets](https://platform.claude.com/docs/en/build-with-claude/task-budgets)
- [Claude Code Docs：設定權限](https://code.claude.com/docs/en/permissions)
- [AWS Budgets——設定自訂成本與用量預算](https://aws.amazon.com/aws-cost-management/aws-budgets/)
- [Yandex Cloud：Budgets](https://yandex.cloud/ru/docs/billing/concepts/budget)

</div>





認識 [Ailoot](https://ailoot.ai/)。

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

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

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

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

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


## Ailoot · 公司及其專案組合

Ailoot以累積的營運經驗、廣大的客戶群、穩定的服務及持續的KPI管理為基礎。

公司及其專案組合：數百萬客戶，每月銷售額達數十億。

Ailoot將這些營運經驗用於API存取，讓客戶的產品、代理、應用程式及自動化流程使用AI功能。
