I’m about to open-source Claude Remote, a Claude Code plugin that lets me start a Claude Code session on my own Windows PC from my phone. Today I asked a boring question: when I push a fix, how does it reach someone who already installed it? The honest answer was that it didn’t. Four things were in the way. “version”: “1.0.0” pins the plugin From the plugin marketplace docs: if you declare a version in plugin.json and push new commits without changing it, existing users keep the cached copy, because Claude Code sees the same version. I was never going to bump it on every push, so every install would have stayed on day one. Fix: delete the line. A git-sourced plugin with no version falls back to the commit SHA, so every push counts as an update. I added a test that fails if the line ever comes back. Third-party marketplaces don’t auto-update by default Official Anthropic marketplaces auto-update. Third-party ones don’t, unless the user turns it on (/plugin, then Marketplaces, then Enable auto-update). My README now says so. The install folder is named after the version …\plugins\cache<marketplace><plugin><version>\ changes on every update. Fine for skills and hooks. Wrong for a long-running server that a Windows scheduled task starts at logon. So setup now copies the server into %LOCALAPPDATA%\claude-remote and runs it from there. /reload-plugins doesn’t touch a separate process It reloads skills, hooks and plugin MCP servers inside Claude Code, not a server running on its own. So the plugin ships a SessionStart hook that hashes the files setup copies, in the plugin and in the running copy, and prints a systemMessage when they differ: Claude Remote has an update. Run /claude-remote:setup to install it on this PC. No version number needed, since it compares content. I checked it fires by loading the plugin with --plugin-dir against a deliberately stale copy. How Claude Code was used It wrote most of it, inside my own setup, where hooks refuse a commit until three reviewers have run. They earned their keep today: reviews caught that my “stop the old server” step didn’t actually stop it (Stop-ScheduledTask leaves the child process running, I measured it), and that setup called bare claude, which resolves to claude.ps1 and gets blocked by the default script policy. The repo goes public soon. If you’ve shipped a plugin, how do you handle updates reaching a running process? Follow along: https://github.com/MrTig-afk submitted by /u/TearInternational414
Originally posted by u/TearInternational414 on r/ClaudeCode
