crush-schema.json

  1{
  2  "$schema": "https://json-schema.org/draft/2020-12/schema",
  3  "$defs": {
  4    "Agent": {
  5      "properties": {
  6        "id": {
  7          "type": "string",
  8          "enum": [
  9            "coder",
 10            "task",
 11            "coder",
 12            "task"
 13          ],
 14          "title": "Agent ID",
 15          "description": "Unique identifier for the agent"
 16        },
 17        "name": {
 18          "type": "string",
 19          "title": "Name",
 20          "description": "Display name of the agent"
 21        },
 22        "description": {
 23          "type": "string",
 24          "title": "Description",
 25          "description": "Description of what the agent does"
 26        },
 27        "disabled": {
 28          "type": "boolean",
 29          "title": "Disabled",
 30          "description": "Whether this agent is disabled",
 31          "default": false
 32        },
 33        "model": {
 34          "type": "string",
 35          "enum": [
 36            "large",
 37            "small",
 38            "large",
 39            "small"
 40          ],
 41          "title": "Model Type",
 42          "description": "Type of model to use (large or small)"
 43        },
 44        "allowed_tools": {
 45          "items": {
 46            "type": "string",
 47            "enum": [
 48              "bash",
 49              "edit",
 50              "fetch",
 51              "glob",
 52              "grep",
 53              "ls",
 54              "sourcegraph",
 55              "view",
 56              "write",
 57              "agent"
 58            ]
 59          },
 60          "type": "array",
 61          "title": "Allowed Tools",
 62          "description": "List of tools this agent is allowed to use (if nil all tools are allowed)"
 63        },
 64        "allowed_mcp": {
 65          "additionalProperties": {
 66            "items": {
 67              "type": "string"
 68            },
 69            "type": "array"
 70          },
 71          "type": "object",
 72          "title": "Allowed MCP",
 73          "description": "Map of MCP servers this agent can use and their allowed tools"
 74        },
 75        "allowed_lsp": {
 76          "items": {
 77            "type": "string"
 78          },
 79          "type": "array",
 80          "title": "Allowed LSP",
 81          "description": "List of LSP servers this agent can use (if nil all LSPs are allowed)"
 82        },
 83        "context_paths": {
 84          "items": {
 85            "type": "string"
 86          },
 87          "type": "array",
 88          "title": "Context Paths",
 89          "description": "Custom context paths for this agent (additive to global context paths)"
 90        }
 91      },
 92      "type": "object",
 93      "required": [
 94        "model"
 95      ]
 96    },
 97    "LSPConfig": {
 98      "properties": {
 99        "enabled": {
100          "type": "boolean",
101          "title": "Enabled",
102          "description": "Whether this LSP server is enabled",
103          "default": true
104        },
105        "command": {
106          "type": "string",
107          "title": "Command",
108          "description": "Command to execute for the LSP server"
109        },
110        "args": {
111          "items": {
112            "type": "string"
113          },
114          "type": "array",
115          "title": "Arguments",
116          "description": "Command line arguments for the LSP server"
117        },
118        "options": {
119          "title": "Options",
120          "description": "LSP server specific options"
121        }
122      },
123      "type": "object",
124      "required": [
125        "command"
126      ]
127    },
128    "MCP": {
129      "properties": {
130        "command": {
131          "type": "string",
132          "title": "Command",
133          "description": "Command to execute for stdio MCP servers"
134        },
135        "env": {
136          "items": {
137            "type": "string"
138          },
139          "type": "array",
140          "title": "Environment",
141          "description": "Environment variables for the MCP server"
142        },
143        "args": {
144          "items": {
145            "type": "string"
146          },
147          "type": "array",
148          "title": "Arguments",
149          "description": "Command line arguments for the MCP server"
150        },
151        "type": {
152          "type": "string",
153          "enum": [
154            "stdio",
155            "sse",
156            "stdio",
157            "sse",
158            "http"
159          ],
160          "title": "Type",
161          "description": "Type of MCP connection",
162          "default": "stdio"
163        },
164        "url": {
165          "type": "string",
166          "title": "URL",
167          "description": "URL for SSE MCP servers"
168        },
169        "headers": {
170          "additionalProperties": {
171            "type": "string"
172          },
173          "type": "object",
174          "title": "Headers",
175          "description": "HTTP headers for SSE MCP servers"
176        }
177      },
178      "type": "object",
179      "required": [
180        "type"
181      ]
182    },
183    "Model": {
184      "properties": {
185        "id": {
186          "type": "string",
187          "title": "Model ID",
188          "description": "Unique identifier for the model"
189        },
190        "name": {
191          "type": "string",
192          "title": "Model Name",
193          "description": "Display name of the model"
194        },
195        "cost_per_1m_in": {
196          "type": "number",
197          "minimum": 0,
198          "title": "Input Cost",
199          "description": "Cost per 1 million input tokens"
200        },
201        "cost_per_1m_out": {
202          "type": "number",
203          "minimum": 0,
204          "title": "Output Cost",
205          "description": "Cost per 1 million output tokens"
206        },
207        "cost_per_1m_in_cached": {
208          "type": "number",
209          "minimum": 0,
210          "title": "Cached Input Cost",
211          "description": "Cost per 1 million cached input tokens"
212        },
213        "cost_per_1m_out_cached": {
214          "type": "number",
215          "minimum": 0,
216          "title": "Cached Output Cost",
217          "description": "Cost per 1 million cached output tokens"
218        },
219        "context_window": {
220          "type": "integer",
221          "minimum": 1,
222          "title": "Context Window",
223          "description": "Maximum context window size in tokens"
224        },
225        "default_max_tokens": {
226          "type": "integer",
227          "minimum": 1,
228          "title": "Default Max Tokens",
229          "description": "Default maximum tokens for responses"
230        },
231        "can_reason": {
232          "type": "boolean",
233          "title": "Can Reason",
234          "description": "Whether the model supports reasoning capabilities"
235        },
236        "reasoning_effort": {
237          "type": "string",
238          "title": "Reasoning Effort",
239          "description": "Default reasoning effort level for reasoning models"
240        },
241        "has_reasoning_effort": {
242          "type": "boolean",
243          "title": "Has Reasoning Effort",
244          "description": "Whether the model supports reasoning effort configuration"
245        },
246        "supports_attachments": {
247          "type": "boolean",
248          "title": "Supports Images",
249          "description": "Whether the model supports image attachments"
250        }
251      },
252      "type": "object",
253      "required": [
254        "id",
255        "name",
256        "context_window",
257        "default_max_tokens"
258      ]
259    },
260    "Options": {
261      "properties": {
262        "context_paths": {
263          "items": {
264            "type": "string"
265          },
266          "type": "array",
267          "title": "Context Paths",
268          "description": "List of paths to search for context files",
269          "default": [
270            ".github/copilot-instructions.md",
271            ".cursorrules",
272            ".cursor/rules/",
273            "CLAUDE.md",
274            "CLAUDE.local.md",
275            "GEMINI.md",
276            "gemini.md",
277            "crush.md",
278            "crush.local.md",
279            "Crush.md",
280            "Crush.local.md",
281            "CRUSH.md",
282            "CRUSH.local.md"
283          ]
284        },
285        "tui": {
286          "$ref": "#/$defs/TUIOptions",
287          "title": "TUI Options",
288          "description": "Terminal UI configuration options"
289        },
290        "debug": {
291          "type": "boolean",
292          "title": "Debug",
293          "description": "Enable debug logging",
294          "default": false
295        },
296        "debug_lsp": {
297          "type": "boolean",
298          "title": "Debug LSP",
299          "description": "Enable LSP debug logging",
300          "default": false
301        },
302        "disable_auto_summarize": {
303          "type": "boolean",
304          "title": "Disable Auto Summarize",
305          "description": "Disable automatic conversation summarization",
306          "default": false
307        },
308        "data_directory": {
309          "type": "string",
310          "title": "Data Directory",
311          "description": "Directory for storing application data",
312          "default": ".crush"
313        }
314      },
315      "type": "object"
316    },
317    "PreferredModel": {
318      "properties": {
319        "model_id": {
320          "type": "string",
321          "enum": [
322            "claude-opus-4-20250514",
323            "claude-sonnet-4-20250514",
324            "claude-3-7-sonnet-20250219",
325            "claude-3-5-haiku-20241022",
326            "claude-3-5-sonnet-20240620",
327            "claude-3-5-sonnet-20241022",
328            "codex-mini-latest",
329            "o4-mini",
330            "o3",
331            "o3-pro",
332            "gpt-4.1",
333            "gpt-4.1-mini",
334            "gpt-4.1-nano",
335            "gpt-4.5-preview",
336            "o3-mini",
337            "gpt-4o",
338            "gpt-4o-mini",
339            "gemini-2.5-pro",
340            "gemini-2.5-flash",
341            "codex-mini-latest",
342            "o4-mini",
343            "o3",
344            "o3-pro",
345            "gpt-4.1",
346            "gpt-4.1-mini",
347            "gpt-4.1-nano",
348            "gpt-4.5-preview",
349            "o3-mini",
350            "gpt-4o",
351            "gpt-4o-mini",
352            "anthropic.claude-opus-4-20250514-v1:0",
353            "anthropic.claude-sonnet-4-20250514-v1:0",
354            "anthropic.claude-3-7-sonnet-20250219-v1:0",
355            "anthropic.claude-3-5-haiku-20241022-v1:0",
356            "gemini-2.5-pro",
357            "gemini-2.5-flash",
358            "grok-3-mini",
359            "grok-3",
360            "mistralai/mistral-small-3.2-24b-instruct:free",
361            "mistralai/mistral-small-3.2-24b-instruct",
362            "minimax/minimax-m1:extended",
363            "minimax/minimax-m1",
364            "google/gemini-2.5-flash-lite-preview-06-17",
365            "google/gemini-2.5-flash",
366            "google/gemini-2.5-pro",
367            "openai/o3-pro",
368            "x-ai/grok-3-mini",
369            "x-ai/grok-3",
370            "mistralai/magistral-small-2506",
371            "mistralai/magistral-medium-2506",
372            "mistralai/magistral-medium-2506:thinking",
373            "google/gemini-2.5-pro-preview",
374            "deepseek/deepseek-r1-0528",
375            "anthropic/claude-opus-4",
376            "anthropic/claude-sonnet-4",
377            "mistralai/devstral-small:free",
378            "mistralai/devstral-small",
379            "google/gemini-2.5-flash-preview-05-20",
380            "google/gemini-2.5-flash-preview-05-20:thinking",
381            "openai/codex-mini",
382            "mistralai/mistral-medium-3",
383            "google/gemini-2.5-pro-preview-05-06",
384            "arcee-ai/caller-large",
385            "arcee-ai/virtuoso-large",
386            "arcee-ai/virtuoso-medium-v2",
387            "qwen/qwen3-30b-a3b",
388            "qwen/qwen3-14b",
389            "qwen/qwen3-32b",
390            "qwen/qwen3-235b-a22b",
391            "google/gemini-2.5-flash-preview",
392            "google/gemini-2.5-flash-preview:thinking",
393            "openai/o4-mini-high",
394            "openai/o3",
395            "openai/o4-mini",
396            "openai/gpt-4.1",
397            "openai/gpt-4.1-mini",
398            "openai/gpt-4.1-nano",
399            "x-ai/grok-3-mini-beta",
400            "x-ai/grok-3-beta",
401            "meta-llama/llama-4-maverick",
402            "meta-llama/llama-4-scout",
403            "all-hands/openhands-lm-32b-v0.1",
404            "google/gemini-2.5-pro-exp-03-25",
405            "deepseek/deepseek-chat-v3-0324:free",
406            "deepseek/deepseek-chat-v3-0324",
407            "mistralai/mistral-small-3.1-24b-instruct:free",
408            "mistralai/mistral-small-3.1-24b-instruct",
409            "ai21/jamba-1.6-large",
410            "ai21/jamba-1.6-mini",
411            "openai/gpt-4.5-preview",
412            "google/gemini-2.0-flash-lite-001",
413            "anthropic/claude-3.7-sonnet",
414            "anthropic/claude-3.7-sonnet:beta",
415            "anthropic/claude-3.7-sonnet:thinking",
416            "mistralai/mistral-saba",
417            "openai/o3-mini-high",
418            "google/gemini-2.0-flash-001",
419            "qwen/qwen-turbo",
420            "qwen/qwen-plus",
421            "qwen/qwen-max",
422            "openai/o3-mini",
423            "mistralai/mistral-small-24b-instruct-2501",
424            "deepseek/deepseek-r1-distill-llama-70b",
425            "deepseek/deepseek-r1",
426            "mistralai/codestral-2501",
427            "deepseek/deepseek-chat",
428            "openai/o1",
429            "x-ai/grok-2-1212",
430            "meta-llama/llama-3.3-70b-instruct",
431            "amazon/nova-lite-v1",
432            "amazon/nova-micro-v1",
433            "amazon/nova-pro-v1",
434            "openai/gpt-4o-2024-11-20",
435            "mistralai/mistral-large-2411",
436            "mistralai/mistral-large-2407",
437            "mistralai/pixtral-large-2411",
438            "thedrummer/unslopnemo-12b",
439            "anthropic/claude-3.5-haiku:beta",
440            "anthropic/claude-3.5-haiku",
441            "anthropic/claude-3.5-haiku-20241022:beta",
442            "anthropic/claude-3.5-haiku-20241022",
443            "anthropic/claude-3.5-sonnet:beta",
444            "anthropic/claude-3.5-sonnet",
445            "x-ai/grok-beta",
446            "mistralai/ministral-8b",
447            "mistralai/ministral-3b",
448            "nvidia/llama-3.1-nemotron-70b-instruct",
449            "google/gemini-flash-1.5-8b",
450            "meta-llama/llama-3.2-11b-vision-instruct",
451            "meta-llama/llama-3.2-3b-instruct",
452            "qwen/qwen-2.5-72b-instruct",
453            "mistralai/pixtral-12b",
454            "cohere/command-r-plus-08-2024",
455            "cohere/command-r-08-2024",
456            "microsoft/phi-3.5-mini-128k-instruct",
457            "nousresearch/hermes-3-llama-3.1-70b",
458            "openai/gpt-4o-2024-08-06",
459            "meta-llama/llama-3.1-405b-instruct",
460            "meta-llama/llama-3.1-70b-instruct",
461            "meta-llama/llama-3.1-8b-instruct",
462            "mistralai/mistral-nemo",
463            "openai/gpt-4o-mini",
464            "openai/gpt-4o-mini-2024-07-18",
465            "anthropic/claude-3.5-sonnet-20240620:beta",
466            "anthropic/claude-3.5-sonnet-20240620",
467            "mistralai/mistral-7b-instruct-v0.3",
468            "mistralai/mistral-7b-instruct:free",
469            "mistralai/mistral-7b-instruct",
470            "microsoft/phi-3-mini-128k-instruct",
471            "microsoft/phi-3-medium-128k-instruct",
472            "google/gemini-flash-1.5",
473            "openai/gpt-4o-2024-05-13",
474            "openai/gpt-4o",
475            "openai/gpt-4o:extended",
476            "meta-llama/llama-3-8b-instruct",
477            "meta-llama/llama-3-70b-instruct",
478            "mistralai/mixtral-8x22b-instruct",
479            "openai/gpt-4-turbo",
480            "google/gemini-pro-1.5",
481            "cohere/command-r-plus",
482            "cohere/command-r-plus-04-2024",
483            "cohere/command-r",
484            "anthropic/claude-3-haiku:beta",
485            "anthropic/claude-3-haiku",
486            "anthropic/claude-3-opus:beta",
487            "anthropic/claude-3-opus",
488            "anthropic/claude-3-sonnet:beta",
489            "anthropic/claude-3-sonnet",
490            "cohere/command-r-03-2024",
491            "mistralai/mistral-large",
492            "openai/gpt-3.5-turbo-0613",
493            "openai/gpt-4-turbo-preview",
494            "mistralai/mistral-small",
495            "mistralai/mistral-tiny",
496            "mistralai/mixtral-8x7b-instruct",
497            "openai/gpt-4-1106-preview",
498            "mistralai/mistral-7b-instruct-v0.1",
499            "openai/gpt-3.5-turbo-16k",
500            "openai/gpt-4",
501            "openai/gpt-4-0314",
502            "Llama-4-Maverick-17B-128E-Instruct-FP8",
503            "Llama-4-Scout-17B-128E-Instruct-FP8",
504            "Llama-3.3-70B-Instruct",
505            "Llama-3.3-8B-Instruct",
506            "Cerebras-Llama-4-Maverick-17B-128E-Instruct",
507            "Cerebras-Llama-4-Scout-17B-16E-Instruct",
508            "Groq-Llama-4-Maverick-17B-128E-Instruct"
509          ],
510          "title": "Model ID",
511          "description": "ID of the preferred model"
512        },
513        "provider": {
514          "type": "string",
515          "enum": [
516            "anthropic",
517            "openai",
518            "gemini",
519            "azure",
520            "bedrock",
521            "vertex",
522            "xai",
523            "openrouter",
524            "llama"
525          ],
526          "title": "Provider",
527          "description": "Provider for the preferred model"
528        },
529        "reasoning_effort": {
530          "type": "string",
531          "title": "Reasoning Effort",
532          "description": "Override reasoning effort for this model"
533        },
534        "max_tokens": {
535          "type": "integer",
536          "minimum": 1,
537          "title": "Max Tokens",
538          "description": "Override max tokens for this model"
539        },
540        "think": {
541          "type": "boolean",
542          "title": "Think",
543          "description": "Enable thinking for reasoning models",
544          "default": false
545        }
546      },
547      "type": "object",
548      "required": [
549        "model_id",
550        "provider"
551      ]
552    },
553    "PreferredModels": {
554      "properties": {
555        "large": {
556          "$ref": "#/$defs/PreferredModel",
557          "title": "Large Model",
558          "description": "Preferred model configuration for large model type"
559        },
560        "small": {
561          "$ref": "#/$defs/PreferredModel",
562          "title": "Small Model",
563          "description": "Preferred model configuration for small model type"
564        }
565      },
566      "type": "object"
567    },
568    "ProviderConfig": {
569      "properties": {
570        "id": {
571          "type": "string",
572          "enum": [
573            "anthropic",
574            "openai",
575            "gemini",
576            "azure",
577            "bedrock",
578            "vertex",
579            "xai",
580            "openrouter",
581            "llama"
582          ],
583          "title": "Provider ID",
584          "description": "Unique identifier for the provider"
585        },
586        "base_url": {
587          "type": "string",
588          "title": "Base URL",
589          "description": "Base URL for the provider API (required for custom providers)"
590        },
591        "provider_type": {
592          "type": "string",
593          "title": "Provider Type",
594          "description": "Type of the provider (openai"
595        },
596        "api_key": {
597          "type": "string",
598          "title": "API Key",
599          "description": "API key for authenticating with the provider"
600        },
601        "disabled": {
602          "type": "boolean",
603          "title": "Disabled",
604          "description": "Whether this provider is disabled",
605          "default": false
606        },
607        "extra_headers": {
608          "additionalProperties": {
609            "type": "string"
610          },
611          "type": "object",
612          "title": "Extra Headers",
613          "description": "Additional HTTP headers to send with requests"
614        },
615        "extra_params": {
616          "additionalProperties": {
617            "type": "string"
618          },
619          "type": "object",
620          "title": "Extra Parameters",
621          "description": "Additional provider-specific parameters"
622        },
623        "default_large_model": {
624          "type": "string",
625          "title": "Default Large Model",
626          "description": "Default model ID for large model type"
627        },
628        "default_small_model": {
629          "type": "string",
630          "title": "Default Small Model",
631          "description": "Default model ID for small model type"
632        },
633        "models": {
634          "items": {
635            "$ref": "#/$defs/Model"
636          },
637          "type": "array",
638          "title": "Models",
639          "description": "List of available models for this provider"
640        }
641      },
642      "type": "object",
643      "required": [
644        "provider_type"
645      ]
646    },
647    "TUIOptions": {
648      "properties": {
649        "compact_mode": {
650          "type": "boolean",
651          "title": "Compact Mode",
652          "description": "Enable compact mode for the TUI",
653          "default": false
654        }
655      },
656      "type": "object",
657      "required": [
658        "compact_mode"
659      ]
660    }
661  },
662  "properties": {
663    "models": {
664      "$ref": "#/$defs/PreferredModels",
665      "title": "Models",
666      "description": "Preferred model configurations for large and small model types"
667    },
668    "providers": {
669      "additionalProperties": {
670        "$ref": "#/$defs/ProviderConfig"
671      },
672      "type": "object",
673      "title": "Providers",
674      "description": "LLM provider configurations"
675    },
676    "agents": {
677      "additionalProperties": {
678        "$ref": "#/$defs/Agent"
679      },
680      "type": "object",
681      "title": "Agents",
682      "description": "Agent configurations for different tasks"
683    },
684    "mcp": {
685      "additionalProperties": {
686        "$ref": "#/$defs/MCP"
687      },
688      "type": "object",
689      "title": "MCP",
690      "description": "Model Control Protocol server configurations"
691    },
692    "lsp": {
693      "additionalProperties": {
694        "$ref": "#/$defs/LSPConfig"
695      },
696      "type": "object",
697      "title": "LSP",
698      "description": "Language Server Protocol configurations"
699    },
700    "options": {
701      "$ref": "#/$defs/Options",
702      "title": "Options",
703      "description": "General application options and settings"
704    }
705  },
706  "type": "object",
707  "title": "Crush Configuration",
708  "description": "Configuration schema for the Crush application"
709}