Aident AI

Codex Remote SSH Using 4 MB/s? Disable Apps Temporarily
If an idle Codex Remote SSH project keeps transferring megabytes per second, measure the remote codex app-server proxy, then repeat the same measurement with the apps feature disabled. A current report reproduced roughly 119 to 121 MB every 30 seconds on two Linux hosts with Apps enabled and almost no traffic with Apps disabled.
That result supports a narrow temporary workaround, not a universal root cause. Save active work, record the current feature state, disable only apps, reopen the remote project, and verify the change. This removes App Connector access on that remote host until you enable the feature again.
Confirm This Is the Same Failure
Use this guide when all of these conditions are true:
Codex Desktop is connected to a Linux project through Remote SSH;
the connection remains busy while no task or file transfer is running;
a remote
codex app-server proxyprocess stays active;traffic falls sharply when Apps is disabled and the project is reopened; and
the remote CLI is current enough that an old app-server version is not the better explanation.
Do not assume every busy SSH connection is this bug. A running task, repository transfer, terminal stream, port forward, extension, or reconnect loop can also move data.
What you observe | Better next check |
|---|---|
Sustained idle traffic changes with | Run the Apps A/B test below |
Repeated | Use the SSH app-server version guide |
Active responses end with | Use the stream recovery guide |
Many stale remote app-server processes remain | Preserve process counts and investigate the reconnect boundary separately |
Establish an Idle Baseline
Stop or finish active Codex tasks first. Do not kill the SSH session while it is writing files. On the remote Linux host, identify the newest proxy:
Expected result: one or more matching processes. If there are several, record their process IDs and elapsed times before choosing the one owned by the affected Remote SSH project.
For a single active proxy, sample the number of characters written by the process over 30 seconds:
Run the sample twice while the project is idle. Linux wchar counts bytes passed to write-like system calls; it is a useful proxy-output signal, not a packet-capture measurement. Confirm the same time window in your SSH, host, or network telemetry before calling it bandwidth.
The source report observed about 125 to 128 million bytes per 30-second sample. Your value does not need to match that number. The important evidence is a large, repeatable idle baseline followed by a same-host control.
Record the Apps Feature State
On the remote host, list Codex feature flags:
Record the line for apps, plus the remote version:
Do not disable plugins, tool_suggest, authentication, SSH host verification, or unrelated integrations for this test. Changing several variables destroys the A/B result and can remove capabilities that are not involved.
Disable Apps and Reopen the Remote Project
After saving active work, run this on the remote host:
Fully close the affected remote project in Codex Desktop, then reopen it so Desktop starts a new remote app-server proxy with the updated feature snapshot. Merely leaving the existing project open can keep the old process and make the test inconclusive.
Confirm the new state:
Now repeat the same two 30-second wchar samples. In the current report, the Apps-disabled control dropped to 12 bytes in 30 seconds on one host and visibly stopped sustained SSH traffic on the other.
Interpret the A/B Result
Result | Interpretation | Action |
|---|---|---|
Traffic falls from a repeatable high baseline to nearly idle | Apps catalog traffic is isolated as the trigger on this host | Keep Apps disabled temporarily and monitor the upstream issue |
Traffic remains high | The Apps hypothesis failed | Re-enable Apps and inspect tasks, reconnects, forwarding, and other processes |
No new proxy appears | The remote project did not restart cleanly | Fix the Remote SSH connection before repeating the test |
Traffic falls, but required connectors disappear | Expected feature tradeoff | Decide whether reduced bandwidth or remote Apps access matters more |
OpenAI's app-server documentation says app/list returns accessible and directory Apps, and app/list/updated notifications include the latest merged list. A related report measured a 2,402-entry update before a paginated 100-item response. Those facts make repeated catalog delivery a plausible boundary, but they do not prove the exact client-side loop behind every high-traffic session.
Keep the Workaround Reversible
If you do not need App Connectors on the remote host, leave Apps disabled until the upstream behavior changes. Record the date, Codex version, host, before-and-after samples, and the feature change in your incident notes.
If you need Apps again, restore the flag deliberately:
Close and reopen the remote project, confirm the feature state, and watch the same metric. Do not leave the flag enabled after traffic returns unless you have accepted the bandwidth impact.
Disabling Apps is not an upstream fix. It is a reversible containment step that trades connector access for a quiet remote link.
Verify More Than One Quiet Sample
Before declaring containment successful, confirm:
Two Apps-enabled idle samples establish a repeatable baseline.
Two Apps-disabled samples are near idle on the same host.
Host or SSH telemetry moves in the same direction as
wchar.One small read-only remote Codex task completes with Apps disabled.
No active task, file transfer, or unrelated forwarding rule changed during the comparison.
Keep the raw numbers. A statement such as "it seems quieter" is not enough to distinguish the feature flag from a task that happened to finish.
Avoid Destructive False Fixes
Do not delete ~/.codex, task history, worktrees, SSH keys, or application data. The current evidence does not tie those files to the catalog transfer.
Do not expose the app server directly to the internet, weaken SSH security, or disable authentication. The supported Remote SSH path already provides the transport boundary.
Do not kill every Codex process on a shared host. Identify the affected proxy and close the owning project cleanly so unrelated tasks are not interrupted.
Monitor the Upstream State With Aident Loadout
You can monitor the source issue and the related full-catalog report without pasting a GitHub token into chat. Start with this exact instruction:
Follow https://aident.ai/SETUP.md
Then ask:
Check Aident Loadout authentication and Vault status. Search the staging capability catalog for the current read-only GitHub issue lookup Action, inspect its schema, and preflight exact lookups for openai/codex issues 37726 and 34901. If the Action is free and both inputs are valid, execute it and return only issue number, state, updated time, labels, comment count, reaction count, title, and canonical URL. Do not comment, react, edit, close, label, publish, expose credentials, use Bash, or open SSH connections.
Success is measurable: both issue records are current, the result contains only the requested fields, and GitHub receives no write.
Set up Aident Loadout for bounded issue monitoring.
Report a Useful Reproduction
If the problem remains on a current Codex release, add a sanitized result to the closest upstream issue. Include:
local Desktop build and remote
codex --version;remote Linux distribution and architecture;
whether more than one SSH project was open;
two Apps-enabled and two Apps-disabled 30-second samples;
matching host or SSH traffic totals;
whether a new proxy was created after each flag change; and
whether connector access disappeared as expected.
Remove usernames, hostnames, repository names, process arguments containing private paths, task content, tokens, and SSH configuration secrets.
Sources
Refresh this guide when issue 37726 changes state, OpenAI changes app/list/updated delivery or pagination, or the Codex CLI changes Apps feature controls.



The one tool
for every tool
your agent needs.
Give any AI agent real capabilities in seconds. Connect 1,000+ tools once, skip the setup headache, and let your agents execute.
