⏳ This skill is pending AI review.

Scores will appear once the review pipeline completes.

version unknown

skill-atlas

@daniellublinsky⭐ 23 stars

Graph, categorize and visualize the installed Claude Code skill collection. Use when the user wants to map, audit or categorize their skills, move skills into the searchable tier, or asks which skills are broken, dangling, dead, disabled or duplicated — and for any mention of the skill atlas, skill graph or skill catalog.

Choose how to use this skill

You do not need every option. Choose the path your AI client supports. The stable page stays the same; versioned files are immutable.

1. Native installer

This listing has no registered native installer command. Use the complete package or source fallback below, depending on what your client supports.

Do not guess an installer command or replace an existing version without reviewing the diff.

2. Complete package recommended

Download the ZIP when available. It includes SKILL.md plus the references, security notes and version metadata.

No complete ProSkills package is published for this listing yet.

3. Prompt-only

Copy the prompt above when the agent can read the stable page or when you want to adopt the workflow without installing a skill.

Need only the instruction file?

Download SKILL.md only if your client requires a single file. The complete ZIP is safer for a full installation because it preserves the references and release context.

No path installs or executes anything by itself. Your agent still needs access to the project files. Before updating, compare the installed version and review the diff.

—/10

// RATINGS

⭐GitHub Stars
⭐⭐ 23 on GitHubGitHub ↗

Growing

🟢ProSkills Score
—
📍

Not yet listed on ClawHub or SkillsMP

// README

Skill Atlas

A third tier for Claude Code skills — dormant, zero tokens, still findable. Search a graph of your collection instead of preloading it.

53 skills, 6 kept enabled: 2,544 → 338 tokens per session (−86.7%). The other 47 cost nothing until asked for.

CI

The atlas, scope view


⚡ Install

claude plugin marketplace add danielLublinsky/Skill-Atlas
claude plugin install skill-atlas@skill-atlas

Python 3 only — no dependencies, no network (d3 is vendored).

Update. New versions arrive on their own — Claude Code refreshes marketplaces periodically and picks up the new version, applying it on the next restart. To pull one immediately:

claude plugin marketplace update skill-atlas
claude plugin update skill-atlas@skill-atlas

Then restart Claude Code — the update is staged until you do.

git clone https://github.com/danielLublinsky/Skill-Atlas.git
claude plugin marketplace add ./Skill-Atlas
claude plugin install skill-atlas@skill-atlas

▶️ Run

CommandWhat it does
/skill-atlasBuild the graph, categorize what's new, render atlas.html. Run this once to set up.
/skill-atlas:edit-searchableMove plugins in and out of the searchable tier, interactively.
/skill-atlas:skill-searchFind the right skill for a task across the whole library, dormant tier included.
(automatic)A SessionStart hook keeps everything fresh after that.

Then open ./.claude/skill-atlas/atlas.html in a browser, and just ask for a task — the search runs itself, names the skill it picked in one line, and gets on with the work.

make build    # graph.json + catalog/ from your live manifests
make render   # atlas.html
make check    # CI gate: exit 1 on any broken reference or dangling mention
make test     # unit suite against fixtures — never touches the real ~/.claude
make release  # bump both manifests, validate, test — never commits or pushes

The plugin cache is keyed by version, so a push without a bump ships no code to anyone already installed. make release (or BUMP=minor, VERSION=1.0.0) is what makes a change land.


🎯 The problem

Claude Code injects every enabled skill's description into every session — ~48 tokens each. At 100+ skills that's thousands of tokens you pay for constantly, and near-duplicates quietly compete for the model's attention.

Disabling fixes the cost and loses the skill. So Skill Atlas adds a tier in between:

TierIn context?Findable?Cost / session
🟢 enabledyesnatively~48 tokens each
🟣 searchablenovia skill-search0
⚫ disablednono0

A searchable skill is dormant — its description never enters your context, but it stays discoverable on demand. All that advertises the whole dormant tier is one ~50-token line at session start.

🔍 Search reads two files, not the catalog

flowchart LR
    A(["🧭 a task arrives<br/><i>“resolve this merge conflict”</i>"])

    subgraph R1["1️⃣ read the index · ~1.6k tok"]
        I["<b>_index.md</b> — 14 lines<br/><i>name · count · what it covers · member tokens</i>"]
    end

    subgraph R2["2️⃣ read one shard · ~0.6k tok"]
        S["<b>version-control.md</b><br/>using-git-worktrees<br/>resolving-merge-conflicts ← hit"]
    end

    X["the other 13 shards<br/><i>~10k tok · never opened</i>"]

    A --> I
    I -- "pick ONE category" --> S
    I -. skipped .-> X
    S --> E["🟢 <b>enabled</b><br/><i>invoke natively</i>"]
    S --> F["🟣 <b>searchable</b><br/><i>read its path,<br/>follow as instructions</i>"]

    classDef file stroke:#8a8578,stroke-width:1.5px
    classDef ghost fill:transparent,stroke:#8a8578,stroke-width:1.5px
    classDef hit fill:#1baf7a26,stroke:#1baf7a,stroke-width:2px
    classDef dormant fill:#8a5cd626,stroke:#8a5cd6,stroke-width:2px
    classDef muted fill:transparent,stroke:#8a8578,stroke-width:1px,stroke-dasharray:4 3
    class I,S file
    class A ghost
    class E hit
    class F dormant
    class X muted
    style R1 fill:#3987e514,stroke:#3987e5,stroke-width:1.5px
    style R2 fill:#3987e514,stroke:#3987e5,stroke-width:1.5px

A search costs ~2.4k tokens — the index (1.6k), one shard (~0.6k) and the search skill itself (0.4k) — and you pay it only when a search happens. The alternative it replaces is every dormant description sitting in context from session start, billed whether you search or not. The arbitrage is real when searches are occasional; it is not free, and the numbers above are measured rather than estimated.

One shard is the norm. A second is opened only when the entry you found lists a category you haven't read — the catalog pointing, not the model guessing — and never a third. Counts overlap on purpose, so the pick doesn't have to land on the right bucket, only a right one. Tier-off skills are excluded when shards are written, so a disabled plugin can never return through a side door. The result is announced in one line before the work continues: search is a lookup inside a task, not a deliverable.

The model categorizes once. The first run drafts 8–12 categories named for user-intent task shapes, not products, then freezes the taxonomy. Later runs only file new skills and re-confirm the ones whose description changed — each assignment carries a hash of the description it was made against.

🕸️ The graph

The atlas, category view

Discovery is manifest-driven — installed_plugins.json → each plugin.json → settings — so marketplace catalogues and stale cached versions never pollute the picture. (The naive "every directory with a SKILL.md" count over-counts by ~60% on a real machine: build_graph.py --naive-count.)

Skills are nodes. The edges are the interesting part:

EdgeCaught
🔗references — a skill → its own bundled filesbroken when the file isn't there
💬mentions — a skill naming another skilldangling when the target is disabled, unregistered or absent

Mention matching is deliberately strict — only backticked, skills/<name>, or unambiguous hyphenated names, code fences stripped first. Loose matching produced 91 edges on a 41-skill collection, almost all of them ordinary English words. You also get duplicate names, orphans, and an exit code to gate CI on.

atlas.html is self-contained and opens from file:// with zero network requests: scope (origin, state, breakage in red) and categories (hub-and-spoke — solid edge to the home category, dashed to the rest; search cat:<name> to isolate).

🛠️ Building and debugging skills

Debugging a skill in the atlas

  • What's really registered — discovery is manifest-driven, so unregistered copies and stale plugin caches surface as their own nodes instead of quietly counting.
  • Broken bundles — a references edge whose file isn't on disk draws red, so a typo'd references/foo.md is visible without opening anything.
  • Why it didn't trigger — tier is the node's fill (enabled · searchable · disabled), and duplicate names are called out in the footer with both nodes drawn.
  • Read it in place — pin any skill or bundled file and hit open markdown to read the source in a popup without leaving the graph.

📚 Docs

docs/ — component guide, numbered 1–9

// HOW IT'S BUILT

KEY FILES

skills/skill-atlas/SKILL.mdREADME.md

// REPO STATS

23 stars