# Repo Init

> Initialize a new repository with standard scaffolding - git, gitignore, CLAUDE.md, justfile, mise, and beads. Use when starting a new project or setting up an existing repo for Claude Code workflows.

- Skill: `diegosouzapw/repo-init` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add diegosouzapw/repo-init`
- Raw SKILL.md: https://api.skillmd.com/api/skills/diegosouzapw/repo-init/raw
- Safety review: pending (external: skill-scanner PASS, skillspector CAUTION)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: diegosouzapw (https://skillmd.com/u/diegosouzapw)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/diegosouzapw/repo-init

---


# Repository Initialization

Scaffold a new or existing repository with standard project infrastructure.

**Related skills:**
- **just-pro** - Build system patterns and templates
- **mise** - Tool version management
- **go-pro**, **rust-pro**, **typescript-pro** - Language-specific setup (run after repo-init)

## What This Skill Does

Creates universal scaffolding that works across all project types:

| File | Purpose |
|------|---------|
| `.gitignore` | Standard ignores + language-specific patterns |
| `CLAUDE.md` | Project conventions for Claude Code |
| `justfile` | Build system skeleton |
| `.mise.toml` | Tool version pinning (empty, ready for `mise use`) |
| `.beads/` | Issue tracking database |
| `.envrc.example` | Environment variable template |

## Flow

```
1. Gather context (language, project type)
2. Create scaffolding
3. Initialize beads
4. Point to language skill for next steps
```

---

## Step 1: Gather Context

Before scaffolding, clarify:

1. **Project language(s)**: Go, Rust, TypeScript, Python, or multi-language?
2. **Project type**: Library, CLI, web app, API, monorepo?
3. **Existing files**: Is this a fresh repo or adding to existing code?

Use AskUserQuestion if unclear from context.

---

## Step 2: Git Setup

```bash
# Initialize git if needed
git init

# Create .gitignore with common patterns
```

### .gitignore Templates

Each language skill provides a comprehensive `.gitignore` in its `references/` directory. These include common patterns (`.env`, `.envrc`, `.DS_Store`, `Thumbs.db`, IDE files) plus language-specific ignores.

**Copy from the appropriate language skill:**

| Language | Source |
|----------|--------|
| Go | `go-pro/references/gitignore` → `.gitignore` |
| Rust | `rust-pro/references/gitignore` → `.gitignore` |
| TypeScript | `typescript-pro/references/gitignore` → `.gitignore` |
| Python | `python-pro/references/gitignore` → `.gitignore` |

**For multi-language repos:** Start with the primary language's gitignore, then merge patterns from others as needed.

**Minimal fallback** (if language skill unavailable):

```gitignore
# Environment
.env
.env.local
.env.*.local
.envrc

# OS
.DS_Store
Thumbs.db

# IDE
.idea/
.vscode/

# Build (customize per language)
dist/
build/
target/
node_modules/
__pycache__/
```

---

## Step 3: CLAUDE.md

Create project conventions file for Claude Code:

```markdown
# Project Name - Claude Instructions

## Overview

Brief description of what this project does.

## Development

```bash
just setup    # First-time setup
just check    # Run all quality gates
```

## Conventions

- [Add project-specific patterns here]
- [Coding standards, naming conventions, etc.]

## Architecture

- [Key directories and their purposes]
- [Important abstractions]
```

Keep it minimal initially. Add conventions as they emerge.

---

## Step 4: Justfile Skeleton

```just
# Project Build System
# Usage: just --list

default:
    @just --list

# First-time setup
setup:
    mise trust
    mise install
    @echo "Ready. Run 'just check' to verify."

# Quality gates - add language-specific checks
check:
    @echo "Add fmt, lint, test recipes"

# Remove build artifacts
clean:
    @echo "Add clean commands"
```

For language-specific recipes, see:
- **just-pro** skill references (`package-go.just`, `package-rust.just`, etc.)

---

## Step 5: Mise Configuration

Create empty `.mise.toml` ready for tool pinning:

```toml
[tools]
# Add tools with: mise use <tool>@<version>
# Examples:
# node = "22"
# go = "1.25"
# rust = "1.83"
# just = "latest"
```

---

## Step 6: Beads Initialization

```bash
bd init -q
```

This creates `.beads/` directory with issue tracking database.

For teams, consider:
- `bd init --team` - Interactive team workflow setup
- `bd init --stealth` - Personal use without affecting collaborators

---

## Step 7: Environment Template

Create `.envrc.example` (committed) as template for `.envrc` (gitignored):

```bash
# Copy to .envrc and fill in values
# cp .envrc.example .envrc && direnv allow

# Mise integration
if command -v mise &> /dev/null; then
  eval "$(mise hook-env -s bash)"
fi

# Project-specific environment
# export DATABASE_URL="postgres://localhost/myapp"
# export API_KEY=""
```

---

## Step 8: Next Steps

After scaffolding, point user to language-specific setup:

| Language | Next Step |
|----------|-----------|
| Go | Invoke **go-pro** skill, run `go mod init`, copy `.golangci.yml` |
| Rust | Invoke **rust-pro** skill, run `cargo init`, copy `clippy.toml` |
| TypeScript | Invoke **typescript-pro** skill, run `npm init` |
| Multi-language | Follow each lang skill for respective packages |

---

## Quick Reference

```bash
# Full init sequence
git init
# Create .gitignore, CLAUDE.md, justfile, .mise.toml, .envrc.example
bd init -q
mise use just@latest
# Then follow language skill for specifics
```

## Monorepo Variant

For monorepos, the root gets:
- Root `justfile` with module imports (see just-pro monorepo patterns)
- Root `.mise.toml` with shared tooling
- Single `.beads/` at root

Each package gets:
- Package-local `justfile`
- Language-specific configs (Cargo.toml, package.json, etc.)

