{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://mosaicstack.dev/schemas/fleet-roster.schema.json", "title": "Mosaic Fleet Roster", "type": "object", "required": ["version", "transport", "agents"], "additionalProperties": false, "properties": { "version": { "const": 1 }, "transport": { "const": "tmux" }, "tmux": { "type": "object", "additionalProperties": false, "properties": { "socket_name": { "type": "string", "default": "mosaic-fleet" }, "socketName": { "type": "string", "default": "mosaic-fleet" }, "holder_session": { "type": "string", "default": "_holder" }, "holderSession": { "type": "string", "default": "_holder" } } }, "defaults": { "type": "object", "additionalProperties": false, "properties": { "working_directory": { "type": "string", "default": "~/src" }, "workingDirectory": { "type": "string", "default": "~/src" } } }, "runtimes": { "type": "object", "additionalProperties": { "type": "object", "additionalProperties": false, "properties": { "reset_command": { "type": "string" }, "resetCommand": { "type": "string" } } } }, "agents": { "type": "array", "minItems": 1, "items": { "type": "object", "required": ["name", "runtime"], "additionalProperties": false, "properties": { "name": { "type": "string", "pattern": "^[A-Za-z0-9_.-]+$" }, "runtime": { "type": "string" }, "class": { "type": "string" }, "host": { "description": "Host the agent runs on (hostname or IP). Absent = the fleet host. Used by onboarding-injection to render cross-host comms addresses. Manual cross-host listing is a pre-federation stopgap; federation (W1) auto-discovers later.", "type": "string" }, "ssh": { "description": "SSH target (user@host) for a cross-host peer, so onboarding renders the `agent-send.sh -H ` form. Optional; only needed for agents on a different host than the fleet.", "type": "string" }, "socket": { "description": "tmux socket the agent's session runs on. Onboarding renders `-L ` when set; absent = the default socket (no `-L`). Must match the LIVE socket, not blindly inherit the roster's tmux.socket_name.", "type": "string" }, "working_directory": { "type": "string" }, "workingDirectory": { "type": "string" }, "model_hint": { "type": "string" }, "modelHint": { "type": "string" }, "persistent_persona": { "oneOf": [{ "type": "boolean" }, { "type": "string" }] }, "persistentPersona": { "oneOf": [{ "type": "boolean" }, { "type": "string" }] }, "reset_between_tasks": { "type": "boolean" }, "resetBetweenTasks": { "type": "boolean" }, "kickstart_template": { "type": "string" }, "kickstartTemplate": { "type": "string" } } } }, "connector": { "description": "Orchestrator chat connector (F4). Optional — absent means tmux (back-compat). Secrets (access/bot tokens) come from the environment, never this file.", "type": "object", "additionalProperties": false, "required": ["kind"], "properties": { "kind": { "enum": ["tmux", "discord", "matrix"] }, "matrix": { "type": "object", "additionalProperties": false, "required": ["homeserver_url", "user_id", "room_id"], "properties": { "homeserver_url": { "type": "string" }, "user_id": { "type": "string" }, "room_id": { "type": "string" } } }, "discord": { "type": "object", "additionalProperties": false, "required": ["channel_id"], "properties": { "channel_id": { "type": "string" } } } } } } }