Skip to content

fix(shell): repair node-pty spawn-helper perms on macOS (real posix_s…#46

Merged
DannyNs merged 1 commit into
developfrom
fix/macos-shell-spawn
Jun 18, 2026
Merged

fix(shell): repair node-pty spawn-helper perms on macOS (real posix_s…#46
DannyNs merged 1 commit into
developfrom
fix/macos-shell-spawn

Conversation

@DannyNs

@DannyNs DannyNs commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

…pawn fix)

The persistent 'posix_spawnp failed' on macOS was misdiagnosed as a bare command-name issue. node-pty on macOS (#if APPLE) launches the shell via its build/Release/spawn-helper using posix_spawn(helper). err != 0 — surfaced as 'posix_spawnp failed.' — means the HELPER itself could not be spawned, i.e. it is missing, not executable, or quarantined. node-pty's post-install never chmods it, and pnpm's store materialization can drop the execute bit, so a fresh install throws on every pane/agent (Add LLM) launch.

  • ensureSpawnHelperExecutable(): darwin-only, run-once, best-effort guard invoked before the first spawn. chmod 0755 when the execute bit is missing, strip the com.apple.quarantine xattr, and log an actionable message when the helper binary is absent (arch mismatch -> rebuild node-pty).
  • lacksExecuteBit(): pure helper in shell-config (unit-tested).

Note: posix_spawn() does not search PATH, but spawn-helper execvp()s the shell internally, so PATH lookup still happens in the child — the earlier absolute shell path / PATH hardening remains valid but was not the cause of this error.

…pawn fix)

The persistent 'posix_spawnp failed' on macOS was misdiagnosed as a bare
command-name issue. node-pty on macOS (#if __APPLE__) launches the shell
via its build/Release/spawn-helper using posix_spawn(helper). err != 0 —
surfaced as 'posix_spawnp failed.' — means the HELPER itself could not be
spawned, i.e. it is missing, not executable, or quarantined. node-pty's
post-install never chmods it, and pnpm's store materialization can drop the
execute bit, so a fresh install throws on every pane/agent (Add LLM) launch.

- ensureSpawnHelperExecutable(): darwin-only, run-once, best-effort guard
  invoked before the first spawn. chmod 0755 when the execute bit is missing,
  strip the com.apple.quarantine xattr, and log an actionable message when the
  helper binary is absent (arch mismatch -> rebuild node-pty).
- lacksExecuteBit(): pure helper in shell-config (unit-tested).

Note: posix_spawn() does not search PATH, but spawn-helper execvp()s the shell
internally, so PATH lookup still happens in the child — the earlier absolute
shell path / PATH hardening remains valid but was not the cause of this error.
@DannyNs DannyNs merged commit 07e776d into develop Jun 18, 2026
1 check passed
@DannyNs DannyNs deleted the fix/macos-shell-spawn branch June 18, 2026 10:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant