Claude Code hook

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.

Hover a bearing — the needle locks on and shows the skills.
// 01

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.

// 02

Scan, match, inject

SCAN

Read the repo

On every prompt, it reads the project root: dependency manifests, folders, and file extensions. Depth-limited, milliseconds, cached per session.

MATCH

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.

INJECT

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.

// 03

The bearings it reads

BearingTriggersSkills 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, *.sqldatabase-migrations, postgres-patterns
AUTH · 180°next-auth, stripe, jwt, auth/security-review
LLM · 240°anthropic, openai, langchainclaude-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.

// 04

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.

// 05

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.