project-init
Bootstraps a brand-new, empty project with a complete, optimized file & directory structure plus an interactive LLM onboarding dialog. Use when the user wants to start a fresh/pristine project from sc
SKILL.mdskills/_meta/project-init/SKILL.md
GitHub/project-init
Start a fresh, virgin project from scratch. This skill runs an interactive, dynamic onboarding dialog with the user, then scaffolds a complete, optimized directory & file structure and writes the onboarding results into the project's ops/ docs so that future LLM sessions (via the session-start trigger) can pick up the context automatically.
What this is for
- A completely empty folder that should become a new project.
- The user wants the LLM to ask the right questions rather than guess.
- All project areas must be covered: goal, stack, structure, tooling, docs, secrets/tokens, platform context.
- Output is a reusable, consistent baseline that the session-start routine can read back in every session.
PROTECTION RULE - never ~/.claude/
Read-only skill. Guard required if write mode added later.
What You Must Do When Invoked
During analysis, assign a confidence level to each finding: proven (confirmed by evidence), likely (strong signal, needs review), or suspected (weak signal).
If the user invoked /project-init -help or /project-init -h (no other args),
print the contents of the ## Usage section verbatim and stop.
Otherwise follow the steps below in order. Do not skip steps.
Step 1 - Help check
If invoked with -help or -h, output the ## Usage section unchanged and stop.
Step 2 - Establish target directory
Ask the user for the absolute path of the new project (or use the current directory). Confirm it is empty or near-empty. If it already contains a project, stop and warn before overwriting anything.
Target directory: <path>
Existing files: <list or "none">
Proceed? (yes/no)
Only continue after explicit confirmation.
PROTECTION RULE - never ~/.claude/: The target directory must under no
circumstances be C:\Users\ostol\.claude\ (or its subdirectories).
This path is sacred and must NEVER be modified by this skill.
If the user proposes ~/.claude/ as target, abort immediately. The generator
(scripts/init.ps1) blocks such paths technically by itself.
Step 3 - Run the interactive onboarding dialog
Ask the user the following areas ONE AT A TIME, in this order. Adapt follow-up questions to previous answers (dynamic, not a fixed form). Keep each question short and direct.
- Goal - What is the project? One sentence. What problem does it solve?
- Stack - Language/framework (Node/TS, Python, Go, Rust, ...). Confirm package manager. If unknown, propose a sensible default and let user accept/change.
- Directory structure - Based on stack, propose a layout (src/, tests/, docs/, ops/). Confirm or adjust.
- Tooling - Lint, formatter, tests, CI, git hooks, type-check. Confirm which to include.
- Docs / Ops - Explain that ops/ holds manifest.md, tracking.md, sprints/. Confirm naming conventions.
- Secrets / Tokens - Which external services/APIs? Where do secrets live (.env, vault)? NEVER log full secrets - only masked preview.
- Platform context - Deployment target (local, cloud, serverless), platforms (web, cli, api, mobile).
- Blockers / Open - Anything currently blocking or undecided?
After each answer, reflect it back in one line so the user can correct.
Step 4 - Generate the structure
Run the generator script. It reads the collected answers (you pass them as arguments / a JSON file) and creates the full tree.
See scripts/init.ps1 for the implementation. Invoke it like:
& "<SKILL_DIR>/scripts/init.ps1" -ProjectDir "<path>" -AnswersFile "<path/to/answers.json>"
Where answers.json is a JSON object you build from the dialog, e.g.:
{
"name": "my-app",
"goal": "Track personal finances.",
"stack": "node-ts",
"pkgManager": "npm",
"layout": "src/tests/docs/ops",
"tooling": ["eslint", "prettier", "vitest", "github-actions"],
"docs": ["manifest", "tracking", "sprints"],
"secrets": [".env (gitignored)"],
"platform": ["web", "api"],
"blockers": "none"
}
The script:
- Creates the directory tree.
- Writes
CLAUDE.md(project rules and configuration). - Writes
ops/manifest.md(goal + scope from answers). - Writes
ops/tracking.md(status template, blocker field). - Writes
ops/sprints/.gitkeep+ops/sprints/README.md. - Writes
.gitignore(node_modules, dist, .env, etc. - stack-aware). - Writes
README.md(project title + goal stub). - Scaffolds a minimal entry file appropriate to the stack (only a stub, no logic).
Step 5 - Finalize & hand off
Print a concise summary of what was created:
Project <name> initialized in <path>
Structure: <tree in 5-8 lines>
Config: CLAUDE.md created (project rules)
Ops: manifest.md, tracking.md, sprints/
Secrets: <masked preview or "none">
Next step: type "weiter" to start session start routine.
Tell the user: from now on, typing "weiter" in this project triggers the Session-Start-Routine that reads manifest/tracking/sprints automatically.
Usage
/project-init # interactive onboarding in current directory
/project-init <path> # interactive onboarding in <path>
/project-init -help # show this usage block and stop