# 不切視窗也能生圖：讓 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 工作流整合, 生圖自動化
- Series: Build Log (part 3 of 6): https://paulkuo.tw/series/build-log/
- Canonical: https://paulkuo.tw/articles/claude-code-codex-imagegen/
- Site index for LLMs: https://paulkuo.tw/llms.txt
- Idea file (goal, constraints, tradeoffs, acceptance criteria; 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-zh.mp3" type="audio/mpeg" />
    您的瀏覽器不支援音訊播放，請點此 <a href="https://audio.paulkuo.tw/claude-code-codex-imagegen-zh.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 的錯，但不照它說了算](/articles/ai-second-opinion-independence/)。
