339 lines
9.9 KiB
Markdown
339 lines
9.9 KiB
Markdown
# Project Bootstrap Guide
|
|
|
|
> Load this guide when setting up a new project for AI-assisted development.
|
|
|
|
## Overview
|
|
|
|
This guide covers how to bootstrap a project so AI agents (Claude, Codex, etc.) can work on it effectively. Proper bootstrapping ensures:
|
|
|
|
1. Agents understand the project structure and conventions
|
|
2. Orchestration works correctly with quality gates
|
|
3. Independent code review and security review are configured
|
|
4. Issue tracking is consistent across projects
|
|
|
|
## Quick Start
|
|
|
|
```bash
|
|
# Automated bootstrap (recommended)
|
|
~/.mosaic/rails/bootstrap/init-project.sh \
|
|
--name "my-project" \
|
|
--type "nestjs-nextjs" \
|
|
--repo "https://git.mosaicstack.dev/owner/repo"
|
|
|
|
# Or manually using templates
|
|
export PROJECT_NAME="My Project"
|
|
export PROJECT_DESCRIPTION="What this project does"
|
|
export TASK_PREFIX="MP"
|
|
envsubst < ~/.mosaic/templates/agent/CLAUDE.md.template > CLAUDE.md
|
|
envsubst < ~/.mosaic/templates/agent/AGENTS.md.template > AGENTS.md
|
|
```
|
|
|
|
---
|
|
|
|
## Step 1: Detect Project Type
|
|
|
|
Check what files exist in the project root to determine the type:
|
|
|
|
| File Present | Project Type | Template |
|
|
|---|---|---|
|
|
| `package.json` + `pnpm-workspace.yaml` + NestJS+Next.js | NestJS + Next.js Monorepo | `projects/nestjs-nextjs/` |
|
|
| `pyproject.toml` + `manage.py` | Django | `projects/django/` |
|
|
| `pyproject.toml` (no Django) | Python (generic) | Generic template |
|
|
| `package.json` (no monorepo) | Node.js (generic) | Generic template |
|
|
| Other | Generic | Generic template |
|
|
|
|
```bash
|
|
# Auto-detect project type
|
|
detect_project_type() {
|
|
if [[ -f "pnpm-workspace.yaml" ]] && [[ -f "turbo.json" ]]; then
|
|
# Check for NestJS + Next.js
|
|
if grep -q "nestjs" package.json 2>/dev/null && grep -q "next" package.json 2>/dev/null; then
|
|
echo "nestjs-nextjs"
|
|
return
|
|
fi
|
|
fi
|
|
if [[ -f "manage.py" ]] && [[ -f "pyproject.toml" ]]; then
|
|
echo "django"
|
|
return
|
|
fi
|
|
if [[ -f "pyproject.toml" ]]; then
|
|
echo "python"
|
|
return
|
|
fi
|
|
if [[ -f "package.json" ]]; then
|
|
echo "nodejs"
|
|
return
|
|
fi
|
|
echo "generic"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Step 2: Create CLAUDE.md
|
|
|
|
The `CLAUDE.md` file is the primary configuration file for AI agents. It tells them everything they need to know about the project.
|
|
|
|
### Using a Tech-Stack Template
|
|
|
|
```bash
|
|
# Set variables
|
|
export PROJECT_NAME="My Project"
|
|
export PROJECT_DESCRIPTION="Multi-tenant SaaS platform"
|
|
export PROJECT_DIR="my-project"
|
|
export REPO_URL="https://git.mosaicstack.dev/owner/repo"
|
|
export TASK_PREFIX="MP"
|
|
|
|
# Use tech-stack-specific template if available
|
|
TYPE=$(detect_project_type)
|
|
TEMPLATE_DIR="$HOME/.mosaic/templates/agent/projects/$TYPE"
|
|
|
|
if [[ -d "$TEMPLATE_DIR" ]]; then
|
|
envsubst < "$TEMPLATE_DIR/CLAUDE.md.template" > CLAUDE.md
|
|
else
|
|
envsubst < "$HOME/.mosaic/templates/agent/CLAUDE.md.template" > CLAUDE.md
|
|
fi
|
|
```
|
|
|
|
### Using the Generic Template
|
|
|
|
```bash
|
|
# Set all required variables
|
|
export PROJECT_NAME="My Project"
|
|
export PROJECT_DESCRIPTION="What this project does"
|
|
export REPO_URL="https://git.mosaicstack.dev/owner/repo"
|
|
export PROJECT_DIR="my-project"
|
|
export SOURCE_DIR="src"
|
|
export CONFIG_FILES="pyproject.toml / package.json"
|
|
export FRONTEND_STACK="N/A"
|
|
export BACKEND_STACK="Python / FastAPI"
|
|
export DATABASE_STACK="PostgreSQL"
|
|
export TESTING_STACK="pytest"
|
|
export DEPLOYMENT_STACK="Docker"
|
|
export BUILD_COMMAND="pip install -e ."
|
|
export TEST_COMMAND="pytest tests/"
|
|
export LINT_COMMAND="ruff check ."
|
|
export TYPECHECK_COMMAND="mypy ."
|
|
export QUALITY_GATES="ruff check . && mypy . && pytest tests/"
|
|
|
|
envsubst < ~/.mosaic/templates/agent/CLAUDE.md.template > CLAUDE.md
|
|
```
|
|
|
|
### Required Sections
|
|
|
|
Every CLAUDE.md should contain:
|
|
|
|
1. **Project description** — One-line summary
|
|
2. **Conditional documentation loading** — Table of guides
|
|
3. **Technology stack** — What's used
|
|
4. **Repository structure** — Directory tree
|
|
5. **Development workflow** — Branch strategy, build, test
|
|
6. **Quality gates** — Commands that must pass
|
|
7. **Issue tracking** — Commit format, labels
|
|
8. **Code review** — Codex and fallback review commands
|
|
9. **Secrets management** — How secrets are handled
|
|
|
|
---
|
|
|
|
## Step 3: Create AGENTS.md
|
|
|
|
The `AGENTS.md` file contains agent-specific patterns, gotchas, and orchestrator integration details.
|
|
|
|
```bash
|
|
TYPE=$(detect_project_type)
|
|
TEMPLATE_DIR="$HOME/.mosaic/templates/agent/projects/$TYPE"
|
|
|
|
if [[ -d "$TEMPLATE_DIR" ]]; then
|
|
envsubst < "$TEMPLATE_DIR/AGENTS.md.template" > AGENTS.md
|
|
else
|
|
envsubst < "$HOME/.mosaic/templates/agent/AGENTS.md.template" > AGENTS.md
|
|
fi
|
|
```
|
|
|
|
### Living Document
|
|
|
|
AGENTS.md is a **living document**. Agents should update it when they discover:
|
|
- Reusable patterns (how similar features are built)
|
|
- Non-obvious requirements (e.g., "frontend env vars need NEXT_PUBLIC_ prefix")
|
|
- Common gotchas (e.g., "run migrations after schema changes")
|
|
- Testing approaches specific to this project
|
|
|
|
---
|
|
|
|
## Step 4: Create Directory Structure
|
|
|
|
```bash
|
|
# Create standard directories
|
|
mkdir -p docs/scratchpads
|
|
mkdir -p docs/templates
|
|
mkdir -p docs/reports
|
|
```
|
|
|
|
---
|
|
|
|
## Step 5: Initialize Repository Labels & Milestones
|
|
|
|
```bash
|
|
# Use the init script
|
|
~/.mosaic/rails/bootstrap/init-repo-labels.sh
|
|
|
|
# Or manually create standard labels
|
|
~/.mosaic/rails/git/issue-create.sh # (labels are created on first use)
|
|
```
|
|
|
|
### Standard Labels
|
|
|
|
| Label | Color | Purpose |
|
|
|-------|-------|---------|
|
|
| `epic` | `#3E4B9E` | Large feature spanning multiple issues |
|
|
| `feature` | `#0E8A16` | New functionality |
|
|
| `bug` | `#D73A4A` | Defect fix |
|
|
| `task` | `#0075CA` | General work item |
|
|
| `documentation` | `#0075CA` | Documentation updates |
|
|
| `security` | `#B60205` | Security-related |
|
|
| `breaking` | `#D93F0B` | Breaking change |
|
|
|
|
### Initial Milestone
|
|
|
|
Create the first milestone for MVP:
|
|
|
|
```bash
|
|
~/.mosaic/rails/git/milestone-create.sh -t "0.1.0" -d "MVP - Minimum Viable Product"
|
|
```
|
|
|
|
---
|
|
|
|
## Step 6: Set Up CI/CD Review Pipeline
|
|
|
|
### Woodpecker CI
|
|
|
|
```bash
|
|
# Copy Codex review pipeline
|
|
mkdir -p .woodpecker/schemas
|
|
cp ~/.mosaic/rails/codex/woodpecker/codex-review.yml .woodpecker/
|
|
cp ~/.mosaic/rails/codex/schemas/*.json .woodpecker/schemas/
|
|
|
|
# Add codex_api_key secret to Woodpecker CI dashboard
|
|
```
|
|
|
|
### GitHub Actions
|
|
|
|
For GitHub repos, use the official Codex GitHub Action instead:
|
|
```yaml
|
|
# .github/workflows/codex-review.yml
|
|
uses: openai/codex-action@v1
|
|
```
|
|
|
|
---
|
|
|
|
## Step 7: Verify Bootstrap
|
|
|
|
After bootstrapping, verify everything works:
|
|
|
|
```bash
|
|
# Check files exist
|
|
ls CLAUDE.md AGENTS.md docs/scratchpads/
|
|
|
|
# Verify CLAUDE.md has required sections
|
|
grep -c "Quality Gates" CLAUDE.md
|
|
grep -c "Technology Stack" CLAUDE.md
|
|
grep -c "Code Review" CLAUDE.md
|
|
|
|
# Verify quality gates run
|
|
eval "$(grep -A1 'Quality Gates' CLAUDE.md | tail -1)"
|
|
|
|
# Test Codex review (if configured)
|
|
~/.mosaic/rails/codex/codex-code-review.sh --help
|
|
```
|
|
|
|
---
|
|
|
|
## Available Templates
|
|
|
|
### Generic Templates
|
|
|
|
| Template | Path | Purpose |
|
|
|----------|------|---------|
|
|
| `CLAUDE.md.template` | `~/.mosaic/templates/agent/` | Generic project CLAUDE.md |
|
|
| `AGENTS.md.template` | `~/.mosaic/templates/agent/` | Generic agent context |
|
|
|
|
### Tech-Stack Templates
|
|
|
|
| Stack | Path | Includes |
|
|
|-------|------|----------|
|
|
| NestJS + Next.js | `~/.mosaic/templates/agent/projects/nestjs-nextjs/` | CLAUDE.md, AGENTS.md |
|
|
| Django | `~/.mosaic/templates/agent/projects/django/` | CLAUDE.md, AGENTS.md |
|
|
|
|
### Orchestrator Templates
|
|
|
|
| Template | Path | Purpose |
|
|
|----------|------|---------|
|
|
| `tasks.md.template` | `~/src/jarvis-brain/docs/templates/orchestrator/` | Task tracking |
|
|
| `orchestrator-learnings.json.template` | `~/src/jarvis-brain/docs/templates/orchestrator/` | Variance tracking |
|
|
| `phase-issue-body.md.template` | `~/src/jarvis-brain/docs/templates/orchestrator/` | Gitea issue body |
|
|
| `scratchpad.md.template` | `~/src/jarvis-brain/docs/templates/` | Per-task working doc |
|
|
|
|
### Variables Reference
|
|
|
|
| Variable | Description | Example |
|
|
|----------|-------------|---------|
|
|
| `${PROJECT_NAME}` | Human-readable project name | "Mosaic Stack" |
|
|
| `${PROJECT_DESCRIPTION}` | One-line description | "Multi-tenant platform" |
|
|
| `${PROJECT_DIR}` | Directory name | "mosaic-stack" |
|
|
| `${PROJECT_SLUG}` | Python package slug | "mosaic_stack" |
|
|
| `${REPO_URL}` | Git remote URL | "https://git.mosaicstack.dev/mosaic/stack" |
|
|
| `${TASK_PREFIX}` | Orchestrator task prefix | "MS" |
|
|
| `${SOURCE_DIR}` | Source code directory | "src" or "apps" |
|
|
| `${QUALITY_GATES}` | Quality gate commands | "pnpm typecheck && pnpm lint && pnpm test" |
|
|
| `${BUILD_COMMAND}` | Build command | "pnpm build" |
|
|
| `${TEST_COMMAND}` | Test command | "pnpm test" |
|
|
| `${LINT_COMMAND}` | Lint command | "pnpm lint" |
|
|
| `${TYPECHECK_COMMAND}` | Type check command | "pnpm typecheck" |
|
|
| `${FRONTEND_STACK}` | Frontend technologies | "Next.js + React" |
|
|
| `${BACKEND_STACK}` | Backend technologies | "NestJS + Prisma" |
|
|
| `${DATABASE_STACK}` | Database technologies | "PostgreSQL" |
|
|
| `${TESTING_STACK}` | Testing technologies | "Vitest + Playwright" |
|
|
| `${DEPLOYMENT_STACK}` | Deployment technologies | "Docker" |
|
|
| `${CONFIG_FILES}` | Key config files | "package.json, tsconfig.json" |
|
|
|
|
---
|
|
|
|
## Bootstrap Scripts
|
|
|
|
### init-project.sh
|
|
|
|
Full project bootstrap with interactive and flag-based modes:
|
|
|
|
```bash
|
|
~/.mosaic/rails/bootstrap/init-project.sh \
|
|
--name "My Project" \
|
|
--type "nestjs-nextjs" \
|
|
--repo "https://git.mosaicstack.dev/owner/repo" \
|
|
--prefix "MP" \
|
|
--description "Multi-tenant platform"
|
|
```
|
|
|
|
### init-repo-labels.sh
|
|
|
|
Initialize standard labels and MVP milestone:
|
|
|
|
```bash
|
|
~/.mosaic/rails/bootstrap/init-repo-labels.sh
|
|
```
|
|
|
|
---
|
|
|
|
## Checklist
|
|
|
|
After bootstrapping, verify:
|
|
|
|
- [ ] `CLAUDE.md` exists with all required sections
|
|
- [ ] `AGENTS.md` exists with patterns and quality gates
|
|
- [ ] `docs/scratchpads/` directory exists
|
|
- [ ] Git labels created (epic, feature, bug, task, etc.)
|
|
- [ ] Initial milestone created (0.1.0 MVP)
|
|
- [ ] Quality gates run successfully
|
|
- [ ] `.env.example` exists (if project uses env vars)
|
|
- [ ] CI/CD pipeline configured (if using Woodpecker/GitHub Actions)
|
|
- [ ] Codex review scripts accessible (`~/.mosaic/rails/codex/`)
|