Flue 是 Astro 团队开源的 Agent Harness 框架,基于 TypeScript。
核心思路:Agent = Model + Harness
Flue 强调架构才是让 Claude Code 和 Codex 变得强大的原因。它们可以规划、收集上下文、读写文件、生成子 Agent、承担角色、解决问题。这些 Agent 不只是聊天机器人。
为什么不是每个 Agent 都这样构建?
Flue 的答案是:提供一个可编程的 TypeScript Harness,让任何人都能构建这种级别的 Agent。
架构分层
04 / Filesystem read · write · grep · glob
03 / Sandbox bash · security · network
02 / Harness skills · memory · sessions
01 / Model tokens · tools · prompts
- Model:Token、工具、Prompts
- Harness:Skills、Memory、Sessions(记忆和会话管理)
- Sandbox:Bash、安全、网络控制
- Filesystem:读写、grep、glob
快速上手
安装超级简单:
npx fetch flueframework.com/start.md to create a new agent
一个 AI issue triage Agent 只要 22 行 TypeScript:
import type { FlueContext } from '@flue/sdk/client';
import { Octokit } from '@octokit/core';
import * as v from 'valibot';
export const triggers = {};
export default async function ({ init, payload, env }: FlueContext) {
const { issueNumber } = payload;
const agent = await init({ model: 'anthropic/claude-opus-4-7' });
const session = await agent.session();
const triage = await session.skill('triage', {
args: { issueNumber },
result: v.object({
severity: v.picklist(['low', 'medium', 'high', 'critical']),
reproducible: v.boolean(),
summary: v.string(),
}),
});
const body = `**Severity:** ${triage.severity}\n**Reproducible:** ${triage.reproducible}\n\n${triage.summary}`;
await (new Octokit({ auth: env.GITHUB_TOKEN })).request(
'POST /repos/{owner}/{repo}/issues/{num}/comments',
{ owner: 'withastro', repo: 'flue', num: issueNumber, body },
);
}
可连接多种 Sandbox
内置虚拟 Sandbox:零配置,直接用
Daytona:真实容器,适合编码 Agent
Cloudflare Workers + R2:知识库查询,容器都不需要启动
部署到任何地方
- Node.js
- Cloudflare Workers
- GitHub Actions
- GitLab CI/CD
- Daytona
- Render
谁在做
Astro 团队。GitHub: withastro/flue
核心价值:别租别人的 Agent。自己拥有整个技术栈:Agent、Harness、Sandbox。