惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Help Net Security
Help Net Security
S
Schneier on Security
Security Latest
Security Latest
C
Cyber Attacks, Cyber Crime and Cyber Security
博客园_首页
K
Kaspersky official blog
B
Blog
雷峰网
雷峰网
MyScale Blog
MyScale Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
人人都是产品经理
人人都是产品经理
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Threatpost
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Latest news
Latest news
J
Java Code Geeks
W
WeLiveSecurity
GbyAI
GbyAI
V
Vulnerabilities – Threatpost
S
Secure Thoughts
IT之家
IT之家
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 叶小钗
Engineering at Meta
Engineering at Meta
S
Security @ Cisco Blogs
罗磊的独立博客
M
MIT News - Artificial intelligence
Blog — PlanetScale
Blog — PlanetScale
Stack Overflow Blog
Stack Overflow Blog
月光博客
月光博客
P
Proofpoint News Feed
博客园 - 聂微东
云风的 BLOG
云风的 BLOG
N
Netflix TechBlog - Medium
D
DataBreaches.Net
S
SegmentFault 最新的问题
V
Visual Studio Blog
V
V2EX
The Register - Security
The Register - Security
N
News | PayPal Newsroom
aimingoo的专栏
aimingoo的专栏
C
Cybersecurity and Infrastructure Security Agency CISA
N
News and Events Feed by Topic
Hacker News: Ask HN
Hacker News: Ask HN
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google DeepMind News
Google DeepMind News
Webroot Blog
Webroot Blog
NISL@THU
NISL@THU
D
Darknet – Hacking Tools, Hacker News & Cyber Security

SumSec's Blog

从安全角度谈Java反射机制--前章 · SUMSEC 从安全角度谈Java反射机制--终章 · SUMSEC 逆向学习fastjson反序列化始 · SUMSEC 2020年研究回顾总结 · SUMSEC Abstract syntax tree classes for … Analyzing data flow in Java · SUM… Annotations in Java · SUMSEC Basic query for Java code · SUMSEC BypassSuper使用介绍说明 · SUMSEC CodeQL Create OpenJdk/Jdk8 Databa… CodeQL library for Java · SUMSEC Navigating the call graph · SUMSEC Overflow-prone comparisons in Jav… Types in Java · SUMSEC Working with source locations · S… Aliases · SUMSEC Expression · SUMSEC Formulas · SUMSEC Javadoc · SUMSEC Modules · SUMSEC Predicates · SUMSEC Queries · SUMSEC Type · SUMSEC Variables · SUMSEC 一道shiro反序列化题目引发的思考 · SUMSEC 修改ysoserial使其支持任意代码执行 · SUMSEC 自定义 ClassLoader 隔离运行不同版本jar包的方式 ·… 2020网鼎杯---Java文件上传wp · SUMSEC CNVD-2020-10487(CVE-2020-1938)tom… JDSRC安全课笔记 · SUMSEC Java反序列化链回显解决方案 · SUMSEC Skipped breakpoint because it hap… Windows Terminal 配置文件 · SUMSEC bypass 学习笔记之绕安全狗bypass safedog · … 一次意外的代码审计----JfinalCMS审计 · SUMSEC 一篇文章读懂Java代码审计之XXE · SUMSEC 从安全角度谈Java反射机制--序章 · SUMSEC 小楼昨夜又春风,你知ysoserial-Gadget-URLDNS… 春眠不觉晓,RCE知多少? · SUMSEC 漫谈Commons-Collections反序列化 · SUMSEC 漫谈Java反序列化 · SUMSEC 白头搔更短,SSTI惹人心! · SUMSEC 记一次面试题 · SUMSEC About Me 关于我 · SUMSEC Apache Flink任意Jar包上传导致远程代码执行 · SU… CVE-2019-1388 UAC提权复现 · SUMSEC CVE-2019-16097 || Harbor任意管理员注册漏洞… Python加密shellcode免杀 · SUMSEC Telegram机器人作为渗透测试框架 · SUMSEC VM虚拟机无法安装vmtools解决|本程序需要您将此虚拟机上安装… 谁能想到,电视遥控器竟成了 Vibe Coding 神器 · SU… 从手改 Skill 到自动进化:评测结果和执行轨迹如何让 Agen… 模型人人都能用,什么才是你能带走的?我的答案是一个可进化的SKIL… 模型人人都能用,什么才是你能带走的?我的答案是一个可进化的Skil… AI 时代 ShiroAttack2 5.x:修改了什么 · SU… 在 AGI 降临前,先给 AI 开一条”脑内弹幕”通道 · SUM… 一篇博文,三种时间:网页幻灯与 Remotion 动效的交付逻辑 … 🔍 别让大模型”想太多”:SKILL开发中的语义陷阱与抗幻觉设计 … 2022 年年度总结 · SUMSEC Java Swing To RCE 漏洞分析 · SUMSEC SpringBoot GatewayEL表达式漏洞分析 · SUM… Sensitive keys in codebases · SUM… 论如何优雅注入 Java 内存马 · SUMSEC SUMSEC 知识点 · SUMSEC VMWare Workspace ONE Access Auth … Spring Framework RCE CVE-2022-229… 相似度算法调研 · SUMSEC CVE-2022-33891 Apache Spark shell… 正则匹配配置不当 · SUMSEC Spring Data MongoDB SpEL CVE-2022… CodeQl Usage Tricks · SUMSEC Spring Boot RCE到内存马探索 · SUMSEC Shiro后渗透拓展面 · SUMSEC shiro反序列化漏洞攻击拓展面–修改key · SUMSEC GitHub Java CodeQL CTF · SUMSEC Hack-Tools 转化成Web · SUMSEC CodeQL与Shiro550碰撞 · SUMSEC CodeQL初见Shiro550 · SUMSEC CodeQL与AST之间联系 · SUMSEC Java加载动态链接库 · SUMSEC Log4j2 漏洞分析 · SUMSEC Interprocedural-Analysis 过程间分析 · … Data Analysis Foundation 数据分析基础 ·… Data Flow Analysis · SUMSEC Intermediate Representation 中间代表(… PII泄露–用CodeQL识别日志中的PII数据 · SUMSEC CodeQL workshop for Java: Unsafe … 前言 · SUMSEC 漏洞环境的搭建 · SUMSEC Fastjson回显 · SUMSEC Tomcat通用回显学习笔记 · SUMSEC 从Java反序列化漏洞题看CodeQL数据流 · SUMSEC 概述 · SUMSEC 记一次Log4j失败的Gadget挖掘记录 · SUMSEC Ysoserial改造记录 · SUMSEC JNDI注入 · SUMSEC shiro JRMP gadget · SUMSEC Fastjson MySQL gadget复现 · SUMSEC 2021年度总结 · SUMSEC
AI Agent 工程的必然演进:CLI、Skills、Harne…
2026-07-17 · via SumSec's Blog

AI Agent 工程的必然演进:CLI、Skills、Harness 与 Loop

AI Agent 工程的必然演进

过去一年,我深度使用了 Claude Code、Codex,以及各种 Vibe Coding 工具。用得越多,我越觉得最近流行的这些词并没有那么新。MCP、Skills、Harness、Loop,看起来像一波接一波的新概念,其实都能在过去的软件工程里找到原型。它们只是到了 AI 时代,换了一个执行者,也终于有了自己的名字。

把这些东西放回历史里看,会比追着新名词跑有意思得多。

MCP 只是中间产物

MCP 是 CLI 主轨上的过渡转接头

先说一个比较粗暴的观点:我认为 MCP 会被淘汰。

这里说的“淘汰”,不是指协议和代码会在某一天彻底消失,而是它不会一直作为 AI 调用工具的主流入口存在。在大家真正意识到 CLI 才是 AI 使用工具的最佳形态之前,MCP 会很重要;等 Agent 能够普遍、稳定地驾驭终端以后,它的任务也就完成了。

在我看来,MCP 本质上就是给 AI 使用的 OpenAPI。它告诉模型外部系统有哪些能力、需要什么参数、会返回什么结果。过去的 OpenAPI 面向开发者和应用,MCP 把主要使用者换成了 Agent。这个转换当然有价值,但还谈不上创造了一套全新的工程范式。

我不喜欢 MCP 的第一个原因,是很多 MCP 客户端会把工具定义直接放进模型上下文。接入的服务越多,模型背着的说明书就越厚。当前任务明明用不到,它还是得看见,还得在一堆工具里做选择。这是在浪费 token,也在浪费模型的注意力。

这个问题不能全怪 MCP。协议本身有 tools/list,客户端也可以做渐进式发现,不必一次塞入所有工具。可现实中的朴素实现确实经常这么干。相比之下,Skill 的思路更自然:先让模型知道某项能力存在,真正需要时再读取完整说明。

第二个原因是 CLI 已经站在一套成熟的工程体系上。一个 CLI 可以自己处理鉴权、状态、日志和更新,可以打包成 .exe,也可以通过包管理器安装。输入输出怎么设计,由工具自己决定。人、脚本、CI 和 Agent 都能调用同一份东西。MCP 往往是在已有能力外面再包一层专供 AI 使用的接口,我不确定这层包装能长期抵消它带来的适配和配置成本。

尤其重要的是,CLI 同时给人和 AI 使用。Agent 可以直接执行一条命令,也可以把命令交给用户。用户复制到终端,自己运行一遍,马上就能核实结果。换成 MCP,普通用户通常还得先进入一个支持 MCP 的客户端。人并非不能调用 MCP,只是它没有给人留下一个像命令行这样直接的入口。

CLI 还有一个长期优势:它是大模型的能力压缩接口。

模型只需要输出一条很短的命令,就能让成熟程序完成搜索、计算、构建、测试或者部署。没必要把每个步骤都写进上下文,更没必要用 token 模拟程序早就能做好的计算。模型负责判断,工具负责执行。一点 token 可以撬动很大的工作量。

当然,写得一团糟的 CLI 也不好用。它至少要有稳定的非交互模式、结构化输出、明确的退出码和能看懂的帮助信息。CLI 并不会天然拥有这些品质。但只要工具设计得当,这条路比重新维护一套 Agent 专用接口更直接。

我的判断可能很武断,MCP 也可能吸收渐进发现、统一分发等能力继续演化。可我仍然认为,当 Agent 真正学会使用人类现有的工具以后,单独为它维护一套工具世界会越来越没有必要。

Skill 把对话经验变成可版本化资产

工具解决“能做什么”,Skill 解决“什么时候用、为什么用、怎么用”。这两件事不是一回事。

以前我们会在对话里反复教 AI:先看哪个文件,什么情况下运行哪条命令,遇到什么结果应该停下来。对话结束,这些经验也就散了。Skill 把它们写进文件,需要时加载,不需要时不占上下文。API 说明和 CLI 用法同样可以放进去,由 Skill 负责组织,底层仍然调用现成工具。

我在《为什么你需要一个自己的 Agent Skills 仓库》里写过自己的做法:用 GitHub 和 Git 管理不同类型的插件,保留多个版本,需要什么就启用什么。核心 SKILL.md 只维护一份,外面再做不同平台的适配。换设备、换 Agent、换项目,这套经验还能跟着我走。

这当然不能解决全部环境问题。运行时、依赖、密钥、权限和网络仍然需要管理。但至少,最容易丢失的那部分东西,也就是“我到底是怎么把 AI 用顺手的”,已经从个人记忆变成了可以版本控制的资产。

Harness 这个词其实很准确

Harness 让 Agent 保持在正确路径上

我第一次看到 Harness Engineering,也就是“驾驭工程”这个词时,感觉有点奇怪。用着用着,反而觉得它形容得很准。

AI 是一个工具,而且是一个能力很强、行为却不总是稳定的工具。给它一个目标,不等于它能把事情做完。它可能忘记最初的要求,跳过步骤,在局部问题上绕很久,最后交出一个看起来完成、实际没有验证的结果。想把它用好,就得驾驭它。

这里的“驾驭”不是多写几句提示词。上下文怎么提供,工具怎么组织,任务状态放在哪里,出错后怎么恢复,结果怎么验证,这些东西要放在一起考虑。Harness 就是围绕模型搭出来的那套运行环境。模型相同,Harness 不同,最后的表现可以差很多。

真正熟练使用 AI 的人,往往会自然形成自己的 Harness。他会把反复验证过的提示、规则、脚本和工作流留下来,不再每次从头教。最初可能只是几个文件,后来有了分类、版本、依赖和验证,慢慢就长成一套看得见的架构。

我的 Skills 仓库就是其中一部分。它还不是 Harness 的全部,但已经开始解决一个很实际的问题:无论我在哪台设备、哪个项目、哪个 Agent 里工作,都尽量不要把已经积累的使用方法弄丢,也不要让它在一次次复制中悄悄变形。

Loop 也不是 AI 发明的

Issue 驱动的 Agent 自治循环

Loop 最近很火,但循环这件事在“古法编程”阶段就存在了。

用户提出 Bug、Feature 或需求,团队创建 Issue。开发者读取 Issue,修改代码,运行测试,提交 PR,再根据评审继续修复。任务状态变了,人就知道下一步该做什么。读取任务、执行、检查、更新状态,这本来就是一个循环。

AI 时代没有发明 Loop,只是把循环里的执行者换成了 Agent。Issue 依然可以是触发源:

Issue 触发
    ↓
Agent 修改并验证
    ↓
提交代码,创建 PR
    ↓
自动检查或其他 Agent 审查
    ↓
修复、再验证、合并
    ↓
更新 Issue

过去,这套流程靠人的责任感和注意力维持。人会主动看任务,记住做到哪里,发现失败后回来修。Agent 没有这种默认存在的工作习惯,所以我们得把触发条件、状态变化和完成标准明确写出来。只要这些东西足够清楚,Agent 就可以沿着流水线持续往前走。

我不认为正常的 Agent Loop 应该依赖人工审批。如果每走一步都要等人点一下确认,它仍然是 AI 辅助的人工作流,算不上真正的自治循环。Agent 可以 24 小时运行,人做不到。既然如此,就不该再让人的工作时间成为流水线的时钟。

人的工作应该前移:先定义权限、预算、验收规则和停止条件。Agent 在边界内自己执行,成功就继续,失败就重试、回滚或者停止。涉及资金、生产数据和外部发布时,也可以通过预授权、沙箱和策略门禁限制,而不是在每一轮临时找人批准。

无需人工审批不等于无限循环。连续失败、需求冲突、预算耗尽或者越过权限边界,流水线都应该停下来。人工处理异常,不要阻塞正常路径。

新概念,只是给旧经验起了名字

新概念只是给旧工程经验换上新标签

回头看,Skills、Harness、Loop 都有迹可循。过去不这样叫,是因为没必要。

一个熟练工程师会主动补全信息、选择工具、记住状态、检查结果。很多东西藏在人的经验和责任感里,大家默认他会做,也就不需要专门发明一个词去描述。现在执行者换成了 AI,这些隐性的部分必须写进文件、工具链和状态机,否则 Agent 就接不住。

所以我更愿意把这些新词理解成一种提醒:原来藏在人脑里的东西,现在得摊开来写了。它们没有创造新的工程规律,只是 AI 的发展逼着我们把过去无需言明的常识说清楚。有人恰好找到了一个准确的词,大家一听,发现说的正是自己已经在做的事。

这也是我观察 AI 工具演进时最感兴趣的地方。一个新概念出现,我不太关心它听起来有多新。我更想知道它继承了什么,为什么偏偏在现在被说出来,以及它到底是一个阶段性的外壳,还是会留下来的东西。

所以想明白这件事以后,面对 AI 领域层出不穷的新名词,也就不必焦虑了。下次再遇到一个听起来很吓人的新词,先别急着觉得自己又落后了。先想一想,它背后的逻辑是不是人类工程里早就存在的东西。大多数时候,答案都是肯定的。AI 时代的很多“新”,只是把旧经验换了个执行者、起了个新名字。

看清这一点,反而是一种优势。你不需要从零学起,只需要把已经理解的工程常识迁移过来,再补上 AI 特有的那一层差异。这样的适应是快速的,也是能真正落到自己生产实践里的。