diff-addons

A validator that compares the add-ons a profile declares with the add-ons actually loaded in the current coding-agent session.

In plain words
What is it for?
Use it to check profile isolation and produce a report of differences between the declared and active inventories.
Why use it?
It reveals missing, extra, or unexpectedly loaded skills, commands, and agents caused by profile setup.

Skill for Claude CodeCodex

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/mduffy37/claudeworks/diff-addons
Any agent
npx skills add Mduffy37/claudeworks --skill diff-addons
Clone the repo
git clone --depth 1 https://github.com/Mduffy37/claudeworks

Made for: Claude Code, Codex.

Per session 29 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,495 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. 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 $0.00029 $0.01495
Opus 5 $0.00015 $0.00747
Sonnet 5 $0.00006 $0.00299
Haiku 4.5 $0.00003 $0.00150

Measured 2d ago against content hash aade0b5974b3, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

diff-addons scanned grade A with 0 findings 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.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

src/builtin-plugin/skills/diff-addons/SKILL.md · 81 lines

How it starts

The opening of the file, as written. The whole thing — 81 lines — stays where its author put it; the contents beside it link to each section on GitHub.

This skill is a profile isolation validator. It runs in three phases and produces a diff report. Follow the phases in order, do not skip.

Phase 1 — Declared inventory (from the filesystem)

Run the helper and parse its JSON output. This is what the profile declares should be loaded:

!node "${CLAUDE_PLUGIN_ROOT:-$HOME/.claude/plugins/marketplaces/claudeworks/plugins/profiles-manager}/scripts/list-addons.js" --json 2>&1

Parse the JSON into three sets: declared.skills, declared.commands, declared.agents. Each is a sorted array of plugin:name strings. Remember the profile, pluginCount, counts.excluded, and excludedSkills/excludedCommands/excludedAgents fields — you'll need them for the final report.

Phase 2 — Actual inventory (from your session context)

Now enumerate what's actually available to you in this running session. The authoritative source is the <system-reminder> block near the start of the conversation that lists available skills. That block is ground truth — the Claude Code runtime injected it after profile assembly completed, so it reflects what was actually loaded.

Strict rules for Phase 2 — read, do not recall:

  • Read directly from the system-reminder text in your context. Do not rely on memory of what a "typical" profile has.
  • Convert every listed skill to the same plugin:name format used in Phase 1. Items in the system reminder that already have a plugin:name prefix stay as-is. Items without a plugin prefix (e.g. update-config, keybindings-help, simplify, loop) are builtin or globally-installed — prefix them with the sentinel (global): so they diff cleanly.
  • Do the same for commands (user-invocable slash commands grouped under "user-invocable skills" or similar) and for agents (under the Agent tool's subagent_type list).
  • Profile-scoped commands exception: the declared inventory may include entries prefixed (profile): (e.g. (profile):workflow, (profile):workflow-debug, (profile):intro). These are slash commands the profile wrote into its own config/commands/ directory — Claude Code loads them as bare command names, same as (global): items. When you see a bare command in the session whose short name matches a declared (profile):<name> entry, prefix it with (profile): (not (global):) so the diff matches. Only fall back to (global): when no (profile): declaration uses that name.
  • If a category (skills, commands, agents) is not visible in your context, say so explicitly in the report instead of guessing.

Read the full file on GitHub · 81 lines

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 · 81 lines · 29 tokens per session scan A aade0b5974b3

Subscribe to this mod's changes

diff-addons is a skill published in the GitHub repository Mduffy37/claudeworks (11 stars, last pushed 2mo ago), licensed MIT. It adds 29 tokens to every session and 1,495 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

Other skills, from other repositories

snip

You are an expert at writing declarative YAML filters for snip, a CLI proxy that reduces LLM token consumption by filtering shell output.

edouard-claude/snip · 0 tokens

writing-workflow-skills

Use when adding a new workflow skill to pi-thinkrail-workflow, changing an existing workflow skill's role, trigger, handoff, or structure, or checking a workflow skill against the workflow system's rules. Not for authoring general-purpose skills outside this package.

JetBrains/thinkrail · 60 tokens

todos

This chat has a shared, live TODO plan — your tasks for the conversation, which the user also edits. Read this skill and reach for the todo tools whenever a request takes more than a couple of steps. It covers the plan model (group = task, items = its steps; loose items are the user's lane), how to work it: propose…

JetBrains/thinkrail · 127 tokens

reviewing-changes

Use when a review package asks you to review a plan step's change set (todo.startReview): you are the REVIEWER, not the author. How to judge an agent-written diff, file findings with addreviewcomment, and settle with exactly one reviewverdict.

JetBrains/thinkrail · 59 tokens

setting-up-a-project

Use whenever asked to set up, onboard, initialize, or spec a project — the front door when the workspace has no spec graph yet (brand-new or an existing codebase); also seeded by the app's Set-up-project card (/skill:setting-up-a-project). Not for feature work in an already-specced project — use the brainstorming…

JetBrains/thinkrail · 76 tokens

writing-specs

Use when a workflow step drafts or revises a spec artifact — a goal-and-requirements, an architecture, or a module SPEC — or when a workflow skill names it at such a step. The shared quality bar for specs — not a workflow, nothing to execute.

JetBrains/thinkrail · 59 tokens