【Codex with ChatGPT 源码学习②】694 行 SKILL.md:Markdown 怎么指挥 Codex 干活?

本文深入解析开源项目codex-with-chatgpt中694行SKILL.md文件的技术机制,阐明Markdown格式的Skill如何作为操作规程驱动Codex Agent完成浏览器控制、CLI调用、状态机管理与断线恢复。重点涵盖YAML Frontmatter触发逻辑、Golden Rules行为约束、C2C CLI桥梁作用、内置浏览器API调用规范,以及跨Agent任务状态机设计,揭示模型解释层与程序执行层的协同架构。

【Codex with ChatGPT 源码学习②】694 行 SKILL.md:Markdown 怎么指挥 Codex 干活?

系列说明:本文是对社区开源项目 XiaoDuoYa/codex-with-chatgpt 的技术解读,非 OpenAI 官方教程、非该项目维护者发布的文档。研究基于 2026-10-22 可访问的 main 分支;分支内容会变化,建议阅读时核对具体 commit。
证据标记:[源码] 表示能从对应源文件确认;[文档] 是项目约定;[推断] 为技术分析;[建议] 为改进方案,不能误当作已经实现的能力。文中命令和请求示例若未专门注明,均为教学示例,并非实际执行结果。

推荐 优快云 标签:Codex Agent Skill Markdown AI Agent 工作流 源码精读 Agent 编排 状态机 Codex 执行机制

摘要:解读 Skill 元数据、触发、Golden Rules、CLI、浏览器规则和恢复步骤,解释“模型解释规程”与“程序强制规则”的区别。

本章以仓库 main 分支当前公开的 skill/SKILL.md 为依据,结合 docs/protocol.md 和 docs/architecture.md 分析。

本章最重要的问题:一个 Markdown 文件,为什么能让 Codex 操作浏览器、启动服务、维护任务状态、调用 ChatGPT 并反复修改代码?

答案是:SKILL.md 并不直接执行这些操作,它是交给 Codex Agent 解释的一套操作规程。真正的操作由 Codex 已经具备的工具、C2C CLI 和 Node.js Bridge 完成。

一、先建立 Skill 的完整心智模型

完整心智模型
这有点类似传统软件中的:

Agent 系统传统软件中的类比
SKILL.md操作规程 + 工作流定义
Codex 模型解释规程并做决策的控制器
Codex Harness工具运行时
c2c CLI服务管理及状态操作接口
MCP Bridge数据访问服务
docs/protocol.md通信协议规范
Session / Checkpoint持久化状态

但这个类比有一个重要边界:Codex 并不是确定性的脚本解释器。它通过模型理解和执行指令,可能出现理解偏差、工具失败或者执行步骤遗漏。

因此,Skill 的约束属于 Agent 行为约束,而文件系统沙箱、OAuth、权限检查等才属于软件层面的强制边界。

二、SKILL.md 的实际结构

源码仓库的 main 分支版本约有 694 行。为了便于研究,可以按职责分成以下部分。

源码区域内容主要解决的问题
1–8YAML 元数据如何发现 Skill
9–96定位与 Golden RulesCodex 应遵循哪些规则
97–167In-app Browser如何使用内置浏览器
168–211Locations / Update如何定位程序及更新
212–343Connection / Setup如何初始化 MCP 连接
344–468Conversation Management如何管理 ChatGPT 会话
469–591Coding Task如何完成开发闭环
592–609Media Workflow如何处理图片、视频产物
610–末尾Disconnect / Recovery如何断开和恢复连接

其中有五部分尤其值得深入:Skill 触发、浏览器调用、CLI、状态机、任务执行。

三、第一部分:Skill 是如何触发的?

3.1 YAML Frontmatter

文件开头的真实定义是:

---
name: codex-with-chatgpt
description: >
  Use ChatGPT (web) as the planning and review brain for Codex coding sessions,
  while Codex keeps full execution ownership. Use when the user says
  "使用 Codex with ChatGPT ..." / "Set up Codex with ChatGPT" / "用 ChatGPT 规划",
  when they ask to connect ChatGPT to the current workspace, disconnect it,
  or run a task through the ChatGPT planning loop.
---

这是整个 Skill 的入口。

name 是 Skill 标识;description 是帮助 Agent 判断何时应该使用该 Skill 的文字描述。

这里有一个重点:它不是传统意义上的关键词触发器。

例如,传统软件可能采用:

if "使用 Codex with ChatGPT" in user_message: 
   run_c2c()

但 Skill 的工作方式不是这么简单。

Codex 会根据当前可用 Skill 的描述、用户任务和上下文判断是否采用这个 Skill。用户也可以显式指定使用它。

3.2 三种常见触发方式

用户输入预期行为
“使用 Codex with ChatGPT 完成登录模块”匹配 Skill 并启动协作工作流
“帮我连接 ChatGPT 到当前工程”进入连接配置工作流
“用 ChatGPT 规划当前开发任务”可能根据描述匹配该 Skill

注意:这里说的是 Skill 作者定义的预期行为,不是对每个 Codex 版本都能成功触发的保证。

3.3 Skill 安装的位置

源码给出了两项关键路径:

<codex-home>/
└── skills/
    └── codex-with-chatgpt/
        └── SKILL.md

Codex Home 的解析规则为:

如果设置了 CODEX_HOME:
    使用 CODEX_HOME

否则:
    Linux/macOS: ~/.codex
    Windows: %USERPROFILE%\.codex

项目安装时还会把源码中的 <ACTUAL_CHECKOUT_PATH> 替换成实际的仓库路径。

因此必须区分:

  • Skill 安装目录:供 Codex 发现和读取。
  • C2C 源码目录:保存 TypeScript、CLI 和 Bridge 实现。
  • 用户 Workspace:Codex 真正要开发的工程。

这三个目录可以完全不同。

四、第二部分:Golden Rules 是什么?

源码第 19–96 行定义了几条核心规则。

它们不是业务逻辑本身,而是整个协作系统的行为约束。

其中最重要的是以下几类。

4.1 Codex 保留执行权

源码明确规定 Codex 负责:

  • 编辑代码
  • Shell 命令
  • Git 操作
  • 测试
  • 错误恢复

ChatGPT 负责高层规划、代码理解、审查和调试策略。

这意味着 ChatGPT 返回的是计划,Codex 再将计划转化为实际工具调用。

4.2 不通过聊天消息传输源码

Skill 要求不把文件正文、Diff 和日志粘贴进 ChatGPT 对话,而是让 ChatGPT 通过 MCP 自主查询。

目的有三个:

  1. 控制消息更短。
  2. 避免重复传输大量相同内容。
  3. ChatGPT 能按需读取最新版本的文件,而不是只依赖某一次聊天里的旧副本。

需要强调:文件内容仍然会经由 MCP 发送给 ChatGPT,并不是始终留在本地。

4.3 浏览器认证限制

规则要求不能直接操作 OAuth Token、Cookie 或 Session Storage,浏览器中自动输入的凭证只限于项目定义的配对码。

这是一种降低凭据暴露风险的设计,但不是绝对的安全保证。

4.4 浏览器类型限制

这是仓库比较特殊的地方。

它明确指定 control-in-app-browser,要求使用 Codex 的 iab 浏览器能力,不允许把普通外部 Chrome、Edge 或 Safari 当成默认执行环境,也要求避免截图坐标点击式 Computer Use。

所以不能简单地说:

这个项目就是用 Playwright 操作 Chrome。

更准确地说,它使用 Codex 内置浏览器的控制 API,底层某些操作可能使用 Playwright 风格的 DOM 能力。

4.5 Doctor Gate

启动正式协作前,需要确保本地 Bridge、MCP、隧道及连接状态满足条件。

逻辑上类似:

检查环境
    │
    ├── 正常 → 允许 ChatGPT 协作
    │
    └── 异常 → 修复或中止

这是一个非常值得借鉴的设计:把运行环境是否就绪变成执行任务的前置条件。

但源码中的“静默修复”和自动更新也意味着存在自动修改本地配置的行为。对正式工程,建议增加人工确认及版本固定机制。

五、第三部分:Codex 如何真正操作 ChatGPT 浏览器?

这是整个 Skill 中最容易被误解、也最有技术研究价值的部分。

5.1 不是 Skill 自己打开浏览器

源码第 97–105 行规定,Codex 应调用内置浏览器能力。

核心 API 形态是:

// 以下是从 SKILL.md 摘出的关键调用
setupBrowserRuntime();

const iab = await agent.browsers.get("iab");

iab 是 in-app browser 的标识。

从软件架构角度可以理解为:

SKILL.md
   │
   ▼ 指导 Codex
Codex Agent
   │
   ▼ 调用浏览器工具
Browser Runtime
   │
   ▼ 浏览器交互
ChatGPT Web UI

Skill 只告诉 Codex 应调用什么接口;实际浏览器能力由运行环境提供。

需要注意,SKILL.md 的这些 API 不能单独复制到普通 Node.js 程序中运行。它们依赖相应的 Codex 浏览器运行时。

5.2 浏览器 Tab 的生命周期

Skill 规定了一个很有意思的设计:整个 Codex Session 尽量复用同一个 ChatGPT 标签页。

关键操作包括:

// 概念性片段:仅保留核心 API
const tab = await iab.tabs.new();

await tab.goto("https://chatgpt.com/");

await tab.markHandoff();
await tab.markDeliverable();

其中:

方法在项目中的用途
tabs.new()首次建立 ChatGPT 标签页
tab.goto()导航到指定页面
markHandoff()标记交互任务需要保持浏览器状态
markDeliverable()标记应该保留的工作页面
visibility.set(true)使内置浏览器对用户可见

最后两种标记不是标准浏览器 Web API,而是特定浏览器运行环境的能力。

5.3 Codex 如何发送和接收消息?

SKILL.md 没有定义一个普通的 HTTP ChatGPT API 调用,而是要求 Codex 使用浏览器页面的交互能力。

概念上,发送消息可分为四步:

1. 找到 ChatGPT 输入区域
2. 输入 C2C 协议消息
3. 提交消息
4. 检查页面是否出现相应回复

源码还要求:

  • 尽量使用 DOM 检查而不是持续截图。
  • 每次发送后保持同一浏览器标签页。
  • 如果页面仍在生成回复,不要重复发送。
  • 浏览器超时不等于 ChatGPT 没有收到消息。
  • 识别 STATE: PLAN、STATE: DONE 或 STATE: BLOCKED 后再继续。

这些约束的目标是避免重复执行任务。

不过它们仍然属于基于网页 UI 的交互机制,不能获得官方模型 API 那样明确的请求 ID、响应结构和交付语义。

这也是该项目的一项主要架构弱点。

六、第四部分:c2c CLI 在系统中承担什么?

理解了 Skill 和浏览器之后,就要研究另一半:传统软件程序。

源码指定的命令入口为:

node "<checkout>/bin/c2c.js" <command>

或者安装了全局命令后:

c2c <command>

SKILL.md 并不自己创建 MCP 服务器,而是让 Codex 执行 CLI 命令,进而调用项目的 TypeScript/Node.js 实现。

6.1 主要 CLI 分工

CLI用途
c2c setup初始化 Workspace Bridge
c2c doctor检查并修复连接环境
c2c prefs保存机器级配置偏好
c2c tunnel status检查公网隧道状态
c2c pair生成连接配对码
c2c session读取当前会话状态
c2c session set更新会话状态和 Checkpoint
c2c record记录任务执行结果
c2c unpair撤销连接授权

例如,假设 Codex 正在开发的项目位于:

E:\Projects\demo

它可以执行:

c2c doctor -w E:\Projects\demo --json

c2c session -w E:\Projects\demo --json

其中 -w 指的是被开发的 Workspace,而不是 C2C 工具自己的仓库目录。

  • -json 的作用是让 Codex 更容易读取机器可解析的状态。

6.2 第一次连接如何建立?

根据 SKILL.md 的 Setup 工作流,过程大致如下:

  1. 检查 Node.js、cloudflared 和 C2C 构建产物
  2. 初始化本地 Bridge 和对应 Workspace
  3. 配置公网隧道,得到 MCP Server URL
  4. 在 ChatGPT 创建对应的 MCP 连接
  5. 通过 OAuth 和临时配对码完成授权
  6. 在 ChatGPT 中调用 workspace_info 验证正确的 Workspace
  7. 保存连接和会话记录,进入 Ready 状态

这里必须区分两种授权:

ChatGPT 网页登录:用户用自己的 ChatGPT 账户登录,以使用 ChatGPT 服务。

MCP OAuth 授权:ChatGPT 作为客户端,获得访问本地 C2C Bridge 的权限。

两者不是同一套认证机制,也不应共享密码或 Token。

源码还规定首次配置可以选择自动或手动引导,并且一个 Workspace 只绑定一个特定的连接。

七、第五部分:真正的核心——任务状态机

前面的组件负责“能不能连接”,状态机负责“连接后怎么工作”。

源码的 Coding Task 工作流位于第 469–591 行,是整个 Skill 最值得仔细学习的部分。

7.1 状态机不是一个一直运行的 JavaScript 循环

例如,项目并没有简单地定义:

while (true) {
  const plan = await askChatGPT();
  await execute(plan);
}

相反,状态转换由 Codex Agent 按 Skill 执行,配合浏览器消息和本地 Session Checkpoint 记录。

状态流是:
任务状态机

再看每个状态由谁产生:

状态产生者含义
INITCodex发起任务
PLANChatGPT返回可执行计划
EXECUTINGCodex正在执行
EXECUTEDCodex当前迭代执行完成
REVIEWChatGPT正在通过 MCP 审查,通常是隐含阶段
DONEChatGPT建议结束任务
BLOCKEDChatGPT存在阻塞,需要处理
ERROR任意一方协议或基础设施故障
HANDOFFCodex将任务交接给新 ChatGPT 会话

这里的 DONE 是 ChatGPT 根据检查结果给出的协议结论,并非数学意义上的代码正确性证明。

7.2 状态机还分两个层次

这个设计比看上去复杂一点。

第一层:跨 Agent 通信状态

通过 ChatGPT 对话中的 [C2C] 消息传递。

第二层:Codex 本地 Checkpoint

记录当前已经执行到哪一步,例如:

  • PLAN_RECEIVED
  • EXECUTING
  • EXECUTED_LOCAL
  • EXECUTED_SENT

为什么要这么做?

假设 Codex 已经执行了数据库迁移,但在准备向 ChatGPT 发送 EXECUTED 时崩溃了。

重新启动后,系统不能直接重新执行数据库迁移,否则可能造成重复操作。

如果 Checkpoint 显示 EXECUTED_LOCAL,则应继续发送执行结果,而不是重新执行刚才的任务。

这类似分布式任务系统中的持久化检查点机制,但其实际可靠性仍取决于状态写入的时机、原子性和外部操作的幂等性。

八、第六部分:用一个真实开发任务完整模拟

我们用 Python 工程的“增加 CSV 导出功能”来模拟一次完整任务。

假设当前目录:

demo-project/
├── src/
│   ├── report.py
│   └── data.py
├── tests/
│   └── test_report.py
├── README.md
└── pyproject.toml

以下是教学模拟消息,不是已经实际运行的记录。

第一步:Codex 发起 INIT

用户输入:

使用 Codex with ChatGPT,为当前项目增加 CSV 导出功能。

Codex 通过 Skill 匹配 Coding Task 工作流,先检查 Bridge,再在 ChatGPT 浏览器中发送:

[C2C]
STATE: INIT
TASK_ID: c2c_a123
ITERATION: 0

GOAL:
为报表模块增加 CSV 导出功能。

INSTRUCTION:
通过 MCP 分析当前工程,
生成下一轮可执行开发计划。

注意消息中没有源码。

第二步:ChatGPT 读取项目

ChatGPT 收到请求后,理论上可以按需调用这些 MCP 工具:

workspace_info
    ↓
list_directory("src")
    ↓
read_file("src/report.py")
    ↓
read_file("tests/test_report.py")
    ↓
git_status

这些调用由 ChatGPT 工具系统发往 MCP Bridge,而不是由 Codex 复制文件内容。

第三步:ChatGPT 返回 PLAN

[C2C]
STATE: PLAN
TASK_ID: c2c_a123
ITERATION: 1

GOAL:
实现 CSV 报表导出。

RATIONALE:
当前模块已有数据查询能力,
可以在现有报表接口上扩展。

ACTIONS:
1. 在 report.py 增加 CSV 导出函数。
2. 使用标准 csv 模块进行编码。
3. 添加空数据、特殊字符测试。

FILES_LIKELY_INVOLVED:
src/report.py
tests/test_report.py

TESTS:
pytest tests/test_report.py

SUCCESS_CRITERIA:
CSV 内容正确,原功能不回归。

收到 PLAN 后,Codex 更新本地 Checkpoint:

c2c session set -w E:\Projects\demo-project `
  --protocol-state PLAN_RECEIVED `
  --waiting-for none `
  --next-step "execute PLAN"

这一步的意义是:即使 Codex 进程随后重启,也知道当前已经取得计划。

第四步:Codex 执行计划

Codex 进入 EXECUTING,使用自己的编辑和终端工具修改文件。

例如生成:

import csv
import io

def export_csv(rows):
    output = io.StringIO()
    writer = csv.writer(output)
    writer.writerows(rows)
    return output.getvalue()

接着运行:

python -m pytest tests/test_report.py -q

假设测试结果为:

8 passed

注意 ChatGPT 并没有直接执行这些动作。

第五步:Codex 记录结果

源码要求通过 c2c record 写入执行记录:

c2c record -w E:\Projects\demo-project `
  --task c2c_a123 `
  --iteration 1 `
  --changed-files "src/report.py,tests/test_report.py" `
  --tests "8 passed" `
  --exit-status ok

若同时保存测试输出,还可以指定 --command、--output-file 和 --exit-code。

Bridge 将执行记录提供给 ChatGPT,但会按照本地安全规则限制日志内容。

随后 Codex 更新状态为 EXECUTED_LOCAL,并通过浏览器向 ChatGPT 发送简短消息:

[C2C]
STATE: EXECUTED
TASK_ID: c2c_a123
ITERATION: 1

RESULT:
Execution finished.

CHANGED_FILES:
2

TESTS:
8 passed

Please review the current git diff
and execution records through MCP.

第六步:ChatGPT 独立审查

ChatGPT 使用 MCP 读取:

git_diff
test_status
execution_summary
execution_output

假设审查发现 CSV 导出没有正确处理 UTF-8 BOM,而用户的需求明确要求兼容某些 Excel 导入场景。

ChatGPT 不应该直接返回 DONE,而应给出下一轮 PLAN,说明为什么需要修改、修改哪里以及如何验证。

Codex 随后执行第二轮。

最终审查通过,ChatGPT 返回:

[C2C]
STATE: DONE
TASK_ID: c2c_a123
ITERATION: 2

SUMMARY:
CSV 导出功能已实现,
相关测试和审查已完成。

Codex 清理当前任务 Checkpoint,并向用户汇报。

九、第七部分:断线恢复是如何实现的?

这部分体现了项目作者对长时间 Agent 工作流的考虑。

假设 Codex 在任务执行过程中退出,再次启动时:

c2c session -w E:\Projects\demo-project --json

可能读取到类似这样的概念性状态:

{
  "taskId": "c2c_a123",
  "iteration": 2,
  "protocolState": "EXECUTED_SENT",
  "waitingFor": "GPT_REVIEW"
}

这里展示的是便于理解的字段示例,并非声称完整 CLI 响应恰好具有这一 JSON 结构。

Codex 根据状态做不同处理:

Checkpoint恢复策略
INIT等待已经发送的 PLAN
PLAN_RECEIVED继续执行已收到的计划
EXECUTING检查并继续当前执行阶段
EXECUTED_LOCAL不重复执行,只发送结果
EXECUTED_SENT不重复发送,等待 ChatGPT 审查
DONE汇报结果并清理 Checkpoint
BLOCKED保留阻塞信息,等待处理

还有一个专门的 HANDOFF 协议。

当原来的 ChatGPT 会话丢失或需要切换时,Codex 可以创建新会话并发送简短的任务交接说明。新的 ChatGPT 会话再通过 MCP 查询当前代码,不需要将整个旧对话复制过来。

但是这里还缺少一个严格保证

考虑一个更极端的问题:

Codex 已经在 ChatGPT 网页按下发送按钮,但还未来得及写入 EXECUTED_SENT,程序就崩溃了。

重新启动时,Checkpoint 和网页的真实状态可能不一致。

这就是经典的分布式系统难题:消息交付和状态持久化之间存在失败窗口。

要达到强可靠性,通常还需要:

  • 唯一消息 ID 和幂等处理;
  • 明确的消息接收确认;
  • 状态持久化与外部副作用的恢复策略;
  • 防止重复执行非幂等命令。

C2C 的 Task ID、Iteration 和 Checkpoint 提供了部分基础,但不应将其理解为已经实现严格的 exactly-once 执行语义。

十、第八部分:从软件架构角度重新理解 Skill

现在可以回答一个更深入的问题:

为什么作者选择写一个 694 行左右的 Skill,而不是全部使用 TypeScript 编写一个工作流程序?

因为作者希望利用 Codex 已经具备的 Agent 能力。

传统程序需要明确规定每一步的控制逻辑:

plan = request_plan()
files = parse_files(plan)
modify_files(files)
result = run_tests()
review = request_review(result)

而使用 Skill,可以让 Codex 理解高层指令,自主选择如何修改文件、调用哪些测试命令以及如何处理普通工程错误。

两种架构各有优劣:

维度Skill 驱动确定性工作流引擎
开发灵活性高取决于设计
适配未知工程较容易通常需要适配
状态可预测性较弱较强
错误恢复依赖模型和持久化机制可以严格实现
自动化测试Agent 行为不容易完全复现相对容易
安全边界不能只依靠提示词可由程序强制
长期维护指令与工具均可能变化接口契约更明确

因此,可以把这个项目看作一种Agent 驱动编排 + 传统服务支撑的混合架构。

对于普通开发任务,这种模式很灵活;对于需要严格冻结、可重复验证和审计追踪的工程,则需要把关键状态转换、验证门禁和权限判定尽可能落实到程序代码。

十一、三个值得特别关注的源码设计

第一,自动更新机制。 SKILL.md 要求在工作流入口检查更新,发现新版本后执行 git pull、安装依赖、构建并重新安装 Skill。这很方便,但对要求版本固定的工程来说存在供应链及可重复性风险。

第二,ChatGPT Project 与 Workspace 映射。 新工程默认采用一个 Workspace 对应一个 ChatGPT Project 和一个 MCP 连接,而新的 Codex 对话可以在同一个 Project 内创建新的 ChatGPT 会话。这有助于任务隔离和上下文管理,却仍需要严格校验连接是否指向正确的 Workspace。

第三,不向用户展示内部技术细节。 Golden Rules 要求 Codex 尽量不向最终用户展示 MCP、OAuth、端口等内部信息。这有利于简化普通用户体验,但不适合直接照搬到开发、调试和安全审计模式。工程人员应能查看连接目标、权限变更、执行日志和失败原因。

这些都属于 Skill 作者设计的行为规则,而不是 Codex 平台本身的强制规定。

十三、Markdown 怎么指挥 Codex 干活?

13.1. 先看文件定位

[源码] skill/SKILL.md 在核对时约 694 行,开头采用 YAML frontmatter:

---
name: codex-with-chatgpt
description: >
  Use ChatGPT (web) as the planning and review brain
  for Codex coding sessions...
---

这里 name 提供技能标识,description 帮助 Codex 根据任务判断是否使用。它不是简单的 if 关键词 in 用户输入 脚本;用户也可以明确指定 Skill。

13.2. Skill 的作用和局限

用户目标

Codex Agent 发现并选择 Skill

模型解释 SKILL.md 指令

调用 Codex Harness 工具

C2C CLI

内置浏览器

文件编辑 / Shell / Git

本地 Bridge 与会话状态

ChatGPT Web

Skill 是操作规程,而不是独立 HTTP 进程、插件二进制或模型权重。它可规定“执行 c2c doctor”,但执行命令依赖 Codex 的 Shell 权限;规定“不要泄露秘密”也不能替代真实的文件权限控制。

13.3. Golden Rules 的工程含义

[文档] Skill 要求:源码和日志通过 MCP 按需读,不复制进浏览器消息;Codex 保留编辑、Shell、Git、测试权;ChatGPT 负责规划审查;通过内置浏览器 iab 操作页面;异常先检查本地服务,必要时进入人工配置;不同 Workspace 使用独立连接。

这些规则体现出模型决策层与软件执行层的分工。它们是对 Codex 的行为要求,并不构成 OS 级强制沙箱。

13.4. CLI 为什么重要?

[文档] 常用命令包括:

c2c doctor --json
c2c session -w E:\demo --json
c2c record -w E:\demo --task c2c_f81a --iteration 1 `
  --changed-files "src/report.py" --tests "8 passed" --exit-status ok

c2c doctor 用于检查连接和环境;
c2c session 查询本地会话;
c2c record 将执行结果写入可由 MCP 读取的记录。
具体命令选项以当前版本 CLI 帮助为准,上面路径只是示例。

13.5. 为什么 Skill 要区分会话与任务?

同一个 Browser Tab、ChatGPT Conversation、Workspace 和 Codex Task 不是同一对象。

[文档] Skill 定义 long-chat 与 project 两种会话复用模式;每个工作区应有明确的 ChatGPT 连接。Task ID 用于标识一次任务;Iteration 标识其中某轮;Checkpoint 则用于断点恢复。这些内容在第六篇深入拆解。

13.6. 自动修复与自动更新的两面性

遇到故障时,Skill 希望 Codex 执行检查和修复;部分入口还涉及版本更新。它可以降低新手配置成本,但[建议]正式环境锁定源码 commit、依赖版本和 Skill 版本,升级经过审查后再执行。

13.7. 最小思考练习

问:SKILL.md 中写着“必须读取 Git Diff 才能给出 DONE”,能否保证执行?

答:不能单靠文本保证。需要独立 Verifier 检查是否真的读取并审查了目标 Diff,且测试与交付规则真正满足要求。

十四. 小结

Skill 的核心价值是将复杂 Agent 协作规程封装成可加载的文本。下一篇将拆解它依赖的 iab 浏览器控制运行时。

源码阅读:SKILL.md


版权与引用:本文为独立整理与分析,引用项目名称、接口名称和少量必要代码片段以解释技术原理;原项目的代码许可证为 MIT。本文不代表原作者或 OpenAI 的立场。转载请保留原项目地址及本文出处。

系列导航:参见同一系列的「导读」及其他章节。
ChatGPT 负责思考,Codex 负责干活?从源码读懂 Codex with ChatGPT(系列导读)

【Codex with ChatGPT 源码学习①】整体架构:为什么要分离控制平面与数据平面?
【Codex with ChatGPT 源码学习②】694 行 SKILL.md:Markdown 怎么指挥 Codex 干活?
【Codex with ChatGPT 源码学习③】iab、DOM、Playwright:Codex 如何操作 ChatGPT 网页?
【Codex with ChatGPT 源码学习④】深入 MCP Bridge:从 HTTP 请求到安全读取源码的完整链路
【Codex with ChatGPT 源码学习⑤】深入 OAuth 2.1、PKCE 与 Cloudflare Tunnel:ChatGPT 如何安全连接本地 MCP?
【Codex with ChatGPT 源码学习⑥】多 Agent 任务状态机深度解析:Task ID、Checkpoint、执行证据与崩溃恢复
【Codex with ChatGPT 源码学习⑦】安全与可靠性审计:OAuth、MCP、Prompt Injection 与崩溃恢复

附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[未获取()] 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 55 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9512** mAP50-95 | 0.6746 Precision | 0.8796 Recall | 0.8825 train/box_loss | 0.8608 train/cls_loss | 0.7232 val/box_loss | 0.9955 val/cls_loss | 0.5511 【训练过程分析】 这轮训练我经历了从初始到稳定的曲折过程。前 20 个epoch,loss 曲线呈现了陡峭的下降趋势,mAP50 指标从 0.8 开始逐步攀升,仿佛在寻找一个合适的平衡点。然而,从第 21 个epoch 开始,mAP50 的提升速率显著放缓,整体曲线显得有些曲折,有时甚至停滞不前,让我一度以为训练出现了问题。直到第 35 个epoch,loss 开始逐渐趋于平稳,这标志着模型已经找到了一个较好的收敛区间。到了最后的 20 个 epoch,尽管 mAP50 依旧在稳步上升,但提升幅度已经不大,这意味着模型已经接近其性能天花板。 在这个过程中,我重点关注了 box_loss 和 cls_loss 的变化。初期阶段,box_loss 快速下降,从 0.9 逐渐降至 0.86,而 cls_loss 则从 0.75 逐步下降至... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。
内容概要:本文以“月哨兵”科幻角色数字雕刻工程为实例,系统构建了从程序化粗模到高精度雕刻的完整数学模型。研究涵盖重拓扑、Catmul-Clark细分、笔刷位移场建模、多部件组装及精细度上限分析等核心环节。通过ZRemesher将304,050顶点粗模重拓扑为28,600顶点的全四边形网格,并逐级细分至732万面,实测面数递推F(k)=F₀·4ᵏ完全符合理论。利用ZBrush Python接口注入Standard笔刷操作,首次通过同拓扑OBJ逐顶点差分获得真实位移场数据,实测最大位移0.454873,8.756%顶点发生显著位移。提出“理论-内存-拓扑-视觉”四层精细度上限模型,指出在24GB内存条件下工程合理上限为10⁷~10⁸面,视觉收益受渲染分辨率制约趋于饱和。最终完成755万面的组装网格并经工程文件回读验证一致性。; 适合人群:具备三维建模与数字雕刻基础,熟悉ZBrush工作流,从事角色资产开发或程序化内容生成的技术美术、图形学研究人员及高阶数字艺术家。; 使用场景及目标:①理解Catmul-Clark细分曲面在工业级雕刻流程中的数学机制;②掌握基于脚本驱动的可复核雕刻工程构建方法;③评估高面数模型的内存代价与视觉收益平衡;④学习重拓扑、位移场量化、多部件合并等关键技术的工程实现。; 阅读建议:本文强调数学建模与实证闭环,建议结合附录中的脚本与数据文件进行复现实践,重点关注逐顶点差分、细分递推验证与四层上限模型的构建逻辑,以深入掌握高精度数字雕刻的系统性工程方法。
内容概要:本文围绕PUMA(Propagator Method-based DOA Estimation)算法在波达方向(DOA)估计中的改进实现展开,重点在于通过Matlab编程对算法进行仿真与性能验证。作为阵列信号处理领域的高分辨率DOA估计算法,PUMA在传统方法基础上提升了估计精度与鲁棒性,尤其在低信噪比、小样本等恶劣条件下仍能保持优异性能。文中系统阐述了PUMA算法的理论基础、数学模型及其相较于MUSIC、ESPRIT等经典算法的优势,并通过仿真实验进行对比分析,展示其在分辨力、稳定性和计算效率方面的综合优势,适用于实际雷达、无线通信与电子侦察等应用场景。; 适合人群:具备信号处理、通信工程、电子信息或雷达系统等相关专业背景的研究生、科研人员及工程技术人员,熟悉阵列信号处理理论与Matlab编程环境者尤佳; 使用场景及目标:①用于学术研究中DOA估计算法的性能优化与新方法对比验证;②应用于雷达系统、5G/6G通信、智能天线、电子对抗等领域的高精度空间谱估计任务;③作为Matlab仿真实践资源,支持课程设计、学位论文复现与科研项目开发; 阅读建议:建议结合阵列信号处理基础知识体系学习本资源,重点关注PUMA算法的改进机制与核心代码实现逻辑,建议动手运行并调整仿真参数以深入理解不同因素(如阵元数、信噪比、快拍数)对估计性能的影响。
内容概要:本文系统整理了一套面向科研仿真的Matlab/Simulink资源合集,涵盖电力电子、控制理论、信号处理、电力系统、智能优化算法、机器学习、图像处理、路径规划、通信技术、雷达追踪、车间调度等多个前沿科研领域。重点资源包括三相PWM整流器双闭环控制、磁流变阻尼器非线性特性建模、双有源桥(DAB)DC-DC变换器优化控制、电网不平衡下的功率平衡策略、卡尔曼滤波状态估计、多类型路径规划与调度算法等,多数为顶级EI期刊成果复现,配套仿真模型、原理说明、参考文献及代码,具备较强的学术参考价值与工程实践意义。; 适合人群:适用于从事电气工程、自动化、控制科学与工程、信号与信息处理、计算机、机械电子等方向的硕士/博士研究生及科研人员,要求具备Matlab/Simulink基础操作能力及相关专业背景;也适合高校教师指导课程设计、毕业设计或科研项目开发。; 使用场景及目标:①辅助高水平论文研究与期刊成果复现;②支撑课程设计、毕业设计与科研项目开发;③深入理解先进控制策略(如VOC、SVPWM、模糊PID、滑模控制)与系统建模方法;④结合YALMIP等优化工具开展算法设计与验证;⑤拓展智能优化、机器学习、路径规划等跨学科研究能力。; 阅读建议:建议按照资源目录顺序系统浏览,优先关注标注“顶级EI复现”的高价值模型,结合公众号“荔枝科研社”提供的网盘资料与技术文档进行仿真实践,通过动手调试加深对算法逻辑与系统动态特性的理解,提升科研建模与创新能力。
内容概要:本文围绕“双碳”战略背景,系统阐述了基于Simulink的汽车碳排放建模与仿真技术,重点引入模糊PID控制优化动力系统性能,以实现节能减排目标。文档整合了多个Matlab/Simulink科研仿真案例,涵盖无刷直流电机(BLDC)控制、三相PWM整流器、电池管理系统、路径规划、信号处理、智能优化算法及图像处理等领域,全面展示Matlab在智能控制与绿色能源系统中的应用价值。同时强调科研应兼具严谨逻辑、创新思维与工具赋能,并提供完整的仿真资源链接与学习路径支持实践落地。; 适合人群:具备Matlab/Simulink基础,从事自动化、电气工程、车辆工程、控制科学、电力电子及智能制造等相关领域的科研人员或高年级本科生、研究生;适用于开展节能减排、新能源系统优化、智能控制算法研究等课题的研究者。; 使用场景及目标:①学习在Simulink中构建汽车能耗与排放仿真模型并应用模糊PID进行动态优化;②掌握BLDC、PWM整流器等关键部件的建模与控制策略设计;③借鉴丰富案例提升科研效率,拓展在智能控制、路径规划、信号处理等方向的应用能力;④通过提供的网盘资源获取完整代码与资料,支撑论文写作与项目开发。; 阅读建议:建议按照资源目录顺序系统学习,结合百度网盘提供的Matlab/Simulink代码动手实践,重点关注控制策略的设计、仿真结果的分析与优化过程,同时注重培养科研思维与工程实际问题的结合能力。
内容概要:本文详细介绍了一种基于新扩展移相角控制的双有源桥(DAB)变换器仿真模型,采用EPS调制策略,聚焦于实现软开关技术与最小应力优化目标。通过Matlab/Simulink平台构建系统模型,完整呈现了DAB变换器的控制逻辑、电路拓扑结构及关键参数设计过程。研究重点在于提升变换器的转换效率与功率密度,有效降低开关损耗与器件电压/电流应力,尤其适用于高频隔离型直流变换应用场景。文中系统分析了移相角调控机制对功率流动的影响,并通过仿真验证了控制策略在不同工况下的动态响应性能与优化效果,展示了从理论建模到仿真实现的全流程技术路径。; 适合人群:电力电子、电气工程及其自动化等相关领域的科研人员、研究生以及具备一定仿真基础的高年级本科生;适用于从事新能源汽车、可再生能源并网、微电网与储能系统方向研究的专业技术人员。; 使用场景及目标:①研究DAB变换器在高效能量双向传输中的应用方案;②掌握EPS调制下实现零电压开通(ZVS)与最小电流应力的控制方法;③学习基于Simulink的电力电子系统建模、控制器设计与仿真分析技巧; 阅读建议:建议结合Matlab/Simulink环境动手复现仿真模型,重点关注移相角调节策略、软开关实现条件与系统效率优化之间的关系,配合相关文献深入理解控制机理与工程应用背景。
内容概要:本文详细介绍了一种基于变分贝叶斯近似的递归噪声自适应卡尔曼滤波方法,并配套提供了完整的Matlab代码实现。该方法旨在解决传统卡尔曼滤波在面对过程噪声和观测噪声统计特性未知或时变情况下性能退化的问题,通过引入变分贝叶斯推断技术,实现对噪声协方差的在线联合估计与动态更新,从而提升滤波器在非平稳环境中的状态估计精度与鲁棒性。文中系统阐述了算法的理论基础、数学推导流程、递归计算结构及关键实现步骤,涵盖了概率图模型构建、似然函数近似、变分迭代优化等核心技术环节,适用于复杂动态系统中的自适应信号处理与状态估计任务。; 适合人群:具备良好线性系统理论、概率统计与贝叶斯估计基础,并熟悉Matlab编程的研究生、科研人员及从事导航、控制、传感融合等相关领域的工程技术人员; 使用场景及目标:①应对实际工程中因噪声先验信息缺失或环境变化导致的标准卡尔曼滤波失效问题;②应用于无人机导航、智能驾驶、工业状态监测、传感器融合等高精度自适应估计场景,提升系统在不确定环境下的稳定性和准确性; 阅读建议:建议读者结合所提供的Matlab代码逐模块研读,重点理解变分贝叶斯迭代过程中噪声协方差矩阵的后验更新机制,并通过仿真实验对比所提方法与标准KF/EKF/UKF的估计性能差异,深入掌握噪声自适应滤波的设计思想与实现技巧。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值