Point your project at the right skills.
skill-compass reads your repo, works out what it's actually made of, and tells Claude which skills to load — before it writes a single line.
200+ skills. Which ones apply right now?
A loaded Claude Code has a huge skill library — design, API, database, security, every language stack. The right one for the task is in there. The problem is remembering to reach for it. skill-compass removes the remembering: it inspects the project on each prompt and hands Claude a short, accurate list of the skills that match what's in front of it.
Scan, match, inject
Read the repo
On every prompt, it reads the project root: dependency manifests, folders, and file extensions. Depth-limited, milliseconds, cached per session.
Take a bearing
It maps what it found to stacks (Rust, Next.js, Django…) and cross-cutting directions (UI, API, DB, auth, LLM, infra) from one editable config.
Route the skills
It adds a compact note to the prompt naming the skills to load. Shown once per project per session; re-shown only when the project changes.
The bearings it reads
| Bearing | Triggers | Skills it routes |
|---|---|---|
| UI · 000° | react, vue, next, .tsx, components/ | frontend-design, make-interfaces-feel-better |
| API · 060° | express, fastapi, app/api/, routes/ | api-design, backend-patterns |
| DB · 120° | prisma, drizzle, sqlalchemy, *.sql | database-migrations, postgres-patterns |
| AUTH · 180° | next-auth, stripe, jwt, auth/ | security-review |
| LLM · 240° | anthropic, openai, langchain | claude-api, agent-harness-construction |
| INFRA · 300° | Dockerfile, compose.yml, k8s/ | docker-patterns, deployment-patterns |
Plus 16 language stacks (Rust, Go, Python, TypeScript, Java, Kotlin, Swift, Dart, PHP, C#, C/C++ …).
Every row lives in directions.json — add a bearing by appending an object.
Install
Needs Node.js and Claude Code. The installer drops two files and registers two hooks — UserPromptSubmit (prompt + project) and PostToolUse (mid-turn tool findings).
# clone & run the installer (macOS / Linux / Windows) git clone https://github.com/by-sonic/skill-compass node skill-compass/install.js
…or wire it up by hand — add this to ~/.claude/settings.json:
"UserPromptSubmit": [{ "matcher": "", "hooks": [{ "type": "command", "command": "node \"~/.claude/skill-compass/compass.js\"" }] }], "PostToolUse": [{ "matcher": "Bash|Grep|Glob|Read|Task", "hooks": [{ "type": "command", "command": "node \"~/.claude/skill-compass/compass.js\" --post" }] }]
Disable anytime with SKILL_COMPASS=off. Test detection with
node compass.js --self-test.
Questions
Does it slow down every prompt?
No. It reads the project root one level deep and caches the result per session. No deep tree walks, no network, no parsing beyond dependency manifests — single-digit milliseconds.
Will it spam me with the same note every message?
It shows the directions once per project per session, and re-shows them only when the detected set changes — for example when you add a Dockerfile and the infra bearing appears.
I work from a folder full of separate projects. What happens?
It stays silent. A real project has a manifest at its root; a container of projects doesn't. No root manifest means it isn't a project, so the compass says nothing instead of guessing.
Is it tied to a specific skill marketplace?
The default config points at common Claude Code skills, but every mapping is just a string in directions.json. Point a bearing at any skill name you have installed.
What does it send anywhere?
Nothing. It runs locally, reads files in your project, and writes a note to your own prompt. Zero dependencies, zero telemetry, ~200 lines of Node you can read in a sitting.