skills/initializing-projects/SKILL.md
Generates a minimal, self-maintaining CLAUDE.md for projects through auto-detection and developer interview. Covers project identity, do/don't rules, hooks, and self-maintenance. Use when starting a new project or adding Claude Code support to an existing one
npx skillsauth add riccardogrin/skills initializing-projectsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generate a focused CLAUDE.md that gives Claude the context it actually needs — and nothing more. Agents are smart enough to figure out most things from the code. The file should capture what they cannot infer: project identity, business context, and hard-won lessons.
| File | Read When |
|------|-----------|
| references/claude-md-patterns.md | Constructing the CLAUDE.md or reviewing examples of effective minimal configs |
Keep the CLAUDE.md minimal.
Agents read the code, package.json, config files, and directory structure on their own.
Only add what they would get wrong or waste time figuring out.
Include:
Exclude:
The file grows over time as the agent (and you) discover gotchas. Start small — a 20-line CLAUDE.md is better than a 200-line one full of noise.
Scan the project to understand the landscape. This informs the interview — skip questions you can answer from config files.
Detect:
packageManager field, package.json, pyproject.toml, Cargo.toml, go.mod, workspace configs like pnpm-workspace.yaml, nx.json, etc.)package.json, pyproject.toml, config files like next.config.*)scripts.test, tests/ directory)ARCHITECTURE.md — if present, note it; architecture enforcement is already partially set updocs/ directory — if present, note it and scan for front-matter summaries to include in the detection summaryPresent findings in a concise summary. Ask the user to confirm or correct before proceeding.
Fill gaps that auto-detection cannot cover. Go as deep as the project warrants — simple projects need 2-3 questions, complex ones may need a longer conversation.
Core questions:
Do not ask questions the code answers. Do not cap the interview artificially — if the user keeps sharing useful context, keep going. When the user signals they're done, move on.
Generate a minimal CLAUDE.md at the project root.
Only include sections with real content — omit empty sections entirely.
## What This Is
[Project description — what it does, who it's for, why it exists]
[Mission/vision if the user shared one]
## Do / Don't
- Do: [specific convention or pattern the agent should follow]
- Don't: [specific thing that has caused problems or is explicitly wrong]
- Do: [rule with exception] — except [when/where the exception applies]
[Add more as discovered during development]
## Known Issues
<!-- Populated by Claude — remove entries when fixed -->
## Decision Log
<!-- Key business/project decisions only, not obvious code choices -->
Conditional sections (only add if the user raised them):
pnpm test, pnpm dev, etc.) or have unusual flagsDo not add:
package.json scripts verbatimpackage.jsonThe self-maintenance rules from the user's global ~/.claude/CLAUDE.md handle plan updates, known issues, and decision logging.
Do not duplicate those rules in the project CLAUDE.md unless the user's global config is missing them.
Create .claude/settings.json with PostToolUse hooks matching Write|Edit.
CRITICAL: Hook entries require a hooks array. Each entry in the event array is a matcher object containing a hooks array of command objects. Do NOT put command directly on the matcher object.
Correct structure:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "prettier --write \"$CLAUDE_FILE_PATH\" 2>/dev/null || true"
}
]
}
]
}
}
Formatter hooks (auto-fix on every edit):
If Prettier: npx prettier --write "$CLAUDE_FILE_PATH" 2>/dev/null || true
If Biome: npx @biomejs/biome format --write "$CLAUDE_FILE_PATH" 2>/dev/null || true
If Ruff: ruff format "$CLAUDE_FILE_PATH" 2>/dev/null || true
If Black: black "$CLAUDE_FILE_PATH" 2>/dev/null || true
If no formatter is detected, suggest one appropriate for the stack but do not force it. Defaults: Prettier for JS/TS, Ruff for Python, gofmt for Go, rustfmt for Rust.
Linter hooks (catch issues mechanically, not via instructions):
If a linter was detected in Phase 1 but no lint hook exists, suggest a PostToolUse lint hook:
If ESLint: npx eslint --fix "$CLAUDE_FILE_PATH" 2>/dev/null || true
If Biome: npx @biomejs/biome check --fix "$CLAUDE_FILE_PATH" 2>/dev/null || true
If Ruff: ruff check --fix "$CLAUDE_FILE_PATH" 2>/dev/null || true
If no linter is detected and the project has 10+ source files, suggest adding one appropriate for the stack. Don't force it — present it as a recommendation with the benefit (mechanical enforcement catches issues automatically, no agent discipline required).
For complex projects (multiple layers, clear architectural boundaries, or the user described layered architecture during the interview), mention /enforcing-architecture as a next step for setting up dependency-direction rules and structural checks.
.claude/settings.json should be committed to git so project hooks are shared with the team.
If .claude/settings.local.json exists (machine-specific overrides), ensure it's in .gitignore.
Read back every generated file and confirm:
Present a summary listing all files created and their purpose. Flag anything that looks wrong or needs manual adjustment.
| Avoid | Do Instead |
|-------|------------|
| Listing tech stack the agent can detect | Only note what's surprising or non-standard |
| Detailed repo structure that will go stale | Let the agent explore; call out only non-obvious key files |
| Generic advice ("write clean code") | Specific do/don't rules from real experience |
| Overwriting existing CLAUDE.md without asking | Warn and offer to merge |
| Padding with empty sections | Omit sections that have no real content |
| Capping the interview prematurely | Let the user share as much context as they want |
| Duplicating global self-maintenance rules | Check if they exist in ~/.claude/CLAUDE.md first |
data-ai
Downloads YouTube videos, transcribes audio via OpenAI Whisper, and produces summaries stored locally. Covers yt-dlp download, audio extraction, transcription, caching, and summarization. Use when a YouTube link is shared and the user wants a transcript or summary
development
Runs an adversarial code review loop that spawns independent reviewer and fixer subagents, iterating until only nitpicks remain. Scores findings by confidence, fixes real issues, and re-reviews with fresh eyes — all internal, no GitHub comments. Use when asked to review code, self-review, adversarial review, or polish code before pushing
development
Creates implementation-ready plans through discovery interviews, external research, and codebase analysis. Covers requirements, competitor research, architecture decisions, and change sequencing. Use when planning features, roadmaps, specs, or any work that needs discovery before coding
development
Generates an autonomous game design loop that iteratively expands a game concept into a comprehensive vision and implementation plan across multiple sessions. Covers mechanic exploration, system design, competitor research, and plan generation. Use when developing a game idea from seed concept to full implementation plan