@geoemmanuel/nave 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +82 -0
- package/SKILL.md +132 -0
- package/agents/index.json +53 -0
- package/install.js +236 -0
- package/package.json +35 -0
- package/registry/index.json +109 -0
- package/registry/skills/emil.md +33 -0
- package/registry/skills/impeccable.md +27 -0
- package/registry/skills/karpathy.md +30 -0
- package/registry/skills/ponytail.md +27 -0
- package/registry/skills/superpowers.md +32 -0
- package/registry/skills/taste.md +30 -0
- package/registry/skills/ui-ux-pro-max.md +36 -0
package/README.md
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# nave
|
|
2
|
+
|
|
3
|
+
A curated skill router for AI coding agents.
|
|
4
|
+
|
|
5
|
+
Nave detects what you're working on and routes to the right skill — automatically.
|
|
6
|
+
Clear task? Executes directly. Ambiguous task? Shows you the options and asks first.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Install
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npx nave
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Run once in your project root. Nave detects which agent you're using and installs itself.
|
|
17
|
+
|
|
18
|
+
**Supported agents:** Claude Code, Cursor, OpenCode, Codex CLI, Windsurf, Gemini CLI, Antigravity
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## What it does
|
|
23
|
+
|
|
24
|
+
Before responding to any task, nave classifies the request and reads the best matching skill:
|
|
25
|
+
|
|
26
|
+
| Task | Skill activated |
|
|
27
|
+
|---|---|
|
|
28
|
+
| "plan this feature out" | superpowers — structured plan, crash-proof |
|
|
29
|
+
| "you're over-engineering this" | karpathy — discipline, surgical changes |
|
|
30
|
+
| "simplest solution please" | ponytail — laziest senior dev in the room |
|
|
31
|
+
| "write this slide animation" | emil — motion philosophy, correct easing |
|
|
32
|
+
| "does this look generic?" | taste-skill — anti-slop visual direction |
|
|
33
|
+
| "build a design language" | impeccable — brand vs product thinking |
|
|
34
|
+
| "design this settings page" | ui-ux-pro-max — 99 UX patterns + a11y |
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Bundled Skills
|
|
39
|
+
|
|
40
|
+
| Skill | Author | Stars | Domain |
|
|
41
|
+
|---|---|---|---|
|
|
42
|
+
| [karpathy](https://github.com/multica-ai/andrej-karpathy-skills) | @multica-ai | 174k | Agent behavior, coding discipline |
|
|
43
|
+
| [superpowers](https://github.com/obra/superpowers) | @obra | 226k | Planning, multi-step agentic tasks |
|
|
44
|
+
| [ponytail](https://github.com/DietrichGebert/ponytail) | @DietrichGebert | 50k | Code minimalism, YAGNI |
|
|
45
|
+
| [emil](https://github.com/emilkowalski/skills) | @emilkowalski | 2.8k | Animation, motion, interaction |
|
|
46
|
+
| [taste-skill](https://github.com/Leonxlnx/taste-skill) | @Leonxlnx | 45k | Visual taste, anti-slop |
|
|
47
|
+
| [impeccable](https://github.com/pbakaus/impeccable) | @pbakaus | 28k | Design language, brand vs product |
|
|
48
|
+
| [ui-ux-pro-max](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill) | @nextlevelbuilder | 88k | UX patterns, accessibility |
|
|
49
|
+
|
|
50
|
+
These authors built exceptional skills. Nave curates and routes between them.
|
|
51
|
+
Full credit above — install their skills directly for the complete experience.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Commands
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
npx nave # install into detected agent
|
|
59
|
+
npx nave --agent claude # install for a specific agent
|
|
60
|
+
npx nave list # list all registered skills
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
In your agent after install:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
/nave # show skill registry and suggestion
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Adding a skill
|
|
72
|
+
|
|
73
|
+
See [CONTRIBUTING.md](./CONTRIBUTING.md).
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## License
|
|
78
|
+
|
|
79
|
+
MIT
|
|
80
|
+
|
|
81
|
+
Skill philosophies are credited to their original authors.
|
|
82
|
+
Nave references their work in condensed form — it does not redistribute full skill files.
|
package/SKILL.md
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: nave
|
|
3
|
+
description: >
|
|
4
|
+
Nave is a curated skill router. Before responding to any task, classify
|
|
5
|
+
it against the registry below and read the matching skill file.
|
|
6
|
+
On clear tasks: execute directly. On ambiguous tasks: show the skill
|
|
7
|
+
layout and ask which direction before proceeding.
|
|
8
|
+
version: 0.1.0
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Nave — Skill Router
|
|
12
|
+
|
|
13
|
+
Nave curates the best craft skills for building software and routes every
|
|
14
|
+
task to the right one automatically.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Protocol
|
|
19
|
+
|
|
20
|
+
**Step 1 — Classify the task**
|
|
21
|
+
Run the classification rules below. First match wins.
|
|
22
|
+
|
|
23
|
+
**Step 2 — Clarity check**
|
|
24
|
+
- Clear and specific → execute directly, open with: `[nave] → {skill} activated`
|
|
25
|
+
- Ambiguous (e.g. "fix this", "make it better") → show the Skill Layout,
|
|
26
|
+
state which 2–3 skills apply and what each would do differently, ask which direction
|
|
27
|
+
|
|
28
|
+
**Step 3 — Read the skill file**
|
|
29
|
+
Load the matched skill from `registry/skills/{id}.md` and apply its philosophy.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Skill Layout
|
|
34
|
+
|
|
35
|
+
Show this when the task is ambiguous or when the user runs `/nave`:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
┌───────────────┬──────────────────┬────────┬───────────────────────────────────────────────┐
|
|
39
|
+
│ skill │ domain │ stars │ best for │
|
|
40
|
+
├───────────────┼──────────────────┼────────┼───────────────────────────────────────────────┤
|
|
41
|
+
│ karpathy │ Agent behavior │ ★174k │ Coding discipline, focus, no overreach │
|
|
42
|
+
│ superpowers │ Planning │ ★226k │ Multi-step tasks, plans that survive /clear │
|
|
43
|
+
│ ponytail │ Code craft │ ★50k │ YAGNI, minimal, delete bloat │
|
|
44
|
+
│ emil │ Animation │ ★2.8k │ Motion, easing, interaction polish │
|
|
45
|
+
│ taste │ Visual taste │ ★45k │ Anti-slop, stop AI generating generic UI │
|
|
46
|
+
│ impeccable │ Design language │ ★28k │ Brand vs product, visual vocabulary │
|
|
47
|
+
│ ui-ux-pro-max │ UX patterns │ ★88k │ Pages, components, accessibility │
|
|
48
|
+
└───────────────┴──────────────────┴────────┴───────────────────────────────────────────────┘
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
After showing the layout: state the suggested skill and a one-line reason. Ask to confirm.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Classification Rules
|
|
56
|
+
|
|
57
|
+
### Karpathy [karpathy]
|
|
58
|
+
**Domain:** Agent behavior
|
|
59
|
+
**Triggers:** "over-engineering", "stay focused", "think before coding", "wrong direction",
|
|
60
|
+
"silent assumptions", "production code", "critical change", "multi-file task"
|
|
61
|
+
→ Read `registry/skills/karpathy.md`
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
### Superpowers [superpowers]
|
|
66
|
+
**Domain:** Planning
|
|
67
|
+
**Triggers:** "plan this", "architect this", "multi-step", "long task",
|
|
68
|
+
"don't lose context", "PRD", "spec", "from scratch", "multi-file refactor"
|
|
69
|
+
→ Read `registry/skills/superpowers.md`
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
### Ponytail [ponytail]
|
|
74
|
+
**Domain:** Code craft
|
|
75
|
+
**Triggers:** "simplest solution", "too complex", "YAGNI", "over-engineered",
|
|
76
|
+
"delete this", "minimal", "be lazy", "shortest path", "adding dependency", "new abstraction"
|
|
77
|
+
→ Read `registry/skills/ponytail.md`
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
### Emil Design Engineering [emil]
|
|
82
|
+
**Domain:** Animation
|
|
83
|
+
**Triggers:** "animation", "transition", "easing", "motion", "spring",
|
|
84
|
+
"framer-motion", "hover effect", "page transition", "micro-interaction",
|
|
85
|
+
"scroll animation", "keyframe", "gesture"
|
|
86
|
+
→ Read `registry/skills/emil.md`
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
### Taste Skill [taste]
|
|
91
|
+
**Domain:** Visual taste
|
|
92
|
+
**Triggers:** "does this look good", "too generic", "AI slop", "improve the UI",
|
|
93
|
+
"visual review", "aesthetic", "typography", "color palette", "layout feedback", "make it better"
|
|
94
|
+
→ Read `registry/skills/taste.md`
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### Impeccable [impeccable]
|
|
99
|
+
**Domain:** Design language
|
|
100
|
+
**Triggers:** "design language", "design system", "brand", "visual vocabulary",
|
|
101
|
+
"typography system", "color system", "spacing scale", "feel like a real product", "design tokens"
|
|
102
|
+
→ Read `registry/skills/impeccable.md`
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
### UI UX Pro Max [ui-ux-pro-max]
|
|
107
|
+
**Domain:** UX patterns
|
|
108
|
+
**Triggers:** "new page", "dashboard", "landing", "onboarding", "settings",
|
|
109
|
+
"component architecture", "form design", "navigation pattern",
|
|
110
|
+
"accessibility", "responsive layout", "user flow", "admin panel"
|
|
111
|
+
→ Read `registry/skills/ui-ux-pro-max.md`
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Registered Skills
|
|
116
|
+
|
|
117
|
+
| Skill | Domain | Stars | Description |
|
|
118
|
+
|---------------|------------------|--------|-----------------------------------------------------------------|
|
|
119
|
+
| karpathy | Agent behavior | ★174k | Coding discipline and behavioral guardrails for AI agents |
|
|
120
|
+
| superpowers | Planning | ★226k | Structured workflows for multi-step agentic tasks |
|
|
121
|
+
| ponytail | Code craft | ★50k | Laziest senior dev in the room — YAGNI, minimal, delete bloat |
|
|
122
|
+
| emil | Animation | ★2.8k | Motion philosophy from Vercel and Linear design engineering |
|
|
123
|
+
| taste | Visual taste | ★45k | Anti-slop visual direction, stop AI generating generic UI |
|
|
124
|
+
| impeccable | Design language | ★28k | Brand vs product thinking, visual vocabulary and design systems |
|
|
125
|
+
| ui-ux-pro-max | UX patterns | ★88k | 99 UX guidelines, component patterns, accessibility |
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Adding Skills
|
|
130
|
+
|
|
131
|
+
To propose a skill: open an issue at https://github.com/nave-dev/nave
|
|
132
|
+
Include: repo URL, domain, and why it belongs in a curated collection.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"agents": [
|
|
3
|
+
{
|
|
4
|
+
"id": "claude",
|
|
5
|
+
"name": "Claude Code",
|
|
6
|
+
"detect": ".claude",
|
|
7
|
+
"skillPath": ".claude/skills/nave",
|
|
8
|
+
"configNote": "Works with claude_code_skills in .claude/settings.json"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"id": "cursor",
|
|
12
|
+
"name": "Cursor",
|
|
13
|
+
"detect": ".cursor",
|
|
14
|
+
"skillPath": ".cursor/skills/nave",
|
|
15
|
+
"configNote": "Place in .cursor/skills/ for automatic pickup"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "opencode",
|
|
19
|
+
"name": "OpenCode",
|
|
20
|
+
"detect": ".opencode",
|
|
21
|
+
"skillPath": ".opencode/skills/nave",
|
|
22
|
+
"configNote": "OpenCode reads .opencode/skills/ on startup"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "codex",
|
|
26
|
+
"name": "Codex CLI",
|
|
27
|
+
"detect": ".codex",
|
|
28
|
+
"skillPath": ".codex/skills/nave",
|
|
29
|
+
"configNote": "Codex reads .codex/skills/ in project root"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "windsurf",
|
|
33
|
+
"name": "Windsurf",
|
|
34
|
+
"detect": ".windsurf",
|
|
35
|
+
"skillPath": ".windsurf/skills/nave",
|
|
36
|
+
"configNote": "Works with Windsurf AI rules system"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"id": "gemini",
|
|
40
|
+
"name": "Gemini CLI",
|
|
41
|
+
"detect": ".gemini",
|
|
42
|
+
"skillPath": ".gemini/skills/nave",
|
|
43
|
+
"configNote": "Gemini CLI reads .gemini/skills/ on startup"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "antigravity",
|
|
47
|
+
"name": "Antigravity",
|
|
48
|
+
"detect": ".antigravity",
|
|
49
|
+
"skillPath": ".antigravity/skills/nave",
|
|
50
|
+
"configNote": "Antigravity skills directory"
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
}
|
package/install.js
ADDED
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const path = require("path");
|
|
5
|
+
|
|
6
|
+
const RESET = "\x1b[0m";
|
|
7
|
+
const BOLD = "\x1b[1m";
|
|
8
|
+
const DIM = "\x1b[2m";
|
|
9
|
+
const CYAN = "\x1b[36m";
|
|
10
|
+
const GREEN = "\x1b[32m";
|
|
11
|
+
const YELLOW = "\x1b[33m";
|
|
12
|
+
const RED = "\x1b[31m";
|
|
13
|
+
|
|
14
|
+
const cwd = process.cwd();
|
|
15
|
+
|
|
16
|
+
// Load registry and agent configs
|
|
17
|
+
const registry = JSON.parse(
|
|
18
|
+
fs.readFileSync(path.join(__dirname, "registry/index.json"), "utf8")
|
|
19
|
+
);
|
|
20
|
+
const agentConfig = JSON.parse(
|
|
21
|
+
fs.readFileSync(path.join(__dirname, "agents/index.json"), "utf8")
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
function log(msg) { process.stdout.write(msg + "\n"); }
|
|
25
|
+
function info(msg) { log(`${CYAN}nave${RESET} ${msg}`); }
|
|
26
|
+
function ok(msg) { log(`${GREEN}✓${RESET} ${msg}`); }
|
|
27
|
+
function warn(msg) { log(`${YELLOW}!${RESET} ${msg}`); }
|
|
28
|
+
function err(msg) { log(`${RED}✗${RESET} ${msg}`); }
|
|
29
|
+
|
|
30
|
+
// Detect which agents are present in the current project
|
|
31
|
+
function detectAgents() {
|
|
32
|
+
return agentConfig.agents.filter((agent) =>
|
|
33
|
+
fs.existsSync(path.join(cwd, agent.detect))
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Generate SKILL.md dynamically from registry
|
|
38
|
+
function generateSkillMd() {
|
|
39
|
+
const skills = registry.skills;
|
|
40
|
+
|
|
41
|
+
const registryTable = skills
|
|
42
|
+
.map(
|
|
43
|
+
(s) =>
|
|
44
|
+
`| ${s.id.padEnd(16)} | ${s.domain.padEnd(16)} | ★${s.stars.padEnd(5)} | ${s.description} |`
|
|
45
|
+
)
|
|
46
|
+
.join("\n");
|
|
47
|
+
|
|
48
|
+
const classificationRules = skills
|
|
49
|
+
.map((s) => {
|
|
50
|
+
const triggers = s.triggers.map((t) => `"${t}"`).join(", ");
|
|
51
|
+
return `### ${s.name} [${s.id}]\n**Domain:** ${s.domain} \n**Triggers:** ${triggers}\n→ Read \`registry/skills/${s.id}.md\``;
|
|
52
|
+
})
|
|
53
|
+
.join("\n\n---\n\n");
|
|
54
|
+
|
|
55
|
+
return `---
|
|
56
|
+
name: nave
|
|
57
|
+
description: >
|
|
58
|
+
Nave is a curated skill router. Before responding to any task, classify
|
|
59
|
+
it against the registry below and read the matching skill file.
|
|
60
|
+
On clear tasks: execute directly. On ambiguous tasks: show the skill
|
|
61
|
+
layout and ask which direction before proceeding.
|
|
62
|
+
version: ${registry.version}
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
# Nave — Skill Router
|
|
66
|
+
|
|
67
|
+
Nave curates the best craft skills for building software and routes every
|
|
68
|
+
task to the right one automatically.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Protocol
|
|
73
|
+
|
|
74
|
+
**Step 1 — Classify the task**
|
|
75
|
+
Run the classification rules below. First match wins.
|
|
76
|
+
|
|
77
|
+
**Step 2 — Clarity check**
|
|
78
|
+
- Clear and specific → execute directly, open with: \`[nave] → {skill} activated\`
|
|
79
|
+
- Ambiguous (e.g. "fix this", "make it better") → show the Skill Layout below,
|
|
80
|
+
state which 2-3 skills apply and what each would do differently, ask which direction
|
|
81
|
+
|
|
82
|
+
**Step 3 — Read the skill file**
|
|
83
|
+
Load the matched skill from \`registry/skills/{id}.md\` and apply its philosophy.
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Skill Layout
|
|
88
|
+
|
|
89
|
+
Show this when task is ambiguous or when user runs \`/nave\`:
|
|
90
|
+
|
|
91
|
+
\`\`\`
|
|
92
|
+
┌──────────────────┬──────────────────┬───────┬────────────────────────────────────────┐
|
|
93
|
+
│ skill │ domain │ stars │ best for │
|
|
94
|
+
├──────────────────┼──────────────────┼───────┼────────────────────────────────────────┤
|
|
95
|
+
${skills
|
|
96
|
+
.map(
|
|
97
|
+
(s) =>
|
|
98
|
+
`│ ${s.id.padEnd(16)} │ ${s.domain.padEnd(16)} │ ★${s.stars.padEnd(5)} │ ${s.description.substring(0, 38).padEnd(38)} │`
|
|
99
|
+
)
|
|
100
|
+
.join("\n")}
|
|
101
|
+
└──────────────────┴──────────────────┴───────┴────────────────────────────────────────┘
|
|
102
|
+
\`\`\`
|
|
103
|
+
|
|
104
|
+
After showing the layout: state the suggested skill and one-line reason. Ask to confirm.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Classification Rules
|
|
109
|
+
|
|
110
|
+
${classificationRules}
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Registered Skills
|
|
115
|
+
|
|
116
|
+
| Skill | Domain | Stars | Description |
|
|
117
|
+
|---|---|---|---|
|
|
118
|
+
${registryTable}
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Adding Skills
|
|
123
|
+
|
|
124
|
+
To propose a skill: open an issue at https://github.com/nave-dev/nave
|
|
125
|
+
Include: repo URL, domain, and why it belongs in a curated collection.
|
|
126
|
+
`;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Install nave into a target agent directory
|
|
130
|
+
function install(agent, targetDir) {
|
|
131
|
+
const absTarget = path.join(cwd, targetDir);
|
|
132
|
+
|
|
133
|
+
// Create directories
|
|
134
|
+
fs.mkdirSync(path.join(absTarget, "registry/skills"), { recursive: true });
|
|
135
|
+
|
|
136
|
+
// Generate and write SKILL.md
|
|
137
|
+
const skillMd = generateSkillMd();
|
|
138
|
+
fs.writeFileSync(path.join(absTarget, "SKILL.md"), skillMd);
|
|
139
|
+
|
|
140
|
+
// Copy all skill reference files
|
|
141
|
+
const skillsDir = path.join(__dirname, "registry/skills");
|
|
142
|
+
const skillFiles = fs.readdirSync(skillsDir);
|
|
143
|
+
for (const file of skillFiles) {
|
|
144
|
+
fs.copyFileSync(
|
|
145
|
+
path.join(skillsDir, file),
|
|
146
|
+
path.join(absTarget, "registry/skills", file)
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
ok(`Installed to ${DIM}${targetDir}${RESET}`);
|
|
151
|
+
if (agent.configNote) {
|
|
152
|
+
log(` ${DIM}${agent.configNote}${RESET}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// Main
|
|
157
|
+
function main() {
|
|
158
|
+
const args = process.argv.slice(2);
|
|
159
|
+
const cmd = args[0];
|
|
160
|
+
|
|
161
|
+
log("");
|
|
162
|
+
log(` ${BOLD}nave${RESET} ${DIM}v${registry.version}${RESET}`);
|
|
163
|
+
log(` ${DIM}curated skill router for AI coding agents${RESET}`);
|
|
164
|
+
log("");
|
|
165
|
+
|
|
166
|
+
if (cmd === "list") {
|
|
167
|
+
log(` ${BOLD}Registered skills:${RESET}`);
|
|
168
|
+
log("");
|
|
169
|
+
for (const skill of registry.skills) {
|
|
170
|
+
log(` ${CYAN}${skill.id.padEnd(18)}${RESET} ${skill.domain.padEnd(18)} ★${skill.stars.padEnd(6)} ${DIM}${skill.repo}${RESET}`);
|
|
171
|
+
}
|
|
172
|
+
log("");
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if (cmd === "generate") {
|
|
177
|
+
// Just generate SKILL.md in current directory (for repo maintenance)
|
|
178
|
+
const skillMd = generateSkillMd();
|
|
179
|
+
fs.writeFileSync(path.join(cwd, "SKILL.md"), skillMd);
|
|
180
|
+
ok("Generated SKILL.md in current directory");
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// Default: install
|
|
185
|
+
const detected = detectAgents();
|
|
186
|
+
|
|
187
|
+
if (detected.length === 0) {
|
|
188
|
+
warn("No AI coding agent detected in this project.");
|
|
189
|
+
log("");
|
|
190
|
+
log(" Nave looks for: " + agentConfig.agents.map((a) => a.detect).join(", "));
|
|
191
|
+
log("");
|
|
192
|
+
log(" Install your agent first, then run npx nave again.");
|
|
193
|
+
log(" Or specify a target: npx nave --agent claude");
|
|
194
|
+
log("");
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// --agent flag
|
|
199
|
+
const agentFlag = args.find((a) => a.startsWith("--agent=") || a === "--agent");
|
|
200
|
+
let targets = detected;
|
|
201
|
+
|
|
202
|
+
if (agentFlag) {
|
|
203
|
+
const agentId = agentFlag.includes("=")
|
|
204
|
+
? agentFlag.split("=")[1]
|
|
205
|
+
: args[args.indexOf("--agent") + 1];
|
|
206
|
+
const specific = agentConfig.agents.find((a) => a.id === agentId);
|
|
207
|
+
if (!specific) {
|
|
208
|
+
err(`Unknown agent: ${agentId}`);
|
|
209
|
+
log(" Available: " + agentConfig.agents.map((a) => a.id).join(", "));
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
targets = [specific];
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
if (targets.length > 1) {
|
|
216
|
+
info(`Detected ${targets.length} agents: ${targets.map((a) => a.name).join(", ")}`);
|
|
217
|
+
} else {
|
|
218
|
+
info(`Detected: ${targets[0].name}`);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
log("");
|
|
222
|
+
|
|
223
|
+
for (const agent of targets) {
|
|
224
|
+
log(` Installing for ${BOLD}${agent.name}${RESET}...`);
|
|
225
|
+
install(agent, agent.skillPath);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
log("");
|
|
229
|
+
log(` ${GREEN}${BOLD}Done.${RESET} Nave is live in your project.`);
|
|
230
|
+
log("");
|
|
231
|
+
log(` ${DIM}Skills installed: ${registry.skills.map((s) => s.id).join(", ")}${RESET}`);
|
|
232
|
+
log(` ${DIM}Run /nave in your agent to see the skill registry.${RESET}`);
|
|
233
|
+
log("");
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
main();
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@geoemmanuel/nave",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "A curated skill router for AI coding agents",
|
|
5
|
+
"main": "install.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"nave": "./install.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"postinstall": "node install.js",
|
|
11
|
+
"generate": "node install.js generate",
|
|
12
|
+
"list": "node install.js list"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [
|
|
15
|
+
"ai", "agent", "skills", "claude-code", "cursor", "codex",
|
|
16
|
+
"opencode", "windsurf", "skill-router", "llm"
|
|
17
|
+
],
|
|
18
|
+
"author": "George Emmanuel <geoemman678@gmail.com>",
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "https://github.com/geoemmanuel/nave"
|
|
23
|
+
},
|
|
24
|
+
"homepage": "https://github.com/geoemmanuel/nave",
|
|
25
|
+
"engines": {
|
|
26
|
+
"node": ">=18.0.0"
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"install.js",
|
|
30
|
+
"registry/",
|
|
31
|
+
"agents/",
|
|
32
|
+
"SKILL.md",
|
|
33
|
+
"README.md"
|
|
34
|
+
]
|
|
35
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.1.0",
|
|
3
|
+
"skills": [
|
|
4
|
+
{
|
|
5
|
+
"id": "karpathy",
|
|
6
|
+
"name": "Karpathy",
|
|
7
|
+
"author": "multica-ai",
|
|
8
|
+
"repo": "https://github.com/multica-ai/andrej-karpathy-skills",
|
|
9
|
+
"stars": "174k",
|
|
10
|
+
"domain": "Agent behavior",
|
|
11
|
+
"description": "Coding discipline and behavioral guardrails for AI agents",
|
|
12
|
+
"triggers": [
|
|
13
|
+
"over-engineering", "stay focused", "think before coding",
|
|
14
|
+
"wrong direction", "silent assumptions", "production code",
|
|
15
|
+
"critical change", "multi-file task"
|
|
16
|
+
],
|
|
17
|
+
"file": "registry/skills/karpathy.md"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"id": "superpowers",
|
|
21
|
+
"name": "Superpowers",
|
|
22
|
+
"author": "obra",
|
|
23
|
+
"repo": "https://github.com/obra/superpowers",
|
|
24
|
+
"stars": "226k",
|
|
25
|
+
"domain": "Planning",
|
|
26
|
+
"description": "Structured workflows for multi-step agentic tasks",
|
|
27
|
+
"triggers": [
|
|
28
|
+
"plan this", "architect this", "multi-step", "long task",
|
|
29
|
+
"don't lose context", "PRD", "spec", "from scratch", "multi-file refactor"
|
|
30
|
+
],
|
|
31
|
+
"file": "registry/skills/superpowers.md"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "ponytail",
|
|
35
|
+
"name": "Ponytail",
|
|
36
|
+
"author": "DietrichGebert",
|
|
37
|
+
"repo": "https://github.com/DietrichGebert/ponytail",
|
|
38
|
+
"stars": "50k",
|
|
39
|
+
"domain": "Code craft",
|
|
40
|
+
"description": "Laziest senior dev in the room. YAGNI, minimal, delete bloat",
|
|
41
|
+
"triggers": [
|
|
42
|
+
"simplest solution", "too complex", "YAGNI", "over-engineered",
|
|
43
|
+
"delete this", "minimal", "be lazy", "shortest path",
|
|
44
|
+
"adding dependency", "new abstraction"
|
|
45
|
+
],
|
|
46
|
+
"file": "registry/skills/ponytail.md"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"id": "emil",
|
|
50
|
+
"name": "Emil Design Engineering",
|
|
51
|
+
"author": "emilkowalski",
|
|
52
|
+
"repo": "https://github.com/emilkowalski/skills",
|
|
53
|
+
"stars": "2.8k",
|
|
54
|
+
"domain": "Animation & motion",
|
|
55
|
+
"description": "Motion philosophy from Vercel and Linear design engineering",
|
|
56
|
+
"triggers": [
|
|
57
|
+
"animation", "transition", "easing", "motion", "spring",
|
|
58
|
+
"framer-motion", "hover effect", "page transition", "micro-interaction",
|
|
59
|
+
"scroll animation", "keyframe", "gesture"
|
|
60
|
+
],
|
|
61
|
+
"file": "registry/skills/emil.md"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"id": "taste",
|
|
65
|
+
"name": "Taste Skill",
|
|
66
|
+
"author": "Leonxlnx",
|
|
67
|
+
"repo": "https://github.com/Leonxlnx/taste-skill",
|
|
68
|
+
"stars": "45k",
|
|
69
|
+
"domain": "Visual taste",
|
|
70
|
+
"description": "Anti-slop visual direction. Stop AI from generating generic UI",
|
|
71
|
+
"triggers": [
|
|
72
|
+
"does this look good", "too generic", "AI slop", "improve the UI",
|
|
73
|
+
"visual review", "aesthetic", "typography", "color palette",
|
|
74
|
+
"layout feedback", "make it better"
|
|
75
|
+
],
|
|
76
|
+
"file": "registry/skills/taste.md"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "impeccable",
|
|
80
|
+
"name": "Impeccable",
|
|
81
|
+
"author": "pbakaus",
|
|
82
|
+
"repo": "https://github.com/pbakaus/impeccable",
|
|
83
|
+
"stars": "28k",
|
|
84
|
+
"domain": "Design language",
|
|
85
|
+
"description": "Brand vs product thinking. Visual vocabulary and design systems",
|
|
86
|
+
"triggers": [
|
|
87
|
+
"design language", "design system", "brand", "visual vocabulary",
|
|
88
|
+
"typography system", "color system", "spacing scale",
|
|
89
|
+
"feel like a real product", "design tokens"
|
|
90
|
+
],
|
|
91
|
+
"file": "registry/skills/impeccable.md"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "ui-ux-pro-max",
|
|
95
|
+
"name": "UI UX Pro Max",
|
|
96
|
+
"author": "nextlevelbuilder",
|
|
97
|
+
"repo": "https://github.com/nextlevelbuilder/ui-ux-pro-max-skill",
|
|
98
|
+
"stars": "88k",
|
|
99
|
+
"domain": "UX patterns",
|
|
100
|
+
"description": "99 UX guidelines, component patterns, accessibility, cross-platform",
|
|
101
|
+
"triggers": [
|
|
102
|
+
"new page", "dashboard", "landing", "onboarding", "settings",
|
|
103
|
+
"component architecture", "form design", "navigation pattern",
|
|
104
|
+
"accessibility", "responsive layout", "user flow", "admin panel"
|
|
105
|
+
],
|
|
106
|
+
"file": "registry/skills/ui-ux-pro-max.md"
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Emil Design Engineering — Animation & Motion
|
|
2
|
+
> github.com/emilkowalski/skills · 2.8k stars
|
|
3
|
+
|
|
4
|
+
## Core Principle
|
|
5
|
+
Animation should be invisible. When done right, users don't notice it —
|
|
6
|
+
they notice the interface feels good.
|
|
7
|
+
|
|
8
|
+
## Timing
|
|
9
|
+
- Micro-interactions (hover, press, toggle): 150-250ms
|
|
10
|
+
- Standard transitions (modals, panels): 200-350ms
|
|
11
|
+
- Complex sequences (page transitions): 300-500ms
|
|
12
|
+
|
|
13
|
+
## Easing Rules
|
|
14
|
+
- Enter: ease-out (starts fast, decelerates in)
|
|
15
|
+
- Exit: ease-in (starts slow, accelerates out)
|
|
16
|
+
- Never ease-in for enter. Most common agent mistake.
|
|
17
|
+
|
|
18
|
+
## Animation Patterns
|
|
19
|
+
- Fade + rise: opacity 0 y:8 to opacity 1 y:0
|
|
20
|
+
- Scale for emphasis: scale(0.96) + opacity, never scale(0)
|
|
21
|
+
- Menus: transform-origin at trigger, scale + opacity from source
|
|
22
|
+
- Tooltips: delay on first, instant on subsequent
|
|
23
|
+
|
|
24
|
+
## Performance
|
|
25
|
+
- transform and opacity only. Never animate width, height, top, left.
|
|
26
|
+
- CSS for predetermined animations, JS for dynamic/interruptible
|
|
27
|
+
- Always respect prefers-reduced-motion
|
|
28
|
+
|
|
29
|
+
## Common Agent Mistakes
|
|
30
|
+
- ease-in on enter (should be ease-out)
|
|
31
|
+
- scale(0) as start (use scale(0.96))
|
|
32
|
+
- Missing transform-origin on menus
|
|
33
|
+
- All tooltips with same delay
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Impeccable — Design Language
|
|
2
|
+
> github.com/pbakaus/impeccable · 28k stars
|
|
3
|
+
|
|
4
|
+
## Brand vs Product Mode
|
|
5
|
+
Ask first:
|
|
6
|
+
- Brand: design IS the message. Bold choices, personality-forward.
|
|
7
|
+
- Product: design SERVES function. Restraint, patterns, invisible craft.
|
|
8
|
+
|
|
9
|
+
Most SaaS/tools = Product. Marketing/portfolio = Brand.
|
|
10
|
+
|
|
11
|
+
## Design Language Checklist
|
|
12
|
+
- Display face is characterful, used with restraint
|
|
13
|
+
- Type scale has clear hierarchy (display, heading, body, caption)
|
|
14
|
+
- Palette: 4-6 named values, one accent used sparingly
|
|
15
|
+
- Spacing: all values multiples of a base unit
|
|
16
|
+
- One element this design will be remembered by. Everything else is quiet.
|
|
17
|
+
|
|
18
|
+
## Three AI Defaults to Avoid
|
|
19
|
+
1. Warm cream + terracotta accent + high-contrast serif
|
|
20
|
+
2. Near-black + acid-green or vermilion accent
|
|
21
|
+
3. Dense newspaper columns + hairline rules + zero border-radius
|
|
22
|
+
|
|
23
|
+
If your design reads as one of these: it is a default, not a choice.
|
|
24
|
+
|
|
25
|
+
## Restraint Rule
|
|
26
|
+
Spend your boldness in one place.
|
|
27
|
+
Before finishing: remove one decorative decision.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Karpathy — Agent Behavior
|
|
2
|
+
> github.com/multica-ai/andrej-karpathy-skills · 174k stars
|
|
3
|
+
|
|
4
|
+
## The Four Principles
|
|
5
|
+
|
|
6
|
+
### 1. Think Before Coding
|
|
7
|
+
State assumptions explicitly before acting. If underspecified, ask one focused
|
|
8
|
+
question. Never silently guess and charge ahead.
|
|
9
|
+
|
|
10
|
+
Before writing code: restate the goal, name your assumptions, flag anything risky.
|
|
11
|
+
|
|
12
|
+
### 2. Simplicity First
|
|
13
|
+
Write minimum code that solves the problem. No speculative abstractions,
|
|
14
|
+
no future-proofing that wasn't asked for. 50 lines not 500.
|
|
15
|
+
|
|
16
|
+
### 3. Surgical Changes
|
|
17
|
+
Touch only what you must. Never refactor adjacent code that wasn't asked.
|
|
18
|
+
Never silently delete anything. Match existing codebase style.
|
|
19
|
+
|
|
20
|
+
If you see something broken nearby: mention it, don't fix it without asking.
|
|
21
|
+
|
|
22
|
+
### 4. Goal-Driven Execution
|
|
23
|
+
Define a clear success condition before starting. Loop until it's met.
|
|
24
|
+
Surface blockers explicitly — never work around them silently.
|
|
25
|
+
|
|
26
|
+
## Failure Modes This Prevents
|
|
27
|
+
- Confident implementation of the wrong thing
|
|
28
|
+
- 10-line fix turned into 200-line refactor
|
|
29
|
+
- Modifying files never asked to touch
|
|
30
|
+
- Declaring success before verifying the actual goal
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Ponytail — Code Minimalism
|
|
2
|
+
> github.com/DietrichGebert/ponytail · 50k stars
|
|
3
|
+
|
|
4
|
+
## Philosophy
|
|
5
|
+
You are a lazy senior developer. Lazy means efficient, not careless.
|
|
6
|
+
The best code is the code never written.
|
|
7
|
+
|
|
8
|
+
## The Ladder (run in order, stop at first match)
|
|
9
|
+
1. Does this need to exist? Skip it, say so in one line. (YAGNI)
|
|
10
|
+
2. Does stdlib do it? Use stdlib.
|
|
11
|
+
3. Does a native platform feature cover it? Use it.
|
|
12
|
+
4. Does an already-installed dep solve it? Never add a dep for 3 lines of code.
|
|
13
|
+
5. Can it be one line? One line.
|
|
14
|
+
6. Only then: write the minimum code that works.
|
|
15
|
+
|
|
16
|
+
## Rules
|
|
17
|
+
- No unrequested abstractions
|
|
18
|
+
- No boilerplate "for later"
|
|
19
|
+
- Deletion over addition
|
|
20
|
+
- Mark shortcuts: // ponytail: <ceiling>, upgrade when <trigger>
|
|
21
|
+
|
|
22
|
+
## Anti-patterns to Catch
|
|
23
|
+
- Reinvented standard library
|
|
24
|
+
- New dependency for a 3-line problem
|
|
25
|
+
- Speculative abstractions
|
|
26
|
+
- Config for a value that never changes
|
|
27
|
+
- Interface with exactly one implementation
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Superpowers — Planning & Multi-step Tasks
|
|
2
|
+
> github.com/obra/superpowers · 226k stars
|
|
3
|
+
|
|
4
|
+
## When to Use
|
|
5
|
+
Task has 3+ steps, spans multiple files, or is long enough to risk context loss.
|
|
6
|
+
|
|
7
|
+
## Plan First
|
|
8
|
+
Before any code, write a plan to .nave/plan.md:
|
|
9
|
+
|
|
10
|
+
Goal: {one sentence — what done looks like}
|
|
11
|
+
|
|
12
|
+
Steps:
|
|
13
|
+
1. {concrete step}
|
|
14
|
+
2. {concrete step}
|
|
15
|
+
|
|
16
|
+
Success criteria: {how to verify it's done}
|
|
17
|
+
Files to change: {known files — add as discovered}
|
|
18
|
+
|
|
19
|
+
Check off steps as completed. Plan survives /clear and context resets.
|
|
20
|
+
|
|
21
|
+
## Execution Rules
|
|
22
|
+
- Complete one step fully before moving to next
|
|
23
|
+
- Verify it works after each step
|
|
24
|
+
- Blocked: surface it explicitly, never work around silently
|
|
25
|
+
- Context reset: re-read plan file, continue from last checked step
|
|
26
|
+
|
|
27
|
+
## Done Checklist
|
|
28
|
+
- All steps checked off
|
|
29
|
+
- Tests pass
|
|
30
|
+
- No TODO comments unaddressed
|
|
31
|
+
- No files in broken intermediate state
|
|
32
|
+
- Diff scoped to what was asked
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Taste Skill — Visual Taste & Anti-Slop
|
|
2
|
+
> github.com/Leonxlnx/taste-skill · 45k stars
|
|
3
|
+
|
|
4
|
+
## Three Parameters
|
|
5
|
+
Set before designing:
|
|
6
|
+
|
|
7
|
+
- DESIGN_VARIANCE (1-10): 1=clean/conventional, 10=editorial/experimental
|
|
8
|
+
- MOTION_INTENSITY (1-10): 1=simple hover, 10=orchestrated/magnetic
|
|
9
|
+
- VISUAL_DENSITY (1-10): 1=airy/luxury, 10=dense/data-rich
|
|
10
|
+
|
|
11
|
+
Defaults: product=4,3,4 / marketing=7,5,2 / dashboard=2,2,8
|
|
12
|
+
|
|
13
|
+
## Anti-Slop Checklist
|
|
14
|
+
Remove if unintentional:
|
|
15
|
+
- Pulsing indicators on everything
|
|
16
|
+
- Blur-everywhere entrance animations
|
|
17
|
+
- Hover-scale on every interactive element
|
|
18
|
+
- Bouncy springs on utility actions
|
|
19
|
+
- Uniform fade-ins on everything
|
|
20
|
+
- Card shadows too heavy and uniform
|
|
21
|
+
- Every section has its own background color
|
|
22
|
+
- Gradient text on headings as default
|
|
23
|
+
|
|
24
|
+
## Typography
|
|
25
|
+
- Display: line-height 1.1-1.2, letter-spacing -0.02em
|
|
26
|
+
- Body: line-height 1.5-1.6, default letter-spacing
|
|
27
|
+
|
|
28
|
+
## Spacing
|
|
29
|
+
- Base unit 8px or 4px, all values are multiples
|
|
30
|
+
- Never mix rhythms within a component
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# UI UX Pro Max — Patterns & Accessibility
|
|
2
|
+
> github.com/nextlevelbuilder/ui-ux-pro-max-skill · 88k stars
|
|
3
|
+
|
|
4
|
+
## Page-Level Rules
|
|
5
|
+
- One primary action per view
|
|
6
|
+
- Above the fold: answer "what is this and what do I do"
|
|
7
|
+
- Progressive disclosure: hide complexity until needed
|
|
8
|
+
|
|
9
|
+
## Navigation
|
|
10
|
+
- Top nav: broad multi-section products
|
|
11
|
+
- Side nav: complex tools, dashboards, admin
|
|
12
|
+
- Bottom nav: mobile, 3-5 destinations
|
|
13
|
+
- Tabs: sibling views at same hierarchy level
|
|
14
|
+
- Never mix patterns at the same level
|
|
15
|
+
|
|
16
|
+
## Forms
|
|
17
|
+
- One column (two only for truly paired fields like first/last name)
|
|
18
|
+
- Labels above fields, never placeholder-only
|
|
19
|
+
- Inline validation on blur, not every keystroke
|
|
20
|
+
- Error messages specific: "Enter a valid email" not "Invalid input"
|
|
21
|
+
|
|
22
|
+
## Buttons
|
|
23
|
+
- One primary CTA per view
|
|
24
|
+
- Label = verb + noun ("Save changes" not "Submit")
|
|
25
|
+
- Min touch target: 44px web / 44pt iOS / 48dp Android
|
|
26
|
+
|
|
27
|
+
## Modals
|
|
28
|
+
- Use for: confirmations, focused tasks
|
|
29
|
+
- Avoid for: complex multi-step flows, errors that could be inline
|
|
30
|
+
- Always: close button + Escape key + focus trap
|
|
31
|
+
|
|
32
|
+
## Accessibility Non-negotiables
|
|
33
|
+
- Color alone never conveys meaning
|
|
34
|
+
- Visible focus indicators on all interactive elements
|
|
35
|
+
- aria-label on icon-only buttons
|
|
36
|
+
- Min contrast: 4.5:1 body, 3:1 large text
|