- Add SOUL.md.template with {{PLACEHOLDERS}} for interactive generation
- Add mosaic-init (bash + PS1) for interactive SOUL.md creation with flag overrides
- Add mosaic launcher (bash + PS1) — unified CLI for claude/opencode/codex with SOUL.md injection
- Add codex runtime adapter (runtime/codex/instructions.md)
- Update runtime adapters (claude, opencode) with SOUL.md read directive
- Update mosaic-link-runtime-assets to push codex adapter to ~/.codex/
- Update installers to prompt for mosaic init when SOUL.md is missing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
119 lines
3.7 KiB
PowerShell
119 lines
3.7 KiB
PowerShell
# mosaic.ps1 — Unified agent launcher and management CLI (Windows)
|
|
#
|
|
# Usage:
|
|
# mosaic claude [args...] Launch Claude Code with SOUL.md injected
|
|
# mosaic opencode [args...] Launch OpenCode
|
|
# mosaic codex [args...] Launch Codex
|
|
# mosaic init [args...] Generate SOUL.md interactively
|
|
# mosaic doctor [args...] Health audit
|
|
# mosaic sync [args...] Sync skills
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
$MosaicHome = if ($env:MOSAIC_HOME) { $env:MOSAIC_HOME } else { Join-Path $env:USERPROFILE ".config\mosaic" }
|
|
$Version = "0.1.0"
|
|
|
|
function Show-Usage {
|
|
Write-Host @"
|
|
mosaic $Version - Unified agent launcher
|
|
|
|
Usage: mosaic <command> [args...]
|
|
|
|
Agent Launchers:
|
|
claude [args...] Launch Claude Code with SOUL.md injected
|
|
opencode [args...] Launch OpenCode
|
|
codex [args...] Launch Codex
|
|
|
|
Management:
|
|
init [args...] Generate SOUL.md (agent identity contract)
|
|
doctor [args...] Audit runtime state and detect drift
|
|
sync [args...] Sync skills from canonical source
|
|
bootstrap <path> Bootstrap a repo with Mosaic standards
|
|
|
|
Options:
|
|
-h, --help Show this help
|
|
-v, --version Show version
|
|
"@
|
|
}
|
|
|
|
function Assert-MosaicHome {
|
|
if (-not (Test-Path $MosaicHome)) {
|
|
Write-Host "[mosaic] ERROR: ~/.config/mosaic not found." -ForegroundColor Red
|
|
Write-Host "[mosaic] Install with: irm https://git.mosaicstack.dev/mosaic/bootstrap/raw/branch/main/remote-install.ps1 | iex"
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
function Assert-Soul {
|
|
$soulPath = Join-Path $MosaicHome "SOUL.md"
|
|
if (-not (Test-Path $soulPath)) {
|
|
Write-Host "[mosaic] SOUL.md not found. Running mosaic init..."
|
|
& (Join-Path $MosaicHome "bin\mosaic-init.ps1")
|
|
}
|
|
}
|
|
|
|
function Assert-Runtime {
|
|
param([string]$Cmd)
|
|
if (-not (Get-Command $Cmd -ErrorAction SilentlyContinue)) {
|
|
Write-Host "[mosaic] ERROR: '$Cmd' not found in PATH." -ForegroundColor Red
|
|
Write-Host "[mosaic] Install $Cmd before launching."
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
if ($args.Count -eq 0) {
|
|
Show-Usage
|
|
exit 0
|
|
}
|
|
|
|
$command = $args[0]
|
|
$remaining = if ($args.Count -gt 1) { $args[1..($args.Count - 1)] } else { @() }
|
|
|
|
switch ($command) {
|
|
"claude" {
|
|
Assert-MosaicHome
|
|
Assert-Soul
|
|
Assert-Runtime "claude"
|
|
$soulFile = Join-Path $MosaicHome "SOUL.md"
|
|
Write-Host "[mosaic] Launching Claude Code with SOUL.md injection..."
|
|
& claude --append-system-prompt-file $soulFile @remaining
|
|
}
|
|
"opencode" {
|
|
Assert-MosaicHome
|
|
Assert-Soul
|
|
Assert-Runtime "opencode"
|
|
Write-Host "[mosaic] Launching OpenCode..."
|
|
& opencode @remaining
|
|
}
|
|
"codex" {
|
|
Assert-MosaicHome
|
|
Assert-Soul
|
|
Assert-Runtime "codex"
|
|
Write-Host "[mosaic] Launching Codex..."
|
|
& codex @remaining
|
|
}
|
|
"init" {
|
|
Assert-MosaicHome
|
|
& (Join-Path $MosaicHome "bin\mosaic-init.ps1") @remaining
|
|
}
|
|
"doctor" {
|
|
Assert-MosaicHome
|
|
& (Join-Path $MosaicHome "bin\mosaic-doctor.ps1") @remaining
|
|
}
|
|
"sync" {
|
|
Assert-MosaicHome
|
|
& (Join-Path $MosaicHome "bin\mosaic-sync-skills.ps1") @remaining
|
|
}
|
|
"bootstrap" {
|
|
Assert-MosaicHome
|
|
Write-Host "[mosaic] NOTE: mosaic-bootstrap-repo requires bash. Use Git Bash or WSL." -ForegroundColor Yellow
|
|
& (Join-Path $MosaicHome "bin\mosaic-bootstrap-repo") @remaining
|
|
}
|
|
{ $_ -in "-h", "--help" } { Show-Usage }
|
|
{ $_ -in "-v", "--version" } { Write-Host "mosaic $Version" }
|
|
default {
|
|
Write-Host "[mosaic] Unknown command: $command" -ForegroundColor Red
|
|
Write-Host "[mosaic] Run 'mosaic --help' for usage."
|
|
exit 1
|
|
}
|
|
}
|