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}