Курс Vercel Academy: собираем harness для AI-кодинг-агента с нуля

· 2 мин чтения
ai-agents harness typescript vercel tutorial
Курс 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

Источник: https://vercel.com/academy/build-ai-agent-harness