npx claudepluginhub spm1001/batterie-de-savoir --plugin batterieThis skill is limited to using the following tools:
!`python3 << 'PYEOF'
Manages third-party Claude Code plugin updates: force immediate updates via empty arg or view status dashboard with 'status'. Auto-runs on session start.
Updates rp1 CLI via package managers like Homebrew and refreshes plugins for tools like Claude Code and OpenCode using bash commands. Reports outcomes, handles errors, and reminds to restart IDE.
Upgrades Claude Code plugins by aligning skills, hooks, and patterns with latest capabilities and best practices. Use after updates, for modernization, or on user request.
Share bugs, ideas, or general feedback.
!`python3 << 'PYEOF' import json, os, subprocess, shutil
plugins_path = os.path.join(os.path.expanduser("~"), ".claude", "plugins", "installed_plugins.json") plugins_file = json.load(open(plugins_path)) plugins = plugins_file.get("plugins", {})
batterie = {k: v[0] for k, v in plugins.items() if k.endswith("@batterie-de-savoir")}
if not batterie: print("No batterie-de-savoir plugins installed.") else: print(f"Found {len(batterie)} batterie plugin(s):\n") for key, info in sorted(batterie.items()): name = key.split("@")[0] print(f"- {name}: v{info['version']} (sha: {info['gitCommitSha'][:12]})")
# CLI version check
cli_tools = {"bon": "bon", "garde-manger": "garde", "passe": "passe", "todoist-gtd": "todoist"}
print("\nCLI tool versions:")
for plugin_name, cli_name in cli_tools.items():
if f"{plugin_name}@batterie-de-savoir" in batterie:
path = shutil.which(cli_name)
if path:
try:
result = subprocess.run([cli_name, "--version"], capture_output=True, text=True, timeout=5)
ver = result.stdout.strip() or result.stderr.strip()
print(f"- {cli_name}: {ver}")
except Exception:
print(f"- {cli_name}: (version check failed)")
else:
print(f"- {cli_name}: NOT IN PATH")
PYEOF`
Update every batterie-de-savoir plugin listed above. Follow these steps exactly:
claude plugin marketplace update batterie-de-savoir
This pulls the latest marketplace index so plugin updates can see new versions. Without this, claude plugin update compares against a stale index.
For each plugin shown above, run:
claude plugin update <name>@batterie-de-savoir
Run them sequentially — each must complete before the next starts. Report the output of each.
After all updates, read ~/.claude/plugins/installed_plugins.json again. For each batterie plugin, compare the version and gitCommitSha against the "before" snapshot above. Report:
JSON structure of installed_plugins.json:
{
"version": "...",
"plugins": {
"bon@batterie-de-savoir": [
{"scope": "user", "installPath": "/path/to/cache/bon/0.8.0", "version": "0.8.0", "gitCommitSha": "..."}
],
...
}
}
Each plugin key maps to a list of installations (one per scope). Use v[0] to get the user-scope entry.
Four batterie plugins ship CLI tools installed via uv tool install:
| Plugin | CLI binary | Extras |
|---|---|---|
| bon | bon | [dolt] |
| garde-manger | garde | |
| passe | passe | |
| todoist-gtd | todoist |
For each installed plugin that has a CLI:
installPath from the JSON above (e.g. plugins["bon@batterie-de-savoir"][0]["installPath"])["version"]uv cache clean <cli_name> --force && uv tool install "<installPath>[<extras>]" --force --reinstall
Always include extras from the table above (e.g. bon is always "<installPath>[dolt]"). PyMySQL is tiny and harmless — always installing it avoids silent breakage when any project uses the Dolt backend.
The --force on uv cache clean prevents blocking on lock contention from other uv processes (e.g. marketplace refresh). Report success or failure. If uv is not available or the install fails, fall back to showing the manual command.If any plugins were updated:
Updates complete. Exit and restart Claude Code (`/exit` then `claude`) to activate changes.
SessionStart hooks only fire on full restart — /reload-plugins won't trigger them.
If nothing changed: just say all plugins are up to date, no restart needed.