Flue — программируемый TypeScript-харнесс для автономных агентов от команды Astro
📂 Исходный код на GitHubThe Agent Harness Framework. Программируемый TypeScript-харнесс для сборки автономных агентов: агенты как функции, встроенные песочницы, скиллы, инструменты и MCP. Деплой на Node.js, Cloudflare Workers, GitHub Actions и GitLab CI/CD. Лицензия Apache-2.0.
Flue — опенсорсный фреймворк-харнесс для построения автономных ИИ-агентов, разработанный командой, стоящей за Astro. Проект распространяется под лицензией Apache-2.0 и позиционируется как «не очередной SDK», а программируемая среда исполнения: агенты здесь собираются как обычные TypeScript-функции, а весь необходимый агентный контекст — модели, песочницы, скиллы, инструменты — подключается декларативно прямо в коде.
Что это такое
Первые агенты строились на «сырых» вызовах LLM API — этого хватало для простых чат-ботов и скриптованных задач, но не более. Прорыв сделали агенты вроде Claude Code и Codex: настоящая автономия, когда ты даёшь задачу, а не предопределённую последовательность шагов, и доверяешь агенту выполнить её с помощью переданных контекста и инструментов.
Flue переносит эту архитектуру в TypeScript-экосистему. Встроенный харнесс даёт любой модели всё необходимое для по-настоящему автономной работы: сессии, инструменты, скиллы, инструкции, доступ к файловой системе и безопасную песочницу для исполнения. Агентов можно запускать локально через CLI или деплоить на любой хостинг-рантайм.
Ключевая идея демонстрируется прямо в README репозитория — минимальный агент:
// agents/triage.ts
'use agent';
import { useModel, useSandbox, useSkill, useTool } from '@flue/runtime';
import { local } from '@flue/runtime/node';
import triage from '../skills/triage/SKILL.md';
import verify from '../skills/verify/SKILL.md';
import { openIssue, searchCode } from '../tools/github.ts';
// The agent IS the function. Compose the complete harness it needs to do
// real work, complete with virtual, local, or remote container sandbox.
export function Triage() {
useModel('anthropic/claude-sonnet-4-6');
useSandbox(local());
useSkill(triage);
useSkill(verify);
useTool(openIssue);
useTool(searchCode);
// Give agents the context and autonomy to solve complex tasks:
return `
Triage a bug report end-to-end: reproduce the bug,
diagnose the root cause, verify whether the behavior is
intentional, and attempt a fix.
...`;
}
Здесь хорошо видна главная метафора фреймворка: агент — это функция. Ты не конфигурируешь агента в отдельном YAML и не регистрируешь его в рантайме — ты объявляешь функцию Triage(), которая внутри себя через декларативные хелперы (useModel, useSandbox, useSkill, useTool) собирает полный харнесс, необходимый для реальной работы.
Возможности
Flue решает три задачи: агент должен безопасно действовать, сохранять непрерывность работы и подключаться к системам, где уже происходит работа.
- Agents — агенты, которые держат контекст между разговорами и событиями, автономно работая над целью
- Sandboxes — безопасная среда, где агент может использовать инструменты, изменять файлы и выполнять реальную работу
- Durability — сохранение прогресса при сбоях и перезапусках: надёжное восстановление после принятой работы
- Subagents — специализированные роли для разных задач и делегирование работы нужному эксперту
- Tools — типизированные действия для вызова API, запросов к данным и контролируемых изменений
- Skills — переиспользуемые экспертизы и рабочие процессы, которые агент подгружает, когда задача требует специальных знаний
- MCP Servers — подключение к аутентифицированным инструментам и сервисам через открытую экосистему Model Context Protocol
- Observability — мониторинг агентов и экспорт телеметрии через OpenTelemetry, Braintrust, Sentry или собственный наблюдатель
- Channels — приём проверенных событий из Slack, Teams, Discord, GitHub и других систем
Деплой в любом месте
Харнесс не привязан к одному окружению. Официально поддерживаются:
- Node.js
- Cloudflare Workers
- GitHub Actions
- GitLab CI/CD
- Daytona — как провайдер песочниц
- Render
Состав пакетов
Проект организован как монорепозиторий с разделёнными пакетами, каждый из которых отвечает за свой слой:
| Пакет | Описание |
|---|---|
@flue/runtime |
Рантайм: харнесс, сессии, инструменты, песочница |
@flue/vite |
Vite-плагин: vite dev / vite build для Node и Cloudflare |
@flue/cli |
CLI (бинарник flue): локальные запуски, блюпринты, офлайн-документация |
@flue/sdk |
Клиентский SDK для потребления задеплоенных агентных диалогов |
@flue/opentelemetry |
Адаптер трейсинга OpenTelemetry |
@flue/postgres |
Адаптер персистентности на Postgres |
Почему это интересно
Flue — представитель нового поколения агентных харнессов. Вместо монолитного агента с захардкоженным поведением ты собираешь агента из композируемых примитивов: модель, песочница, скиллы и инструменты — это обычные значения в обычной TypeScript-функции. Такой подход даёт несколько практических преимуществ:
- Типизация и проверка на этапе компиляции — модель, инструменты и скиллы подключаются как типизированные сущности, а не строки конфигурации
- Песочницы как первоклассный примитив — локальная, виртуальная или удалённая контейнерная среда выбирается одной строкой
- Экосистема MCP из коробки — доступ к огромному числу уже существующих инструментов и сервисов
- Кроссплатформенный деплой — от локального CLI до Cloudflare Workers и CI-пайплайнов
Проект активно развивается командой Astro (свыше 8 тысяч звёзд на GitHub, почти 500 форков) и поставляется с готовыми блюпринтами и примерами в репозитории. Для команд, строящих собственных автономных агентов на TypeScript, Flue — это готовый фундамент, который избавляет от необходимости изобретать харнесс с нуля.
Источник: https://github.com/withastro/flue