Language
Network checklist
Not applicable: the phone can reach Relay through the configured tunnel and load thread content. These reports concern request compatibility or local thread metadata/rollout handling after a connection has already been established.
Versions
- Codex Relay: 1.4.5
- Codex CLI / app-server: 0.146.0
- Node.js: 24.7.0
- OS: macOS 26.5.2
- Mobile app: version not exposed in the client UI
Summary
A workspace configured with runtimeMode: "auto" cannot start a new turn when Relay 1.4.5 uses a shared Codex 0.146.0 app-server.
Relay maps auto to approvalPolicy: "on-failure", but this app-server accepts only untrusted, on-request, granular, and never.
Steps to reproduce
- Run Codex 0.146.0 as the shared app-server.
- Run Codex Relay 1.4.5 with
--shared-app-server.
- Configure a workspace with
runtimeMode: "auto".
- Resume an idle persisted thread from the mobile client.
- Send a message.
Expected behavior
Relay sends a currently supported approval policy, or omits the field and lets app-server use its default. The turn starts and the user message is persisted.
Actual behavior
The client briefly shows the optimistic message, then the turn fails and no user message is persisted.
Changing the workspace runtime mode from auto to default is a working local workaround because Relay then sends on-request.
Logs or screenshots
Invalid request: unknown variant 'on-failure', expected one of 'untrusted', 'on-request', 'granular', 'never'
Possible fix
Normalize the legacy on-failure value before sending the request, or negotiate supported values with app-server. A compatibility test against current Codex approval-policy variants would prevent regression.
Language
Network checklist
Not applicable: the phone can reach Relay through the configured tunnel and load thread content. These reports concern request compatibility or local thread metadata/rollout handling after a connection has already been established.
Versions
Summary
A workspace configured with
runtimeMode: "auto"cannot start a new turn when Relay 1.4.5 uses a shared Codex 0.146.0 app-server.Relay maps
autotoapprovalPolicy: "on-failure", but this app-server accepts onlyuntrusted,on-request,granular, andnever.Steps to reproduce
--shared-app-server.runtimeMode: "auto".Expected behavior
Relay sends a currently supported approval policy, or omits the field and lets app-server use its default. The turn starts and the user message is persisted.
Actual behavior
The client briefly shows the optimistic message, then the turn fails and no user message is persisted.
Changing the workspace runtime mode from
autotodefaultis a working local workaround because Relay then sendson-request.Logs or screenshots
Possible fix
Normalize the legacy
on-failurevalue before sending the request, or negotiate supported values with app-server. A compatibility test against current Codex approval-policy variants would prevent regression.