Repository navigation
feat(claude): find Node outside PATH and ship a directory-ready plugin - #59
Merged
Merged
Conversation
Brings over the parts of #56 that the Claude plugin still needs. Claude opened from the Dock starts plugins without the shell's PATH, so the server now starts through scripts/launch-node.sh, which also looks for Node.js 22.19 or later where Homebrew, nvm, fnm, Volta, mise and asdf install it. A SessionStart hook runs it with --check and tells the user and Claude when none is found, and the Claude skill's missing-tools recovery checks the launcher and offers an install. The plugin ships a Claude README, which the plugin directory lists, and leaves out Codex skill metadata and npm's .bin symlinks, which plugin directories reject; the smoke test checks all three and starts the server through the launcher. Co-authored-by: Mike Grabowski <grabbou@gmail.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.
Brings over the parts of #56 that the Claude Code plugin still needs after #58. #58 already publishes the plugin on
release/claudeand keeps it within the Claude plugin directory's size limits, so this adds the rest.Finding Node.js
Claude opened from the Dock starts plugins without the shell's
PATH, so a plainnodecommand misses Node installed by a version manager.scripts/launch-node.sh, ported from feat(claude): publish the Claude Code plugin on release/claude #56. It uses Node.js 22.19 or later fromPATH, or from where Homebrew (including keg-onlynode@22/node@24), nvm, fnm, Volta, mise and asdf install it.SessionStarthook runs the launcher with--check. When no usable Node is found, it shows the user a message and tells Claude to offer an install and a restart.references/missing-tools.md) checks which Node the launcher finds and offersbrew install nodeor nodejs.org.nodefromPATH, and the Claude Desktop bundle still uses the Node that Claude supplies.Directory-ready package
apps/claude/README.mdinstead of the repository's README, since the directory lists the plugin with it. The README is rewritten for the Claude build: Claude Code shows the simulators, and Mobile Dev adds device control, logs, app control and storage, recordings and TraceSift. It lists everything the plugin runs on the Mac, as the directory's security scan asks.agents/openai.yamland npm's.binsymlinks. The server runs agent-device's CLI by its path, so the symlinks were unused, and plugin directories reject them.plugin-host.jsongainsfolders(the app folders a plugin ships, herescriptsandhooks) andreadme.Not brought over from #56
.mcpbby hand, so releases keep attaching it.plugins/mobile-devand taggingclaude-v<version>. feat: ship Claude without the panel and control devices with agent-device in every plugin #58 already publishesrelease/claudewith the plugin inmobile-dev/.codex-mobile-dev-plugin. The currentmobile-devURLs redirect. Settle the name before the directory submission.Directory status
Measured against the pre-submission checklist, the
release/claudelayout passes every check that stops validation:Review holds remain. A shell-started server, compiled helpers, minified code, more than 512 files and text files over 256 KiB each mean an Anthropic reviewer reads the plugin before it goes live.
Testing
npm test: 873 passed, 1 skipped.test:hosts: 10 passed, 5 skipped.test:claude,test:cursorandtest:packagepass. The Claude smoke test starts the server through the launcher from a path with spaces, and runs the session check, which stays silent when Node is usable. It also checks for the Claude README, and that there are no symlinks and noagents/folders.claude plugin validatepasses for the plugin folder and its marketplace.PATH(/usr/bin:/bin:/usr/sbin:/sbin), the launcher found a mise-installed Node 22.23.2 that plainnodemisses.--checkprints validSessionStarthook JSON, and starting the server exits 1 with the install message.Telemetry: the launcher and hook run before the server's Sentry SDK starts and send nothing. Existing server and UI coverage is unchanged.
Co-authored with @grabbou, whose launcher, hook and recovery guidance this ports from #56.