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          ],
159          "title": "Type",
160          "description": "Type of MCP connection",
161          "default": "stdio"
162        },
163        "url": {
164          "type": "string",
165          "title": "URL",
166          "description": "URL for SSE MCP servers"
167        },
168        "headers": {
169          "additionalProperties": {
170            "type": "string"
171          },
172          "type": "object",
173          "title": "Headers",
174          "description": "HTTP headers for SSE MCP servers"
175        }
176      },
177      "type": "object",
178      "required": [
179        "command",
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        "model": {
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        "model",
256        "cost_per_1m_in",
257        "cost_per_1m_out",
258        "cost_per_1m_in_cached",
259        "cost_per_1m_out_cached",
260        "context_window",
261        "default_max_tokens",
262        "can_reason",
263        "reasoning_effort",
264        "has_reasoning_effort",
265        "supports_attachments"
266      ]
267    },
268    "Options": {
269      "properties": {
270        "context_paths": {
271          "items": {
272            "type": "string"
273          },
274          "type": "array",
275          "title": "Context Paths",
276          "description": "List of paths to search for context files",
277          "default": [
278            ".github/copilot-instructions.md",
279            ".cursorrules",
280            ".cursor/rules/",
281            "CLAUDE.md",
282            "CLAUDE.local.md",
283            "GEMINI.md",
284            "gemini.md",
285            "crush.md",
286            "crush.local.md",
287            "Crush.md",
288            "Crush.local.md",
289            "CRUSH.md",
290            "CRUSH.local.md"
291          ]
292        },
293        "tui": {
294          "$ref": "#/$defs/TUIOptions",
295          "title": "TUI Options",
296          "description": "Terminal UI configuration options"
297        },
298        "debug": {
299          "type": "boolean",
300          "title": "Debug",
301          "description": "Enable debug logging",
302          "default": false
303        },
304        "debug_lsp": {
305          "type": "boolean",
306          "title": "Debug LSP",
307          "description": "Enable LSP debug logging",
308          "default": false
309        },
310        "disable_auto_summarize": {
311          "type": "boolean",
312          "title": "Disable Auto Summarize",
313          "description": "Disable automatic conversation summarization",
314          "default": false
315        },
316        "data_directory": {
317          "type": "string",
318          "title": "Data Directory",
319          "description": "Directory for storing application data",
320          "default": ".crush"
321        }
322      },
323      "type": "object"
324    },
325    "PreferredModel": {
326      "properties": {
327        "model_id": {
328          "type": "string",
329          "enum": [
330            "claude-opus-4-20250514",
331            "claude-sonnet-4-20250514",
332            "claude-3-7-sonnet-20250219",
333            "claude-3-5-haiku-20241022",
334            "claude-3-5-sonnet-20240620",
335            "claude-3-5-sonnet-20241022",
336            "codex-mini-latest",
337            "o4-mini",
338            "o3",
339            "o3-pro",
340            "gpt-4.1",
341            "gpt-4.1-mini",
342            "gpt-4.1-nano",
343            "gpt-4.5-preview",
344            "o3-mini",
345            "gpt-4o",
346            "gpt-4o-mini",
347            "gemini-2.5-pro",
348            "gemini-2.5-flash",
349            "codex-mini-latest",
350            "o4-mini",
351            "o3",
352            "o3-pro",
353            "gpt-4.1",
354            "gpt-4.1-mini",
355            "gpt-4.1-nano",
356            "gpt-4.5-preview",
357            "o3-mini",
358            "gpt-4o",
359            "gpt-4o-mini",
360            "anthropic.claude-opus-4-20250514-v1:0",
361            "anthropic.claude-sonnet-4-20250514-v1:0",
362            "anthropic.claude-3-7-sonnet-20250219-v1:0",
363            "anthropic.claude-3-5-haiku-20241022-v1:0",
364            "gemini-2.5-pro",
365            "gemini-2.5-flash",
366            "grok-3-mini",
367            "grok-3",
368            "mistralai/mistral-small-3.2-24b-instruct:free",
369            "mistralai/mistral-small-3.2-24b-instruct",
370            "minimax/minimax-m1:extended",
371            "minimax/minimax-m1",
372            "google/gemini-2.5-flash-lite-preview-06-17",
373            "google/gemini-2.5-flash",
374            "google/gemini-2.5-pro",
375            "openai/o3-pro",
376            "x-ai/grok-3-mini",
377            "x-ai/grok-3",
378            "mistralai/magistral-small-2506",
379            "mistralai/magistral-medium-2506",
380            "mistralai/magistral-medium-2506:thinking",
381            "google/gemini-2.5-pro-preview",
382            "deepseek/deepseek-r1-0528",
383            "anthropic/claude-opus-4",
384            "anthropic/claude-sonnet-4",
385            "mistralai/devstral-small:free",
386            "mistralai/devstral-small",
387            "google/gemini-2.5-flash-preview-05-20",
388            "google/gemini-2.5-flash-preview-05-20:thinking",
389            "openai/codex-mini",
390            "mistralai/mistral-medium-3",
391            "google/gemini-2.5-pro-preview-05-06",
392            "arcee-ai/caller-large",
393            "arcee-ai/virtuoso-large",
394            "arcee-ai/virtuoso-medium-v2",
395            "qwen/qwen3-30b-a3b",
396            "qwen/qwen3-14b",
397            "qwen/qwen3-32b",
398            "qwen/qwen3-235b-a22b",
399            "google/gemini-2.5-flash-preview",
400            "google/gemini-2.5-flash-preview:thinking",
401            "openai/o4-mini-high",
402            "openai/o3",
403            "openai/o4-mini",
404            "openai/gpt-4.1",
405            "openai/gpt-4.1-mini",
406            "openai/gpt-4.1-nano",
407            "x-ai/grok-3-mini-beta",
408            "x-ai/grok-3-beta",
409            "meta-llama/llama-4-maverick",
410            "meta-llama/llama-4-scout",
411            "all-hands/openhands-lm-32b-v0.1",
412            "google/gemini-2.5-pro-exp-03-25",
413            "deepseek/deepseek-chat-v3-0324:free",
414            "deepseek/deepseek-chat-v3-0324",
415            "mistralai/mistral-small-3.1-24b-instruct:free",
416            "mistralai/mistral-small-3.1-24b-instruct",
417            "ai21/jamba-1.6-large",
418            "ai21/jamba-1.6-mini",
419            "openai/gpt-4.5-preview",
420            "google/gemini-2.0-flash-lite-001",
421            "anthropic/claude-3.7-sonnet",
422            "anthropic/claude-3.7-sonnet:beta",
423            "anthropic/claude-3.7-sonnet:thinking",
424            "mistralai/mistral-saba",
425            "openai/o3-mini-high",
426            "google/gemini-2.0-flash-001",
427            "qwen/qwen-turbo",
428            "qwen/qwen-plus",
429            "qwen/qwen-max",
430            "openai/o3-mini",
431            "mistralai/mistral-small-24b-instruct-2501",
432            "deepseek/deepseek-r1-distill-llama-70b",
433            "deepseek/deepseek-r1",
434            "mistralai/codestral-2501",
435            "deepseek/deepseek-chat",
436            "openai/o1",
437            "x-ai/grok-2-1212",
438            "meta-llama/llama-3.3-70b-instruct",
439            "amazon/nova-lite-v1",
440            "amazon/nova-micro-v1",
441            "amazon/nova-pro-v1",
442            "openai/gpt-4o-2024-11-20",
443            "mistralai/mistral-large-2411",
444            "mistralai/mistral-large-2407",
445            "mistralai/pixtral-large-2411",
446            "thedrummer/unslopnemo-12b",
447            "anthropic/claude-3.5-haiku:beta",
448            "anthropic/claude-3.5-haiku",
449            "anthropic/claude-3.5-haiku-20241022:beta",
450            "anthropic/claude-3.5-haiku-20241022",
451            "anthropic/claude-3.5-sonnet:beta",
452            "anthropic/claude-3.5-sonnet",
453            "x-ai/grok-beta",
454            "mistralai/ministral-8b",
455            "mistralai/ministral-3b",
456            "nvidia/llama-3.1-nemotron-70b-instruct",
457            "google/gemini-flash-1.5-8b",
458            "meta-llama/llama-3.2-11b-vision-instruct",
459            "meta-llama/llama-3.2-3b-instruct",
460            "qwen/qwen-2.5-72b-instruct",
461            "mistralai/pixtral-12b",
462            "cohere/command-r-plus-08-2024",
463            "cohere/command-r-08-2024",
464            "microsoft/phi-3.5-mini-128k-instruct",
465            "nousresearch/hermes-3-llama-3.1-70b",
466            "openai/gpt-4o-2024-08-06",
467            "meta-llama/llama-3.1-405b-instruct",
468            "meta-llama/llama-3.1-70b-instruct",
469            "meta-llama/llama-3.1-8b-instruct",
470            "mistralai/mistral-nemo",
471            "openai/gpt-4o-mini",
472            "openai/gpt-4o-mini-2024-07-18",
473            "anthropic/claude-3.5-sonnet-20240620:beta",
474            "anthropic/claude-3.5-sonnet-20240620",
475            "mistralai/mistral-7b-instruct-v0.3",
476            "mistralai/mistral-7b-instruct:free",
477            "mistralai/mistral-7b-instruct",
478            "microsoft/phi-3-mini-128k-instruct",
479            "microsoft/phi-3-medium-128k-instruct",
480            "google/gemini-flash-1.5",
481            "openai/gpt-4o-2024-05-13",
482            "openai/gpt-4o",
483            "openai/gpt-4o:extended",
484            "meta-llama/llama-3-8b-instruct",
485            "meta-llama/llama-3-70b-instruct",
486            "mistralai/mixtral-8x22b-instruct",
487            "openai/gpt-4-turbo",
488            "google/gemini-pro-1.5",
489            "cohere/command-r-plus",
490            "cohere/command-r-plus-04-2024",
491            "cohere/command-r",
492            "anthropic/claude-3-haiku:beta",
493            "anthropic/claude-3-haiku",
494            "anthropic/claude-3-opus:beta",
495            "anthropic/claude-3-opus",
496            "anthropic/claude-3-sonnet:beta",
497            "anthropic/claude-3-sonnet",
498            "cohere/command-r-03-2024",
499            "mistralai/mistral-large",
500            "openai/gpt-3.5-turbo-0613",
501            "openai/gpt-4-turbo-preview",
502            "mistralai/mistral-small",
503            "mistralai/mistral-tiny",
504            "mistralai/mixtral-8x7b-instruct",
505            "openai/gpt-4-1106-preview",
506            "mistralai/mistral-7b-instruct-v0.1",
507            "openai/gpt-3.5-turbo-16k",
508            "openai/gpt-4",
509            "openai/gpt-4-0314"
510          ],
511          "title": "Model ID",
512          "description": "ID of the preferred model"
513        },
514        "provider": {
515          "type": "string",
516          "enum": [
517            "anthropic",
518            "openai",
519            "gemini",
520            "azure",
521            "bedrock",
522            "vertex",
523            "xai",
524            "openrouter"
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          ],
582          "title": "Provider ID",
583          "description": "Unique identifier for the provider"
584        },
585        "base_url": {
586          "type": "string",
587          "title": "Base URL",
588          "description": "Base URL for the provider API (required for custom providers)"
589        },
590        "provider_type": {
591          "type": "string",
592          "title": "Provider Type",
593          "description": "Type of the provider (openai"
594        },
595        "api_key": {
596          "type": "string",
597          "title": "API Key",
598          "description": "API key for authenticating with the provider"
599        },
600        "disabled": {
601          "type": "boolean",
602          "title": "Disabled",
603          "description": "Whether this provider is disabled",
604          "default": false
605        },
606        "extra_headers": {
607          "additionalProperties": {
608            "type": "string"
609          },
610          "type": "object",
611          "title": "Extra Headers",
612          "description": "Additional HTTP headers to send with requests"
613        },
614        "extra_params": {
615          "additionalProperties": {
616            "type": "string"
617          },
618          "type": "object",
619          "title": "Extra Parameters",
620          "description": "Additional provider-specific parameters"
621        },
622        "default_large_model": {
623          "type": "string",
624          "title": "Default Large Model",
625          "description": "Default model ID for large model type"
626        },
627        "default_small_model": {
628          "type": "string",
629          "title": "Default Small Model",
630          "description": "Default model ID for small model type"
631        },
632        "models": {
633          "items": {
634            "$ref": "#/$defs/Model"
635          },
636          "type": "array",
637          "title": "Models",
638          "description": "List of available models for this provider"
639        }
640      },
641      "type": "object",
642      "required": [
643        "provider_type"
644      ]
645    },
646    "TUIOptions": {
647      "properties": {
648        "compact_mode": {
649          "type": "boolean",
650          "title": "Compact Mode",
651          "description": "Enable compact mode for the TUI",
652          "default": false
653        }
654      },
655      "type": "object",
656      "required": [
657        "compact_mode"
658      ]
659    }
660  },
661  "properties": {
662    "models": {
663      "$ref": "#/$defs/PreferredModels",
664      "title": "Models",
665      "description": "Preferred model configurations for large and small model types"
666    },
667    "providers": {
668      "additionalProperties": {
669        "$ref": "#/$defs/ProviderConfig"
670      },
671      "type": "object",
672      "title": "Providers",
673      "description": "LLM provider configurations"
674    },
675    "agents": {
676      "additionalProperties": {
677        "$ref": "#/$defs/Agent"
678      },
679      "type": "object",
680      "title": "Agents",
681      "description": "Agent configurations for different tasks"
682    },
683    "mcp": {
684      "additionalProperties": {
685        "$ref": "#/$defs/MCP"
686      },
687      "type": "object",
688      "title": "MCP",
689      "description": "Model Control Protocol server configurations"
690    },
691    "lsp": {
692      "additionalProperties": {
693        "$ref": "#/$defs/LSPConfig"
694      },
695      "type": "object",
696      "title": "LSP",
697      "description": "Language Server Protocol configurations"
698    },
699    "options": {
700      "$ref": "#/$defs/Options",
701      "title": "Options",
702      "description": "General application options and settings"
703    }
704  },
705  "type": "object",
706  "title": "Crush Configuration",
707  "description": "Configuration schema for the Crush application"
708}