Repository navigation
[Bug]: Codex /goal clear is sent as a chat message instead of clearing the persisted goal #13252
Description
Activity
Triage
Confirmed.
/goal clearis submitted as an ordinary Codex turn, and T3 never calls the app-server method that actually clears a goal. This is present on thev0.0.42tag (719a76ca) and on current main (f5ef0ddb9). The desktop package version on main is still0.0.42, so an update does not add this.Codex threads only advertise two slash commands,
compactandfeedback:t3code/apps/server/src/provider/Layers/CodexProvider.ts
Lines 680 to 687 in f5ef0dd
slashCommands: [ COMPACT_SLASH_COMMAND, { name: "feedback", description: "Send this thread and Codex logs to OpenAI", input: { hint: "Describe the issue (optional)" }, }, ], The composer intercepts only those local cases:
/feedbackis handled in the client and uploaded withfeedback/upload(packages/client-runtime/src/state/threadFeedback.ts,apps/web/src/components/ChatView.tsx).- An exact
/compactmessage is turned intothread/compact/start(apps/server/src/orchestration/Layers/ProviderCommandReactor.ts). /planand/defaultonly switch interaction mode (apps/web/src/composer-logic.ts).
/goal clearmatches none of those. It is sent as the text ofturn/start(buildTurnStartParamsinapps/server/src/provider/Layers/CodexSessionRuntime.ts), which is why the assistant sees the literal message. The same path is used by the web and mobile composers, not only the desktop app.The Codex app-server schema already has
thread/goal/set,thread/goal/get,thread/goal/clear,thread/goal/updated, andthread/goal/cleared(packages/effect-codex-app-server/src/_generated/meta.gen.ts). The session runtime never requests the goal methods. It requeststhread/start,thread/read,thread/compact/start,turn/start,turn/interrupt, andfeedback/upload. Goal notifications are not mapped to orchestration events (apps/server/src/provider/Layers/CodexAdapter.tsdrops unrecognized methods), so the client has no goal state and no clear control. The model cannot dismiss the goal either: its tools can mark a goal complete or blocked, not clear it.That matches the report.
thread/goal/clearreturning{"cleared":true}and a followingthread/goal/getreturning{"goal":null}is the supported operation, and there is no in-app equivalent.Related, not duplicates:
- [Feature]: Support /goal in codex provider #2819 is the broader
/goalrequest. It is closed, and the feature is not on main. The comment there already describes this one-way door. - feat(goals): track native provider goals across clients #11516 would have added
/goalcommands and a clear control. It was closed without merging. - fix(server): pause Codex goals before stopping turns #10447 only pauses an active goal before Stop. It does not clear a blocked goal, and it is not on main.
No further info is needed to confirm the gap. The out-of-band
thread/goal/clearcall remains the workaround.- addedbugSomething is broken or behaving incorrectly.Something is broken or behaving incorrectly.acceptedfeature request acceptedfeature request acceptedvia-triageFiled through npx t3 triageFiled through npx t3 triage
on Sep 23, 2026
Before submitting
Area
apps/desktop / Codex provider
Problem
Clearing an existing Codex Goal does not seem to be supported through the T3 Code chat composer. Sending
/goal clearby itself reached the assistant as an ordinary user message, and the persisted Goal remained unchanged.Steps to reproduce
blockedstatus./goal clearby itself in the chat composer and submit it.get_goalor the Codex app-serverthread/goal/getAPI.Expected behavior
Clear the attached Goal and show confirmation, without deleting the thread or project files. If this command is unsupported, show an explicit unsupported-command message and an available Goal-management action rather than silently submitting it as conversation text.
Actual behavior
The assistant received the literal
/goal clearmessage. A subsequent Goal read returned the same existing Goal inblockedstatus. This is a client command-handling observation, not a confirmed diagnosis of the underlying implementation.Backend check / workaround
Calling the supported Codex app-server
thread/goal/clearAPI for the same thread returned{"cleared":true}. A subsequentthread/goal/getreturned{"goal":null}, and the assistant-sideget_goalalso confirmed that the Goal was gone. A replacement Goal could then be created successfully.This required using the Codex CLI app-server API outside the T3 Code composer; there was no obvious in-app route for the user.
Version / environment
Impact
An obsolete blocked Goal is difficult to remove or replace from the client, even though the backend supports clearing it. Ordinary conversation can continue, but Goal management requires an out-of-band API workaround.
Related
#2819 covers general Codex
/goalsupport. This report concerns clearing an already persisted Goal.No session transcripts, Goal contents, thread identifiers, project details, screenshots, or logs are attached.