первыйБитБИТ.АГЕНТЫ/туториал

Coding Agents

Глава 12 из 12 — финальная

Агенты, которые пишут код

Coding Agent — это агент, способный автономно писать, тестировать и исправлять код. В отличие от автодополнения (Copilot Tab), coding agent сам планирует архитектуру, создаёт файлы, запускает тесты и итерирует до получения работающего решения.

Claude Code, Cursor Agent, GitHub Copilot Agent Mode — все они работают по одному принципу: цикл Understand → Plan → Code → Test → Iterate.

Цикл кодинг-агента

1

Understand

Понять задачу, извлечь требования

2

Plan

Спроектировать архитектуру

3

Code

Написать и сохранить код

4

Test

Запустить тесты, проверить

5

Iterate

Исправить, если тесты упали

coding-agent.ts
// Цикл кодинг-агента
interface CodingTask {
  spec: string
  language: string
  existingCode?: string
}

interface CodeResult {
  files: Array<{ path: string; content: string }>
  testOutput: string
  passed: boolean
}

class CodingAgent {
  async run(task: CodingTask): Promise<CodeResult> {
    // 1. Understand — понять задачу
    const requirements = await this.analyze(task.spec)
    this.log("understand", requirements)

    // 2. Plan — спланировать решение
    const plan = await this.planImplementation(requirements, task)
    this.log("plan", plan)

    // 3. Code — написать код
    const files = await this.writeCode(plan)
    this.log("code", files)

    // 4. Test — запустить тесты
    const testOutput = await this.runTests(files)
    this.log("test", testOutput)

    // 5. Iterate — исправить ошибки
    if (!testOutput.passed && this.attempts < 3) {
      this.attempts++
      return this.fixAndRetry(task)
    }

    return { files, testOutput, passed: testOutput.passed }
  }

  private async analyze(spec: string) {
    // LLM: извлечь требования из описания
  }

  private async planImplementation(reqs: unknown, task: CodingTask) {
    // LLM: спланировать структуру файлов, API, типы
  }

  private async writeCode(plan: unknown) {
    // LLM + filesystem: написать и сохранить файлы
  }

  private async runTests(files: unknown) {
    // bash: запустить тесты и получить вывод
  }
}

Инструменты кодинг-агента

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

coding-tools.ts
// Инструменты кодинг-агента
const codingTools = [
  // Чтение и запись файлов
  {
    name: "read_file",
    description: "Читает содержимое файла по пути",
    parameters: { path: "string" },
  },
  {
    name: "write_file",
    description: "Записывает содержимое в файл",
    parameters: { path: "string", content: "string" },
  },
  {
    name: "list_files",
    description: "Список файлов в директории",
    parameters: { dir: "string" },
  },
  // Поиск по проекту
  {
    name: "search_code",
    description: "Поиск по тексту в проекте",
    parameters: { query: "string", pattern: "string" },
  },
  // Выполнение команд
  {
    name: "run_terminal",
    description: "Запускает команду в терминале",
    parameters: { command: "string", timeout: "number" },
  },
  // Установка зависимостей
  {
    name: "install_package",
    description: "Устанавливает npm-пакет",
    parameters: { name: "string", type: "string" },
  },
]

Чем кодинг-агент отличается от человека

  • Скорость: может написать и протестировать 10 файлов за минуту
  • Неполнота: часто "забывает" импорты, типы, обработку ошибок
  • Итеративность: без циклов обратной связи генерирует мусор
  • Контекст: не видит проект целиком — нужно подгружать релевантные файлы

Безопасность

Кодинг-агент имеет доступ к файловой системе и терминалу — это мощный, но опасный инструмент. Основные принципы безопасности:

Песочница (Sandbox)

Код пишется в изолированную директорию. Агент не может менять системные файлы или читать конфиденциальные данные за пределами проекта.

Ревью изменений

Каждое изменение показывается пользователю. Человек утверждает diff перед тем, как код попадает в основную ветку.

Whitelist команд

Агент может запускать только разрешённые команды (npm test, eslint, tsc). Никакого rm -rf, curl на внешние серверы, установки левых пакетов.

Таймауты

Каждая операция ограничена по времени. Агент не может "зависнуть" в бесконечном цикле или зависшем процессе.

safety-policy.ts
// Уровни безопасности для кодинг-агента
enum SafetyLevel {
  READ_ONLY,  // Только читать файлы, ничего не менять
  SANDBOX,    // Писать в изолированную директорию
  REVIEW,     // Писать, но каждое изменение требует утверждения
  FULL,       // Полный доступ (только для trusted окружений)
}

interface SafetyPolicy {
  level: SafetyLevel
  allowedCommands: string[]  // whitelist команд bash
  maxTimeout: number         // макс. время выполнения (мс)
  requireReview: boolean     // требовать ревью изменений
  allowedFiles: string[]     // glob-паттерны разрешённых файлов
}

const codingAgentPolicy: SafetyPolicy = {
  level: SafetyLevel.REVIEW,
  allowedCommands: [
    "npm test",
    "npx eslint",
    "npx tsc --noEmit",
    "node",
    "python3",
  ],
  maxTimeout: 30_000,
  requireReview: true,
  allowedFiles: ["src/**/*.ts", "src/**/*.tsx", "*.json", "*.md"],
}

Демо: цикл кодинг-агента

Выберите задачу — агент пройдёт полный цикл от анализа до тестов. Обратите внимание: на задаче с CSV агент найдёт ошибку и исправит её через итерацию:

Coding Agents vs Copilot

ХарактеристикаCopilot (Tab)Coding Agent
Что делаетДополняет текущую строкуПишет целые файлы и тесты
КонтекстТекущий файл + открытые вкладкиЧитает проект, ищет нужные файлы
ТестированиеНе запускает тестыЗапускает и итерирует по результатам
ИнструментыТолько генерация текстаФайловая система, терминал, поиск
БезопасностьНе требует — не изменяет файлыSandbox, whitelist, ревью

Что дальше?

Туториал пройден. Вы узнали полный спектр: от определения агента до протоколов взаимодействия и кодинг-агентов. Дальше можно:

Собрать своего агента

Возьмите за основу код из глав 5–8 и добавьте собственные инструменты (база данных, Slack, Telegram).

Попробовать MCP

Подключите готовые MCP-серверы (filesystem, github, postgres) к своему агенту через официальный TypeScript SDK.

Изучить кодинг-агента

Запустите Claude Code или Cursor Agent в своём проекте — увидите реальный цикл Understand → Plan → Code → Test в действии.

Пофиксить баги

В репозитории есть BACKLOG.md — замечания из код-ревью. Отличная практика для первого PR.