
问题背景
这次想解决的是一个重复性很强的小流程:每天从 `/Volumes/s500pro/ima` 文件夹里找到最新的 Word 文档,然后上传到 ChatGPT app 里指定项目和指定对话中,用于后续的文章总结和发布脚本生成。
这个动作本身不复杂,但它涉及 Finder、ChatGPT 桌面应用、文件选择器和目标对话定位。如果每次都手动做,容易忘记上传到哪个项目、哪个对话。于是我尝试用 Record & Replay 插件录制一次真实操作,再把录制结果整理成一个可复用的 Codex skill。
最后生成的 skill 名为:
“`text
$ima-upload
“`
它的目标是:将 `/Volumes/s500pro/ima` 中最新的 Word 文档上传到 ChatGPT app 里 `wordpress` 项目的 `总结ima文章并生成发布脚本` 这个对话中。
现象
一开始我想要录制的动作可以描述为:
“`text
将 /Volumes/s500pro/ima 文件夹下的最新文档上传到 ChatGPT app 中。
“`
但这个描述还不够精确。真正可复用的流程至少要明确三件事:
- 源文件夹是 `/Volumes/s500pro/ima`;
- 文件类型是 Word 文档,实际命名类似 `ima_20260702.docx`;
- 上传目标不是任意输入框,而是 ChatGPT app 中 `wordpress` 项目的 `总结ima文章并生成发布脚本` 这个对话。
如果只录制鼠标坐标和窗口位置,下次屏幕布局一变就可能失败。所以这次的目标不是“照搬坐标”,而是把录制结果转成更稳定的语义流程。
排查过程
使用 Record & Replay 的第一步,是先准备好要演示的环境:
- 确认 `/Volumes/s500pro/ima` 磁盘和目录可访问;
- 确认 ChatGPT app 已登录;
- 先不要手动上传,等录制开始后再完整操作一遍;
- 避免在录制过程中展示密码、验证码、私钥等敏感信息。
准备好以后,在 Codex 对话里说:
“`text
开始录制
“`
随后 Record & Replay 开始捕捉屏幕和操作。录制启动后,我按真实流程演示了一遍:进入 Finder,打开 `/Volumes/s500pro/ima`,选择最新文档,再切到 ChatGPT app,把这个 Word 文档作为附件加入输入框。
操作完成后,回到 Codex 对话里说:
“`text
录制完成
“`
这时 Codex 停止录制,并读取录制产生的事件记录。那次录制里事件数量不多,但关键信息是够用的:Finder 中选中了 `ima_20260702.docx`,随后切到 ChatGPT,并且事件里能看到这个 Word 文档已经作为附件加入。
解决方法
录制完成后,最关键的一步不是直接把鼠标轨迹原样重放,而是把录制结果整理成稳定的 skill。
最终 skill 的流程被写成这样:
1. 检查 `/Volumes/s500pro/ima` 是否存在、可读,并且里面至少有一个 `.docx` 文件。
2. 如果文件名符合 `ima_YYYYMMDD.docx`,优先按文件名日期选择最新文档。
3. 如果没有标准命名,再考虑按修改时间选择最新 `.docx`,并说明这是 fallback。
4. 打开或聚焦 ChatGPT macOS app。
5. 进入 `wordpress` 项目。
6. 打开 `总结ima文章并生成发布脚本` 这个对话。
7. 使用输入框里的附件按钮,通常显示为 `添加文件等内容` 或加号按钮。
8. 在文件选择器中选择刚才确定的 `.docx` 文件。
9. 检查 ChatGPT 输入框里是否出现了对应文件名的附件标签。
这比录制坐标更可靠,因为它把“不稳定的 UI 动作”拆成了两个部分:
- 用文件系统能力确定最新文档;
- 用 ChatGPT app 中可见的项目名、对话名和附件按钮完成上传。
最终这个 skill 被命名为:
“`text
ima-upload
“`
路径是:
“`text
/Users/cuijianfeng/.codex/skills/ima-upload/SKILL.md
“`
完成后还做了结构校验,结果为:
“`text
Skill is valid!
“`
以后调用时,可以直接说:
“`text
Use $ima-upload to upload the newest Word document from /Volumes/s500pro/ima to the ChatGPT wordpress project conversation 总结ima文章并生成发布脚本.
“`
注意事项
Record & Replay 更适合记录“人实际怎么操作”,但生成 skill 时不要只依赖录制里的鼠标坐标。坐标、窗口大小、按钮位置都可能变化,长期可用的 skill 应该尽量使用稳定目标,例如文件路径、文件名规则、应用名称、项目名称、对话标题和按钮标签。
录制过程中如果出现密码、验证码、个人隐私或其他敏感内容,不应该写进 skill。Record & Replay 记录的是操作证据,不是公开文档素材。
如果录制信息不够完整,比如只看到切换窗口,没看到文件是否成功加入附件,就不要硬写成“已成功上传”。应该重新录制,或者补充说明缺失的信息。
另外,录制得到的动作不一定要 100% 原样复刻。像这次一样,录制里展示了“选中文档并上传”的目标,但 skill 中真正选择最新文件时,用文件名规则和系统文件能力会更稳。
总结
这次用 Record & Replay 制作 skill 的过程,可以总结成一条固定路线:
“`text
准备环境 -> 开始录制 -> 演示真实流程 -> 录制完成 -> 读取事件 -> 提炼稳定流程 -> 写成 skill -> 校验通过
“`
最终产物 `$ima-upload` 不是简单回放一次录制,而是把录制到的真实动作整理成了可复用的工作流。它知道从哪里找最新 Word 文档,也知道应该上传到 ChatGPT app 的哪个项目和哪个对话。
这类方法适合处理那些“没有标准 API、但人能稳定在界面里完成”的重复操作。先录一次,让 Codex 理解流程,再把流程沉淀成 skill,后续就可以用一句自然语言触发同样的操作。