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>
5.1 KiB
Realm CLI
Cross-repo coordination for shared contracts and dependencies.
Quick Start
# 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
# 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
# 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:
# 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:
# 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:
# 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.
# 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:
# 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:
- 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