Codex 从 0 到 1 全攻略 - Annotate / Fork / Archive / Plan / Plugin / Skill / Automation / Mobile ......
By 马克的技术工作坊
Summary
Topics Covered
- Codex 预览区会骗你
- autoreview 平衡效率与安全
- fork 不会回滚代码
- agents.md 跨会话项目记忆
- skill 是给模型看的说明文档
Full Transcript
今天我们来讲讲大名鼎鼎的Codex 相信大家都已经听说过这个软件了 这是OpenAI的核心产品 对标Anthropic的Claude Code Codex能做的事情非常多 它不仅能够帮你编写代码 排查bug 执行测试 还能管理 Git 操作浏览器 甚至能直接控制电脑完成各种任务 非常强大 不过功能越多 越容易让人抓不住重点 所以这期视频
我会带大家系统性的过一遍 Codex最核心的功能 帮大家建立起一套完整的使用思路 整个视频一共分为三个部分 第一部分是基础篇 主要带大家快速上手Codex 并讲解一些核心配置 和使用过程中容易踩坑的地方 第二部分是进阶篇 重点介绍版本控制 会话管理 以及如何更高效的组织 和推进开发任务
第三部分是扩展篇 我们会看看如何通过plugin skill automation和mobile等功能 进一步扩展Codex的能力边界 所有的功能点和对应的时间戳 我都打到目录上了 大家可以按需调整 好 话不多说 我们现在开始 首先我们要做的是 把Codex安装到电脑上面 我们可以打开这个页面 点击这里面的下载按钮 就可以下载Codex了 下载好了之后
我们来打开它 安装过程跟其他的普通软件一样 比如我用的是macOS 直接把Codex拖入到 applications文件夹里面 就可以完成安装了 安装好了之后 我们来打开Codex 打开Codex之后 它首先会提示我们登录 它一共给了我们两个选项 第一个是使用ChatGPT账号登录 这需要你订阅ChatGPT的套餐
ChatGPT它提供了多种套餐 其中最常用的是 我屏幕上面显示的这几个 主要是包括免费版 Go套餐 Plus套餐和Pro套餐 你看屏幕上面的这几个套餐 从左到右价格越来越高 当然整体能用的Codex额度 也是越来越大的 从目前来看 免费版和Go套餐的Codex额度 应该差不多 但到了Plus套餐 额度就会有着明显的上升
Pro套餐自然就更多了 值得一提的是 即使你用的是免费版 系统也会给你一定的Codex额度 只不过这个额度少得可怜 只能勉强够你试个水 所以如果你想真正上手 体验一下它的能力 我建议你先订阅Plus这个Plan 它是20美元一个月 可用量比较适中 除了订阅套餐之外 OpenAI还提供了 另外一个选项来使用Codex
那就是直接进入API 对应的就是这里的 Sign in another way 点击之后 它会提示你 输入OpenAI的API Key 一般来说 用API没有订阅套餐划算 而且获取这个API Key的门槛 也有点高 一般需要一张海外的信用卡 所以我建议大家 还是订阅套餐来使用Codex 具体的登录过程 我这里就不显示了 大家可以在这里选择 适合自己的方式登录 登录好了之后
大家首先看到的 就会是这样的一个界面 Codex首先会询问 我们是干什么工作的 这里大家就按照实际情况 来选就可以了 然后Codex会提示 把Claude Code和Cursor 相关的配置 都导入到Codex 这里我们先跳过 然后Codex提示我们 要不要试用Codex手机版 我们点击这个Setup Later 待会我会给大家演示这个功能 所以现在先不着急
现在我们就算是 正式的来到了Codex操作界面 可以开始使用它了 我们来随便跟它打个招呼 看看能否正常使用 可以看出Codex 已经可以正常使用了 下面我带大家做一个代办软件 并且在做代办软件过程中 为大家讲解Codex的 各个功能点 首先我们要新建一个目录 来存放我们的软件代码 让我们打开访达
在这里创建一个新的文件夹 就叫做马克笔记 然后回到Codex这里 点击Work in the Project 再点击Use an existing folder 在弹出的对话框里面 选择我们刚刚创建好的文件夹 然后再点击Open 然后你就会发现Codex 把项目目录改成马克笔记了 这就代表Codex后面 会把代码放到这个文件夹里面 此时我们准备工作
就已经是做完了 可以开始提需求了 比如说我们的需求就是 使用HTML写一个笔记软件 软件界面分为左右两部分 左边是笔记列表 右边是笔记的内容 最后我们提醒它注意做好测试 然后回车提交 这个时候Codex就会开始工作了 可以看出它在疯狂的给我们写代码 当然实际使用是没这么快的 因为为了节省大家时间 这里我做了加速 后面的问答流程
也都做了不同程度的加速处理 这个大家知道就好了 好Codex暂停了 它提出它想要构建一个本地服务器 来验证HTML笔记的效果 这里有三个选项 第一个选项是Yes 这个很好理解 其实就是把本地服务器 启动开就可以了 不过以后如果Codex提出类似的请求 我们还得再授权一次 第二个选项是代表我们不仅同意
而且对于这种启动本地服务器的代码 以后也就直接执行就好了 不需要再经过我们授权了 第三个选项可以理解为不同意 它其实不是一个按钮 而是一个输入框 我们点一下就能看出来了 在这里我们可以告诉Codex 自己希望的处理方式 比如只让它检查代码 不要启动本地服务器之类的 当然如果你不同意 而且你懒得告诉Codex原因的话
也可以直接点击这里面的skip按钮 这算是Codex做了弱化的第四选项了 好所有的可选项我们都说完了 在这个地方我们就选择第一项 Yes就好了 然后Codex就询问我们能不能访问 新创建的本地服务器 这个地方我们也同意 现在Codex已经彻底完成它的工作了 可以看出这里面最重要的文件 就是这个index.html
我们可以点击来预览它的效果 这个就是Codex写的笔记软件了 看起来中规中矩 各种基本功能在这里面都能找到 当然有些人可能觉得 这个预览区太小了 想要放大一点 这当然是可以做到的 让我们来点击这个 这样左边的区域就被收起来了 可预览的空间就更大了 不过下面的这块区域 看着也是有点碍事 能不能隐藏它呢 其实也是可以的
我们可以点击这里面的三个点 然后选择其中的 Hide Composer就好了 你看这样就好多了 假如说这个时候 你看着界面里面的这两条笔记 觉得非常碍事 你想把它们去掉 这个其实也是很简单的 我们就继续追问就好了 既然要追问 我们就必须要把左侧栏 再次显示出来 这个其实很简单
我们再点一下这个按钮 左侧栏就显示出来了 然后我们就可以在输入框里面 输入我们的问题 把左上角的两条笔记去掉 这个肯定是可以的 不过我这里想给大家演示 另外一个方法 另外一个更加准确 更加方便的方法 我们可以点击这个图标 它叫做annotate
然后我们就可以直接选中 两条笔记这个区域 选中后 输入我们对这个区域的修改意见 很简单 我们的意见就是两个字去掉 然后我们提交请求 好 可以看出请求 已经成功提交上去了 可以看到它一共是发了两块内容 一个是对应的截图 另外一个就是我们具体的要求了 接到了这个请求之后
Codex就开始工作了 它应该就会把这块区域给去掉 让我们稍微等待一下 好 Codex已经完成了 我们再次打开这个预览区域 看一下效果 可以看出 之前的这块区域确实是没有了 Codex已经帮我们解决问题了 看起来annotate这个功能 还是非常方便的 这个时候我们可以再随便点点 这个笔记软件
看看有没有其他 我们需要修复的问题 这里好像确实有个bug 我点击加号按钮的时候 下面是要增加一个新的笔记的 但实际上点了之后 并没有任何的反应 看起来像是一个bug 让我们跟Codex说一下这个问题 我们需要告诉Codex 点击添加按钮之后 笔记列表区域没有任何的反应 请排查下原因 我确定之后再进行修改
好Codex已经排查完了 按照我们的要求 他没有直接去改代码 而是先给出了诊断结果 他猜测这个问题大概率是 因为当前页面的local storage 也就是本地存储被禁用了 没错就是这个原因 说白了就是Codex的右侧预览区 有一些安全限制 导致某些功能无法正常使用 如果我们到独立的浏览器里面
用一用 问题立马就消失了 不信我们试一试 你看这个时候再点击添加按钮 是不是就完全正常了 既然用户是在真实的浏览器里 用我们的软件 而不是在Codex的预览区里用 那这根本就不算是个问题 自然也不需要修 我不知道这算是Codex的一个bug 还是一个feature 我相信OpenAI是把它当成feature来做的 不过实际用下来确实有点像bug 如果你做的也是外部应用
那一定要格外留意这一点 别被预览区给骗了 既然弄清楚了原因 为了避免再受限制 我们后续就在独立的浏览器页面里面 进行测试了 到这里这个最基本的笔记软件 就算是成功跑通了 现在我想回头聊聊 刚才遇到的一个细节 就是Codex提出的请求 有些同学可能会想 如果我把任务交给Codex之后 去忙别的了
没注意到他在等我授权 那Codex岂不会一直卡在那里 等我回来一看啥也没干 白白浪费了大量时间 这有没有办法让他自己做决定 别总是来问我 毕竟谁也不想一直盯着他干活 那也太累了吧 没错 一直盯着看的确实是非常的麻烦 其实Codex早就替我们想到了 解决办法就在输入框的下面 大家看
这里面一共是有三个权限选项 第一种就是我们刚才用的 default permissions 在这种模式下 如果Codex需要修改 项目目录之外的文件 或者是需要执行一些 带有安全风险的命令 他就会老老实实地弹出提醒 只有当你点头同意了 他才会继续接着往下干 这种模式的优点是绝对安全 一切尽在掌握 但缺点也非常明显
就是根本离不开人 你得随时给他授权 第二种是autoreview 也就是自动审查 这个模式很聪明 他引入了一个专门负责安全审查的agent 当Codex准备执行操作的时候 这个agent会首先替你把关 安全的直接放行 危险的直接拒绝 只有在极少数连agent 也拿不定主意的情况下 才会弹窗让你来做决定
第三种是full access 顾名思义 这个就是放飞自我模式 全部自动同意 Codex想干嘛就干嘛 完全不需要你插手 这个模式确实是最省心的 但也伴随着风险 万一他误删了什么重要数据 你是拦也拦不住的 虽然GPT模型总体上还是非常靠谱的 基本上不太会乱来 但是作为一个负责任的up主 我还是要提醒大家
这个模式没有任何的安全校验 开启前一定要三思了 所以综合看下来 在这三个模式里面 autoreview是在效率和安全之间 平衡的最好的 为了避免后面频繁弹窗 要我们点同意 接下来的演示 我们就统一的切换到autoreview模式 既然聊到了这里的权限配置 我们不妨顺便看一下
输入框旁边还有哪一些配置 首先大家留意这里面显示的5.5 medium 这代表我们当前使用的是 GPT5.5模型 思考深度为medium 也就是中等 我们点开它可以看到思考深度 是可以自由调节的 分为low medium high和extra high 四个级别 思考深度越高 codex花费的时间也就越长
消耗的token也就越多 但通常给出来的代码质量 也会更好一些 除了调整思考深度 我们还可以在这里面切换模型 下拉列表里面 除了GPT5.5 还有GPT5.4等等一系列的模型 大家可以根据具体的任务难度 来灵活选择 最后这里面还能设置模型的输出速度 目前是standard 也就是标准的速度
旁边还有一个fast选项 开启fast模式之后 生成的速度会提升到原来的1.5倍 不过代价是token的消耗量 也会相应的增加 具体增加多少 取决于你用的模型 比如说在GPT5.5这个模型下 开启fast模式的话 token的消耗量 就直接是标准模式的两倍了 如果你财大气粗 token够用
那你完全可以开启快速模式 这样codex干活就更快了 输入框的配置 我们就先研究到这里 现在我们的第一版笔记软件 已经跑通了 实现了最基本的功能 不过为了防止后面新加功能的时候 把代码搞乱 我们最好先用git 把当前的版本保存一下 这样的话 就算是后面出了什么岔子 也能够随时回滚到可用版本
心里有个底 在codex里面 调用终端非常的方便 我们不需要去点什么菜单 直接按下快捷键 command加j 大家看右侧的终端面板 就直接弹出来了 在这里面 我们依次输入几条常规的git命令 首先是要执行git init 把当前的项目目录初始化为一个git仓库 然后我们要执行的是git add
把相关的文件都添加到暂存区里面 最后再执行git commit 提交我们的第一次修改 好 这三步敲完之后 我们的代码就有了一个安全的备份版本 接下来我们就可以放心大胆地 继续迭代我们的产品了 终端用完之后 为了不挡着视线 我们只需要再次按下同样的快捷键 command加j 就能够把它直接关掉 你看
用快捷键来开关终端 双手完全不需要离开键盘 整个过程非常的丝滑 也是非常的方便 现在我们用codex做了一个 基本可用的笔记软件 而且还用git提交了可用版本 下面我们就来继续迭代这个笔记软件 让它变得更强大 更美观 假设这个时候你看了看这个笔记软件 觉得它的色彩设计不是很好 这里面有很多的绿色元素
你不太喜欢绿色 你想试试蓝色怎么样 这个时候该怎么处理 很简单 你就直接在这里面追问就好了 比如我们可以这么提要求 不过我们先不发送这个请求了 为什么 你仔细看看 我们上一个消息里面 还让codex排查问题来着 但说实话 这其实并不是一个问题 只是codex的预览区有些限制而已
如果我们继续追问的话 这个排查过程 不仅会占用模型的上下文 而且可能还会对codex后续执行 产生一些影响 它没准会继续尝试修复这个问题 把原来没有问题的页面修出问题来 虽然这种情况发生的概率 应该也不会很大 但是能规避的话 就尽量规避 毕竟这个消息 其实一点用也没有 所以我们该怎么办 有一个办法
那就是直接修改上一个消息就可以了 你看这里面有一个编辑按钮 我们点一下 就可以直接修改这个消息了 我们来试试 提交 你看 原来的请求被替换成了我们的这个 这样的话 原来排查问题的消息就消失了 既然消失了 它就不会再占用模型的上下文了 也不会对codex后续执行 产生任何影响
所以很多情况下 这个功能还是很实用的 不过要注意的是 codex只支持编辑最后一条消息 至于更靠前的那些消息 它实际上是不支持我们编辑的 前面的那些消息都是没有编辑按钮的 如果你要编辑更靠前的消息 可以考虑使用fork功能来间接实现 这个功能我们后面会讲到 暂时你不必过于关心 好
codex已经完成任务了 我们来看看效果 还可以 下面我们把这一部分的改动 也加入到git里面 之前我们是用命令行来操作git 这种操作方式准确通用 不过其实codex也内置了一些git 操作的功能来供我们使用 比如我们可以先点击这个图标 这里面就有一个叫做 environment的区域
它就跟git的使用密切相关 我们可以点击这里面的changes按钮 然后再在这个选择框里面 选择unstaged的选项 这里显示的就是所有还没有提交到 暂存区的代码了 这基本上也就是codex 刚才所做的改动 如果你觉得哪一行有问题 可以点击旁边的加号 输入你的要求 输入完要求之后 你可以点击这里面的comment按钮
让codex做出相应的改动 不过这里我们就不做任何修改了 codex的任务已经完成的很好了 所以我们取消这个注释 直接使用git commit提交这次改动 具体该怎么做呢 很简单 直接点击这里面的commit按钮 输入commit的message就可以了 我们的commit message 就是将整体色调改为蓝色 然后再点击continue
此时codex就会提交 当前所有没有提交的改动了 好 执行成功了 我们来验证一下 先按一下command加j来到终端 然后再执行git log 查询git的commit记录 你看我们的commit确实是生效了 确认好了之后 我们按q退出git log 然后再按command加j来隐藏终端
到这里这个需求就算是彻底完成了 假设这个时候 你感觉蓝色这个主题也不怎么好看了 越看越不顺眼 要不再换一个 没问题 我们直接提交需求 将整体色调改为紫色 改完之后再做一次git commit 对 这次我们不自己操作git 有点麻烦 直接让codex操作得了 提交之后 codex就开始干活了
我们稍微等待一下 改好了 我们来看看最后的效果 不错 确实改成紫色了 不过怎么说呢 你觉得还是不顺眼 你再想算了 我要不还是改成一开始的绿色 这当然是可以的 照例你可以直接在输入框里面输入 你的要求 就是改回原来的绿色 这个肯定是行的 只不过这样的话 模型还得再跑一遍
有点浪费token 所以我们就不用这个方法了 其实我们原来就是绿色 所以用git把代码回滚到绿色的 那个版本就可以了 只不过这种做法其实也是有点缺陷的 代码确实是回滚了 但会话内容还是停留在紫色这里 如果我们希望在当前这个会话 继续问的话 codex可能会以为 目前所用的色调是紫色
从而对后续的任务执行效果 产生负面影响 我们能不能把会话和代码同时回滚 我们就想回滚到改蓝色之前的 那个版本 也就是这个版本 如果有回滚功能的话 那应该是在这个消息旁边 有一些相对应的标识 我们找找 还真的有一个图标 有点像 不过它不叫回滚 它叫做fork fork的意思就是 基于当前的会话
再复制一个新的出来 这个新会话就只到 目前所选的消息为止 后面的消息全都不保留 这个就非常符合我们的要求了 我们其实就希望 会话到当前的消息为止 既然会话变了 代码是不是也会自动回滚呢 没准也是可以的 我们来试试 我们首先点击这个fork图标 这里弹出两个选项 给我们选择 一个是fork into local
另外一个是fork into new worktree 这两个选项的最大区别 在于新会话的代码存放地址不同 第一个选项会继续使用当前目录 作为新会话代码存放地址 第二个选项会创建一个新的目录 来存放新会话的代码 你可能现在听得还是有点懵 没关系 我来演示一下 你就知道了 在演示之前 我们先把左侧栏打开
这样你就会看得更清楚一些 好左侧栏打开了 我们来重新点击一下这个fork图标 然后选择第一项 fork into local 可以看出 codex确实给我们创建了一个新的会话 并且还在这里标示好了 这个会话就是从别的会话那里 复制出来的 下面我们来看看代码是否也回滚了 这个很简单 我们不必看代码 我们直接看最终的效果就行了
让我们来看看页面的颜色有没有改变 可以看出页面的颜色仍然是紫色 所以代码根本就没有回滚 没错 这就是fork into local这个选项的特点 它只会处理会话内容 根本就不会对代码做任何修改 不过还好我们使用了git 我们可以用git来回滚代码 我们先按快捷键command加J打开终端
然后执行命令git log 确定我们想把代码回滚到哪个commit上 应该就是这个了 然后我们复制这个commit的哈希值 最后执行这个命令 这样就可以把代码回滚到会话对应的那个版本了 让我们回到浏览器这里刷新一下页面 没错 确实是一开始的绿色版本了 当然绿的也不是很明显 只有那么几个模块是绿的
我对这个色调的表述稍微有点问题 但无论怎么样肯定是回滚成功了 相信大家都能看得出来 这个就是fork into local了 我们配合git才能把会话和代码 都回滚到之前的那个状态 那刚才还有一个选项 叫做fork into new worktree 那个选项是用来干什么的呢 我们不妨来试试 让我们回到之前的会话里 点击这个fork图标 然后再选择fork into new worktree
注意看codex依然给我们创建了一个新的会话 而且跟fork into local很像 这个新的会话也标示出来了 它就是从别的会话里面复制过来的 一切看起来似乎都跟那个 fork into local差不多 那到底什么发生变化了呢 答案就是我们当前的这个会话 所对应的项目目录发生了变化 不信我们来打开终端 输入pwd
这个命令就是用来显示当前位置的 可以看出我们的当前位置就是这个了 我一开始fork出来的那个会话 可不是在这个目录里面操作的 不信的话 我们回到一开始fork出来的那个会话里 同样打开终端 运行一下pwd 你看它俩的项目目录地址是不同的 我把这两个地址打在屏幕上 这样大家就可以看得更清楚一些 这个就是fork into new worktree的 一个特性
它会给fork出来的新会话 创建一个对应的新目录 这样新老会话所处理的代码不是一份 彼此之间互不影响 非常适合在两个会话 分别处理两个不同的功能点 最后做完了再合并到一起就好了 为什么叫做worktree呢 是因为它是使用git worktree来实现的 这个是git的一个特性 这个要展开讲的话 又得讲好几分钟 我们本期是来讲codex的 不是来讲git的
所以git worktree在此就跳过了 感兴趣的同学可以自己查一下 另外值得一提的是 fork into new worktree 同样不会回滚代码 它只是把当前项目目录里面的所有代码 复制到一个新的目录里 仅此而已 好 这个就是fork的两种形式了 总结一下 这两个选项都会复制会话到 所选消息为止 也都不会帮你回滚代码 它们唯一的区别
仅仅是代码的位置 local是继续沿用原目录 而new worktree则是开辟了一个 全新的隔离目录 主要就是这个区别了 所以无论是哪一种fork形式 都不会更改代码 实际上codex在界面里面也有显示 我们可以回到一开始的会话 然后再点击一下这里面的fork图标 注意到这段话了吗 其实他想表达的意思就是
fork只负责对话 不回滚代码 对 他说的有点绕 但其实就是这个意思 好 fork功能我们终于讲完了 我们目前只需要第一个 fork into local的会话 另外一个fork into worktree 我们暂时不需要 我们能把这个会话删掉吗 能 不过准确来说 我们可以把这个会话归档 归档和删除稍微还是有些区别的 你可以把归档理解为 暂时隐藏起来了
而删除那就是删完就没了 我们来试一下 我们直接点击会话旁边的图标 然后再点击confirm 这个会话就被归档了 你看这个会话是不是没了 但跟删除不同的是 我们还可以找回这个会话 我们先按command加逗号 打开设置面板 再点击里面的archive chats 在这里我们就可以看到
所有被归档的会话了 我们可以解除对应会话的归档状态 也可以彻底删除对应的会话 所以你看删除和归档 还是稍稍有些区别的 归档这个功能 我们就讲到这里 从之前的操作过程中 我们可以看出 Git真的还是挺重要的 既然这么重要 我们能不能让Codex 每次写完代码的时候 都能自动提交一次Git commit呢 这样的话
就不用麻烦我们每次都操作一遍了 这当然是可以的 其中一个方法就是 我们可以直接在输入框里面 告诉Codex 每次完成代码修改之后 都需要提交一次Git commit 然后提交这个请求就行了 这样在后续的操作里面 Codex肯定就会按照我们所说的 每写完一次代码 都提交一次Git commit 不过这个方法有个很大的缺陷 那就是它只会在当前的会话中生效
如果我们创建出一个新会话的话 那Codex就会彻底忘掉这个事情 所以我们需要一个 能够跨会话的解决方案 即使是在一个新会话里 Codex也能帮我们做Git commit 这个事情 这能做到吗 当然是可以的 这个就是agents.md
这个就是agents.md 这个文件发挥作用的地方了 agents.md简单来说
agents.md简单来说 就是一个放在项目根目录里面的 配置文件 每当Codex开始一个新会话的时候 它都会自动读取这个文件 把里面的内容 当成对自己的指令来执行 所以我们只需要在这个文件里面 写上这个Git commit的要求 无论我们开多少个新会话 Codex都会记住这件事情的 我们先把原来的请求删掉 我们不需要它了 然后我们点击这里
使用VSCode打开这个项目目录 在根目录下创建一个新的文件 就叫做agents.md
就叫做agents.md 然后在这个文件里面写 每次完成代码修改后 都需要提交一次Git commit 这样agents.md就创建好了
这样agents.md就创建好了 让我们把VSCode关掉 现在让我们来验证一下 agents.md是否真的会生效
agents.md是否真的会生效 我们首先创建一个新的会话 然后提交需求 往左下角增加一个主题切换选项 支持用户在浅色模式 和深色模式之间切换 回车提交 让codex开始工作 好 codex已经完成了 我们来看看效果 你看左下角确实是出现了一个主题切换按钮 我们点击对应的主题
就可以在浅色和深色两种模式之间切换 看起来非常完美 我们现在最关心的是 codex有没有帮我们做Git commit的操作 我们按一下command加J 打开终端 执行Git log来看看 你看这里面确实是多了一个新的commit message就是codex自己写的 这说明agents.md确实生效了
这说明agents.md确实生效了 即使是在一个全新的会话里面 codex也遵从了我们的要求 在完成了代码修改之后 自动提交了一次Git commit 这个就是agents.md的基本用法了
这个就是agents.md的基本用法了 当然它能做的事情远不止这一件 比如你可以在里面规定代码风格 命名规范 技术栈要求 甚至是你的项目背景介绍等等 codex每次启动新会话的时候 都会去读取这些文件 这样它对你的项目就会有非常好的理解 给出的结果也会更加准确 可以说agents.md写得越好
可以说agents.md写得越好 codex就会用起来越顺手 不过需要注意的是 codex只会提交当前需求 所对应的代码改动 我们一开始创建的agents.md
我们一开始创建的agents.md 不属于当前需求的范畴 所以刚才codex并没有把它提交 为一个git commit 我们点击这个changes 再选择unstaged 就可以发现 agents.md的内容还没有提交上去
agents.md的内容还没有提交上去 没事 我们这就提交 我们先来点一下这个commit按钮 然后在里面输入对应的commit message 再点击continue 这样这个改动就会被提交到git上面了 好一切顺利 让我们新开一个会话 继续迭代笔记软件 现在这个软件本质上就是一个html文件 只能在浏览器里打开 不够方便
我们想把它改造成一个 真正的桌面客户端 让用户可以直接双击图标打开 就像打开vs code codex一样 要做桌面客户端的话 electron是非常主流的一个选择 我们可以顺便也引入react和typescript 把项目结构整理一下 方便后续继续迭代 我们就直接把需求发给codex
把网页应用改成桌面客户端 技术栈使用electron 加上react 再加上typescript 注意做好测试 确保所有的核心功能运转正常 不过要注意 这可是一个大工程 所以我们最好先让codex做一个规划 我们确认规划没有问题之后 再让它动工 为了实现这一点 我们可以点击这里面的加号 然后选择plan mode 这样codex就进入了计划模式
从这个图标也可以看出这一点 在这个模式下 codex会先做计划 再写代码 让我们来提交试试 可以看出codex开始工作了 让我们稍微等待一会 好 他现在要问我们几个问题 我们来做一下选择 首先是数据要放在哪里 我们就放到文件里面吧 然后交付到可开发运行的程度 就可以了
这之后codex就会继续开始干活了 好 可以看出codex开始给我们写计划了 我们再稍微等待一会 他还在撰写的过程中 好 写完了 我们来看一下这个计划本身 还是比较完善的 包括各种测试方案
架构设计都是写的比较详细的 然后codex问我们 是不是要按照这个计划去实现代码 他一共是给了我们两个选项 第一个选项就是直接同意 开始实现这个计划就好了 第二个选项是 如果你对这个计划不满意的话 你可以提出你的要求 在文本框里面 告诉codex应该如何做修改 然后codex会根据这个修改
再出一份新的计划 这里面我们就不对计划 再做一些其他修改了 我们就直接同意好了 让codex就按照这个计划 给我们来写代码 好 现在codex开始干活了 我们需要稍微等待一下 在等待的过程中 我们可以跟codex随便去聊点东西 我们可以在输入框里面输入 -side 打开side chat 在这里面
我们就可以随便问codex 点别的问题 这些问题 不会去影响左侧codex的任务执行 比如说我们可以问一下 你觉得这个笔记软件 还需要什么基本功能呢 提交 好 codex给了我们一些可行的方案 你看在side chat的过程中 codex左侧的任务执行 一点也没有被干扰到 对 这个就是side chat的 一个非常重要的特点了
它就是允许用户 在codex执行任务的过程中 问一些比较轻量级的问题 codex在回答这些轻量级问题的过程中 不会影响到左侧主任务的执行 这个就是side chat这个功能的特性了 这个我们就先讲到这里 这个架构改造的工作量还是挺大的 codex依然没有完成 让我们再耐心等待一会儿 好 看起来codex已经完成任务了
它提示我们使用npm run dev这个命令 就可以启动这个electron应用 让我们来试一下 首先按command加j打开终端 然后执行命令npm run dev 回车 这样的话 这个electron应用就启动开了 不过看起来好像是有点问题 基本上是一个白屏的状态 我们打开控制台 看一下有没有什么报错 确实有报错
这个我们需要让codex帮我们来修一下 让我们来回到codex这里 先把这个进程关掉 然后再把终端关掉 然后我们提出我们的诉求 启动后白屏控制台报错了 看来你之前的测试不够彻底 请你修复 并确保在修复之后测试好再交付给我 codex说我说的对 让我们等codex把这个错误修复之后再试一次
看起来codex已经修复好了 我们来看一下它修复后的效果是怎么样的 同样我们打开终端 然后执行这个命令 这次看起来没有问题了 添加笔记也是可以的 我们也可以在这里面随便输入标题 内容都可以 主题切换也是没有问题的 看起来已经很完美了 各项功能都运转正常
让我们再回到codex这边 我们先按一下control加c关掉这个进程 然后再把终端收起 好 改成了electron架构 我们就继续来提新的需求 我们的新需求是 为这个笔记应用增加markdown支持 具体来说需要在编辑器右上角 提供两个模式切换按钮 假设这个时候我想换行怎么做呢
直接按回车肯定是不行的 按回车就提交了 正确的做法是按shift加回车 你看这样就可以回车了 我们继续输入任务内容 首先是编辑模式 显示所有文本内容 并对其中的markdown语法 进行高亮显示 然后还有一个是预览模式 它用于显示markdown的渲染结果 现在再回车 好可以看到codex开始工作了
在它工作的间隙 我们再创建一个新的会话 让它再处理另外一个关系不大的任务 我们的新任务就是给笔记项目 生成一个logo svg格式 可以看出这两个会话都在工作中了 假设这个时候你突然想到了 我们的笔记软件 有深浅两种模式 这个logo需要在任意一个模式下 都清晰可见 我们最好提醒一下codex 以免它忘了 好让我们发送请求
不过这个请求似乎没有发出去 它似乎卡在这里了 没错 在默认情况下 只有当上一个请求完成后 codex才会继续处理下一个请求 不过到那个时候就有点晚了 毕竟logo都生成好了 我们能不能现在就把这个信息发送给 codex 让它在生成logo前就注意到这一点呢 没问题 注意到这里的steer按钮了吗 点一下
我们的请求就会立即发送给codex 这样我们的目标就达到了 codex现在还在运行中 我们稍稍等待一会儿 好可以看出logo已经生成完毕了 我们切回到原来的那个会话 看看它的进度怎么样了 它还在运行中 所以我们可能还需要再稍微等那么一会儿 好这两个任务都完成了 我们来直接打开软件 看看最终效果
首先是要打开终端 然后我们运行npm start 打开electron应用 看起来好像是有点问题 logo没有被成功的加载起来 我们需要跟codex说一下这个事情 然后我们先关掉这个electron应用 然后我们关掉这个electron进程 先看看这个logo在不在 这个logo确实是在public文件夹里面的
应该不是文件不存在导致的 是不是这个svg文件的格式有问题 我们来到访达来验证一下 打开public文件夹 看来这个svg文件的格式也是没有问题的 毕竟访达都正常渲染出来了 大概率是electron加载svg文件的方法有问题 让我们来让codex修一下
首先按command加G 我们唤起会话列表 然后选择生成logo的会话 然后在这里面我们输入具体的问题 logo没有显示出来 提交 提交之后 codex就开始给我们排查原因了 我们再稍微等一会 修复完毕 我们再次启动这个软件看看效果 首先打开终端运行npm start
好 这次看起来logo是成功的显示出来了 我们还可以随便点一点其他的功能 看看整体是否运转正常 markdown 我们可以随便输入几个markdown的关键词 看一看它的高亮显示是否正常 看起来似乎并没有什么太大问题 各种格式都可以非常正常的显示出来 可以看出预览也是没有问题的
这次需求就到这里了 我们再次回到codex这里 继续迭代它 前面我们讲的都是codex的基本能力 下面我们来讲讲plugin 你可以把plugin想象成一个codex的外挂 它会给codex相应的能力 帮助codex去做更多的事情 这么说可能比较抽象 我们可以来实战一下 我们首先可以打开侧边栏
然后点击里面的plugins 在这里我们就能够看到 所有可用的plugin了 其中有能控制电脑的 有用于操作chrome的 还有用于编辑excel的 还有一些是用来制作PPT的 如果plugin的旁边打了勾 那代表plugin已经被安装好了 如果plugin没有安装的话 旁边会是一个加号 我们点击加号就可以正常安装了 我们来随便点击plugin
看看它内部到底有什么 比如我们可以点一下 这个叫做gmail的plugin 可以看到plugin内部 有三个组成部分 其中一个是app 两个是skill 这个app是用来把codex 和gmail连接起来的 它里面提供了很多的工具 当然codex没有叫它是工具 codex叫它是action 但其实本质上 这里面就是一个一个的工具 跟mcp的工具差不多 比如apply labels to emails
就是用来给邮件打标签的 archive emails 就是用来归档邮件的 这个app一共是提供了 24个这样的工具 除了app之外 这个plugin还提供了两个skill 你基本上是可以把skill 当成是给大模型看的一个说明文档 比如说是gmail skill 它就写明了 怎么总结邮件内容 怎么撰写回复
以及什么时候该用哪些工具等等 而这个叫做inbox triage的skill 则是告诉大模型 如何给邮件归类的 比如说哪些邮件比较紧急 哪些邮件需要回复等等 如果你对skill比较感兴趣 可以看一下我的视频 把skill的使用方法和运行原理 一次讲明白 gmail的app所包含的内容 就只有这三个了 我们如果选择安装gmail插件
其实就是选择安装了这三个组件 等到用户想要codex操作gmail的时候 GPT模型便会找到这三个组件 并用它们提供的能力和说明 来完成用户的要求 大致就是这个样子的 我们来看一个具体的例子 比如说是presentations 这个plugin是用来写PPT的 它只有一个组件 那就是这个叫做presentations的skill
这个skill详细说明了 该怎么做 才能做出一个高质量的PPT 下面我们就尝试用这个 叫做presentations的plugin 来完成我们的需求 让我们来新建一个会话 然后输入我们的要求 给这个笔记软件做一个PPT 介绍它的产品设计和技术架构 提交之后 codex就会找到 我们前面所说的 那个叫做presentations的plugin 并使用那个plugin
提供的能力来做PPT 当然如果你担心 codex找不到这个plugin 或者说是找错了的话 你可以明确要求codex 使用这个叫做presentations的plugin 这只需要在任务的最前面 输入一个at符号 然后敲入presentations回车 这样codex就一定会使用 presentations这个plugin 来做PPT了 不过不加也没关系 codex会自动找到这个plugin的
所以我们暂时就把它给去掉 好 提交 可以看出codex开始工作了 我们稍微等待一会 codex做好了 我们打开看看 中规中矩 其中其实还有不少可以改进的地方 不过这已经是一个不错的起点了 我们可以在这个基础上 做一些其他的改进 这个叫做presentations的plugin 并不能算很惊艳 下面我给大家介绍openai
所提供的两个很实用的plugin 一个是叫做computer use 用来控制电脑 另一个是叫做chrome 用来操作chrome浏览器 我们先来试一试chrome插件 让我们来到插件管理的地方 然后点击chrome旁边的加号 来安装插件 点击install chrome 好安装好了 然后codex提示
我们需要在chrome上面 也安装对应的扩展才行 好 我们就按照它的指示 来安装扩展 一切准备就绪之后 我们就来尝试用chrome插件 我们可以直接点击旁边的按钮 这样的话 codex就可以给我们初始化一个 使用当前插件的这么一个请求 我们可以把后面的部分给去掉 换成我们具体的请求
那就是打开product hunt首页 然后再找出今天最热门的 三个新发布的产品 总结它们各自的特点 并附上对应的访问链接 好提交 为了让大家看得更清楚 让我来把codex缩小一点 把chrome浏览器放出来 这样的话 大家就可以更清楚地看到 codex到底是如何干活的了
可以看到codex创建了一个标签组 这个标签组专门用于解决我们的问题 然后它在这个标签组里面 访问了product hunt的首页 今天最热门的三个新发布的产品 就在这里了 相信codex也看到了 可以看到现在codex开始 打开另外一个标签页了 这个看起来是第一个产品 brew的一个相关网站 然后它又打开了一个
接下来我们就不管了 codex估计还会查看更多的网页 我们就在这里稍微等待一会儿 相信它等会就可以查询 全部的产品页面 然后给我们一个比较有用的反馈 让我们稍微等待一下 好codex给我们总结了 这个基本上也就是我们想要的结果了 这个就是chrome插件的相关使用方法了
让我们把codex再次最大化 然后下面我们就来看一看 computer use插件的使用方法 它是用来操作电脑的 同样我们点击加号 然后进行安装 安装成功 让我们来使用一下 跟chrome的使用方法类似 我们也可以点击computer use旁边的小图标
这样直接就能开启一个相关的computer use会话 我们先把后面这段文本删掉 因为它跟我们真实的请求没有什么关系 然后我们再稍微改一下 请求所对应的目录 我们现在是放在马克笔记这个地方 但实际上我们要打的请求 跟这个项目其实没什么太大关系 所以我们就选择 don't work in the project
也就是说这就是我们随便提出来的 一个请求 不会去绑定某个具体的项目目录 之后我们就可以正式输入自己的请求了 那就是请打开我电脑自带的日历应用 帮我新建一个5月28日10点的日程 标题叫做 讨论马克笔记的后续设计 没错就是这样 我们让codex操作一下日历这个应用
然后同之前一样 我们把codex缩小 把日历这个软件露出来 这样大家就可以更清楚的看到 codex是怎么操作我们这个日历软件的 好 codex首先询问我们能不能使用日历 这个应用 我们同意 可以看出codex开始行动了 这个就是codex的鼠标 它跟我们所使用的鼠标 根本是两套 彼此之间互不影响
然后codex就开始操作鼠标 去完成我们的需求 它还需要我们确认一下 是不是真的要创建这个日程 这个有点啰嗦 那当然是确认了 我们给它回复一下 好 看起来codex已经完成了我们的要求了 我们来看一下 看起来这个日程的标题和时间段 都是满足我们要求的 那就没问题了
我们再把codex最大化 这个基本上就是computer use 这个插件的使用方法了 值得一提的是 codex使用独立的虚拟鼠标 与你的鼠标互不干扰 刚才把日历软件提到前台 只是为了演示 实际上你完全可以让它在后台默默干活 自己该干嘛干嘛 上网看视频都可以 完全不会耽误 好 computer use讲完了
我们接下来就来看看skill是如何使用的 想要浏览skill 我们就必须要先打开plugins 然后再点击这里面的skills 就可以看到可用的skill列表了 其实我们之前用plugin的时候 已经间接的用过skill了 因为无论是presentations computer use还是chrome 这几个plugin的核心组件都是skill 你在skill标签下面都能找到
当我们安装对应的plugin的时候 我们都会把相关的skill一块安装好 所以我们在这里都能找到这些skill 不过有一个王牌级的skill 是单独列在skill这个标签下面的 它并没有一个对应的plugin 这个skill就是imagegen 它是用来生成图片的 相信大家对GPT的生图能力早有耳闻 不仅美观 而且非常的真实
下面我们就来使用skill 来创建一个图片 我们在马克笔记项目下新建一个会话 然后输入我们的要求 给笔记软件生成一个宣传海报图片 注意要使用我给你的真实的软件截图 然后我们需要给codex相应的软件截图 我们先按command加j打开终端 然后执行npm start命令 来打开我们的笔记软件
然后我们回到codex这里 点击加号 再找到其中的attach electron这个选项 这里面的electron其实就是 我们的马克笔记软件了 我们的笔记软件就是用electron做的 所以在codex里面看来 这个笔记软件就叫做electron 我们来直接点击这个选项 点击之后 codex询问我们是否要启用这个功能
我们点击enable 然后我们的马克笔记截图 就到了聊天框里面了 这样codex在做海报的时候 就可以根据真实的软件截图来做了 是不是很方便 点一下按钮 就可以把截图放进来了 不过这个还不是最方便的 codex还提供了一个快捷键 按一下就能够把截图传过来 我来给大家演示一下
我们之前给codex的是浅色模式的截图 我现在再给codex传一张深色模式的 我们回到马克笔记这里 调到深色模式 然后重点来了 左右command键同时按下 这样深色模式的马克笔记截图 也传给codex了 这个确实更加方便了 好 现在codex有了浅色和深色 两种模式的截图 我们可以让它开始做海报了 提交
首先我们可以注意到 codex会使用imagegen 这个我们之前提到的技能 来做这张宣传海报 然后我们就再等等 看它能画出什么样子来 画完了 我觉得还行吧 确实是基于我们的截图来做的 不知道你觉得怎么样呢 除了使用codex 给我们安装的skill外 我们也可以创建自己的skill 让我们按command加n 新建一个会话 然后输入我们的任务
写一个代码审核skill 专门给当前的项目使用 这个skill应该包含如下的规则 好 我们提交 可以看到这个skill已经做好了 它的名字就叫做marknotes code review 下面让我们按一下 command加n 新建一个会话 试试这个skill的效果 首先我们add这个skill 然后提出我们的请求 检查当前项目的代码是否有问题 好
可以了 结果出来了 还可以 我们还可以让codex 根据审查的结果来修改代码 这里我就不再继续演示了 我们的笔记软件每天都在迭代 每天都有代码更新 所以我们最好能每天定时检查下代码 看看有没有什么问题 这种场景就很适合起一个定时任务来处理 codex也提供了这样的功能 让我们来点击这里面的三个点
再点击add automation 也就是添加一个定时任务 这里是定时任务的标题 codex已经帮我们填好了 这里填写发起定时任务的时候 我们需要发给codex的要求 我们的要求就是检查当前项目的代码 是否有问题 然后下面是执行环境 一共是有三个选项 分别是local worktree和chats local是在某个项目目录里面
运行定时任务 worktree是基于某个项目目录 创建一个新的worktree 定时任务就在新的worktree里面运行 worktree的概念我们之前讲过 它是git的一个概念 如果你还是一知半解的话 可以先不管 我们这里不用这个选项 chats是执行环境 不跟任何项目目录绑定 我们之前用chrome plugin 搜索网络的时候 实际上是用过chats环境的
这里最适合我们的是local 毕竟我们的定时任务 就是要扫描马克笔记的项目代码 所以一定是要跟某个项目目录 绑定起来的 让我们选择local 然后在这里面选择马克笔记 然后这边是运行频率 我们选择daily 具体的时间 我们就维持在9点钟 意思就是我们定时任务 在每天9点钟的时候启动 下面我们选择模型
GPT 5.5推理强度 我们就维持目前的medium就好了 然后我们点击save 再打开左边栏 我们就可以看到automations 这里面多了一个1 点击之后 就可以发现 我们创建的定时任务了 它会每天9点开始运行 每次运行的时候 都会创建一个新的会话 我们可以点击这个按钮 试运行定时任务 可以看到一个会话创建出来了
就是用来运行定时任务的 我们来打开看一下 好 可以看到定时任务已经完成了 后面每天跑的也都是这个样子了 这个就是定时任务了 最后我想给大家讲讲 Codex的一个特别实用的功能 那就是Codex mobile 具体来说 就是我们可以在手机上操纵 Codex来给我们完成任务 让我们来点击这里面的Codex mobile 再点击get started
然后点击allow 允许手机操纵这台电脑 然后再点击done 点击完done了之后 Codex应该会给你显示出 一个二维码来 如果你像我这样没有显示出二维码的话 可以点击这里的手机图标 这样二维码就出来了 随后我们需要打开手机摄像头 扫描这个二维码 然后我们就会被引导到 ChatGPT的Codex页面 在这里我们就能向电脑端的Codex 发送指令了
比如我们想让它操作一下日历 你还记不记得我们之前在日历上 创建了一个日程 标题就叫做 讨论马克笔记的后续设计 现在我们在手机上再发送一个指令 让它把这个日程去掉 我们点击聊天 然后我们再点击这里 在里面找出computer use这个选项 随后我们需要输入我们的请求
我们的请求就是把日历中5月28号 讨论马克笔记的日程删掉 写完之后先不要忙着提交 你看我们现在在马克笔记 这个项目目录下 但我们的请求其实跟这个项目的 代码没什么关系 我们就想操作一下日历软件 所以我们需要再点一下设置按钮 然后选择不使用项目 好这样就万事俱备了
我们提交请求 Codex首先询问我们是否同意使用 calendar这个软件 我们批准 然后Codex再次询问我们是否要 真的删除掉这个日程 我们确认 随后Codex就开始操作电脑了 我来给大家看看电脑上是个什么样子 你看日历上面多了一个鼠标 它正在操纵电脑删除这个日程 好删除成功了
这样我们就做到了用手机来操纵电脑了 是不是很方便呢 这样大家在外面也可以使用Codex 来做各种各样的事情了 好到这里本期视频就结束了 我是马克用最通俗的语言讲最硬核的 技术 我们下期再见 拜拜
Loading video analysis...