1{
2 "$schema": "https://json-schema.org/draft/2020-12/schema",
3 "$id": "https://github.com/charmbracelet/crush/internal/config/config",
4 "$ref": "#/$defs/Config",
5 "$defs": {
6 "Attribution": {
7 "properties": {
8 "trailer_style": {
9 "type": "string",
10 "enum": [
11 "none",
12 "co-authored-by",
13 "assisted-by"
14 ],
15 "description": "Style of attribution trailer to add to commits",
16 "default": "assisted-by"
17 },
18 "co_authored_by": {
19 "type": "boolean",
20 "description": "Deprecated: use trailer_style instead",
21 "deprecated": true
22 },
23 "generated_with": {
24 "type": "boolean",
25 "description": "Add Generated with Crush line to commit messages and issues and PRs",
26 "default": true
27 }
28 },
29 "additionalProperties": false,
30 "type": "object"
31 },
32 "Completions": {
33 "properties": {
34 "max_depth": {
35 "type": "integer",
36 "description": "Maximum depth for the ls tool",
37 "default": 0,
38 "examples": [
39 10
40 ]
41 },
42 "max_items": {
43 "type": "integer",
44 "description": "Maximum number of items to return for the ls tool",
45 "default": 1000,
46 "examples": [
47 100
48 ]
49 }
50 },
51 "additionalProperties": false,
52 "type": "object"
53 },
54 "Config": {
55 "properties": {
56 "$schema": {
57 "type": "string"
58 },
59 "models": {
60 "additionalProperties": {
61 "$ref": "#/$defs/SelectedModel"
62 },
63 "type": "object",
64 "description": "Model configurations for different model types"
65 },
66 "providers": {
67 "$ref": "#/$defs/Map[string,github.com/charmbracelet/crush/internal/config.ProviderConfig]",
68 "description": "AI provider configurations"
69 },
70 "mcp": {
71 "$ref": "#/$defs/MCPs",
72 "description": "Model Context Protocol server configurations"
73 },
74 "lsp": {
75 "$ref": "#/$defs/LSPs",
76 "description": "Language Server Protocol configurations"
77 },
78 "options": {
79 "$ref": "#/$defs/Options",
80 "description": "General application options"
81 },
82 "permissions": {
83 "$ref": "#/$defs/Permissions",
84 "description": "Permission settings for tool usage"
85 },
86 "tools": {
87 "$ref": "#/$defs/Tools",
88 "description": "Tool configurations"
89 }
90 },
91 "additionalProperties": false,
92 "type": "object",
93 "required": [
94 "tools"
95 ]
96 },
97 "LSPConfig": {
98 "properties": {
99 "disabled": {
100 "type": "boolean",
101 "description": "Whether this LSP server is disabled",
102 "default": false
103 },
104 "command": {
105 "type": "string",
106 "description": "Command to execute for the LSP server",
107 "examples": [
108 "gopls"
109 ]
110 },
111 "args": {
112 "items": {
113 "type": "string"
114 },
115 "type": "array",
116 "description": "Arguments to pass to the LSP server command"
117 },
118 "env": {
119 "additionalProperties": {
120 "type": "string"
121 },
122 "type": "object",
123 "description": "Environment variables to set to the LSP server command"
124 },
125 "filetypes": {
126 "items": {
127 "type": "string",
128 "examples": [
129 "go",
130 "mod",
131 "rs",
132 "c",
133 "js",
134 "ts"
135 ]
136 },
137 "type": "array",
138 "description": "File types this LSP server handles"
139 },
140 "root_markers": {
141 "items": {
142 "type": "string",
143 "examples": [
144 "go.mod",
145 "package.json",
146 "Cargo.toml"
147 ]
148 },
149 "type": "array",
150 "description": "Files or directories that indicate the project root"
151 },
152 "init_options": {
153 "type": "object",
154 "description": "Initialization options passed to the LSP server during initialize request"
155 },
156 "options": {
157 "type": "object",
158 "description": "LSP server-specific settings passed during initialization"
159 },
160 "timeout": {
161 "type": "integer",
162 "description": "Timeout in seconds for LSP server initialization",
163 "default": 30,
164 "examples": [
165 60,
166 120
167 ]
168 }
169 },
170 "additionalProperties": false,
171 "type": "object"
172 },
173 "LSPs": {
174 "additionalProperties": {
175 "$ref": "#/$defs/LSPConfig"
176 },
177 "type": "object"
178 },
179 "MCPConfig": {
180 "properties": {
181 "command": {
182 "type": "string",
183 "description": "Command to execute for stdio MCP servers",
184 "examples": [
185 "npx"
186 ]
187 },
188 "env": {
189 "additionalProperties": {
190 "type": "string"
191 },
192 "type": "object",
193 "description": "Environment variables to set for the MCP server"
194 },
195 "args": {
196 "items": {
197 "type": "string"
198 },
199 "type": "array",
200 "description": "Arguments to pass to the MCP server command"
201 },
202 "type": {
203 "type": "string",
204 "enum": [
205 "stdio",
206 "sse",
207 "http"
208 ],
209 "description": "Type of MCP connection",
210 "default": "stdio"
211 },
212 "url": {
213 "type": "string",
214 "format": "uri",
215 "description": "URL for HTTP or SSE MCP servers",
216 "examples": [
217 "http://localhost:3000/mcp"
218 ]
219 },
220 "disabled": {
221 "type": "boolean",
222 "description": "Whether this MCP server is disabled",
223 "default": false
224 },
225 "disabled_tools": {
226 "items": {
227 "type": "string",
228 "examples": [
229 "get-library-doc"
230 ]
231 },
232 "type": "array",
233 "description": "List of tools from this MCP server to disable"
234 },
235 "timeout": {
236 "type": "integer",
237 "description": "Timeout in seconds for MCP server connections",
238 "default": 15,
239 "examples": [
240 30,
241 60,
242 120
243 ]
244 },
245 "headers": {
246 "additionalProperties": {
247 "type": "string"
248 },
249 "type": "object",
250 "description": "HTTP headers for HTTP/SSE MCP servers"
251 }
252 },
253 "additionalProperties": false,
254 "type": "object",
255 "required": [
256 "type"
257 ]
258 },
259 "MCPs": {
260 "additionalProperties": {
261 "$ref": "#/$defs/MCPConfig"
262 },
263 "type": "object"
264 },
265 "Map[string,github.com/charmbracelet/crush/internal/config.ProviderConfig]": {
266 "properties": {},
267 "additionalProperties": false,
268 "type": "object"
269 },
270 "Options": {
271 "properties": {
272 "context_paths": {
273 "items": {
274 "type": "string",
275 "examples": [
276 ".cursorrules",
277 "CRUSH.md"
278 ]
279 },
280 "type": "array",
281 "description": "Paths to files containing context information for the AI"
282 },
283 "skills_paths": {
284 "items": {
285 "type": "string",
286 "examples": [
287 "~/.config/crush/skills",
288 "./skills"
289 ]
290 },
291 "type": "array",
292 "description": "Paths to directories containing Agent Skills (folders with SKILL.md files)"
293 },
294 "tui": {
295 "$ref": "#/$defs/TUIOptions",
296 "description": "Terminal user interface options"
297 },
298 "debug": {
299 "type": "boolean",
300 "description": "Enable debug logging",
301 "default": false
302 },
303 "debug_lsp": {
304 "type": "boolean",
305 "description": "Enable debug logging for LSP servers",
306 "default": false
307 },
308 "disable_auto_summarize": {
309 "type": "boolean",
310 "description": "Disable automatic conversation summarization",
311 "default": false
312 },
313 "data_directory": {
314 "type": "string",
315 "description": "Directory for storing application data (relative to working directory)",
316 "default": ".crush",
317 "examples": [
318 ".crush"
319 ]
320 },
321 "disabled_tools": {
322 "items": {
323 "type": "string",
324 "examples": [
325 "bash",
326 "sourcegraph"
327 ]
328 },
329 "type": "array",
330 "description": "List of built-in tools to disable and hide from the agent"
331 },
332 "disable_provider_auto_update": {
333 "type": "boolean",
334 "description": "Disable providers auto-update",
335 "default": false
336 },
337 "disable_default_providers": {
338 "type": "boolean",
339 "description": "Ignore all default/embedded providers. When enabled",
340 "default": false
341 },
342 "attribution": {
343 "$ref": "#/$defs/Attribution",
344 "description": "Attribution settings for generated content"
345 },
346 "disable_metrics": {
347 "type": "boolean",
348 "description": "Disable sending metrics",
349 "default": false
350 },
351 "initialize_as": {
352 "type": "string",
353 "description": "Name of the context file to create/update during project initialization",
354 "default": "AGENTS.md",
355 "examples": [
356 "AGENTS.md",
357 "CRUSH.md",
358 "CLAUDE.md",
359 "docs/LLMs.md"
360 ]
361 },
362 "auto_lsp": {
363 "type": "boolean",
364 "description": "Automatically setup LSPs based on root markers",
365 "default": true
366 },
367 "progress": {
368 "type": "boolean",
369 "description": "Show indeterminate progress updates during long operations",
370 "default": true
371 },
372 "disable_notifications": {
373 "type": "boolean",
374 "description": "Disable desktop notifications",
375 "default": false
376 },
377 "disabled_skills": {
378 "items": {
379 "type": "string",
380 "examples": [
381 "crush-config"
382 ]
383 },
384 "type": "array",
385 "description": "List of skill names to disable and hide from the agent"
386 }
387 },
388 "additionalProperties": false,
389 "type": "object"
390 },
391 "Permissions": {
392 "properties": {
393 "allowed_tools": {
394 "items": {
395 "type": "string",
396 "examples": [
397 "bash",
398 "view"
399 ]
400 },
401 "type": "array",
402 "description": "List of tools that don't require permission prompts"
403 }
404 },
405 "additionalProperties": false,
406 "type": "object"
407 },
408 "SelectedModel": {
409 "properties": {
410 "model": {
411 "type": "string",
412 "description": "The model ID as used by the provider API",
413 "examples": [
414 "gpt-4o"
415 ]
416 },
417 "provider": {
418 "type": "string",
419 "description": "The model provider ID that matches a key in the providers config",
420 "examples": [
421 "openai"
422 ]
423 },
424 "reasoning_effort": {
425 "type": "string",
426 "enum": [
427 "low",
428 "medium",
429 "high"
430 ],
431 "description": "Reasoning effort level for OpenAI models that support it"
432 },
433 "think": {
434 "type": "boolean",
435 "description": "Enable thinking mode for Anthropic models that support reasoning"
436 },
437 "max_tokens": {
438 "type": "integer",
439 "maximum": 200000,
440 "description": "Maximum number of tokens for model responses",
441 "examples": [
442 4096
443 ]
444 },
445 "temperature": {
446 "type": "number",
447 "maximum": 1,
448 "minimum": 0,
449 "description": "Sampling temperature",
450 "examples": [
451 0.7
452 ]
453 },
454 "top_p": {
455 "type": "number",
456 "maximum": 1,
457 "minimum": 0,
458 "description": "Top-p (nucleus) sampling parameter",
459 "examples": [
460 0.9
461 ]
462 },
463 "top_k": {
464 "type": "integer",
465 "description": "Top-k sampling parameter"
466 },
467 "frequency_penalty": {
468 "type": "number",
469 "description": "Frequency penalty to reduce repetition"
470 },
471 "presence_penalty": {
472 "type": "number",
473 "description": "Presence penalty to increase topic diversity"
474 },
475 "provider_options": {
476 "type": "object",
477 "description": "Additional provider-specific options for the model"
478 }
479 },
480 "additionalProperties": false,
481 "type": "object",
482 "required": [
483 "model",
484 "provider"
485 ]
486 },
487 "TUIOptions": {
488 "properties": {
489 "compact_mode": {
490 "type": "boolean",
491 "description": "Enable compact mode for the TUI interface",
492 "default": false
493 },
494 "diff_mode": {
495 "type": "string",
496 "enum": [
497 "unified",
498 "split"
499 ],
500 "description": "Diff mode for the TUI interface"
501 },
502 "completions": {
503 "$ref": "#/$defs/Completions",
504 "description": "Completions UI options"
505 },
506 "transparent": {
507 "type": "boolean",
508 "description": "Enable transparent background for the TUI interface",
509 "default": false
510 }
511 },
512 "additionalProperties": false,
513 "type": "object",
514 "required": [
515 "completions"
516 ]
517 },
518 "ToolGrep": {
519 "properties": {
520 "timeout": {
521 "type": "integer",
522 "description": "Timeout for the grep tool call"
523 }
524 },
525 "additionalProperties": false,
526 "type": "object"
527 },
528 "ToolLs": {
529 "properties": {
530 "max_depth": {
531 "type": "integer",
532 "description": "Maximum depth for the ls tool",
533 "default": 0,
534 "examples": [
535 10
536 ]
537 },
538 "max_items": {
539 "type": "integer",
540 "description": "Maximum number of items to return for the ls tool",
541 "default": 1000,
542 "examples": [
543 100
544 ]
545 }
546 },
547 "additionalProperties": false,
548 "type": "object"
549 },
550 "Tools": {
551 "properties": {
552 "ls": {
553 "$ref": "#/$defs/ToolLs"
554 },
555 "grep": {
556 "$ref": "#/$defs/ToolGrep"
557 }
558 },
559 "additionalProperties": false,
560 "type": "object",
561 "required": [
562 "ls",
563 "grep"
564 ]
565 }
566 }
567}