From pmm
Checks for and applies updates to Poor Man's Memory system files from upstream GitHub repo. Compares versions, shows file changes (A/M/D), preserves user memory data. Invoke via /pmm:update.
npx claudepluginhub nominexhq/pmm-pluginThis skill uses the workspace's default tool permissions.
Check the upstream Poor Man's Memory repository for updates and apply them safely. System files (skills, templates, artifacts) are updated; user data (memory/) is never touched.
Updates local pm-skills installation: checks for latest release via GitHub API/git, previews changes, confirms, applies updates, generates report on files changed and new capabilities. Use to stay current.
Detects tech stack changes, plugin updates, and local modifications to selectively update Memory Bank files with 3-way merge preserving user edits.
Bumps Agent Alchemy plugin versions across 5 locations each, detects drift, applies updates, adds CHANGELOG entries, and creates conventional commits.
Share bugs, ideas, or general feedback.
Check the upstream Poor Man's Memory repository for updates and apply them safely. System files (skills, templates, artifacts) are updated; user data (memory/) is never touched.
Note on update channels: The Claude Code Plugin Marketplace handles binary plugin file replacement automatically.
pmm:updatehandles semantic migration instructions — version-specific steps that go beyond file replacement, such as "v2.1 adds taxonomies.md, run pmm:hydrate after update" or config schema changes that require user action. Runpmm:updateafter a marketplace auto-update to apply any migration steps for the new version.
/pmm:update — check for updates and apply if availableDispatch a general-purpose agent with this prompt. Replace <project-root> with the actual project root path.
Check for PMM updates. This is a READ-ONLY task with one exception: you may clone the upstream repo to /tmp.
Project root:
<project-root>Step 1 — Read local version
Read
<project-root>/pmm/version.json.
- If exists: extract
versionstring andfiles.systemarray- If missing: treat as version
0.0.0with emptyfiles.systemarrayStep 2 — Clone upstream
git clone --depth 1 https://github.com/NominexHQ/poor-man-memory.git /tmp/pmm-upstream-$$If this fails, return:
ERROR: Could not reach the upstream PMM repository. Check your network connection.Step 3 — Compare versions
Read
/tmp/pmm-upstream-$$/pmm/version.json. Extract upstreamversionstring.If versions match, clean up temp dir and return:
PMM is up to date (v{version})Step 4 — Build change report
For each file in upstream
files.systemarray:
- Exists locally AND differs → M (modified)
- Does not exist locally → A (added)
- Exists locally AND identical → unchanged (skip)
For each file in local
files.systemNOT in upstream list → D (deleted)For merge files (
.claude/settings.json): read both, count new permission entries in upstream.Return a structured report in this exact format:
UPDATE_AVAILABLE LOCAL_VERSION: {version} UPSTREAM_VERSION: {version} TEMP_DIR: /tmp/pmm-upstream-{pid} --- M .claude/plugins/pmm/skills/viz/SKILL.md A .claude/plugins/pmm/skills/update/SKILL.md D .claude/plugins/pmm/skills/old-skill/SKILL.md ~ .claude/settings.json (+2 permissions) = 8 unchangedDo NOT clean up the temp directory — it will be needed if the user approves.
If the agent returns "up to date" or "ERROR", output that message and stop.
If the agent returns UPDATE_AVAILABLE, parse the report and present it to the user:
PMM Update Available: v{local} → v{upstream}
══════════════════════════════════════════════
Changed files:
M .claude/plugins/pmm/skills/viz/SKILL.md
A .claude/plugins/pmm/skills/update/SKILL.md
D .claude/plugins/pmm/skills/old-skill/SKILL.md
Merge (additive only):
~ .claude/settings.json (+2 permissions)
Unchanged: 8 files
Memory files: untouched (as always)
Ask the user using AskUserQuestion:
If user approves, dispatch a general-purpose agent:
Apply PMM upstream updates. This is a WRITE task. Do NOT run any git commands.
Upstream source:
{temp_dir from phase 1 report}Project root:<project-root>System files to OVERWRITE (copy from upstream, replacing local): [list each M and A file path]
System files to DELETE (removed in upstream): [list each D file path]
Merge files (additive only):
.claude/settings.json: Read both, mergepermissions.allowentries andhooksobject additively. Add missing entries/events, do NOT remove existing ones.NEVER touch:
- Any file in
memory/pmm/viz-cache.html.claude/settings.local.jsonInstructions:
- For each OVERWRITE file: read upstream version, write to project path. Create parent dirs if needed.
- For each DELETE file: delete it. Remove empty parent directories.
- For merge file: read both, merge permissions additively, write back.
- Return a summary of actions taken.
Check for new memory file types: Compare upstream ${CLAUDE_PLUGIN_ROOT}/references/templates.md to local. If new templates exist and user has memory/ directory, create new files and trigger Phase 5 (Hydrate) per ${CLAUDE_PLUGIN_ROOT}/references/README.md.
Reinstall the pre-commit hook (in case pmm/hooks/pre-commit was updated):
cp pmm/hooks/pre-commit .git/hooks/pre-commit && chmod +x .git/hooks/pre-commit
Commit:
git add .claude/plugins/ pmm/ README.md .gitignore .claude/settings.json
git commit -m "pmm: update to v{new_version}"
Clean up:
rm -rf {temp_dir}
rm -f pmm/viz-cache.html
Report summary of what changed.
memory/ — except to add new file types introduced by the updatesettings.json — the user may have custom permissionsfiles.system array in version.jsonpmm/version.json → treated as v0.0.0, full sync offered./pmm:viz regenerates with latest template.pmm:update handles migration steps (new memory file types, config schema changes, post-update hydration). Run both after a major version bump.