claude-setup 1.1.3 → 1.1.4

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/package.json CHANGED
@@ -1,49 +1,49 @@
1
- {
2
- "name": "claude-setup",
3
- "version": "1.1.3",
4
- "description": "Setup layer for Claude Code — reads your project, writes command files, Claude Code does the rest",
5
- "type": "module",
6
- "bin": {
7
- "claude-setup": "./dist/index.js"
8
- },
9
- "scripts": {
10
- "build": "tsc",
11
- "dev": "tsc --watch",
12
- "prepublishOnly": "tsc"
13
- },
14
- "files": [
15
- "dist",
16
- "templates"
17
- ],
18
- "keywords": [
19
- "claude",
20
- "claude-code",
21
- "cli",
22
- "developer-tools",
23
- "ai",
24
- "anthropic",
25
- "automation",
26
- "scaffolding",
27
- "project-setup",
28
- "mcp",
29
- "npx"
30
- ],
31
- "author": "AbdoKnbGit",
32
- "license": "MIT",
33
- "repository": {
34
- "type": "git",
35
- "url": "git+https://github.com/AbdoKnbGit/claude-setup.git"
36
- },
37
- "homepage": "https://github.com/AbdoKnbGit/claude-setup#readme",
38
- "bugs": {
39
- "url": "https://github.com/AbdoKnbGit/claude-setup/issues"
40
- },
41
- "dependencies": {
42
- "commander": "^12.1.0",
43
- "glob": "^11.0.0"
44
- },
45
- "devDependencies": {
46
- "@types/node": "^22.0.0",
47
- "typescript": "^5.6.0"
48
- }
49
- }
1
+ {
2
+ "name": "claude-setup",
3
+ "version": "1.1.4",
4
+ "description": "Setup layer for Claude Code — reads your project, writes command files, Claude Code does the rest",
5
+ "type": "module",
6
+ "bin": {
7
+ "claude-setup": "./dist/index.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "dev": "tsc --watch",
12
+ "prepublishOnly": "tsc"
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "templates"
17
+ ],
18
+ "keywords": [
19
+ "claude",
20
+ "claude-code",
21
+ "cli",
22
+ "developer-tools",
23
+ "ai",
24
+ "anthropic",
25
+ "automation",
26
+ "scaffolding",
27
+ "project-setup",
28
+ "mcp",
29
+ "npx"
30
+ ],
31
+ "author": "AbdoKnbGit",
32
+ "license": "MIT",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "git+https://github.com/AbdoKnbGit/claude-setup.git"
36
+ },
37
+ "homepage": "https://github.com/AbdoKnbGit/claude-setup#readme",
38
+ "bugs": {
39
+ "url": "https://github.com/AbdoKnbGit/claude-setup/issues"
40
+ },
41
+ "dependencies": {
42
+ "commander": "^12.1.0",
43
+ "glob": "^11.0.0"
44
+ },
45
+ "devDependencies": {
46
+ "@types/node": "^22.0.0",
47
+ "typescript": "^5.6.0"
48
+ }
49
+ }
package/templates/add.md CHANGED
@@ -24,14 +24,133 @@ Add to Claude Code setup: "{{USER_INPUT}}"
24
24
 
25
25
  Skills: {{SKILLS_LIST}} | Commands: {{COMMANDS_LIST}}
26
26
 
27
+ ---
28
+
29
+ {{MARKETPLACE_INSTRUCTIONS}}
30
+
31
+ ---
32
+
33
+ ## What you must actually do
34
+
35
+ Parse the user's request and take ALL applicable actions:
36
+
37
+ ### 1. MCP servers
38
+ If the request mentions an external service (database, API, browser, etc.):
39
+ - Check the verified MCP package list below
40
+ - If found: add to `.mcp.json` with OS-correct format (detected: {{DETECTED_OS}})
41
+ - Use `${VARNAME}` syntax for all credentials — NEVER hardcode
42
+ - Document new env vars in `.env.example`
43
+
44
+ Verified MCP packages — ONLY use these for MCP servers:
45
+ ```
46
+ playwright → @playwright/mcp@latest
47
+ postgres → @modelcontextprotocol/server-postgres
48
+ filesystem → @modelcontextprotocol/server-filesystem
49
+ memory → @modelcontextprotocol/server-memory
50
+ github → @modelcontextprotocol/server-github
51
+ brave → @modelcontextprotocol/server-brave-search
52
+ puppeteer → @modelcontextprotocol/server-puppeteer
53
+ slack → @modelcontextprotocol/server-slack
54
+ sqlite → @modelcontextprotocol/server-sqlite
55
+ stripe → @stripe/mcp@latest
56
+ redis → @modelcontextprotocol/server-redis
57
+ mysql → @benborla29/mcp-server-mysql
58
+ mongodb → mcp-mongo-server
59
+ ```
60
+
61
+ {{#if HAS_MCP_JSON}}
62
+ MCP format — merge into existing .mcp.json:
63
+ {{else}}
64
+ MCP format — create new .mcp.json:
65
+ {{/if}}
66
+ {{#if IS_WINDOWS}}
67
+ ```json
68
+ {
69
+ "mcpServers": {
70
+ "server-name": {
71
+ "command": "cmd",
72
+ "args": ["/c", "npx", "-y", "<package>"],
73
+ "env": {
74
+ "API_KEY": "${API_KEY}"
75
+ }
76
+ }
77
+ }
78
+ }
79
+ ```
80
+ {{else}}
81
+ ```json
82
+ {
83
+ "mcpServers": {
84
+ "server-name": {
85
+ "command": "npx",
86
+ "args": ["-y", "<package>"],
87
+ "env": {
88
+ "API_KEY": "${API_KEY}"
89
+ }
90
+ }
91
+ }
92
+ }
93
+ ```
94
+ {{/if}}
95
+
96
+ ### 2. Skills
97
+ If the request mentions skills or capabilities:
98
+ - Create `.claude/skills/<name>/SKILL.md` with proper frontmatter
99
+ - Use `description:` so Claude knows when to load the skill
100
+ - Search the marketplace for matching pre-built skills (see above)
101
+
102
+ Skill format:
103
+ ```yaml
104
+ ---
105
+ name: skill-name
106
+ description: What this skill does
107
+ ---
108
+
109
+ Instructions...
110
+ ```
111
+
112
+ ### 3. Hooks
113
+ If the request implies automated actions (formatting, building, notifications):
114
+ - Add to `.claude/settings.json` using the CORRECT hooks format
115
+ - Verify the tool exists before adding a hook for it
116
+
117
+ Correct hooks format:
118
+ ```json
119
+ {
120
+ "hooks": {
121
+ "PostToolUse": [
122
+ {
123
+ "matcher": "Edit|Write",
124
+ "hooks": [
125
+ {
126
+ "type": "command",
127
+ "command": "<shell command>"
128
+ }
129
+ ]
130
+ }
131
+ ]
132
+ }
133
+ }
134
+ ```
135
+
136
+ ### 4. Plugins
137
+ If the request matches a marketplace category or SaaS platform:
138
+ - Suggest the relevant plugin with install commands
139
+ - Show the user exactly how to install it
140
+
141
+ ### 5. CLAUDE.md
142
+ Document any new capabilities, services, or patterns added.
143
+
27
144
  ## Rules
28
145
  - Read current content above before writing. Merge/append only.
29
146
  - If request mentions something not evidenced in project files: ask first.
30
- - OS detected: {{DETECTED_OS}}. Use correct command format for MCP/hooks:
31
- - Windows: `{ "command": "cmd", "args": ["/c", "npx", "<pkg>"] }`
32
- - macOS/Linux: `{ "command": "npx", "args": ["<pkg>"] }`
147
+ - OS detected: {{DETECTED_OS}}. Use correct command format for MCP/hooks.
33
148
  - All env var refs use `${VARNAME}` syntax. Document new vars in .env.example.
149
+ - **NEVER write a "model" key into settings.json**
150
+ - Produce valid JSON only.
34
151
 
35
152
  ## Output — one line per file
36
153
  Updated: ✅ [path] — [what and why]
154
+ Created: ✅ [path] — [what and why]
37
155
  Skipped: ⏭ [path] — [why not needed for this request]
156
+ Suggested: 📦 [plugin name] — install with: /plugin install [name]@[marketplace]
@@ -24,12 +24,69 @@ If they gave no language: write a language-agnostic CLAUDE.md about the product
24
24
  **.mcp.json**
25
25
  Only for services they explicitly mentioned or obviously required for their product type.
26
26
  If they said "not sure": do not create this file.
27
+ If they mentioned a database, payment system, or external API, create .mcp.json.
28
+
29
+ Use OS-correct format (detected: {{DETECTED_OS}}):
30
+ ```json
31
+ {
32
+ "mcpServers": {
33
+ "server-name": {
34
+ "command": "npx",
35
+ "args": ["-y", "@package/name"],
36
+ "env": {
37
+ "API_KEY": "${API_KEY}"
38
+ }
39
+ }
40
+ }
41
+ }
42
+ ```
43
+ Windows format: use `"command": "cmd", "args": ["/c", "npx", "-y", "@package/name"]`
44
+
45
+ Verified MCP packages:
46
+ - postgres → @modelcontextprotocol/server-postgres
47
+ - mysql → @benborla29/mcp-server-mysql
48
+ - mongodb → mcp-mongo-server
49
+ - redis → @modelcontextprotocol/server-redis
50
+ - stripe → @stripe/mcp@latest
51
+ - github → @modelcontextprotocol/server-github
52
+ - filesystem → @modelcontextprotocol/server-filesystem
53
+ - memory → @modelcontextprotocol/server-memory
54
+ - playwright → @playwright/mcp@latest
27
55
 
28
56
  **.claude/settings.json**
29
57
  Only if the product type they described has clear patterns that benefit from hooks.
58
+ Use the CORRECT hooks format:
59
+ ```json
60
+ {
61
+ "hooks": {
62
+ "PostToolUse": [
63
+ {
64
+ "matcher": "Edit|Write",
65
+ "hooks": [
66
+ {
67
+ "type": "command",
68
+ "command": "<shell command>"
69
+ }
70
+ ]
71
+ }
72
+ ]
73
+ }
74
+ }
75
+ ```
76
+ **NEVER write a "model" key** — it overrides the user's model selection.
77
+ **Before adding a build hook**, verify the tool is installed first.
30
78
 
31
79
  **.claude/skills/**
32
- Only if the product domain has patterns worth capturing. Empty is fine for a fresh start.
80
+ Only if the product domain has patterns worth capturing. Each skill needs:
81
+ ```
82
+ .claude/skills/<name>/SKILL.md
83
+ ```
84
+ With frontmatter: `---\nname: ...\ndescription: ...\n---`
85
+ Empty is fine for a fresh start.
86
+
87
+ **.claude/commands/**
88
+ Create project-appropriate commands based on what the user described.
89
+ For example: /dev, /build, /test, /deploy — but only if the stack warrants them.
33
90
 
34
91
  **.github/workflows/**
35
92
  Only if they mentioned CI, deployment, or a specific hosting platform.
package/templates/init.md CHANGED
@@ -32,20 +32,15 @@ CLAUDE.md → does not exist (create it)
32
32
  {{MCP_JSON_CONTENT}}
33
33
 
34
34
  OS detected: {{DETECTED_OS}}. Use correct MCP command format:
35
- - Windows: `{ "command": "cmd", "args": ["/c", "npx", "<package>"] }`
36
- - macOS/Linux: `{ "command": "npx", "args": ["<package>"] }`
35
+ - Windows: `{ "command": "cmd", "args": ["/c", "npx", "-y", "<package>"] }`
36
+ - macOS/Linux: `{ "command": "npx", "args": ["-y", "<package>"] }`
37
37
  {{else}}
38
- .mcp.json → does not exist (create only if you find evidence of external services)
38
+ .mcp.json → does not exist (create if you find evidence of external services in deps, docker-compose, or env vars)
39
39
  {{/if}}
40
40
 
41
41
  {{#if HAS_SETTINGS}}
42
42
  ### .claude/settings.json — EXISTS — merge only, never remove existing hooks
43
43
  {{SETTINGS_CONTENT}}
44
-
45
- Hook shell format for {{DETECTED_OS}}:
46
- - Windows: `{ "command": "cmd", "args": ["/c", "<command>"] }`
47
- - macOS/Linux: `{ "command": "bash", "args": ["-c", "<command>"] }`
48
- - Bash quoting rule: never use bare `"` inside `-c "..."` — use `\x22` instead
49
44
  {{else}}
50
45
  settings.json → does not exist (create only if hooks are warranted)
51
46
  {{/if}}
@@ -70,21 +65,63 @@ actual conventions from the code. Generic advice belongs in docs, not here.
70
65
  If it exists: read it above first. Add only what is genuinely missing. Never remove.
71
66
 
72
67
  ### .mcp.json
73
- Only if you found evidence of external services in the config files, dependencies,
74
- or environment template. No evidence = no server.
68
+ Create if you found evidence of external services in: dependencies, docker-compose services,
69
+ env vars (DATABASE_URL, REDIS_URL, STRIPE_KEY, etc.), or import statements (pg, mysql2, mongoose, redis, stripe).
75
70
  If it exists: add to it. Never remove existing entries. Produce valid JSON.
76
- Use OS-correct command format (see above).
71
+ Use OS-correct command format (see above). Always include `-y` in npx args.
72
+ All credentials use `${VARNAME}` syntax — NEVER hardcode connection strings.
77
73
 
78
- ### .claude/settings.json
74
+ ### .claude/settings.json — CORRECT HOOKS FORMAT
79
75
  Only if hooks genuinely earn their cost for this specific project.
80
76
  Every hook adds overhead on every Claude Code action.
77
+
78
+ **Use this exact format:**
79
+ ```json
80
+ {
81
+ "hooks": {
82
+ "PostToolUse": [
83
+ {
84
+ "matcher": "Edit|Write",
85
+ "hooks": [
86
+ {
87
+ "type": "command",
88
+ "command": "<shell command here>"
89
+ }
90
+ ]
91
+ }
92
+ ]
93
+ }
94
+ }
95
+ ```
96
+
97
+ **Before adding a build hook**, verify the tool is installed:
98
+ - Wrap with existence check: `command -v mvn && mvn compile -q`
99
+ - If not installed: skip the hook and warn the user
100
+ - NEVER add a hook for a tool that doesn't exist
101
+
102
+ **NEVER write a `"model"` key** — it overrides the user's model selection.
103
+
81
104
  If it exists: add to it. Never remove existing hooks.
82
- Use OS-correct shell format (see above).
105
+ Use OS-correct shell format.
83
106
 
84
107
  ### .claude/skills/
85
- Only for patterns that recur across this codebase and benefit from automatic loading.
86
- Use `applies-when` frontmatter so skills load only when relevant.
87
- If a similar skill already exists: extend it.
108
+ Create skills for patterns that recur across this codebase and benefit from automatic loading.
109
+ Each skill must be a directory with SKILL.md:
110
+ ```
111
+ .claude/skills/<name>/SKILL.md
112
+ ```
113
+ With frontmatter:
114
+ ```yaml
115
+ ---
116
+ name: skill-name
117
+ description: When to use this skill
118
+ ---
119
+ Instructions...
120
+ ```
121
+
122
+ ### .claude/commands/
123
+ Create project-specific commands for multi-step workflows developers repeat.
124
+ Based on what you find in scripts, Makefile, README, docker-compose.
88
125
 
89
126
  ### .github/workflows/
90
127
  Only if .github/ exists ({{HAS_GITHUB_DIR}}).
@@ -30,8 +30,32 @@ Before removing anything, scan these locations directly:
30
30
  - Skills : `.claude/skills/*/SKILL.md`, `.claude/skills/*.md`, `.claude/skills/**/*.md`
31
31
  - Commands : `.claude/commands/*.md` (exclude stack-*.md)
32
32
  - MCP : read `.mcp.json` directly
33
- - Hooks : read `.claude/settings.json` directly
33
+ - Hooks : read `.claude/settings.json` → look inside the `"hooks"` key
34
34
  - CLAUDE.md: read the file directly
35
+ - Plugins : check `/plugin` installed list
36
+
37
+ ## What to remove for each type
38
+
39
+ ### MCP servers
40
+ - Remove the server entry from `.mcp.json` → `mcpServers.<name>`
41
+ - Remove corresponding env vars from `.env.example` (if no other server uses them)
42
+ - Remove references in CLAUDE.md
43
+
44
+ ### Hooks
45
+ - Remove from `.claude/settings.json` → `hooks.<EventName>` entries
46
+ - Hooks use this structure: `{ "hooks": { "PostToolUse": [{ "matcher": "...", "hooks": [...] }] } }`
47
+ - Remove the entire matcher entry if removing all hooks for that matcher
48
+
49
+ ### Skills
50
+ - Delete the skill directory: `.claude/skills/<name>/` (entire directory including SKILL.md)
51
+ - Or delete the flat skill file: `.claude/skills/<name>.md`
52
+
53
+ ### Plugins
54
+ - Suggest: `/plugin uninstall <name>@<marketplace>`
55
+ - Print the exact uninstall command for the user
56
+
57
+ ### Commands
58
+ - Delete the command file: `.claude/commands/<name>.md`
35
59
 
36
60
  Before deleting, list every reference found and confirm scope:
37
61
  ```
@@ -45,7 +69,7 @@ Dangling references that will break:
45
69
  ## Rules
46
70
  - Find everything related to the removal request across ALL files — scan the filesystem, not just the data shown above.
47
71
  - Remove surgically — section by section, key by key.
48
- - Never delete an entire file. Remove only the relevant section.
72
+ - Never delete an entire file unless it contains ONLY the thing being removed.
49
73
  - Never remove content unrelated to the request.
50
74
  - After every edit, the file MUST remain valid (JSON stays valid JSON, etc.)
51
75
  - If not found anywhere: say so and stop.
@@ -55,3 +79,4 @@ Dangling references that will break:
55
79
  Removed: ✅ [path] — [what was removed]
56
80
  Not found: ⏭ [path] — not referenced
57
81
  Dangling: ⚠️ [path] — still references [removed thing]
82
+ Suggested: 📦 To uninstall plugin: /plugin uninstall [name]@[marketplace]
package/templates/sync.md CHANGED
@@ -30,7 +30,7 @@ Project changed since last setup. Update ONLY what the changes demand.
30
30
  {{SETTINGS_CONTENT}}
31
31
  {{/if}}
32
32
 
33
- Skills: {{SKILLS_LIST}} | Commands: {{COMMANDS_LIST}}
33
+ Skills: {{SKILLS_LIST}} | Commands: {{COMMANDS_LIST}} | Workflows: {{WORKFLOWS_LIST}}
34
34
 
35
35
  ## Your job
36
36
 
@@ -47,6 +47,25 @@ Do NOT update things that did not change.
47
47
  Do NOT rewrite files — surgical edits only.
48
48
  If unsure about a change's implication: flag it, don't guess.
49
49
 
50
+ ### Correct hooks format (if adding/modifying hooks)
51
+ ```json
52
+ {
53
+ "hooks": {
54
+ "PostToolUse": [
55
+ {
56
+ "matcher": "Edit|Write",
57
+ "hooks": [
58
+ {
59
+ "type": "command",
60
+ "command": "<shell command>"
61
+ }
62
+ ]
63
+ }
64
+ ]
65
+ }
66
+ }
67
+ ```
68
+
50
69
  ## Output — one line per file, nothing else
51
70
 
52
71
  Updated: ✅ [path] — triggered by: [which changed file and why]