Repository navigation
Promote cmux-node-options-tmpdir-guard; launchd cross-ref (bundle 1.130.0) - #333
Merged
Merged
Conversation
…30.0) The launchd-env-sync-session-leak branch carried a "Related" pointer to cmux-node-options-tmpdir-guard that never landed, because the target was only ever a personal skill under ~/.claude/skills - a shadow copy nobody else has. Adding the pointer alone would have shipped a dangling reference in a public repo, so the target comes with it. cmux launches Claude Code with a --require shim whose .cjs lives under $TMPDIR. macOS reaps files there once they go untouched for about three days, which is exactly the window a reboot-surviving cmux session lives past. The file disappears while NODE_OPTIONS still names it, and from then on every node/claude invocation in that session dies on a missing --require target - a failure that reads as a broken toolchain and arrives days after anything changed. The skill carries the stopgap for builds predating manaflow-ai/cmux#3699: a persistent copy under $HOME, and a LaunchAgent that recreates the $TMPDIR file and refreshes its mtime daily, well inside the reap window. The subtle part is why the LaunchAgent can find the right file at all - it runs in the same per-user launchd context as the GUI app, so getconf DARWIN_USER_TEMP_DIR returns the same per-boot temp base cmux used, and nothing has to be hardcoded. The personal copy's closing reference pointed at a memory note with no public counterpart; it is replaced by a pointer back to launchd-env-sync-session-leak, which is the same class of failure from the other direction - a stale value synced into launchd, rather than a guard file reaped out from under one. Versions: bundle 1.130.0; launchd-env-sync-session-leak skill 1.1.0 -> 1.2.0, and its standalone plugin 1.0.0 -> 1.2.0, which had been left behind at 1.0.0 by an earlier skill bump. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The launchd-env-sync-session-leak branch carried a "Related" pointer to
cmux-node-options-tmpdir-guard that never landed, because the target was
only ever a personal skill under ~/.claude/skills - a shadow copy nobody
else has. Adding the pointer alone would have shipped a dangling reference
in a public repo, so the target comes with it.
cmux launches Claude Code with a --require shim whose .cjs lives under
$TMPDIR. macOS reaps files there once they go untouched for about three
days, which is exactly the window a reboot-surviving cmux session lives
past. The file disappears while NODE_OPTIONS still names it, and from then
on every node/claude invocation in that session dies on a missing --require
target - a failure that reads as a broken toolchain and arrives days after
anything changed.
The skill carries the stopgap for builds predating manaflow-ai/cmux#3699: a
persistent copy under $HOME, and a LaunchAgent that recreates the $TMPDIR
file and refreshes its mtime daily, well inside the reap window. The subtle
part is why the LaunchAgent can find the right file at all - it runs in the
same per-user launchd context as the GUI app, so getconf DARWIN_USER_TEMP_DIR
returns the same per-boot temp base cmux used, and nothing has to be
hardcoded.
The personal copy's closing reference pointed at a memory note with no
public counterpart; it is replaced by a pointer back to
launchd-env-sync-session-leak, which is the same class of failure from the
other direction - a stale value synced into launchd, rather than a guard
file reaped out from under one.
Versions: bundle 1.130.0; launchd-env-sync-session-leak skill 1.1.0 ->
1.2.0, and its standalone plugin 1.0.0 -> 1.2.0, which had been left behind
at 1.0.0 by an earlier skill bump.
🤖 Generated with Claude Code