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}