# Как ограничить расходы автономных агентов в Claude Code: 7 правил

> Семь практических правил защиты расходов в Claude Code: лимиты API, бюджет задачи, хуки, список разрешённых инструментов, облачный аварийный выключатель, отдельные ключи и ограничения времени работы.

Source: https://ailoot.ai/blog/ru/ogranichenie-rashodov-avtonomnyh-agentov-claude-code/
Canonical: https://ailoot.ai/blog/ru/ogranichenie-rashodov-avtonomnyh-agentov-claude-code/
Language: ru
Publisher: Ailoot (https://ailoot.ai/)
Translation: guide-122
Revision: sha256-74f6a576ea8a5029ea62a1783f73353b9f07f3b8a9b7ad4cbf671d85b0b0984d


<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Ключевые выводы раздела">

Кратко

Автономный агент с неограниченным доступом к облаку может быстро создать непредвиденные расходы. Ниже собраны семь правил, которые помогают заранее ограничить полномочия агента и определить, как остановить его работу.

</div>

Документация Ailoot: [ailoot.ai/docs](https://ailoot.ai/docs/).

## Куда могут уходить деньги автономного агента: три категории расходов

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Ключевые выводы раздела">

Кратко

Расходы возникают по трём независимым направлениям: оплата токенов языковой модели, аренда облачных ресурсов и платные операции через сторонние API. Для каждого направления нужны собственные лимиты и способ остановки.

</div>

Разделяйте эти категории: настройки, подходящие для одной, не обязательно защитят от расходов по двум другим.

1. **Токены языковой модели.** Anthropic, OpenAI и другие поставщики могут взимать плату за входные и выходные токены каждого запроса. Используйте лимит расходов у провайдера и, где это уместно, бюджет задачи.
2. **Облачная инфраструктура.** Через MCP или инструмент Bash агент может создавать виртуальные машины, базы данных, хранилища и функции. Здесь нужны инструменты управления бюджетом облачного провайдера и заранее продуманный аварийный выключатель.
3. **Сторонние API.** Агент может инициировать платёж, отправить сообщения через платный шлюз или оформить подписки. Ограничьте права ключа и настройте лимит расходов у соответствующего сервиса.

Каждый канал учитывается отдельно, поэтому установите защиту для всех сервисов, к которым у агента есть доступ.

Далее рассмотрены семь правил, которые помогают контролировать эти риски.

## Как установить жёсткий лимит расходов на API (правило 1)

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Ключевые выводы раздела">

Кратко

Лимит расходов может остановить API после достижения заданной суммы. Уведомление о приближении к бюджету лишь сообщает о расходах и само по себе их не прекращает. Если провайдер предлагает оба варианта, настройте и лимит, и оповещения.

</div>

Проверьте доступные настройки в панели каждого используемого провайдера.

**Anthropic Console.** Откройте [console.anthropic.com](https://console.anthropic.com) → Settings → Limits → Monthly spend limit и задайте сумму, которую готовы потратить за месяц. Проверьте в официальной документации, какие действия происходят после достижения лимита, включая поведение API и журналирование.

**OpenAI Platform.** Перейдите в [раздел лимитов оплаты](https://platform.openai.com/account/billing/limits) и проверьте доступные ограничения расходов и уведомления. Установите значения с учётом того, сколько готовы потратить.

**AWS Bedrock и Google Vertex.** Если доступ к модели предоставляется через облачного посредника, проверьте условия тарификации и настройки лимитов у этого облачного провайдера. См. правило 5.

Письмо о расходовании части бюджета — это оповещение, а не гарантированный способ остановить начисления. Уточните, существует ли у провайдера ограничение, которое действительно прекращает дальнейшее использование.

## Как использовать бюджеты задач Anthropic (правило 2)

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Ключевые выводы раздела">

Кратко

Бюджет задачи помогает ограничить расход токенов в одном рабочем процессе и может побуждать Claude завершить работу кратким итогом по мере исчерпания бюджета. Его возможности зависят от доступных моделей и режима использования. Такой бюджет сам по себе не ограничивает стоимость облачных ресурсов или сторонних API.

</div>

Подробности приведены в [официальной документации Anthropic](https://platform.claude.com/docs/en/build-with-claude/task-budgets). Проверьте актуальные требования и ограничения функции. Бюджет задачи не заменяет жёсткий лимит провайдера и не отменяет уже созданные облачные ресурсы.

В запросе может использоваться поле `task_budget`, если оно поддерживается выбранным API и моделью. Например, в документации может быть описан бюджет токенов на весь процесс. Следуйте официальной схеме запроса: не добавляйте поле, если для используемого режима оно не предусмотрено. Модель может учитывать оставшийся бюджет при планировании и выдаче промежуточного результата.

Проверьте ограничения перед настройкой:

- Убедитесь, что функция доступна для выбранного API. Возможности при обращении через облачного посредника могут отличаться.
- Сверьте перечень совместимых моделей и статус функции с текущей документацией Anthropic.
- Бюджет задачи не ограничивает расходы на облачную инфраструктуру и сторонние API. Для них нужны отдельные меры защиты.

Используйте бюджет задачи вместе с ограничениями провайдера, а не вместо них. Контроль расходов — часть настройки среды: заранее определите, какие действия разрешены агенту и каким способом можно прекратить его работу.

## Что блокировать с помощью PreToolUse hooks в Claude Code (правило 3)

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Ключевые выводы раздела">

Кратко

PreToolUse hook запускает скрипт до выполнения инструмента. В зависимости от его результата вызов можно отклонить, разрешить или передать на подтверждение. Правила hook должны быть настроены и проверены согласно официальной документации Claude Code.

</div>

Сверьте порядок проверки permissions и поведение hooks с [официальной документацией Claude Code](https://code.claude.com/docs/en/permissions). Правила доступа, настройки hooks и режим пропуска подтверждений могут взаимодействовать; не считайте одну настройку заменой другой.

Минимальный PreToolUse hook ниже проверяет несколько написаний опасных команд. Это текстовый фильтр, а не полный разбор оболочки или граница доступа. Эквивалентные команды, скрипты, другие инструменты и уже работающие облачные ресурсы требуют отдельных мер.

```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 "Заблокировано: команда может привести к удалению данных или ресурсов" >&2
  exit 2
fi

exit 0
```

Сохраните скрипт по указанному пути, проверьте наличие `jq` и выдайте право запуска: `chmod +x ~/.claude/hooks/block-dangerous-bash.sh`. Привяжите hook в `~/.claude/settings.json`:

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

В `/hooks` проверьте регистрацию. Передайте скрипту безвредный пример JSON, не исполняя поле команды: указанное разрушительное написание должно дать код 2, безопасная команда — 0. Испытайте и неверный вход. Регулярное выражение проверяет лишь совпавшие вызовы 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="Ключевые выводы раздела">

Кратко

Список `allowedTools` позволяет заранее указать инструменты, которыми агент может пользоваться без отдельного подтверждения. Флаг `--dangerously-skip-permissions` отключает запросы подтверждения, поэтому применяйте его только в изолированной среде с ограниченным доступом к файлам и сети.

</div>

Используйте принцип минимальных привилегий: разрешайте только действия, необходимые для задачи, и явно запрещайте опасные операции. Пример ниже нужно адаптировать и проверить по [официальным правилам разрешений](https://code.claude.com/docs/en/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/**)"
    ]
  }
}
```

Учитывайте следующие ограничения:

- Перед запуском проверьте действующие требования Claude Code к пользователю и повышенным привилегиям.
- На основной машине режим без подтверждений может дать агенту возможность удалять файлы, читать ключи и выполнять облачные операции в пределах выданных ему прав.
- Не запускайте `--dangerously-skip-permissions` на хост-машине. Если такой режим необходим, используйте изолированную среду, например:
  - Docker-контейнер с подключённой только нужной папкой и настроенной сетью
  - виртуальную машину, изолированную от основной системы
  - управляемую среду разработки с соответствующими ограничениями безопасности

Пример запуска Docker изолированной среды следует адаптировать к требованиям безопасности вашей системы:

```bash
docker run --rm -it \
  -v "$PWD:/workspace" \
  -w /workspace \
  --network host \
  ghcr.io/anthropics/claude-code:latest \
  claude --dangerously-skip-permissions
```

Если агенту необходимы облачные учётные данные, выдайте отдельные ключи с минимальными полномочиями. См. правило 6.

## Как настроить оповещения о бюджете и аварийное отключение в облаке (правило 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/)). Создайте бюджет и пороги. На пороге 100% уведомление SNS может вызвать функцию Lambda. Пример ниже только деактивирует ключи указанного IAM-пользователя: ресурсы он не останавливает и жёсткий предел расходов не устанавливает:

```python
import boto3

def lambda_handler(event, context):
    iam = boto3.client('iam')
    # Деактивируем ключи выделенного пользователя 'claude-agent'
    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'}
```

До запуска проверьте права Lambda, обработку повторных уведомлений, область действия пользователя и возможность восстановления. Проверьте также, действительно ли выбранный сигнал бюджета запускает этот процесс.

**Ограниченная процедура остановки ресурсов.** Для выделенной песочницы с согласованными EC2 на EBS заранее запишите аккаунт, регионы и точные ID экземпляров. В консоли 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.** Настройте уведомления и изучите механизмы Google Cloud для автоматизации реакции. Сам сигнал не обязательно останавливает сервисы. Условия и порядок настройки сверяйте с официальной документацией.

**Yandex Cloud.** Настройте бюджеты и, если это подходит вашей архитектуре, квоты ресурсов. Актуальные сведения приведены в [официальной документации Yandex Cloud](https://yandex.cloud/ru/docs/billing/concepts/budget). Перед использованием проверьте, какие уведомления и автоматические действия поддерживаются.

Используйте проверенный жёсткий предел провайдера, где он существует, запаздывающие уведомления, узкие ключи и испытанную реакцию для конкретных создаваемых ресурсов. Отзыв ключа блокирует часть новых операций; для текущего расхода нужна проверка остановки ресурсов. Ни уведомление, ни успешный ответ Lambda отзыва ключей не доказывают прекращение всех начислений.

## Зачем выделять агенту отдельный API-ключ с ограниченными правами (правило 6)

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Ключевые выводы раздела">

Кратко

Отдельные учётные данные позволяют отделить действия агента от ваших основных доступов. Выдайте ему минимум необходимых разрешений, задайте отдельные лимиты и храните ключи так, чтобы их можно было отозвать после работы.

</div>

Пример настройки отдельного доступа в AWS:

1. Создайте IAM-пользователя `claude-agent-scan`.
2. Назначьте политику только с необходимыми действиями, например разрешите нужные операции EC2 в одном регионе и для подходящего типа экземпляра. Не включайте права на изменение сетевых настроек, если они не требуются.
3. По возможности отделите ресурсы и биллинг проекта от остальных рабочих нагрузок и задайте отдельный бюджет.
4. Создайте ключи доступа и передавайте их только агенту через подходящий механизм хранения секретов; не помещайте их в основной профиль `~/.aws/credentials` без необходимости.
5. После работы отзовите или замените ключи и удалите временные учётные записи, если они больше не нужны.

Для остальных сервисов действуйте по тому же принципу:

- **OpenAI и Anthropic:** используйте отдельные ключи там, где это поддерживается, и настройте доступные ограничения расходов. Передавайте метаданные только в соответствии с официальной схемой API.
- **Stripe и YooKassa:** выбирайте ограниченные ключи с правами только на нужные операции, если такие режимы предусмотрены продуктом.
- **Telegram Bot API:** создайте отдельный токен бота для задачи и отзовите его после использования, если он больше не нужен.

Следуйте принципу минимальных привилегий: агенту предоставляются только необходимые для задачи права. Для просмотра ресурсов достаточно разрешений на чтение, если создание или изменение ресурсов не требуется.

## Когда нужен предварительный просмотр плана и ограничение числа итераций (правило 7)

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Ключевые выводы раздела">

Кратко

До автономного запуска попросите агента показать план и задайте верхнюю границу числа циклов работы. Plan Mode позволяет проверить намерения до выполнения действий, а `--max-turns N` ограничивает длительность сессии. Значение выбирайте по объёму задачи и контролируйте процесс дополнительно.

</div>

Включите Plan Mode командой `/plan`, если эта функция доступна в вашей версии Claude Code. Просмотрите предложенные действия и подтвердите план до выполнения работы. Предварительный план помогает заметить лишние или рискованные операции, но сам по себе не ограничивает расходы.

Флаг `--max-turns` задаёт максимальное число циклов агента в сессии. Для разных задач можно начать с таких ориентиров:

- небольшое изменение: 5–10 циклов
- задача среднего размера: 15–30 циклов
- крупная автономная задача: 50–80 циклов

Подбирайте предел с учётом задачи и внимательно проверяйте результат. Не оставляйте процесс без наблюдения только потому, что задано максимальное число циклов.

Дополнительные меры:

- **Ограничение времени работы** с помощью системной команды `timeout`:

```bash
timeout 1800 claude --dangerously-skip-permissions --max-turns 30 -p "scan task"
# 1800 секунд = 30 минут. Команда ограничивает время выполнения процесса.
```

- **Журналирование вызовов инструментов** через PostToolUse hook помогает после сессии разобраться в действиях агента.
- **Мониторинг процессов** позволяет заметить неожиданный запуск множества одновременных экземпляров Claude Code.

## Чек-лист перед автономным запуском Claude Code

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Ключевые выводы раздела">

Кратко

Перед автономным запуском проверьте лимит API, настройки бюджета задачи, фильтрацию опасных вызовов, права доступа, облачные ограничения, отдельные ключи и верхний предел времени работы. Если важный пункт не настроен, устраните пробел до запуска.

</div>

**Проверьте перед `claude --dangerously-skip-permissions`:**

```
[ ] 1. Лимит расходов у API-провайдера и проверенные уведомления
[ ] 2. Бюджет задачи в запросе, если он поддерживается выбранными API и моделью
[ ] 3. PreToolUse hook для блокировки опасных команд, например rm -rf, aws s3 rb и terraform destroy
[ ] 4. Список разрешённых инструментов в settings.json либо изолированная среда
[ ] 5. Запаздывающие уведомления бюджета, проверенный отзыв ключей и согласованная остановка ресурсов
[ ] 6. Отдельные ключи с минимально необходимыми правами
[ ] 7. --max-turns N, ограничение времени и наблюдение за процессами
```

Перед запуском убедитесь, что каждый применимый пункт проверен. Если защита не настроена, сначала ограничьте доступ и расходы, затем запускайте задачу.

Пример для защиты данных: плохо настроенная база данных с типовым паролем может быть скомпрометирована, а ресурсы — использованы без разрешения. Это ещё одна причина отделять учётные записи, ограничивать права и следить за расходами. Пример не заменяет проверку вашей инфраструктуры.

Расходы могут возникнуть из-за действий агента, пользователя с широкими полномочиями или постороннего лица, получившего доступ к системе. Поэтому ограничения должны действовать независимо от того, кто инициировал операцию.

<div class="section" role="doc-bibliography" aria-label="Официальные источники">

### Официальные источники

- [Anthropic: бюджеты задач](https://platform.claude.com/docs/en/build-with-claude/task-budgets)
- [Anthropic: настройка разрешений Claude Code](https://code.claude.com/docs/en/permissions)
- [Amazon Web Services: AWS Budgets](https://aws.amazon.com/aws-cost-management/aws-budgets/)
- [Yandex Cloud: бюджеты](https://yandex.cloud/ru/docs/billing/concepts/budget)

</div>

Познакомиться с [Ailoot](https://ailoot.ai/).

## Вопросы и ответы

### Останавливает ли отзыв IAM-ключей облачный счёт агента?

Нет. Он запрещает новые авторизованные запросы этими ключами, но существующие ресурсы продолжают расход. Ведите список принадлежащих задаче ресурсов, остановите согласованные экземпляры, проверьте их состояния и отдельно изучите сохранённые диски и другие сервисы.

### Обеспечивает ли пример регулярного выражения полную границу безопасности?

Нет. Он проверяет только совпавшие вызовы Bash и выбранный текст команды. Испытайте JSON и коды выхода, а реальный доступ ограничьте облачными правами и изоляцией. Эквивалентные операции и другие инструменты могут обойти текстовый фильтр.


## Ailoot · Компания и портфель её проектов

Ailoot опирается на накопленный опыт работы, большую клиентскую базу, стабильный сервис и постоянный контроль KPI.

Компания и портфель её проектов: миллионы клиентов; продажи на миллиарды ежемесячно.

Этот опыт Ailoot использует для API-доступа к нейросетям в продуктах клиентов, агентах, приложениях и автоматизациях.
