1{
  2  "$schema": "http://json-schema.org/draft-07/schema#",
  3  "definitions": {
  4    "agent": {
  5      "description": "Agent configuration",
  6      "properties": {
  7        "maxTokens": {
  8          "description": "Maximum tokens for the agent",
  9          "minimum": 1,
 10          "type": "integer"
 11        },
 12        "model": {
 13          "description": "Model ID for the agent",
 14          "enum": [
 15            "gpt-4.1",
 16            "llama-3.3-70b-versatile",
 17            "azure.gpt-4.1",
 18            "openrouter.gpt-4o",
 19            "openrouter.o1-mini",
 20            "openrouter.claude-3-haiku",
 21            "claude-3-opus",
 22            "gpt-4o",
 23            "gpt-4o-mini",
 24            "o1",
 25            "meta-llama/llama-4-maverick-17b-128e-instruct",
 26            "azure.o3-mini",
 27            "openrouter.gpt-4o-mini",
 28            "openrouter.o1",
 29            "claude-3.5-haiku",
 30            "o4-mini",
 31            "azure.gpt-4.1-mini",
 32            "openrouter.o3",
 33            "grok-3-beta",
 34            "o3-mini",
 35            "qwen-qwq",
 36            "azure.o1",
 37            "openrouter.gemini-2.5-flash",
 38            "openrouter.gemini-2.5",
 39            "o1-mini",
 40            "azure.gpt-4o",
 41            "openrouter.gpt-4.1-mini",
 42            "openrouter.claude-3.5-sonnet",
 43            "openrouter.o3-mini",
 44            "gpt-4.1-mini",
 45            "gpt-4.5-preview",
 46            "gpt-4.1-nano",
 47            "deepseek-r1-distill-llama-70b",
 48            "azure.gpt-4o-mini",
 49            "openrouter.gpt-4.1",
 50            "bedrock.claude-3.7-sonnet",
 51            "claude-3-haiku",
 52            "o3",
 53            "gemini-2.0-flash-lite",
 54            "azure.o3",
 55            "azure.gpt-4.5-preview",
 56            "openrouter.claude-3-opus",
 57            "grok-3-mini-fast-beta",
 58            "claude-4-sonnet",
 59            "azure.o4-mini",
 60            "grok-3-fast-beta",
 61            "claude-3.5-sonnet",
 62            "azure.o1-mini",
 63            "openrouter.claude-3.7-sonnet",
 64            "openrouter.gpt-4.5-preview",
 65            "grok-3-mini-beta",
 66            "claude-3.7-sonnet",
 67            "gemini-2.0-flash",
 68            "openrouter.deepseek-r1-free",
 69            "vertexai.gemini-2.5-flash",
 70            "vertexai.gemini-2.5",
 71            "o1-pro",
 72            "gemini-2.5",
 73            "meta-llama/llama-4-scout-17b-16e-instruct",
 74            "azure.gpt-4.1-nano",
 75            "openrouter.gpt-4.1-nano",
 76            "gemini-2.5-flash",
 77            "openrouter.o4-mini",
 78            "openrouter.claude-3.5-haiku",
 79            "claude-4-opus",
 80            "openrouter.o1-pro"
 81          ],
 82          "type": "string"
 83        },
 84        "reasoningEffort": {
 85          "description": "Reasoning effort for models that support it (OpenAI, Anthropic)",
 86          "enum": ["low", "medium", "high"],
 87          "type": "string"
 88        }
 89      },
 90      "required": ["model"],
 91      "type": "object"
 92    }
 93  },
 94  "description": "Configuration schema for the Crush application",
 95  "properties": {
 96    "agents": {
 97      "additionalProperties": {
 98        "description": "Agent configuration",
 99        "properties": {
100          "maxTokens": {
101            "description": "Maximum tokens for the agent",
102            "minimum": 1,
103            "type": "integer"
104          },
105          "model": {
106            "description": "Model ID for the agent",
107            "enum": [
108              "gpt-4.1",
109              "llama-3.3-70b-versatile",
110              "azure.gpt-4.1",
111              "openrouter.gpt-4o",
112              "openrouter.o1-mini",
113              "openrouter.claude-3-haiku",
114              "claude-3-opus",
115              "gpt-4o",
116              "gpt-4o-mini",
117              "o1",
118              "meta-llama/llama-4-maverick-17b-128e-instruct",
119              "azure.o3-mini",
120              "openrouter.gpt-4o-mini",
121              "openrouter.o1",
122              "claude-3.5-haiku",
123              "o4-mini",
124              "azure.gpt-4.1-mini",
125              "openrouter.o3",
126              "grok-3-beta",
127              "o3-mini",
128              "qwen-qwq",
129              "azure.o1",
130              "openrouter.gemini-2.5-flash",
131              "openrouter.gemini-2.5",
132              "o1-mini",
133              "azure.gpt-4o",
134              "openrouter.gpt-4.1-mini",
135              "openrouter.claude-3.5-sonnet",
136              "openrouter.o3-mini",
137              "gpt-4.1-mini",
138              "gpt-4.5-preview",
139              "gpt-4.1-nano",
140              "deepseek-r1-distill-llama-70b",
141              "azure.gpt-4o-mini",
142              "openrouter.gpt-4.1",
143              "bedrock.claude-3.7-sonnet",
144              "claude-3-haiku",
145              "o3",
146              "gemini-2.0-flash-lite",
147              "azure.o3",
148              "azure.gpt-4.5-preview",
149              "openrouter.claude-3-opus",
150              "grok-3-mini-fast-beta",
151              "claude-4-sonnet",
152              "azure.o4-mini",
153              "grok-3-fast-beta",
154              "claude-3.5-sonnet",
155              "azure.o1-mini",
156              "openrouter.claude-3.7-sonnet",
157              "openrouter.gpt-4.5-preview",
158              "grok-3-mini-beta",
159              "claude-3.7-sonnet",
160              "gemini-2.0-flash",
161              "openrouter.deepseek-r1-free",
162              "vertexai.gemini-2.5-flash",
163              "vertexai.gemini-2.5",
164              "o1-pro",
165              "gemini-2.5",
166              "meta-llama/llama-4-scout-17b-16e-instruct",
167              "azure.gpt-4.1-nano",
168              "openrouter.gpt-4.1-nano",
169              "gemini-2.5-flash",
170              "openrouter.o4-mini",
171              "openrouter.claude-3.5-haiku",
172              "claude-4-opus",
173              "openrouter.o1-pro"
174            ],
175            "type": "string"
176          },
177          "reasoningEffort": {
178            "description": "Reasoning effort for models that support it (OpenAI, Anthropic)",
179            "enum": ["low", "medium", "high"],
180            "type": "string"
181          }
182        },
183        "required": ["model"],
184        "type": "object"
185      },
186      "description": "Agent configurations",
187      "properties": {
188        "coder": {
189          "$ref": "#/definitions/agent"
190        },
191        "task": {
192          "$ref": "#/definitions/agent"
193        },
194        "title": {
195          "$ref": "#/definitions/agent"
196        }
197      },
198      "type": "object"
199    },
200    "contextPaths": {
201      "default": [
202        ".github/copilot-instructions.md",
203        ".cursorrules",
204        ".cursor/rules/",
205        "CLAUDE.md",
206        "CLAUDE.local.md",
207        "GEMINI.md",
208        "gemini.md",
209        "crush.md",
210        "crush.local.md",
211        "Crush.md",
212        "Crush.local.md",
213        "CRUSH.md",
214        "CRUSH.local.md"
215      ],
216      "description": "Context paths for the application",
217      "items": {
218        "type": "string"
219      },
220      "type": "array"
221    },
222    "data": {
223      "description": "Storage configuration",
224      "properties": {
225        "directory": {
226          "default": ".crush",
227          "description": "Directory where application data is stored",
228          "type": "string"
229        }
230      },
231      "required": ["directory"],
232      "type": "object"
233    },
234    "debug": {
235      "default": false,
236      "description": "Enable debug mode",
237      "type": "boolean"
238    },
239    "debugLSP": {
240      "default": false,
241      "description": "Enable LSP debug mode",
242      "type": "boolean"
243    },
244    "lsp": {
245      "additionalProperties": {
246        "description": "LSP configuration for a language",
247        "properties": {
248          "args": {
249            "description": "Command arguments for the LSP server",
250            "items": {
251              "type": "string"
252            },
253            "type": "array"
254          },
255          "command": {
256            "description": "Command to execute for the LSP server",
257            "type": "string"
258          },
259          "disabled": {
260            "default": false,
261            "description": "Whether the LSP is disabled",
262            "type": "boolean"
263          },
264          "options": {
265            "description": "Additional options for the LSP server",
266            "type": "object"
267          }
268        },
269        "required": ["command"],
270        "type": "object"
271      },
272      "description": "Language Server Protocol configurations",
273      "type": "object"
274    },
275    "mcpServers": {
276      "additionalProperties": {
277        "description": "MCP server configuration",
278        "properties": {
279          "args": {
280            "description": "Command arguments for the MCP server",
281            "items": {
282              "type": "string"
283            },
284            "type": "array"
285          },
286          "command": {
287            "description": "Command to execute for the MCP server",
288            "type": "string"
289          },
290          "env": {
291            "description": "Environment variables for the MCP server",
292            "items": {
293              "type": "string"
294            },
295            "type": "array"
296          },
297          "headers": {
298            "additionalProperties": {
299              "type": "string"
300            },
301            "description": "HTTP headers for SSE type MCP servers",
302            "type": "object"
303          },
304          "type": {
305            "default": "stdio",
306            "description": "Type of MCP server",
307            "enum": ["stdio", "sse"],
308            "type": "string"
309          },
310          "url": {
311            "description": "URL for SSE type MCP servers",
312            "type": "string"
313          }
314        },
315        "required": ["command"],
316        "type": "object"
317      },
318      "description": "Model Control Protocol server configurations",
319      "type": "object"
320    },
321    "providers": {
322      "additionalProperties": {
323        "description": "Provider configuration",
324        "properties": {
325          "apiKey": {
326            "description": "API key for the provider",
327            "type": "string"
328          },
329          "disabled": {
330            "default": false,
331            "description": "Whether the provider is disabled",
332            "type": "boolean"
333          },
334          "provider": {
335            "description": "Provider type",
336            "enum": [
337              "anthropic",
338              "openai",
339              "gemini",
340              "groq",
341              "openrouter",
342              "bedrock",
343              "azure",
344              "vertexai"
345            ],
346            "type": "string"
347          }
348        },
349        "type": "object"
350      },
351      "description": "LLM provider configurations",
352      "type": "object"
353    },
354    "tui": {
355      "description": "Terminal User Interface configuration",
356      "properties": {
357        "theme": {
358          "default": "crush",
359          "description": "TUI theme name",
360          "enum": [
361            "crush",
362            "catppuccin",
363            "dracula",
364            "flexoki",
365            "gruvbox",
366            "monokai",
367            "onedark",
368            "tokyonight",
369            "tron"
370          ],
371          "type": "string"
372        }
373      },
374      "type": "object"
375    },
376    "wd": {
377      "description": "Working directory for the application",
378      "type": "string"
379    }
380  },
381  "title": "Crush Configuration",
382  "type": "object"
383}