夜雨聆风学习资料网

ARTICLE · 996133

AI Agent 写企业软件,为什么也需要一套开发者工具链?

AI Agent 写企业软件,为什么也需要一套开发者工具链?

 ObjectStack 的 Agent Skills、AGENTS.md、MCP 到 Validation,看 AI 编程为什么正在从 Prompt 驱动走向 Skill + Protocol + Runtime

适合阅读:架构师 / CTO / 平台工程 / SaaS 创业者 / AI 应用开发者 / Agent 工程师

当你打开 Claude Code 或 Gemini CLI,对它说:帮我创建一个 CRM 的 Opportunity(机会)对象,加上金额字段、销售阶段,再加一个『批准』的 Action,最后生成一个对应的列表视图。

一个足够强的模型,可能很快就写出了一堆东西。但真正的问题,恰恰在这之后冒出来:

· 这个 Object 应该放在哪个目录?

· Metadata 该遵循什么 Schema?

· Action 到底怎么定义才合法?

· 哪些字段必须声明类型?

· View 怎么正确引用 Object?

· 哪些 Action 可以暴露给 Agent,哪些不行?

· 改完之后,怎么验证对不对?

· 怎么启动 Runtime、怎么 Preview?

· 改错了,怎么定位问题?

· 哪些文件是绝对不能碰的?

注意:这些问题,没有一个是模型会不会写代码的问题。模型很会写。这些问题问的是另一件事——模型有没有一个好的开发环境,让它知道在这个具体的项目里,该怎么正确地工作。

Agent 开发软件的核心矛盾,正在从代码生成,转向开发环境。会写代码,只是入场券;能在一个特定的软件体系里正确地写,才是真本事。

如果 AI Agent 开始像开发者一样构建软件,那软件是不是也该为它,准备一套专门的开发者体验?

一、一个通用 Coding Agent,不一定真的懂你的企业软件

先说明 Claude Code、Cursor、Gemini、Copilot 它们的通用编程能力,非常强,这一点毫无疑问。

但通用编程能力强和懂你的企业软件该怎么定义,是两码事。通用模型理解的是怎么写 TypeScript、Python、React,它不一定理解你的企业软件,应该如何定义一个业务对象。

举个例子。写一个普通的 TypeScript 类:

class Customer {}

这在通用编程里,完全合法。但在一个特定的企业软件体系里(比如 ObjectStack),一个Customer可能需要遵循某种特定的元数据 Schema,可能还需要有字段、关系、标签、权限、视图、动作、校验——一整套东西。通用模型未必知道这些约定。

会编程和会在一个特定软件体系里正确编程,是两回事。

那人类开发者是怎么解决这个问题的?靠一整套环境:README、架构文档、编码规范、IDE、CLI、类型系统、框架、测试、文档。一个新人进项目,正是靠这些东西,才慢慢学会在这个项目里该怎么写。

AI Agent 也一样。你不能指望它天生就懂你的项目——它也需要一套类似的环境,告诉它这个项目的规矩、工具和边界。

二、AGENTS.md:给 Agent 的项目说明书

从这里,我们开始看 ObjectStack 仓库里那些真实存在的东西。第一个,是 AGENTS.md。

传统项目里,写给开发者的文档是这些:README、架构文档、编码规范。它们的读者,默认是人类开发者。

而现在,项目里可能开始需要多一份东西:

README.md → 写给人类开发者

+

AGENTS.md → 写给 AI 开发者

根据当前仓库,AGENTS.md 大致扮演的角色,是给 Agent 的项目上下文 / 指令层——它告诉 Agent:在这个项目里,应该遵守什么规则、项目结构是怎样的、有哪些命令、什么该做什么不该做。它相当于给 AI 开发者的一份入职说明。

一个判断:未来的软件项目,可能不只需要给人看的开发文档,还需要给 Agent 看的开发规范。README 面向人,AGENTS.md 面向 AI。

但这里必须泼一盆冷水,别把 AGENTS.md 神化。它本质上只是一个上下文 / 指令层——它能告诉 Agent应该怎么做,但它是自然语言的、软性的。它替代不了 Schema、类型系统、校验器、运行时治理这些硬约束。一句写在 AGENTS.md 里的请不要修改权限文件,和一道运行时真正拦住越权的关卡,完全是两回事。

三、Prompt,为什么不是长期可靠的工程方式?

我们先看看纯 Prompt这种方式的问题。

你对 Agent 说一句请帮我创建一个 CRM。这句 Prompt,作为一次性的指令没问题,但作为一种工程方式,它有一堆毛病:

· 信息容易遗漏(你总会漏说点什么)

· 不够结构化(全靠自然语言,模糊)

· 不容易版本化(今天说的和明天说的,怎么管理?)

· 不容易复用(下次又得重新说一遍)

· 难以验证(说了不等于做对了)

· 对上下文高度敏感(换个语境,效果就变)

如果把这种一次性口头指令,换成一套结构化的能力呢:

Skill(技能)

Instructions(明确的操作指令)

Tool(可调用的工具)

Schema(合法的结构)

Validation(校验)

Agent 得到的,就不再是一句可能被理解偏的话,而是一套结构化的、可复用的能力。

Prompt 是一次性指令;Skill 更像可复用的专业知识 + 操作流程。

四、Agent Skills,到底是什么?

先破一个误解:别把 Skill 简单理解成一篇 Markdown 文档。它比那要重。一个 Skill,可以包含一整套东西:

· 领域知识(Domain knowledge)

· 操作指令(Instructions)

· 工作流(Workflow)

· 工具用法(Tool usage)

· 校验预期(Validation expectation)

· 示例(Example)

· 约定俗成(Conventions)

所以更准确的理解是:Skill 更像 Agent 的一个专业技能包,而不是一次性的 Prompt。它把完成某一类特定任务需要的知识、流程、工具、规范,打包在一起,让 Agent 可以反复调用。

打个类比,人和 AI 各自靠什么学会在一个框架里干活:

人类开发者:

框架文档 + CLI + IDE + 示例

AI 开发者:

Skills + AGENTS.md + Tools + Schema + Runtime

五、Skill + Schema,为什么比 Prompt + Code 更可靠?

我们对比一下两种模式。

模式 A:Prompt + Code

Prompt → LLM → Code

(你说一句,模型生成一堆代码,做完就完了)

模式 B:Skill + Schema + Runtime

Skill → Schema → Tool / MCP → Metadata

→ Validation → Runtime

两种模式的核心差别,在于每一层对 Agent 说的话不一样:

这一层

它对 Agent 说的话

Prompt

「你可以尝试这么做。」

Schema

「你只能按照这个结构表达。」

Tool / MCP

「你可以调用这些能力。」

Validation

「你的修改必须满足这些规则。」

Runtime

「最终执行,仍然受系统边界约束。」

看出这个递进了吗?从你可以试试,到你只能这样,到你的结果必须合规。约束一层层收紧,Agent 的自由被框定在一个安全、合法的空间里。于是——Agent 的能力,不再只由模型本身决定,而是由模型 + 环境共同决定。

同一个模型,放进一个有 Skill、Schema、Validation、Runtime 的环境里,和扔进一个只有 Prompt 的空白环境里,产出的可靠性,天差地别。环境,是模型能力的放大器,也是它的安全带。

六、为什么 MCP 只是工具层,而不是完整的 Agent DX?

很多人有个误解:以为接上了 MCP,Agent 就万事俱备了。但 MCP 只是其中一层。把各层的职责摆清楚:

Skill → 告诉 Agent「怎么工作」

MCP → 告诉 Agent「可以调用什么」

Runtime → 真正执行

Validation → 检查结果对不对

Governance → 约束边界(什么能做、留不留痕)

看清楚层级,一个判断就清楚了:MCP 解决的是工具连接——它让 Agent 能调用系统的能力。而 Agent DX 解决的,是「Agent 如何在整个软件环境里工作」。前者是一层,后者是整个体系。

只有 MCP,没有 Skill、Schema、Validation、Runtime,Agent 只是有了更多工具,并没有真正拥有一个开发环境。工具多,不等于会干活。

七、AI 也需要一套类型系统

人类开发者靠类型系统+ IDE,在写代码时就得到即时的约束和提示。Agent 也需要一个对应的东西——面向元数据的类型化 Schema + 校验。根据当前仓库,ObjectStack 在这一层用到了 TypeScript、Zod、Schema、JSON Schema、元数据校验等。

但这里有个更深的观点,值得展开:类型系统对 Agent 来说,不只是约束,它更是一种机器可理解的设计空间。

它清清楚楚地告诉 Agent:什么可以存在、什么不能存在、什么类型是合法的、哪些字段是必须的、哪些关系是允许的。这等于给 Agent 画出了一张合法地图。

于是,Agent 不再是在一个无限的可能性空间里瞎生成,而是在 Schema 定义的合法空间里做搜索。搜索空间从无穷,收敛成有限且合法——这对 AI 生成的可靠性,是决定性的。

这是一个很值得琢磨的 AI 工程观点:约束,不是在限制 AI,而是在帮 AI。 一个划定了边界的空间,比一片无边无际的旷野,更容易让 AI 找到正确答案。

八、AI Coding 的真正闭环,不是 Generate,而是 Feedback

今天很多人对 AI Coding 的想象,还停留在一个过于简单的三步:

Prompt → Generate → Done

(说一句、生成完、就结束了)

但真正可靠的 Agent 开发体验,应该是一条完整的闭环:

理解(Understand)

↓ 规划(Plan)

↓ 修改(Modify)

↓ 校验(Validate)

↓ 预览(Preview)

↓ 观察(Observe)

↓ 修正(Fix)

↓ 再校验(Validate Again)

↓ 部署(Deploy)

这条闭环里,生成只是其中一小步。真正决定质量的,是后面那些——校验、预览、观察、修正。一个成熟的开发者,大部分时间不是在写,而是在验证和修正。Agent 也该如此。

AI Coding 1.0 是生成代码;而真正的 AI-Native 开发,是在一个环境里,理解、修改、校验、预览、修正、再部署。前者是一次性输出,后者是一条工程闭环。

九、Preview,为什么可能比生成代码更重要?

在上面那条闭环里,有一步特别值得单拎出来讲:Preview。

一个 Agent 改完东西,它不应该只得到一句冷冰冰的命令执行成功。它应该得到的是——你刚改的这个应用,现在长什么样。

Agent

↓ 改了 Metadata

Runtime

↓ 渲染出来

Preview(看到真实的样子)

Observation(观察哪里不对)

Correction(修正)

这其实和人类用 IDE 的过程一模一样:写代码 → 编译 → 运行 → 看结果 → 再改。人类程序员极度依赖看到运行结果这个反馈——没有它,你是在盲写。

所以,AI Agent 的视觉 / 运行反馈,很可能是 Agent DX 里的一等公民。让 Agent看见它改出来的东西,和让它「以为」自己改对了,是两个完全不同的可靠性级别。

十、为什么Examples本身,也是 Agent 的学习材料?

根据当前仓库,ObjectStack 有一批 examples(如 Todo、CRM、Showcase、ObjectQL 嵌入等,)。

这些 examples,对人和对 AI,意义不太一样:

对人类开发者:examples = 学习资料

 AI Agent: examples = 可参考的结构化样本

差别在于:Agent 不只是在读Object 应该怎么写这种抽象说明,它还能直接观察这个真实的仓库,实际上是怎么写 Object 的。真实的、能跑的例子,比抽象的文档,更能让 Agent 学到这个项目真正的写法。

所以一个观察:示例仓库,可能正在从文档的附件,变成 Agent 可利用的结构化参考样本。

但这里要谨慎,别把话说过头:examples 不等于训练数据。更准确地说,它是 Agent 在上下文 / 工具辅助开发的过程中,可以利用的参考样本。它帮 Agent 现场理解这个项目,而不是去训练模型本身。

十一、Claude Code、Gemini CLI 等集成,真正说明了什么?

我不评测这些工具谁强谁弱,而是问一个更本质的问题:一个企业软件项目,为什么要专门去做这些 Agent 集成?

如果一个仓库,同时提供了对 Claude Code、Gemini CLI 等的集成,它说明的其实是一件事:

企业软件,开始需要向 Agent 提供自己的开发者接口了。

对比一下这个变化。过去,一个库的使用者是开发者:

过去:Library(库) → Developer(人)

而现在,一个业务 Runtime,开始面向AI 开发者提供接口:

现在:Runtime(运行时)

Agent 开发者接口

Claude / Gemini / Cursor / ...

这里的核心,不是ObjectStack 支持了哪些 AI 工具这种功能点,而是一个更深的判断:业务 Runtime,开始拥有一种新的使用者——AI 开发者。而这个Agent 开发者接口,可能是由 AGENTS.md、Skills、MCP、CLI、Schema、Examples 共同组成的。

十二、Agent DX:一种新的开发者体验

到这里,可以正式提出本文的概念模型了。

我们太熟悉开发者体验(DevEx)这个词了。对人类开发者,它意味着一整套东西:

传统 DevEx(面向人):

IDE · 文档 · CLI · 编译器 · Linter · 测试 · 调试器 · Runtime

而如果开发者里开始有了 AI,那对应地,可能需要一套面向 AI 的开发者体验——我把它叫做 Agent DX:

Agent DX(面向 AI):

Context · Skills · AGENTS.md · Schema · Tools · MCP

· Validation · Preview · Runtime · Feedback

必须说清楚:Agent DX 不是给 Claude 写几个 Prompt那么简单。它是——围绕AI 开发者的一整套完整软件工程环境。就像 IDE + 编译器 + 测试 + 文档共同构成了人的开发环境一样,Context + Skills + Schema + Tools + Validation + Preview + Runtime 共同构成了 Agent 的开发环境。

(再次说明:Agent DX只是我为了讨论这个问题提出的分析概念)

十三、未来的AI IDE,可能不只是 IDE

传统 IDE 的核心,是帮人编辑代码——文件树、编辑器、标签页、自动补全。但一个面向 Agent 的开发环境,它的核心可能完全不同。因为 Agent 不太需要编辑器那一套。

它真正需要的,可能是这些:

上下文(Context)· 技能(Skills)· 结构(Schema)

工具发现(Tool discovery)· 校验(Validation)

预览(Preview)· 运行时状态(Runtime state)

追踪(Trace)· 变更(Diff)· 审批(Approval)

你会发现,这份清单里,几乎没有编辑器的影子。于是一个判断浮现:AI Coding 产品,最终可能从代码编辑器,逐渐走向软件控制台——它管理的不是文件和光标,而是理解、修改、校验、运行、审批这一整套软件的生命周期。

十四、Agent DX 的基本单位,可能不是文件,而是任务

传统 IDE 的工作单位,是文件——你一个文件一个文件地打开、编辑、保存。但 Agent 的工作方式不是这样。它面对的是一个任务,而这个任务,往往横跨很多文件、很多工具、甚至整个 Runtime。

比如一个任务:创建一个 工单系统。」Agent 为了完成它,可能需要同时:

创建 Object · 创建 Fields · 创建 View

创建 Action · 修改 Navigation · 设置 Permission

启动 Runtime · 做 Validation · 生成 Preview

所以,Agent DX 的基本单位,可能不是文件,而是任务 / 变更集 / 业务能力。Agent 关心的是把这个业务能力完整地做出来,而不是编辑好这一个文件。

十五、这会让软件项目的代码仓库发生变化吗?

这是一个有意思的问题。

传统项目的核心资产,是这些:

src/ · tests/ · package.json

而一个 AI-Native 的项目,它的核心资产,可能会越来越多地包括这些:

metadata/ · skills/ · AGENTS.md

schemas/ · policies/ · examples/ · runtime/

这不是说传统的 src/、tests/ 会消失。而是说:对于 AI-Native 项目,那些给 Agent 使用的知识与约束层(元数据、技能、规范、策略、示例),会成为和源代码同等重要的一等项目资产。仓库里,不再只有『给机器执行的代码』,还有『给 AI 理解的知识』。

十六、Agent DX 最难的,其实不是工具,而是边界

Skill 很方便、MCP 很强、CLI 很强。但有一条铁律:

 Agent 的工具越多、能力越强,风险也就越高。

所以,一个好的 Agent DX,绝不能只顾着给 Agent 更多能力,它必须同时,把能力关进治理的笼子里:

Skill

↓ Tool

↓ Permission(权限)

↓ Validation(校验)

↓ Runtime(受约束的执行)

↓ Audit(审计)

优秀的 Agent DX,不是让 Agent 获得最多的能力,而是让 Agent 在清晰的边界内,获得足够的能力。能力要给够,但边界必须清楚。

十七、ObjectStack,为什么值得从 Agent DX 角度研究

最后回到 ObjectStack,根据当前仓库,它把这些东西放在了一起:

AGENTS.md Agent Skills Schema CLI

MCP Validation Runtime Examples

这些东西,单独拎出来看,都不新——文档、技能包、类型 Schema、命令行、工具协议、校验、运行时、示例,每一样都是老概念。但当它们被有意识地组合在一起、共同服务于Agent 如何在这个项目里开发时,一件新的事情就发生了:它们开始形成一个面向 AI 开发者的完整开发环境。

这才是 ObjectStack 当前最值得观察的地方:不是它有某个单点功能,而是它把这一整套东西,拼成了一个 Agent 能在里面完整工作的环境。整体,大于部分之和。

十八、那这套方法,还存在哪些问题?

1 上下文维护成本

Skills、AGENTS.md 越写越多,Agent 要背的上下文就越来越复杂、越来越重。多,不总是好事。

2 Skill 漂移

代码变了,但 Skill 没跟着更新。结果 Agent 照着过时的 Skill,学到了错误的方法。文档和现实脱节,在 AI 时代危害更大。

3 工具爆炸

MCP 工具太多,Agent 在该用哪个工具上的选择成本就飙升,反而容易选错。

4 示例漂移

Examples 和真实架构不一致时,Agent 可能忠实地复制了一个过时的、甚至错误的模式。

5 Agent 评估

怎么判断 Agent做对了?这件事很难。不能只看代码能不能跑,还得看:它符不符合业务模型、遵不遵守规范、用没用对工具、有没有越权、有没有产生副作用。这套评估体系,本身就是个大难题。

十九、未来的软件工程,可能出现Agent CI

这里提一个未来方向

传统的 CI,是围绕代码的:构建 → 测试 → Lint → 部署。而如果 Agent 成了软件的构建者,可能会出现一种新的 CI——围绕Agent 的变更来做:

传统 CI

Agent CI(未来推论)

Build(构建)

Agent Change(Agent 变更)

Test(测试)

Schema Validation(结构校验)

Lint

Policy Check(策略检查)

Task Evaluation(任务评估)

Preview(预览)

Regression(回归)

Deploy(部署)

Deploy(部署)

这套Agent CI可能会自动判断一些新问题:Agent 有没有真正完成任务、有没有顺手改了不相关的东西、有没有违反 Skill 的规范、有没有偷偷改动权限、有没有引入新的安全风险。

结语:AI 编程的下一步,不是更会写代码

回到标题。用一条演进,收束全文:

AI Coding 1.0 生成代码(Generate Code)

AI Coding 2.0 理解 + 修改代码(Understand + Modify)

AI-Native 开发 在一个软件环境里工作

Work inside a Software Environment)

AI Agent 未来真正需要的,不只是一个更强的模型。它需要的,是一整套环境:上下文、技能、协议、结构、工具、校验、预览、运行时、治理。

AI 编程的下一阶段,不是AI 终于学会写代码, 而是软件,开始为 AI 设计开发环境。

落到 ObjectStack:它值得观察的地方,不只是它让 Agent 写 Metadata,而是——它正在把 Agent Skills、项目规则、Schema、MCP、Validation、Runtime 和 Examples 组合起来,为 AI 开发者提供一条新的开发路径。它未必是最终答案,但它是一个值得研究的、具体的开源案例。

过去,我们在给程序员做 DevEx;而现在,我们可能正在开始,给 AI 做 Agent DX。过去我们设计软件,是为了让人更容易开发和使用它;下一阶段,我们可能还要设计软件,让 AI 更容易理解、修改、验证和运行它。

——本文以 ObjectStack 开源项目为案例进行技术分析。涉及仓库能力(AGENTS.md / Skills / MCP / CLI / Validation / Runtime / Examples / Agent 集成)的部分,以其当前公开源码和文档为准。

ObjectStack · 开源的 AI-Native 企业软件运行时

相关学习资料

返回首页浏览学习资料