news 2026/10/8 4:07:29

Loop Engineering实战:用Claude Code、Codex、Cursor搭建AI编程自主回路

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Loop Engineering实战:用Claude Code、Codex、Cursor搭建AI编程自主回路

1. 从"写提示词"到"搭回路":Loop Engineering 到底在解决什么问题

大多数人接触 AI 编程工具,第一步都是学怎么写提示词。写得好一点,模型一次给你一段能跑的代码;写得差一点,来回改三五轮也能凑合。但只要你真正把 Claude Code、Codex、Cursor 这类工具用在超过几百行的项目里,就会发现一个残酷的事实:单次提示词的质量,对最终产出的影响远没有你想象中那么大。真正决定成败的,是你有没有给模型搭一条能自己转起来的回路。

这就是 Loop Engineering(回路工程)要解决的核心问题。它不是某个具体工具的功能,也不是一套提示词模板,而是一种把 AI 编程助手从"一问一答的聊天机器人"改造成"能自主迭代的工程系统"的方法论。你可以把它理解成:以前你是手把手教一个实习生写代码,现在你要做的是给这个实习生设计一套工作流程、检查清单和反馈机制,让他能自己把活干完,你只在关键节点上把关。

为什么现在这个词突然火起来?因为工具本身已经进化到了这个阶段。Claude Code 能直接读写文件、执行终端命令、跑测试;Codex 有配置文件可以定义项目级的行为约束;Cursor 有 rules 和 agent 模式。这些能力单独看都是"功能",但组合起来就构成了回路的原材料——模型能行动、能观察结果、能根据结果调整下一步。缺的只是你把这条链路设计出来。

我见过太多人卡在同一个地方:工具装好了,账号也注册了,提示词也抄了一堆,但用起来还是"每次都要重新解释一遍项目背景",或者"改完 A 文件忘了改 B 文件导致编译报错"。这些问题的根源都不是模型不够聪明,而是没有把重复性的上下文、约束和验证步骤固化到回路里。Loop Engineering 做的就是这件事:把一次性的、靠人脑记忆的东西,变成系统性的、可复用的工程结构。

这篇文章会从零开始,把 Loop Engineering 的完整搭建过程拆开讲。不管你现在用的是 Claude Code、Codex 还是 Cursor,底层的回路设计思路是相通的。我会先讲清楚回路的四个核心组件,然后分别针对不同工具给出具体的配置方法,最后用一个真实项目把整套流程跑一遍。中间会穿插大量我在实际使用中踩过的坑和总结的技巧,这些是官方文档里不会写的。

提示:Loop Engineering 不是让你完全放手不管。它的目标是把你从"每一步都要盯着"变成"只在关键决策点介入"。回路设计得越好,你需要介入的频率就越低,但介入的质量要求越高。

2. 一条完整回路的四个核心组件

在动手配置任何工具之前,你得先理解一条回路到底由什么构成。我把这些年用下来觉得最清晰的分法总结成四个组件:上下文层、行动层、验证层、记忆层。这四个东西缺一个,回路就转不起来,或者转起来也会跑偏。

2.1 上下文层:让模型每次都知道"我在哪、要干什么"

上下文层的核心任务是解决一个最基础也最容易被忽视的问题:模型没有长期记忆。你这次对话告诉它的项目结构、代码规范、业务逻辑,下次开一个新会话它就全忘了。很多人抱怨"AI 编程工具不好用",一半以上的原因都出在这里——每次都要重新喂一遍背景信息,喂得不全模型就瞎猜,喂得太多又浪费 token 还容易让模型抓不住重点。

上下文层的设计目标就是把这部分信息结构化、持久化。具体来说,需要固化下来的信息包括:

  • 项目的基本结构:哪些目录放什么,入口文件在哪,核心模块之间的依赖关系
  • 代码规范:命名习惯、缩进风格、注释要求、错误处理方式
  • 技术栈约束:用了什么框架、什么版本、哪些库是禁止引入的
  • 业务规则:这个项目特有的、不能违反的逻辑约束

不同工具固化上下文的方式不一样。Claude Code 靠的是项目根目录下的CLAUDE.md文件,Codex 靠的是配置文件里的 instructions 字段,Cursor 靠的是.cursor/rules目录。但本质都是一回事:把"每次都要说"变成"说一次就够"。

这里有个关键的经验:上下文文件不是写得越长越好。我一开始犯的错就是把所有能想到的东西都塞进去,结果模型反而抓不住重点,经常忽略掉真正重要的约束。后来我总结出一个原则——上下文文件只放"模型猜不到且必须知道"的信息。比如"用 4 空格缩进"这种模型大概率能猜对的就不用写,"所有数据库操作必须走 repository 层不能直接调 ORM"这种反直觉的约束就必须写。

2.2 行动层:给模型一双能干活的手

行动层解决的是"模型能不能真正做事"的问题。纯聊天式的 AI 只能给你代码片段,你还得自己复制粘贴、自己保存文件、自己跑命令。行动层要做的就是把这些操作交给模型自己完成。

Claude Code 在这块做得最彻底,它可以直接读写文件、执行终端命令、运行测试脚本。Codex 和 Cursor 的 agent 模式也具备类似能力,只是触发方式和权限控制不太一样。但"能行动"只是第一步,关键是行动的范围和边界要设计好。

我见过有人一上来就给模型完全的文件系统权限,结果它把不该改的配置文件也改了,或者执行了一条危险的删除命令。行动层的设计原则是最小权限 + 明确边界:

  • 明确告诉模型哪些目录可以改,哪些只能读
  • 危险操作(删除文件、执行系统命令、安装依赖)需要额外确认
  • 每次行动后要有明确的输出,方便你追溯它做了什么

2.3 验证层:让回路能自己发现错误

这是四个组件里最容易被忽略、但恰恰是 Loop Engineering 精髓所在的一环。没有验证层的回路,本质上还是"模型做完你检查",只是把检查的环节往后挪了而已。有了验证层,模型才能自己发现错误、自己修正。

验证层具体是什么?就是一套模型能自己运行的检查机制。最常见的是:

  • 单元测试:模型改完代码自己跑测试,看有没有破坏现有功能
  • 类型检查:TypeScript 项目跑tsc --noEmit,Python 项目跑 mypy
  • Lint 检查:ESLint、Ruff 这类工具能抓出风格和潜在问题
  • 构建验证:跑一次 build 看能不能通过

关键在于,这些检查必须是模型能自己触发、自己读取结果、自己根据结果调整的。如果每次都要你手动跑一遍再把结果贴给模型,那验证层就没起到作用。

我在实际项目里的做法是:在上下文文件里明确写清楚"每次修改代码后必须执行以下命令验证",然后把命令和预期结果都列出来。这样模型改完代码会主动去跑验证,发现问题自己修,修完再跑一遍,直到通过为止。这一步做好之后,我介入的频率直接降了一半以上。

2.4 记忆层:让经验能跨会话积累

记忆层解决的是"这次踩的坑下次还会踩"的问题。模型本身没有跨会话记忆,但你可以通过文件系统给它造一个。最简单的做法是维护一个NOTES.md或者LESSONS.md文件,每次遇到问题解决了就记一笔,下次会话开始时让模型先读这个文件。

更进阶的做法是把记忆层和上下文层结合起来:上下文层放稳定的、不常变的信息,记忆层放动态积累的经验。比如"这个项目的 API 返回格式有个坑,空数组返回的是 null 不是 []"这种信息,就适合放在记忆层,因为它是在实际开发中才发现的,不是一开始就能写进上下文文件的。

记忆层的价值会随着项目推进越来越明显。项目刚开始时可能没什么可记的,但跑上一两个月,这个文件就成了项目的"隐性知识库",新加入的人(或者新开的会话)读一遍就能避开大部分坑。

3. 不同工具的回路搭建实操

理解了四个核心组件之后,接下来就是具体怎么在不同工具里把它们落地。Claude Code、Codex、Cursor 这三个是目前讨论度最高的,它们的回路搭建方式各有特点。我会分别讲清楚每个工具的配置方法,以及我在使用中总结的针对性技巧。

3.1 Claude Code:用 CLAUDE.md 做上下文锚点

Claude Code 的回路搭建核心就是项目根目录的CLAUDE.md文件。这个文件会在每次会话开始时自动被读取,相当于给模型一个"项目说明书"。我现在的习惯是每个项目都先把这个文件建好,再开始写代码。

一个实用的CLAUDE.md结构大概是这样:

# 项目说明 ## 项目结构 - src/ 源码目录 - tests/ 测试目录 - scripts/ 构建和部署脚本 ## 技术栈 - 语言:TypeScript 5.x - 框架:Express - 测试:Jest - 包管理:pnpm ## 代码规范 - 使用 2 空格缩进 - 所有导出函数必须有 JSDoc 注释 - 错误处理统一用自定义的 AppError 类 ## 验证命令 每次修改代码后必须执行: 1. pnpm typecheck 2. pnpm test 3. pnpm lint ## 禁止事项 - 不要直接修改 package.json 的依赖版本 - 不要删除 tests/ 目录下的任何文件 - 不要使用 any 类型

这个文件的关键在于验证命令那一段。写清楚之后,Claude Code 改完代码会主动去跑这些命令,发现问题自己修。我实测下来,只要验证命令写得明确,模型自主修正的成功率相当高。

还有一个技巧:CLAUDE.md支持分层。你可以在子目录里也放CLAUDE.md,Claude Code 进入那个目录时会读取对应的文件。这对于 monorepo 特别有用——根目录放全局规范,各个子包放自己的特殊约束。

3.2 Codex:配置文件里的 instructions 字段

Codex 的回路搭建方式和 Claude Code 类似,但配置入口不一样。它主要靠配置文件里的 instructions 字段来固化上下文。如果你用的是 Codex 的桌面版或者命令行版,配置文件通常在用户目录下的.codex文件夹里。

Codex 的配置有个特点:它支持项目级配置和全局配置分离。全局配置放你个人的通用偏好,项目级配置放这个项目特有的约束。这个设计比把所有东西塞一个文件里要清晰得多。

我在 Codex 里常用的配置结构是这样的:

# 项目级配置 [project] instructions = """ 这是一个 Node.js 后端项目。 - 所有 API 路由定义在 src/routes/ 下 - 数据库操作必须通过 src/repositories/ 层 - 修改代码后运行 npm test 验证 """ [project.constraints] allowed_paths = ["src/", "tests/"] readonly_paths = ["config/", "migrations/"]

allowed_paths和readonly_paths这两个字段是 Codex 行动层控制的关键。把不该改的目录设成只读,能避免很多意外。我一开始没设这个,结果模型有一次把数据库迁移文件给改了,差点出大事。后来所有项目我都先把这两个字段配好。

3.3 Cursor:rules 目录 + agent 模式的组合

Cursor 的回路搭建稍微复杂一点,因为它有两套机制:.cursor/rules目录和 agent 模式。rules 目录负责上下文层,agent 模式负责行动层,两者配合才能形成完整回路。

.cursor/rules目录下可以放多个.mdc文件,每个文件定义一类规则。我一般会分成三个文件:

  • project.mdc:项目结构和业务规则
  • style.mdc:代码风格和命名规范
  • workflow.mdc:工作流程和验证步骤

workflow.mdc是最关键的,它定义了 Cursor 在 agent 模式下应该怎么工作。一个实用的 workflow 规则大概是这样:

--- description: 代码修改的标准工作流程 globs: ["src/**/*.ts"] --- 修改代码时遵循以下流程: 1. 先阅读相关文件的现有实现 2. 修改后运行 `npm run typecheck` 检查类型 3. 运行 `npm test` 确保测试通过 4. 如果测试失败,分析原因并修复,不要跳过失败的测试 5. 所有修改完成后,总结改了哪些文件、为什么改

Cursor 的 agent 模式会读取这些规则,然后按照流程执行。我实测下来,把工作流程写清楚之后,Cursor 的自主性明显提升,不再需要我一步步指挥。

3.4 三个工具的回路能力对比

用了这么久,我对三个工具在回路搭建上的特点有个大致判断,整理成表格方便你选型:

维度Claude CodeCodexCursor
上下文固化CLAUDE.md,支持分层配置文件 instructions 字段.cursor/rules 目录,多文件
行动能力读写文件、执行命令、跑测试读写文件、执行命令agent 模式,读写文件、执行命令
权限控制相对宽松,靠提示约束配置字段明确控制规则文件约束
验证触发靠上下文文件里的指令靠 instructions 里的指令靠 workflow 规则
记忆层支持手动维护 NOTES.md手动维护手动维护

从表格能看出来,三个工具在回路搭建的核心能力上其实差不多,差别主要在配置方式和权限控制的粒度。Claude Code 最灵活但需要你自己约束,Codex 的权限控制最明确,Cursor 的规则体系最结构化。选哪个主要看你的使用习惯和项目需求。

4. 一个真实项目的回路实战

光讲概念和配置容易飘,我用一个实际项目把整套流程跑一遍。这个项目是一个小型的任务管理 API,用 TypeScript + Express 写的,大概十几个文件。我会展示从零搭建回路到完成一个功能开发的完整过程。

4.1 项目初始化阶段的回路搭建

项目刚开始的时候,我做的第一件事不是写代码,而是搭回路。具体步骤是:

  1. 建好目录结构,把空文件和占位内容放进去
  2. 写好CLAUDE.md(或者对应工具的上下文文件)
  3. 配好验证命令,确保能跑通
  4. 写一个最简单的测试,验证回路能转起来

第三步特别重要。很多人配了验证命令但从来没跑过,结果模型真去跑的时候发现命令是错的,整个回路就断了。我的习惯是先手动把每条验证命令跑一遍,确认能正常执行、输出符合预期,再写进上下文文件。

第四步是验证回路是否真的能转。我会故意让模型改一个简单的东西,比如给某个函数加一行日志,然后看它会不会主动去跑验证命令。如果它改完就停了,说明上下文文件里的指令没写清楚,需要调整措辞。

4.2 用回路完成一个功能开发

回路搭好之后,开发功能就变成了"描述需求 + 关键节点把关"。我拿"给任务列表加一个按状态筛选的功能"这个需求举例,完整过程是这样的:

第一步,描述需求。我会写得比较具体,包括输入输出、边界条件、涉及的模块。比如:"在 GET /tasks 接口上加一个 status 查询参数,可选值是 pending、done、all,默认 all。筛选逻辑放在 service 层,不要在 route 层写业务逻辑。"

第二步,让模型先读代码。这一步很多人会跳过,直接让模型改。但模型如果不了解现有实现,很容易改出风格不一致或者破坏现有逻辑的代码。我会明确要求:"先阅读 src/routes/tasks.ts 和 src/services/taskService.ts,理解现有实现后再动手。"

第三步,模型修改 + 自主验证。模型改完代码后,会按照CLAUDE.md里的指令跑 typecheck、test、lint。如果测试失败,它会自己分析原因并修复。这一步我一般不介入,除非它连续几次修不好。

第四步,我检查关键决策。模型跑通验证后,我会看几个关键点:筛选逻辑放在 service 层了吗?边界条件处理了吗?有没有引入不必要的依赖?这些是验证命令抓不到的,需要人来判断。

第五步,补充测试。如果模型没写测试,我会要求它补上。测试是验证层的一部分,但新功能的测试往往需要人来判断覆盖得够不够。

整个流程下来,我实际介入的时间大概只占 20%,剩下 80% 都是模型在自主完成。这就是回路的价值——把人的精力集中在判断和决策上,把执行和验证交给系统。

4.3 回路跑偏时的排查思路

回路不是搭好就一劳永逸的,跑着跑着会偏。我遇到过几种典型的跑偏情况,分享一下排查思路:

情况一:模型不跑验证命令。原因通常是上下文文件里的指令不够明确,或者验证命令本身有问题。排查方法是先手动跑一遍验证命令,确认没问题,然后检查上下文文件里的措辞是不是够直接。我后来把"必须执行"改成了"执行以下命令,如果失败必须修复后再继续",效果好了很多。

情况二:模型改了不该改的文件。这是权限边界没设好。Claude Code 靠提示约束,需要在上下文文件里明确列出禁止修改的路径。Codex 和 Cursor 可以用配置字段硬性限制。我的经验是能硬性限制就别靠提示,提示约束总有失效的时候。

情况三:模型反复修不好同一个问题。这种情况通常是问题本身超出了模型的能力范围,或者上下文信息不足。我的做法是介入,把问题拆得更细,或者补充关键信息。硬让模型自己转下去只会浪费 token。

情况四:回路越跑越慢。这往往是因为记忆层文件积累太多,每次会话都要读一大堆。我的做法是定期整理记忆层,把已经固化到代码里的经验删掉,只保留还有价值的。

5. 让回路真正稳定的几个关键细节

前面讲了回路的搭建和实战,这一节聊几个让回路从"能跑"到"稳定跑"的关键细节。这些是我踩了不少坑之后才总结出来的,官方文档里基本不会提。

5.1 验证命令要快,否则回路会卡死

验证层的命令执行速度直接决定回路的效率。如果每次改代码都要跑一个五分钟的完整测试套件,模型等结果的时间比干活的时间还长,整个回路就卡死了。

我的做法是分层验证:快速检查(typecheck、lint)每次改完都跑,完整测试只在关键节点跑。在上下文文件里写清楚什么时候跑哪一层:

## 验证策略 - 每次修改后:运行 `npm run typecheck` 和 `npm run lint:quick` - 完成一个完整功能后:运行 `npm test` - 提交前:运行 `npm run test:full`

这样模型日常迭代时跑的是快命令,不会卡在等待上。

5.2 上下文文件要定期清理,别让它变成垃圾场

上下文文件用久了会膨胀。一开始可能只有几十行,用几个月变成几百行,里面塞满了各种临时约束和已经过时的规则。文件越长,模型抓重点的能力越差。

我的习惯是每个月清理一次上下文文件。清理的标准是:这条规则现在还成立吗?模型不写这条会犯错吗?如果答案是否定的,就删掉。清理完之后,模型的表现往往会有明显提升。

5.3 记忆层要记"为什么",不只是"是什么"

记忆层最容易犯的错是只记结论不记原因。比如记一条"不要用 X 库",但没记为什么。下次遇到类似场景,模型不知道原因,可能换个地方又用了类似的库。

好的记忆条目应该包含三部分:现象、原因、对策。比如:

## 2024-XX-XX 日期库的坑 - 现象:用 dayjs 处理时区转换时结果不对 - 原因:项目配置的默认时区是 UTC,但 dayjs 默认用本地时区 - 对策:所有时区转换必须显式指定时区,或者用项目封装的 dateUtils

这样记录,模型下次遇到时区相关的问题就能自己避开。

5.4 回路不是越自动越好,关键节点必须留人

最后这点最重要。Loop Engineering 的目标是减少人的重复劳动,不是完全取代人。有些节点必须留人把关:

  • 架构决策:引入新依赖、改变模块划分这类决策,模型给建议,人拍板
  • 安全相关:涉及认证、授权、数据处理的代码,必须人工审查
  • 对外接口:API 的输入输出格式一旦定了就不好改,需要人确认
  • 性能关键路径:模型写的代码可能功能对但性能差,需要人判断

我的原则是:执行和验证可以自动化,判断和决策必须人工。把这条线划清楚,回路才能真正稳定运行,而不是跑着跑着出个大问题。

6. 回路工程的进阶玩法与常见误区

基础的回路搭好之后,还有一些进阶玩法能让效率再上一个台阶。同时也有几个常见的误区,我见过不少人掉进去,这里一并说说。

6.1 多回路并行:不同任务用不同的回路

一个项目里往往有多种类型的任务:写新功能、修 bug、重构、写文档。这些任务的回路其实应该不一样。写新功能需要完整的验证流程,修 bug 需要先复现再修,重构需要额外的回归测试。

我的做法是为不同类型的任务维护不同的上下文片段。主上下文文件放通用的东西,然后针对特定任务类型有专门的补充文件。比如修 bug 的时候,我会额外加载一个debug-workflow.md,里面写清楚"先写一个能复现 bug 的测试,再修代码,修完确认测试通过"。

这种多回路的设计让每种任务都有针对性的流程,比一套流程打天下要高效得多。

6.2 回路之间的经验复用

不同项目的回路其实可以互相借鉴。我在 A 项目里总结的验证策略,稍微改改就能用到 B 项目。我的做法是维护一个个人回路模板库,把常用的上下文片段、验证命令、工作流程都存起来,新项目直接拿来改。

这个模板库不需要多复杂,一个文件夹放几个 markdown 文件就够了。关键是养成习惯:每次在项目里总结出好的实践,就抽出来放进模板库。用不了多久,你就有了一套自己的回路工具箱。

6.3 常见误区一:把回路当成提示词模板

这是最常见的误区。很多人以为 Loop Engineering 就是收集一堆好用的提示词,其实完全不是。提示词是单次的、静态的,回路是持续的、动态的。回路的重点在于结构——上下文怎么组织、验证怎么触发、经验怎么积累,而不是某句话怎么写。

我见过有人花大量时间打磨提示词的措辞,但从来不搭验证层,结果模型每次改完代码都要他手动检查。这就是没理解回路的本质。

6.4 常见误区二:追求全自动,忽略可观测性

另一个误区是追求"完全不用管"。有些人把回路搭得特别自动,模型自己改代码、自己跑测试、自己提交,人完全不看。这种做法短期看起来很爽,但一旦出问题就很难排查,因为你不知道中间发生了什么。

我的做法是保留完整的可观测性。模型每次行动都要有明确的输出,改了哪些文件、跑了什么命令、结果是什么,都要能看到。这样出问题的时候能快速定位,而不是抓瞎。

6.5 常见误区三:回路搭好就不管了

回路是需要维护的。项目在变,工具在更新,回路也得跟着调整。我见过有人半年前搭的回路,现在还在用,结果里面很多规则已经过时了,模型经常被误导。

我的习惯是每次项目有大的变动(换框架、改架构、加新模块)就检查一遍回路,看看哪些地方需要更新。平时也会留意模型的表现,如果发现它经常犯某类错误,就说明回路里缺了对应的约束,需要补上。

回路工程说到底是一种工程思维:把重复的事情系统化,把判断的事情留给人。工具会变,模型会升级,但这个思路是不变的。把这条思路吃透,不管以后出什么新工具,你都能快速搭出适合自己的回路。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/8 4:07:20

LLM API密钥托管与向量库加密实战指南

1. 项目概述:为什么一个API密钥能卡住整个大模型应用上线我去年帮一家做智能客服SaaS的团队上线RAG系统,临上线前夜被安全审计拦下来——他们把OpenAI和Anthropic的API Key直接写在Python配置文件里,还用Git提交到了私有仓库。更绝的是&#…

作者头像 李华
网站建设 2026/10/8 4:06:43

744行替代Open WebUI:llama.cpp+Qwen3极简本地聊天栈实战

1. 为什么我决定把 Open WebUI 从聊天栈里拿掉先说结论:我并不是觉得 Open WebUI 不好。恰恰相反,它是我过去大半年用得最顺手的本地大模型前端之一,模型切换、对话历史、多用户管理、RAG 插件,该有的都有,界面也漂亮。…

作者头像 李华
网站建设 2026/10/8 4:06:36

垂直公司生态位战略:从依附生存到跨联盟套利

很多垂直领域的公司做得很累,累在哪儿呢?产品不比别人差,团队也挺拼,价格卷来卷去,利润却薄得像纸。我见过太多这样的团队,问题往往不出在产品和执行上,而出在一个很少被摆上台面的词&#xff1…

作者头像 李华
网站建设 2026/10/8 4:06:29

递归自改进:从有限自细化到自主研究环的实践指南

先说一个我最近被反复问到很多次的现象:很多人已经在让大模型跑“自己改自己的提示词”这类实验,但几乎所有人都会卡在同一个地方——改几轮之后效果不涨反跌,或者改到一定程度就原地打转。这个问题不是方法错了,而是大家对“递归…

作者头像 李华
网站建设 2026/10/8 4:06:14

降AIGC平台全行业测评:从知网与万方检测逻辑到10款工具实测

1. 降AIGC平台测评之前:先弄懂检测到底在查什么AIGC检测这阵风,把很多写稿的人吹得有点蒙圈。前两年大家还在愁查重率,现在查重过了还不够,又冒出一个“疑似AI生成比例”。更麻烦的是,知网AIGC检测3.0、万方AIGC检测这…

作者头像 李华
网站建设 2026/10/8 4:06:13

DeepSeek Harness 插件开发入门:从环境搭建到 cordis 插件实战

1. 从零理解 DeepSeek Harness 插件体系到底在解决什么问题第一次接触 DeepSeek Harness 插件开发的人,十有八九会卡在同一个地方:文档里到处是profile、cordis、dsh plugin这些词,但没人告诉你它们之间是什么关系。我当初也是翻了好几个仓库…

作者头像 李华