# Mosaic Stack Self-hosted, multi-user AI agent platform. One config, every runtime, same standards. Mosaic gives you a unified launcher for Claude Code, Codex, OpenCode, and Pi — injecting consistent system prompts, guardrails, skills, and mission context into every session. A NestJS gateway provides the API surface, a Next.js dashboard gives you the UI, and a plugin system connects Discord, Telegram, and more. ## Quick Install ```bash curl -fsSL https://mosaicstack.dev/install.sh | bash ``` Or use the direct URL: ```bash bash <(curl -fsSL https://git.mosaicstack.dev/mosaicstack/stack/raw/branch/main/tools/install.sh) ``` The installer auto-launches the setup wizard, which walks you through gateway install and verification. Flags for non-interactive use: ```bash bash <(curl -fsSL …) --yes # Accept all defaults bash <(curl -fsSL …) --yes --no-auto-launch # Install only, skip wizard ``` This installs both components: | Component | What | Where | | ----------------------- | ---------------------------------------------------------------- | -------------------- | | **Framework** | Bash launcher, guides, runtime configs, tools, skills | `~/.config/mosaic/` | | **@mosaicstack/mosaic** | Unified `mosaic` CLI — TUI, gateway client, wizard, auto-updater | `~/.npm-global/bin/` | After install, the wizard runs automatically or you can invoke it manually: ```bash mosaic wizard # Full guided setup (gateway install → verify) ``` ### Requirements - Node.js ≥ 20 - npm (for global @mosaicstack/mosaic install) - One or more runtimes: [Claude Code](https://docs.anthropic.com/en/docs/claude-code), [Codex](https://github.com/openai/codex), [OpenCode](https://opencode.ai), or [Pi](https://github.com/mariozechner/pi-coding-agent) ## Usage ### Launching Agent Sessions ```bash mosaic pi # Launch Pi with Mosaic injection mosaic claude # Launch Claude Code with Mosaic injection mosaic codex # Launch Codex with Mosaic injection mosaic opencode # Launch OpenCode with Mosaic injection mosaic yolo claude # Claude with dangerous-permissions mode mosaic yolo pi # Pi in yolo mode ``` The launcher verifies your config, checks for `SOUL.md`, injects your `AGENTS.md` standards into the runtime, and forwards all arguments. ### TUI & Gateway ```bash mosaic tui # Interactive TUI connected to the gateway mosaic gateway login # Authenticate with a gateway instance mosaic sessions list # List active agent sessions ``` ### Gateway Management ```bash mosaic gateway install # Install and configure the gateway service mosaic gateway verify # Post-install health check mosaic gateway login # Authenticate and store a session token mosaic gateway config rotate-token # Rotate your API token mosaic gateway config recover-token # Recover a token via BetterAuth cookie ``` If you already have a gateway account but no token, use `mosaic gateway config recover-token` to retrieve one without recreating your account. ### Configuration ```bash mosaic config show # Print full config as JSON mosaic config get # Read a specific key mosaic config set # Write a key mosaic config edit # Open config in $EDITOR mosaic config path # Print config file path ``` ### Management ```bash mosaic doctor # Health audit — detect drift and missing files mosaic sync # Sync skills from canonical source mosaic update # Check for and install CLI updates mosaic wizard # Full guided setup wizard mosaic bootstrap # Bootstrap a repo with Mosaic standards mosaic coord init # Initialize a new orchestration mission mosaic prdy init # Create a PRD via guided session ``` ### Sub-package Commands Each Mosaic sub-package exposes its API surface through the unified CLI: ```bash # User management mosaic auth users list mosaic auth users create mosaic auth sso # Agent brain (projects, missions, tasks) mosaic brain projects mosaic brain missions mosaic brain tasks mosaic brain conversations # Agent forge pipeline mosaic forge run mosaic forge status mosaic forge resume mosaic forge personas # Structured logging mosaic log tail mosaic log search mosaic log export mosaic log level # MACP protocol mosaic macp tasks mosaic macp submit mosaic macp gate mosaic macp events # Agent memory mosaic memory search mosaic memory stats mosaic memory insights mosaic memory preferences # Task queue (Valkey) mosaic queue list mosaic queue stats mosaic queue pause mosaic queue resume mosaic queue jobs mosaic queue drain # Object storage mosaic storage status mosaic storage tier mosaic storage export mosaic storage import mosaic storage migrate ``` ### Telemetry ```bash # Local observability (OTEL / Jaeger) mosaic telemetry local status mosaic telemetry local tail mosaic telemetry local jaeger # Remote telemetry (dry-run by default) mosaic telemetry status mosaic telemetry opt-in mosaic telemetry opt-out mosaic telemetry test mosaic telemetry upload # Dry-run unless opted in ``` Consent state is persisted in config. Remote upload is a no-op until you run `mosaic telemetry opt-in`. ## Development ### Prerequisites - Node.js ≥ 20 - pnpm 10.6+ - Docker & Docker Compose ### Setup ```bash git clone git@git.mosaicstack.dev:mosaicstack/stack.git cd stack # Start infrastructure (Postgres, Valkey, Jaeger) docker compose up -d # Install dependencies pnpm install # Run migrations pnpm --filter @mosaicstack/db run db:migrate # Start all services in dev mode pnpm dev ``` ### Infrastructure Docker Compose provides: | Service | Port | Purpose | | --------------------- | --------- | ---------------------- | | PostgreSQL (pgvector) | 5433 | Primary database | | Valkey | 6380 | Task queue + caching | | Jaeger | 16686 | Distributed tracing UI | | OTEL Collector | 4317/4318 | Telemetry ingestion | ### Quality Gates ```bash pnpm typecheck # TypeScript type checking (all packages) pnpm lint # ESLint (all packages) pnpm test # Vitest (all packages) pnpm format:check # Prettier check pnpm format # Prettier auto-fix ``` ### CI Woodpecker CI runs on every push: - `pnpm install --frozen-lockfile` - Database migration against a fresh Postgres - `pnpm test` (Turbo-orchestrated across all packages) npm packages are published to the Gitea package registry on main merges. ## Architecture ``` stack/ ├── apps/ │ ├── gateway/ NestJS API + WebSocket hub (Fastify, Socket.IO, OTEL) │ └── web/ Next.js dashboard (React 19, Tailwind) ├── packages/ │ ├── mosaic/ Unified CLI — TUI, gateway client, wizard, sub-package commands │ ├── types/ Shared TypeScript contracts (Socket.IO typed events) │ ├── db/ Drizzle ORM schema + migrations (pgvector) │ ├── auth/ BetterAuth configuration │ ├── brain/ Data layer (PG-backed) │ ├── queue/ Valkey task queue + MCP │ ├── coord/ Mission coordination │ ├── forge/ Multi-stage AI pipeline (intake → board → plan → code → review) │ ├── macp/ MACP protocol — credential resolution, gate runner, events │ ├── agent/ Agent session management │ ├── memory/ Agent memory layer │ ├── log/ Structured logging │ ├── prdy/ PRD creation and validation │ ├── quality-rails/ Quality templates (TypeScript, Next.js, monorepo) │ └── design-tokens/ Shared design tokens ├── plugins/ │ ├── discord/ Discord channel plugin (discord.js) │ ├── telegram/ Telegram channel plugin (Telegraf) │ ├── macp/ OpenClaw MACP runtime plugin │ └── mosaic-framework/ OpenClaw framework injection plugin ├── tools/ │ └── install.sh Unified installer (framework + npm CLI, --yes / --no-auto-launch) ├── scripts/agent/ Agent session lifecycle scripts ├── docker-compose.yml Dev infrastructure └── .woodpecker/ CI pipeline configs ``` ### Key Design Decisions - **Gateway is the single API surface** — all clients (TUI, web, Discord, Telegram) connect through it - **ESM everywhere** — `"type": "module"`, `.js` extensions in imports, NodeNext resolution - **Socket.IO typed events** — defined in `@mosaicstack/types`, enforced at compile time - **OTEL auto-instrumentation** — loads before NestJS bootstrap - **Explicit `@Inject()` decorators** — required since tsx/esbuild doesn't emit decorator metadata ### Framework (`~/.config/mosaic/`) The framework is the bash-based standards layer installed to every developer machine: ``` ~/.config/mosaic/ ├── AGENTS.md ← Central standards (loaded into every runtime) ├── SOUL.md ← Agent identity (name, style, guardrails) ├── USER.md ← User profile (name, timezone, preferences) ├── TOOLS.md ← Machine-level tool reference ├── bin/mosaic ← Unified launcher (claude, codex, opencode, pi, yolo) ├── guides/ ← E2E delivery, orchestrator protocol, PRD, etc. ├── runtime/ ← Per-runtime configs (claude/, codex/, opencode/, pi/) ├── skills/ ← Universal skills (synced from agent-skills repo) ├── tools/ ← Tool suites (orchestrator, git, quality, prdy, etc.) └── memory/ ← Persistent agent memory (preserved across upgrades) ``` ### Forge Pipeline Forge is a multi-stage AI pipeline for autonomous feature delivery: ``` Intake → Discovery → Board Review → Planning (3 stages) → Coding → Review → Remediation → Test → Deploy ``` Each stage has a dispatch mode (`exec` for research/review, `yolo` for coding), quality gates, and timeouts. The board review uses multiple AI personas (CEO, CTO, CFO, COO + specialists) to evaluate briefs before committing resources. ## Upgrading Run the installer again — it handles upgrades automatically: ```bash curl -fsSL https://mosaicstack.dev/install.sh | bash ``` Or use the direct URL: ```bash bash <(curl -fsSL https://git.mosaicstack.dev/mosaicstack/stack/raw/branch/main/tools/install.sh) ``` Or use the CLI: ```bash mosaic update # Check + install CLI updates mosaic update --check # Check only, don't install ``` The CLI also performs a background update check on every invocation (cached for 1 hour). ### Installer Flags ```bash bash tools/install.sh --check # Version check only bash tools/install.sh --framework # Framework only (skip npm CLI) bash tools/install.sh --cli # npm CLI only (skip framework) bash tools/install.sh --ref v1.0 # Install from a specific git ref bash tools/install.sh --yes # Non-interactive, accept all defaults bash tools/install.sh --no-auto-launch # Skip auto-launch of wizard ``` ## Contributing ```bash # Create a feature branch git checkout -b feat/my-feature # Make changes, then verify pnpm typecheck && pnpm lint && pnpm test && pnpm format:check # Commit (husky runs lint-staged automatically) git commit -m "feat: description of change" # Push and create PR git push -u origin feat/my-feature ``` DTOs go in `*.dto.ts` files at module boundaries. Scratchpads (`docs/scratchpads/`) are mandatory for non-trivial tasks. See `AGENTS.md` for the full standards reference. ## License Proprietary — all rights reserved.