claude-code-starter 0.0.1

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/init ADDED
@@ -0,0 +1,341 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # Claude Code Framework - Init Script
4
+ # Version: 1.0.0
5
+ #
6
+
7
+ set -e
8
+
9
+ VERSION="0.0.1"
10
+
11
+ # Colors
12
+ GREEN='\033[0;32m'
13
+ BLUE='\033[0;34m'
14
+ YELLOW='\033[1;33m'
15
+ CYAN='\033[0;36m'
16
+ RED='\033[0;31m'
17
+ NC='\033[0m'
18
+
19
+ # Default options
20
+ FORCE=false
21
+
22
+ # Get framework directory
23
+ FRAMEWORK_DIR="$(cd "$(dirname "$0")" && pwd)"
24
+
25
+ # Help message
26
+ show_help() {
27
+ cat << EOF
28
+ Claude Code Framework v${VERSION}
29
+
30
+ A lightweight framework for AI-assisted development with Claude Code.
31
+
32
+ USAGE:
33
+ npx claude-code-starter [OPTIONS]
34
+ claude-code-starter [OPTIONS]
35
+
36
+ OPTIONS:
37
+ -h, --help Show this help message
38
+ -v, --version Show version number
39
+ -f, --force Force overwrite of CLAUDE.md and settings.json
40
+
41
+ EXAMPLES:
42
+ # Initialize in current directory (no install required)
43
+ cd /path/to/your-project
44
+ npx claude-code-starter
45
+
46
+ # Force overwrite existing files
47
+ npx claude-code-starter --force
48
+
49
+ # If installed globally
50
+ claude-code-starter
51
+
52
+ WHAT IT DOES:
53
+ 1. Creates .claude/ directory structure
54
+ 2. Copies CLAUDE.md (instructions for Claude)
55
+ 3. Sets up slash commands (/task, /status, /done, /analyze)
56
+ 4. Installs skill files for patterns, debugging, testing
57
+ 5. Creates initial task state
58
+
59
+ MORE INFO:
60
+ https://github.com/cassianomon/claude-code-starter
61
+ EOF
62
+ }
63
+
64
+ # Parse arguments
65
+ while [[ $# -gt 0 ]]; do
66
+ case $1 in
67
+ -h|--help)
68
+ show_help
69
+ exit 0
70
+ ;;
71
+ -v|--version)
72
+ echo "claude-code-starter v${VERSION}"
73
+ exit 0
74
+ ;;
75
+ -f|--force)
76
+ FORCE=true
77
+ shift
78
+ ;;
79
+ *)
80
+ echo -e "${RED}Unknown option: $1${NC}"
81
+ echo "Use --help for usage information"
82
+ exit 1
83
+ ;;
84
+ esac
85
+ done
86
+
87
+ # Get project directory (current working directory)
88
+ PROJECT_DIR="$(pwd)"
89
+
90
+ # Prevent running init inside the framework folder itself
91
+ if [ "$PROJECT_DIR" = "$FRAMEWORK_DIR" ]; then
92
+ echo -e "${YELLOW}Run this from your project directory, not the framework folder.${NC}"
93
+ echo ""
94
+ echo "Usage:"
95
+ echo " cd /path/to/your-project"
96
+ echo " npx claude-code-starter"
97
+ exit 1
98
+ fi
99
+
100
+ # Validate framework files exist
101
+ validate_framework() {
102
+ local missing=()
103
+
104
+ [ ! -f "$FRAMEWORK_DIR/CLAUDE.md" ] && missing+=("CLAUDE.md")
105
+ [ ! -f "$FRAMEWORK_DIR/.claude/settings.json" ] && missing+=(".claude/settings.json")
106
+ [ ! -d "$FRAMEWORK_DIR/.claude/commands" ] && missing+=(".claude/commands/")
107
+ [ ! -d "$FRAMEWORK_DIR/.claude/skills" ] && missing+=(".claude/skills/")
108
+
109
+ if [ ${#missing[@]} -gt 0 ]; then
110
+ echo -e "${RED}Error: Framework files missing:${NC}"
111
+ for file in "${missing[@]}"; do
112
+ echo " - $file"
113
+ done
114
+ echo ""
115
+ echo "The framework installation appears to be incomplete."
116
+ echo "Try reinstalling: npm install -g claude-code-starter"
117
+ exit 1
118
+ fi
119
+ }
120
+
121
+ validate_framework
122
+
123
+ # Show banner
124
+ echo -e "${CYAN}╔═══════════════════════════════════════╗${NC}"
125
+ echo -e "${CYAN}║ Claude Code Framework v${VERSION} ║${NC}"
126
+ echo -e "${CYAN}╚═══════════════════════════════════════╝${NC}"
127
+ echo ""
128
+
129
+ # Create .claude directory structure
130
+ mkdir -p "$PROJECT_DIR/.claude/state"
131
+ mkdir -p "$PROJECT_DIR/.claude/commands"
132
+ mkdir -p "$PROJECT_DIR/.claude/skills"
133
+
134
+ # Copy framework files to project
135
+ echo -e "${BLUE}Setting up framework files...${NC}"
136
+
137
+ # Copy CLAUDE.md
138
+ if [ ! -f "$PROJECT_DIR/CLAUDE.md" ] || [ "$FORCE" = true ]; then
139
+ cp -- "$FRAMEWORK_DIR/CLAUDE.md" "$PROJECT_DIR/CLAUDE.md"
140
+ if [ "$FORCE" = true ] && [ -f "$PROJECT_DIR/CLAUDE.md" ]; then
141
+ echo " Updated CLAUDE.md (forced)"
142
+ else
143
+ echo " Created CLAUDE.md"
144
+ fi
145
+ else
146
+ echo " CLAUDE.md exists (use --force to overwrite)"
147
+ fi
148
+
149
+ # Copy settings.json
150
+ if [ ! -f "$PROJECT_DIR/.claude/settings.json" ] || [ "$FORCE" = true ]; then
151
+ cp -- "$FRAMEWORK_DIR/.claude/settings.json" "$PROJECT_DIR/.claude/settings.json"
152
+ if [ "$FORCE" = true ] && [ -f "$PROJECT_DIR/.claude/settings.json" ]; then
153
+ echo " Updated .claude/settings.json (forced)"
154
+ else
155
+ echo " Created .claude/settings.json"
156
+ fi
157
+ else
158
+ echo " settings.json exists (use --force to overwrite)"
159
+ fi
160
+
161
+ # Copy commands (always update - these are framework-managed)
162
+ cp -r -- "$FRAMEWORK_DIR/.claude/commands/"* "$PROJECT_DIR/.claude/commands/"
163
+ echo " Updated .claude/commands/"
164
+
165
+ # Copy skills (always update - these are framework-managed)
166
+ cp -r -- "$FRAMEWORK_DIR/.claude/skills/"* "$PROJECT_DIR/.claude/skills/"
167
+ echo " Updated .claude/skills/"
168
+
169
+ # Write version file
170
+ echo "$VERSION" > "$PROJECT_DIR/.claude/.version"
171
+
172
+ echo ""
173
+
174
+ # Detect project type (bash 3.x compatible - no mapfile)
175
+ detect_project() {
176
+ local has_code=false
177
+ local tech_stack=""
178
+
179
+ # Check for various project indicators
180
+ [ -f "$PROJECT_DIR/package.json" ] && tech_stack+="Node.js " && has_code=true
181
+ [ -f "$PROJECT_DIR/tsconfig.json" ] && tech_stack+="TypeScript " && has_code=true
182
+ [ -f "$PROJECT_DIR/requirements.txt" ] && tech_stack+="Python " && has_code=true
183
+ [ -f "$PROJECT_DIR/pyproject.toml" ] && tech_stack+="Python " && has_code=true
184
+ [ -f "$PROJECT_DIR/Cargo.toml" ] && tech_stack+="Rust " && has_code=true
185
+ [ -f "$PROJECT_DIR/go.mod" ] && tech_stack+="Go " && has_code=true
186
+ [ -f "$PROJECT_DIR/pom.xml" ] && tech_stack+="Java " && has_code=true
187
+ [ -f "$PROJECT_DIR/build.gradle" ] && tech_stack+="Java/Kotlin " && has_code=true
188
+ [ -f "$PROJECT_DIR/Gemfile" ] && tech_stack+="Ruby " && has_code=true
189
+ [ -d "$PROJECT_DIR/src" ] && has_code=true
190
+ [ -d "$PROJECT_DIR/lib" ] && has_code=true
191
+ [ -d "$PROJECT_DIR/app" ] && has_code=true
192
+
193
+ # Check for source files (optimized with -prune)
194
+ if [ "$has_code" = false ]; then
195
+ local file_count
196
+ file_count=$(find "$PROJECT_DIR" -maxdepth 3 \
197
+ \( -name "node_modules" -o -name ".git" -o -name "dist" -o -name "build" \) -prune -o \
198
+ \( -name "*.js" -o -name "*.ts" -o -name "*.py" -o -name "*.go" -o -name "*.rs" -o -name "*.java" -o -name "*.rb" \) -print 2>/dev/null | head -20 | wc -l | tr -d ' ')
199
+ [ "$file_count" -gt 0 ] && has_code=true
200
+ fi
201
+
202
+ # Return values via global variables (bash 3.x compatible)
203
+ PROJECT_TYPE="new"
204
+ TECH_STACK=""
205
+ if [ "$has_code" = true ]; then
206
+ PROJECT_TYPE="existing"
207
+ TECH_STACK="$tech_stack"
208
+ fi
209
+ }
210
+
211
+ # Run detection
212
+ detect_project
213
+
214
+ if [ "$PROJECT_TYPE" = "existing" ]; then
215
+ echo -e "${GREEN}Detected existing project${NC}"
216
+ [ -n "$TECH_STACK" ] && echo -e "Tech stack: ${CYAN}$TECH_STACK${NC}"
217
+ echo ""
218
+
219
+ # Run analysis
220
+ echo -e "${BLUE}Analyzing codebase...${NC}"
221
+
222
+ # Count files (optimized with -prune)
223
+ total_files=$(find "$PROJECT_DIR" \
224
+ \( -name "node_modules" -o -name ".git" -o -name "dist" -o -name "build" -o -name ".claude" \) -prune -o \
225
+ -type f \( -name "*.js" -o -name "*.ts" -o -name "*.tsx" -o -name "*.py" -o -name "*.go" -o -name "*.rs" -o -name "*.java" -o -name "*.rb" -o -name "*.php" \) -print 2>/dev/null | wc -l | tr -d ' ')
226
+
227
+ # Detect key directories
228
+ key_dirs=""
229
+ [ -d "$PROJECT_DIR/src" ] && key_dirs+="src/ "
230
+ [ -d "$PROJECT_DIR/lib" ] && key_dirs+="lib/ "
231
+ [ -d "$PROJECT_DIR/app" ] && key_dirs+="app/ "
232
+ [ -d "$PROJECT_DIR/api" ] && key_dirs+="api/ "
233
+ [ -d "$PROJECT_DIR/components" ] && key_dirs+="components/ "
234
+ [ -d "$PROJECT_DIR/pages" ] && key_dirs+="pages/ "
235
+ [ -d "$PROJECT_DIR/tests" ] && key_dirs+="tests/ "
236
+ [ -d "$PROJECT_DIR/test" ] && key_dirs+="test/ "
237
+ [ -d "$PROJECT_DIR/__tests__" ] && key_dirs+="__tests__/ "
238
+
239
+ # Detect frameworks
240
+ frameworks=""
241
+ if [ -f "$PROJECT_DIR/package.json" ]; then
242
+ grep -q '"react"' "$PROJECT_DIR/package.json" 2>/dev/null && frameworks+="React "
243
+ grep -q '"next"' "$PROJECT_DIR/package.json" 2>/dev/null && frameworks+="Next.js "
244
+ grep -q '"vue"' "$PROJECT_DIR/package.json" 2>/dev/null && frameworks+="Vue "
245
+ grep -q '"express"' "$PROJECT_DIR/package.json" 2>/dev/null && frameworks+="Express "
246
+ grep -q '"fastify"' "$PROJECT_DIR/package.json" 2>/dev/null && frameworks+="Fastify "
247
+ grep -q '"@nestjs"' "$PROJECT_DIR/package.json" 2>/dev/null && frameworks+="NestJS "
248
+ fi
249
+ if [ -f "$PROJECT_DIR/requirements.txt" ]; then
250
+ grep -qi 'django' "$PROJECT_DIR/requirements.txt" 2>/dev/null && frameworks+="Django "
251
+ grep -qi 'flask' "$PROJECT_DIR/requirements.txt" 2>/dev/null && frameworks+="Flask "
252
+ grep -qi 'fastapi' "$PROJECT_DIR/requirements.txt" 2>/dev/null && frameworks+="FastAPI "
253
+ fi
254
+
255
+ echo ""
256
+ echo " Files: $total_files source files"
257
+ [ -n "$key_dirs" ] && echo " Directories: $key_dirs"
258
+ [ -n "$frameworks" ] && echo " Frameworks: $frameworks"
259
+ echo ""
260
+
261
+ # Only create task file if it doesn't exist (preserve existing state)
262
+ if [ ! -f "$PROJECT_DIR/.claude/state/task.md" ]; then
263
+ cat > "$PROJECT_DIR/.claude/state/task.md" << 'EOF'
264
+ # Current Task
265
+
266
+ ## Status: Ready
267
+
268
+ No active task. Start one with `/task <description>`.
269
+
270
+ ## Project Summary
271
+
272
+ This is an existing codebase. Use `/analyze` to explore specific areas.
273
+
274
+ ## Quick Commands
275
+
276
+ - `/task` - Start working on something
277
+ - `/status` - See current state
278
+ - `/analyze` - Deep dive into code
279
+ - `/done` - Mark task complete
280
+ EOF
281
+ echo " Created .claude/state/task.md"
282
+ else
283
+ echo " Task state preserved (.claude/state/task.md)"
284
+ fi
285
+
286
+ echo ""
287
+ echo -e "${GREEN}Ready!${NC} Run ${CYAN}claude${NC} to start."
288
+
289
+ else
290
+ echo -e "${YELLOW}New project detected${NC}"
291
+ echo ""
292
+
293
+ # Only ask for task if state doesn't exist
294
+ if [ ! -f "$PROJECT_DIR/.claude/state/task.md" ]; then
295
+ echo "What are you building?"
296
+ echo -n "> "
297
+ read -r initial_task
298
+
299
+ # Sanitize input - remove characters that could break heredoc
300
+ initial_task="${initial_task//\$/}"
301
+ initial_task="${initial_task//\`/}"
302
+ initial_task="${initial_task//\\/}"
303
+
304
+ if [ -z "$initial_task" ]; then
305
+ initial_task="Explore and set up project"
306
+ fi
307
+
308
+ # Create initial task file for new project
309
+ cat > "$PROJECT_DIR/.claude/state/task.md" << TASKEOF
310
+ # Current Task
311
+
312
+ ## Status: In Progress
313
+
314
+ **Task:** $initial_task
315
+
316
+ ## Context
317
+
318
+ New project - no existing code yet.
319
+
320
+ ## Next Steps
321
+
322
+ 1. Define project structure
323
+ 2. Set up development environment
324
+ 3. Start implementation
325
+
326
+ ## Decisions
327
+
328
+ (None yet - starting fresh)
329
+ TASKEOF
330
+
331
+ echo ""
332
+ echo -e "${GREEN}Ready!${NC} Run ${CYAN}claude${NC} to start working on: $initial_task"
333
+ else
334
+ echo " Task state preserved (.claude/state/task.md)"
335
+ echo ""
336
+ echo -e "${GREEN}Ready!${NC} Run ${CYAN}claude${NC} to continue."
337
+ fi
338
+ fi
339
+
340
+ echo ""
341
+ echo -e "${BLUE}Tip:${NC} Add ${CYAN}.claude/${NC} to your global .gitignore"
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "claude-code-starter",
3
+ "version": "0.0.1",
4
+ "description": "A lightweight framework for AI-assisted development with Claude Code",
5
+ "keywords": [
6
+ "claude",
7
+ "ai",
8
+ "development",
9
+ "framework",
10
+ "cli",
11
+ "anthropic",
12
+ "claude-code"
13
+ ],
14
+ "author": "Cassiano Montanari",
15
+ "license": "MIT",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/cassianomon/claude-code-starter.git"
19
+ },
20
+ "bin": {
21
+ "claude-code-starter": "./init"
22
+ },
23
+ "files": [
24
+ "init",
25
+ "CLAUDE.md",
26
+ ".claude/commands/",
27
+ ".claude/skills/",
28
+ ".claude/settings.json",
29
+ ".claude/state/task.md"
30
+ ],
31
+ "engines": {
32
+ "node": ">=14.0.0"
33
+ }
34
+ }