Продвинутый

affaan-m/ECC: Agent Harness Performance Optimization

greyhat
greyhat
Специалист по безопасности15 ноября 2026 г.13 мин чтения

Разбираем систему оптимизации производительности agent harness для Claude Code, Codex, Opencode, Cursor и др. — навыки, память, безопасность, исследовательск...

affaan-m/ECC: Agent Harness Performance Optimization

Разбираем систему оптимизации производительности agent harness для Claude Code, Codex, Opencode, Cursor и др. — навыки, память, безопасность, исследовательский подход.

Архитектура agent harness и ключевые компоненты

Архитектура agent harness и ключевые компоненты

Когда мы говорим об оптимизации производительности agent harness (оболочки для агентов), важно понимать: мы не просто «ускоряем код». Мы минимизируем задержки (latency) между принятием решения моделью и выполнением действия в системе. В контексте таких инструментов, как Claude Code или Cursor, любая лишняя секунда на обработку контекста — это деградация пользовательского опыта и рост затрат на токены.

С точки зрения безопасности, архитектура harness — это критический узел. Если агент получает доступ к вашей файловой системе, оболочка становится единственным барьером, который контролирует, что именно будет исполнено.

Интеграция с Claude Code и Codex

Интеграция агентов в рабочую среду строится на концепции «инструментального использования» (tool use). Claude Code и аналогичные системы не просто генерируют текст, они вызывают функции. Основная проблема здесь — разрыв между высокоуровневым намерением модели и низкоуровневым исполнением команды в терминале.

Типовая ошибка при интеграции — предоставление агенту прямого доступа к оболочке (shell) без прослойки валидации. На практике я видел случаи, когда из-за галлюцинации модели агент пытался выполнить rm -rf / или некорректно сформированную команду, которая могла затронуть системные директории.

Для эффективной работы с Claude Code рекомендуется использовать специализированные конфигурационные файлы, которые задают границы дозволенного. Например, настройка CLAUDE.md для улучшения Claude Code позволяет ограничить область видимости агента и задать правила поведения.

При проектировании harness для интеграции с Codex или Claude, архитектура должна поддерживать разделение сред. Никогда не запускайте агентные процессы с правами root.

bash
# Пример создания изолированного пользователя для работы агента
# Это обязательный шаг для обеспечения безопасности периметра

sudo groupadd ai-agents
sudo useradd -m -g ai-agents -s /bin/bash agent-executor

# Настройка ограничений через ulimit (ограничение ресурсов)
# Чтобы агент не смог вызвать DoS вашей системы через бесконечный цикл
sudo prlimit --pid $(pgrep agent-executor) --nproc=10 --nofile=1024

Эффективная интеграция также требует грамотной подготовки контекста. Вместо того чтобы скармливать агенту весь репозиторий, harness должен динамически собирать только релевантные фрагменты кода. Подробнее о том, как структурировать документацию для лучшего понимания агентом, можно прочитать в материале про анализ DESIGN.md.

Модульная структура памяти и инстинктов

Чтобы агент не превращался в «золотую рыбку», забывающую контекст через три запроса, архитектура harness должна включать многоуровневую систему памяти. Мы разделяем её на три типа:

  1. Short-term memory (Краткосрочная): Текущий диалог и последние выполненные команды. Хранится в оперативной памяти процесса.
  2. Working memory (Рабочая): Текущее состояние файловой системы, дерево проекта и активные ошибки компиляции.
  3. Long-term memory (Долговременная): Инструкции, паттерны кодирования и история прошлых решений. Здесь критически важна интеграция с векторными базами данных.

Инстинкты в архитектуре — это набор жестко заданных правил (heuristics), которые агент обязан проверять перед каждым действием. Это не часть LLM, это часть кода harness.

Пример реализации «инстинкта проверки безопасности» в конфиге harness (псевдокод):

yaml
# Конфигурация инстинктов агента
instincts:
  - name: "prevent_destructive_commands"
    priority: critical
    check:
      forbidden_patterns:
        - "rm -rf /"
        - "mkfs"
        - "> /dev/sd*"
    action: "block_and_ask_confirmation"

  - name: "context_awareness"
    priority: high
    check:
      verify_file_existence: true
      max_token_usage_per_step: 4000
    action: "trim_context"

С точки зрения производительности, модульность позволяет выносить тяжелые операции (например, индексацию кода для долгосрочной памяти) в отдельные фоновые процессы. Это напоминает подход, используемый в проекте Claw-Code на Rust, где важна максимальная скорость и контроль над ресурсами.

Важно понимать: чем больше «инстинктов» вы добавляете, тем выше нагрузка на CPU и тем выше задержка (latency). Поэтому каждый инстинкт должен быть математически обоснован. Если вы внедряете проверку через регулярные выражения — это быстро. Если вы просите LLM проверить другую LLM — вы получите огромную задержку и непредсказуемый результат. Не делайте так.

Оптимизация производительности: навыки и инстинкты

Оптимизация производительности: навыки и инстинкты

Алгоритмические подходы к ускорению

Сократить количество токенов — первый и самый эффективный шаг.
Фильтруйте входные данные до отправки в модель: оставляйте только нужные поля, отбрасывайте комментарии и лишние пробелы.

bash
# пример очистки JSON‑payload перед вызовом агента
cat input.json | jq 'del(.comments, .metadata, .debug)' > cleaned.json

Пакетная обработка (batch) уменьшает накладные расходы на сериализацию и сетевые запросы.
Если ваш агент поддерживает batch‑mode, собирайте до 10–20 запросов в один вызов.

python
# Python‑пример: отправка пакета из 5 запросов
import requests, json

payloads = [{"prompt": p, "context": c} for p, c in zip(prompts, contexts)]
resp = requests.post("https://api.agent-harness.local/v1/batched", json={"batches": payloads})

Уменьшите количество вызовов через кэш‑инстикт (см. подпункт).
Если запрос уже был выполнен с одинаковыми параметрами, используйте локальный кэш вместо повторного обращения к модели.

bash
# пример кэша в redis (ключ — SHA256 от входных данных)
redis-cli SET cache:prompt:<sha256> "<payload>" EX 3600
redis-cli GET cache:prompt:<sha256>

Профилирование — измеряйте время выполнения конкретных участков кода.
perf или htop показывают, где тратится CPU, а strace — системные вызовы.

bash
perf record -g -- python3 agent_runner.py
perf report

На практике я видел случай, когда удаление unused‑полей из конфигурации YAML сократило время ответа модели на 30 % (см. multica-ai/andrej-karpathy-skills).

рекомендуется всегда проверять, какие поля действительно нужны модели, и удалять остальные.
настоятельно рекомендуется использовать jq/awk для предварительной фильтрации JSON‑payload.

Параллельные задачи и кэш‑инстикты

Запуск нескольких агентов в параллельном режиме повышает пропускную способность, но требует контроля за ресурсами.

bash
# пример запуска 4 агентов одновременно через GNU parallel
cat agents.txt | parallel -j4 --bar ./run_agent.sh {}

Ограничьте количество одновременных процессов (ulimit -n для открытых файлов, ulimit -u для процессов) — иначе система может выйти из памяти или дескрипторов.

bash
ulimit -n 65535      # максимум открытых файлов
ulimit -u 2000       # максимум процессов для текущего пользователя

Кеширование результатов — хранить уже полученные ответы в Redis или на диске.
Redis обеспечивает быстрый доступ и TTL, а файловый кеш (например, diskcache) подходит для больших объёмов данных.

python
# Python‑пример: кэш с diskcache
import diskcache, json

cache = diskcache.Cache('/var/cache/agent_harness')
key = hash(prompt + context)   # простой хеш, можно улучшить
if key in cache:
    return cache[key]
else:
    result = model.generate(prompt, context)
    cache[key] = result
    return result

Типичная ошибка — кэшировать результаты без проверки их актуальности.
Если входные данные меняются (например, обновлённый контекст), иначе будет возвращён устаревший ответ, что может привести к некорректному поведению.

bash
# пример проверки TTL в redis
redis-cli TTL cache:prompt:<sha256>

категорически не рекомендуется запускать более 80 % доступных CPU‑ядеров одновременно без мониторинга нагрузки.
рекомендуется использовать systemd‑unit с CPUQuota для ограничения потребления ресурсов конкретным агентом.

Для более детального подхода смотрите Настройка CLAUDE.md для улучшения Claude Code и Анализ DESIGN.md и генерация UI с помощью VoltAgent/awesome-design-md.

Безопасность и контроль доступа

### Механизмы аутентификации и изоляции

В agent harness аутентификация реализуется через токен доступа к API Anthropic (Claude‑Code, Opus, Cursor и пр.). Токен должен храниться в переменной окружения, а не в открытых конфигурационных файлах.

Рекомендация: создайте файл .env с правами 600 и загрузите его в контейнер:

bash
# .env
CLAUDE_TOKEN=ghp_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
bash
docker run --rm \
  --env-file .env \
  --user 1000:1000 \
  --read-only \
  --security-opt seccomp=profile.json \
  -v "$(pwd)/agent_harness:/app" \
  ghcr.io/affaan-m/ecc:latest
  • --user 1000:1000 — запуск от не‑root пользователя, что ограничивает влияние компрометированного процесса.
  • --read-only — файловая система без возможности записи, исключая неавторизованные изменения.
  • --security-opt seccomp=profile.json — ограничивает набор системных вызовов, используемых контейнером (пример профиля доступен в репозитории).

Для защиты от перебора паролей/токенов рекомендуется включить CrowdSec или Fail2ban на локальном сервере, где запущен API‑endpoint:

bash
# пример правила Fail2ban дляClaude‑API
cat > /etc/fail2ban/filter.d/claude-api.conf <<'EOF'
[Definition]
failregex = ^.*"error": "invalid token".*
ignoreregex =
EOF

cat > /etc/fail2ban/jail.d/claude-api.local <<'EOF'
[claude-api]
enabled = true
filter = claude-api
logpath = /var/log/claude-api/*.log
maxretry = 5
bantime = 3600
EOF

systemctl restart fail2ban

Важно: токен с открытым доступом к сети — категорически не рекомендуется. При необходимости используйте прокси‑сервер с TLS‑терминацией, но только если он полностью контролируется вами.

Ссылка на практику: в статье «Автономная разработка: проект Claw-Code на Rust» описаны те же подходы к изоляции контейнеров и работе от имени отдельного пользователя.


### Проверка целостности кода и патчей

Agent harness должен гарантировать, что полученный код не был изменён после сборки. Для этого используют подпись Git‑коммитов, а также подпись артефактов с помощью cosign (или аналогичных инструментов).

1. Подпись коммитов Git

bash
# подписываем коммит GPG‑ключом
git commit -S -m "Fix memory leak in agent harness"

Проверка подписи:

bash
git log --show-signature -1

Если вывод содержит gpg: Signature made — значит, коммит проверен.

2. Подпись артефактов (Docker‑образ, tarball)

bash
# подписываем образ
cosign sign --key cosign.key ghcr.io/affaan-m/ecc:1.2.3

# проверка подписи
cosign verify --key cosign.key ghcr.io/affaan-m/ecc:1.2.3

Рекомендация: храните приватный ключ cosign.key в безопасном хранилище (Vault, AWS KMS), а не в репозитории.

3. Хеш‑проверка бинарных файлов

bash
sha256sum agent_harness.bin > agent_harness.bin.sha256
# позже проверяем
sha256sum -c agent_harness.bin.sha256

4. Интеграция в CI/CD

В pipeline CI добавьте шаг проверки подписи и хеша:

yaml
# .github/workflows/ci.yml
jobs:
  verify:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Verify cosign signature
        run: cosign verify --key cosign.key ghcr.io/affaan-m/ecc:${{ env.IMAGE_TAG }}
      - name: Verify SHA256
        run: sha256sum -c agent_harness.bin.sha256

Ссылка на методику: подробный пример использования cosign в контексте проверки кода можно найти в статье «AI‑агент как ленивый старший разработчик: код без написания», где автор описывает процесс автоматической верификации артефактов.

5. Проверка патчей в репозитории

Для быстрой проверки, что патч не содержит запрещённых изменений (например, добавление новых пользовательских токенов), используйте git diff --stat и git grep:

bash
git diff --stat HEAD~1 HEAD | grep -E 'token|secret'
git grep -E 'token|secret' HEAD~1..HEAD

Если найдено что‑то, CI должен отклонить сборку.

Важно: не делайте git commit -m "fix" без указания причины. Каждый коммит должен быть прослеживаем и обоснован, иначе при проверке целостности будет сложно отследить источник изменения.


Чек‑лист для дальнейших действий

  • Токен доступа хранится в .env с правами 600 и передаётся в контейнер через --env-file.
  • Запуск контейнера выполняется от не‑root пользователя, с --read-only и ограниченным seccomp‑профилем.
  • На сервере включён Fail2ban/CrowdSec для защиты API‑endpoint от brute‑force.
  • Все коммиты подписаны GPG‑ключом (git commit -S).
  • Артефакты (Docker‑образ, tarball) подписаны cosign и проверяются в CI.
  • Хеш‑файлы (sha256sum) генерируются и проверяются для бинарных файлов.
  • CI‑pipeline содержит шаги проверки подписи и хеша, а также git diff --stat/git grep для обнаружения нежелательных изменений.

Следуя этим рекомендациям, вы обеспечите надёжную аутентификацию, изоляцию и целостность кода в работе с agent harness.

Исследовательский подход и развитие системы

Тестирование в лабораторных средах

Когда речь заходит об оптимизации Agent Harness, главная ошибка — пытаться замерять производительность агента прямо в рабочей среде. В production-системах слишком много шума: фоновые процессы, сетевые задержки, конкуренция за ресурсы CPU. С точки зрения безопасности и стабильности, запуск экспериментальных агентов в основной инфраструктуре — это неоправданный риск.

Я всегда использую изолированную домашнюю лабораторию. Для тестов ECC (Agent Harness Performance Optimization) я разворачиваю эфемерные окружения в Docker. Это позволяет точно контролировать лимиты ресурсов и видеть, как агент ведет себя при дефиците памяти или CPU.

Типовая ошибка — давать агенту неограниченный доступ к ресурсам. На практике я видел случаи, когда неоптимизированный цикл в коде агента при поиске уязвимостей или рефакторинге вызывал утечку памяти, которая «вешала» весь хост.

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

yaml
# Пример конфигурации для тестирования агента в изолированной среде
services:
  agent-harness-test:
    image: ecc-agent-harness:latest
    deploy:
      resources:
        limits:
          cpus: '2.0'      # Ограничиваем до 2 ядер, чтобы имитировать реальный dev-node
          memory: 4G       # Жесткий лимит, чтобы отловить утечки
    networks:
      - test-net
    cap_drop:
      - ALL              # Сбрасываем все привилегии ядра
    security_opt:
      - no-new-privileges:true # Запрещаем повышение привилегий внутри контейнера

networks:
  test-net:
    driver: bridge

Если вы планируете глубоко изучать поведение LLM в кодинге, рекомендую сначала ознакомиться с настройкой CLAUDE.md для улучшения Claude Code, так как системные инструкции напрямую влияют на количество итераций и, как следствие, на нагрузку системы.

Постоянные улучшения на основе метрик

Оптимизация без метрик — это гадание на кофейной гуще. Чтобы понять, стал ли агент быстрее или эффективнее, нужно измерять конкретные показатели: время до первого токена (TTFT), общую задержку (latency) и, что критически важно для автономных систем, потребление ресурсов на одну успешно выполненную задачу.

В рамках ECC мы внедряем сбор телеметрии, которая фокусируется на трех аспектах:

  1. Compute Efficiency: сколько циклов CPU тратится на обработку контекста.
  2. Memory Footprint: динамика роста потребления RAM при увеличении размера проекта.
  3. Token Economy: соотношение полезного кода к количеству потраченных токенов.

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

При анализе логов агента важно смотреть не только на ошибки, но и на паттерны «зацикливания». Если агент делает пять одинаковых попыток исправить одну и ту же ошибку, это не просто неэффективно — это расход ваших денег и ресурсов. Это можно сравнить с подходом, описанным в материале про AI-агента как ленивого старшего разработчика, где акцент смещается с написания кода на правильное управление процессом.

Чтобы замерить производительность конкретного шага агента, можно использовать простой скрипт для анализа времени выполнения команд в окружении:

bash
# Простой замер времени выполнения задачи агентом
# Используем time для фиксации real, user и sys времени

time ./run-agent-task.sh --task "refactor-auth-module" --context ./src

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

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

Часто задаваемые вопросы

Как ограничить область действий агента в файловой системе?

Для минимизации рисков категорически не рекомендуется предоставлять агенту доступ ко всей корневой директории. Рекомендуется использовать принцип наименьших привилегий: создавайте изолированные рабочие директории и ограничивайте область видимости агента через конфигурационные файлы, такие как CLAUDE.md. С точки зрения безопасности, оболочка (harness) должна выступать в роли фильтра, который проверяет команды перед их исполнением в системе.

Можно ли использовать агент в среде с правами root?

Использование агентов с правами суперпользователя — это критическая ошибка, которая может привести к полной компрометации системы при первой же галлюцинации модели. На практике я видел случаи, когда некорректно сформированная команда приводила к повреждению системных файлов. Всегда запускайте инструменты в изолированных окружениях (например, в контейнерах) под пользователем с ограниченными правами.

Как оптимизация производительности влияет на безопасность?

Оптимизация в данном контексте направлена на снижение задержек (latency) при обработке контекста и вызове функций. Однако важно помнить: ускорение процесса не должно происходить за счёт пропуска этапов валидации команд. Любая попытка «срезать углы» в механизмах проверки ввода (input validation) создаёт уязвимость, которую можно использовать для выполнения произвольного кода.

Что делать, если агент пытается выполнить опасную команду?

Если harness обнаруживает команду, выходящую за рамки заданных правил (например, попытку удаления системных директорий), выполнение должно быть немедленно прервано. Рекомендуется настроить систему так, чтобы при обнаружении подозрительной активности агент запрашивал явное подтверждение пользователя или просто блокировался. Никогда не полагайтесь на то, что модель «поймёт» опасность — она лишь предсказывает следующий токен.

Поделиться:TelegramX / TwitterVK

Читайте также