fix-brew-node-dylib-mismatch
Fix missing .dylib libraries when brew upgrades break Node.js browser tooling — create symlinks from old version numbers to new.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Fix missing .dylib libraries when brew upgrades break Node.js browser tooling — create symlinks from old version numbers to new.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Social media account setup guide for AI/developer platforms. Agent prepares all content (bio, avatar, posts) for user to copy-paste, since automation is blocked by Cloudflare/CAPTCHA/React shadow DOM. Supports X/Twitter, Medium, Dev.to, Reddit, LinkedIn.
Auto-detect environment and record terminal/GUI demos for GitHub repos. Supports VHS, asciinema+agg, svg-term, and cua-driver modes. Single-command orchestration layer.
Use when releasing a new open-source project or skill pack on GitHub. Follows the proven exposure playbook from Hermes Core Skills release — covering README, community health, topics, social media, and verification. Ensures every release meets a minimum exposure bar so the project is discoverable, trustworthy, and ready for adoption.
Multi-angle GitHub project discovery using browser + GitHub API + trending, with practical clone/install/absorption workflow
Use when installing any new tool/package from GitHub, Brew, or Cask — includes post-install verification script, automated health check cron, and deliverable report so the user can independently confirm the tool is in active daily use.
Complete iOS App from Source Code to Build fully automated pipeline. Uses XcodeGen + xcodebuild CLI, no Xcode GUI required.
| name | fix-brew-node-dylib-mismatch |
| description | Fix missing .dylib libraries when brew upgrades break Node.js browser tooling — create symlinks from old version numbers to new. |
| tags | ["brew","node","dylib","browser","troubleshooting","macos"] |
Hermes Agent's browser tools (browser_navigate, browser_console, etc.) fail with errors like:
dyld[NNN]: Library not loaded: /opt/homebrew/opt/simdjson/lib/libsimdjson.29.dylib
Referenced from: .../node@22/22.22.0/bin/node
Reason: tried: .../libsimdjson.29.dylib' (no such file)
This happens when brew upgrades a library (e.g. simdjson, simdutf, icu4c, libuv) to a newer major version, but the old node@22 binary still expects the old version number. The symlink created during the brew install points to the old Cellar directory that was removed during cleanup.
browser_navigate / browser_snapshot / browser_console calls fail with the same dyld errornode --version returns a different version than the one giving errors (e.g. node v26 works but node@22 v22.22.0 is broken).dylib version number (e.g. .29, .31)dyld[NNN]: Library not loaded: /opt/homebrew/opt/simdjson/lib/libsimdjson.29.dylib
The key info is:
simdjson (or simdutf, icu4c, etc.).29 (from libsimdjson.29.dylib)# See what versions exist now
ls /opt/homebrew/opt/simdjson/lib/libsimdjson* 2>/dev/null
ls /opt/homebrew/Cellar/simdjson/*/lib/libsimdjson* 2>/dev/null
# Check what node@22 actually links against
otool -L /opt/homebrew/Cellar/node@22/22.22.0/bin/node | grep -E "(simdjson|simdutf|icu4c)"
Both locations are needed because different tools look in different paths:
# Path 1: /opt/homebrew/opt/ symlink (used by the launcher)
ln -sf /opt/homebrew/opt/simdjson/lib/libsimdjson.33.dylib /opt/homebrew/opt/simdjson/lib/libsimdjson.29.dylib
# Path 2: /opt/homebrew/Cellar/ symlink (used by the direct binary)
ln -sf /opt/homebrew/Cellar/simdjson/4.6.4/lib/libsimdjson.33.dylib /opt/homebrew/Cellar/simdjson/4.6.4/lib/libsimdjson.29.dylib
The pattern is:
ln -sf <CURRENT_LIB> <EXPECTED_LIB_NAME>
Where <CURRENT_LIB> is the latest version (e.g. libsimdjson.33.dylib) and <EXPECTED_LIB_NAME> is the version the old node expects (e.g. libsimdjson.29.dylib).
# The browser should now work
browser_navigate(url="https://example.com")
| Library | Old Version | New Version | Check command |
|---|---|---|---|
| simdjson | .29 | .33 | ls /opt/homebrew/opt/simdjson/lib/libsimdjson* |
| simdutf | .31 | .34 | ls /opt/homebrew/opt/simdutf/lib/libsimdutf* |
When brew reinstall or brew upgrade runs for a library that node@22 depends on:
.dylib files are removed from the Cellar.dylib number (e.g. .29 → .33)node@22 was compiled against the old number and refuses to load the new onenode@22 is pinned at v22.22.0 (not upgraded to v26), it never gets relinkedsudo — The symlinks can be created in /opt/homebrew/opt/ and /opt/homebrew/Cellar/ without sudoopt symlink may not fix it if the binary reads from Cellar directlysimdjson, simdutf may also fail. Check otool -L for all deps