TL;DR: Three ways in: launch with
codex -i screenshot.png "fix this", paste in the TUI with Ctrl+V (Ctrl, not Cmd, even on a Mac), or put a file path in the prompt. The flag and the path always work; paste depends on your terminal and breaks in WSL and over SSH. Keep images small and cropped, big captures get downscaled.
Method 1: the -i / --image flag
Codex CLI has what most terminal agents lack: a first-class flag for images at launch.
codex -i bug.png "the dropdown renders behind the modal, fix the z-index"
Multiple images work too, comma-separated or by repeating the flag:
codex --image before.png,after.png "what visual regressions do you see?"
codex -i mock.png -i current.png "make current match the mock"
If you’re scripting Codex or launching it fresh for a visual task, this is the clean way.
Method 2: paste with Ctrl+V (the Mac quirk included)
Inside the TUI, a clipboard image pastes with Ctrl+V. On macOS your muscle memory says Cmd+V, and Cmd+V does not attach the image, it does a plain text paste and finds nothing. This is the same trap Claude Code sets for Mac users: the answer is always Ctrl.
Paste is also the fragile method, because it inherits every terminal’s clipboard rules. Windows Terminal tends to grab Ctrl+V for its own text paste, WSL puts a broken clipboard boundary between your screenshot and the session, tmux adds its own layer, and SSH severs it entirely. If paste silently does nothing, it’s not you: the walls are the same for every terminal AI tool, and the fix is the same too.
Method 3: a file path in the prompt
Mid-session, no flag needed, works everywhere:
look at ./screenshots/tracer.png — why is the flame graph showing that spike?
Codex reads the file off disk. This survives every environment that kills paste, including SSH, where the file just has to exist on the remote machine first.
Invoke turns the clipboard image into a PNG on disk and pastes the file path into your terminal — one hotkey, works in Hyper, Wezterm, Windows Terminal, and WSL2. It's also the fastest way to dictate prompts to Claude Code. Free for 7 days, then $49 once.
Keep the image small and cropped
Large captures get downscaled before the model reads them, and a full 4K desktop screenshot spends most of its pixels on your wallpaper. Practical rules: stay under ~5 MB, crop to the region you’re asking about, and prefer a tight snip of the error dialog over a full-screen capture. Smaller image, sharper detail, better answer.
Quick answers
Can Codex CLI see images at all? Yes. Screenshots, mockups, diagrams, photos. Attach with -i, Ctrl+V, or a path.
Why doesn’t Cmd+V work on my Mac? The TUI binds image paste to Ctrl+V on every platform. Cmd+V is a text paste.
Paste does nothing in Windows Terminal / WSL. The terminal or the WSL boundary is eating it. Use the -i flag or a file path.
Multiple images? Yes: comma-separate them or repeat the flag.
The two-keystroke version
Whichever method you use, the slow part is the same: save the snip, find it, type the path. Invoke turns that into one hotkey — snip with Win+Shift+S, press the image key, and the saved PNG’s path lands in your terminal ready for codex -i or a mid-session prompt. Hold the dictation key and speak the request itself, and the whole report takes seconds. $49 once, local Whisper on your GPU. Free 7-day trial.