Repository navigation
[Codex Desktop] Attachment wrapper is stored as the sidebar title instead of a localized generated title #42012
Description
Activity
- addedbugSomething isn't workingSomething isn't workingappIssues related to the Codex desktop appIssues related to the Codex desktop appwindows-osIssues related to Codex on Windows systemsIssues related to Codex on Windows systemssessionIssues involving session (thread) management, resuming, forking, naming, archivingIssues involving session (thread) management, resuming, forking, naming, archiving
on Sep 1, 2026 Additional reproduction: Goal-first thread title is generated from the internal wrapper instead of the actual Goal
Environment
- OS: Windows 10 LTSC 21H2
- Codex App:
26.1002.6548.0 - Windows package:
OpenAI.Codex_26.1002.6548.0_x64__2p2nqsd0c76g0 - Observed on: October 7, 2026
- Surface: Codex Desktop App
- Mode: Goal
Summary
I can reproduce the same title-generation problem on the current Codex Desktop build through the built-in Goal workflow.
When a new conversation starts with a sufficiently large Goal objective, Codex does not keep the complete objective inline in the first visible user message. Instead, it stores the actual objective in an attached
goal-objective.mdfile.The visible first turn is then replaced with a transport/wrapper instruction similar to:
Read the Codex goal objective file at
<local path>\.codex\attachments\<id>\goal-objective.mdbefore continuing.Codex uses that wrapper to generate the conversation title:
Read Codex goal objectiveinstead of generating a meaningful title from the actual Goal contents.
The attached screenshot shows this behavior directly. The local Windows username/path prefix and unrelated sidebar entries have been redacted, while the Goal wrapper, attachment path structure, filename, and generated title remain visible.
Steps to reproduce
-
Open Codex Desktop and create a new chat.
-
Prepare a large objective containing a substantial multi-stage task.
-
Copy and paste the objective into the composer as the first message of the new conversation.
-
The objective must be large enough that Codex no longer represents the full pasted text inline and instead stores it as an attached file.
-
Select Goal mode before sending the message.
-
Send the Goal.
-
Codex stores the actual objective in an attachment such as
goal-objective.md. -
The visible first user turn becomes an internal wrapper similar to:
Read the Codex goal objective file at <local path>\.codex\attachments\<id>\goal-objective.md before continuing. -
Inspect the conversation title in the left sidebar and in the thread header.
Actual behavior
The conversation is automatically titled:
Read Codex goal objectiveThe title describes the internal instruction used by Codex to locate and load the Goal objective, not the actual task the user asked Codex to perform.
The underlying Goal can contain a detailed multi-stage engineering objective with enough semantic information to produce a useful title, but that content is not reflected in the conversation name.
Expected behavior
For a Goal-first conversation, the generated thread title should be derived from the semantic contents of the actual Goal objective.
Internal transport instructions such as:
Read the Codex goal objective file ... before continuing.should never become the user-visible title of the conversation.
The title-generation path should resolve the Goal objective and derive a concise human-readable title from that content.
Why this matters
Long-running Goals are specifically used for large tasks that may continue across many turns and multiple implementation stages.
The Goal itself is therefore the best description of the purpose and identity of the thread.
If every sufficiently large Goal instead receives a generic title such as:
Read Codex goal objectivemultiple Goal threads become difficult to distinguish in the sidebar, and the user has to manually rename them after creation.
It also leaks an internal implementation detail into the user-facing UI: the attachment-loading wrapper becomes the semantic identity of the conversation even though it exists only to transport the real objective to the agent.
Relationship to this issue
This appears to be the same underlying class of problem described in this issue: title generation is using the serialized first-turn / attachment wrapper rather than the user's actual request.
The important difference in this reproduction is that this is not caused by an arbitrary file manually attached by the user.
It occurs through Codex's own built-in Goal workflow:
- The user submits a large Goal.
- Codex itself stores the Goal in
goal-objective.md. - Codex itself generates the wrapper telling the agent to read that file.
- The title-generation path then uses that wrapper instead of the Goal contents.
So this behavior can be reproduced using the normal Goal UI without any unusual attachment workflow.
Suggested title-generation behavior
A better title-generation path for Goal-first conversations would use the Goal objective itself as the semantic source of the thread name, rather than the transport wrapper around it.
For example, suppose the submitted Goal is a large multi-stage repository review:
- Stage 1: inspect the repository structure and relevant subsystems.
- Stage 2: review implementation quality, dependencies, tests, and packaging.
- Stage 3: prepare a structured report.
- Stage 4: use the report to investigate selected external references or documentation.
- Stage 5: produce the final recommendations.
The exact Goal may be much larger and may be stored internally in
goal-objective.md, but after the agent reads that objective, Codex has enough semantic context to derive a useful title.Reasonable generated titles for that example could be:
Repository auditRepository reviewRepository review and reportor, if the Goal itself has an explicit stage-oriented identity:
Repository audit — Stage 1-5The important property is that the title should describe the actual user objective, not the mechanism used to deliver it to the agent.
A possible implementation would be:
-
If the first turn is a Goal wrapper that references
goal-objective.md, resolve/read the Goal objective before generating the thread title. -
Generate the title from the objective content, using the same kind of concise semantic summarization used for normal conversation titles.
-
If the Goal contains an explicit short name, heading, milestone, or stage identifier, prefer that signal when it produces a useful human-readable title.
-
Never use internal transport text such as
Read the Codex goal objective file ... before continuingas the final user-visible title. -
If semantic title generation fails, fall back to a safe generic title such as
Goal,Repository audit, or another objective-derived fallback rather than exposing the attachment wrapper.
This would make Goal threads much easier to identify in the sidebar, especially when several long-running multi-stage Goals are active at the same time.
Screenshot
Screenshot attached.
The screenshot shows that:
- the first turn was Sent as goal;
- the visible first turn is the generated
goal-objective.mdwrapper; - the sidebar title is
Read Codex goal objective; - the thread header is also
Read Codex goal objective; - the actual Goal contents are not represented in the generated title.

What version of the Codex App are you using?
Codex App 26.825.6671.0 (Windows package); embedded
codex-cli 0.151.0-alpha.7.2.What subscription do you have?
Signed-in ChatGPT subscription; the exact tier is not exposed by the local Codex diagnostics available to me.
What platform is your computer?
Microsoft Windows 11 Home Chinese, version 10.0.26200, build 26200, x64.
What issue are you seeing?
When the first user turn of a new Codex Desktop task contains an attached image or file plus a Chinese request, the left-sidebar task title can become the raw attachment wrapper instead of a generated descriptive title.
The UI and Codex locale are Chinese (
zh-CN), but the sidebar title starts with:The persisted thread title contains the entire raw first-turn payload, including the internal attachment-handling text, a local temporary file path, and the actual request:
This makes the task appear to have an English title and can expose an unnecessarily long local path and full prompt in the title field. In the current task, the main header displayed a Chinese request summary while the left sidebar displayed the English wrapper, so the two surfaces were inconsistent.
I observed this on at least two attachment-first tasks. It is intermittent: other tasks, including some with attachments, received appropriate short Chinese titles.
What steps can reproduce the bug?
localeOverrideset tozh-CN.Files mentioned by the userinstead of a short Chinese title derived from the request.What is the expected behavior?
The task title should be generated from the user's actual request and should normally use the request's language.
Internal attachment wrapper text and local file paths should never be used as a visible task title. If automatic title generation fails, a safe fallback should extract the text under
My request(or the first non-internal user text), truncate it, and exclude attachment metadata.Additional information
Observed on 2026-09-01. No screenshot is attached because the original screenshot and stored title contain private local paths; the redacted text above reproduces the relevant behavior.