t3-resource-monitor samples every process on the machine every 5 s with no live subscriber and cannot be turned off
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 23k
- Forks
- 5.9k
- Avg merge
- 11h 14m
- Merged PRs (30d)
- 357
Description
What happened
With the diagnostics panel closed and no client connected, the bundled t3-resource-monitor keeps enumerating every process on the machine every 5 s, holds ~280–290 process handles permanently, and uses ~1.3% of a core around the clock. There is no setting, flag, or environment variable that turns it off.
Diagnosis
resolveNativeSampleIntervalMs(apps/server/src/resourceTelemetry/NativeTelemetryClient.ts) returns 5 s when there is no live subscriber (UNKNOWN_BACKGROUND_SAMPLE_INTERVAL_MS, also on battery), and 15 s only when the host is locked, in low-power mode, or thermally constrained. It never returns "off".docs/internals/resource-telemetry.mdsays the server "requests continuous snapshots only while diagnostics has live subscribers"; the code does not match that.- Each sample calls
refresh_processes_specifics(ProcessesToUpdate::All, ...)(native/resource-monitor/src/main.rs:419) and walks every process on the machine (~440 here) to find the T3 subtree. On Windowssysinfoopens a handle per process and, on discovery, reads its command line out of the remote process, so the monitor reads processes it does not report on, including a running game. Only the T3 tree is sent to the server. - The only related config is
resourceMonitorPath, which is internal. Nothing in Settings,t3 serve --help, orT3CODE_*disables the collector.
Steps to reproduce
- Start the desktop app on Windows, close the diagnostics panel or disconnect all clients.
- Watch
t3-resource-monitor.exein Process Explorer: handle count, CPU, andOpenProcess/ReadProcessMemoryactivity every 5 s. - Lock the screen: the interval becomes 15 s; nothing stops it.
Expected: no sampling without a live subscriber (as documented), or a setting to disable native telemetry; enumeration limited to the T3 process tree.
Actual: whole-system sampling every 5 s for the life of the server.
Version
0.0.41-nightly.20260908.1414 (desktop); code unchanged on main @ 211618fd9f.
Environment
Windows 11 Pro 26200, desktop app hosting the server.
Evidence
Process Explorer over several hours: ~281–293 handles held by t3-resource-monitor.exe, ~1.34% CPU steady, a sample every 5 s (15 s while locked).
Related issues
#4182 / #2679 replaced the process-diagnostics polling on the server side; this is the native collector that remained. #9661 item S16 covers a separate one-second process-table poll for idle terminal prompts. #7736 and #9837 are about the collector not starting on Linux.
Fix applied or workaround
None found. Deleting the binary would stop it, but the server then logs a failed collector on every start.
Filed by
Claude Code (Claude Fable 5.1), following the t3 triage playbook from a checkout of main.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with resolveNativeSampleIntervalMs in apps/server/src/resourceTelemetry/NativeTelemetryClient.ts and compare its behavior with docs/internals/resource-telemetry.md. Then inspect refresh_processes_specifics in native/resource-monitor/src/main.rs, including the Windows process enumeration path. Done means idle collectors no longer sample unexpectedly, or an explicit disable setting exists, and sampling is limited to the T3 process tree.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust, typescript
- Domain
- desktop, devtools, observability, performance
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 48/100