ワンクリックで
update
Update all installed batterie plugins in one go
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Update all installed batterie plugins in one go
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
Ship a Batterie shard or CLI change end-to-end in one verb — bump plugin.json, commit, push, trigger the assemble CI, watch it green, then pull this machine current. Use when you've edited a batterie source repo (instructions.md, a skill, a hook, CLI code) and want it live. Triggers on 'publish this', 'ship this shard', 'release this', 'cut a version', '/batterie:publish'.
Show the Batterie suite version and every installed plugin/CLI version
| name | update |
| description | Update all installed batterie plugins in one go |
| allowed-tools | ["Bash","Read"] |
!`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: suite = batterie.get("batterie@batterie", {}).get("version") if suite: print(f"📦 Batterie suite v{suite}\n") 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 source, never from installPath or PyPI. 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 bare PyPI name is not a fallback either — none of these CLIs are published to PyPI (uv tool install bon[dolt] → "unsatisfiable"). Install from the source repo, preferring a local working tree and falling back to git:
~/repos): uv tool install "~/repos/spm1001/<repo>[<extras>]"~/repos): uv tool install "<pkg>[<extras>] @ git+https://github.com/spm1001/<repo>" — PEP 508 form, extras go before the @.For each plugin in the table:
version from the JSON above (plugins["bon@batterie"][0]["version"]) — used only to detect drift.~/repos/spm1001/<repo> exists, else the git source:
uv cache clean <cli_name> --force && uv tool install "<source-spec>" --force --reinstall
e.g. local uv tool install "~/repos/spm1001/bon[dolt]" --force --reinstall, or fresh uv tool install "bon[dolt] @ git+https://github.com/spm1001/bon" --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 (a fresh user, the Mac) is no longer a dead end — fall back to it rather than failing. Cowork additionally has its own skill-level provisioning path (bds-dacase).Lead with the Batterie suite version — read the post-update batterie@batterie version from installed_plugins.json and report it as the headline (e.g. 📦 Batterie suite v1.0.0), since that's the single number the user quotes. Then:
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.