Remote SSH + Apps causes sustained ~4 MB/s outbound traffic from app-server; disabling `apps` stops it

Open 💬 3 comments Opened Aug 9, 2026 by fpspinach-dev
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

Summary

Codex Desktop Remote SSH can generate sustained outbound SSH traffic of roughly 4 MB/s from the remote codex app-server proxy when the apps feature is enabled.

This is reproducible on two independent Linux SSH hosts. Disabling apps on the remote host immediately stops the traffic.

This is not normal project file transfer: strace shows the proxy receiving and forwarding large app/list / App Directory payloads containing app metadata (names, descriptions, install URLs, icon assets, etc.).

The issue still reproduces with remote Codex CLI/runtime 0.147.0.

Impact

Observed cumulative SSH traffic exceeded 240 GB over roughly a day of normal Remote SSH use.

At the reproduced steady state:

  • apps=true: about 119–120 MB per 30 seconds (~4 MB/s, ~14 GB/hour per remote)
  • apps=false: traffic drops to effectively zero; one measurement was 12 bytes per 30 seconds

With multiple remote projects/hosts open, this can multiply quickly.

Environment

  • Client: Codex Desktop on macOS
  • Remote: Linux x86_64 over Codex Desktop Remote SSH
  • Confirmed remote runtime: codex-cli 0.147.0
  • Earlier reproduction also occurred with remote runtime 0.144.1
  • Reproduced on two separate Linux machines/projects

Reproduction

  1. Configure a Codex Desktop Remote SSH host.
  2. On the remote host, enable Apps:
codex features enable apps
  1. Restart/reopen the Remote Project so a new codex app-server proxy starts.
  2. Measure the proxy's stdout character count:
PID="$(pgrep -n -f 'codex app-server proxy')"
R1=$(awk '/^wchar:/{print $2}' /proc/$PID/io)
sleep 30
R2=$(awk '/^wchar:/{print $2}' /proc/$PID/io)
echo "$((R2-R1)) bytes"

Observed examples:

125002448 bytes / 30s  (~119 MB)
126731714 bytes / 30s  (~120 MB)
127639680 bytes / 30s  (~121 MB)
  1. Disable Apps on the same remote:
codex features disable apps
  1. Restart/reopen the Remote Project and repeat the measurement.

Observed:

12 bytes / 30s

The SSH traffic also visibly drops immediately after disabling Apps.

strace evidence

A 10-second sample of codex app-server proxy while the issue was active showed:

client read(0):       19
client sendto(10):    18
server recvfrom(10):  5132
stdout write(1):      5132

recv_MB=9.33
stdout_MB=7.58
send_MB=0.00

The server response payload contained a large sequence of App Directory entries, including fields such as:

name
description
logoUrl
iconAssets
distributionChannel
appMetadata
installUrl
isAccessible
isEnabled

and many unrelated public directory apps (travel, productivity, developer tools, etc.). This strongly suggests the traffic is the global merged App Directory/catalog being pushed over the Remote SSH app-server connection, rather than source files or Git state.

Earlier sampling also showed the proxy writing ~49 MB in 10 seconds while /proc/<pid>/io reported zero disk reads/writes, further ruling out repeated project filesystem scanning as the primary source.

Cross-host A/B result

Host A:

apps=true  -> ~119 MB / 30s
apps=false -> ~0

Host B:

apps=true  -> ~120 MB / 30s
apps=false -> SSH traffic immediately drops

This makes the issue unlikely to be specific to a repository, Git root, runtime data, file count, or one Linux host/kernel.

Expected behavior

Remote SSH should not continuously retransmit the complete Apps/App Directory catalog at multi-MB/s while idle.

app/list pagination and/or app/list/updated notifications should avoid repeatedly sending the full merged directory, or the Desktop client should deduplicate/throttle catalog refreshes and updates.

Workaround

codex features disable apps

This resolves the bandwidth issue, but disables Apps/Connector integration on that remote host, so it is not an ideal long-term workaround.

Related issue

Possibly related to #34901, which reports that app/list/updated can deliver the full 2,402-app merged catalog despite a paginated app/list request. That issue focuses on a plugin-detail rendering/refetch problem; this report focuses specifically on Remote SSH sustained network transfer / bandwidth usage, reproducible across two Linux remotes and eliminated by apps=false.

Sanitized logs and additional strace samples can be provided if useful.

View original on GitHub ↗

3 Comments

github-actions[bot] contributor · 18 days ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #37355
  • #37690

Powered by Codex Action

stanevo · 14 days ago

I can independently reproduce this on Windows Codex Desktop + Linux Remote SSH, and disabling apps fixes it here as well.

Environment:

  • Codex Desktop for Windows: 26.803.10989.0
  • Remote: Linux x86_64 over Codex Desktop Remote SSH
  • Remote network access is provided through an SSH reverse-forwarded local proxy, which made the bandwidth usage especially visible

Observed behavior while the Remote SSH project was open but completely idle:

VPN traffic:
12:29  download 6.42 GB / upload 42.51 GB
12:55  download 6.87 GB / upload 46.11 GB

That is about 4.05 GB in 26 minutes (~9.3 GB/hour) with no active task.

Windows Resource Monitor also showed the SSH process used by Codex Desktop's remote app-server connection sustaining multi-MB/s traffic. The process command line included:

ssh.exe ... Darwin ... exec codex app-server proxy

As a control, after fully quitting Codex Desktop while leaving the remote Codex CLI and the SSH reverse proxy running, traffic dropped substantially:

13:08  download 7.07 GB / upload 47.29 GB
13:37  download 7.26 GB / upload 47.49 GB

That is ~0.39 GB in 29 minutes.

I then ran:

codex features disable apps

After restarting the Remote SSH app-server/proxy, I measured /proc/<proxy-pid>/io using the same 30-second wchar method described above.

Three consecutive idle measurements were:

71103 bytes / 30s
12 bytes / 30s
40 bytes / 30s

Additional end-to-end A/B confirmation: after disabling apps, restarting Codex Desktop, and reopening the same Remote SSH project, I left it completely idle:

14:38  download 7.56 GB / upload 47.75 GB
15:00  download 7.57 GB / upload 47.75 GB

So only ~0.01 GB (~10 MB) total traffic was added over 22 minutes, with no measurable upload increase. Compared with ~4.05 GB over 26 minutes before disabling apps, this is roughly a 99.7% reduction in idle traffic.

So this appears to be the same issue on Windows as well: Remote SSH + apps=true causes sustained idle app-server traffic, and apps=false reduces it to effectively zero.

This suggests the bug is not specific to the macOS Desktop client.

samekj · 3 days ago

Independent confirmation from a third Linux Remote SSH host, including a recurrence on the newer remote runtime codex-cli 0.149.1.

Observed remote runtime versions:

  • 0.144.1
  • 0.147.0
  • 0.149.1

Strongest synchronized sample during a burst:

  • proxy wchar: 7,395,569 B/s
  • host interface egress: 7,479,566 B/s
  • attribution: about 99%
  • proxy read rate: 212 B/s

Four monitored episodes on one day produced about 83.4 GiB of outbound traffic. After upgrading, a later 0.149.1 recurrence reached 6,624,990 B/s for two consecutive minute samples and then self-cleared.

The controls also match this report:

  • a healthy connected proxy can write effectively zero bytes, so process name alone is not enough to identify the failure;
  • fully closing Codex Desktop makes the remote proxy exit and returns host egress to normal;
  • sending SIGTERM only to the proxy while Desktop remains open is not durable—the client creates a replacement proxy and the high output rate can resume;
  • the colocated application containers remained healthy and did not approach the proxy's output rate.

On 0.149.1, codex features list reports apps stable true. I have not independently captured the protocol payload or run the apps=true / apps=false A/B test on this host, so I cannot claim the app catalog is proven as the local root cause. The evidence is consistent with the diagnosis in this issue.

The exact rust-v0.149.1 source also still sends the complete merged vector in app/list/updated, while only the direct response is paginated:
https://github.com/openai/codex/blob/rust-v0.149.1/codex-rs/app-server/src/request_processors/apps_processor.rs

No customer content, endpoints, credentials, or raw payloads were collected. I can provide additional aggregate counters or run a privacy-safe method-name/payload-size capture if maintainers want a specific diagnostic.