davenov-cc 1.0.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 +106 -0
- package/bin/cli.js +16 -0
- package/commands/davenov:cc:interview.md +12 -0
- package/commands/davenov:cc:rule.md +275 -0
- package/commands/davenov:cc:update.md +21 -0
- package/install.js +144 -0
- package/package.json +35 -0
- package/skills/davenov:cc:expert-build-nostr/SKILL.md +183 -0
- package/skills/davenov:cc:expert-build-nostr/references/custom-protocols.md +390 -0
- package/skills/davenov:cc:expert-build-nostr/references/data-exchange-patterns.md +484 -0
- package/skills/davenov:cc:expert-build-nostr/references/encryption-nip44.md +258 -0
- package/skills/davenov:cc:expert-build-nostr/references/event-kinds.md +239 -0
- package/skills/davenov:cc:expert-build-nostr/references/key-management.md +300 -0
- package/skills/davenov:cc:expert-build-nostr/references/nips-overview.md +177 -0
- package/skills/davenov:cc:expert-build-nostr/references/nostr-tools-api.md +351 -0
- package/skills/davenov:cc:expert-build-nostr/references/protocol-fundamentals.md +161 -0
- package/skills/davenov:cc:expert-build-nostr/references/pubsub-patterns.md +402 -0
- package/skills/davenov:cc:expert-build-nostr/references/relay-management.md +352 -0
- package/skills/davenov:cc:expert-build-nostr/references/scaling-considerations.md +413 -0
- package/skills/davenov:cc:expert-build-nostr/templates/basic-client.ts +187 -0
- package/skills/davenov:cc:expert-build-nostr/templates/custom-event-schema.ts +474 -0
- package/skills/davenov:cc:expert-build-nostr/templates/pubsub-handler.ts +395 -0
- package/skills/davenov:cc:expert-build-nostr/workflows/add-encryption.md +246 -0
- package/skills/davenov:cc:expert-build-nostr/workflows/custom-event-kinds.md +266 -0
- package/skills/davenov:cc:expert-build-nostr/workflows/debug-nostr.md +313 -0
- package/skills/davenov:cc:expert-build-nostr/workflows/implement-pubsub.md +234 -0
- package/skills/davenov:cc:expert-build-nostr/workflows/manage-relays.md +295 -0
- package/skills/davenov:cc:expert-build-nostr/workflows/setup-client.md +141 -0
- package/skills/davenov:cc:expert-convex-nextjs/SKILL.md +140 -0
- package/skills/davenov:cc:expert-convex-nextjs/references/debugging.md +46 -0
- package/skills/davenov:cc:expert-convex-nextjs/references/function-patterns.md +118 -0
- package/skills/davenov:cc:expert-convex-nextjs/references/schema-design.md +155 -0
- package/skills/davenov:cc:expert-convex-nextjs/references/ssr-auth.md +118 -0
- package/skills/davenov:cc:expert-evolu-nextjs/SKILL.md +190 -0
- package/skills/davenov:cc:expert-evolu-nextjs/references/installation.md +38 -0
- package/skills/davenov:cc:expert-evolu-nextjs/references/instance-setup.md +92 -0
- package/skills/davenov:cc:expert-evolu-nextjs/references/mutations.md +101 -0
- package/skills/davenov:cc:expert-evolu-nextjs/references/nextjs-integration.md +119 -0
- package/skills/davenov:cc:expert-evolu-nextjs/references/owner-management.md +78 -0
- package/skills/davenov:cc:expert-evolu-nextjs/references/queries.md +121 -0
- package/skills/davenov:cc:expert-evolu-nextjs/references/schema-definition.md +64 -0
- package/skills/davenov:cc:expert-evolu-nextjs/references/troubleshooting.md +81 -0
- package/skills/davenov:cc:expert-evolu-nextjs/references/validation.md +81 -0
- package/skills/davenov:cc:expert-nextjs-16/SKILL.md +220 -0
- package/skills/davenov:cc:expert-nextjs-16/references/architecture.md +225 -0
- package/skills/davenov:cc:expert-nextjs-16/references/authentication.md +429 -0
- package/skills/davenov:cc:expert-nextjs-16/references/cache-components.md +350 -0
- package/skills/davenov:cc:expert-nextjs-16/references/data-fetching.md +344 -0
- package/skills/davenov:cc:expert-nextjs-16/references/deployment-docker.md +308 -0
- package/skills/davenov:cc:expert-nextjs-16/references/deployment-vercel.md +248 -0
- package/skills/davenov:cc:expert-nextjs-16/references/devtools-mcp.md +275 -0
- package/skills/davenov:cc:expert-nextjs-16/references/migration-from-15.md +288 -0
- package/skills/davenov:cc:expert-nextjs-16/references/performance.md +397 -0
- package/skills/davenov:cc:expert-nextjs-16/references/proxy.md +304 -0
- package/skills/davenov:cc:expert-nextjs-16/references/security.md +316 -0
- package/skills/davenov:cc:expert-nextjs-16/references/server-actions.md +429 -0
- package/skills/davenov:cc:expert-nextjs-16/references/server-client-components.md +328 -0
- package/skills/davenov:cc:expert-nextjs-16/references/testing.md +418 -0
- package/skills/davenov:cc:expert-nextjs-16/workflows/add-feature.md +361 -0
- package/skills/davenov:cc:expert-nextjs-16/workflows/build-new-app.md +266 -0
- package/skills/davenov:cc:expert-nextjs-16/workflows/debug-app.md +273 -0
- package/skills/davenov:cc:expert-nextjs-16/workflows/migrate-from-15.md +352 -0
- package/skills/davenov:cc:expert-nextjs-16/workflows/optimize-performance.md +357 -0
- package/skills/davenov:cc:expert-nextjs-16/workflows/ship-app.md +355 -0
- package/skills/davenov:cc:expert-nextjs-16/workflows/write-tests.md +397 -0
package/README.md
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Claude Code Customizations Collection
|
|
2
|
+
|
|
3
|
+
A personal collection of Claude Code customizations including skills and slash commands.
|
|
4
|
+
|
|
5
|
+
## Contents
|
|
6
|
+
|
|
7
|
+
### Commands (`commands/`)
|
|
8
|
+
|
|
9
|
+
Slash commands that can be invoked with `/<command-name>`:
|
|
10
|
+
|
|
11
|
+
- **davenov:cc:interview** - Interview mode for expanding specifications
|
|
12
|
+
- **davenov:cc:rule** - Create or modify Claude Code rules
|
|
13
|
+
- **davenov:cc:update** - Update to latest version and sync to ~/.claude/
|
|
14
|
+
|
|
15
|
+
### Skills (`skills/`)
|
|
16
|
+
|
|
17
|
+
Skills provide Claude with domain-specific knowledge and workflows:
|
|
18
|
+
|
|
19
|
+
- **davenov:cc:expert-convex-nextjs** - Building full-stack apps with Convex backend and Next.js frontend
|
|
20
|
+
- **davenov:cc:expert-evolu-nextjs** - Local-first apps with Evolu and Next.js (offline-first, e2e encryption)
|
|
21
|
+
- **davenov:cc:expert-nextjs-16** - Next.js 16 patterns including Cache Components, Server Actions, and more
|
|
22
|
+
- **davenov:cc:expert-build-nostr** - Building Nostr applications for decentralized data exchange
|
|
23
|
+
|
|
24
|
+
## Installation
|
|
25
|
+
|
|
26
|
+
Requires Node.js (no additional dependencies).
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npx davenov-cc
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
That's it! The installer will copy all commands and skills to `~/.claude/`.
|
|
33
|
+
|
|
34
|
+
## Updating
|
|
35
|
+
|
|
36
|
+
Update from any directory using the slash command:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
/davenov:cc:update
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Or run the npx command directly:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npx davenov-cc@latest
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
The `@latest` tag ensures you get the newest version.
|
|
49
|
+
|
|
50
|
+
### Behavior with existing files
|
|
51
|
+
|
|
52
|
+
- **Merges directories** - Existing directories are preserved, not deleted
|
|
53
|
+
- **Overwrites matching files** - Files with the same path get overwritten
|
|
54
|
+
- **Preserves unrelated files** - Your other customizations in `~/.claude/` remain untouched
|
|
55
|
+
|
|
56
|
+
> **Note:** If you delete a file from this repo, it won't be removed from `~/.claude/` on reinstall. Manually delete unwanted files or remove the entire `~/.claude/commands/` or `~/.claude/skills/` directory before reinstalling for a clean slate.
|
|
57
|
+
|
|
58
|
+
## Structure
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
.
|
|
62
|
+
├── bin/
|
|
63
|
+
│ └── cli.js # npx entry point
|
|
64
|
+
├── commands/ # Slash commands (*.md files)
|
|
65
|
+
│ ├── davenov:cc:interview.md
|
|
66
|
+
│ ├── davenov:cc:rule.md
|
|
67
|
+
│ └── davenov:cc:update.md
|
|
68
|
+
├── skills/ # Skills with references and workflows
|
|
69
|
+
│ └── <skill-name>/
|
|
70
|
+
│ ├── SKILL.md # Main skill definition
|
|
71
|
+
│ ├── references/ # Reference documentation
|
|
72
|
+
│ ├── workflows/ # Step-by-step workflows
|
|
73
|
+
│ └── templates/ # Code templates (optional)
|
|
74
|
+
├── package.json # npm package configuration
|
|
75
|
+
├── install.js # Installation script
|
|
76
|
+
└── README.md
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Adding new customizations
|
|
80
|
+
|
|
81
|
+
### Adding a command
|
|
82
|
+
|
|
83
|
+
Create a new `.md` file in `commands/`:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
commands/my-command.md
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Adding a skill
|
|
90
|
+
|
|
91
|
+
Create a new directory in `skills/` with at least a `SKILL.md`:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
skills/my-skill/
|
|
95
|
+
├── SKILL.md
|
|
96
|
+
├── references/
|
|
97
|
+
│ └── ...
|
|
98
|
+
└── workflows/
|
|
99
|
+
└── ...
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
After adding new customizations, run `node install.js` again to install them.
|
|
103
|
+
|
|
104
|
+
## Acknowledgments
|
|
105
|
+
|
|
106
|
+
Most resources in this collection were created with the help of [taches-cc-resources](https://github.com/glittercowboy/taches-cc-resources), an excellent toolkit for building Claude Code customizations.
|
package/bin/cli.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const path = require('path');
|
|
4
|
+
const { spawn } = require('child_process');
|
|
5
|
+
|
|
6
|
+
// Run install.js from the package root with --auto-override
|
|
7
|
+
const installScript = path.join(__dirname, '..', 'install.js');
|
|
8
|
+
|
|
9
|
+
const child = spawn(process.execPath, [installScript, '--auto-override'], {
|
|
10
|
+
stdio: 'inherit',
|
|
11
|
+
cwd: path.join(__dirname, '..')
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
child.on('close', (code) => {
|
|
15
|
+
process.exit(code);
|
|
16
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
argument-hint: [spec-file]
|
|
3
|
+
description: Interview me to expand the spec
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Here's the current spec:
|
|
7
|
+
|
|
8
|
+
@$ARGUMENTS
|
|
9
|
+
|
|
10
|
+
Interview me in detail using the AskUserQuestion tool about literally anything: technical implementation, UI & UX, concerns, tradeoffs, etc. but make sure the questions are not obvious.
|
|
11
|
+
|
|
12
|
+
Be very in-depth and continue interviewing me until it's complete, then write the spec back to $ARGUMENTS.
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rule
|
|
3
|
+
description: Create or modify Claude Code rules with best practices guidance
|
|
4
|
+
argument-hint: <description of the rule>
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Write
|
|
8
|
+
- Glob
|
|
9
|
+
- Bash
|
|
10
|
+
- AskUserQuestion
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<objective>
|
|
14
|
+
Create or modify Claude Code rule files (.md) that follow best practices for the `.claude/rules/` system.
|
|
15
|
+
|
|
16
|
+
Rules provide focused, well-organized instructions that Claude automatically loads as project memory.
|
|
17
|
+
</objective>
|
|
18
|
+
|
|
19
|
+
<context>
|
|
20
|
+
Before proceeding, gather context about existing rules:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Check for existing user-level rules
|
|
24
|
+
ls -la ~/.claude/rules/ 2>/dev/null || echo "No user-level rules directory"
|
|
25
|
+
|
|
26
|
+
# Check for existing project-level rules (if in a project)
|
|
27
|
+
ls -la .claude/rules/ 2>/dev/null || echo "No project-level rules directory"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Read any relevant existing rules to understand current patterns.
|
|
31
|
+
</context>
|
|
32
|
+
|
|
33
|
+
<process>
|
|
34
|
+
|
|
35
|
+
<step name="validate_input">
|
|
36
|
+
**Check if description was provided:**
|
|
37
|
+
|
|
38
|
+
- **With arguments ($ARGUMENTS):** Use as the rule description/intent
|
|
39
|
+
- **Without arguments:** Use AskUserQuestion to get the rule description:
|
|
40
|
+
- header: "Rule Intent"
|
|
41
|
+
- question: "What behavior or guideline should this rule enforce? Describe what you want Claude to do or avoid."
|
|
42
|
+
- options:
|
|
43
|
+
- "Code style" — formatting, naming conventions, patterns
|
|
44
|
+
- "Workflow" — processes, git conventions, testing requirements
|
|
45
|
+
- "Architecture" — file structure, dependencies, design patterns
|
|
46
|
+
</step>
|
|
47
|
+
|
|
48
|
+
<step name="determine_scope">
|
|
49
|
+
Use AskUserQuestion to determine rule scope:
|
|
50
|
+
|
|
51
|
+
- header: "Rule Scope"
|
|
52
|
+
- question: "Where should this rule be saved?"
|
|
53
|
+
- options:
|
|
54
|
+
- "User-level (~/.claude/rules/)" — applies to all your projects
|
|
55
|
+
- "Project-level (.claude/rules/)" — applies only to current project
|
|
56
|
+
</step>
|
|
57
|
+
|
|
58
|
+
<step name="determine_path_specificity">
|
|
59
|
+
Use AskUserQuestion to determine if rule should be path-specific:
|
|
60
|
+
|
|
61
|
+
- header: "Path Scope"
|
|
62
|
+
- question: "Should this rule apply to all files or only specific file types/paths?"
|
|
63
|
+
- options:
|
|
64
|
+
- "All files (Recommended)" — rule loads unconditionally
|
|
65
|
+
- "Specific paths" — rule only loads when working with matching files
|
|
66
|
+
</step>
|
|
67
|
+
|
|
68
|
+
<step name="gather_path_patterns" condition="if path-specific selected">
|
|
69
|
+
Use AskUserQuestion to gather path patterns:
|
|
70
|
+
|
|
71
|
+
- header: "File Patterns"
|
|
72
|
+
- question: "What file patterns should this rule apply to? (e.g., 'src/**/*.ts', '**/*.test.js')"
|
|
73
|
+
- options:
|
|
74
|
+
- "TypeScript/JavaScript" — src/**/*.{ts,tsx,js,jsx}
|
|
75
|
+
- "Tests" — **/*.{test,spec}.{ts,tsx,js,jsx}
|
|
76
|
+
- "API routes" — src/api/**/*.ts
|
|
77
|
+
- multiSelect: true
|
|
78
|
+
|
|
79
|
+
If user selects "Other", validate their custom glob pattern.
|
|
80
|
+
</step>
|
|
81
|
+
|
|
82
|
+
<step name="analyze_and_clarify">
|
|
83
|
+
Analyze the rule description for:
|
|
84
|
+
|
|
85
|
+
1. **Clarity**: Is the intent unambiguous?
|
|
86
|
+
2. **Actionability**: Can Claude act on this?
|
|
87
|
+
3. **Specificity**: Is it precise enough to follow consistently?
|
|
88
|
+
4. **Conflict potential**: Could it contradict common patterns?
|
|
89
|
+
|
|
90
|
+
If any issues found, use AskUserQuestion to clarify:
|
|
91
|
+
|
|
92
|
+
- header: "Clarification"
|
|
93
|
+
- question: "[Specific question about ambiguity]"
|
|
94
|
+
- options: [Context-appropriate options]
|
|
95
|
+
|
|
96
|
+
Common clarifications needed:
|
|
97
|
+
- "Always" vs "prefer" vs "when appropriate"
|
|
98
|
+
- Specific file types or directories
|
|
99
|
+
- Exception cases
|
|
100
|
+
- Priority relative to other guidelines
|
|
101
|
+
</step>
|
|
102
|
+
|
|
103
|
+
<step name="determine_organization">
|
|
104
|
+
Use AskUserQuestion to determine file organization:
|
|
105
|
+
|
|
106
|
+
- header: "Organization"
|
|
107
|
+
- question: "How should this rule be organized?"
|
|
108
|
+
- options:
|
|
109
|
+
- "New file (Recommended)" — create dedicated rule file
|
|
110
|
+
- "Add to existing" — append to an existing rule file
|
|
111
|
+
- "Subdirectory" — organize under a category folder
|
|
112
|
+
</step>
|
|
113
|
+
|
|
114
|
+
<step name="generate_filename">
|
|
115
|
+
Generate a descriptive filename:
|
|
116
|
+
|
|
117
|
+
- Use lowercase with hyphens
|
|
118
|
+
- Be descriptive but concise (e.g., `code-style.md`, `testing-conventions.md`)
|
|
119
|
+
- Match the rule's topic
|
|
120
|
+
|
|
121
|
+
If subdirectory selected, determine category:
|
|
122
|
+
- `frontend/` — React, CSS, UI patterns
|
|
123
|
+
- `backend/` — API, database, server patterns
|
|
124
|
+
- `tooling/` — build, CI/CD, scripts
|
|
125
|
+
- `general/` — cross-cutting concerns
|
|
126
|
+
</step>
|
|
127
|
+
|
|
128
|
+
<step name="compose_rule">
|
|
129
|
+
Compose the rule following best practices:
|
|
130
|
+
|
|
131
|
+
**Structure:**
|
|
132
|
+
```markdown
|
|
133
|
+
---
|
|
134
|
+
paths:
|
|
135
|
+
- "pattern/**/*.ext" # Only if path-specific
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
# [Rule Title]
|
|
139
|
+
|
|
140
|
+
[Brief context - 1-2 sentences explaining why this rule exists]
|
|
141
|
+
|
|
142
|
+
## Guidelines
|
|
143
|
+
|
|
144
|
+
- [Specific, actionable guideline]
|
|
145
|
+
- [Another guideline]
|
|
146
|
+
|
|
147
|
+
## Examples
|
|
148
|
+
|
|
149
|
+
### Do
|
|
150
|
+
[Good example with explanation]
|
|
151
|
+
|
|
152
|
+
### Don't
|
|
153
|
+
[Bad example with explanation]
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**Best Practices to Follow:**
|
|
157
|
+
1. **Be specific**: "Use camelCase for variables" not "follow naming conventions"
|
|
158
|
+
2. **Be actionable**: Each point should be something Claude can do
|
|
159
|
+
3. **Provide examples**: Show what good and bad look like
|
|
160
|
+
4. **Explain rationale**: Help Claude understand *why*
|
|
161
|
+
5. **Keep focused**: One topic per file
|
|
162
|
+
6. **Use imperative mood**: "Use X" not "You should use X"
|
|
163
|
+
7. **Avoid redundancy**: Don't repeat what's in other rules
|
|
164
|
+
</step>
|
|
165
|
+
|
|
166
|
+
<step name="validate_rule">
|
|
167
|
+
Before writing, validate the rule:
|
|
168
|
+
|
|
169
|
+
1. **Check for conflicts** with existing rules:
|
|
170
|
+
```bash
|
|
171
|
+
grep -r "[key terms]" ~/.claude/rules/ .claude/rules/ 2>/dev/null
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
2. **Verify clarity**: Each guideline should pass the "can Claude act on this?" test
|
|
175
|
+
|
|
176
|
+
3. **Check length**: Rules should be scannable, not walls of text
|
|
177
|
+
|
|
178
|
+
If validation finds issues, refine the rule content.
|
|
179
|
+
</step>
|
|
180
|
+
|
|
181
|
+
<step name="create_directories">
|
|
182
|
+
Ensure the target directory exists:
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# For user-level rules
|
|
186
|
+
mkdir -p ~/.claude/rules/
|
|
187
|
+
|
|
188
|
+
# For project-level rules
|
|
189
|
+
mkdir -p .claude/rules/
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
If using subdirectory organization:
|
|
193
|
+
```bash
|
|
194
|
+
mkdir -p [target-path]/[subdirectory]/
|
|
195
|
+
```
|
|
196
|
+
</step>
|
|
197
|
+
|
|
198
|
+
<step name="write_rule">
|
|
199
|
+
Write the rule file to the determined path:
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
# Construct full path based on scope and organization decisions
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Write the composed rule content to the file.
|
|
206
|
+
</step>
|
|
207
|
+
|
|
208
|
+
<step name="confirm">
|
|
209
|
+
Display confirmation:
|
|
210
|
+
|
|
211
|
+
```
|
|
212
|
+
Rule created: [full path]
|
|
213
|
+
|
|
214
|
+
[Rule title]
|
|
215
|
+
Scope: [user-level | project-level]
|
|
216
|
+
Applies to: [all files | specific paths]
|
|
217
|
+
|
|
218
|
+
Preview:
|
|
219
|
+
---
|
|
220
|
+
[First few lines of the rule]
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
The rule will be automatically loaded in future Claude sessions.
|
|
224
|
+
```
|
|
225
|
+
</step>
|
|
226
|
+
|
|
227
|
+
</process>
|
|
228
|
+
|
|
229
|
+
<best_practices>
|
|
230
|
+
## Rule Writing Best Practices
|
|
231
|
+
|
|
232
|
+
**DO:**
|
|
233
|
+
- Keep rules focused on one topic
|
|
234
|
+
- Use descriptive filenames
|
|
235
|
+
- Provide concrete examples
|
|
236
|
+
- Explain the "why" behind guidelines
|
|
237
|
+
- Use path-specific rules only when truly needed
|
|
238
|
+
- Test that guidelines are actionable
|
|
239
|
+
|
|
240
|
+
**DON'T:**
|
|
241
|
+
- Create overly broad "catch-all" rules
|
|
242
|
+
- Duplicate guidelines across multiple files
|
|
243
|
+
- Use vague language ("be careful", "consider")
|
|
244
|
+
- Add path frontmatter unless genuinely path-specific
|
|
245
|
+
- Create rules for one-off preferences
|
|
246
|
+
- Include time-sensitive information
|
|
247
|
+
</best_practices>
|
|
248
|
+
|
|
249
|
+
<validation_questions>
|
|
250
|
+
When reviewing a rule, verify:
|
|
251
|
+
|
|
252
|
+
1. **Necessity**: Does this rule add value not covered elsewhere?
|
|
253
|
+
2. **Clarity**: Could another developer understand and follow this?
|
|
254
|
+
3. **Consistency**: Does it align with existing rules?
|
|
255
|
+
4. **Scope**: Is the path specificity appropriate?
|
|
256
|
+
5. **Actionability**: Can Claude act on every guideline?
|
|
257
|
+
6. **Examples**: Are good/bad examples clear?
|
|
258
|
+
</validation_questions>
|
|
259
|
+
|
|
260
|
+
<output>
|
|
261
|
+
- Rule file at determined path
|
|
262
|
+
- Confirmation with preview
|
|
263
|
+
</output>
|
|
264
|
+
|
|
265
|
+
<success_criteria>
|
|
266
|
+
- [ ] Rule description obtained and understood
|
|
267
|
+
- [ ] Scope (user vs project) determined
|
|
268
|
+
- [ ] Path specificity determined (if applicable)
|
|
269
|
+
- [ ] Ambiguities clarified through questions
|
|
270
|
+
- [ ] Rule follows best practices structure
|
|
271
|
+
- [ ] No conflicts with existing rules
|
|
272
|
+
- [ ] Directory structure created
|
|
273
|
+
- [ ] Rule file written successfully
|
|
274
|
+
- [ ] Confirmation displayed
|
|
275
|
+
</success_criteria>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Update davenov-cc-collection to latest version and sync to ~/.claude/
|
|
3
|
+
allowed-tools:
|
|
4
|
+
- Bash
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Update davenov-cc-collection
|
|
8
|
+
|
|
9
|
+
Download the latest version from npm and install to ~/.claude/.
|
|
10
|
+
|
|
11
|
+
## Instructions
|
|
12
|
+
|
|
13
|
+
Run the npx command to fetch and install the latest version:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx davenov-cc@latest
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The `@latest` tag ensures npm fetches the newest version, bypassing any cached versions.
|
|
20
|
+
|
|
21
|
+
Report the results to the user.
|
package/install.js
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const path = require("path");
|
|
5
|
+
const os = require("os");
|
|
6
|
+
const readline = require("readline");
|
|
7
|
+
|
|
8
|
+
const CLAUDE_DIR = path.join(os.homedir(), ".claude");
|
|
9
|
+
const SOURCE_DIR = __dirname;
|
|
10
|
+
|
|
11
|
+
// Parse command line arguments
|
|
12
|
+
const args = process.argv.slice(2);
|
|
13
|
+
const AUTO_OVERRIDE = args.includes("--auto-override");
|
|
14
|
+
|
|
15
|
+
// Directories to install
|
|
16
|
+
const CUSTOMIZATION_DIRS = ["commands", "skills"];
|
|
17
|
+
|
|
18
|
+
function createReadlineInterface() {
|
|
19
|
+
return readline.createInterface({
|
|
20
|
+
input: process.stdin,
|
|
21
|
+
output: process.stdout,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async function prompt(rl, question) {
|
|
26
|
+
return new Promise((resolve) => {
|
|
27
|
+
rl.question(question, resolve);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function copyRecursive(src, dest) {
|
|
32
|
+
const stats = fs.statSync(src);
|
|
33
|
+
|
|
34
|
+
if (stats.isDirectory()) {
|
|
35
|
+
if (!fs.existsSync(dest)) {
|
|
36
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const entries = fs.readdirSync(src);
|
|
40
|
+
for (const entry of entries) {
|
|
41
|
+
copyRecursive(path.join(src, entry), path.join(dest, entry));
|
|
42
|
+
}
|
|
43
|
+
} else {
|
|
44
|
+
fs.copyFileSync(src, dest);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function countFiles(dir) {
|
|
49
|
+
let count = 0;
|
|
50
|
+
if (!fs.existsSync(dir)) return 0;
|
|
51
|
+
|
|
52
|
+
const entries = fs.readdirSync(dir);
|
|
53
|
+
for (const entry of entries) {
|
|
54
|
+
const fullPath = path.join(dir, entry);
|
|
55
|
+
const stats = fs.statSync(fullPath);
|
|
56
|
+
if (stats.isDirectory()) {
|
|
57
|
+
count += countFiles(fullPath);
|
|
58
|
+
} else {
|
|
59
|
+
count++;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return count;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
async function main() {
|
|
66
|
+
console.log("\n📦 Claude Code Customizations Installer\n");
|
|
67
|
+
console.log(`Source: ${SOURCE_DIR}`);
|
|
68
|
+
console.log(`Target: ${CLAUDE_DIR}\n`);
|
|
69
|
+
|
|
70
|
+
// Check what we have to install
|
|
71
|
+
const available = CUSTOMIZATION_DIRS.filter((dir) =>
|
|
72
|
+
fs.existsSync(path.join(SOURCE_DIR, dir))
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
if (available.length === 0) {
|
|
76
|
+
console.log("No customizations found to install.");
|
|
77
|
+
process.exit(0);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
console.log("Available customizations:");
|
|
81
|
+
for (const dir of available) {
|
|
82
|
+
const srcPath = path.join(SOURCE_DIR, dir);
|
|
83
|
+
const fileCount = countFiles(srcPath);
|
|
84
|
+
console.log(` - ${dir}/ (${fileCount} files)`);
|
|
85
|
+
}
|
|
86
|
+
console.log();
|
|
87
|
+
|
|
88
|
+
// Check for existing files
|
|
89
|
+
const existing = available.filter((dir) =>
|
|
90
|
+
fs.existsSync(path.join(CLAUDE_DIR, dir))
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
const rl = createReadlineInterface();
|
|
94
|
+
|
|
95
|
+
if (existing.length > 0) {
|
|
96
|
+
console.log("⚠️ The following directories already exist:");
|
|
97
|
+
for (const dir of existing) {
|
|
98
|
+
console.log(` - ${path.join(CLAUDE_DIR, dir)}`);
|
|
99
|
+
}
|
|
100
|
+
console.log();
|
|
101
|
+
|
|
102
|
+
if (AUTO_OVERRIDE) {
|
|
103
|
+
console.log("Auto-override enabled, proceeding...");
|
|
104
|
+
} else {
|
|
105
|
+
const answer = await prompt(
|
|
106
|
+
rl,
|
|
107
|
+
"Do you want to overwrite existing files? (y/N): "
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
if (answer.toLowerCase() !== "y") {
|
|
111
|
+
console.log("\nInstallation cancelled.");
|
|
112
|
+
rl.close();
|
|
113
|
+
process.exit(0);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Ensure .claude directory exists
|
|
119
|
+
if (!fs.existsSync(CLAUDE_DIR)) {
|
|
120
|
+
fs.mkdirSync(CLAUDE_DIR, { recursive: true });
|
|
121
|
+
console.log(`Created ${CLAUDE_DIR}`);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Install each directory
|
|
125
|
+
console.log("\nInstalling...\n");
|
|
126
|
+
|
|
127
|
+
for (const dir of available) {
|
|
128
|
+
const srcPath = path.join(SOURCE_DIR, dir);
|
|
129
|
+
const destPath = path.join(CLAUDE_DIR, dir);
|
|
130
|
+
|
|
131
|
+
console.log(` ${dir}/`);
|
|
132
|
+
copyRecursive(srcPath, destPath);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
console.log("\n✅ Installation complete!\n");
|
|
136
|
+
console.log("Your customizations are now available in Claude Code.");
|
|
137
|
+
|
|
138
|
+
rl.close();
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
main().catch((err) => {
|
|
142
|
+
console.error("Error:", err.message);
|
|
143
|
+
process.exit(1);
|
|
144
|
+
});
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "davenov-cc",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Claude Code customizations - skills and slash commands for enhanced AI-assisted development",
|
|
5
|
+
"bin": {
|
|
6
|
+
"davenov-cc": "./bin/cli.js"
|
|
7
|
+
},
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/kaladivo/davenov-cc-collection.git"
|
|
11
|
+
},
|
|
12
|
+
"keywords": [
|
|
13
|
+
"claude",
|
|
14
|
+
"claude-code",
|
|
15
|
+
"ai",
|
|
16
|
+
"skills",
|
|
17
|
+
"commands",
|
|
18
|
+
"customizations"
|
|
19
|
+
],
|
|
20
|
+
"author": "kaladivo",
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"bugs": {
|
|
23
|
+
"url": "https://github.com/kaladivo/davenov-cc-collection/issues"
|
|
24
|
+
},
|
|
25
|
+
"homepage": "https://github.com/kaladivo/davenov-cc-collection#readme",
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=16.0.0"
|
|
28
|
+
},
|
|
29
|
+
"files": [
|
|
30
|
+
"bin/",
|
|
31
|
+
"commands/",
|
|
32
|
+
"skills/",
|
|
33
|
+
"install.js"
|
|
34
|
+
]
|
|
35
|
+
}
|