Skip to content

Configuration Guide

This guide explains how to use YAML configuration for managing multiple projects and monorepos.

Overview

The YAML configuration system allows you to:

  • Define multiple projects in a single file
  • Configure monorepos with different technologies per module
  • Automate installation across all your projects
  • Share configuration with your team

Configuration File

Location

Create your configuration file at the project root:

claude-projects.yaml

A template is provided:

bash
cp claude-projects.yaml.example claude-projects.yaml

Basic Structure

yaml
# Optional global settings
settings:
  default_lang: "en"      # Default language (en, fr, es, de, pt)
  rules_source: ""        # Custom rules source directory
  default_mode: "install" # install, update, or force
  backup: true            # Create backups by default

# Project definitions
projects:
  - name: "project-name"
    description: "Project description"
    root: "~/path/to/project"
    lang: "fr"            # Override default language (optional)
    common: true          # Install common rules at root
    modules:
      - path: "subdir"
        tech: technology
        description: "Module description"

Project Configuration

Required Fields

FieldTypeDescription
namestringUnique project identifier
rootstringAbsolute path to project (supports ~)
modulesarrayList of technology modules

Optional Fields

FieldTypeDefaultDescription
descriptionstring-Project description
langstringsettings.default_langLanguage for rules (en, fr, es, de, pt)
commonbooleantrueInstall common rules at root

Module Configuration

FieldTypeRequiredDescription
pathstringYesRelative path from root (use . for root)
techstringYesTechnology identifier
descriptionstringNoModule description

Supported Technologies

Tech IDDescription
symfonyPHP backend with Symfony
flutterMobile app with Flutter/Dart
pythonPython backend/API
reactReact frontend
reactnativeReact Native mobile

Supported Languages

Lang IDLanguage
enEnglish (default)
frFrench
esSpanish
deGerman
ptPortuguese

Examples

Simple Single-Technology Project

yaml
projects:
  - name: "my-api"
    root: "~/Projects/my-api"
    common: true
    modules:
      - path: "."
        tech: symfony

Result:

~/Projects/my-api/
└── .claude/
    ├── agents/           # Common + Symfony agents
    ├── commands/
    │   ├── common/       # /common: commands
    │   └── symfony/      # /symfony: commands
    ├── rules/            # Symfony rules
    ├── templates/
    └── checklists/

Monorepo with Multiple Technologies

yaml
projects:
  - name: "ecommerce-platform"
    description: "Full-stack e-commerce platform"
    root: "~/Projects/ecommerce"
    common: true
    modules:
      - path: "frontend"
        tech: react
        description: "Next.js storefront"
      - path: "admin"
        tech: react
        description: "Admin dashboard"
      - path: "api"
        tech: symfony
        description: "REST API with API Platform"
      - path: "mobile"
        tech: reactnative
        description: "Customer mobile app"

Result:

~/Projects/ecommerce/
├── .claude/
│   ├── agents/           # 7 common agents
│   └── commands/common/  # 14 /common: commands
├── frontend/
│   └── .claude/
│       ├── agents/       # React agent
│       └── commands/react/
├── admin/
│   └── .claude/
│       ├── agents/       # React agent
│       └── commands/react/
├── api/
│   └── .claude/
│       ├── agents/       # Symfony agent
│       └── commands/symfony/
└── mobile/
    └── .claude/
        ├── agents/       # ReactNative agent
        └── commands/reactnative/

SaaS Platform with Microservices

yaml
settings:
  default_lang: "en"

projects:
  - name: "saas-platform"
    description: "Multi-tenant SaaS platform"
    root: "~/Projects/saas"
    lang: "de"      # German rules for this project
    common: true
    modules:
      # Frontend apps
      - path: "apps/web"
        tech: react
        description: "Main web application"
      - path: "apps/admin"
        tech: react
        description: "Administration panel"
      - path: "apps/mobile"
        tech: flutter
        description: "Cross-platform mobile app"

      # Backend services
      - path: "services/api-gateway"
        tech: symfony
        description: "API Gateway"
      - path: "services/auth"
        tech: python
        description: "Authentication service"
      - path: "services/billing"
        tech: python
        description: "Billing and subscriptions"
      - path: "services/notifications"
        tech: python
        description: "Email and push notifications"

Multiple Independent Projects

yaml
projects:
  - name: "client-a-website"
    root: "~/Clients/client-a/website"
    common: true
    modules:
      - path: "."
        tech: react

  - name: "client-b-api"
    root: "~/Clients/client-b/api"
    common: true
    modules:
      - path: "."
        tech: symfony

  - name: "internal-tools"
    root: "~/Projects/internal"
    common: false  # No common rules needed
    modules:
      - path: "scripts"
        tech: python

Project Without Common Rules

yaml
projects:
  - name: "simple-script"
    root: "~/Scripts/data-processor"
    common: false  # Skip common rules
    modules:
      - path: "."
        tech: python

Usage

Validate Configuration

Always validate before installing:

bash
make config-validate CONFIG=claude-projects.yaml

Output:

──────────────────────────────────────────────────────────────
Validation de la configuration
──────────────────────────────────────────────────────────────
ℹ Fichier: Dev/claude-projects.yaml

✓ Syntaxe YAML valide
✓ 3 projet(s) défini(s)

ℹ Projet: ecommerce-platform
→   Root: /home/user/Projects/ecommerce
→   Modules: 4
✓     frontend → react
✓     admin → react
✓     api → symfony
✓     mobile → reactnative

✓ Configuration valide

List Projects

bash
make config-list CONFIG=claude-projects.yaml

Install Specific Project

bash
make config-install PROJECT=ecommerce-platform CONFIG=claude-projects.yaml

Install All Projects

bash
make config-install-all CONFIG=claude-projects.yaml

Dry Run

bash
# Single project
make config-dry-run PROJECT=ecommerce-platform CONFIG=claude-projects.yaml

# All projects
make config-dry-run CONFIG=claude-projects.yaml

Direct Script Usage

You can also use the script directly:

bash
# List projects
./Dev/scripts/install-from-config.sh --list claude-projects.yaml

# Validate
./Dev/scripts/install-from-config.sh --validate claude-projects.yaml

# Install
./Dev/scripts/install-from-config.sh --project ecommerce-platform claude-projects.yaml

# Dry run
./Dev/scripts/install-from-config.sh --dry-run --project ecommerce-platform claude-projects.yaml

# Force with backup
./Dev/scripts/install-from-config.sh --force --backup --project ecommerce-platform claude-projects.yaml

Validation Rules

The configuration is validated for:

CheckDescription
YAML syntaxFile must be valid YAML
Required fieldsname, root, modules must exist
Unique namesNo duplicate project names
Valid technologiesMust be one of: symfony, flutter, python, react, reactnative
Valid languagesMust be one of: en, fr, es, de, pt
Module pathsMust have path and tech

Best Practices

1. Use Descriptive Names

yaml
# Good
- name: "ecommerce-frontend"
  description: "Next.js storefront with SSR"

# Avoid
- name: "proj1"

2. Organize by Domain

yaml
modules:
  # Group related modules
  - path: "apps/customer-web"
  - path: "apps/customer-mobile"
  - path: "services/customer-api"

3. Version Control

Add your configuration to git:

bash
git add claude-projects.yaml
git commit -m "Add Claude Code rules configuration"

4. Team Sharing

Share the config file with your team so everyone has consistent rules:

bash
# After cloning the project
make config-install PROJECT=our-project

Troubleshooting

"yq not found"

Install yq:

bash
sudo apt install yq  # Debian/Ubuntu
brew install yq      # macOS

"Project not found"

Check the project name matches exactly:

bash
make config-list CONFIG=claude-projects.yaml

"Invalid technology"

Use only supported technologies:

  • symfony
  • flutter
  • python
  • react
  • reactnative