blue/docs/cli/realm.md
Eric Garcia daaaea5c82 feat(realm): Implement RFC 0001 cross-repo coordination and RFC 0002 Phase 1 MCP tools
RFC 0001 - Cross-Repo Coordination with Realms:
- Daemon architecture with HTTP server on localhost:7865
- SQLite persistence for sessions, realms, notifications
- Realm service with git-based storage and caching
- CLI commands: realm status/sync/check/worktree/pr/admin
- Session coordination for multi-repo work

RFC 0002 Phase 1 - Realm MCP Integration:
- realm_status: Get realm overview (repos, domains, contracts)
- realm_check: Validate contracts/bindings with errors/warnings
- contract_get: Get contract details with bindings
- Context detection from .blue/config.yaml
- 98% expert panel alignment via 12-expert dialogue

Also includes:
- CLI documentation in docs/cli/
- Spike for Forgejo tunnelless access
- 86 tests passing

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 07:14:35 -05:00

203 lines
5.1 KiB
Markdown

# Realm CLI
Cross-repo coordination for shared contracts and dependencies.
## Quick Start
```bash
# 1. Create a realm
blue realm admin init --name mycompany
# 2. Join repos to the realm (run in each repo)
cd ~/projects/api-server
blue realm admin join mycompany
cd ~/projects/web-client
blue realm admin join mycompany
# 3. Create a domain for coordination
blue realm admin domain --realm mycompany --name api-types --repos api-server,web-client
# 4. Define a contract (owned by api-server)
blue realm admin contract --realm mycompany --domain api-types --name user-schema --owner api-server
# 5. Create bindings
blue realm admin binding --realm mycompany --domain api-types --repo api-server --role provider
blue realm admin binding --realm mycompany --domain api-types --repo web-client --role consumer
# 6. Check everything is valid
blue realm check
```
## Concepts
**Realm** - A coordination space for multiple repos. Think of it as a shared namespace.
**Domain** - A specific area of coordination within a realm. Example: "api-types", "s3-access", "config-schemas".
**Contract** - A versioned schema or value that one repo exports and others import. Has a single owner who can modify it.
**Binding** - Declares a repo's relationship to a domain: provider (exports contracts), consumer (imports), or both.
## Commands
### Status & Validation
```bash
# Show realm status - repos, domains, contracts, bindings
blue realm status
# Validate all contracts and bindings
blue realm check
# Check specific realm with strict mode (fail on warnings)
blue realm check --realm mycompany --strict
# Sync pending changes to realm repo
blue realm sync
```
### Administration
```bash
# Initialize a new realm
blue realm admin init --name <name> [--forgejo <url>]
# Join current repo to a realm
blue realm admin join <realm-name> [--repo <name>]
# Create a domain
blue realm admin domain --realm <realm> --name <domain> --repos <repo1,repo2,...>
# Create a contract
blue realm admin contract --realm <realm> --domain <domain> --name <contract> --owner <repo>
# Create a binding
blue realm admin binding --realm <realm> --domain <domain> --repo <repo> --role <provider|consumer|both>
```
### Worktree Management
For working on changes across multiple repos simultaneously:
```bash
# Create worktrees for an RFC (creates branch + worktree in each repo)
blue realm worktree create --rfc rfc-0042-new-api
# List active worktrees
blue realm worktree list
# Remove worktrees when done
blue realm worktree remove --rfc rfc-0042-new-api
```
### PR Workflow
Coordinate PRs across multiple repos:
```bash
# Check PR status across repos
blue realm pr status --rfc rfc-0042-new-api
# Commit uncommitted changes in all worktrees
blue realm pr prepare --rfc rfc-0042-new-api --message "Implement new API"
```
### Sessions
Track active work across repos:
```bash
# Start a work session (run in repo directory)
blue session start --rfc rfc-0042-new-api
# List active sessions
blue session list
# Check session status
blue session status
# End session
blue session stop
```
## Directory Structure
```
~/.blue/
├── daemon.db # Session and notification state
└── realms/
└── mycompany/ # Realm repo (git)
├── realm.yaml # Realm config
├── repos/
│ ├── api-server.yaml
│ └── web-client.yaml
└── domains/
└── api-types/
├── domain.yaml
├── contracts/
│ └── user-schema.yaml
└── bindings/
├── api-server.yaml
└── web-client.yaml
```
Each repo that joins a realm gets:
```
my-repo/
└── .blue/
├── config.yaml # Realm membership
└── session # Active session ID (if any)
```
## Example: S3 Access Coordination
Two repos need to coordinate S3 bucket access - one defines paths, the other consumes them.
```bash
# Setup
blue realm admin init --name letemcook
blue realm admin domain --realm letemcook --name s3-access --repos aperture,fungal
blue realm admin contract --realm letemcook --domain s3-access --name s3-permissions --owner aperture
blue realm admin binding --realm letemcook --domain s3-access --repo aperture --role provider
blue realm admin binding --realm letemcook --domain s3-access --repo fungal --role consumer
# Aperture exports paths it uses
# (edit ~/.blue/realms/letemcook/domains/s3-access/contracts/s3-permissions.yaml)
# Fungal imports those paths for IAM policies
# (its binding declares the import)
# Validate
blue realm check
```
## Daemon
The daemon tracks sessions and notifications. Start it before using session commands:
```bash
# Start daemon (foreground)
blue daemon start
# Check if running
blue daemon status
```
The daemon runs on `localhost:7865` and stores state in `~/.blue/daemon.db`.
## CI Integration
Add to your CI pipeline:
```yaml
- name: Check realm contracts
run: blue realm check --strict
```
This validates:
- All contracts have valid semver versions
- All bindings reference existing contracts
- Import version requirements are satisfied
- No broken imports