# 不切窗口也能生图：让 Claude Code 借 Codex CLI 调用 OpenAI Image-2

> 用 Codex CLI 把 OpenAI Image-2 接进 Claude Code 工作流：一句话生图、直接落到项目文件夹，免 API key、免切窗口。

- Author: Paul Kuo（郭曜郎）
- Date: 2026-04-29
- Pillar: 智能与秩序 / Intelligence & Order
- Tags: Claude Code, Codex CLI, OpenAI Image-2, ChatGPT 生图, Claude Skill, AI 工作流整合, 生图自动化
- Canonical: https://paulkuo.tw/zh-cn/articles/claude-code-codex-imagegen/
- Language: Simplified Chinese (简体中文)
- Translation: AI-translated from the zh-Hant (Traditional Chinese) original
- Original (zh-Hant): https://paulkuo.tw/articles/claude-code-codex-imagegen.md
- Site index for LLMs: https://paulkuo.tw/llms.txt
- Idea file (goal, constraints, tradeoffs, acceptance criteria; written in zh-Hant; feed it to your agent to rebuild this project): https://paulkuo.tw/articles/claude-code-codex-imagegen.idea.md

---

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

<div class="listen-summary" style="margin:1.25rem 0;padding:0.75rem 1rem;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-section);">
  <div style="font-size:0.9rem;font-weight:600;color:var(--text-secondary);margin-bottom:0.5rem;letter-spacing:0.02em;">▶ 听摘要</div>
  <audio preload="none" controls style="width:100%;display:block;">
    <source src="https://audio.paulkuo.tw/claude-code-codex-imagegen-zhcn.mp3" type="audio/mpeg" />
    您的浏览器不支持音频播放，请点此 <a href="https://audio.paulkuo.tw/claude-code-codex-imagegen-zhcn.mp3">下载音频</a>。
  </audio>
  <div style="font-size:0.75rem;color:var(--text-secondary);opacity:0.75;margin-top:0.4rem;">AI 合成语音・作者本人声线克隆</div>
</div>

我最近几乎整天待在 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 工具串成自己的工作流，而不只是单点使用

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

---

## 先把几个名词翻成人话

| 名词 | 你可以先这样理解 |
|---|---|
| Claude Code | Claude 的开发者工作环境，可以在项目文件夹里协助你读文件、写文件、跑指令 |
| Codex CLI | OpenAI 的本机命令行工具，可以用 ChatGPT 账号登录，让 OpenAI 的能力进到你的终端机 |
| Image-2 | OpenAI 的图像生成模型，本文用它来生成图片；API 文档里的模型名称是 `gpt-image-2` |
| Skill | 给 Claude 的一组固定工作说明，让它知道遇到某种需求时该怎么做 |
| MCP | 让 Claude 桌面 App 可以调用本机能力的桥 |
| Cowork | Claude 桌面 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 的流程示意图](/images/articles/claude-code-codex-imagegen-flow.jpg)

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

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

```mermaid
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

两个安装方式任选一个：

```bash
# npm 版（跨平台都可）
npm i -g @openai/codex

# 或 Homebrew（macOS）
brew install --cask codex
```

### 2. 用 ChatGPT 账号登录 Codex

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

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

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

依 [OpenAI 官方公告](https://openai.com/zh-Hant/index/introducing-chatgpt-images-2-0/)，所有 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 的 Chat / Cowork 窗口直接喊「生图」，需要这个 MCP 让 Claude 能调用你本机的 `codex`。

去 [k6l3/osascript-dxt（GitHub）](https://github.com/k6l3/osascript-dxt) 下载 `.mcpb` 文件，双击安装到 Claude 桌面 App。第一次调用会跳 macOS 自动化权限请求，点允许。

---

## 最小可行版本：先跑一次看看

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

最小流程只有三步：

1. 安装 Codex CLI
2. 执行 `codex login`
3. 在你的项目文件夹里执行：

```bash
mkdir -p ./images

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

成功的话，你会在当前项目底下看到：

```bash
./images/shiba.png
```

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

---

## 实际输出长这样

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

![戴墨镜的柴犬，由 Codex CLI + Image-2 生成](/images/articles/claude-code-codex-imagegen-shiba.png)

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

---

## 我踩过的两个坑

### 坑 1：第一次跑 Codex 被 `.codex` 权限挡住

如果你看到：

```bash
Failed to create session: Operation not permitted
```

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

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

再重新执行一次。

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

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

所以你一定要先：

```bash
cd 你的项目文件夹
```

再执行 `codex exec`。

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

---

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

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

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

| 你在哪里使用 Claude | 该用哪个 Skill | 需要 MCP 吗？ |
|---|---|---|
| Claude Code 终端机 | `gen-image-cli` | 不需要 |
| Claude 桌面 App / Cowork | `gen-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](/downloads/gen-image-skills.zip)**

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

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

如果想自己手刻 CLI 版的 `~/.claude/skills/gen-image-cli/SKILL.md`，核心内容是这样：

```yaml
---
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，最后把图复制回 Cowork outputs 给你预览。完整内容在 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 变成自己的第二工作台，欢迎常回来逛逛。

---

**同一条 codex 桥，还有个进阶用法**：让 codex 在 Claude 之外挑错、给你第二意见。做法我写在这篇：[我让 codex 挑 Claude 的错，但不照它说了算](/zh-cn/articles/ai-second-opinion-independence/)。
