Install
$ agentstack add skill-karashiiro-agent-skills-creating-a-new-project ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Creating a New Project
Overview
Always search for and use official project generators or scaffolding tools before writing project boilerplate by hand. Generators encode community best practices, produce standardized structure, and stay current with ecosystem conventions.
When to Use
- Creating a new application, library, package, or repository
- Setting up a new workspace or monorepo
- Adding a new package to an existing monorepo
- Bootstrapping any project where a
create-*,init, ornewcommand likely exists
Core Pattern
STOP before writing any config or boilerplate files. Follow this order:
- Search for the official scaffolding tool for the framework/language/platform
- Run the generator with appropriate options (use non-interactive flags — see below)
- Customize the generated output to fit the specific needs
Never hand-write files that a generator would produce (package.json, tsconfig.json, Cargo.toml, pyproject.toml, Dockerfile templates, CI configs, etc.) unless no generator exists.
Handling Interactive Generators
Most generators prompt interactively by default. Since CLI agents cannot respond to interactive prompts, always use non-interactive flags to specify all options upfront.
Strategy:
- Check the generator's
--helpoutput for non-interactive flags - Specify the template/preset and all required options via CLI flags
- If no non-interactive mode exists, ask the user to run the generator themselves
Non-Interactive Flags by Generator
| Generator | Key Flags | Example | |-----------|-----------|---------| | Vite | --template, --no-interactive | npm create vite@latest my-app -- --template react-ts --no-interactive | | Next.js | --yes, --ts, --app, --tailwind, --src-dir, --eslint | npx create-next-app@latest my-app --yes --ts --app | | Nuxt | --template, --no-modules, --packageManager | npm create nuxt@latest my-app -- --no-modules --packageManager=pnpm | | SvelteKit | --no-add-ons, --no-install, --add | npx sv create my-app --no-add-ons --no-install | | Astro | -y / --yes, --template | npm create astro@latest my-app -- --template minimal -y | | React Router | --template (required) | npx create-react-router@latest my-app --template remix-run/react-router-templates/default | | Expo | --yes, --template | npm create expo my-app -- --yes --template blank | | Tauri | --template | npm create tauri-app@latest my-app -- --template react | | Electron Forge | --template | npx create-electron-app@latest my-app --template webpack | | Turborepo | -m, --skip-install | npx create-turbo@latest my-monorepo -m pnpm | | Nx | --interactive=false, --preset | npx create-nx-workspace@latest myorg --preset=empty --interactive=false --nxCloud skip | | Rust | Already non-interactive | cargo new my-project | | Go | Already non-interactive | go mod init github.com/user/my-module | | Python (uv) | Already non-interactive | uv init my-project | | .NET | Already non-interactive | dotnet new webapi -n MyProject |
When unsure about flags, run --help first.
Quick Reference
| Ecosystem | Generator Command | Notes | |-----------|------------------|-------| | Vite (React/Vue/Svelte/etc.) | npm create vite@latest | Covers most frontend frameworks | | Next.js | npx create-next-app@latest | Includes App Router setup | | Nuxt | npm create nuxt@latest | | | SvelteKit | npx sv create | Unified CLI replacing old create-svelte | | Astro | npm create astro@latest | | | React Router (formerly Remix) | npx create-react-router@latest | Remix merged into React Router v7 | | Node.js (plain) | npm init / pnpm init | Minimal, but sets up package.json correctly | | Rust | cargo init / cargo new | | | Go | go mod init | | | Python | uv init or framework-specific (e.g. django-admin startproject) | | | .NET | dotnet new | Templates: webapi, console, classlib, etc. | | Java (Spring) | Spring Initializr (start.spring.io) | Web UI or IDE plugins; spring init CLI also available | | Expo (React Native) | npm create expo | npx create-expo-app also still works | | Tauri | npm create tauri-app@latest | | | Electron | npx create-electron-app@latest | Via Electron Forge | | Turborepo | npx create-turbo@latest | Monorepo setup | | Nx | npx create-nx-workspace@latest | Monorepo setup |
This table is not exhaustive. If the ecosystem is not listed, search the web for the official generator before proceeding manually.
Workflow
- Identify the ecosystem. What language, framework, or platform?
- Search for the generator. Check official docs or search the web for
create/init/new. - Check
--helpfor non-interactive flags before running. - Run the generator non-interactively with all options specified via flags. Prefer the latest version (
@latest). - Review the output. Generators may include files the project doesn't need - remove those. They may also miss project-specific needs - add those.
- Adapt to existing conventions. If adding to a monorepo, align the generated config with the repo's existing style (linter config, tsconfig paths, package manager, etc.).
When Hand-Writing IS Appropriate
- No official generator exists for the ecosystem
- The project is intentionally minimal (e.g., a single-file script with no build tooling)
- The user explicitly requests writing from scratch
- The generator output would need so many modifications that starting fresh is faster (rare - usually customizing is still faster and safer)
Common Mistakes
| Mistake | Why It's Wrong | Fix | |---------|---------------|-----| | Running a generator without non-interactive flags | Hangs waiting for input | Always check --help and pass flags | | Writing tsconfig.json by hand | Miss new compiler options, get strictness wrong | Use generator, then adjust | | Hand-crafting package.json with scripts | Miss standard scripts, get module config wrong | npm init or framework generator | | Guessing at .gitignore contents | Miss platform/framework-specific entries | Generator includes correct ignores; or use gitignore.io | | Copying config from another project | Carries over project-specific quirks | Fresh generator output is cleaner | | Skipping the search step | "I know how to set this up" - but conventions evolve | Always check for a generator, even for familiar ecosystems |
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: karashiiro
- Source: karashiiro/agent-skills
- License: Unlicense
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.