check-claude-plugin-sync

check-claude-plugin-sync is a command for Claude Code, OpenCode from atman-33/workhub. It costs 26 tokens per session (420 once invoked), scanned C, original, MIT.

A diagnostic command that compares Claude Code plugin files with their OpenCode copies to find missing, outdated, changed, or extra items. Drift means the two sets of files no longer match.

In plain words
What is it for?
Use it to check project- and user-level plugin copies and identify the right sync command for each difference.
Why use it?
It shows whether copied skills and commands need syncing and warns when a forced sync could overwrite local edits.

Command for Claude CodeOpenCode

Written for OpenCode and Claude Code: installed under .opencode/, but also a Claude Code command (commands/*.md). Also seen: mentions Claude Code; mentions OpenCode.

Needs its repository: it runs a file that does not travel with it, so clone the repository first. The line is node .opencode/scripts/check-claude-plugin-sync.mjs.

Install

Getting it into your agent

It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.

Clone the repo
git clone --depth 1 https://github.com/atman-33/workhub
agentmods
npx agentmods add commands/atman-33/workhub/check-claude-plugin-sync

Made for: Claude Code, OpenCode.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for check-claude-plugin-sync

README.md
[![agentmods](https://agentmods.dev/badge/commands/atman-33/workhub/check-claude-plugin-sync.svg)](https://agentmods.dev/commands/atman-33/workhub/check-claude-plugin-sync)
Your own site
<a href="https://agentmods.dev/commands/atman-33/workhub/check-claude-plugin-sync"><img src="https://agentmods.dev/badge/commands/atman-33/workhub/check-claude-plugin-sync.svg" alt="Measured on agentmods" height="20"></a>
Per session 26 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 420 The whole file, excluding the scripts and references it only reads on demand.
Security scan C 1 finding. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00026 $0.00420
Opus 5 $0.00013 $0.00210
Sonnet 5 $0.00005 $0.00084
Haiku 4.5 $0.00003 $0.00042

Measured 2d ago against content hash 5d41586b969e, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-06, from the pricing page.

Security

Grade C, and why

check-claude-plugin-sync scanned grade C with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Recursive force deletehighDestructive command

rm -rf with a variable or a broad path is one typo away from removing the wrong tree.

- `orphan` — Target still exists, but the source plugin no longer provides it. Suggest `rm -rf <targetPath>` only after the user confirms it isn't hand-written.
vault-template/.opencode/commands/check-claude-plugin-sync.md · 31 lines

What it actually says

Diagnose whether Claude Code plugin skills and commands are in sync with their OpenCode copies, both project-scope and user-scope.

Run:

node .opencode/scripts/check-claude-plugin-sync.mjs

Steps:

  1. Run the diagnostic script above.
  2. Report every drift item with its status verbosely. Map statuses to plain-language advice:
    • missing — Source has it, target doesn't. Run the appropriate sync command below.
    • stale-source — Source content changed since the last recorded copy. Re-run the sync with --force.
    • diverged — Both source and target changed; --force will overwrite the local hand-edits. Point this out to the user before running.
    • orphan — Target still exists, but the source plugin no longer provides it. Suggest rm -rf <targetPath> only after the user confirms it isn't hand-written.
    • silent-user-edit / seeded — Informational only; no action needed.
  3. If any actionable drift is present, suggest the corresponding remediation commands:
    • Project scope: node .opencode/scripts/sync-claude-skills.mjs [--force]
    • User scope: node .opencode/scripts/sync-claude-user-plugins.mjs [--force]

Notes:

  • The exit code is 0 when there is no actionable drift, and 2 when there is.
  • User-scope discovery runs claude plugin list; if claude is unavailable, that scope is skipped with a warning. Install the Claude CLI to enable user-scope checks.
  • The reminder is also injected automatically at the start of every main-session chat message via the inject-claude-plugin-sync-reminder-plugin. Use this command for a detailed, on-demand full report.
Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 2d ago First seen · 31 lines · 26 tokens per session scan C 5d41586b969e

Subscribe to this mod's changes

check-claude-plugin-sync is a command published in the GitHub repository atman-33/workhub (2 stars, last pushed yesterday), licensed MIT. It adds 26 tokens to every session and 420 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it C with 1 finding (recursive force delete). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.