How this skill is triggered — by the user, by Claude, or both
Slash command
/batterie:updateThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
!`python3 << 'PYEOF'
!`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")}
if not batterie: print("No batterie 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", "passe": "passe", "todoist-gtd": "todoist"}
print("\nCLI tool versions:")
for plugin_name, cli_name in cli_tools.items():
if f"{plugin_name}@batterie" 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 plugin listed above. Follow these steps exactly:
claude plugin marketplace update batterie
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
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": [
{"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.
Three batterie plugins ship CLI tools installed via uv tool install:
| Plugin | CLI binary | Source repo | Extras |
|---|---|---|---|
| bon | bon | ~/repos/spm1001/bon | [dolt] |
| passe | passe | ~/repos/spm1001/passe | |
| todoist-gtd | todoist | ~/repos/spm1001/todoist-gtd |
Install from the source repo, not installPath. Post-cutover the marketplace vendors only skills/hooks/CLAUDE.md for skill plugins — there is no pyproject.toml in the plugin cache, so uv tool install <installPath> fails with "does not appear to be a Python project". The installable package lives in the source repo (~/repos/spm1001/<repo>), which is the canonical source of truth for these CLIs.
For each plugin in the table:
version from the JSON above (plugins["bon@batterie"][0]["version"]) — used only to detect drift.uv cache clean <cli_name> --force && uv tool install "<source_repo>[<extras>]" --force --reinstall
e.g. uv tool install "~/repos/spm1001/bon[dolt]" --force --reinstall. Always include extras from the table (bon is always [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.~/repos, or a Cowork sandbox), the CLI can't be reinstalled from source here — report that and show the manual command rather than failing. Cowork CLI provisioning is a separate path (bds-dacase), not uv tool against local repos.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.
npx claudepluginhub spm1001/batterie-de-savoir --plugin batterieCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.