Курс Vercel Academy: собираем harness для AI-кодинг-агента с нуля
Курс Vercel Academy: собираем harness для AI-кодинг-агента с нуля
Tool loop с тремя инструментами — это демо. Проблемы начинаются, когда вы пытаетесь работать по-настоящему. Агент читает файл на 5 000 строк — и тот остаётся в контексте навсегда. Вы даёте ему bash — и он запускает rm -rf. Просите отрефакторить модуль — он объясняет, как надо рефакторить модуль. Одна длинная задача забивает контекстное окно, и агент теряет собственные инструкции, а облачная песочница капает деньгами за каждую минуту и исчезает по таймауту.
Harness — это название системы вокруг агента, которая решает все перечисленные проблемы. Новый курс Vercel Academy «Build Your Own AI Coding Agent Harness» (38 уроков) строит такую систему с нуля: рабочий агент TeensyCode с компактным ядром на TypeScript, настоящим набором инструментов и несколькими бэкендами песочницы. Агент, который вы понимаете полностью, — потому что собрали каждую деталь сами.
Как устроен курс: каузальная последовательность
Ключевой принцип курса: каждый шаг существует потому, что предыдущий шаг что-то сломал. Шаг 1 добавляет инструмент read, потому что чат-бот не видит файлы. Шаг 2 добавляет grep, потому что агент не умеет искать. Шаг 3 добавляет bash — и теперь он может запустить rm -rf, поэтому появляются safety gates. Каждый урок подсвечивает одну концепцию, остальное остаётся рабочим.
Модули 1–6 — сборка руками: пишете код, запускаете, проверяете. Модуль 7 — концепции и анализ (durable workflows и state machines небезопасно демонстрировать локально). Модули 8–11 сочетают практику с анализом.
Что именно вы соберёте
- Цикл:
ToolLoopAgentс инструментамиread,grep,write,edit,bash,taskиaskUser - Safety gates: allowlist безопасных команд на уровне исполнения, эволюционирующий в настраиваемые approval-режимы — interactive, background, delegated
- Поведенческие промпты: структурированный системный промпт с секциями Agency, Guardrails и Handling Ambiguity, плюс инъекция
AGENTS.mdдля конфигурации под конкретный проект - Абстракция песочницы: один интерфейс
Sandbox, три реализации — локальная (Node fs + child_process), in-memory (just-bash с copy-on-write виртуальной файловой системой) и облачная (Vercel Sandbox). Меняете бэкенд — инструменты не меняются - Управление контекстом:
pruneMessages, ограничение объёма вывода инструментов и cache control, чтобы длинные сессии оставались рабочими и дешёвыми - Делегирование субагентам: роли Explorer (read-only, дешёвая модель, ограниченное блуждание) и Executor (полный набор инструментов, сильная модель, делегированное доверие) с изолированным контекстом
- Human-in-the-loop:
askUserс вариантами ответа и протоколом неоднозначности: сначала поиск, потом вопросы, потом действие - Жизненный цикл песочницы: мышление в терминах state machine, snapshot и restore, durable workflows
- Расширяемость: event bus, skills с progressive disclosure, регистрация кастомных инструментов без форка
Одиннадцать модулей
Модули 1–3: цикл, инструменты, промпт. Сборка ToolLoopAgent от нуля инструментов (чат-бот) до полного набора с safety gates. Описания инструментов эволюционируют в пяти-секционный контракт: WHEN TO USE, WHEN NOT TO USE, DO NOT USE FOR, EXAMPLES. Системный промпт собирается динамически через buildSystemPrompt(), добавляет verification gates (typecheck, lint, test, build) и читает AGENTS.md из проекта.
Модуль 4: абстракция песочницы. Один интерфейс, три реализации. Инструменты вызывают sandbox.exec(), а не child_process.exec() напрямую. Отдельный урок про lifecycle hooks: afterStart, beforeStop, onTimeout.
Модуль 5: управление контекстом. Каждый вызов инструмента остаётся в контексте навсегда — логирование токенов показывает линейный рост. Решения: pruneMessages для устаревших результатов, лимиты на вывод каждого инструмента (профилактика вместо уборки) и cache control через заголовки провайдера.
Модуль 6: субагенты. Родитель планирует, субагенты исполняют. Изолированный контекст, ограниченные инструменты, модель подбирается под роль.
Модуль 7: жизненный цикл песочницы. Облачные песочницы стоят денег и истекают по таймауту. Концепции: переходы состояний и трекинг активности, snapshot и restore с опасностями идемпотентности, durable workflows на Vercel Workflow с sleep(), плюс производственные грабли.
Модули 8–9: human-in-the-loop и верификация. Агенты, которые угадывают неправильно, тратят больше времени, чем агенты, которые спрашивают. Структурированные вопросы с мультивыбором, конфигурация approvals. Инструмент todo для декомпозиции задач, правило «сначала grep, читай только то, что будешь менять» и контракт верификации с ограниченными утверждениями.
Модуль 10: поверхности. Агент — headless. CLI, TUI и веб — это стратегии рендеринга одного и того же агента: аргументы командной строки и чистое завершение, стриминг текста с отображением вызовов инструментов, веб-интерфейс как ещё один рендерер.
Модуль 11: расширяемость. События вместо наследования. Skills как progressive disclosure: имена в промпте, полное содержимое по запросу. Кастомные инструменты регистрируются без форка и компонуются из существующих.
Технологический стек
| Компонент | Назначение |
|---|---|
| AI SDK | ToolLoopAgent, tool(), stepCountIs, pruneMessages, стриминг |
| AI Gateway | Роутинг моделей: "anthropic/claude-haiku-4-5" как строка, без обёрток |
| Vercel Sandbox | Удалённая VM с изолированной файловой системой, git и npm |
| just-bash | In-memory виртуальная файловая система и симуляция bash |
| Vercel Workflow | Durable workflows для жизненного цикла песочницы |
| Zod v3 | Схемы входных данных инструментов (v4 ломает типы AI SDK v6) |
Капстоун
Финал курса — запуск собранного harness против реального проекта. Не «добавь hello world endpoint», а «добавь rate limiting в auth-роуты». Задача — наблюдать, где переполняется контекст, где агент выбирает не тот инструмент, где субагент получает плохие инструкции. И чинить то, что ломается.
Кому подходит
Нужны: TypeScript, async/await, базовый опыт с терминалом, Node.js 20+ или Bun и переменная окружения AI_GATEWAY_API_KEY. Рекомендуется предварительно пройти курс Building Filesystem Agents — он даёт фундамент, на который опирается этот курс.
Курс бесплатный и не требует установки чего-либо сверх перечисленного. Если вы уже читали наш разбор концепции harness по Databricks или материал про harness-инженерию OpenAI, этот курс — практическое продолжение темы: не что такое harness, а как его построить своими руками.
Начать курс: vercel.com/academy/build-ai-agent-harness