ECC: Система оптимизации производительности AI-агентов
ECC — это система для повышения эффективности AI-агентов через навыки, инстинкты, управление памятью и исследования. Поддержка Claude Code, Codex, Opencode, Cursor.
Архитектура ECC и основные компоненты
Архитектура ECC и основные компоненты
ECC — это не просто фреймворк для AI-агентов. Это попытка решить реальную проблему: безумие токенов и хаос в управлении контекстом. Я видел, как агенты в проектах с 500-километровым кодом превращают простую задачу в 200-километровый nightmare из-за неправильного управления памятью и навыками.
### Модуль управления навыками и инстинктами
С точки зрения безопасности, модуль навыков — это ваш firewall правил для AI-агента. Он определяет, что агент может делать, а что — нет. Типовая ошибка: включить все навыки сразу и надеяться на лучшее. На практике я видел случай, когда агент с Claude Code просто включил Docker-навык и начал исправлять production-контейнеры, потому что «не понял границ».
Базовая структура навыка выглядит так:
yaml# ~/.ecc/skills/caveman.yaml
name: caveman
version: 1.0
triggers:
- pattern: "reduce tokens"
- pattern: "optimize context"
- pattern: "minimal output"
actions:
- type: filter
target: output
rules:
- max_tokens: 500
- remove_whitespace: true
- compress_similar: true
constraints:
- allow_docker: false
- allow_network: false
- max_execution_time: 30s
Инстинкты работают на уровне приоритетов. Они не дают агенту уйти в сторону:
json{
"instincts": {
"security_first": {
"priority": 100,
"conditions": ["file_write", "production_path"],
"action": "require_confirmation"
},
"token_economy": {
"priority": 80,
"conditions": ["output_size > 1000"],
"action": "trigger_skill:caveman"
}
}
}
Рекомендуется тестировать новые навыки в изоляции. Я обычно создаю отдельный профиль для экспериментов:
bash# Создаём тестовую среду
mkdir -p ~/.ecc/test-env/{skills,instincts,cache}
cp ~/.ecc/skills/caveman.yaml ~/.ecc/test-env/skills/
# Запуск с тестовым профилем
ECC_PROFILE=test-env claude-code --task "оптимизировать этот скрипт"
Настоящий совет: начните с минимального набора навыков. Добавляйте по мере необходимости. Каждый новый навык — это поверхность для атаки на ваш процесс.
### Система краткосрочной и долгосрочной памяти
ECC разделяет память на два уровня: краткосрочную (context window) и долгосрочную (persistent storage). Это не просто кеширование — это управление состоянием.
Краткосрочная память работает через sliding window с весами:
python# Пример весового управления контекстом
class ContextManager:
def __init__(self):
self.window_size = 10 # последние 10 взаимодействий
self.weights = {
'current_task': 1.0,
'recent_errors': 0.8,
'user_corrections': 0.9,
'irrelevant_chat': 0.1
}
def compress_context(self, interactions):
# Сжатие с сохранением ключевых деталей
return self.summarize(interactions, self.weights)
Для долгосрочной памяти ECC использует структуру типа knowledge graph:
yaml# ~/.ecc/memory/project-knowledge.yaml
entities:
- name: "auth-service"
type: "service"
properties:
port: 8080
framework: "FastAPI"
last_modified: "2026-07-15"
relationships:
- depends_on: "postgres-db"
- calls: "user-service"
patterns:
- name: "jwt-validation"
context: "auth-service"
solution: |
# Стандартный паттерн валидации JWT
# Использовать RS256, проверять issuer и audience
# Никогда не доверять client-data
Настоящий кейс из практики: в одном проекте я настроил ECC так, чтобы он автоматически сохранял решения проблем в долгосрочную память. Через три месяца агент начал предлагать готовые решения для новых задач, опираясь на прошлый опыт. Это сэкономило 40% времени на рутине.
Но тут есть подводный камень. Долгосрочная память должна быть регулярно аудиторской. Я внедряю принудительную очистку старых записей:
bash# Очистка памяти старше 90 дней
ecc-memory --cleanup --older-than 90d --confirm
# Аудит содержимого памяти
ecc-memory --audit --output-format json > memory-audit.json
Категорически не рекомендую хранить в долгосрочной памяти:
- Персональные данные пользователей
- Секреты и credentials
- Любые данные, которые могут измениться
Для защиты используйте шифрование:
bash# Включить шифрование памяти
ecc-config --set memory.encryption.enabled=true
ecc-config --set memory.encryption.algorithm=aes-256-gcm
Чеклист
- Создать минимальный набор навыков (не более 5 базовых)
- Настроить инстинкты безопасности с высшим приоритетом
- Включить шифрование долгосрочной памяти
- Протестировать новые навыки в изолированном профиле
- Настроить автоматическую очистку памяти старше 90 дней
- Запустить первый аудит памяти командой
ecc-memory --audit - Проверить, что навыки не имеют доступа к production-путям
- Установить лимиты на размер контекста (рекомендую 2000 токенов максимум)
Безопасность выполнения AI-агентов
Изоляция процессов и контейнерization
С точки зрения безопасности процесс AI‑агента должен запускаться в полностью изолированном окружении.
Типовая ошибка — запускать агент с привилегиями root в production.
Рекомендации:
- настоятельно рекомендуется использовать контейнер с non‑root пользователем;
- категорически не рекомендуется запускать контейнер с флагом
--privileged; - рекомендуется монтировать файловую систему в режиме read‑only;
- рекомендуется применять профиль seccomp, ограничивающий системные вызовы.
Пример Dockerfile для агента:
Dockerfile# Dockerfile FROM python:3.12-slim # Создаём системного пользователя RUN adduser --system --group --no-create-home agent # Рабочая директория WORKDIR /opt/agent COPY . . # Изменяем владельца RUN chown -R agent:agent /opt/agent # Переключаемся на non‑root пользователя USER agent
Запуск контейнера с ограничениями:
bashdocker run --rm \
--security-opt seccomp=./seccomp-profile.json \
--read-only \
--tmpfs /tmp:rw,noexec,nosuid,size=64M \
-e OPENAI_API_KEY=YOUR_KEY \
ecc-agent:latest
Предупреждение: если не задать --read-only, процесс сможет модифицировать свои файлы и потенциально загрузить вредоносный код.
Для более лёгкого изолирования можно использовать firecracker или podman с опцией --cap-drop ALL.
Контроль доступа к файловой системе и сети
Контроль доступа реализуется на уровне ОС: AppArmor, seccomp, Linux‑capabilities и сетевые namespaces.
Пример systemd‑unit с ограничениями:
ini[Unit]
Description=AI Agent Service
After=network.target
[Service]
ExecStart=/usr/local/bin/ecc-agent
User=agent
Group=agent
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=true
CapabilityBoundingSet=CAP_NET_RAW CAP_DAC_READ_SEARCH
ReadOnlyDirectories=/opt/agent
RestrictAddressFamilies=AF_INET AF_INET6
Сетевая изоляция:
Для минимизации атакуемой поверхности лучше полностью отключить сеть и открывать только необходимые порты через файрвол.
Пример iptables‑правил (nftables‑аналог аналогичен):
bash# Разрешаем только HTTPS и DNS
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
# Блокируем всё остальное
iptables -A OUTPUT -j DROP
Пример создания сетевого namespace:
baship netns add ecc_ns
ip netns exec ecc_ns ip link set lo up
ip netns exec ecc_ns ip addr add 10.10.10.2/24 dev lo
ip netns exec ecc_ns ip route add default via 10.10.10.1
ip netns exec ecc_ns ./ecc-agent
На практике я видел случай когда агент, запущенный без --network none, смог выполнить DNS‑запросы к внешним резолверам и выгрузить конфиденциальные данные.
Категорически не рекомендуется оставлять открытыми все порты; рекомендуется использовать nftables с целевыми целями для более гибкой политики.
ECC: оптимизация агентных оболочек для Claude Code и анал...
Установка и настройка caveman — skill для сокращения токенов Claude Code
Оптимизация производительности агентного хранилища ECC
- Запустить агент в non‑root контейнере с read‑only файловой системой
- Ограничить набор возможностей через seccomp и
CapabilityBoundingSet - Включить
PrivateTmpиProtectSystemв systemd‑unit - Настроить сетевой изолятор (iptables/nftables) и разрешить только необходимые порты
- Включить аудит (
auditd) и отслеживать вызовыexecve,open - Проверить, что нет открытых привилегированных портов
- Регулярно обновлять профили seccomp и AppArmor
Ссылка на общие рекомендации по безопасности контейнеров: Docker security best practices
Оптимизация ресурсов и производительности
Оптимизация ресурсов и производительности
Управление потреблением памяти и CPU
AI-агенты — это звери, которые без контроля быстро съедают всё доступное ОЗУ и CPU. На практике я видел случай, когда Claude Code простоял на 12 ГБ RAM из-за неоптимального контекста. Решение простое, но требует внимания к деталям.
Ограничение контекстного окна
Первое, что проверяй — размер контекста. Claude Code использует последние 200 КБ кода по умолчанию, но в больших проектах это может вырасти до необъятного. Настраиваем .claude/settings.json:
json{
"context_window": 50000,
"max_file_size": "1MB",
"exclude_patterns": [
"node_modules/**",
"*.log",
".git/**",
"dist/**",
"**/*.min.js"
]
}
Файл .claudeignore — ваш первый щит
Создай .claudeignore в корне проекта. Это работает как .gitignore, но для AI-агента:
# Бинарники и артефакты
*.pyc
*.so
*.dll
.git/
# Логи и временные файлы
*.log
tmp/
.cache/
# Большие данные
data/*.csv
models/
weights/
Контроль CPU через systemd
Запускаешь агента как сервис? Ограничь ресурсы явно. Unit-файл для systemd:
ini[Unit]
Description=Claude Code Agent
After=network.target
[Service]
Type=simple
User=claude
ExecStart=/usr/local/bin/claude-code --agent-mode
CPUQuota=50%
MemoryMax=2G
MemorySwapMax=0
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Применяй: systemctl daemon-reload && systemctl restart claude-agent.
Мониторинг в реальном времени
Запусти htop в отдельной вкладке и следи за процессами claude, node, python. Если видишь рост памяти >100 МБ/минуту — это тревожный сигнал.
Кеширование результатов и предварительная обработка
Повторное выполнение одинаковых операций — типичная ошибка, которую сразу бьют по рукам в продакшене. ECC решает это через слой кеширования между агентом и выполнением задач.
Настройка кеша выполнения команд
Создаем директорию для кеша:
bashmkdir -p /var/cache/ecc/agent-results
chmod 750 /var/cache/ecc/agent-results
Конфигурация кеша в ECC (ecc-config.yaml):
yamlcache:
enabled: true
backend: "file" # или redis://localhost:6379
ttl: "24h"
max_size: "10GB"
compression: true
paths:
- "/var/cache/ecc/agent-results"
- "./.ecc-cache"
preprocessing:
enabled: true
batch_size: 10
parallel_jobs: 4
Пример: кеширование результатов анализа кода
Вместо повторного запуска eslint на каждый запрос:
bash# Первоначальный запуск с кешем
ecc-cache put "eslint-$(git rev-parse HEAD)" $(eslint src/ --format json)
# Проверка кеша перед выполнением
if ecc-cache exists "eslint-$(git rev-parse HEAD)"; then
echo "Используем кешированный результат"
ecc-cache get "eslint-$(git rev-parse HEAD)"
else
eslint src/ --format json | ecc-cache put "eslint-$(git rev-parse HEAD)" -
fi
Предварительная обработка файловой системы
ECC умеет предобрабатывать файлы перед передачей агенту. Настройка в skills/fs-preprocess.yaml:
yamlskill: fs-preprocess
triggers:
- "analyze codebase"
- "review changes"
actions:
- type: "filter"
exclude: ["*.test.js", "docs/**", "examples/**"]
- type: "compress"
algorithm: "gzip"
threshold: "100KB"
- type: "chunk"
max_lines: 500
overlap: 50
Практический совет: инвалидация кеша
Не забывай про инвалидацию. Добавь хук в git:
bash# .git/hooks/post-commit
#!/bin/bash
# Инвалидируем кеш после коммита
find .ecc-cache -type f -mtime +1 -delete
Проверка эффективности
После настройки кеширования запусти:
bash# Статистика кеша
ecc-cache stats
# Топ используемых ключей
ecc-cache top --limit 10
Если видишь cache hit rate ниже 60% — значит, кеш не работает эффективно. Проверь TTL и ключи.
Чеклист:
- Создан
.claudeignoreс исключениями для больших файлов и артефактов - Настроен
CPUQuotaиMemoryMaxв systemd-юните - Инициализирован кеш-бэкенд (
fileилиredis) - Добавлены скрипты инвалидации кеша в git-хуки
- Запущен мониторинг потребления ресурсов через
htop/iotop - Проверен cache hit rate через
ecc-cache stats
Интеграция с инструментами разработки
Интеграция с инструментами разработки
ECC работает как middleware между AI-агентом и вашими инструментами. На практике это выглядит так: агент запрашивает действие, ECC оптимизирует запрос через навыки и кеширует результат. Дальше — детали.
Поддержка Claude Code, Codex и OpenCode
Claude Code — это уже не экспериментальная фича, а production-инструмент. Ключевой момент: ECC не требует патчить сам Claude Code. Достаточно настроить обёртку.
Пример конфигурации для Claude Code:
yaml# ~/.ecc/integrations/claude-code.yaml
integration:
name: claude-code
enabled: true
memory_limit_mb: 512
token_optimization:
enabled: true
aggressive_mode: false
skills:
- code-analysis
- pattern-recognition
- context-compression
hooks:
pre_process: |
#!/bin/bash
echo "ECC: анализ запроса..." >&2
ecc-context-analyzer "$1"
post_process: |
#!/bin/bash
echo "ECC: кеширование результата..." >&2
ecc-cache-store "$1" "$2"
Codex и OpenCode используют схожую схему. Разница в том, что Codex умеет работать с GitHub API напрямую — это нужно учитывать при настройке rate limiting:
yaml# ~/.ecc/integrations/opencode.yaml
integration:
name: opencode
github_rate_limit:
requests_per_minute: 30
burst: 5
skills:
- api-optimization
- response-caching
Типовая ошибка: ставить aggressive_mode: true в продакшене. На тесте это выглядит круто, но в реальной работе вы получите обрезанные ответы там, где их не должно быть. Настоятельно рекомендуется тестировать каждый skill отдельно через ecc-skill-test.
Настройка под Cursor и другие IDE
Cursor — это IDE с встроенным AI. Интеграция через ECC выглядит иначе: мы работаем на уровне расширений.
json// .vscode/extensions/ecc-cursor/package.json
{
"name": "ecc-cursor-bridge",
"contributes": {
"commands": [
{
"command": "ecc.optimizeContext",
"title": "Оптимизировать контекст через ECC"
}
],
"configuration": {
"properties": {
"ecc.memoryProfile": {
"type": "string",
"default": "balanced",
"enum": ["minimal", "balanced", "full"]
}
}
}
}
}
Для JetBrains IDE:
xml<!-- .idea/ecc-plugin.xml -->
<project version="4">
<component name="eccSettings">
<option name="agentTimeout" value="30000" />
<option name="cacheStrategy" value="lru" />
<option name="skillsPath" value="$HOME/.ecc/jetbrains-skills" />
</component>
</project>
Не делайте так: кладите конфиги прямо в директорию проекта без .gitignore. На практике я видел случай, когда команда случайно закоммитила токены в репозиторий через кастомный skill. Результат: инцидент с 4-часовым downtime.
Для Vim/Neovim:
lua-- lua/plugins/ecc.lua
return {
"greyhat/ecc-nvim",
opts = {
agents = {
claude = {
cmd = "claude-code",
args = { "--ecc-integration" }
},
opencode = {
cmd = "opencode",
args = { "--with-cache" }
}
}
}
}
Проверьте работу интеграции командой:
bash# Тестируем подключение к агенту
ecc-integration-test --agent claude-code --verbose
# Проверяем latency
ecc-benchmark --iterations 100 --agent all
Связанные материалы:
- ECC: оптимизация агентных оболочек для Claude Code и анал...
- Установка и настройка caveman — skill для сокращения токенов Claude Code
- Оптимизация производительности агентного хранилища ECC
Чеклист после настройки интеграции
- Проверил
ecc-integration-testдля каждого агента - Настроил rate limiting для GitHub API (если используется Codex/OpenCode)
- Протестировал skills в изоляции через
ecc-skill-test - Добавил конфиги в
.gitignore(если они содержат секреты) - Запустил benchmark и сравнил latency до/после
- Настроил мониторинг:
ecc-metrics --watch - Проверил, что aggressive_mode выключен в продакшене
- Убедился, что кеш хранится на encrypted partition
Часто задаваемые вопросы
Что такое ECC и как он решает проблему «безумия токенов»?
ECC — это система управления поведением AI-агентов через навыки, инстинкты и ограничения. Проблема «безумия токенов» проявляется, когда агенты неконтролируемо расходуют токены на повторяющиеся операции и хранение избыточного контекста. С точки зрения безопасности, ECC работает как firewall: он ограничивает действия агента и заставляет его экономить ресурсы. На практике я видел случай, когда без такого контроля один агент превратил 500-километровый запрос в 200-километровый nightmare за сутки.
Какие AI-агенты поддерживает ECC?
Система поддерживает Claude Code, Codex, Opencode и Cursor — это агенты, которые работают с локальным кодом и могут выполнять действия в файловой системе. Категорически не рекомендуется использовать ECC с агентами, которые никогда не выходили в production, потому что поведение может быть непредсказуемым. Перед внедрением проверьте, что выбранный агент поддерживает управление контекстом через внешние конфигурации.
Как правильно настроить навыки для AI-агента без риска для production?
Никогда не включайте новые навыки в production-среде сразу после создания. Настоятельно рекомендуется создавать отдельный тестовый профиль и проверять навыки на небольшом коде. Ключевой принцип: ограничения должны быть жесткими — allow_docker: false, allow_network: false, max_execution_time: 30s. Типовая ошибка — дать агенту слишком широкие права, чтобы «не мешать работе», но на практике это приводит к случайным изменениям в продакшене.
Как работают инстинкты и как настроить приоритеты?
Инстинкты — это правила приоритетов, которые переключают навыки в зависимости от условий. Например, security_first с приоритетом 100 будет переключён при попытке записи в production-путь, тогда как token_economy (приоритет 80) сработает при большом объёме вывода. Рекомендуется начинать с высоких приоритетов для безопасности и постепенно добавлять экономические правила. Не делайте так: ставьте все приоритеты одинаковыми — агент будет вести себя непредсказуемо.
Какие риски управления памятью и как их избежать?
Главный риск — утечка конфиденциальных данных через контекст. Если агент хранит в памяти данные из production-окружения, они могут попасть в обучающие выборки или логи. Настоятельно рекомендуется использовать отдельные профили для разных окружений и очищать контекст после работы с sensitive данными. Перед выполнением любого действия проверьте, что путь назначения не содержит production-данных, иначе последствия могут быть серьёзными.