Продвинутый

AI‑агент: как ленивый старший разработчик думает

Алексей Кузнецов
Алексей Кузнецов
Системный администратор15 ноября 2026 г.9 мин чтения

AI‑агент в ponytail экономит код, автоматизируя рутину, как ленивый senior dev. Покажет практические приёмы для снижения нагрузки в продакшн.

AI‑агент: как ленивый старший разработчик думает

AI‑агент в ponytail экономит код, автоматизируя рутину, как ленивый senior dev. Покажет практические приёмы для снижения нагрузки в продакшн.

Принцип ленивого senior dev

Принцип ленивого senior dev

### Автоматизация рутинных задач

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

С практической точки зрения удобно использовать systemd‑таймеры для периодического выполнения скриптов. Ниже пример скрипта, который проверяет журнал journalctl на наличие ошибок в сервисе myapp и при обнаружении автоматически перезапускает его.

bash
#!/bin/bash
# check_myapp_errors.sh
LOG="journalctl -u myapp --since '5 minutes ago' | grep -i error"
if [[ -n "$LOG" ]]; then
    echo "Найдены ошибки: $LOG"
    systemctl restart myapp
fi

Сохраните файл в /usr/local/bin/check_myapp_errors.sh, сделайте его исполняемым (chmod +x /usr/local/bin/check_myapp_errors.sh) и создайте systemd‑таймер:

ini
# /etc/systemd/system/check_myapp_errors.timer
[Unit]
Description=Проверка ошибок myapp каждые 5 минут

[Timer]
OnCalendar=*:0/5
Persistent=true

[Install]
WantedBy=timers.target
ini
# /etc/systemd/system/check_myapp_errors.service
[Unit]
Description=Скрипт проверки и перезапуска myapp

[Service]
Type=oneshot
ExecStart=/usr/local/bin/check_myapp_errors.sh

После размещения файлов выполните systemctl daemon-reload && systemctl enable --now check_myapp_errors.timer. Теперь проверка будет запускаться автоматически, а при необходимости вы сможете увидеть результат в журнале journalctl -u check_myapp_errors.service.

Для более сложных сценариев, когда нужно генерировать шаблоны кода, удобно подключить Claude‑Code. В статье Ponytail: как заставить AI‑агента писать меньше кода описаны приёмы, позволяющие заставить агент писать только необходимый кусок кода, а не весь файл «с нуля». Это уменьшает количество ручных правок и повышает предсказуемость результата.

### Минимизация количества кода

Сокращение количества кода – это не просто «меньше строк», а применение более высокоуровневых инструментов, которые делают большую часть работы за вас.

Например, вместо того чтобы писать отдельные скрипты для развёртывания Docker‑контейнеров, используйте Docker Compose. Один файл описывает всю стек‑инфраструктуру, а docker compose up поднимает всё за один момент. Ниже минимальный пример docker-compose.yml для микросервисов, где каждый сервис имеет отдельный контейнер, но общие сети и volumes заданы один раз.

yaml
version: "3.9"
services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
    depends_on:
      - api

  api:
    build: ./api
    environment:
      - DB_HOST=db
    volumes:
      - ./api/logs:/app/logs
    depends_on:
      - db

  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydb
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

Такой подход уменьшает количество файлов‑скриптов, упрощает воспроизводимость среды и повышает предсказуемость развёртывания.

Если сравнить с ручным запуском контейнеров через docker run, то видно, что в docker‑compose.yml уже заданы зависимости, сети и общие параметры, а в команде docker compose up -d вы получаете всю инфраструктуру в один шаг. Это особенно удобно в кластере Proxmox, где каждый нод может запускать одинаковый набор сервисов без дополнительных скриптов.

Ещё один пример – использование Ansible только для конфигурационных задач, а не для полного деплоя. Вместо того, чтобы писать playbook, который устанавливает пакеты, копирует файлы и запускает сервисы, достаточно одного playbook, который применяет готовый конфиг:

yaml
- name: Применить конфиг Nginx
  copy:
    src: files/nginx.conf
    dest: /etc/nginx/conf.d/default.conf
  notify: Перезапустить nginx

# handlers
- name: Перезапустить nginx
  systemd:
    name: nginx
    state: restarted

Здесь Ansible отвечает лишь за передачу файла, а перезапуск сервиса делается через systemd, что делает процесс более предсказуемым и упрощает отладку.

В итоге, автоматизация рутинных задач и минимизация количества кода – это комбинация системных инструментов (systemd, Docker Compose) и целенаправленного применения AI‑агентов, которые генерируют только то, что действительно нужно. Такой подход обеспечивает предсказуемость, уменьшает количество «колес», а в долгосрочной перспективе повышает надёжность продакшн‑среды.

Инструменты и подходы

Docker Compose как IKEA для микросервисов

Во-первых, Docker Compose позволяет собрать несколько контейнеров в один логический набор, как мебель из IKEA собирается из отдельных деталей. Это удобно, когда нужно запустить веб‑сервис, API и базу данных в одном стеке без ручной конфигурации каждого контейнера.

Пример docker-compose.yml для небольшого микросервисного проекта:

yaml
version: "3.8"

services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./web:/usr/share/nginx/html:ro
    depends_on:
      - api

  api:
    build: ./api
    environment:
      - DATABASE_URL=postgres://user:password@db:5432/app
    depends_on:
      - db

  db:
    image: postgres:15-alpine
    restart: unless-stopped
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

Команда docker compose up -d поднимает весь стек в фоне, а docker compose down останавливает и удаляет контейнеры. За счёт указанных зависимостей (depends_on) порядок запуска сервисов становится предсказуемым, что упрощает поддержку в продакшн‑среде.

Если требуется хранить данные на домашнем сервере, можно смонтировать NFS‑share или TrueNAS‑пул вместо локального тома:

yaml
    volumes:
      - /mnt/nfs/app_data:/var/lib/postgresql/data

Такой подход позволяет использовать уже существующие хранилища без дополнительного кода.

Ponytail: как заставить AI-агента писать меньше кода описывает, как автоматизировать генерацию файлов‑конфигураций, что уменьшает количество «ручных» действий при развёртывании стека.

Ansible для одноразовой настройки

Во-вторых, Ansible подходит для одноразовой настройки хоста, когда нужно установить пакеты, открыть порты и запустить готовый compose‑файл. Это избавляет от необходимости вручную выполнять команды на каждом сервере.

Минимальный инвентарь inventory.ini:

ini
[servers]
home-lab ansible_user=alexey ansible_ssh_private_key_file=~/.ssh/id_rsa

Playbook setup.yml:

yaml
---
- name: Подготовка хоста для Docker‑Compose
  hosts: servers
  become: true
  tasks:
    - name: Установить Docker CE
      apt:
        name:
          - ca-certificates
          - curl
          - gnupg
          - lsb-release
        state: present
        update_cache: yes

    - name: Добавить официальный репозиторий Docker
      apt_key:
        url: https://download.docker.com/linux/ubuntu/gpg
        state: present

    - name: Добавить репозиторий Docker
      apt_repository:
        repo: "deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable"
        state: present

    - name: Установить Docker Engine
      apt:
        name: docker-ce
        state: present

    - name: Запустить и включить Docker
      systemd:
        name: docker
        state: started
        enabled: yes

    - name: Скопировать docker‑compose.yml на хост
      copy:
        src: docker-compose.yml
        dest: /home/alexey/docker-compose.yml
        mode: '0644'

    - name: Запустить стек Docker Compose
      command: docker compose -f /home/alexey/docker-compose.yml up -d
      args:
        chdir: /home/alexey

Запуск playbook:

bash
ansible-playbook -i inventory.ini setup.yml

После выполнения playbook на выбранном домашнем сервере будет установлен Docker, скопирован файл docker-compose.yml и запущен весь стек. Всё происходит автоматически, без необходимости вручную вводить команды.

affaan-m/ECC: Agent Harness Performance Optimization показывает, как использовать Ansible в сочетании с другими инструментами для автоматизации развёртывания агентов, что может быть полезно в более крупных инфраструктурах.

Ultraworkers/claw-code: агент‑управляемый музейный экспонат демонстрирует, как один и тот же скрипт может генерировать конфиги для разных сервисов, что типично для Ansible‑playbook‑ов, где tasks повторяются в разных окружениях.

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

Практические примеры

CI/CD пайплайн с Claude‑Code Plugin

Во-первых, Claude‑Code Plugin позволяет генерировать конфиги и скрипты прямо в процессе CI, не требуя ручного ввода. Это уменьшает количество шагов и убирает риск опечаток.

В качестве примера возьмём GitHub Actions workflow, который после checkout‑а запускает плагин и использует его для создания Docker‑файла для микросервиса.

yaml
name: AI‑agent CI

on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install Claude‑Code plugin
        run: |
          curl -L https://github.com/Ultraworkers/claw-code/releases/latest/download/claw-code-linux-x86_64.tar.gz | tar xz
          sudo mv claw-code /usr/local/bin/
          claw-code --version

      - name: Generate Dockerfile with Claude‑Code
        run: |
          claw-code --prompt "Сгенерируй Dockerfile для Node.js‑приложения, использующего Alpine, и добавь в него шаг установки зависимостей" > Dockerfile

      - name: Build image
        run: docker build -t my-app:latest .

Здесь claw-code получает инструкцию в виде prompt и возвращает готовый Dockerfile.

Для более детального описания возможностей плагина см. Ponytail: как заставить AI‑агента писать меньше кода.

Если интересует интеграция с другими CI‑системами, см. affaan-m/ECC: Agent Harness Performance Optimization.


Автоматический бэкап и деплой через systemd

Справедливо, ручной бэкап и деплой в продакшн‑окружении быстро приводят к простою. Автоматизация через systemd позволяет выполнять задачи по расписанию и реагировать на срабатывание алертов.

Скрипт бэкапа

bash
#!/usr/bin/env bash
set -euo pipefail

# Каталог для хранения архивов
BACKUP_ROOT="/backup"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="${BACKUP_ROOT}/${TIMESTAMP}"
mkdir -p "${BACKUP_DIR}"

# Архивируем данные веб‑приложения (пример для /var/www)
tar -czf "${BACKUP_DIR}.tar.gz" -C /var/www .

# Копируем архив на резервный сервер (ssh‑ключ без пароля)
rsync -avz "${BACKUP_DIR}.tar.gz" user@backup-server:/backups/

Сделайте файл исполняемым: chmod +x /usr/local/bin/backup.sh.

systemd‑service для бэкапа

ini
[Unit]
Description=Ежедневный бэкап веб‑данных
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh

systemd‑timer для запуска каждый день в 02:00

ini
[Unit]
Description=Запуск бэкапа ежедневно в 02:00

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true

[Install]
WantedBy=timers.target

Отключение и включение таймера:

bash
sudo systemctl enable --now backup.timer

systemd‑service для деплоя

ini
[Unit]
Description=Деплой из последнего бэкапа
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/deploy.sh

Скрипт деплоя

bash
#!/usr/bin/env bash
set -euo pipefail

# Последний бэкап в каталоге /backups
LATEST_BACKUP=$(ls -t /backups/*.tar.gz | head -n1)

# Распаковка в целевую директорию
mkdir -p /var/www/new_deploy
tar -xzf "${LATEST_BACKUP}" -C /var/www/new_deploy

# Переключаем симlink, если используете blue‑green деплой
ln -sfn /var/www/new_deploy /var/www/current

# Перезапуск сервисов (пример для systemd‑службы nginx)
systemctl reload nginx

Сделайте файл исполняемым: chmod +x /usr/local/bin/deploy.sh.

Связанные материалы, где описаны подходы к оптимизации агентов и их производительности, можно посмотреть в Оптимизация ИИ‑агентов с помощью системы ECC и Разработка Claw‑Code на Rust с помощью AI‑агентов.

Таким образом, комбинация Claude‑Code Plugin в CI/CD и systemd‑таймеры для бэкапов/деплоя обеспечивает предсказуемость и снижает нагрузку на команду, позволяя сосредоточиться на более важных задачах.

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

Можно ли полностью заменить разработчика AI-агентом

Нет, AI-агент — это инструмент для повышения личной эффективности, а не замена инженеру. С практической точки зрения он хорошо справляется с генерацией шаблонного кода или написанием unit-тестов, но не способен на проектирование архитектуры и принятие ответственности за стабильность системы. Предсказуемость работы инфраструктуры по-прежнему зависит от человека, который понимает причинно-следственные связи.

Не станет ли автоматизация причиной каскадных сбоев

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

Как безопасно использовать AI-агентов в работе с продакшн-кодом

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

Какие инструменты лучше всего подходят для автоматизации рутины

Выбор зависит от масштаба задачи: для простых периодических проверок идеально подходят systemd-таймеры, так как они нативно встроены в Linux и не требуют лишних зависимостей. Для управления конфигурациями на нескольких серверах стоит использовать Ansible, а для работы с кодом и генерации шаблонов — специализированные инструменты вроде Claude-Code. Важно выбирать те решения, которые позволяют легко прочитать и отладить логи.

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

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