Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Scan for outdated or missing drivers - takes under a minuteDriver Scan →In one September 2026 Codex incident report, a warning that 13 skills had invalid SKILL.md files turned out to contain a more revealing detail: failed to read file: Too many open files (os error 24). That message indicates the operating system could not open a file; it does not, by itself, show that the Markdown was malformed. The report’s author linked the failure to file-descriptor pressure, but did not isolate the cause or establish that the same explanation applies to every Codex warning.
What the “invalid skill” warning actually said
The postmortem, published on DEV Community on September 26, 2026, describes Codex skipping 13 skills because their SKILL.md files were reported as invalid. Beneath that warning was the nested error: failed to read file: Too many open files (os error 24). The author identifies the incident record as dated September 21, 2026. Read the incident report.
As an Amazon Associate I earn from qualifying purchases.
The distinction is diagnostic. A syntax or schema problem is ordinarily found after a program reads the file and evaluates its contents. Here, the nested error says the read itself failed. Changing Markdown text would not address a process that cannot open the document. The word “invalid” in the warning was therefore not enough to establish that the files’ contents were invalid.
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →This is one author’s postmortem, not proof of how every Codex version handles every skill-loading failure. Use the nested error to guide investigation rather than assuming all “invalid” warnings have the same cause.
#1 Best Overall
What the author measured—and what the counts mean
The author’s 2026 diagnostic record included these observations:
| Observation | Recorded value | What it describes |
|---|---|---|
| Shell soft NOFILE limit | 256 | The shell’s soft open-file limit |
| Shell hard NOFILE limit | Unlimited | The shell’s hard limit, as recorded |
| Kernel-reported per-process maximum | 92,160 | The maximum reported by the kernel in the author’s diagnostic record |
| Desktop app-server numeric descriptors | 274 | A snapshot of the app-server process |
| Desktop app-server PIPE entries | 201 | Pipe entries in that process snapshot |
| Desktop app-server direct children | 67 | Direct child processes in that snapshot |
| Globally enabled MCP servers | 23 | The configured global MCP-server count |
| Skills in the agent tree | 61 | An inventory count |
| Skills in the Codex skill directory | 16 | An inventory count |
| Skills in plugin caches | 112 | An inventory count |
All figures in the table are the incident author’s observations, not independent measurements or general Codex limits. Inventory totals show how many skills were present in those locations; they do not show how many files were open simultaneously. Likewise, the shell’s soft limit of 256 cannot be directly compared with the running Desktop app-server’s 274 descriptors: the report did not establish that the app-server inherited that shell limit.
Rank #2
The snapshot showed many pipes alongside the read failures, but did not identify which exact descriptor allocation failed. Counts are clues about the incident, not proof of a specific failing operation.
Why file-descriptor pressure was the working explanation
On Unix-like systems, file descriptors are process-level references used for open files and communication channels such as pipes. A process that cannot obtain another descriptor may fail to open a file even when the file exists and its contents are valid. The reported os error 24 is consistent with that kind of resource exhaustion.
Rank #3
The author’s hypothesis was that parallel skill loading needed temporary descriptors while a long-running app-server already held many communication pipes associated with session-specific MCP child processes. The recorded pipe and child-process counts gave that explanation some support, but the author did not run a controlled test separating skill-loader concurrency from retained pipes. It remains a plausible explanation for this incident, not a proven general cause of Codex skill errors.
What changed in the reported remediation
The author described changes to launch limits and default MCP configuration, then checked whether the affected workflows ran successfully:
Rank #4
- The CLI launch path was changed to request a soft NOFILE limit of up to 65,536, while respecting a lower hard limit and preserving behavior if the operating system refused the change.
- A domain launcher received the same target.
- The global MCP default was reduced from 23 servers to 8. Comfy and video-vision plugins were disabled by default, while domain profiles remained available for work that needed more tools.
- An attempted user-session launchd maxfiles change was rejected with
Operation not permitted. The report does not claim that the Desktop GUI’s limit was raised.
A configured target is not the same as a verified effective limit. The verification note says a wrapper probe issued ulimit -Sn 4096 from a parent process whose soft limit was 256. According to the author, this showed that the launch path could attempt a higher limit; it did not establish that the final 65,536 target took effect in every launched process.
What the recovery checks establish—and what they do not
After hot reload, the author recorded 116 numeric descriptors and 78 PIPE entries in the Desktop app-server snapshot, compared with 274 and 201 before the changes. The author also reports shell syntax checks, parsing and MCP-list checks for 11 profiles, and a strict doctor run with 23 checks marked OK.
Best Value
Fresh ephemeral runs with both base and full profiles reportedly exited with status 0, produced the requested response marker, and emitted no file-descriptor or skill warnings. A follow-up check found no new MCP orphans. These are positive results for the runs that were checked; they are not evidence of a permanent fix or a guarantee that the problem cannot recur. The author characterized the runs as bounded smoke checks, not a long-duration session-churn test.
The report’s proposed way to investigate recurrence was to watch pipe and direct-child counts across sessions. If a fresh run with a verified effective limit continued to fail after os error 24 disappeared, the author said the diagnosis should shift toward a separate syntax or schema issue. That is a useful distinction: once the read succeeds, a content-level failure becomes possible again.
Keep diagnostic output from exposing credentials
The author also reported that raw configuration diffs and nearby lines exposed credential values during the investigation. This is a separate security concern, not evidence about why the skill reads failed. The postmortem leaves credential rotation as an unresolved follow-up.
When diagnosing configuration, report server names, enabled flags, counts, and whether credentials are present. Avoid dumping raw configuration or adjacent lines that may reveal secret values.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




