Skip to content

feat(cli): mureo upgrade re-deploys skills + restarts the always-on service - #320

Merged
hyoshi merged 2 commits into
mainfrom
feat/upgrade-auto-refresh
Jun 23, 2026
Merged

feat(cli): mureo upgrade re-deploys skills + restarts the always-on service#320
hyoshi merged 2 commits into
mainfrom
feat/upgrade-auto-refresh

Conversation

@hyoshi

@hyoshi hyoshi commented Jun 23, 2026

Copy link
Copy Markdown
Collaborator

mureo upgrade previously only ran pip. But a new version ships new skill content (deployed under ~/.claude/skills) and, when the always-on mureo service daemon is installed, that daemon keeps the pre-upgrade code in memory until restarted — so an upgrade often appears to "have no effect" (stale skills, stale running MCP). A customer hit exactly this on Windows.

Change

After a successful upgrade (unless --dry-run / the new --no-refresh):

  • Re-deploy skills into ~/.claude/skills (idempotent overwrite) so the format matches the new version. Only when a skills dir already exists.
  • Restart the managed service (launchd / systemd / Task Scheduler) so the daemon loads the new code. No-op when none is installed.

Both run from the old process but only touch NEW on-disk files / platform restart commands. Best-effort: a failure prints a one-line hint and NEVER fails the upgrade or masks pip's exit code. The daemon's own self-upgrade path is separate (no re-entrancy).

Tests cover wiring (success / --no-refresh / --dry-run / failed upgrade) + both helpers. python-reviewer: APPROVE. Targets 0.10.12.

https://claude.ai/code/session_01NxBrN8Qn53Tpivt9SumdGn

hyoshi added 2 commits June 23, 2026 14:24
…ervice

A new mureo version ships new skill content (deployed under ~/.claude/skills)
and, when the always-on `mureo service` daemon is installed, that daemon holds
the pre-upgrade code in memory until restarted — so `mureo upgrade` frequently
appeared to "have no effect" (stale skill format, stale running MCP tools /
static assets). This is the exact failure a customer hit on Windows.

After a successful upgrade (unless `--dry-run` / the new `--no-refresh`):
- `_refresh_deployed_skills()`: re-copy the bundled skills into
  ~/.claude/skills (idempotent overwrite) so the deployed format matches the
  new version. Only when a skills dir already exists — never force-installs
  skills a user removed.
- `_restart_managed_service()`: when a managed service is installed for this
  platform, restart it (launchd / systemd / Task Scheduler) so the daemon loads
  the new code. No-op when none is installed.

Both run from the OLD process but only touch NEW on-disk files / platform
restart commands, so neither depends on stale in-memory code. Both are
best-effort: a failure prints a one-line hint and NEVER fails the upgrade or
masks pip's exit code (a failed pip install aborts before the refresh). The
daemon's own self-upgrade path (web run_upgrade_all) is separate, so there is
no re-entrancy.

Tests: refresh runs on success; skipped on --no-refresh / --dry-run / failed
upgrade; skill refresh no-ops without the dir and recopies when present;
service restart no-ops when not installed, restarts when installed, and
swallows an unsupported-platform error. python-reviewer: APPROVE.

Claude-Session: https://claude.ai/code/session_01NxBrN8Qn53Tpivt9SumdGn
@hyoshi
hyoshi merged commit eec44f6 into main Jun 23, 2026
9 checks passed
@hyoshi
hyoshi deleted the feat/upgrade-auto-refresh branch June 23, 2026 05:37
@hyoshi hyoshi mentioned this pull request Jun 23, 2026
hyoshi added a commit that referenced this pull request Jun 23, 2026
Bump version across pyproject / __init__ / .claude-plugin and add the
CHANGELOG entry for 0.10.12: the Reports action_log tolerance + daily-check
30-day window fixes (#319), the `mureo upgrade` post-upgrade refresh (#320),
and the docs refresh (#321).

Claude-Session: https://claude.ai/code/session_01NxBrN8Qn53Tpivt9SumdGn
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