DietrichGebert/ponytail: AI‑агент как ленивый
Узнайте, как настроить AI‑агента, который работает как ленивый, но опытный старший разработчик, и избавиться от лишних строк кода.
Ленивый подход к разработке AI‑агентов
Имитация ленивого стиля
Во-первых, ленивый подход к разработке AI‑агентов — это не отсутствие усилий, а разумное отложительное выполнение рутинных задач. senior‑разработчик, которого можно назвать «ленивым», пишет минимум кода, полагаясь на возможности агента, а не на собственные ручные правки.
Пример: вместо того чтобы вручную создать скрипт для загрузки данных и их преобразования, достаточно сформулировать запрос агенту:
bash# request to the AI‑agent
curl -X POST https://api.anthropic.com/v1/messages \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ANTHROPIC_API_KEY" \
-d '{
"role": "user",
"content": "Сгенерируй bash‑скрипт, который скачивает CSV‑файл по URL, преобразует его в JSON и сохраняет в /data/result.json"
}'
Агент, используя встроенный плагин claude‑code, генерирует готовый скрипт, который можно сразу запустить. Подробнее о настройке контекста для Claude Code см. Как создать CLAUDE.md для улучшения работы Claude Code.
Во-вторых, имитация ленивого стиля подразумевает использование готовых шаблонов и скриптов, которые уже покрывают типичные сценарии. Например, для автоматизации резервного копирования домашней лаборатории достаточно скопировать проверенный unit‑файл systemd и немного адаптировать пути:
ini# /etc/systemd/system/backup-pictures.service
[Unit]
Description=Резервное копирование фотографий в TrueNAS
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup_pictures.sh
bash# /usr/local/bin/backup_pictures.sh
#!/usr/bin/env bash
set -euo pipefail
SRC="/mnt/trueNAS/pictures"
DST="/backup/pictures/$(date +%Y-%m-%d)"
mkdir -p "$DST"
rsync -a --delete "$SRC/" "$DST/"
Эти файлы позволяют агенту выполнить всю работу без вмешательства человека, а самому разработчику остаётся лишь периодически проверять лог через journalctl -u backup-pictures.service.
Экономия кода и времени
Сохранение кода — это не только меньше строк, но и меньше точек отказа. При работе с AI‑агентом удобно выносить общие части в отдельные файлы‑шаблоны, а затем подставлять переменные.
Пример Docker‑Compose конфигурации, запускающей агент и необходимые сервисы:
yaml# docker-compose.yml
version: "3.8"
services:
claude-agent:
image: ghcr.io/anthropic/claude-code:latest
container_name: claude-agent
restart: unless-stopped
volumes:
- ./agents:/app/agents
- ./data:/data
environment:
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
command: ["--config", "/app/agents/config.yaml"]
yaml# agents/config.yaml
model: claude-3-sonnet
timeout: 300
log_level: info
Запуск выглядит так:
bashdocker compose up -d
После старта агент готов принимать запросы через локальный API, а все зависимости (например, curl, jq) уже включены в образ, так что дополнительных установок не требуется.
Если нужно выполнить рутинную задачу ежедневно, удобно создать systemd‑таймер, а не писать отдельный скрипт:
ini# /etc/systemd/system/agent-schedule.timer
[Unit]
Description=Запуск AI‑агента каждый день в 02:00
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
ini# /etc/systemd/system/agent-schedule.service
[Unit]
Description=Запуск AI‑агента
[Service]
ExecStart=/usr/bin/docker compose -f /opt/agent/docker-compose.yml up --abort-on-container-exit
bashsystemctl enable --now agent-schedule.timer
Таким образом, минимум кода, проверенные шаблоны и автоматизация позволяют сконцентрироваться на решении реальных задач, а не на рутинных операциях. Если вы хотите узнать больше о локальных ИИ‑агентах и их инструментах, обратитесь к Локальные ИИ-агенты и инструменты.
Настройки ponytail для минимального вклада
Настройки ponytail для минимального вклада
Ponytail — это легковесный механизм, позволяющий задать «мозг» AI‑агента через несколько параметров. Чтобы агент работал как ленивый, но опытный старший разработчик, достаточно ограничить количество контекстных данных и задать чёткую системную инструкцию.
Минимальный файл конфигурации (ponytail.yml):
yaml# ponytail.yml
context:
- path: ./src
include: ["*.py", "*.md"]
- path: ./docs
include: ["*.md"]
system_prompt: |
Ты — опытный старший разработчик, который решает задачи с минимальными усилиями.
Оцени текущий код, укажи проблемные места и предложи оптимизацию, не вдаваясь в лишние детали.
Ответ должен быть лаконичным, содержать только необходимые команды и фрагменты конфигураций.
Почему так?
Во‑первых, ограничивая список файлов, мы уменьшаем объём передаваемого контекста, что ускоряет обработку и экономит токены.
Во‑вторых, системный промпт формирует поведение агента, заставляя его действовать как «ленивый, но опытный» специалист, а не как общие «инструктор».
Как создать CLAUDE.md для улучшения работы Claude Code — в этом руководстве описано, как оформить контекстные файлы, чтобы агент видел только то, что действительно важно.
Контекст и подсказки
Контекст — это «знание», которое агент получает до начала работы. Чем точнее и компактнее контекст, тем меньше «лишних строк» в ответе.
Пример передачи контекста через CLI (используем claude-code):
bash# Передаём только файлы из каталога src, а остальные игнорируем
claude-code run --context src/**/*.py --prompt "Оптимизируй этот файл"
Подсказка в системе (system message) — короткая инструкция, которая задаёт тон:
textYou are a senior engineer who always looks for the simplest solution. Focus on the most critical parts of the code and suggest only one‑line changes.
Что важно:
- Контекст должен включать только те файлы, где планируется работа.
- Подсказка (prompt) должна быть однострочной, без «все‑это‑и‑другое», и явно указывать, чего именно требуется (оптимизация, рефакторинг, исправление бага).
Локальные ИИ-агенты и инструменты описывают, как настроить локальный контекст и как избежать «заливания» лишних файлов.
Шаблоны и реюзабельность
Чтобы не писать одинаковые подсказки заново, удобно хранить шаблоны в отдельных файлах и подключать их через include. Это повышает реюзабельность и гарантирует одинаковый стиль ответов.
Шаблон prompt (templates/optimize_prompt.md):
markdown# Задача
Оптимизировать код, сделав его более читаемым и эффективным, без изменения внешнего поведения.
# Требования
- Указать проблемные участки.
- Предложить минимум один конкретный изменений (одна строка, одна функция).
- Привести пример до/после в виде кода.
Использование шаблона:
bashclaude-code run \
--context src/**/*.py \
--prompt "$(cat templates/optimize_prompt.md)"
Почему это удобно:
- Шаблон хранит только структуру запроса, а конкретные детали (файлы, задачи) подставляются динамически.
- Реюзабельность достигается тем, что один и тот же шаблон можно применять к разным проектам, меняя лишь контекст.
Автономная разработка на Rust с помощью Claw-Code показывает, как similar подход применяется в Rust‑проектах, где шаблоны используют переменные ${PROJECT} и ${TASK}.
Итого:
- Ограничьте контекст до нужных файлов.
- Формулируйте системный промпт чётко и лаконично.
- Сохраняйте шаблоны в отдельные файлы и подключайте их через include, чтобы избежать дублирования и поддерживать предсказуемость поведения агента.
Эти простые настройки позволяют получать от AI‑агента «ленивый, но опытный» результат без лишних строк кода и без излишних токенов.
Интеграция с Claude‑Code и CI/CD
Подключение к Claude‑Code plugin
Для работы с Claude‑Code необходимо подключить плагин к вашему редактору и оформить файл CLAUDE.md, где задаются правила поведения агента.
- Установите плагин. В VS Code это делается через маркетплейс:
bashcode --install-extension claude.code
- Создайте файл
CLAUDE.mdв корне проекта. Пример минимального конфигурационного файла:
markdown# CLAUDE.md
## Общие правила
- Агент работает в режиме `auto` – он сам выбирает, какие файлы менять.
- При запросе `claude request` указывайте путь к файлу, который требуется изменить.
- Для уточнения контекста используйте `claude context add <путь_к_файлу>`.
## Пример запроса
claude request --file src/main.py --context add ./config.yaml
[Как создать CLAUDE.md для улучшения работы Claude Code](/guides/kak-sozdat-claudemd-dlya-uluchsheniya-raboty-claude-code-9aywoa)
Файл CLAUDE.md следует разместить в корне репозитория, иначе плагин не сможет его найти.
Важно: не храните в
CLAUDE.mdсекретные токены. Для аутентификации используйте переменные окружения, напримерCLAUDE_API_KEY.
Автоматизация в пайплайнах
Интеграция Claude‑Code в CI/CD позволяет автоматизировать ревью кода и генерацию boilerplate‑кода. Ниже пример workflow для GitHub Actions, который запускает Claude‑CLI при каждом pull‑request.
yamlname: AI‑review
on:
pull_request:
jobs:
claude:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Claude CLI
run: |
curl -L https://github.com/claude/cli/releases/download/v1.2.0/claude-linux-amd64.tar.gz | tar xz
sudo mv claude /usr/local/bin/
- name: Run AI agent on PR description
env:
CLAUDE_API_KEY: ${{ secrets.CLAUDE_API_KEY }}
run: |
# Формируем описание PR в виде временного файла
echo "${{ github.event.pull_request.description }}" > pr_description.md
claude request --mode auto --file pr_description.md
В этом примере:
- Install Claude CLI – скачивание и установка официального бинарника.
- Run AI agent – передача описания PR в агент, который в responses‑е может предложить правки, а затем коммит‑бот может применить их автоматически (дополнительный шаг, не включён в базовый пример).
Для более продвинутой оптимизации работы агента рекомендуется использовать систему ECC, о которой подробно описано в статье Оптимизация ИИ‑агентов с помощью системы ECC.
Если требуется более тонкая настройка под конкретный стек, смотрите рекомендации в Локальные ИИ‑агенты и инструменты и Claw‑code: автономный музейный экспонат на Rust.
Во‑первых, подключение к Claude‑Code простое: установите плагин, создайте CLAUDE.md и задайте переменные окружения.
С продовольственной точкой зрения, автоматизация в пайплайнах экономит часы ручного ревью и обеспечивает предсказуемость конфигураций.
Если мы посмотрим на текущие практики, то видно, что большинство команд используют готовый CLI‑инструмент и лишь адаптируют его под свои нужды.
Если требуется дополнительная настройка, достаточно расширить CLAUDE.md правилами контекста и добавить скрипты‑обёртки в CI.
Часто задаваемые вопросы
Как правильно задать запрос агенту, чтобы он генерировал готовый скрипт без лишних правок?
Нужно указать в запросе полную цель и требуемый формат вывода, например «Сгенерируй bash‑скрипт, который скачивает CSV‑файл по URL, преобразует его в JSON и сохраняет в /data/result.json». Укажите, что скрипт должен быть самодостаточным, с shebang и обработкой ошибок, чтобы агент мог сразу использовать его в дальнейшем. При указании пути к данным используйте абсолютные пути, чтобы избежать проблем с текущим рабочим каталогом.
Что делать, если агент генерирует скрипт, который не работает из‑за отсутствия зависимостей?
Проверьте, включены ли в запрос все необходимые зависимости, например «установить пакет curl и jq». Если скрипт использует плагин claude‑code, уточните, что нужно добавить в контекст CLAUDE.md указание о необходимости проверять наличие утилит. После получения кода выполните dry‑run в терминале, чтобы убедиться, что все команды доступны.
Как обеспечить предсказуемость работы AI‑агента в автоматических задачах, например в CI/CD?
Оформите запрос как отдельный step в pipeline, где агент получает фиксированный набор входных параметров через переменные окружения. Добавьте проверку кода через flake8 или shellcheck перед запуском, а также логируйте вывод агента в отдельный файл для последующего анализа. При необходимости зафиксируйте версию плагина и образ Docker, чтобы исключить изменения в окружении.
Как правильно именовать ресурсы, связанные с AI‑агентом, чтобы избежать конфликтов с другими сервисами?
Используйте понятные имена, например ponytail‑loader‑script, ponytail‑backup‑service, а в системе Proxmox или k3s применяйте метки, связанные с проектом. При работе с домашними серверами ставьте префикс проекта и номер версии, например ponytail‑v1‑loader. Это упрощает поиск в логах и мониторинге, а также повышает предсказуемость конфигураций.