今天我们来讲讲大名鼎鼎的Codex,相信大家都已经听说过这个软件了。这是OpenAI的核心产品,对标Anthropic的Claude Code。Codex能做的事情非常多,它不仅能够帮你编写代码、排查bug、执行测试,还能管理Git、操作浏览器,甚至能直接控制电脑完成各种任务,非常强大。不过功能越多,越容易让人抓不住重点,所以这期视频我会带大家系统性地过一遍Codex最核心的功能,帮大家建立起一套完整的使用思路。

整个视频一共分为三个部分:第一部分是基础篇,主要带大家快速上手Codex并讲解一些核心配置和使用过程中容易踩坑的地方;第二部分是进阶篇,重点介绍版本控制、会话管理以及如何更高效地组织和推进开发任务;第三部分是扩展篇,我们会看看如何通过Plugin、Skill、Automation和Mobile等功能进一步扩展Codex的能力边界。所有的功能点和对应的时间戳我都打到目录上了,大家可以按需调整。好,话不多说,我们现在开始。

首先我们要做的是把Codex安装到电脑上面。我们可以打开这个页面,点击这里面的下载按钮就可以下载Codex了。下载好了之后我们来打开它,安装过程跟其他的普通软件一样。比如我用的是macOS,直接把Codex拖入到Applications文件夹里面就可以完成安装了。安装好了之后我们来打开Codex,它首先会提示我们登录,一共给了我们两个选项:第一个是使用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手机版,我们点击这个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,这代表我们当前使用的是GPT 5.5模型思考深度为medium也就是中等。我们点开它可以看到思考深度是可以自由调节的分为low、medium、high和extra high四个级别。思考深度越高codex花费的时间也就越长消耗的token也就越多但通常给出来的代码质量也会更好一些。

除了调整思考深度我们还可以在这里面切换模型下拉列表里面除了GPT 5.5还有GPT 4等等一系列的模型大家可以根据具体的任务难度来灵活选择。最后这里面还能设置模型的输出速度目前是standard也就是标准的速度旁边还有一个fast选项,开启fast模式之后生成的速度会提升到原来的1.5倍不过代价是token的消耗量也会相应的增加。

具体增加多少取决于你用的模型,比如说在GPT 5.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简单来说就是一个放在项目根目录里面的配置文件,每当Codex开始一个新会话的时候它都会自动读取这个文件把里面的内容当成对自己的指令来执行。所以我们只需要在这个文件里面写上这个Git commit的要求,无论我们开多少个新会话Codex都会记住这件事情的。我们先把原来的请求删掉我们不需要的了,然后我们点击这里使用VSCode打开这个项目目录在根目录下创建一个新的文件就叫做agents.md。然后在这个文件里面写:每次完成代码修改后都需要提交一次Git commit,这样agents.md就创建好了。让我们把VSCode关掉现在让我们来验证一下agents.md是否真的会生效:我们首先创建一个新的会话,然后提交需求往左下角增加一个主题切换选项支持用户在浅色模式和深色模式之间切换。回车提交让codex开始工作。

好,codex已经完成了我们来看看效果:你看左下角确实是出现了一个主题切换按钮,我们点击对应的主题就可以在浅色和深色两种模式之间切换看起来非常完美。我们现在最关心的是codex有没有帮我们做Git commit的操作:我们按一下command加J打开终端执行Git log来看看。你看这里面确实是多了一个新的commit message就是codex自己写的,这说明agents.md确实生效了。即使是在一个全新的会话里面codex也遵从了我们的要求在完成了代码修改之后自动提交了一次Git commit。这个就是agents.md的基本用法了,当然它能做的事情远不止这一件:比如你可以在里面规定代码风格、命名规范、技术栈要求,甚至是你的项目背景介绍等等。codex每次启动新会话的时候都会去读取这些文件这样它对你的项目就会有非常好的理解给出的结果也会更加准确。可以说agents.md写得越好codex就会用起来越顺手。

不过需要注意的是codex只会提交当前需求所对应的代码改动,我们一开始创建的agents.md不属于当前需求的范畴所以刚才codex并没有把它提交为一个git commit。我们点击这个changes再选择unstaged就可以发现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。这只需要在任务的最前面输入一个@符号,然后敲入“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创建了一个标签组(Tab Group),这个标签组专门用于解决我们的问题。然后它在这个标签组里面访问了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。

你在Skills标签下面都能找到,当我们安装对应的Plugin的时候我们都会把相关的Skill一块安装好,所以我们在这里都能找到这些Skill。不过有一个王牌级的Skill是单独列在Skills这个标签下面的,它并没有一个对应的Plugin。这个Skill就是ImageGen(图像生成),它是用来生成图片的,相信大家对GPT的生图能力早有耳闻:不仅美观而且非常的真实。

下面我们就来使用Skill来创建一个图片!我们在马克笔记项目下新建一个会话,然后输入我们的要求:给笔记软件生成一个宣传海报图片。注意要使用我给你的真实的软件截图!然后我们需要给Codex相应的软件截图,我们先按Command+J打开终端。

然后执行npm start命令来打开我们的笔记软件。然后我们回到Codex这里,点击加号再找到其中的“Attach Electron”这个选项。这里的Electron其实就是我们的马克笔记软件了,我们的笔记软件就是用Electron做的,所以在Codex里面看来这个笔记软件就叫做Electron。我们来直接点击这个选项!

点击之后Codex询问我们是否要启用这个功能,我们点击Enable。然后我们的马克笔记截图就到了聊天框里面了!这样Codex在做海报的时候就可以根据真实的软件截图来做了,是不是很方便?点一下按钮就可以把截图放进来了。不过这个还不是最方便的,Codex还提供了一个快捷键:按一下就能够把截图传过来!我来给大家演示一下。

我们之前给Codex的是浅色模式的截图,我现在再给Codx传一张深色模式的。我们回到马克笔记这里调到深色模式,然后重点来了:左右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来做各种各样的事情了。好!到这里本期视频就结束了,我是马克用最通俗的语言讲最硬核的技术,我们下期再见,拜拜!