{ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "OMP Coding Agent Theme", "description": "Theme schema for the OMP coding agent", "type": "object", "required": ["name", "colors"], "properties": { "$schema": { "type": "string", "description": "JSON schema reference" }, "name": { "type": "string", "description": "Theme name" }, "vars": { "type": "object", "description": "Reusable color variables", "additionalProperties": { "oneOf": [ { "type": "string", "description": "Hex color (#RRGGBB), variable reference, or empty string for terminal default" }, { "type": "integer", "minimum": 0, "maximum": 255, "description": "256-color palette index (0-255)" } ] } }, "colors": { "type": "object", "description": "Theme color definitions (all required except thinkingMax)", "required": [ "accent", "border", "borderAccent", "borderMuted", "success", "error", "warning", "muted", "dim", "text", "thinkingText", "selectedBg", "userMessageBg", "userMessageText", "customMessageBg", "customMessageText", "customMessageLabel", "toolPendingBg", "toolSuccessBg", "toolErrorBg", "toolTitle", "toolOutput", "mdHeading", "mdLink", "mdLinkUrl", "mdCode", "mdCodeBlock", "mdCodeBlockBorder", "mdQuote", "mdQuoteBorder", "mdHr", "mdListBullet", "toolDiffAdded", "toolDiffRemoved", "toolDiffContext", "syntaxComment", "syntaxKeyword", "syntaxFunction", "syntaxVariable", "syntaxString", "syntaxNumber", "syntaxType", "syntaxOperator", "syntaxPunctuation", "thinkingOff", "thinkingMinimal", "thinkingLow", "thinkingMedium", "thinkingHigh", "thinkingXhigh", "bashMode", "pythonMode", "statusLineBg", "statusLineSep", "statusLineModel", "statusLinePath", "statusLineGitClean", "statusLineGitDirty", "statusLineContext", "statusLineSpend", "statusLineStaged", "statusLineDirty", "statusLineUntracked", "statusLineOutput", "statusLineCost", "statusLineSubagents" ], "properties": { "accent": { "$ref": "#/$defs/colorValue", "description": "Primary accent color (logo, selected items, cursor)" }, "border": { "$ref": "#/$defs/colorValue", "description": "Normal borders" }, "borderAccent": { "$ref": "#/$defs/colorValue", "description": "Highlighted borders" }, "borderMuted": { "$ref": "#/$defs/colorValue", "description": "Subtle borders" }, "success": { "$ref": "#/$defs/colorValue", "description": "Success states" }, "error": { "$ref": "#/$defs/colorValue", "description": "Error states" }, "warning": { "$ref": "#/$defs/colorValue", "description": "Warning states" }, "muted": { "$ref": "#/$defs/colorValue", "description": "Secondary/dimmed text" }, "dim": { "$ref": "#/$defs/colorValue", "description": "Very dimmed text (more subtle than muted)" }, "text": { "$ref": "#/$defs/colorValue", "description": "Default text color (usually empty string)" }, "thinkingText": { "$ref": "#/$defs/colorValue", "description": "Thinking text color" }, "selectedBg": { "$ref": "#/$defs/colorValue", "description": "Selected background (list highlight)" }, "userMessageBg": { "$ref": "#/$defs/colorValue", "description": "User message background" }, "userMessageText": { "$ref": "#/$defs/colorValue", "description": "User message text color" }, "customMessageBg": { "$ref": "#/$defs/colorValue", "description": "Custom message background (hook-injected messages)" }, "customMessageText": { "$ref": "#/$defs/colorValue", "description": "Custom message text color" }, "customMessageLabel": { "$ref": "#/$defs/colorValue", "description": "Custom message type label color" }, "toolPendingBg": { "$ref": "#/$defs/colorValue", "description": "Tool execution box (pending state)" }, "toolSuccessBg": { "$ref": "#/$defs/colorValue", "description": "Tool execution box (success state)" }, "toolErrorBg": { "$ref": "#/$defs/colorValue", "description": "Tool execution box (error state)" }, "toolTitle": { "$ref": "#/$defs/colorValue", "description": "Tool title text" }, "toolOutput": { "$ref": "#/$defs/colorValue", "description": "Tool output text" }, "mdHeading": { "$ref": "#/$defs/colorValue", "description": "Markdown heading text" }, "mdLink": { "$ref": "#/$defs/colorValue", "description": "Markdown link text" }, "mdLinkUrl": { "$ref": "#/$defs/colorValue", "description": "Markdown link URL text" }, "mdCode": { "$ref": "#/$defs/colorValue", "description": "Markdown inline code" }, "mdCodeBlock": { "$ref": "#/$defs/colorValue", "description": "Markdown code block content" }, "mdCodeBlockBorder": { "$ref": "#/$defs/colorValue", "description": "Markdown code block fences" }, "mdQuote": { "$ref": "#/$defs/colorValue", "description": "Markdown blockquote text" }, "mdQuoteBorder": { "$ref": "#/$defs/colorValue", "description": "Markdown blockquote border" }, "mdHr": { "$ref": "#/$defs/colorValue", "description": "Markdown horizontal rule" }, "mdListBullet": { "$ref": "#/$defs/colorValue", "description": "Markdown list bullets/numbers" }, "toolDiffAdded": { "$ref": "#/$defs/colorValue", "description": "Added lines in tool diffs" }, "toolDiffRemoved": { "$ref": "#/$defs/colorValue", "description": "Removed lines in tool diffs" }, "toolDiffContext": { "$ref": "#/$defs/colorValue", "description": "Context lines in tool diffs" }, "syntaxComment": { "$ref": "#/$defs/colorValue", "description": "Syntax highlighting: comments" }, "syntaxKeyword": { "$ref": "#/$defs/colorValue", "description": "Syntax highlighting: keywords" }, "syntaxFunction": { "$ref": "#/$defs/colorValue", "description": "Syntax highlighting: function names" }, "syntaxVariable": { "$ref": "#/$defs/colorValue", "description": "Syntax highlighting: variable names" }, "syntaxString": { "$ref": "#/$defs/colorValue", "description": "Syntax highlighting: string literals" }, "syntaxNumber": { "$ref": "#/$defs/colorValue", "description": "Syntax highlighting: number literals" }, "syntaxType": { "$ref": "#/$defs/colorValue", "description": "Syntax highlighting: type names" }, "syntaxOperator": { "$ref": "#/$defs/colorValue", "description": "Syntax highlighting: operators" }, "syntaxPunctuation": { "$ref": "#/$defs/colorValue", "description": "Syntax highlighting: punctuation" }, "thinkingOff": { "$ref": "#/$defs/colorValue", "description": "Thinking level border: off" }, "thinkingMinimal": { "$ref": "#/$defs/colorValue", "description": "Thinking level border: minimal" }, "thinkingLow": { "$ref": "#/$defs/colorValue", "description": "Thinking level border: low" }, "thinkingMedium": { "$ref": "#/$defs/colorValue", "description": "Thinking level border: medium" }, "thinkingHigh": { "$ref": "#/$defs/colorValue", "description": "Thinking level border: high" }, "thinkingXhigh": { "$ref": "#/$defs/colorValue", "description": "Thinking level border: xhigh" }, "thinkingMax": { "$ref": "#/$defs/colorValue", "description": "Thinking level border: max (optional; falls back to thinkingXhigh when omitted)" }, "bashMode": { "$ref": "#/$defs/colorValue", "description": "Editor border color in bash mode" }, "pythonMode": { "$ref": "#/$defs/colorValue", "description": "Editor border color in python mode" }, "statusLineBg": { "$ref": "#/$defs/colorValue", "description": "Status line background" }, "statusLineSep": { "$ref": "#/$defs/colorValue", "description": "Status line separator color" }, "statusLineModel": { "$ref": "#/$defs/colorValue", "description": "Status line model segment" }, "statusLinePath": { "$ref": "#/$defs/colorValue", "description": "Status line path segment" }, "statusLineGitClean": { "$ref": "#/$defs/colorValue", "description": "Status line git clean" }, "statusLineGitDirty": { "$ref": "#/$defs/colorValue", "description": "Status line git dirty" }, "statusLineContext": { "$ref": "#/$defs/colorValue", "description": "Status line context segment" }, "statusLineSpend": { "$ref": "#/$defs/colorValue", "description": "Status line spend segment" }, "statusLineStaged": { "$ref": "#/$defs/colorValue", "description": "Status line git staged" }, "statusLineDirty": { "$ref": "#/$defs/colorValue", "description": "Status line git dirty count" }, "statusLineUntracked": { "$ref": "#/$defs/colorValue", "description": "Status line git untracked" }, "statusLineOutput": { "$ref": "#/$defs/colorValue", "description": "Status line output segment" }, "statusLineCost": { "$ref": "#/$defs/colorValue", "description": "Status line cost segment" }, "statusLineSubagents": { "$ref": "#/$defs/colorValue", "description": "Status line subagents segment" } }, "additionalProperties": false }, "export": { "type": "object", "description": "Optional colors for HTML export (defaults derived from userMessageBg if not specified)", "properties": { "pageBg": { "$ref": "#/$defs/colorValue", "description": "Page background color" }, "cardBg": { "$ref": "#/$defs/colorValue", "description": "Card/container background color" }, "infoBg": { "$ref": "#/$defs/colorValue", "description": "Info sections background (system prompt, notices)" } }, "additionalProperties": false }, "symbols": { "type": "object", "description": "Symbol configuration for UI glyphs and icons", "properties": { "preset": { "type": "string", "enum": ["unicode", "nerd", "ascii"], "description": "Default symbol preset for this theme (can be overridden by user setting)" }, "overrides": { "type": "object", "description": "Override individual symbol keys (e.g., 'status.success': '✔')", "additionalProperties": { "type": "string" } }, "spinnerFrames": { "description": "Override the spinner frames. Use a flat array to set both `status` and `activity`, or an object to override each independently. Frames are advanced ~12.5fps for status spinners and ~30fps for activity spinners.", "oneOf": [ { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } }, { "type": "object", "properties": { "status": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } }, "activity": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } } }, "additionalProperties": false, "anyOf": [ { "required": ["status"] }, { "required": ["activity"] } ] } ] } }, "additionalProperties": false } }, "additionalProperties": false, "$defs": { "colorValue": { "oneOf": [ { "type": "string", "description": "Hex color (#RRGGBB), variable reference, or empty string for terminal default" }, { "type": "integer", "minimum": 0, "maximum": 255, "description": "256-color palette index (0-255)" } ] } } }