Repository navigation
Agent-created top-level task is hidden from desktop search and Codex Mobile Remote #32614
Description
What version of the Codex App are you using?
Codex Desktop 26.707.51957 (build 5175), with codex-cli 0.144.0-alpha.4.
What subscription do you have?
ChatGPT account with Codex access.
What platform is your computer?
macOS (Apple Silicon).
What mobile client are you using?
ChatGPT mobile app using Codex Remote. Exact mobile build not captured.
What issue are you seeing?
A durable top-level Codex task created programmatically by another root task is hidden from both:
- desktop task search/listing by its exact title, and
- Codex Mobile Remote on the connected host.
The task is not a disposable subagent child:
- it has no incoming parent/child spawn edge;
- its registry metadata identifies it as a top-level user task;
- it has its own title and user-authored operating prompt;
- it can itself spawn child subagents;
- it is active and directly readable when addressed by thread ID.
The task can be read successfully by direct ID through the app-server, so the rollout/history is intact. Only discovery/listing is broken.
Diagnostic thread ID:
019f55d6-4d83-77f2-b52c-2db3cf44274b
Local metadata:
- title:
Minimal - Chief of Staff - source:
exec - thread source:
user - history mode:
legacy - archived: false
- originator: Codex Desktop
Remote Control is enabled and the same host is otherwise reachable from mobile.
Steps to reproduce
- In a normal Codex Desktop task, ask Codex to create a separate durable/background task for ongoing project coordination.
- Let the created task start and produce output.
- Confirm that the created task has no incoming spawn edge and can be read directly by its thread ID.
- Search desktop task history using the created task's exact title.
- Connect to the same host from ChatGPT mobile and inspect Codex Remote task history.
- Observe that the task is absent from discovery on both surfaces even though direct
thread/readsucceeds.
What is the expected behavior?
Codex should distinguish between:
- disposable child/subagent threads, which may reasonably stay collapsed under their parent; and
- durable top-level tasks created on the user's behalf, which should appear in normal desktop and mobile task discovery.
A useful product model would provide:
- automatic visibility for agent-created root tasks;
- child/subagent threads collapsed by default;
- an optional “show background/child threads” filter; and
- a “promote to normal task” or “show in task list” control.
This would avoid flooding history with every subagent while still making intentionally durable controller/orchestrator tasks reachable from mobile.
Actual behavior
The durable root task is directly addressable and active, but absent from title search and Codex Mobile Remote. There is no documented setting to expose or promote it.
Additional information
Related but not duplicate:
- iOS/macOS Remote Control broken after desktop update: host online, mobile 403/offline/stale Plan state #22773 — mobile Remote state/hydration problems
- Parallel-first subagents and nonblocking background task management #22099 — background task and subagent visibility proposal
- Subagent Support #2604 — subagent UI/visibility discussion
- Codex App/CLI: subagent tasks trigger reconnect loop and stream disconnect #24475 — subagent thread-state/reconnect failures
The strongest diagnostic is that exact-title listing returns no result while direct thread read by ID succeeds.
Activity
github-actions commentedon Jul 12, 2026
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
model_provider=openaiinstead of host config provider #31370Powered by Codex Action
beverm2391 commentedon Sep 2, 2026
I reproduced and traced a closely related case on macOS. In this variant, agent-created top-level tasks remain visible in the Codex Desktop sidebar and are readable by direct thread ID, but the bundled
list_threadstool omits them.The affected SQLite rows are valid and unarchived, with this shape:
source = 'vscode'thread_source = 'agent_created_thread'namepreviewandtitlehas_user_event = 0The desktop tool's global-list path calls app-server
thread/listwitharchived: false,sortKey: "updated_at", anduseStateDbOnly: true. In the state-DB query path,push_thread_filters_with_previewincodex-rs/state/src/runtime/threads.rsadds:AND threads.preview <> ''That removes these named, readable agent-created tasks before the desktop layer enriches results with its project-assignment state. The desktop wrapper separately merges pinned task IDs, but does not do the equivalent for non-pinned project-assigned task IDs. This explains the split: the sidebar can still display the task from desktop assignment state, while
list_threadscannot enumerate it.So the history is not missing or corrupt. A valid named task is being treated as ineligible solely because its preview is empty. This appears related to the empty-preview reports in #30385.
Potential narrow fixes:
A regression test could create an unarchived, named agent-created task with an empty preview and verify that global task enumeration returns it and that direct read/list behavior agree.
lucagarbarino commentedon Sep 2, 2026
Reproduced on macOS with ChatGPT Desktop 26.825.51511 (bundled codex-cli 0.151.0-alpha.7.2) and ChatGPT mobile on an already-connected iPhone using Remote.
Observed sequence:
The task remains active and directly readable; no history appears lost and no duplicate was created. The host is available, and the current conversation itself is being controlled successfully from the same iPhone, so this is not a general Remote pairing or host-connectivity failure.
This seems to confirm that agent-created named top-level tasks with an empty preview are excluded from mobile Remote discovery even when desktop pinning makes them enumerable locally. Expected behavior: a durable user-requested top-level task should appear in Remote, and especially when pinned.
The exact affected thread ID and local diagnostics can be provided privately if maintainers need them. Project name, local paths, prompt contents, and account details are intentionally omitted.
easyvibecoding commentedon Sep 5, 2026
Reconfirmed on 2026-09-05 with Codex Desktop 26.901.41600 (build 7982), bundled codex-cli 0.153.4, macOS 26.6.2 / Darwin 25.6.0 arm64, and ChatGPT on iPhone using Remote (mobile build not captured).
This adds a current-version reproduction and a user-confirmed mobile pinning workaround to the existing investigation. Unlike the earlier 26.825.51511 report above, pinning now made this particular task visible on the iPhone as well. It does not establish that all mobile pinning cases are fixed.
Observed on a real running task
create_threadtool in a saved Git project's worktree. This was not a disposable subagent.list_threadsresponse (40 recent results included older tasks).read_threadby ID succeeded and reportedactive/inProgress.functionCallOutputitem fromcodex_app.create_thread, followed by assistant output. There were zerouserMessageitems in that turn. The initial instruction was therefore not represented as an ordinary user-message preview.pinnedthrough the supported sidebar tool made it appear as the firstpinnedThreadsentry, stillactive.The user also reports the same visibility pattern for scheduled tasks until they manually interact. That broader automation case was not separately reproduced in this investigation.
Read-only DB evidence
The affected row has:
Against the exact same row in a read-only transaction:
This is a predicate probe, not a claim that a patched app-server or mobile client has been tested.
Root cause and why pinning works
The shipped 0.153.4 binary still contains the
AND threads.preview <> ''predicate. Current public source atddf04adalso applies it inpush_thread_filters_with_previewwhen empty previews are not explicitly included and no concrete section is requested.Read-only inspection of the installed desktop bundle confirms that the ordinary tool list calls
thread/listwitharchived: false,sortKey: "updated_at", anduseStateDbOnly: true. Its pinned path separately resolves pinned IDs from loaded state/summaries or directthread/read, then merges those records intopinnedThreads. That bypass explains the successful workaround without repairing the empty preview.In other words, a durable named task with running history is being treated as undiscoverable because it has no user-message-derived preview. This is not a general host connectivity failure.
Suggested fix and regression coverage
Please give intentionally created durable top-level tasks explicit discovery eligibility, or initialize their bounded preview from the creation instruction while preserving the actual message provenance. Existing affected tasks need to become discoverable too; fixing only future preview creation would leave them stranded.
Avoid simply removing every empty-preview filter: blank prewarmed threads and disposable children should retain their intended visibility behavior. Cover a named, non-ephemeral
agent_created_threadwith tool-originated first-turn input and an empty preview; verify normal listing, title search, and Remote discovery before any user follow-up or pinning. Include a separately reproduced automation variant and blank-prewarm controls.No task IDs, names, prompt contents, account identifiers, hostnames, private paths, screenshots, or raw logs are included in this public report. No production database or installed application files were edited. Reporting here follows the repository's current contribution policy, which requests issue-based analysis rather than external PRs.
yulepapa commentedon Sep 5, 2026
Additional reproduction on macOS host with ChatGPT mobile Remote on a Samsung Galaxy (Android).
The paired Mac host is online and Remote can show existing tasks. A newly created top-level Codex task in the same saved local project is visible and runnable on the Mac, but it does not appear in the Android Remote recent-task list or exact-title search. The task remains present locally; this is a discovery/listing failure, not an indication that the task or repository was deleted.
The mobile platform in this reproduction is Android/Samsung Galaxy, not iOS. The exact Android app build was not captured. No task IDs, project paths, account identifiers, credentials, transcripts, or raw logs are included.
griffith-h commentedon Sep 6, 2026
Additional desktop-only reproduction on September 6, 2026 (UTC+8) during a real development workflow.
Environment
Observed sequence
create_threadinitially returns aclientThreadIdandhostId: "local"while worktree setup is queued.list_threadscalls from the originating task, includinglimit: 50, omit it. An independentlist_threads({limit: 50})check also omits it from both normal and pinned results, with emptyunavailableHostsandunavailableSources.read_threadandwait_threadscalls succeed and show the task as active. The originating task can then resume following its work.The omission persisted for several minutes after execution began, beyond the initial queued creation response. No duplicate task was created in this incident.
Read-only evidence
The affected task has:
Its initial assignment is recorded as a
create_threadfunction-call output, rather than an ordinary user-message item. The visible originating task has nonempty preview and first-user-message fields.This matches the empty-preview discovery problem already discussed above. This report does not claim that a patched build has been tested.
Impact and expected behavior
This substantially disrupts my daily development workflow: a task is visibly running, but the originating agent cannot discover it through its normal task-list tool. Recovery required inspecting local records and obtaining its ID manually. The mismatch also creates a risk of mistaken retries and duplicate work.
Please ensure that intentionally created persistent tasks are discoverable once ready, including after queued worktree creation and when their initial assignment arrives as a tool output.
Related: #43017. This reproduction covers desktop discovery only; mobile behavior was not tested here. No live database or task history was modified, and no private task IDs, names, prompts, paths, or raw logs are included.
patrick-fu commentedon Sep 7, 2026
Connecting this to #41964: there is an end-to-end presentation breakdown on mobile Remote caused by how
create_threadmodels its initial dispatch.As noted above,
create_threadrecords the initial prompt as afunctionCallOutputrather than an ordinaryuser_message, leavingpreview = ''and triggering theAND threads.preview <> ''filter drop inpush_thread_filters_with_preview.However, the issue goes beyond list discovery:
functionCallOutput/ delegation cards (which desktop renders with the "Sent by ChatGPT from another task" badge).The result on mobile Remote is a completely blind workflow: the thread is invisible by default; once forced visible, it appears as an orphaned assistant response without the initial instruction that triggered it.
Fixing this by either promoting the initial dispatch prompt to a proper user input event or initializing the thread's
previewfrom the tool prompt would solve discovery here, and ensuring mobile clients render the tool-originated initial turn would resolve #41964.Marzx13 commentedon Sep 7, 2026
Additional Windows reproduction on Codex Desktop 26.901.2854.0, observed 2026-09-07. This adds a supported pin/unpin test to the existing visibility report.
A fresh persistent app task was created through create_thread in a saved Git project's Codex-managed worktree. Its harmless opening assignment completed. Direct read_thread succeeded and reported preview as an empty string, but the newest task was absent from list_threads.
Controlled sequence on the same task:
Both completed turns were directly readable. Their input items were functionCallOutput named create_thread and send_message_to_thread (codex_app namespace); preview stayed empty after both turns. The opening and follow-up replies were just echo-test acknowledgments.
This establishes a pinned-list workaround in this desktop session, not ordinary discoverability, phone visibility or restart persistence. The initial create call returned only a pending clientThreadId; the real ID was recovered using read-only local metadata and verified through read_thread. That is another limit of using the workaround as a fully supported automatic startup procedure.
No database, history or installed-binary edits were made. Private paths, task IDs and unrelated task contents are omitted. Related recent evidence: #43017, though this reproduction does not establish the same filesystem-listing or duplicate-ID mechanism.
takafuu commentedon Sep 9, 2026
Additional workaround evidence from September 9, 2026: Codex Desktop 26.901.51231 (build 8109), bundled codex-cli 0.153.4, macOS with ChatGPT iOS Remote. The mobile app build was not captured.
I also ran a creation-only retest after checking the recent iOS app update (the store showed an update from about 17 hours earlier; the exact installed build was not recorded). Automatic marker insertion was temporarily suspended, and one new standalone task completed with no userMessage. It did not appear in the normal iOS list. However, I could open it on iOS using the originating conversation's “Open chat” button. After returning to the list, the task appeared temporarily, then disappeared again. A subsequent read-only history check still found no userMessage. At that stage, no marker or pinning had been applied, and the time until disappearance was not measured. I then used the same helper as the automatic hooks, invoked manually through its apply command, to queue a marker into this exact task. Read-only checks confirmed userMessage was absent before insertion and present afterward, and the extra turn completed. After insertion, I confirmed that this same task appeared in the iOS list. My screenshot shows three non-empty message bodies: the original creation instruction, the initial assistant reply, and the added visibility marker. It also shows the cross-task attribution and response controls below the empty final response. Longer-term list persistence has not yet been measured.
In earlier local tests, create_thread and send_message_to_thread inputs appeared as functionCallOutput items, while manual Desktop input and the bundled CLI queue produced userMessage items. I confirmed on my iPhone that the tasks became visible after a visibility marker was added.
I have now tested automatic marker insertion in two fresh cases: a standalone task and a task in a Codex-managed project worktree. Direct history reads confirmed exactly one marker userMessage per task, with both tasks completed and idle. I confirmed that both appeared in the normal iOS task list and opened both to check their contents. I also captured screenshots of the list and the standalone task's content.
For the worktree case, create_thread initially returned only clientThreadId. The created task's own SessionStart hook used its canonical session ID to check eligibility and queue the marker. Shared receipts prevented duplicate insertion across creator-side and child-side hooks. No creation retry or direct database/history modification was used.
I then created another fresh standalone task with the automatic hooks enabled from the start. Runtime hook records confirmed that the creation hook queued the marker and the child-side hook did not resend it. Read-only history checks confirmed userMessage was present and the task was idle. I opened this task on iOS without ever opening it in the Mac UI. The screenshot shows the original creation instruction with cross-task attribution, the assistant reply, and the added marker. Thus opening the task in the Mac UI first was not required for its original instruction to render in this case. The helper did perform programmatic history reads, so this is not a no-read control.
Limitations:
A product fix should make intentionally created persistent tasks discoverable without requiring an extra user-message marker. Related: #26861. Screenshots and private task/host identifiers are omitted. Prepared with Codex assistance.
dpearson2699 commentedon Sep 10, 2026
Confirmed again on September 10, 2026, with Desktop 26.903.61454 (8378), bundled app-server 0.153.4, macOS 26.6.2, Apple Silicon. This adds a newer desktop-build reproduction and an isolated native-server result to the existing analysis.
Reproduction: From an existing task, request a separate named task in a saved Git project's worktree using
create_thread. Let its initial assignment execute, then calllist_threads({limit:50})before sending an ordinary user follow-up. The new task is omitted despite remaining accessible throughread_threadandwait_threadswhen its real ID is known. The omission persisted after the affected tasks completed.New native-boundary evidence: A read-only JSON-RPC probe using the installed bundled app-server called
thread/listwitharchived:false,limit:50,modelProviders:null,sortKey:"updated_at",useStateDbOnly:true, and acwdfilter restricted to three affected worktrees plus one comparison worktree. It returned only the comparison task andnextCursor:null. All three omitted records existed, were unarchivedagent_created_threadtasks with paginated history, and had emptypreviewandfirst_user_message. The comparison task had an ordinary user-message event and a populated preview. This reproduces the omission below the renderer and rules out the list limit for these records.The matching public release
rust-v0.153.4resolves to3d2ee51ca2d5db578f328aa75e20aa22c0197c9a:toolOutputtoResponseItem::FunctionCallOutput.Expected: accepted, persistent delegated tasks should be discoverable without an extra user message. No database/history edits, visibility markers, pinning workaround, or installed-binary changes were used for this evidence. No fixed build or mobile behavior was tested.
Kieranator commentedon Sep 11, 2026
Additional reproducible Windows case on September 11, 2026, with repeated recovery of 11 affected tasks across five repair batches. This adds current Windows build information, a failed assistant-follow-up control, and user-confirmed mobile recovery through a preview-only metadata repair.
Environment
--version.codex_app.create_thread, using the local environment.Reproduction and impact
list_threads({limit:50})inventory.read_thread: its history and active/completed status are available.This affects access to both running work and completed results. We observed intact task histories and project work; the observed failure is discovery, not task deletion.
Verified local evidence
Before recovery, affected records had:
Project-assignment metadata associated the tasks with the same saved project as visible controls. The host reported no unavailable hosts.
The initial assignment is saved as a
functionCallOutputfromcodex_app.create_thread, with a delegation payload containing the assignment. In the inspected affected history, there was no correspondinguserMessage. This corroborates the input/projection distinction described earlier in this issue.Controls and recovery observations
send_message_to_threadfunctionCallOutput, notuserMessageuserMessage;first_user_messageandpreviewbecome populated and the task is visiblepreviewto a short task summarylist_threadsinventory; the user confirmed mobile visibility after the initial batchThe preview-only repair was repeated successfully for the later batches, and was also used on one active task without interrupting its work. Each transaction was restricted to known unarchived task IDs with empty previews, preserving message history and the other task fields. We did not insert a synthetic user message or rewrite the original delegation.
These were local recovery operations, not a claim that editing Codex's database is a supported workaround. The listing check and a subsequent database read confirmed each repaired preview persisted at the time of verification. Long-term persistence across future versions was not tested.
Interpretation and expected fix
The evidence supports the existing diagnosis: valid named tasks created through delegation can have no user-message-derived preview, and the empty-preview eligibility rule excludes them. Local visible-task indexes also contain the
preview <> ''predicate.Please initialize/project a suitable preview for agent-created top-level tasks, or otherwise allow valid named tasks to be listed without requiring an ordinary user message. Preserve the original delegation/message-role semantics; reclassifying tool output as user input should not be necessary. Existing affected tasks also need a supported recovery path.
Related: #43017. We did not capture mobile
thread/listtraffic or reproduce its duplicate-ID findings, and are not claiming every mobile listing issue has the same cause.This report contains sanitized diagnostic findings only; private project content, paths, task IDs, and raw conversation logs are omitted.
rossc719g commentedon Sep 13, 2026
The server has an existing preview mechanism that looks like a focused fix for
this: treat accepted standalone delegation input as another preview source,
alongside ordinary user messages and goals.
I'm a Codex agent posting this report with the account holder's permission.
This adds evidence from Desktop
26.908.40834(build8881), bundled runtime0.154.0-alpha.6.2, on macOS/Apple Silicon. In controlled task-creation checks,a delegated task appeared on phone Remote, disappeared after refresh, and
survived refresh after an ordinary user-message turn. Saved history remained
directly readable before that follow-up.
The initial input is not just an unclassified raw history item. An archived test
records a named
create_threadfunction output with no call ID, followed by acompleted
FunctionCallOutputturn item. There is no ordinary user-messageevent in that first turn. The current
input-recording code
explicitly emits that structured item, but the
metadata eligibility check and extractor
omit it.
Rollout-based preview extraction
omits it too.
Two existing changes help establish the intended behavior:
starting or steering a turn with standalone
toolOutput, including durablehistory and resume.
discovery problem for tasks started with
/goal. It separated preview fromthe actual first user message and anticipated additional preview sources.
There is also a test gap: the
standalone-output integration test
first sends a normal
Hellouser message. The tool-output turn comes afterward,when preview metadata already exists. It tests notifications, model input, and
resumed history, but not discovery when tool output is the first input.
My preference would be to extend preview generation for accepted standalone
FunctionCallOutputitems, preserving their actual role and leavingfirst_user_messageuntouched. This needs both database and rollout-listingcoverage, recovery for existing affected tasks, and controls that keep truly
empty tasks and raw bootstrap context excluded. A normal first user message
should not be required to make an accepted persistent task discoverable.
The inspected client API has no preview setter:
thread/startandturn/starthave no preview argument, and
metadata updates
do not expose one. This favors a server repair over another desktop
initialization call. This is a source-supported proposal, not a tested patch.
Separate launch issues:
permission inheritance and
desktop state after overlapping starts.
MikeDevice commentedon Sep 20, 2026
Additional reproducible Windows case on September 20, 2026, using a newer desktop build. I am posting this confirmation with the account holder's authorization.
Environment
Reproduction and evidence
codex_app.create_threadin managed worktrees belonging to the same saved Git project.codex_app.list_threads({limit: 50})and the mobile Remote list/search.Nine unarchived affected tasks had the same metadata shape:
All nine were omitted from the normal task inventory and mobile Remote. Direct
read_threadby ID succeeded, including for a task that had completed substantial work and returned toidle, so this is a discovery failure rather than deleted history.Two sibling agent-created tasks from the same project were visible controls. Their
title,first_user_message, andpreviewfields were nonempty after ordinary UI user input.For one missing task,
send_message_to_threadwith a harmless status request successfully woke the task, completed a new turn, and returned it toidle. It still remained absent fromlist_threads, and its preview stayed empty. This corroborates that an assistant-originated cross-task follow-up does not repair discovery.Expected: a named, unarchived persistent task should remain discoverable in desktop and mobile Remote without requiring a separate UI-authored user message. The task name or accepted delegation input should provide a listing preview while preserving the true message provenance.
No private paths, task IDs, project names, conversation contents, or raw logs are included.
lukeivers commentedon Sep 21, 2026
Additional controlled iOS pin/unpin reproduction on September 21, 2026, using a newer desktop build. I am posting this confirmation with the account holder's explicit authorization.
Environment
26.915.31945(build9922).0.155.0-alpha.9.2.26.6.2(25G83), Apple Silicon (arm64).Reproduction
codex_app.create_threadin a saved Git project's managed worktree.codex_app.list_threads({limit: 50})omitted the task, and the user confirmed it was absent from the normal iPhone Remote task list.pinnedsection made it appear inpinnedThreads; the user immediately confirmed it became visible on iPhone Remote.pinnedmade it disappear from the ordinary desktop task inventory again; the user confirmed it also disappeared from iPhone Remote again.Projectssection. The project registration updated successfully on desktop, but the task and project still did not appear in the normal mobile Remote list.Direct desktop navigation was not treated as a successful mobile control: the desktop navigation API returned success, but the mobile screen did not navigate and the task remained absent from its list.
Read-only metadata
The affected row has the same shape already diagnosed in this issue:
The desktop project-assignment state still points at the correct saved project. No database, rollout, or application files were edited.
Additional value of this reproduction
This confirms the empty-preview discovery failure on current
26.915.31945/ runtime0.155.0-alpha.9.2and adds a clean reversible sequence on the same task:The history and work are intact. This is a discovery/indexing failure. A persistent delegated top-level task should remain discoverable without requiring a permanent pin, synthetic user message, or unsupported database repair. Existing affected tasks need a supported recovery path as well as a creation-time fix.
rapind commentedon Sep 30, 2026
Reproduced again on September 30, 2026, with a macOS host and ChatGPT mobile Remote. The installed ChatGPT desktop app reports version 26.928.20755 (build 12246); the test thread's persisted cli_version is 0.159.0. The mobile OS and app build weren't captured.
We created harmless, persistent top-level chats through codex_app.create_thread and compared discovery with direct access:
The final test had this metadata:
Both creator_user_id and creator_account_id were populated and exactly matched the originating user-created conversation. This rules out missing or different creator identifiers in these local records. The working directory matched the requested saved project, although the state database's project_id was null. The originating visible conversation also had a null project_id, so that field alone doesn't distinguish the missing task.
The first turn of an earlier test, read through read_thread, contained a functionCallOutput named create_thread followed by the assistant response, with no userMessage item. The empty preview/title/first-user-message fields in "one" match the eligibility problem discussed above.
The phone-open versus phone-closed observations suggest a possible difference between live creation updates and discovery after reconnecting, but this wasn't a controlled repeated test and doesn't establish phone state as the cause. Likewise, the task-card opening error may be a separate failure; its underlying server error wasn't identified. No source-code predicate test, pinning workaround, or metadata/history modification was performed in this reproduction. Earlier test chats were archived only at the user's request; "one" remained unarchived when the failed opening and metadata comparison were recorded.
Please include newly created named tasks with empty previews in discovery, and investigate whether the task-created card can resolve and open the same task through mobile Remote. Private thread IDs, account identifiers, paths, and raw logs are omitted.