feat: add image support and improve error resilience for Codex#7033
Merged
codefromthecrypt merged 2 commits intomainfrom Feb 6, 2026
Merged
feat: add image support and improve error resilience for Codex#7033codefromthecrypt merged 2 commits intomainfrom
codefromthecrypt merged 2 commits intomainfrom
Conversation
Signed-off-by: Adrian Cole <adrian@tetrate.io>
4 tasks
Contributor
There was a problem hiding this comment.
Pull request overview
This PR adds image support to both Codex providers (CLI and ChatGPT) and improves error resilience. Previously, images were visible in the UI but silently dropped during API calls.
Changes:
- Added image handling for Codex CLI provider (base64 decode → temp files →
-iflags) - Added image serialization for ChatGPT Codex provider (data URI format in API payload)
- Improved error classification to handle context window exhaustion and rate limits properly
- Added stderr draining to prevent pipe buffer deadlock in Codex CLI
- Added
fetch_supported_modelsimplementation for UI model dropdown - Refactored
messages_to_promptinto a single-passprepare_inputfunction
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| crates/goose/src/providers/codex.rs | Implemented image support via temp files, improved error handling, added stderr draining, refactored input preparation |
| crates/goose/src/providers/chatgpt_codex.rs | Added image serialization as input_image content with data URI |
jh-block
approved these changes
Feb 6, 2026
| let prompt = self.messages_to_prompt(system, messages); | ||
| // Single pass: text → prompt (stdin), images → temp files (-i flags) | ||
| let image_dir = Paths::state_dir().join("codex/images"); | ||
| std::fs::create_dir_all(&image_dir).ok(); |
Collaborator
There was a problem hiding this comment.
nit: ignoring the possible error here means that we'll fail later, inside prepare_input, when we try to create the temp file, which could be more confusing than if we failed here.
katzdave
added a commit
that referenced
this pull request
Feb 6, 2026
…webtoken-10.3.0 * origin/main: (54 commits) Switch tetrate tool filtering back to supports_computer_use (#7024) feat(ui): add inline rename for chat sessions in sidebar (#6995) fix: handle toolnames without underscores (#7015) feat(claude-code): use stream-json protocol for persistent sessions (#7029) test(providers): add model listing to live provider suite (#7038) Agent added too much (#7036) fix(deps): bump tree-sitter to 0.26 and set sqlx default-features=false to fix RUSTSEC advisories (#7031) feat: add image support and improve error resilience for Codex (#7033) fix(providers): Azure OpenAI model listing 404 during configure (#7034) fix(deps): bump bat to 0.26.1 to resolve RUSTSEC-2026-0008 (#7021) Don't swallow Tetrate errors (#6998) docs: remove hardcoded_stuff links (#7016) fix(ui): keep Hub chat input from overlapping SessionInsights on paste (#6719) Clean up css (#6944) docs: aws bedrock bearer token auth (#6990) docs: extended custom provider headers support (#7012) feat(cli): add type-to-search filtering to select/multiselect dialogs (#6862) feat(ci): add cargo-audit workflow for scanning rust vulnerabilities (#6351) feat: add User-Agent header to MCP HTTP requests (#6988) chore(deps-dev): bump webpack from 5.102.1 to 5.105.0 in /ui/desktop (#6996) ... # Conflicts: # Cargo.lock
zanesq
added a commit
that referenced
this pull request
Feb 6, 2026
* origin/main: Remove build-dependencies section from Cargo.toml (#6946) add /rp-why skill blog post (#6997) fix: fix snake_case function names in code_execution instructions (#7035) Document max_turns settings for recipes and subagents (#7044) feat: update Groq declarative data with Preview Models (#7023) fix(codex): propagate extended PATH to codex subprocess (#6874) Switch tetrate tool filtering back to supports_computer_use (#7024) feat(ui): add inline rename for chat sessions in sidebar (#6995) fix: handle toolnames without underscores (#7015) feat(claude-code): use stream-json protocol for persistent sessions (#7029) test(providers): add model listing to live provider suite (#7038) Agent added too much (#7036) fix(deps): bump tree-sitter to 0.26 and set sqlx default-features=false to fix RUSTSEC advisories (#7031) feat: add image support and improve error resilience for Codex (#7033) fix(providers): Azure OpenAI model listing 404 during configure (#7034) fix(deps): bump bat to 0.26.1 to resolve RUSTSEC-2026-0008 (#7021) Don't swallow Tetrate errors (#6998) docs: remove hardcoded_stuff links (#7016) # Conflicts: # ui/desktop/src/components/GooseSidebar/AppSidebar.tsx
kuccello
pushed a commit
to kuccello/goose
that referenced
this pull request
Feb 7, 2026
…#7033) Signed-off-by: Adrian Cole <adrian@tetrate.io>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fix image support for both Codex providers. Previously, users could paste or attach images in goose desktop, but both the Codex CLI and ChatGPT Codex providers silently dropped them — the image appeared in the chat UI but was never sent to the model.
Codex CLI provider (
codex): Images are now decoded from base64, written to temp files, and passed to the CLI via the-iflag.ChatGPT Codex provider (
chatgpt_codex): Images are now serialized asinput_imagecontent items with adata:URI in the Responses API payload.Additional improvements (Codex CLI)
fetch_supported_modelsso the UI model dropdown populates correctlyType of Change
AI Assistance
Testing
Image path
run
just run-uithen attach an test_image.jpg, ask "what's in this image?":Related Issues
Extracted from #6972
Screenshots/Demos (for UX changes)
Before — Codex CLI (goose v1.23.1, image visible in chat but silently dropped):

Before — ChatGPT Codex (goose v1.23.1, image visible in chat but silently dropped):

After — Codex CLI (image passed via

codex exec -i <FILE>):After — ChatGPT Codex (image sent as

input_imagein API payload):