home / skills / laurigates / claude-plugins / project-init

This skill initializes a universal project scaffold with optional GitHub repo, language-specific setup, and baseline CI/CD and tooling.

npx playbooks add skill laurigates/claude-plugins --skill project-init

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
4.1 KB
---
model: opus
created: 2025-12-16
modified: 2025-12-16
reviewed: 2025-12-16
allowed-tools: Write, Bash(mkdir *), Bash(git init *), Bash(gh repo create *), Bash(pwd *), Bash(git config *), Bash(which *), SlashCommand, TodoWrite
argument-hint: <project-name> [project-type] [--github] [--private]
description: Base project initialization that other commands can extend for language-specific setup
name: project-init
---

## Context

- Current directory: !`pwd`
- Git user: !`git config user.name`
- GitHub CLI: !`which gh`

## Parameters

- `$1`: Project name (required)
- `$2`: Project type (python|node|rust|go|generic) - defaults to generic
- `$3`: --github flag to create GitHub repository
- `$4`: --private flag for private repository

## Base Project Structure

Create universal project structure that all projects need:

### 1. Core Directories
```bash
mkdir -p $1/{src,tests,docs,.github/workflows}
cd $1
```

### 2. Git Setup
```bash
git init
```

### 3. Base Documentation

**README.md:**
```markdown
# $1

## Description
[Project description]

## Installation
See [Installation Guide](docs/installation.md)

## Usage
See [Usage Guide](docs/usage.md)

## Development
See [Development Guide](docs/development.md)

## License
MIT
```

**LICENSE:**
Create standard MIT license file

**.gitignore:**
Create with common patterns for all languages

### 4. EditorConfig
**.editorconfig:**
```ini
root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.{py,rs,go}]
indent_size = 4

[*.md]
trim_trailing_whitespace = false
```

### 5. Pre-commit Base Config
**.pre-commit-config.yaml:**
```yaml
repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.6.0
    hooks:
      - id: trailing-whitespace
      - id: end-of-file-fixer
      - id: check-yaml
      - id: check-json
      - id: check-merge-conflict
      - id: detect-private-key
```

### 6. GitHub Actions Base

**.github/workflows/ci.yml:**
```yaml
name: CI

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run linters
        run: echo "Linting step - configure based on project type"

  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run tests
        run: echo "Testing step - configure based on project type"
```

### 7. Makefile Base

Create universal Makefile with colored output:
```makefile
.PHONY: help install test lint format clean

help:
	@echo "Available commands:"
	@echo "  make install - Install dependencies"
	@echo "  make test    - Run tests"
	@echo "  make lint    - Run linters"
	@echo "  make format  - Format code"
	@echo "  make clean   - Clean build artifacts"

install:
	@echo "Installing dependencies..."

test:
	@echo "Running tests..."

lint:
	@echo "Running linters..."

format:
	@echo "Formatting code..."

clean:
	@echo "Cleaning..."
```

## Language-Specific Setup

Based on project type, delegate to specialized setup:

{{ if $2 == "python" }}
Use SlashCommand: `/setup:new-project python`
{{ elif $2 == "node" }}
Use SlashCommand: `/setup:new-project node`
{{ elif $2 == "rust" }}
Use SlashCommand: `/setup:new-project rust`
{{ elif $2 == "go" }}
Use SlashCommand: `/setup:new-project go`
{{ else }}
# Generic project - base structure only
{{ endif }}

## GitHub Repository Creation

{{ if $3 == "--github" }}
Create GitHub repository:
```bash
gh repo create $1 ${4:+--private} --public --clone
git remote add origin https://github.com/$(gh api user -q .login)/$1.git
```
{{ endif }}

## Final Steps

1. Initialize git hooks: `pre-commit install`
2. Make initial commit: Use SlashCommand: `/git:smartcommit "Initial project structure"`
3. Set up CI/CD: Configure based on project type
4. Install dependencies: Use SlashCommand: `/deps:install`

## Next Steps Suggestions

Suggest relevant commands based on project type:
- `/test:setup` - Set up testing infrastructure
- `/docs:docs` - Generate documentation
- `/lint:check` - Verify code quality
- `/github:quickpr` - Create first PR

Overview

This skill provides a base project initialization that other commands can extend for language-specific setup. It scaffolds a minimal, consistent repository layout, common config files, and CI/automation stubs so teams start projects with best practices. The initializer supports optional GitHub repo creation and flags for repository visibility.

How this skill works

Invoke the script with a project name and optional type (python|node|rust|go|generic) and flags for GitHub and privacy. It creates core directories, initializes git, writes README, LICENSE, .gitignore, EditorConfig, pre-commit config, a CI workflow, and a Makefile. For language-specific projects it delegates to specialized setup commands; for GitHub requests it uses the GH CLI to create the remote repository.

When to use it

  • Starting a new repository to ensure consistent layout across projects
  • Bootstrapping a mono-repo subproject or single-service repo quickly
  • Standardizing CI, pre-commit hooks, and basic dev tooling
  • Creating a GitHub repository and local remote in one step
  • Preparing a repository before adding language-specific configs

Best practices

  • Run the initializer from the parent directory where you want the project folder created
  • Pass an explicit project type when you want additional language setup (python/node/rust/go)
  • Install and authenticate GitHub CLI before using the --github flag
  • Review generated CI and Makefile stubs and adapt commands to your toolchain
  • Run pre-commit install and make an initial commit immediately after scaffolding

Example use cases

  • Create a new Python library: project-init mylib python --github --private
  • Bootstrap a Node microservice locally without a remote: project-init api node
  • Start a generic utility repo with standard docs and CI stubs: project-init utils
  • Initialize a Rust CLI with base project layout and then run the Rust setup command
  • Quickly create a repo skeleton for a team to start collaborating with enforced hooks

FAQ

What arguments are required?

Provide the project name as the first argument. Project type and GitHub flags are optional.

How do I create the GitHub repo?

Use the --github flag. The GH CLI must be installed and authenticated; you can add --private to make it private.

Does it install language dependencies?

No. Dependency installation is delegated to a separate command; the initializer focuses on structure and tooling stubs.