TL;DR — 用 Codex CLI 把 OpenAI Image-2 接进 Claude Code,不需要 OpenAI API key,说一句「生图」图片直接存到 ./images/。Claude Code 终端版和 Claude App / Cowork 版各有一个 Skill,都可下载直接用。

我最近几乎整天待在 Claude Code 里。

写文章、拆任务、整理素材、改程序、生成 prompt,大部分工作都可以在同一个 Claude 窗口里完成。

但有一件事会让流程突然断掉:生图。

我也有 ChatGPT / OpenAI 账号,而 OpenAI 的图像生成能力很好用。问题是,每次我要生图时,通常得切到 ChatGPT 网页版、粘贴 prompt、等图片、下载,再把文件搬回项目文件夹。

这些动作都不难,但很烦。

所以我想做一件很懒的事:

能不能直接在 Claude Code 里说「帮我生一张图」,然后让它调用 Codex CLI,用我的 ChatGPT 账号去跑 OpenAI Image-2,最后把图片直接存进当前项目的 ./images/

答案是:可以。

这篇就是完整做法。

如果你刚开始热衷使用 Claude Code,这篇会带你看懂一件事:AI 工具真正好用的地方,不是单点能力,而是你能不能把它们接成一条不会中断的工作流。


这篇特别适合你,如果你:

  • 刚开始热衷使用 Claude Code
  • 同时也有 ChatGPT 或 OpenAI 账号
  • 常常需要把图片素材放进文章、演示文稿、产品 mockup 或项目文件夹
  • 不想每次生图都切到 ChatGPT 网页版
  • 想开始把 AI 工具串成自己的工作流,而不只是单点使用

如果你完全不碰命令行,或只是偶尔生一张图,直接用 ChatGPT 网页版就好。这篇的价值在于:把生图变成可以重复、可以批量、可以包成 Skill 的工作流。


先把几个名词翻成人话

名词你可以先这样理解
Claude CodeClaude 的开发者工作环境,可以在项目文件夹里协助你读文件、写文件、跑命令
Codex CLIOpenAI 的本机命令行工具,可以用 ChatGPT 账号登录,让 OpenAI 的能力进到你的终端
Image-2OpenAI 的图像生成模型,本文用它来产生图片;API 文档里的模型名称是 gpt-image-2
Skill给 Claude 的一组固定工作说明,让它知道遇到某种需求时该怎么做
MCP让 Claude 桌面 App 可以调用本机能力的桥
CoworkClaude 桌面 App 里更接近「一起工作」的界面,可产出文件与 outputs

最后你会得到的效果

在 Claude Code 里,你可以说:

帮我生一张戴墨镜的柴犬,存成 ./images/shiba.png

Claude 会帮你整理 prompt,调用本机的 Codex CLI。Codex CLI 会用你的 ChatGPT 账号调用 OpenAI Image-2,最后把图片存到项目文件夹。

整个过程不用打开 ChatGPT 网页版,不用手动下载图片,也不用另外准备 OpenAI API key。


这条工作流怎么跑?

主线很简单:

你在 Claude 里说需求
→ Claude 整理 prompt
→ Codex CLI 执行
→ ChatGPT 账号授权
→ Image-2 生图
→ PNG 存到 ./images/

不管你习惯在哪个界面工作,最后都收敛到同一条 OpenAI 链路:

Claude Code 跟 Claude 桌面 App 双界面收敛到 OpenAI Image-2 的流程示意图

两条路径的差别只有一个:Claude 是怎么叫你本机的 codex 起来跑。

Claude Code 本来就能跑 Bash,所以直接调用。Claude App / Cowork 要碰本机命令,需要「Control your Mac」MCP 这座桥。再往后都一样——Codex 用 ChatGPT 账号验证、调用 Image-2 出图、图片落到指定路径。

flowchart LR
    U([用户]) -->|"「生图一张柴犬」"| D{在哪个界面?}
    D -->|Claude Code 终端| S1[gen-image-cli<br/>Skill]
    D -->|Claude App / Cowork| S2[gen-image-app<br/>Skill]
    S1 -->|Bash 直接调用| CX[Codex CLI 0.125+<br/>本机]
    S2 -->|Control your Mac MCP<br/>osascript 请本机跑| CX
    CX -->|ChatGPT 账号验证| TOOL[image_gen.imagegen]
    TOOL --> GPT[(OpenAI Image-2<br/>gpt-image-2)]
    GPT -->|PNG bytes| F[./images/foo.png]
    F -->|"CLI:落到项目文件夹<br/>App:自动回传 Cowork outputs"| U

你需要先准备什么?

1. 安装 Codex CLI

两个安装方式任选一个:

# npm 版(跨平台都可)
npm i -g @openai/codex

# 或 Homebrew(macOS)
brew install --cask codex

2. 用 ChatGPT 账号登录 Codex

codex login                # 会打开浏览器引导你用 ChatGPT 账号授权
codex login status         # 应显示 Logged in using ChatGPT

3. 确认你的账号能使用图像生成

这条路线走的是 ChatGPT 账号授权,不是 OpenAI API key。

根据 OpenAI 官方公告,所有 ChatGPT 和 Codex 用户都能用图像生成:

账号 / 方案能不能用备注
免费 ChatGPT✅ 可以基础图像生成能力
ChatGPT Plus / Pro / Business✅ 可以质量、可控性、复杂场景处理通常更好
OpenAI API✅ 可以但这是另一条路,走 API key 与 token 计费

重点:你不一定要付 Plus 才能跑这套整合。免费账号也能用,差别只在输出质量。

4. 如果要在 Claude App / Cowork 使用,再安装 Control your Mac MCP

纯 Claude Code 终端用户可以跳过这一步——Bash 直接就能跑 codex。

如果你想在 Claude 桌面 App 的 Cowork 模式直接喊「生图」,需要 Control your Mac MCP 让 Claude 能调用你本机的 codex。下载 .mcpb 文件,双击安装到 Claude 桌面 App。第一次调用会跳 macOS 自动化权限请求,点允许。


最小可行版本:先跑一次看看

如果你只想先确认这件事真的能跑,不用急着包 Skill。

最小流程只有三步:

  1. 安装 Codex CLI
  2. 执行 codex login
  3. 在你的项目文件夹里执行:
mkdir -p ./images

codex exec -C "$(pwd)" -s workspace-write \
  --skip-git-repo-check \
  "请使用 image generation tool 生成一只戴墨镜的柴犬,存成 ./images/shiba.png"

成功的话,你会在当前项目底下看到:

./images/shiba.png

先跑通这一步,再来包 Skill。不要一开始就把 Codex CLI、Skill、MCP、Cowork 全部混在一起,不然会不知道问题出在哪一层。


实际输出长这样

跑了大约 1 分钟,得到一张 1254×1254、约 2 MB 的 PNG:

戴墨镜的柴犬,由 Codex CLI + Image-2 生成

图:用 Claude Code 调用 Codex CLI,再通过 OpenAI Image-2 产生的测试图。重点不是柴犬,而是图片直接落在 ./images/shiba.png——整个过程没有打开浏览器、没有粘贴 prompt 到网页版、没有手动下载。


我踩过的两个坑

坑 1:第一次跑 Codex 被 .codex 权限挡住

如果你看到:

Failed to create session: Operation not permitted

通常是 ~/.codex 权限不对。跑这条修正一下:

sudo chown -R $(whoami) ~/.codex

再重新执行一次。

坑 2:图片没有出现在你以为的文件夹

-C "$(pwd)" 的意思是:请 Codex 以「你执行命令当下所在的文件夹」作为工作目录。

所以你一定要先:

cd 你的项目文件夹

再执行 codex exec

不然图片可能会被存到 home、Downloads,或其他你没预期的位置。


包成 Skill:之后只要说「生图」

前面的 codex exec 可以手动跑,但每次都打那一长串很累。

所以我把它包成两个 Claude Skill:

你在哪里使用 Claude该用哪个 Skill需要 MCP 吗?
Claude Code 终端gen-image-cli不需要
Claude 桌面 App / Coworkgen-image-app需要 Control your Mac MCP

Claude Code 用户:先用 CLI 版

如果你主要在 Claude Code 里工作,事情最简单。Claude Code 本来就能跑 Bash,所以 gen-image-cli 可以直接调用本机的 codex,没有额外设置。

Claude App / Cowork 用户:再看 App 版

如果你想在 Claude 桌面 App 或 Cowork 窗口里直接说「生图」,那就需要多一层桥:Control your Mac MCP。

因为 Claude App 不能像 Claude Code 那样直接跑终端命令,所以要通过 MCP / osascript 请你的 Mac 帮忙执行 codex

下载与安装

📦 下载:gen-image-skills.zip

mkdir -p ~/.claude/skills && unzip -o ~/Downloads/gen-image-skills.zip -d ~/.claude/skills/

装完后,在哪个界面都能说「生图一张戴帽子的水豚」,Claude 会根据当下可用工具自动挑对应的 Skill。

如果想自己手写 CLI 版的 ~/.claude/skills/gen-image-cli/SKILL.md,核心内容是这样:

---
name: gen-image-cli
description: 在 Claude Code(CLI)内通过 Bash 调用本机 Codex CLI 生图(背后是 OpenAI Image-2,API 模型 gpt-image-2),存到当前工作目录的 ./images/。触发词:生图、画一张、来张图、generate image。
allowed-tools: Bash(codex:*) Bash(mkdir:*) Bash(ls:*) Bash(pwd:*)
---

# 生图 Skill(Claude Code CLI 版)

当用户说「生图」、「画一张」时,按下列步骤执行:

1. 确认当前工作目录(pwd)
2. 创建输出文件夹:mkdir -p ./images
3. 从用户描述提取图像描述跟英文文件名
4. 调用:
   codex exec -C "$(pwd)" -s workspace-write \
     --skip-git-repo-check \
     "请使用 image generation tool 生成:[描述],存成 ./images/[文件名].png"
5. ls 确认文件、回报绝对路径

App 版的差别在于 allowed-tools 改用 mcp__Control_your_Mac__osascript,通过 osascript 在你的 Mac 上跑 codex。完整内容在 zip 的 gen-image-app/SKILL.md

几个共通重点:description 写清楚触发词,Claude 才知道用户在喊它;allowed-tools 限缩到必要工具,避免误触;步骤描述用人类语言写就行。


这套方法适合谁?不适合谁?

适合:

  • 已经习惯在 Claude Code 里工作的用户
  • 同时使用 Claude 与 ChatGPT / OpenAI 的人
  • 常常需要产出文章封面图、演示文稿插图、产品 mockup、课程素材的人
  • 想把 AI 工具变成可重复工作流,而不是每次手动操作的人
  • 想开始理解 Claude Skill、MCP、本机 CLI 如何串起来的人

不太适合:

  • 只偶尔生一两张图的人(直接用 ChatGPT 网页版就好)
  • 完全不想碰终端的人
  • 对图片落文件位置、批量生图、自动化没有需求的人

结论:不是多一个工具,而是少一次中断

这套做法真正有价值的地方,不是「我又多接了一个 AI 工具」。

而是它让工作流少了一次中断。

Claude 继续当我的大脑,负责理解需求、拆任务、整理 prompt。Codex CLI 当我的手,负责把 OpenAI Image-2 叫起来生图。最后图片直接落在项目文件夹,不用切窗口、不用下载、不用搬文件。

如果你跟我一样,同时使用 Claude 和 ChatGPT,这是目前我觉得最顺的一种整合方式。

订阅费没白付,工作流还变更短。

我会持续在 paulkuo.tw 记录这类 AI 工作流实践:不是只看 AI 新闻,而是把 Claude、Codex、Skill、MCP、知识管理与自动化真正塞进日常工作。如果你也正在把 AI 变成自己的第二工作台,欢迎常回来逛逛。