Agent-Native 软件设计范式
学习目标
- 理解 Agent-Software Gap 的本质与 CLI 作为解决方案的优势
- 掌握”中间文件 + 真实后端”的核心架构模式
- 识别 Rendering Gap 问题并应用 Filter Translation 三层策略
- 了解 7 阶段分析-生成流水线如何自动化软件转化过程
前置知识
本章涉及 Agent-Native 软件设计的通用原理,建议先阅读:
下文假设你已理解上述概念,直接聚焦 CLI-Anything 的具体实现。
项目实践
问题驱动:为什么需要 Agent-Native 软件
CLI-Anything 的 README 开篇点明核心洞察:
Today’s Software Serves Humans. Tomorrow’s Users will be Agents.
当前 AI Agent 面临的困境:它们擅长推理和规划,但无法直接使用 GIMP、Blender、LibreOffice 等专业软件。现有解决方案要么脆弱(GUI 截图 + 像素点击),要么残缺(轻量重实现丢失 90% 功能)。
CLI-Anything 的解法:用 CLI 作为通用接口,让 Agent 通过结构化命令操控真实软件。
7 阶段自动流水线
CLI-Anything 通过一个 7 阶段的自动流水线,将任意软件源码转化为 Agent-Native CLI:
每个阶段由 AI Agent 阅读 HARNESS.md(方法论 SOP)自主执行,而非编写生成器脚本。这是一个方法论编码(Methodology-as-Code)的实践——将设计决策和工程标准写入文档,让 Agent 阅读并执行。
HARNESS.md:单一事实源
HARNESS.md 是整个项目的核心文档,扮演三重角色:
- 人类的设计手册:记录了从 18+ 真实 Harness 中提炼的架构模式和陷阱
- Agent 的执行指南:每个 Phase 的步骤、输入输出、质量标准
- 质量门禁:定义了”不可协商”的原则与规则
关键章节包括:
- General SOP:Phase 1-7 的标准操作流程
- Architecture Patterns & Pitfalls:Rendering Gap、Filter Translation、Timecode Precision 等
- Principles & Rules:不可违反的硬性规则
- Guides Reference:可拆分的子文档索引
核心原则:接口 TO 软件,而非替代软件
HARNESS.md 的 “#1 规则”:CLI 必须调用真实软件进行渲染和导出,不能重实现软件功能。
反模式:用 Pillow 构建图片合成器替代 GIMP,或生成 bpy 脚本但从不调用 Blender。
正确模式:
以 LibreOffice 为例(源码验证 gimp/agent-harness/ 结构类似):
- CLI 生成合法的 ODF 文件(ZIP 结构,内含 XML 内容)
- 通过
subprocess.run(["libreoffice", "--headless", "--convert-to", "pdf", odf_path])调用真实 LibreOffice - 验证输出 PDF 以
%PDF-魔数开头
为什么是硬依赖:CLI 离开真实软件毫无用处。测试在软件缺失时必须失败而非跳过。
Rendering Gap 与 Filter Translation
这是 HARNESS.md 中的 “#2 陷阱”。视频编辑 CLI 向 MLT XML 添加了滤镜效果,但用简单工具导出时效果被静默丢弃。
CLI-Anything 定义的三层优先级策略:
| 优先级 | 方案 | 适用场景 |
|---|---|---|
| 1 | 使用原生渲染器(melt / blender —background) | 软件提供 CLI 渲染接口 |
| 2 | Filter Translation(MLT → ffmpeg filter_complex) | 原生渲染器不可用但可翻译 |
| 3 | 生成手动渲染脚本 | 无法翻译的最后手段 |
Shotcut 和 Kdenlive 的 Harness 展示了这一策略的完整实现——先尝试用 melt 原生渲染,fallback 时翻译 MLT 滤镜为 ffmpeg 参数。
真实软件覆盖
CLI-Anything 已为 40+ 软件生成了 Agent-Native CLI,涵盖:
| 领域 | 代表软件 | 后端调用方式 |
|---|---|---|
| 图像编辑 | GIMP | Script-Fu / GEGL |
| 3D 建模 | Blender | bpy Python 脚本 |
| 矢量图形 | Inkscape | --actions CLI |
| 办公套件 | LibreOffice | --headless 转换 |
| 视频编辑 | Shotcut/Kdenlive | melt 渲染 |
| 音频处理 | Audacity | sox 命令链 |
| 直播 | OBS Studio | obs-websocket 协议 |
| 浏览器 | Browser | DOMShell MCP |
2330 项测试 100% 通过率验证了这一架构的有效性。
问题与规避
| 问题 | 规避策略 |
|---|---|
| 重实现诱惑:Python 库看似能替代后端 | 坚持 HARNESS.md 原则——真实软件是硬依赖,测试缺失时必须失败 |
| 渲染效果静默丢失 | 实现 Filter Translation Layer,每个滤镜必须有对应的渲染映射或明确标注”仅项目” |
| 软件未安装时错误不清晰 | find_<software>() 函数抛出 RuntimeError,附带安装指令 |
| 输出文件存在但内容无效 | 程序化验证:魔数、ZIP 结构、像素分析、音频 RMS |
设计取舍
为什么让 Agent 阅读 HARNESS.md 而非编写生成器脚本
选择:HARNESS.md 是文档,Agent 阅读后自主生成代码。
原因:
- 生成器脚本需要覆盖所有软件的边界情况,维护成本高
- Agent 可以根据每个软件的具体源码做出适应性决策
- HARNESS.md 是”模式库”而非”模板引擎”——Agent 理解模式后灵活应用
- 当新模式出现时,更新 HARNESS.md 即可,无需改代码
代价:依赖前沿模型的理解能力。较弱的模型可能产生不完整的 CLI。
7 阶段 vs 更少阶段
选择:将测试计划(Phase 4)放在测试编写(Phase 5)之前。
原因:先写测试计划确保覆盖完整性,避免写完代码后补充测试时遗漏边界情况。这与 TDD(Test-Driven Development)精神一致——先定义”什么算成功”,再实现。
参考来源
- CLI-Anything HARNESS.md — 7 阶段 SOP 和架构模式
- CLI-Anything README — 项目定位和覆盖的软件列表
- 源码验证:
HARNESS.mdPhase 1-3 + Architecture Patterns 章节