49 lines
1.8 KiB
Markdown
49 lines
1.8 KiB
Markdown
---
|
|
title: "Monorepo / Multi-Project Setup"
|
|
description: Run multiple independent projects within a single BMAD installation
|
|
sidebar:
|
|
order: 8
|
|
---
|
|
|
|
# Monorepo / Multi-Project Setup
|
|
|
|
BMAD supports running multiple independent projects within a single installation. This is useful for monorepos, multi-app repositories, or any workspace where you want isolated artifact directories per project.
|
|
|
|
## How It Works
|
|
|
|
A `.current_project` file in your `_bmad/` directory stores the active project name. This file is mutable local state: it should never be committed, because committing it can silently flip the active project context for other contributors and CI. Add `_bmad/.current_project` to your VCS ignore file, for example `.gitignore`. When set, all artifact output paths are redirected to project-specific subdirectories.
|
|
|
|
## Quick Start
|
|
|
|
1. List existing projects by invoking `skill:bmad-project-list`
|
|
2. Create a new project by invoking `skill:bmad-project-new` with a project name
|
|
3. Switch to an existing project by invoking `skill:bmad-project-switch` with a project name
|
|
4. Clear project context by invoking `skill:bmad-project-switch` and entering `CLEAR`
|
|
|
|
## Directory Structure
|
|
|
|
When a project context is active, for example `my-app`:
|
|
|
|
- `_bmad-output/my-app/planning-artifacts/` for PRDs, briefs, UX designs
|
|
- `_bmad-output/my-app/implementation-artifacts/` for sprint plans and stories
|
|
- `_bmad-output/my-app/knowledge/` for long-term project knowledge
|
|
|
|
## Inline Overrides
|
|
|
|
Temporarily target a different project without changing the global context:
|
|
|
|
- `#project:my-app`
|
|
- `#p:my-app`
|
|
|
|
**Precedence:**
|
|
|
|
1. Inline override (`#p:NAME`) — highest priority
|
|
2. Global context file (`.current_project`)
|
|
3. Default config paths
|
|
|
|
## Security
|
|
|
|
- Path traversal (`..`) is rejected
|
|
- Absolute paths are rejected
|
|
- Only alphanumeric characters, dots, dashes, and underscores are allowed
|