{ "swagger": "2.0", "info": { "description": "Crush is a terminal-based AI coding assistant. This API is served over a Unix socket (or Windows named pipe) and provides programmatic access to workspaces, sessions, agents, LSP, MCP, and more.", "title": "Crush API", "contact": { "name": "Charm", "url": "https://charm.sh" }, "license": { "name": "MIT", "url": "https://github.com/charmbracelet/crush/blob/main/LICENSE" }, "version": "1.0" }, "basePath": "/v1", "paths": { "/config": { "get": { "produces": [ "application/json" ], "tags": [ "system" ], "summary": "Get server config", "responses": { "200": { "description": "OK", "schema": { "type": "object" } } } } }, "/control": { "post": { "consumes": [ "application/json" ], "tags": [ "system" ], "summary": "Send server control command", "parameters": [ { "description": "Control command (e.g. shutdown)", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.ServerControl" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/health": { "get": { "tags": [ "system" ], "summary": "Health check", "responses": { "200": { "description": "OK" } } } }, "/version": { "get": { "produces": [ "application/json" ], "tags": [ "system" ], "summary": "Get server version", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/proto.VersionInfo" } } } } }, "/workspaces": { "get": { "produces": [ "application/json" ], "tags": [ "workspaces" ], "summary": "List workspaces", "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/proto.Workspace" } } } } }, "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "workspaces" ], "summary": "Create workspace", "parameters": [ { "description": "Workspace creation params", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.Workspace" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/proto.Workspace" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}": { "get": { "produces": [ "application/json" ], "tags": [ "workspaces" ], "summary": "Get workspace", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/proto.Workspace" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } }, "delete": { "tags": [ "workspaces" ], "summary": "Delete workspace", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/agent": { "get": { "produces": [ "application/json" ], "tags": [ "agent" ], "summary": "Get agent info", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/proto.AgentInfo" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } }, "post": { "consumes": [ "application/json" ], "tags": [ "agent" ], "summary": "Send message to agent", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "description": "Agent message", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.AgentMessage" } } ], "responses": { "202": { "description": "Accepted" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "409": { "description": "Conflict", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/agent/default-small-model": { "get": { "produces": [ "application/json" ], "tags": [ "agent" ], "summary": "Get default small model", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Provider ID", "name": "provider_id", "in": "query" } ], "responses": { "200": { "description": "OK", "schema": { "type": "object" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/agent/init": { "post": { "tags": [ "agent" ], "summary": "Initialize agent", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/agent/sessions/{sid}": { "get": { "produces": [ "application/json" ], "tags": [ "agent" ], "summary": "Get agent session", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Session ID", "name": "sid", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/proto.AgentSession" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/agent/sessions/{sid}/cancel": { "post": { "tags": [ "agent" ], "summary": "Cancel agent session", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Session ID", "name": "sid", "in": "path", "required": true } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/agent/sessions/{sid}/prompts/clear": { "post": { "tags": [ "agent" ], "summary": "Clear prompt queue", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Session ID", "name": "sid", "in": "path", "required": true } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/agent/sessions/{sid}/prompts/list": { "get": { "produces": [ "application/json" ], "tags": [ "agent" ], "summary": "List queued prompts", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Session ID", "name": "sid", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/agent/sessions/{sid}/prompts/queued": { "get": { "produces": [ "application/json" ], "tags": [ "agent" ], "summary": "Get queued prompt status", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Session ID", "name": "sid", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/agent/sessions/{sid}/shell": { "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "agent" ], "summary": "Run shell command", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Session ID", "name": "sid", "in": "path", "required": true }, { "description": "Shell command", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.ShellCommandRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/proto.ShellCommandResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/agent/sessions/{sid}/summarize": { "post": { "tags": [ "agent" ], "summary": "Summarize session", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Session ID", "name": "sid", "in": "path", "required": true } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/agent/update": { "post": { "tags": [ "agent" ], "summary": "Update agent", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/config": { "get": { "produces": [ "application/json" ], "tags": [ "workspaces" ], "summary": "Get workspace config", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/config/compact": { "post": { "consumes": [ "application/json" ], "tags": [ "config" ], "summary": "Set compact mode", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "description": "Config compact request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.ConfigCompactRequest" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/config/import-copilot": { "post": { "produces": [ "application/json" ], "tags": [ "config" ], "summary": "Import Copilot credentials", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/proto.ImportCopilotResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/config/model": { "post": { "consumes": [ "application/json" ], "tags": [ "config" ], "summary": "Set the preferred model", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "description": "Config model request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.ConfigModelRequest" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/config/provider-key": { "post": { "consumes": [ "application/json" ], "tags": [ "config" ], "summary": "Set provider API key", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "description": "Config provider key request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.ConfigProviderKeyRequest" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/config/refresh-oauth": { "post": { "consumes": [ "application/json" ], "tags": [ "config" ], "summary": "Refresh OAuth token", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "description": "Refresh OAuth request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.ConfigRefreshOAuthRequest" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/config/remove": { "post": { "consumes": [ "application/json" ], "tags": [ "config" ], "summary": "Remove a config field", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "description": "Config remove request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.ConfigRemoveRequest" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/config/set": { "post": { "consumes": [ "application/json" ], "tags": [ "config" ], "summary": "Set a config field", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "description": "Config set request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.ConfigSetRequest" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/current-session": { "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "workspaces" ], "summary": "Set current session for a client", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Client ID (UUID)", "name": "client_id", "in": "query", "required": true }, { "description": "Current session selection", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.CurrentSession" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/events": { "get": { "produces": [ "text/event-stream" ], "tags": [ "workspaces" ], "summary": "Stream workspace events (SSE)", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/filetracker/lastread": { "get": { "produces": [ "application/json" ], "tags": [ "filetracker" ], "summary": "Get last read time for file", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Session ID", "name": "session_id", "in": "query" }, { "type": "string", "description": "File path", "name": "path", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/filetracker/read": { "post": { "consumes": [ "application/json" ], "tags": [ "filetracker" ], "summary": "Record file read", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "description": "File tracker read request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.FileTrackerReadRequest" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/lsps": { "get": { "produces": [ "application/json" ], "tags": [ "lsp" ], "summary": "List LSP clients", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "$ref": "#/definitions/proto.LSPClientInfo" } } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/lsps/start": { "post": { "consumes": [ "application/json" ], "tags": [ "lsp" ], "summary": "Start LSP server", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "description": "LSP start request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.LSPStartRequest" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/lsps/stop": { "post": { "tags": [ "lsp" ], "summary": "Stop all LSP servers", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/lsps/{lsp}/diagnostics": { "get": { "produces": [ "application/json" ], "tags": [ "lsp" ], "summary": "Get LSP diagnostics", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "LSP client name", "name": "lsp", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/mcp/docker/disable": { "post": { "tags": [ "mcp" ], "summary": "Disable Docker MCP", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/mcp/docker/enable": { "post": { "tags": [ "mcp" ], "summary": "Enable Docker MCP", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/mcp/get-prompt": { "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "mcp" ], "summary": "Get MCP prompt", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "description": "MCP get prompt request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.MCPGetPromptRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/proto.MCPGetPromptResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/mcp/prompts": { "get": { "produces": [ "application/json" ], "tags": [ "mcp" ], "summary": "Get MCP prompts", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/proto.MCPPrompt" } } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/mcp/read-resource": { "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "mcp" ], "summary": "Read MCP resource", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "description": "MCP read resource request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.MCPReadResourceRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "type": "object" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/mcp/refresh-prompts": { "post": { "consumes": [ "application/json" ], "tags": [ "mcp" ], "summary": "Refresh MCP prompts", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "description": "MCP name request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.MCPNameRequest" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/mcp/refresh-resources": { "post": { "consumes": [ "application/json" ], "tags": [ "mcp" ], "summary": "Refresh MCP resources", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "description": "MCP name request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.MCPNameRequest" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/mcp/refresh-tools": { "post": { "consumes": [ "application/json" ], "tags": [ "mcp" ], "summary": "Refresh MCP tools", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "description": "MCP name request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.MCPNameRequest" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/mcp/states": { "get": { "produces": [ "application/json" ], "tags": [ "mcp" ], "summary": "Get MCP client states", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object", "additionalProperties": { "$ref": "#/definitions/proto.MCPClientInfo" } } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/messages/user": { "get": { "produces": [ "application/json" ], "tags": [ "workspaces" ], "summary": "Get all user messages for workspace", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/github_com_charmbracelet_crush_internal_proto.Message" } } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/permissions/grant": { "post": { "consumes": [ "application/json" ], "tags": [ "permissions" ], "summary": "Grant permission", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "description": "Permission grant", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.PermissionGrant" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/proto.PermissionGrantResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/permissions/skip": { "get": { "produces": [ "application/json" ], "tags": [ "permissions" ], "summary": "Get skip permissions status", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/proto.PermissionSkipRequest" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } }, "post": { "consumes": [ "application/json" ], "tags": [ "permissions" ], "summary": "Set skip permissions", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "description": "Permission skip request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.PermissionSkipRequest" } } ], "responses": { "200": { "description": "OK" }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/project/init": { "post": { "tags": [ "project" ], "summary": "Mark project as initialized", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/project/init-prompt": { "get": { "produces": [ "application/json" ], "tags": [ "project" ], "summary": "Get project initialization prompt", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/proto.ProjectInitPromptResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/project/needs-init": { "get": { "produces": [ "application/json" ], "tags": [ "project" ], "summary": "Check if project needs initialization", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/proto.ProjectNeedsInitResponse" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/providers": { "get": { "produces": [ "application/json" ], "tags": [ "workspaces" ], "summary": "Get workspace providers", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "object" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/questions/answer": { "post": { "consumes": [ "application/json" ], "tags": [ "questions" ], "summary": "Answer question batch", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "description": "Question batch answer", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.QuestionAnswer" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/proto.QuestionAnswerResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/questions/cancel": { "post": { "tags": [ "questions" ], "summary": "Cancel question batch", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/proto.QuestionAnswerResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/sessions": { "get": { "produces": [ "application/json" ], "tags": [ "sessions" ], "summary": "List sessions", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/proto.Session" } } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } }, "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "sessions" ], "summary": "Create session", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "description": "Session creation params (title)", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.Session" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/proto.Session" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/sessions/{sid}": { "get": { "produces": [ "application/json" ], "tags": [ "sessions" ], "summary": "Get session", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Session ID", "name": "sid", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/proto.Session" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } }, "put": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "sessions" ], "summary": "Update session", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Session ID", "name": "sid", "in": "path", "required": true }, { "description": "Updated session", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.Session" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/proto.Session" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } }, "delete": { "tags": [ "sessions" ], "summary": "Delete session", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Session ID", "name": "sid", "in": "path", "required": true } ], "responses": { "200": { "description": "OK" }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/sessions/{sid}/filetracker/files": { "get": { "produces": [ "application/json" ], "tags": [ "filetracker" ], "summary": "List tracked files for session", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Session ID", "name": "sid", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "type": "string" } } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/sessions/{sid}/history": { "get": { "produces": [ "application/json" ], "tags": [ "sessions" ], "summary": "Get session history", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Session ID", "name": "sid", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/proto.File" } } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/sessions/{sid}/messages": { "get": { "produces": [ "application/json" ], "tags": [ "sessions" ], "summary": "Get session messages", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Session ID", "name": "sid", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/github_com_charmbracelet_crush_internal_proto.Message" } } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/sessions/{sid}/messages/user": { "get": { "produces": [ "application/json" ], "tags": [ "sessions" ], "summary": "Get user messages for session", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "type": "string", "description": "Session ID", "name": "sid", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/github_com_charmbracelet_crush_internal_proto.Message" } } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/skills": { "get": { "produces": [ "application/json" ], "tags": [ "skills" ], "summary": "List visible skills", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "type": "array", "items": { "$ref": "#/definitions/proto.SkillInfo" } } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } }, "/workspaces/{id}/skills/read": { "post": { "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "skills" ], "summary": "Read skill content", "parameters": [ { "type": "string", "description": "Workspace ID", "name": "id", "in": "path", "required": true }, { "description": "Read skill request", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/proto.ReadSkillRequest" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/proto.ReadSkillResponse" } }, "400": { "description": "Bad Request", "schema": { "$ref": "#/definitions/proto.Error" } }, "404": { "description": "Not Found", "schema": { "$ref": "#/definitions/proto.Error" } }, "500": { "description": "Internal Server Error", "schema": { "$ref": "#/definitions/proto.Error" } } } } } }, "definitions": { "catwalk.Model": { "type": "object", "properties": { "can_reason": { "type": "boolean" }, "context_window": { "type": "integer" }, "cost_per_1m_in": { "type": "number" }, "cost_per_1m_in_cached": { "type": "number" }, "cost_per_1m_out": { "type": "number" }, "cost_per_1m_out_cached": { "type": "number" }, "default_max_tokens": { "type": "integer" }, "default_reasoning_effort": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "options": { "$ref": "#/definitions/catwalk.ModelOptions" }, "reasoning_levels": { "type": "array", "items": { "type": "string" } }, "supports_attachments": { "type": "boolean" } } }, "catwalk.ModelOptions": { "type": "object", "properties": { "frequency_penalty": { "type": "number" }, "presence_penalty": { "type": "number" }, "provider_options": { "type": "object", "additionalProperties": {} }, "temperature": { "type": "number" }, "top_k": { "type": "integer" }, "top_p": { "type": "number" } } }, "config.Attribution": { "type": "object", "properties": { "co_authored_by": { "type": "boolean" }, "generated_with": { "type": "boolean" }, "trailer_style": { "$ref": "#/definitions/config.TrailerStyle" } } }, "config.Completions": { "type": "object", "properties": { "max_depth": { "type": "integer" }, "max_items": { "type": "integer" } } }, "config.HookConfig": { "type": "object", "properties": { "command": { "description": "Shell command to execute.", "type": "string" }, "matcher": { "description": "Regex pattern tested against the tool name. Empty means match all.", "type": "string" }, "name": { "description": "Friendly display name shown in the TUI. Falls back to Command when empty.", "type": "string" }, "timeout": { "description": "Timeout in seconds. Default 30.", "type": "integer" } } }, "config.LSPConfig": { "type": "object", "properties": { "args": { "type": "array", "items": { "type": "string" } }, "command": { "type": "string" }, "disabled": { "type": "boolean" }, "env": { "type": "object", "additionalProperties": { "type": "string" } }, "filetypes": { "type": "array", "items": { "type": "string" } }, "init_options": { "type": "object", "additionalProperties": {} }, "options": { "type": "object", "additionalProperties": {} }, "root_markers": { "type": "array", "items": { "type": "string" } }, "timeout": { "type": "integer" } } }, "config.LSPs": { "type": "object", "additionalProperties": { "$ref": "#/definitions/config.LSPConfig" } }, "config.MCPConfig": { "type": "object", "properties": { "args": { "type": "array", "items": { "type": "string" } }, "command": { "type": "string" }, "disabled": { "type": "boolean" }, "disabled_tools": { "type": "array", "items": { "type": "string" } }, "enabled_tools": { "type": "array", "items": { "type": "string" } }, "env": { "type": "object", "additionalProperties": { "type": "string" } }, "headers": { "description": "Headers are HTTP headers for HTTP/SSE MCP servers. Values run\nthrough shell expansion at MCP startup, so $VAR and $(cmd)\nwork. A header whose value resolves to the empty string (unset\nbare $VAR under lenient nounset, $(echo), or literal \"\") is\nomitted from the outgoing request rather than sent as\n\"Header:\".", "type": "object", "additionalProperties": { "type": "string" } }, "oauth": { "description": "OAuth enables the MCP OAuth 2.1 authorization flow for HTTP\ntransport servers. When true, the client uses dynamic client\nregistration and opens a browser for the user to authorize.\nTokens are persisted automatically. Only supported for type=http.", "type": "boolean" }, "oauth_callback_port": { "description": "OAuthCallbackPort pins the localhost port used for the OAuth\nredirect listener. Set this when the OAuth provider requires an\nexact-match callback URL (e.g. GitHub OAuth Apps). When omitted,\nCrush picks the first free port from its default range.", "type": "integer" }, "oauth_client_id": { "description": "OAuthClientID is an optional pre-registered OAuth client ID. Set\nit for servers that do not support dynamic client registration\n(e.g. GitHub, Slack) and instead issue client credentials when you\nregister an OAuth app. Values run through shell expansion, so\n$VAR and $(cmd) work.", "type": "string" }, "oauth_client_secret": { "description": "OAuthClientSecret is the optional secret paired with\nOAuthClientID for confidential clients. Values run through shell\nexpansion, so $VAR and $(cmd) work.", "type": "string" }, "oauth_token": { "description": "OAuthToken is the persisted OAuth token for this server. It is\nmanaged internally and stored in the global data config.", "allOf": [ { "$ref": "#/definitions/oauth.Token" } ] }, "timeout": { "type": "integer" }, "type": { "$ref": "#/definitions/config.MCPType" }, "url": { "type": "string" } } }, "config.MCPType": { "type": "string", "enum": [ "stdio", "sse", "http" ], "x-enum-varnames": [ "MCPStdio", "MCPSSE", "MCPHttp" ] }, "config.MCPs": { "type": "object", "additionalProperties": { "$ref": "#/definitions/config.MCPConfig" } }, "config.Permissions": { "type": "object", "properties": { "allowed_tools": { "type": "array", "items": { "type": "string" } } } }, "config.SelectedModel": { "type": "object", "properties": { "frequency_penalty": { "type": "number" }, "max_tokens": { "description": "Overrides the default model configuration.", "type": "integer" }, "model": { "description": "The model id as used by the provider API.\nRequired.", "type": "string" }, "presence_penalty": { "type": "number" }, "provider": { "description": "The model provider, same as the key/id used in the providers config.\nRequired.", "type": "string" }, "provider_options": { "description": "Override provider specific options.", "type": "object", "additionalProperties": {} }, "reasoning_effort": { "description": "Only used by models that use the openai provider and need this set.", "type": "string" }, "temperature": { "type": "number" }, "think": { "description": "Used by anthropic models that can reason to indicate if the model should think.", "type": "boolean" }, "top_k": { "type": "integer" }, "top_p": { "type": "number" } } }, "config.SelectedModelType": { "type": "string", "enum": [ "large", "small" ], "x-enum-varnames": [ "SelectedModelTypeLarge", "SelectedModelTypeSmall" ] }, "config.TUIOptions": { "type": "object", "properties": { "compact_mode": { "type": "boolean" }, "completions": { "$ref": "#/definitions/config.Completions" }, "diff_mode": { "type": "string" }, "scrollbar": { "type": "string" }, "transparent": { "type": "boolean" } } }, "config.ToolGlob": { "type": "object", "properties": { "timeout": { "$ref": "#/definitions/time.Duration" } } }, "config.ToolGrep": { "type": "object", "properties": { "timeout": { "$ref": "#/definitions/time.Duration" } } }, "config.ToolLs": { "type": "object", "properties": { "max_depth": { "type": "integer" }, "max_items": { "type": "integer" } } }, "config.Tools": { "type": "object", "properties": { "glob": { "$ref": "#/definitions/config.ToolGlob" }, "grep": { "$ref": "#/definitions/config.ToolGrep" }, "ls": { "$ref": "#/definitions/config.ToolLs" } } }, "config.TrailerStyle": { "type": "string", "enum": [ "none", "co-authored-by", "assisted-by" ], "x-enum-varnames": [ "TrailerStyleNone", "TrailerStyleCoAuthoredBy", "TrailerStyleAssistedBy" ] }, "csync.Map-string-config_ProviderConfig": { "type": "object" }, "github_com_charmbracelet_crush_internal_config.Config": { "type": "object", "properties": { "$schema": { "type": "string" }, "env": { "description": "Env is a map of environment variables set on startup.", "type": "object", "additionalProperties": { "type": "string" } }, "hooks": { "type": "object", "additionalProperties": { "type": "array", "items": { "$ref": "#/definitions/config.HookConfig" } } }, "lsp": { "$ref": "#/definitions/config.LSPs" }, "mcp": { "$ref": "#/definitions/config.MCPs" }, "models": { "description": "We currently only support large/small as values here.", "type": "object", "additionalProperties": { "$ref": "#/definitions/config.SelectedModel" } }, "options": { "$ref": "#/definitions/github_com_charmbracelet_crush_internal_config.Options" }, "permissions": { "$ref": "#/definitions/config.Permissions" }, "providers": { "description": "The providers that are configured", "allOf": [ { "$ref": "#/definitions/csync.Map-string-config_ProviderConfig" } ] }, "recent_models": { "description": "Recently used models stored in the data directory config.", "type": "object", "additionalProperties": { "type": "array", "items": { "$ref": "#/definitions/config.SelectedModel" } } }, "tools": { "$ref": "#/definitions/config.Tools" } } }, "github_com_charmbracelet_crush_internal_config.Options": { "type": "object", "properties": { "attribution": { "$ref": "#/definitions/config.Attribution" }, "auto_lsp": { "type": "boolean" }, "context_paths": { "type": "array", "items": { "type": "string" } }, "data_directory": { "description": "DataDirectory is where Crush keeps per-project state such as\nthe SQLite database and workspace overrides. Relative paths are\nresolved against the working directory; absolute paths are used\nverbatim. After defaulting the stored value is always absolute.", "type": "string" }, "debug": { "type": "boolean" }, "debug_lsp": { "type": "boolean" }, "disable_auto_summarize": { "type": "boolean" }, "disable_default_providers": { "type": "boolean" }, "disable_metrics": { "type": "boolean" }, "disable_provider_auto_update": { "type": "boolean" }, "disabled_skills": { "type": "array", "items": { "type": "string" } }, "disabled_tools": { "type": "array", "items": { "type": "string" } }, "global_context_paths": { "type": "array", "items": { "type": "string" } }, "initialize_as": { "type": "string" }, "notifications": { "type": "string" }, "progress": { "type": "boolean" }, "skills_paths": { "type": "array", "items": { "type": "string" } }, "tui": { "$ref": "#/definitions/config.TUIOptions" } } }, "github_com_charmbracelet_crush_internal_config.Scope": { "type": "integer", "enum": [ 0, 1 ], "x-enum-varnames": [ "ScopeGlobal", "ScopeWorkspace" ] }, "github_com_charmbracelet_crush_internal_proto.Message": { "type": "object", "properties": { "created_at": { "type": "integer" }, "id": { "type": "string" }, "model": { "type": "string" }, "parts": { "type": "array", "items": {} }, "provider": { "type": "string" }, "role": { "$ref": "#/definitions/proto.MessageRole" }, "session_id": { "type": "string" }, "updated_at": { "type": "integer" } } }, "lsp.ServerState": { "type": "integer", "enum": [ 0, 1, 2, 3, 4, 5 ], "x-enum-varnames": [ "StateUnstarted", "StateStarting", "StateReady", "StateError", "StateStopped", "StateDisabled" ] }, "oauth.OAuthClient": { "type": "object", "properties": { "auth_style": { "type": "integer" }, "auth_url": { "type": "string" }, "client_id": { "type": "string" }, "client_secret": { "type": "string" }, "token_url": { "type": "string" } } }, "oauth.Token": { "type": "object", "properties": { "access_token": { "type": "string" }, "client": { "$ref": "#/definitions/oauth.OAuthClient" }, "expires_at": { "type": "integer" }, "expires_in": { "type": "integer" }, "refresh_token": { "type": "string" } } }, "proto.APIKeyKind": { "type": "string", "enum": [ "string", "oauth" ], "x-enum-varnames": [ "APIKeyKindString", "APIKeyKindOAuth" ] }, "proto.AgentInfo": { "type": "object", "properties": { "is_busy": { "type": "boolean" }, "is_ready": { "type": "boolean" }, "model": { "$ref": "#/definitions/catwalk.Model" }, "model_cfg": { "$ref": "#/definitions/config.SelectedModel" } } }, "proto.AgentMessage": { "type": "object", "properties": { "attachments": { "type": "array", "items": { "$ref": "#/definitions/proto.Attachment" } }, "prompt": { "type": "string" }, "run_id": { "type": "string" }, "session_id": { "type": "string" } } }, "proto.AgentSession": { "type": "object", "properties": { "attached_clients": { "type": "integer" }, "completion_tokens": { "type": "integer" }, "cost": { "type": "number" }, "created_at": { "type": "integer" }, "id": { "type": "string" }, "is_busy": { "type": "boolean" }, "message_count": { "type": "integer" }, "parent_session_id": { "type": "string" }, "prompt_tokens": { "type": "integer" }, "summary_message_id": { "type": "string" }, "title": { "type": "string" }, "todos": { "type": "array", "items": { "$ref": "#/definitions/proto.Todo" } }, "updated_at": { "type": "integer" } } }, "proto.Attachment": { "type": "object", "properties": { "content": { "type": "array", "items": { "type": "integer" } }, "file_name": { "type": "string" }, "file_path": { "type": "string" }, "mime_type": { "type": "string" } } }, "proto.ConfigCompactRequest": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "scope": { "$ref": "#/definitions/github_com_charmbracelet_crush_internal_config.Scope" } } }, "proto.ConfigModelRequest": { "type": "object", "properties": { "model": { "$ref": "#/definitions/config.SelectedModel" }, "model_type": { "$ref": "#/definitions/config.SelectedModelType" }, "scope": { "$ref": "#/definitions/github_com_charmbracelet_crush_internal_config.Scope" } } }, "proto.ConfigProviderKeyRequest": { "type": "object", "properties": { "api_key": { "type": "array", "items": { "type": "integer" } }, "kind": { "$ref": "#/definitions/proto.APIKeyKind" }, "provider_id": { "type": "string" }, "scope": { "$ref": "#/definitions/github_com_charmbracelet_crush_internal_config.Scope" } } }, "proto.ConfigRefreshOAuthRequest": { "type": "object", "properties": { "provider_id": { "type": "string" }, "scope": { "$ref": "#/definitions/github_com_charmbracelet_crush_internal_config.Scope" } } }, "proto.ConfigRemoveRequest": { "type": "object", "properties": { "key": { "type": "string" }, "scope": { "$ref": "#/definitions/github_com_charmbracelet_crush_internal_config.Scope" } } }, "proto.ConfigSetRequest": { "type": "object", "properties": { "key": { "type": "string" }, "scope": { "$ref": "#/definitions/github_com_charmbracelet_crush_internal_config.Scope" }, "value": {} } }, "proto.CurrentSession": { "type": "object", "properties": { "session_id": { "type": "string" } } }, "proto.Error": { "type": "object", "properties": { "message": { "type": "string" } } }, "proto.File": { "type": "object", "properties": { "content": { "type": "string" }, "created_at": { "type": "integer" }, "id": { "type": "string" }, "path": { "type": "string" }, "session_id": { "type": "string" }, "updated_at": { "type": "integer" }, "version": { "type": "integer" } } }, "proto.FileTrackerReadRequest": { "type": "object", "properties": { "path": { "type": "string" }, "session_id": { "type": "string" } } }, "proto.ImportCopilotResponse": { "type": "object", "properties": { "success": { "type": "boolean" }, "token": {} } }, "proto.LSPClientInfo": { "type": "object", "properties": { "connected_at": { "type": "string" }, "diagnostic_count": { "type": "integer" }, "error": {}, "name": { "type": "string" }, "state": { "$ref": "#/definitions/lsp.ServerState" } } }, "proto.LSPStartRequest": { "type": "object", "properties": { "path": { "type": "string" } } }, "proto.MCPClientInfo": { "type": "object", "properties": { "connected_at": { "type": "string" }, "error": {}, "name": { "type": "string" }, "prompt_count": { "type": "integer" }, "resource_count": { "type": "integer" }, "state": { "$ref": "#/definitions/proto.MCPState" }, "tool_count": { "type": "integer" } } }, "proto.MCPGetPromptRequest": { "type": "object", "properties": { "args": { "type": "object", "additionalProperties": { "type": "string" } }, "client_id": { "type": "string" }, "prompt_id": { "type": "string" } } }, "proto.MCPGetPromptResponse": { "type": "object", "properties": { "prompt": { "type": "string" } } }, "proto.MCPNameRequest": { "type": "object", "properties": { "name": { "type": "string" } } }, "proto.MCPPrompt": { "type": "object", "properties": { "arguments": { "type": "array", "items": { "$ref": "#/definitions/proto.MCPPromptArgument" } }, "client_id": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "prompt_id": { "type": "string" }, "title": { "type": "string" } } }, "proto.MCPPromptArgument": { "type": "object", "properties": { "description": { "type": "string" }, "id": { "type": "string" }, "required": { "type": "boolean" }, "title": { "type": "string" } } }, "proto.MCPReadResourceRequest": { "type": "object", "properties": { "name": { "type": "string" }, "uri": { "type": "string" } } }, "proto.MCPState": { "type": "integer", "enum": [ 0, 1, 2, 3, 4 ], "x-enum-varnames": [ "MCPStateDisabled", "MCPStateStarting", "MCPStateConnected", "MCPStateError", "MCPStateNeedsAuth" ] }, "proto.MessageRole": { "type": "string", "enum": [ "assistant", "user", "system", "tool" ], "x-enum-varnames": [ "Assistant", "User", "System", "Tool" ] }, "proto.PermissionAction": { "type": "string", "enum": [ "allow", "allow_session", "deny" ], "x-enum-varnames": [ "PermissionAllow", "PermissionAllowForSession", "PermissionDeny" ] }, "proto.PermissionGrant": { "type": "object", "properties": { "action": { "$ref": "#/definitions/proto.PermissionAction" }, "permission": { "$ref": "#/definitions/proto.PermissionRequest" } } }, "proto.PermissionGrantResponse": { "type": "object", "properties": { "resolved": { "type": "boolean" } } }, "proto.PermissionRequest": { "type": "object", "properties": { "action": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "params": {}, "path": { "type": "string" }, "session_id": { "type": "string" }, "tool_call_id": { "type": "string" }, "tool_name": { "type": "string" } } }, "proto.PermissionSkipRequest": { "type": "object", "properties": { "skip": { "type": "boolean" } } }, "proto.ProjectInitPromptResponse": { "type": "object", "properties": { "prompt": { "type": "string" } } }, "proto.ProjectNeedsInitResponse": { "type": "object", "properties": { "needs_init": { "type": "boolean" } } }, "proto.QuestionAnswer": { "type": "object", "properties": { "batch_request_id": { "type": "string" }, "responses": { "type": "array", "items": { "$ref": "#/definitions/proto.QuestionResponse" } } } }, "proto.QuestionAnswerResponse": { "type": "object", "properties": { "resolved": { "type": "boolean" } } }, "proto.QuestionResponse": { "type": "object", "properties": { "fill_in_text": { "type": "string" }, "notes": { "type": "object", "additionalProperties": { "type": "string" } }, "request_id": { "type": "string" }, "selected_ids": { "type": "array", "items": { "type": "string" } }, "yes": { "type": "boolean" } } }, "proto.ReadSkillRequest": { "type": "object", "properties": { "skill_id": { "type": "string" } } }, "proto.ReadSkillResponse": { "type": "object", "properties": { "content": { "type": "array", "items": { "type": "integer" } }, "result": { "$ref": "#/definitions/proto.SkillReadResult" } } }, "proto.ServerControl": { "type": "object", "properties": { "command": { "type": "string" } } }, "proto.Session": { "type": "object", "properties": { "attached_clients": { "type": "integer" }, "completion_tokens": { "type": "integer" }, "cost": { "type": "number" }, "created_at": { "type": "integer" }, "id": { "type": "string" }, "is_busy": { "type": "boolean" }, "message_count": { "type": "integer" }, "parent_session_id": { "type": "string" }, "prompt_tokens": { "type": "integer" }, "summary_message_id": { "type": "string" }, "title": { "type": "string" }, "todos": { "type": "array", "items": { "$ref": "#/definitions/proto.Todo" } }, "updated_at": { "type": "integer" } } }, "proto.ShellCommandRequest": { "type": "object", "properties": { "command": { "type": "string" }, "session_id": { "type": "string" }, "term_width": { "type": "integer" } } }, "proto.ShellCommandResponse": { "type": "object", "properties": { "exit_code": { "type": "integer" }, "output": { "type": "string" } } }, "proto.SkillDiscoveryState": { "type": "integer", "enum": [ 0, 1 ], "x-enum-varnames": [ "SkillStateNormal", "SkillStateError" ] }, "proto.SkillInfo": { "type": "object", "properties": { "description": { "type": "string" }, "id": { "type": "string" }, "label": { "type": "string" }, "name": { "type": "string" }, "source": { "type": "string" }, "user_invocable": { "type": "boolean" } } }, "proto.SkillReadResult": { "type": "object", "properties": { "builtin": { "type": "boolean" }, "description": { "type": "string" }, "name": { "type": "string" }, "source": { "type": "string" } } }, "proto.SkillState": { "type": "object", "properties": { "error": { "type": "string" }, "name": { "type": "string" }, "path": { "type": "string" }, "state": { "$ref": "#/definitions/proto.SkillDiscoveryState" } } }, "proto.Todo": { "type": "object", "properties": { "active_form": { "type": "string" }, "content": { "type": "string" }, "status": { "type": "string" } } }, "proto.VersionInfo": { "type": "object", "properties": { "build_id": { "type": "string" }, "commit": { "type": "string" }, "go_version": { "type": "string" }, "platform": { "type": "string" }, "version": { "type": "string" } } }, "proto.Workspace": { "type": "object", "properties": { "channels": { "description": "Channels lists the MCP servers opted in as channels for this workspace\n(from the --channels flag).", "type": "array", "items": { "type": "string" } }, "client_id": { "type": "string" }, "config": { "$ref": "#/definitions/github_com_charmbracelet_crush_internal_config.Config" }, "data_dir": { "type": "string" }, "debug": { "type": "boolean" }, "env": { "type": "array", "items": { "type": "string" } }, "id": { "type": "string" }, "path": { "type": "string" }, "skills": { "description": "Skills carries the snapshot of skill discovery state at workspace\ncreation time. Subsequent updates flow through the SSE event\nstream.", "type": "array", "items": { "$ref": "#/definitions/proto.SkillState" } }, "version": { "type": "string" }, "yolo": { "type": "boolean" } } }, "time.Duration": { "type": "integer", "format": "int64", "enum": [ -9223372036854775808, 9223372036854775807, 1, 1000, 1000000, 1000000000, 60000000000, 3600000000000 ], "x-enum-varnames": [ "minDuration", "maxDuration", "Nanosecond", "Microsecond", "Millisecond", "Second", "Minute", "Hour" ] } } }