{ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Meta Configuration", "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier for the configuration." }, "name": { "type": "string", "description": "The name of the configuration." }, "version": { "type": "string", "description": "The version of the configuration." }, "description": { "type": "string", "description": "A description of the configuration." }, "type": { "type": "string", "enum": [ "app", "project", "template" ], "description": "The type of the configuration." }, "global": { "type": "boolean", "description": "Flag to indicar if the configuration is global." }, "compose": { "type": "object", "patternProperties": { ".*": { "type": "object", "properties": { "root": { "type": "string", "description": "Root directory for the container." }, "filename": { "type": "string", "description": "Custom docker-compose filename." }, "use_project_env": { "type": "boolean", "description": "Use PROJECT environment variable as project name for docker compose commands. Defaults to true.", "default": true } }, "additionalProperties": false } }, "additionalProperties": false }, "custom": { "type": "object", "properties": { "root": { "type": "string", "description": "path to the scripts folder" } }, "additionalProperties": false }, "docker": { "type": "object", "patternProperties": { ".*": { "type": "object", "properties": { "root": { "type": "string", "description": "Root directory for the container." }, "image": { "type": "string", "description": "Docker image url to be used. (example: docker.io/library/nginx:latest)" }, "env_based": { "type": "boolean", "description": "Flag to indicate if context Dockerfile is used." }, "context_dir": { "type": "string", "description": "Context where the app is located." }, "tag_modifiers": { "type": "array", "items": { "type": "string" }, "description": "List of tag modifiers for the Docker image." } }, "additionalProperties": false } }, "additionalProperties": false }, "port": { "type": "number", "description": "Port number for the application" }, "routines": { "type": "object", "patternProperties": { ".*": { "type": "string", "description": "Command to be executed for the routine." } }, "additionalProperties": false }, "secrets": { "type": "object", "properties": { "base": { "type": "string", "description": "Path to the base environment variables file" } }, "additionalProperties": false }, "terraform": { "type": "object", "patternProperties": { ".*": { "type": "object", "properties": { "path": { "type": "string", "description": "Path for the terraform configuration." }, "global": { "type": "boolean", "description": "Flag to indicate if the configuration is global." }, "containers": { "type": "array", "items": { "type": "string" }, "description": "List of containers to be used." } }, "additionalProperties": false } }, "additionalProperties": false }, "tags": { "type": "array", "items": { "type": "string" } }, "mcp": { "type": "object", "patternProperties": { ".*": { "type": "object", "oneOf": [ { "type": "object", "properties": { "command": { "type": "string", "description": "Command to execute for the MCP server." }, "args": { "type": "array", "items": { "type": "string" }, "description": "Arguments for the MCP server command." }, "env": { "type": "object", "additionalProperties": true, "description": "Environment variables for the MCP server." } }, "required": [ "command" ], "additionalProperties": false }, { "type": "object", "properties": { "type": { "type": "string", "description": "Type of the MCP server." }, "url": { "type": "string", "description": "URL for the MCP server." }, "headers": { "type": "object", "additionalProperties": { "type": "string" }, "description": "Headers for the MCP server requests." } }, "required": [ "url" ], "additionalProperties": false } ] } }, "additionalProperties": false }, "template": { "type": "object", "patternProperties": { ".*": { "type": "object", "properties": { "ignoreFolders": { "type": "array", "items": { "type": "string" }, "description": "List of folders to ignore in the template." }, "ignoreFiles": { "type": "array", "items": { "type": "string" }, "description": "List of files to ignore in the template." }, "init": { "type": "array", "items": { "type": "string" }, "description": "List of initialization commands to run for the template." } }, "additionalProperties": false } }, "additionalProperties": false }, "tunnel": { "type": "object", "patternProperties": { ".*": { "type": "object", "properties": { "hostname": { "type": "string", "description": "hostname for the tunnel. (example: example.com)" }, "service": { "type": "string", "description": "Local service to be tunneled. (example: localhost:8080)" } }, "additionalProperties": false } }, "additionalProperties": false }, "tmux": { "type": "object", "description": "Tmux session configuration", "properties": { "sessions": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string", "description": "Session name" }, "root": { "type": "string", "description": "Root directory for the session (relative to meta.json location)" }, "windows": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string", "description": "Window name" }, "path": { "type": "string", "description": "Starting directory for all panes in this window. If starts with '/', treated as absolute path. Otherwise, relative to session root. Pane-level paths override this." }, "layout": { "type": "string", "enum": ["sections", "grid", "compact"], "description": "Layout mode: 'sections' for hierarchical layouts, 'grid' for predefined arrangements, 'compact' for minimal object-based configuration" }, "section": { "$ref": "#/$defs/tmuxSection" }, "grid": { "$ref": "#/$defs/tmuxGrid" }, "compact": { "$ref": "#/$defs/tmuxCompact" } }, "required": [ "name" ] } } }, "required": [ "name", "windows" ] } } } } }, "required": [ "id", "name" ], "$defs": { "tmuxSection": { "type": "object", "description": "A section defines how to split space - either containing panes or other sections", "properties": { "split": { "type": "string", "enum": ["horizontal", "vertical"], "description": "Split direction: horizontal = split top/bottom, vertical = split left/right" }, "size": { "type": "string", "pattern": "^[0-9]+%?$", "description": "Size of this section (e.g., '50%', '30'). Only applies when this section is an item in another section." }, "items": { "type": "array", "description": "Items within this section - can be panes or other sections", "minItems": 1, "items": { "oneOf": [ { "$ref": "#/$defs/tmuxSection", "description": "Nested section" }, { "$ref": "#/$defs/tmuxPane", "description": "Terminal pane" } ] } } }, "required": ["split", "items"], "additionalProperties": false }, "tmuxPane": { "type": "object", "description": "A terminal pane with optional commands and configuration", "properties": { "name": { "type": "string", "description": "Unique identifier for this pane" }, "path": { "type": "string", "description": "Starting directory for this pane. If starts with '/', treated as absolute path. Otherwise, relative to window path (or session root if window has no path). Overrides window-level path." }, "command": { "type": "string", "description": "Default command to execute in this pane" }, "sshTarget": { "type": "string", "description": "SSH target for remote command execution (e.g., 'user@host')" }, "size": { "type": "string", "pattern": "^[0-9]+%?$", "description": "Size of this pane (e.g., '50%', '30'). Only applies when this pane is an item in a section." } }, "required": ["name"], "additionalProperties": false }, "tmuxGrid": { "type": "object", "description": "Predefined grid layout with auto-fill support for missing panes", "properties": { "type": { "type": "string", "enum": ["single", "vertical", "horizontal", "two-by-two", "main-side"], "description": "Grid type: single (1 pane), vertical (2 panes left/right), horizontal (2 panes top/bottom), two-by-two (4 panes in 2x2 grid), main-side (1 large left + 2 stacked right)" }, "panes": { "type": "array", "description": "Pane definitions. Missing panes will be auto-generated with default names.", "minItems": 1, "items": { "$ref": "#/$defs/tmuxPane" } } }, "required": ["type", "panes"], "additionalProperties": false }, "tmuxCompact": { "type": "object", "description": "Compact grid layout with minimal object-based configuration. Panes are defined as key-value pairs where the key is the pane name and the value is the command.", "properties": { "type": { "type": "string", "enum": ["single", "vertical", "horizontal", "two-by-two", "main-side"], "description": "Grid type: single (1 pane), vertical (2 panes left/right), horizontal (2 panes top/bottom), two-by-two (4 panes in 2x2 grid), main-side (1 large left + 2 stacked right)" }, "panes": { "type": "object", "description": "Pane definitions as key-value pairs. Key is the pane name (also used as title), value is the command to execute. Panes are ordered top-left to bottom-right.", "additionalProperties": { "type": "string" }, "minProperties": 1 } }, "required": ["type", "panes"], "additionalProperties": false } } }