Conceptmap
Use when the user wants to learn the engineering concepts behind a codebase, asks what concepts a project uses or is missing, wants to study a concept against real code, or mentions their concept registry. Triggers on "what concepts does this use", "map this repo", "what should I learn next here", "mark this solid", "what's missing here".From its SKILL.md
npx -y skills add NishalDev/nerd --skill conceptmapAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
7.1 KB, as published. Nobody here has run it
Concept mapping
The user keeps a registry of engineering concepts and how well they know each one. This skill maps those concepts onto real code and manages the registry.
Finding the registry
Look in exactly two places, in order, and stop at the first hit:
./concepts-registry.jsonin the current working directory- the path in
NERD_REGISTRY, if that variable is set
Do not search the filesystem. Do not look in home directories, Desktop,
Downloads, or the plugin cache. If neither location has a registry, stop and ask
for the path, offering to copy ${CLAUDE_PLUGIN_ROOT}/registry-starter.json
into the repo instead. ${CLAUDE_PLUGIN_ROOT} is already set - use it as-is in
a path, never try to resolve or locate it. If you offer to copy the starter,
wait for an explicit yes; never copy it in and carry on in the same turn.
Read and write the registry with Read and Edit. Never shell out to node, python, jq or cat for it - those break on Windows paths and waste turns.
Reading the registry efficiently
Registries get large - hundreds of concepts, well over 100KB. Never Read one in full. Slice it instead:
- Grep for the ids in scope with one line of trailing context, e.g.
"id": "db-with-n -A 1, which returns the id and name of every concept in that category along with its line numbers. - When you need a concept's full object - to check
evidenceorscore- Read withoffsetandlimitaround the line numbers grep gave you, not the whole file. - Grep for
scoreRubricrather than readingmetawholesale.
If no scope was given, grep the id prefixes one category at a time rather than pulling everything into context at once.
Registry shape
meta.scoreRubric defines the scale: 1 = solid, 2 = shaky, 3 = unknown.
Lower is better. Never assume the reverse, and never infer the scale from
anything but this file.
Each concept has id, name, category, categoryId, detail, score,
target, notes (the user's own words), evidence ([{project, file, note}]),
resources, history ([{date, score}]), lastReviewed.
One registry can cover several codebases. project is the id of the repo the
file lives in: the basename of git rev-parse --show-toplevel, lowercased.
meta.projects is the list of ids seen so far, as [{id, root, lastScanCommit}]
where root is that toplevel path and lastScanCommit is the mark /nerd:catch
diffs from: the HEAD sha as of the last time that project was caught up. It is
absent until the first /nerd:catch, and /nerd:scan does not set it.
Which projects use a concept is derived from its evidence entries. There is no
projects key on a concept - never add one, or the two will disagree.
Scores and notes are global to the concept: knowing something is not per-repo. Evidence is per-project - the same concept can be demonstrated in three repos and each place earns its own entry.
Registries written before this plugin may lack evidence - add the key on
first write. Preserve every other key exactly as found, including ones not
listed here.
Writing to the registry
Edit only the concept objects that changed. Never rewrite or reformat the whole
file, never reorder concepts. Only /nerd:solid changes a score; scanning
never does.
meta is the one exception, and only for meta.projects: the first time
evidence is written for a project id that is not already listed, append
{id, root}. lastScanCommit on an existing entry may be moved forward, by
/nerd:catch only. Nothing else in an entry is rewritten and no entry is ever
removed - a project that has moved or gone away still owns the evidence written
under it.
Evidence is keyed on (project, file). Before appending an entry, look for one
with the same project and file already in the array and replace it in place;
only append if there is none. Rescanning a repo must not grow its own evidence.
Backfilling old entries
An evidence entry with no project key predates scoping. When one is on a
concept you are writing to, check whether its file exists in the current repo:
- present - it is this project's, add
"project": "<current id>"to it - absent - leave it exactly as it is, unknown project and all
Never guess a project for a file you cannot see.
Scanning a repo
Budget: roughly 25 file reads. Spend them deliberately rather than exhaustively.
- Get the project id and root:
git rev-parse --show-toplevel, basename, lowercased. - Slice the registry for the concepts in scope, as above. State how many are in scope before starting.
- Map the repo structure with Glob - entry points, routes, schema and migrations, config, jobs and workers, middleware.
- Use Grep for concept signals before reading anything: library names, decorator and function names, SQL keywords, config keys. Issue these searches in parallel in a single message, not one at a time.
- Read only the files the greps point at, densest first.
A concept counts only if the code genuinely demonstrates it. An import, a
dependency in package.json, or a passing mention in a comment is not
evidence. When in doubt, leave it unmatched - a scan that over-claims is worse
than one that under-claims, because the user studies from it.
Write matches into evidence as {project, file, note} - the current project
id, a path relative to the repo root, one line on how it is used - replacing any
entry already there for the same (project, file). Add the project to
meta.projects if this is its first evidence.
Report as a compact table - id, name, file - grouped by category, then a single line counting what went unmatched. Do not print the registry back, do not list every unmatched concept unless asked, and do not summarise the codebase.
Studying one concept
Theory first, briefly, at a working-engineer level: the problem it solves and
what breaks without it. Then the tradeoff - its cost, and when not to use it.
Then open the file from evidence and walk through the real lines. Finish with
one thing this codebase does not handle about the concept.
Marking solid
Never mark a concept solid on request alone. Ask the user to explain, without looking, the mechanics, the tradeoff, and the usage in this codebase. Stop and wait for their answer.
Then compare it against the code. If it holds: set score to 1, save their
words as notes, set lastReviewed to today, append {date, score} to
history. If it does not: leave the score untouched and say precisely which
part was missing.
Be honest about a weak answer. A registry marked solid out of politeness is worthless to the person relying on it in an interview.
Finding gaps
The inverse of a scan: given the shape of this system, name the concepts a
codebase like it would normally rely on but this one does not. Report, never
write. Details in the /nerd:gaps command.