1{
   2  "$schema": "http://json-schema.org/draft-07/schema#",
   3  "title": "Crush Configuration",
   4  "description": "Configuration schema for the Crush application",
   5  "type": "object",
   6  "properties": {
   7    "agents": {
   8      "description": "Agent configurations for different tasks",
   9      "type": "object",
  10      "additionalProperties": {
  11        "type": "object",
  12        "properties": {
  13          "allowed_lsp": {
  14            "description": "List of LSP servers this agent can use (if nil, all LSPs are allowed)",
  15            "type": "array",
  16            "items": {
  17              "type": "string"
  18            }
  19          },
  20          "allowed_mcp": {
  21            "description": "Map of MCP servers this agent can use and their allowed tools",
  22            "type": "object",
  23            "additionalProperties": {
  24              "type": "array",
  25              "items": {
  26                "type": "string"
  27              }
  28            }
  29          },
  30          "allowed_tools": {
  31            "description": "List of tools this agent is allowed to use (if nil, all tools are allowed)",
  32            "type": "array",
  33            "items": {
  34              "type": "string",
  35              "enum": [
  36                "bash",
  37                "edit",
  38                "fetch",
  39                "glob",
  40                "grep",
  41                "ls",
  42                "sourcegraph",
  43                "view",
  44                "write",
  45                "agent"
  46              ]
  47            }
  48          },
  49          "context_paths": {
  50            "description": "Custom context paths for this agent (additive to global context paths)",
  51            "type": "array",
  52            "items": {
  53              "type": "string"
  54            }
  55          },
  56          "description": {
  57            "description": "Description",
  58            "type": "string"
  59          },
  60          "disabled": {
  61            "description": "Disabled",
  62            "type": "boolean",
  63            "default": false
  64          },
  65          "id": {
  66            "description": "I D",
  67            "type": "string",
  68            "enum": [
  69              "coder",
  70              "task"
  71            ]
  72          },
  73          "model": {
  74            "description": "Model",
  75            "type": "string",
  76            "enum": [
  77              "large",
  78              "small"
  79            ]
  80          },
  81          "name": {
  82            "description": "Name",
  83            "type": "string"
  84          }
  85        },
  86        "required": [
  87          "id",
  88          "name",
  89          "disabled",
  90          "model",
  91          "allowed_tools",
  92          "allowed_mcp",
  93          "allowed_lsp",
  94          "context_paths"
  95        ]
  96      }
  97    },
  98    "lsp": {
  99      "description": "Language Server Protocol configurations",
 100      "type": "object",
 101      "additionalProperties": {
 102        "type": "object",
 103        "properties": {
 104          "args": {
 105            "description": "Args",
 106            "type": "array",
 107            "items": {
 108              "type": "string"
 109            }
 110          },
 111          "command": {
 112            "description": "Command",
 113            "type": "string"
 114          },
 115          "enabled": {
 116            "description": "Disabled",
 117            "type": "boolean",
 118            "default": true
 119          },
 120          "options": {
 121            "description": "Options"
 122          }
 123        },
 124        "required": [
 125          "enabled",
 126          "command",
 127          "args",
 128          "options"
 129        ]
 130      }
 131    },
 132    "mcp": {
 133      "description": "Model Control Protocol server configurations",
 134      "type": "object",
 135      "additionalProperties": {
 136        "type": "object",
 137        "properties": {
 138          "args": {
 139            "description": "Args",
 140            "type": "array",
 141            "items": {
 142              "type": "string"
 143            }
 144          },
 145          "command": {
 146            "description": "Command to execute for stdio MCP servers",
 147            "type": "string"
 148          },
 149          "env": {
 150            "description": "Env list",
 151            "type": "array",
 152            "items": {
 153              "type": "string"
 154            }
 155          },
 156          "headers": {
 157            "description": "HTTP headers for SSE MCP servers",
 158            "type": "object",
 159            "additionalProperties": {
 160              "type": "string"
 161            }
 162          },
 163          "type": {
 164            "description": "Type",
 165            "type": "string",
 166            "enum": [
 167              "stdio",
 168              "sse"
 169            ],
 170            "default": "stdio"
 171          },
 172          "url": {
 173            "description": "URL for SSE MCP servers",
 174            "type": "string"
 175          }
 176        },
 177        "required": [
 178          "command",
 179          "env",
 180          "args",
 181          "type",
 182          "url",
 183          "headers"
 184        ]
 185      }
 186    },
 187    "models": {
 188      "description": "Preferred model configurations for large and small model types",
 189      "type": "object",
 190      "properties": {
 191        "large": {
 192          "description": "Large",
 193          "type": "object",
 194          "properties": {
 195            "max_tokens": {
 196              "description": "Max Tokens",
 197              "type": "integer"
 198            },
 199            "model_id": {
 200              "description": "Model I D",
 201              "type": "string",
 202              "enum": [
 203                "claude-3-opus",
 204                "claude-3-haiku",
 205                "claude-3-5-sonnet-20241022",
 206                "claude-3-5-haiku-20241022",
 207                "gpt-4",
 208                "gpt-3.5-turbo",
 209                "gpt-4-turbo",
 210                "gpt-4o",
 211                "gpt-4o-mini",
 212                "o1-preview",
 213                "o1-mini",
 214                "gemini-2.5-pro",
 215                "gemini-2.5-flash",
 216                "grok-beta",
 217                "anthropic/claude-3.5-sonnet",
 218                "anthropic/claude-3.5-haiku"
 219              ]
 220            },
 221            "provider": {
 222              "description": "Provider",
 223              "type": "string",
 224              "enum": [
 225                "anthropic",
 226                "openai",
 227                "gemini",
 228                "xai",
 229                "openrouter"
 230              ]
 231            },
 232            "reasoning_effort": {
 233              "description": "Reasoning Effort",
 234              "type": "string"
 235            },
 236            "think": {
 237              "description": "Enable think",
 238              "type": "boolean"
 239            }
 240          },
 241          "required": [
 242            "model_id",
 243            "provider"
 244          ]
 245        },
 246        "small": {
 247          "description": "Small",
 248          "$ref": "#/definitions/PreferredModel"
 249        }
 250      },
 251      "required": [
 252        "large",
 253        "small"
 254      ]
 255    },
 256    "options": {
 257      "description": "General application options and settings",
 258      "type": "object",
 259      "properties": {
 260        "context_paths": {
 261          "description": "Context Paths",
 262          "type": "array",
 263          "items": {
 264            "type": "string"
 265          },
 266          "default": [
 267            ".github/copilot-instructions.md",
 268            ".cursorrules",
 269            ".cursor/rules/",
 270            "CLAUDE.md",
 271            "CLAUDE.local.md",
 272            "GEMINI.md",
 273            "gemini.md",
 274            "crush.md",
 275            "crush.local.md",
 276            "Crush.md",
 277            "Crush.local.md",
 278            "CRUSH.md",
 279            "CRUSH.local.md"
 280          ]
 281        },
 282        "data_directory": {
 283          "description": "Data Directory",
 284          "type": "string",
 285          "default": ".crush"
 286        },
 287        "debug": {
 288          "description": "Enable debug",
 289          "type": "boolean",
 290          "default": false
 291        },
 292        "debug_lsp": {
 293          "description": "Enable debug l s p",
 294          "type": "boolean",
 295          "default": false
 296        },
 297        "disable_auto_summarize": {
 298          "description": "Disable Auto Summarize",
 299          "type": "boolean",
 300          "default": false
 301        },
 302        "tui": {
 303          "description": "T U I",
 304          "type": "object",
 305          "properties": {
 306            "compact_mode": {
 307              "description": "Enable compact mode",
 308              "type": "boolean",
 309              "default": false
 310            }
 311          },
 312          "required": [
 313            "compact_mode"
 314          ]
 315        }
 316      },
 317      "required": [
 318        "context_paths",
 319        "tui",
 320        "debug",
 321        "debug_lsp",
 322        "disable_auto_summarize",
 323        "data_directory"
 324      ]
 325    },
 326    "providers": {
 327      "description": "LLM provider configurations",
 328      "type": "object",
 329      "additionalProperties": {
 330        "type": "object",
 331        "properties": {
 332          "api_key": {
 333            "description": "API key for authenticating with the provider",
 334            "type": "string"
 335          },
 336          "base_url": {
 337            "description": "Base URL for the provider API (required for custom providers)",
 338            "type": "string"
 339          },
 340          "default_large_model": {
 341            "description": "Default Large Model",
 342            "type": "string"
 343          },
 344          "default_small_model": {
 345            "description": "Default Small Model",
 346            "type": "string"
 347          },
 348          "disabled": {
 349            "description": "Disabled",
 350            "type": "boolean",
 351            "default": false
 352          },
 353          "extra_headers": {
 354            "description": "Additional HTTP headers to send with requests",
 355            "type": "object",
 356            "additionalProperties": {
 357              "type": "string"
 358            }
 359          },
 360          "extra_params": {
 361            "description": "Additional provider-specific parameters",
 362            "type": "object",
 363            "additionalProperties": {
 364              "type": "string"
 365            }
 366          },
 367          "id": {
 368            "description": "I D",
 369            "type": "string",
 370            "enum": [
 371              "anthropic",
 372              "openai",
 373              "gemini",
 374              "xai",
 375              "openrouter"
 376            ]
 377          },
 378          "models": {
 379            "description": "Models",
 380            "type": "array",
 381            "items": {
 382              "type": "object",
 383              "properties": {
 384                "can_reason": {
 385                  "description": "Enable can reason",
 386                  "type": "boolean"
 387                },
 388                "context_window": {
 389                  "description": "Context Window",
 390                  "type": "integer"
 391                },
 392                "cost_per_1m_in": {
 393                  "description": "Cost Per1 M In",
 394                  "type": "number"
 395                },
 396                "cost_per_1m_in_cached": {
 397                  "description": "Cost Per1 M In Cached",
 398                  "type": "number"
 399                },
 400                "cost_per_1m_out": {
 401                  "description": "Cost Per1 M Out",
 402                  "type": "number"
 403                },
 404                "cost_per_1m_out_cached": {
 405                  "description": "Cost Per1 M Out Cached",
 406                  "type": "number"
 407                },
 408                "default_max_tokens": {
 409                  "description": "Default Max Tokens",
 410                  "type": "integer"
 411                },
 412                "has_reasoning_effort": {
 413                  "description": "Enable has reasoning effort",
 414                  "type": "boolean"
 415                },
 416                "id": {
 417                  "description": "I D",
 418                  "type": "string"
 419                },
 420                "model": {
 421                  "description": "Name",
 422                  "type": "string"
 423                },
 424                "reasoning_effort": {
 425                  "description": "Reasoning Effort",
 426                  "type": "string"
 427                },
 428                "supports_attachments": {
 429                  "description": "Enable supports images",
 430                  "type": "boolean"
 431                }
 432              },
 433              "required": [
 434                "id",
 435                "model",
 436                "cost_per_1m_in",
 437                "cost_per_1m_out",
 438                "cost_per_1m_in_cached",
 439                "cost_per_1m_out_cached",
 440                "context_window",
 441                "default_max_tokens",
 442                "can_reason",
 443                "reasoning_effort",
 444                "has_reasoning_effort",
 445                "supports_attachments"
 446              ]
 447            }
 448          },
 449          "provider_type": {
 450            "description": "Provider Type",
 451            "type": "string"
 452          }
 453        },
 454        "required": [
 455          "id",
 456          "provider_type",
 457          "disabled"
 458        ]
 459      }
 460    }
 461  },
 462  "required": [
 463    "models",
 464    "options"
 465  ],
 466  "definitions": {
 467    "Agent": {
 468      "type": "object",
 469      "properties": {
 470        "allowed_lsp": {
 471          "description": "List of LSP servers this agent can use (if nil, all LSPs are allowed)",
 472          "type": "array",
 473          "items": {
 474            "type": "string"
 475          }
 476        },
 477        "allowed_mcp": {
 478          "description": "Map of MCP servers this agent can use and their allowed tools",
 479          "type": "object",
 480          "additionalProperties": {
 481            "type": "array",
 482            "items": {
 483              "type": "string"
 484            }
 485          }
 486        },
 487        "allowed_tools": {
 488          "description": "List of tools this agent is allowed to use (if nil, all tools are allowed)",
 489          "type": "array",
 490          "items": {
 491            "type": "string",
 492            "enum": [
 493              "bash",
 494              "edit",
 495              "fetch",
 496              "glob",
 497              "grep",
 498              "ls",
 499              "sourcegraph",
 500              "view",
 501              "write",
 502              "agent"
 503            ]
 504          }
 505        },
 506        "context_paths": {
 507          "description": "Custom context paths for this agent (additive to global context paths)",
 508          "type": "array",
 509          "items": {
 510            "type": "string"
 511          }
 512        },
 513        "description": {
 514          "description": "Description",
 515          "type": "string"
 516        },
 517        "disabled": {
 518          "description": "Disabled",
 519          "type": "boolean",
 520          "default": false
 521        },
 522        "id": {
 523          "description": "I D",
 524          "type": "string",
 525          "enum": [
 526            "coder",
 527            "task"
 528          ]
 529        },
 530        "model": {
 531          "description": "Model",
 532          "type": "string",
 533          "enum": [
 534            "large",
 535            "small"
 536          ]
 537        },
 538        "name": {
 539          "description": "Name",
 540          "type": "string"
 541        }
 542      },
 543      "required": [
 544        "id",
 545        "name",
 546        "disabled",
 547        "model",
 548        "allowed_tools",
 549        "allowed_mcp",
 550        "allowed_lsp",
 551        "context_paths"
 552      ]
 553    },
 554    "Config": {
 555      "type": "object",
 556      "properties": {
 557        "agents": {
 558          "description": "Agent configurations for different tasks",
 559          "type": "object",
 560          "additionalProperties": {
 561            "type": "object",
 562            "properties": {
 563              "allowed_lsp": {
 564                "description": "List of LSP servers this agent can use (if nil, all LSPs are allowed)",
 565                "type": "array",
 566                "items": {
 567                  "type": "string"
 568                }
 569              },
 570              "allowed_mcp": {
 571                "description": "Map of MCP servers this agent can use and their allowed tools",
 572                "type": "object",
 573                "additionalProperties": {
 574                  "type": "array",
 575                  "items": {
 576                    "type": "string"
 577                  }
 578                }
 579              },
 580              "allowed_tools": {
 581                "description": "List of tools this agent is allowed to use (if nil, all tools are allowed)",
 582                "type": "array",
 583                "items": {
 584                  "type": "string",
 585                  "enum": [
 586                    "bash",
 587                    "edit",
 588                    "fetch",
 589                    "glob",
 590                    "grep",
 591                    "ls",
 592                    "sourcegraph",
 593                    "view",
 594                    "write",
 595                    "agent"
 596                  ]
 597                }
 598              },
 599              "context_paths": {
 600                "description": "Custom context paths for this agent (additive to global context paths)",
 601                "type": "array",
 602                "items": {
 603                  "type": "string"
 604                }
 605              },
 606              "description": {
 607                "description": "Description",
 608                "type": "string"
 609              },
 610              "disabled": {
 611                "description": "Disabled",
 612                "type": "boolean",
 613                "default": false
 614              },
 615              "id": {
 616                "description": "I D",
 617                "type": "string",
 618                "enum": [
 619                  "coder",
 620                  "task"
 621                ]
 622              },
 623              "model": {
 624                "description": "Model",
 625                "type": "string",
 626                "enum": [
 627                  "large",
 628                  "small"
 629                ]
 630              },
 631              "name": {
 632                "description": "Name",
 633                "type": "string"
 634              }
 635            },
 636            "required": [
 637              "id",
 638              "name",
 639              "disabled",
 640              "model",
 641              "allowed_tools",
 642              "allowed_mcp",
 643              "allowed_lsp",
 644              "context_paths"
 645            ]
 646          }
 647        },
 648        "lsp": {
 649          "description": "Language Server Protocol configurations",
 650          "type": "object",
 651          "additionalProperties": {
 652            "type": "object",
 653            "properties": {
 654              "args": {
 655                "description": "Args",
 656                "type": "array",
 657                "items": {
 658                  "type": "string"
 659                }
 660              },
 661              "command": {
 662                "description": "Command",
 663                "type": "string"
 664              },
 665              "enabled": {
 666                "description": "Disabled",
 667                "type": "boolean",
 668                "default": true
 669              },
 670              "options": {
 671                "description": "Options"
 672              }
 673            },
 674            "required": [
 675              "enabled",
 676              "command",
 677              "args",
 678              "options"
 679            ]
 680          }
 681        },
 682        "mcp": {
 683          "description": "Model Control Protocol server configurations",
 684          "type": "object",
 685          "additionalProperties": {
 686            "type": "object",
 687            "properties": {
 688              "args": {
 689                "description": "Args",
 690                "type": "array",
 691                "items": {
 692                  "type": "string"
 693                }
 694              },
 695              "command": {
 696                "description": "Command to execute for stdio MCP servers",
 697                "type": "string"
 698              },
 699              "env": {
 700                "description": "Env list",
 701                "type": "array",
 702                "items": {
 703                  "type": "string"
 704                }
 705              },
 706              "headers": {
 707                "description": "HTTP headers for SSE MCP servers",
 708                "type": "object",
 709                "additionalProperties": {
 710                  "type": "string"
 711                }
 712              },
 713              "type": {
 714                "description": "Type",
 715                "type": "string",
 716                "enum": [
 717                  "stdio",
 718                  "sse"
 719                ],
 720                "default": "stdio"
 721              },
 722              "url": {
 723                "description": "URL for SSE MCP servers",
 724                "type": "string"
 725              }
 726            },
 727            "required": [
 728              "command",
 729              "env",
 730              "args",
 731              "type",
 732              "url",
 733              "headers"
 734            ]
 735          }
 736        },
 737        "models": {
 738          "description": "Preferred model configurations for large and small model types",
 739          "type": "object",
 740          "properties": {
 741            "large": {
 742              "description": "Large",
 743              "type": "object",
 744              "properties": {
 745                "max_tokens": {
 746                  "description": "Max Tokens",
 747                  "type": "integer"
 748                },
 749                "model_id": {
 750                  "description": "Model I D",
 751                  "type": "string",
 752                  "enum": [
 753                    "claude-3-opus",
 754                    "claude-3-haiku",
 755                    "claude-3-5-sonnet-20241022",
 756                    "claude-3-5-haiku-20241022",
 757                    "gpt-4",
 758                    "gpt-3.5-turbo",
 759                    "gpt-4-turbo",
 760                    "gpt-4o",
 761                    "gpt-4o-mini",
 762                    "o1-preview",
 763                    "o1-mini",
 764                    "gemini-2.5-pro",
 765                    "gemini-2.5-flash",
 766                    "grok-beta",
 767                    "anthropic/claude-3.5-sonnet",
 768                    "anthropic/claude-3.5-haiku"
 769                  ]
 770                },
 771                "provider": {
 772                  "description": "Provider",
 773                  "type": "string",
 774                  "enum": [
 775                    "anthropic",
 776                    "openai",
 777                    "gemini",
 778                    "xai",
 779                    "openrouter"
 780                  ]
 781                },
 782                "reasoning_effort": {
 783                  "description": "Reasoning Effort",
 784                  "type": "string"
 785                },
 786                "think": {
 787                  "description": "Enable think",
 788                  "type": "boolean"
 789                }
 790              },
 791              "required": [
 792                "model_id",
 793                "provider"
 794              ]
 795            },
 796            "small": {
 797              "description": "Small",
 798              "$ref": "#/definitions/PreferredModel"
 799            }
 800          },
 801          "required": [
 802            "large",
 803            "small"
 804          ]
 805        },
 806        "options": {
 807          "description": "General application options and settings",
 808          "type": "object",
 809          "properties": {
 810            "context_paths": {
 811              "description": "Context Paths",
 812              "type": "array",
 813              "items": {
 814                "type": "string"
 815              },
 816              "default": [
 817                ".github/copilot-instructions.md",
 818                ".cursorrules",
 819                ".cursor/rules/",
 820                "CLAUDE.md",
 821                "CLAUDE.local.md",
 822                "GEMINI.md",
 823                "gemini.md",
 824                "crush.md",
 825                "crush.local.md",
 826                "Crush.md",
 827                "Crush.local.md",
 828                "CRUSH.md",
 829                "CRUSH.local.md"
 830              ]
 831            },
 832            "data_directory": {
 833              "description": "Data Directory",
 834              "type": "string",
 835              "default": ".crush"
 836            },
 837            "debug": {
 838              "description": "Enable debug",
 839              "type": "boolean",
 840              "default": false
 841            },
 842            "debug_lsp": {
 843              "description": "Enable debug l s p",
 844              "type": "boolean",
 845              "default": false
 846            },
 847            "disable_auto_summarize": {
 848              "description": "Disable Auto Summarize",
 849              "type": "boolean",
 850              "default": false
 851            },
 852            "tui": {
 853              "description": "T U I",
 854              "type": "object",
 855              "properties": {
 856                "compact_mode": {
 857                  "description": "Enable compact mode",
 858                  "type": "boolean",
 859                  "default": false
 860                }
 861              },
 862              "required": [
 863                "compact_mode"
 864              ]
 865            }
 866          },
 867          "required": [
 868            "context_paths",
 869            "tui",
 870            "debug",
 871            "debug_lsp",
 872            "disable_auto_summarize",
 873            "data_directory"
 874          ]
 875        },
 876        "providers": {
 877          "description": "LLM provider configurations",
 878          "type": "object",
 879          "additionalProperties": {
 880            "type": "object",
 881            "properties": {
 882              "api_key": {
 883                "description": "API key for authenticating with the provider",
 884                "type": "string"
 885              },
 886              "base_url": {
 887                "description": "Base URL for the provider API (required for custom providers)",
 888                "type": "string"
 889              },
 890              "default_large_model": {
 891                "description": "Default Large Model",
 892                "type": "string"
 893              },
 894              "default_small_model": {
 895                "description": "Default Small Model",
 896                "type": "string"
 897              },
 898              "disabled": {
 899                "description": "Disabled",
 900                "type": "boolean",
 901                "default": false
 902              },
 903              "extra_headers": {
 904                "description": "Additional HTTP headers to send with requests",
 905                "type": "object",
 906                "additionalProperties": {
 907                  "type": "string"
 908                }
 909              },
 910              "extra_params": {
 911                "description": "Additional provider-specific parameters",
 912                "type": "object",
 913                "additionalProperties": {
 914                  "type": "string"
 915                }
 916              },
 917              "id": {
 918                "description": "I D",
 919                "type": "string",
 920                "enum": [
 921                  "anthropic",
 922                  "openai",
 923                  "gemini",
 924                  "xai",
 925                  "openrouter"
 926                ]
 927              },
 928              "models": {
 929                "description": "Models",
 930                "type": "array",
 931                "items": {
 932                  "type": "object",
 933                  "properties": {
 934                    "can_reason": {
 935                      "description": "Enable can reason",
 936                      "type": "boolean"
 937                    },
 938                    "context_window": {
 939                      "description": "Context Window",
 940                      "type": "integer"
 941                    },
 942                    "cost_per_1m_in": {
 943                      "description": "Cost Per1 M In",
 944                      "type": "number"
 945                    },
 946                    "cost_per_1m_in_cached": {
 947                      "description": "Cost Per1 M In Cached",
 948                      "type": "number"
 949                    },
 950                    "cost_per_1m_out": {
 951                      "description": "Cost Per1 M Out",
 952                      "type": "number"
 953                    },
 954                    "cost_per_1m_out_cached": {
 955                      "description": "Cost Per1 M Out Cached",
 956                      "type": "number"
 957                    },
 958                    "default_max_tokens": {
 959                      "description": "Default Max Tokens",
 960                      "type": "integer"
 961                    },
 962                    "has_reasoning_effort": {
 963                      "description": "Enable has reasoning effort",
 964                      "type": "boolean"
 965                    },
 966                    "id": {
 967                      "description": "I D",
 968                      "type": "string"
 969                    },
 970                    "model": {
 971                      "description": "Name",
 972                      "type": "string"
 973                    },
 974                    "reasoning_effort": {
 975                      "description": "Reasoning Effort",
 976                      "type": "string"
 977                    },
 978                    "supports_attachments": {
 979                      "description": "Enable supports images",
 980                      "type": "boolean"
 981                    }
 982                  },
 983                  "required": [
 984                    "id",
 985                    "model",
 986                    "cost_per_1m_in",
 987                    "cost_per_1m_out",
 988                    "cost_per_1m_in_cached",
 989                    "cost_per_1m_out_cached",
 990                    "context_window",
 991                    "default_max_tokens",
 992                    "can_reason",
 993                    "reasoning_effort",
 994                    "has_reasoning_effort",
 995                    "supports_attachments"
 996                  ]
 997                }
 998              },
 999              "provider_type": {
1000                "description": "Provider Type",
1001                "type": "string"
1002              }
1003            },
1004            "required": [
1005              "id",
1006              "provider_type",
1007              "disabled"
1008            ]
1009          }
1010        }
1011      },
1012      "required": [
1013        "models",
1014        "options"
1015      ]
1016    },
1017    "LSPConfig": {
1018      "type": "object",
1019      "properties": {
1020        "args": {
1021          "description": "Args",
1022          "type": "array",
1023          "items": {
1024            "type": "string"
1025          }
1026        },
1027        "command": {
1028          "description": "Command",
1029          "type": "string"
1030        },
1031        "enabled": {
1032          "description": "Disabled",
1033          "type": "boolean",
1034          "default": true
1035        },
1036        "options": {
1037          "description": "Options"
1038        }
1039      },
1040      "required": [
1041        "enabled",
1042        "command",
1043        "args",
1044        "options"
1045      ]
1046    },
1047    "MCP": {
1048      "type": "object",
1049      "properties": {
1050        "args": {
1051          "description": "Args",
1052          "type": "array",
1053          "items": {
1054            "type": "string"
1055          }
1056        },
1057        "command": {
1058          "description": "Command to execute for stdio MCP servers",
1059          "type": "string"
1060        },
1061        "env": {
1062          "description": "Env list",
1063          "type": "array",
1064          "items": {
1065            "type": "string"
1066          }
1067        },
1068        "headers": {
1069          "description": "HTTP headers for SSE MCP servers",
1070          "type": "object",
1071          "additionalProperties": {
1072            "type": "string"
1073          }
1074        },
1075        "type": {
1076          "description": "Type",
1077          "type": "string",
1078          "enum": [
1079            "stdio",
1080            "sse"
1081          ],
1082          "default": "stdio"
1083        },
1084        "url": {
1085          "description": "URL for SSE MCP servers",
1086          "type": "string"
1087        }
1088      },
1089      "required": [
1090        "command",
1091        "env",
1092        "args",
1093        "type",
1094        "url",
1095        "headers"
1096      ]
1097    },
1098    "Model": {
1099      "type": "object",
1100      "properties": {
1101        "can_reason": {
1102          "description": "Enable can reason",
1103          "type": "boolean"
1104        },
1105        "context_window": {
1106          "description": "Context Window",
1107          "type": "integer"
1108        },
1109        "cost_per_1m_in": {
1110          "description": "Cost Per1 M In",
1111          "type": "number"
1112        },
1113        "cost_per_1m_in_cached": {
1114          "description": "Cost Per1 M In Cached",
1115          "type": "number"
1116        },
1117        "cost_per_1m_out": {
1118          "description": "Cost Per1 M Out",
1119          "type": "number"
1120        },
1121        "cost_per_1m_out_cached": {
1122          "description": "Cost Per1 M Out Cached",
1123          "type": "number"
1124        },
1125        "default_max_tokens": {
1126          "description": "Default Max Tokens",
1127          "type": "integer"
1128        },
1129        "has_reasoning_effort": {
1130          "description": "Enable has reasoning effort",
1131          "type": "boolean"
1132        },
1133        "id": {
1134          "description": "I D",
1135          "type": "string"
1136        },
1137        "model": {
1138          "description": "Name",
1139          "type": "string"
1140        },
1141        "reasoning_effort": {
1142          "description": "Reasoning Effort",
1143          "type": "string"
1144        },
1145        "supports_attachments": {
1146          "description": "Enable supports images",
1147          "type": "boolean"
1148        }
1149      },
1150      "required": [
1151        "id",
1152        "model",
1153        "cost_per_1m_in",
1154        "cost_per_1m_out",
1155        "cost_per_1m_in_cached",
1156        "cost_per_1m_out_cached",
1157        "context_window",
1158        "default_max_tokens",
1159        "can_reason",
1160        "reasoning_effort",
1161        "has_reasoning_effort",
1162        "supports_attachments"
1163      ]
1164    },
1165    "Options": {
1166      "description": "General application options and settings",
1167      "type": "object",
1168      "properties": {
1169        "context_paths": {
1170          "description": "Context Paths",
1171          "type": "array",
1172          "items": {
1173            "type": "string"
1174          },
1175          "default": [
1176            ".github/copilot-instructions.md",
1177            ".cursorrules",
1178            ".cursor/rules/",
1179            "CLAUDE.md",
1180            "CLAUDE.local.md",
1181            "GEMINI.md",
1182            "gemini.md",
1183            "crush.md",
1184            "crush.local.md",
1185            "Crush.md",
1186            "Crush.local.md",
1187            "CRUSH.md",
1188            "CRUSH.local.md"
1189          ]
1190        },
1191        "data_directory": {
1192          "description": "Data Directory",
1193          "type": "string",
1194          "default": ".crush"
1195        },
1196        "debug": {
1197          "description": "Enable debug",
1198          "type": "boolean",
1199          "default": false
1200        },
1201        "debug_lsp": {
1202          "description": "Enable debug l s p",
1203          "type": "boolean",
1204          "default": false
1205        },
1206        "disable_auto_summarize": {
1207          "description": "Disable Auto Summarize",
1208          "type": "boolean",
1209          "default": false
1210        },
1211        "tui": {
1212          "description": "T U I",
1213          "type": "object",
1214          "properties": {
1215            "compact_mode": {
1216              "description": "Enable compact mode",
1217              "type": "boolean",
1218              "default": false
1219            }
1220          },
1221          "required": [
1222            "compact_mode"
1223          ]
1224        }
1225      },
1226      "required": [
1227        "context_paths",
1228        "tui",
1229        "debug",
1230        "debug_lsp",
1231        "disable_auto_summarize",
1232        "data_directory"
1233      ]
1234    },
1235    "PreferredModel": {
1236      "description": "Large",
1237      "type": "object",
1238      "properties": {
1239        "max_tokens": {
1240          "description": "Max Tokens",
1241          "type": "integer"
1242        },
1243        "model_id": {
1244          "description": "Model I D",
1245          "type": "string",
1246          "enum": [
1247            "claude-3-opus",
1248            "claude-3-haiku",
1249            "claude-3-5-sonnet-20241022",
1250            "claude-3-5-haiku-20241022",
1251            "gpt-4",
1252            "gpt-3.5-turbo",
1253            "gpt-4-turbo",
1254            "gpt-4o",
1255            "gpt-4o-mini",
1256            "o1-preview",
1257            "o1-mini",
1258            "gemini-2.5-pro",
1259            "gemini-2.5-flash",
1260            "grok-beta",
1261            "anthropic/claude-3.5-sonnet",
1262            "anthropic/claude-3.5-haiku"
1263          ]
1264        },
1265        "provider": {
1266          "description": "Provider",
1267          "type": "string",
1268          "enum": [
1269            "anthropic",
1270            "openai",
1271            "gemini",
1272            "xai",
1273            "openrouter"
1274          ]
1275        },
1276        "reasoning_effort": {
1277          "description": "Reasoning Effort",
1278          "type": "string"
1279        },
1280        "think": {
1281          "description": "Enable think",
1282          "type": "boolean"
1283        }
1284      },
1285      "required": [
1286        "model_id",
1287        "provider"
1288      ]
1289    },
1290    "PreferredModels": {
1291      "description": "Preferred model configurations for large and small model types",
1292      "type": "object",
1293      "properties": {
1294        "large": {
1295          "description": "Large",
1296          "type": "object",
1297          "properties": {
1298            "max_tokens": {
1299              "description": "Max Tokens",
1300              "type": "integer"
1301            },
1302            "model_id": {
1303              "description": "Model I D",
1304              "type": "string",
1305              "enum": [
1306                "claude-3-opus",
1307                "claude-3-haiku",
1308                "claude-3-5-sonnet-20241022",
1309                "claude-3-5-haiku-20241022",
1310                "gpt-4",
1311                "gpt-3.5-turbo",
1312                "gpt-4-turbo",
1313                "gpt-4o",
1314                "gpt-4o-mini",
1315                "o1-preview",
1316                "o1-mini",
1317                "gemini-2.5-pro",
1318                "gemini-2.5-flash",
1319                "grok-beta",
1320                "anthropic/claude-3.5-sonnet",
1321                "anthropic/claude-3.5-haiku"
1322              ]
1323            },
1324            "provider": {
1325              "description": "Provider",
1326              "type": "string",
1327              "enum": [
1328                "anthropic",
1329                "openai",
1330                "gemini",
1331                "xai",
1332                "openrouter"
1333              ]
1334            },
1335            "reasoning_effort": {
1336              "description": "Reasoning Effort",
1337              "type": "string"
1338            },
1339            "think": {
1340              "description": "Enable think",
1341              "type": "boolean"
1342            }
1343          },
1344          "required": [
1345            "model_id",
1346            "provider"
1347          ]
1348        },
1349        "small": {
1350          "description": "Small",
1351          "$ref": "#/definitions/PreferredModel"
1352        }
1353      },
1354      "required": [
1355        "large",
1356        "small"
1357      ]
1358    },
1359    "ProviderConfig": {
1360      "type": "object",
1361      "properties": {
1362        "api_key": {
1363          "description": "API key for authenticating with the provider",
1364          "type": "string"
1365        },
1366        "base_url": {
1367          "description": "Base URL for the provider API (required for custom providers)",
1368          "type": "string"
1369        },
1370        "default_large_model": {
1371          "description": "Default Large Model",
1372          "type": "string"
1373        },
1374        "default_small_model": {
1375          "description": "Default Small Model",
1376          "type": "string"
1377        },
1378        "disabled": {
1379          "description": "Disabled",
1380          "type": "boolean",
1381          "default": false
1382        },
1383        "extra_headers": {
1384          "description": "Additional HTTP headers to send with requests",
1385          "type": "object",
1386          "additionalProperties": {
1387            "type": "string"
1388          }
1389        },
1390        "extra_params": {
1391          "description": "Additional provider-specific parameters",
1392          "type": "object",
1393          "additionalProperties": {
1394            "type": "string"
1395          }
1396        },
1397        "id": {
1398          "description": "I D",
1399          "type": "string",
1400          "enum": [
1401            "anthropic",
1402            "openai",
1403            "gemini",
1404            "xai",
1405            "openrouter"
1406          ]
1407        },
1408        "models": {
1409          "description": "Models",
1410          "type": "array",
1411          "items": {
1412            "type": "object",
1413            "properties": {
1414              "can_reason": {
1415                "description": "Enable can reason",
1416                "type": "boolean"
1417              },
1418              "context_window": {
1419                "description": "Context Window",
1420                "type": "integer"
1421              },
1422              "cost_per_1m_in": {
1423                "description": "Cost Per1 M In",
1424                "type": "number"
1425              },
1426              "cost_per_1m_in_cached": {
1427                "description": "Cost Per1 M In Cached",
1428                "type": "number"
1429              },
1430              "cost_per_1m_out": {
1431                "description": "Cost Per1 M Out",
1432                "type": "number"
1433              },
1434              "cost_per_1m_out_cached": {
1435                "description": "Cost Per1 M Out Cached",
1436                "type": "number"
1437              },
1438              "default_max_tokens": {
1439                "description": "Default Max Tokens",
1440                "type": "integer"
1441              },
1442              "has_reasoning_effort": {
1443                "description": "Enable has reasoning effort",
1444                "type": "boolean"
1445              },
1446              "id": {
1447                "description": "I D",
1448                "type": "string"
1449              },
1450              "model": {
1451                "description": "Name",
1452                "type": "string"
1453              },
1454              "reasoning_effort": {
1455                "description": "Reasoning Effort",
1456                "type": "string"
1457              },
1458              "supports_attachments": {
1459                "description": "Enable supports images",
1460                "type": "boolean"
1461              }
1462            },
1463            "required": [
1464              "id",
1465              "model",
1466              "cost_per_1m_in",
1467              "cost_per_1m_out",
1468              "cost_per_1m_in_cached",
1469              "cost_per_1m_out_cached",
1470              "context_window",
1471              "default_max_tokens",
1472              "can_reason",
1473              "reasoning_effort",
1474              "has_reasoning_effort",
1475              "supports_attachments"
1476            ]
1477          }
1478        },
1479        "provider_type": {
1480          "description": "Provider Type",
1481          "type": "string"
1482        }
1483      },
1484      "required": [
1485        "id",
1486        "provider_type",
1487        "disabled"
1488      ]
1489    },
1490    "TUIOptions": {
1491      "description": "T U I",
1492      "type": "object",
1493      "properties": {
1494        "compact_mode": {
1495          "description": "Enable compact mode",
1496          "type": "boolean",
1497          "default": false
1498        }
1499      },
1500      "required": [
1501        "compact_mode"
1502      ]
1503    }
1504  }
1505}