第 14 章 · CLI 与本地运行
本章目标:掌握
flue命令行工具的核心用法——本地运行 agent、用 blueprints 脚手架生成项目、离线查阅文档。
14.1 安装与命令总览
CLI 由 @flue/cli 包提供。它不是构建工具——本地开发与生产构建由 Vite 负责(vite dev / vite build),CLI 只负责脚手架、单次运行、blueprint 与离线文档:
# 项目内安装(推荐,flue init 会把它写成 devDependency)
npm install @flue/runtime @flue/cli
npx flue --helpflue <command>
Commands:
flue init [dir] 脚手架创建 Flue 项目(交互式选择 target 与部署方式)
flue run <path> 本地直跑一个 agent 模块:提交一条消息、流式输出、打印回复
flue add [kind] [name|url] 拉取集成 blueprint 实现指南(供 coding agent 参照实现)
flue update <kind> <name> 为已有集成拉取更新版 blueprint 指南
flue docs [read|search] 离线查阅与当前安装版本一致的文档v2 移除了 dev / build / new / deploy 命令
Flue 2.0 起 flue dev、flue build 由 Vite 接管(vite dev / vite build 配合 @flue/vite 插件);旧的 flue new 并入 flue init 的完整项目脚手架;flue deploy 不再存在(各目标平台见生态部署指南)。flue run 也从"调用已构建服务"改为进程内直接执行 agent 模块。
14.2 本地运行 agent
两条路径对应两种场景:
# ① 开发 HTTP 服务:Vite 承担 dev server 与热更新
npx vite dev # 默认 http://localhost:5173,自动加载 .env
# ② 单次直跑:不启服务、不开端口,提交一条消息并打印回复后退出
npx flue run src/agents/triage.ts --message "分诊仓库里所有带 bug 标签的 issue"// src/agents/echo.ts — 最小的可运行 agent,用来验证环境
'use agent';
import { useModel } from '@flue/runtime';
export function Echo() {
useModel('anthropic/claude-sonnet-4-6');
return '把用户输入原样重复一遍。';
}npx flue run src/agents/echo.ts --message "hello flue"
# stdout 只输出回复;日志走 stderr,管道化安全常用参数(完整清单见 flue run --help):
| 参数 | 作用 |
|---|---|
-m/--message | 必填:本次任务的消息文本 |
--id <conversation-id> | 复用同一会话继续对话(会话按 ID 持久化) |
--name <agentName> | 同一模块导出多个 agent 时选择其一 |
--data '<json>' | 创建数据(需在 agent 上声明 initialData 静态校验) |
--uid / --new | 发送条件:续接指定实例 / 仅允许新建 |
--json | 输出结构化结果信封 |
服务开发用 vite dev
vite dev 由 @flue/vite 插件驱动:解析 'use agent' 文件、提供 HMR 热更新,改完 useModel() 或指令文本保存即生效。.env 由 Vite 标准机制自动加载(shell 导出的值优先)。注意 CLI 与 vite dev 都不会执行 app.ts 里注册的 provider——依赖模块级 setProvider() 时应写在 agent 模块中。
14.3 Blueprints:项目脚手架
Flue 2.0 的脚手架统一由 flue init 完成——一条命令生成完整可跑的项目骨架(含 flue.config.ts、package.json、src/app.ts、.env、示例 agent 等;它只写文件,不装依赖):
# 交互式脚手架(必须显式给 --target,否则在无 TTY 环境会报错)
npx @flue/cli init my-bot --target node # 或 --target cloudflare [--deploy]
cd my-bot && npm install
npx vite dev # 本地服务开发
npx flue run src/agents/hello.ts -m "hi" # 无服务直跑冒烟测试生成的典型目录结构:
my-bot/
├── src/
│ ├── app.ts # 路由入口(必需):挂载 agent 路由
│ ├── agents/ # 'use agent' 函数
│ │ └── hello.ts
│ ├── skills/ # SKILL.md 技能包
│ ├── tools/ # 类型化工具
│ └── channels/ # 入站事件通道
├── flue.config.ts # target: 'node' | 'cloudflare'
├── vite.config.ts # --deploy 时生成
└── package.jsoninit 与 add/update 的分工
flue init 负责新项目骨架;flue add [kind] [name|url] 与 flue update <kind> <name> 则是拉取某个集成(数据库、沙箱、Slack 通道等)的 blueprint 实现指南,交给 coding agent 参照落地——两个命令都不会直接改你的业务代码。不带参数执行 flue add 可列出全部可用 blueprint。
14.4 离线文档
flue docs 把与当前安装版本一致的官方文档装进终端,适合在飞机上或内网环境工作,也避免了网页文档与你安装的版本不同步的问题:
# 列出所有文档页
flue docs
# 搜索某个主题(输出 JSON 结果)
flue docs search "sandbox"
# 打印某一页为 Markdown
flue docs read /docs/guide/sandboxes# CI 里校验 agent 文件能否被正确解析(不真正调用模型)
flue run src/agents/triage.ts --dry-run密钥检查
flue run 首次调用模型前会检查 provider 凭证。缺 key 时会明确报错而不是静默失败: Error: no credentials for provider "anthropic" — set ANTHROPIC_API_KEY
14.5 调试技巧
# 带详细日志运行,观察工具调用与模型回合(日志走 stderr)
npx flue run src/agents/triage.ts --message "分诊 issue #42" --verbose
# 同一模块多个 agent 时指定目标,并以结构化信封输出结果
npx flue run src/agents/tasks.ts --name triage --json
# 复用会话继续对话(第二次能看到第一次的内容)
npx flue run src/agents/triage.ts --id ticket-42 --message "还有遗漏吗?"配合第 13 章的 observer,本地也能看到完整事件流:
// 仅在本地开发时挂载控制台 observer
if (process.env.NODE_ENV === 'development') {
observe((event) => console.log(new Date().toISOString(), event.type));
}14.6 本章小结
- v2 CLI 只有五个命令:
init/run/add/update/docs; - dev 与 build 由 Vite 接管:
vite dev开发热更新、vite build产出dist/server.mjs; flue run进程内直跑单个 agent 模块,stdout 只出回复、日志走 stderr,天然适配 CI;flue docs提供与安装版本一致的离线文档;blueprint 靠add/update拉取实现指南。
🧪 随堂测验
点击你认为正确的选项。答错时会展示正确答案与原因解析。
1. 想要修改代码后立即生效、无需重启进程,应该使用哪个命令?
2. flue new my-bot --blueprint support-agent 会生成什么?
3. 在内网无法访问外网时,如何查阅 Flue 文档?
4. 只想验证 agents/triage.ts 能否被正确解析(不实际调用模型),应该怎么做?
🛠️ 动手实践
- 用
flue init生成一个 support-agent 项目,画出它的目录树并说明每个目录的职责。 - 写一个 echo agent 分别用
vite dev和flue run运行,对比两种方式的适用场景。 - 在断网状态下使用
flue docs --serve查阅 Sandboxes 文档,验证离线能力。