Блог

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

Markdown

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

Читать статью полностью

Кратко

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

Документация Ailoot: ailoot.ai/docs.

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

Кратко

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

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

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

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

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

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

Кратко

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

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

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

OpenAI Platform. Перейдите в раздел лимитов оплаты и проверьте доступные ограничения расходов и уведомления. Установите значения с учётом того, сколько готовы потратить.

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

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

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

Кратко

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

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

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

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

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

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

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

Кратко

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

Сверьте порядок проверки permissions и поведение hooks с официальной документацией Claude Code. Правила доступа, настройки hooks и режим пропуска подтверждений могут взаимодействовать; не считайте одну настройку заменой другой.

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

#!/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:

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

В /hooks проверьте регистрацию. Передайте скрипту безвредный пример JSON, не исполняя поле команды: указанное разрушительное написание должно дать код 2, безопасная команда — 0. Испытайте и неверный вход. Регулярное выражение проверяет лишь совпавшие вызовы Bash. Реальную границу полномочий обеспечивают узкие ключи и изоляция среды. См. официальный пример входа и выхода hook.

Зачем нужен список allowedTools и где применять --dangerously-skip-permissions (правило 4)

Кратко

Список allowedTools позволяет заранее указать инструменты, которыми агент может пользоваться без отдельного подтверждения. Флаг --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/**)"
    ]
  }
}

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

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

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

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

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

Как настроить оповещения о бюджете и аварийное отключение в облаке (правило 5)

Кратко

Уведомление бюджета сообщает об уже наблюдаемом или прогнозном расходе и может запаздывать. Функция реагирования способна запретить новые операции агента или остановить определённые ресурсы — это разные действия. Отключение IAM-ключа не прекращает оплату уже работающих ресурсов. Их остановку определите и испытайте отдельно.

Настраивайте защиту в используемом облаке и сверяйте последовательность действий с официальными инструкциями.

AWS Budgets (официальная документация). Создайте бюджет и пороги. На пороге 100% уведомление SNS может вызвать функцию Lambda. Пример ниже только деактивирует ключи указанного IAM-пользователя: ресурсы он не останавливает и жёсткий предел расходов не устанавливает:

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.

Документация AWS Budgets предупреждает о задержке уведомлений и расходах до и после сигнала. Порог 100% поэтому не обеспечивает точный денежный потолок.

GCP Budget Alerts. Настройте уведомления и изучите механизмы Google Cloud для автоматизации реакции. Сам сигнал не обязательно останавливает сервисы. Условия и порядок настройки сверяйте с официальной документацией.

Yandex Cloud. Настройте бюджеты и, если это подходит вашей архитектуре, квоты ресурсов. Актуальные сведения приведены в официальной документации Yandex Cloud. Перед использованием проверьте, какие уведомления и автоматические действия поддерживаются.

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

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

Кратко

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

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

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

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

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

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

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

Кратко

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

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

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

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

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

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

  • Ограничение времени работы с помощью системной команды timeout:
timeout 1800 claude --dangerously-skip-permissions --max-turns 30 -p "scan task"
# 1800 секунд = 30 минут. Команда ограничивает время выполнения процесса.
  • Журналирование вызовов инструментов через PostToolUse hook помогает после сессии разобраться в действиях агента.
  • Мониторинг процессов позволяет заметить неожиданный запуск множества одновременных экземпляров Claude Code.

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

Кратко

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

Проверьте перед 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, ограничение времени и наблюдение за процессами

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

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

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

Познакомиться с Ailoot.

Подробнее

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

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

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

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

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

Все статьи