Repository navigation
Description
What happened
#6696 (closes #6691) moved the OpenShell pin to 0.0.115 and updated the install snippet in docs/guides/user/running-agents-locally.md to match (OPENSHELL_VERSION=0.0.115 piped through the upstream install.sh).
On Apple Silicon that snippet installs a build that does not start. All three aarch64-apple-darwin binaries in the 0.0.115 release (CLI, gateway, and VM driver) are dynamically linked against a Nix store path that only exists on the upstream build host:
dyld[66826]: Library not loaded: /nix/store/x66vl94b37qshkwsbcwsa6izzl36467a-libiconv-115.100.1/lib/libiconv.2.dylib
Referenced from: /opt/homebrew/Cellar/openshell/0.0.115/bin/openshell
otool -L confirms the identical reference in openshell-gateway and openshell-driver-vm. The Homebrew formula's post-install fails at openshell-gateway generate-certs with the same error, so brew reinstall leaves the user with a dead CLI and a gateway service that cannot start. The raw openshell-gateway-aarch64-apple-darwin.tar.gz release asset carries the same link, so this is not specific to the Homebrew path.
Verified on macOS 26 (arm64):
| Release | macOS CLI / gateway / VM driver | Notes |
|---|---|---|
| v0.0.111 | clean | first release with the 0.0.111+ main-process lifecycle #6691 targets |
| v0.0.113 | clean | last published macOS release (v0.0.114 was tagged, but its release run failed on an unrelated e2e job) |
| v0.0.115 | broken | /nix/store/...libiconv.2.dylib in all three binaries |
CI is unaffected: the Linux binaries are normalized (static musl CLI, glibc 2.28 gateway with the Nix RPATH stripped), and functional-tests / e2e passed on 0.0.115 in #6696.
Root cause (upstream)
NVIDIA/OpenShell#2977 (ci: build release binaries with Nix, merged 2026-08-27 17:35 UTC) replaced the release build with a Nix-based workflow; v0.0.115 was published 28 minutes later. In .github/actions/build-rust-binary/action.yml the Normalize Linux dynamic binary step (patchelf --set-interpreter … --remove-rpath) is gated if: endsWith(inputs.triple, '-linux-gnu') and Verify static linkage on -linux-musl; there is no step for -apple-darwin, so the darwin binaries built inside nix develop .#devShells.aarch64-darwin.default keep the Nix install-name for libiconv. The action's Verify step runs <binary> --version inside that same nix develop shell, where the store path exists on the runner, so the release run (33100034661) is green despite shipping binaries that cannot start elsewhere. The PR's own checklist leaves "Apple Silicon build matrix passes in GitHub Actions" unchecked.
Reported upstream as NVIDIA/OpenShell#2997.
Verified workaround
The release binaries are ad-hoc, linker-signed, and the formula itself ad-hoc signs its VM driver, so re-pointing the library and re-signing stays within the package's own conventions. /usr/lib/libiconv.2.dylib is not present as a file on recent macOS but is in the dyld shared cache and loads:
for b in openshell openshell-gateway; do
install_name_tool -change \
/nix/store/x66vl94b37qshkwsbcwsa6izzl36467a-libiconv-115.100.1/lib/libiconv.2.dylib \
/usr/lib/libiconv.2.dylib "/opt/homebrew/Cellar/openshell/0.0.115/bin/$b"
codesign --force -s - "/opt/homebrew/Cellar/openshell/0.0.115/bin/$b"
done
brew services restart nvidia/openshell/openshellWith that applied, sandbox create --detach -- sleep infinity reaches Ready in ~3s, sandbox exec works, -- true fails with MainProcessExited: Canonical main process exited as #6691 describes, and a full fullsend run --runtime dummy against the local Podman gateway completes with exit 0. Any later brew reinstall / brew postinstall nvidia/openshell/openshell reverts it.
Proposed change
- In
docs/guides/user/running-agents-locally.md, add a macOS caveat next to the install snippet: on Apple Silicon useOPENSHELL_VERSION=0.0.113until the upstream release is fixed, or apply the workaround above if 0.0.115 is required. 0.0.113 already has the 0.0.111+ lifecycle semantics, so the--detach -- sleep infinityinvocation from fix(#6691)!: keep OpenShell 0.0.111+ sandboxes alive for later exec #6696 behaves correctly on it. - Upstream report: bug: v0.0.115 aarch64-apple-darwin binaries link libiconv from /nix/store and fail to load on macOS NVIDIA/OpenShell#2997. Drop the caveat once a fixed release ships and the pin moves past it.
Out of scope
- Do not move the Linux pin back. fix(sandbox): keep OpenShell 0.0.111+ sandboxes alive for later exec #6691 needs ≥ 0.0.111, CI runs Linux binaries that are correctly normalized, and 0.0.115 is what
functional-testsande2evalidated. .github/scripts/install-openshell.shandhack/gitlab-runner-vm/are Linux-only and unaffected.
Validation criteria
- Following the "Install OpenShell" section verbatim on a clean Apple Silicon Mac yields a working
openshell --versionandopenshell status. - The caveat is removed in the same PR that bumps the pin to a release whose
openshell-aarch64-apple-darwin.tar.gzhas no/nix/storereference inotool -L.
References
- fix(sandbox): keep OpenShell 0.0.111+ sandboxes alive for later exec #6691, fix(#6691)!: keep OpenShell 0.0.111+ sandboxes alive for later exec #6696
- ci: build release binaries with Nix NVIDIA/OpenShell#2977 (cause), bug: v0.0.115 aarch64-apple-darwin binaries link libiconv from /nix/store and fail to load on macOS NVIDIA/OpenShell#2997 (upstream report)
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsDone
Activity
fullsend-ai-triage commentedon Aug 27, 2026
🤖 Finished Triage · ✅ Success · Started 9:40 PM UTC · Completed 9:45 PM UTC
Commit:
96d46c8· View workflow run →Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $0.60
fullsend-ai-triage commentedon Aug 27, 2026
Triage summary
Severity: high — blocks all Apple Silicon local development; Linux CI unaffected.
The proposed docs-only fix (pin macOS users to 0.0.113, document the
install_name_toolworkaround) can proceed immediately since 0.0.113 already has the 0.0.111+ lifecycle semantics required by #6691.A separate upstream issue should be filed at NVIDIA/OpenShell for the macOS binary normalization gap introduced in #2977 — their PR checklist explicitly left the Apple Silicon build matrix item unchecked.
Proposed test case
Labels: High priority due to blocking Apple Silicon local development; component/install applies since the fix targets the install documentation and process.
Next steps:
/fs-code— agent creates a PR to implement this issue/fs-code <your instruction>— agent implements with your specific guidancefullsend-ai-coder commentedon Aug 27, 2026
🤖 Finished Code · ✅ Success · Started 9:46 PM UTC · Completed 9:52 PM UTC
Commit:
96d46c8· View workflow run →Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $1.25
fullsend-ai-triage commentedon Aug 27, 2026
🤖 Finished Triage · ✅ Success · Started 11:54 PM UTC · Completed 11:57 PM UTC
Commit:
b13c0b1· View workflow run →Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $0.69
fullsend-ai-triage commentedon Aug 27, 2026
Work on this issue continues via the open PR. Since the last triage, the upstream issue has been filed at NVIDIA/OpenShell#2997 — that was the remaining action item from the original issue description.
The review on the PR raised a medium finding worth addressing before merge: the
install_name_toolworkaround hardcodes a Homebrew Cellar path, but users who installed via the curl-based script documented earlier in the guide would have binaries elsewhere. Consider using$(which openshell)or adding a note that the workaround is Homebrew-specific.Addressed by:
Previous run
A PR is already in flight that adds the macOS Apple Silicon caveat to the install guide, recommending v0.0.113 and documenting the
install_name_toolworkaround. The review surfaced a medium finding about the workaround hardcoding Homebrew paths (users who installed via the curl script would have binaries elsewhere) — that may need addressing before merge.Note: the issue also calls for filing an upstream issue at NVIDIA/OpenShell for the Nix build regression introduced in their #2977. That upstream report is independent of the docs fix and should still be filed separately.
Addressed by:
waynesun09 commentedon Aug 28, 2026
Filed upstream as NVIDIA/OpenShell#2997 (labels
os:macos,area:build). The upstream report carries the full mechanism: darwin binaries are built innix develop, only-linux-gnu/-linux-muslget the normalize/verify steps, and the action's own--versionsmoke check runs inside the Nix shell where the store path resolves.fullsend-ai-triage commentedon Aug 28, 2026
🤖 Finished Triage · ✅ Success · Started 12:03 AM UTC · Completed 12:06 AM UTC
Commit:
b13c0b1· View workflow run →Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $0.65
chore(deps): move the OpenShell pin mirrors to 0.0.116
waynesun09 commentedon Aug 28, 2026
Upstream shipped the fix: NVIDIA/OpenShell#3006 (
Closes NVIDIA/OpenShell#2997) landed in OpenShell v0.0.116 (2026-08-28). I verified the v0.0.116openshellandopenshell-gatewayaarch64-apple-darwintarballs carry no/nix/storereference and run unpatched.So the resolution is simpler than the caveat proposed above: just point the guide at 0.0.116. That is done in #6737 (the Renovate pin bump plus a commit moving the hand-maintained mirrors, including the
running-agents-locally.mdsnippet); the commit carriesCloses #6707, so this closes when #6737 merges.waynesun09 commentedon Aug 28, 2026
Resolved by #6737 (merged 2026-08-28,
5b796658): the pin moved to OpenShell 0.0.116, which ships the upstream macOS fix (NVIDIA/OpenShell#3006, closes NVIDIA/OpenShell#2997), anddocs/guides/user/running-agents-locally.mdnow points macOS users at that build. TheCloseskeyword in commit5932b2f2did not fire through the merge queue, hence the manual close.