{
  "id": "openclaw-cursor-brain",
  "name": "Cursor Brain",
  "description": "Use Cursor Agent as the AI brain for OpenClaw via MCP",
  "skills": [
    "./skills"
  ],
  "configSchema": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "cursorPath": {
        "type": "string",
        "description": "Path to cursor agent binary. Leave empty to auto-detect."
      },
      "outputFormat": {
        "type": "string",
        "enum": [
          "stream-json",
          "json"
        ],
        "description": "Output format for cursor-agent. Auto-detected if not set. Use 'stream-json' for streaming + thinking blocks, 'json' for batch."
      },
      "proxyPort": {
        "type": "number",
        "default": 18790,
        "description": "Port for the local streaming proxy (OpenAI-compatible). Default 18790."
      },
      "requestTimeout": {
        "type": "number",
        "default": 300000,
        "description": "Per-request timeout in ms. Min 60000. Proxy reads from openclaw.json. Preserved on upgrade."
      },
      "degradedTimeout": {
        "type": "number",
        "default": 300000,
        "description": "Timeout in ms when already degraded. Proxy reads from openclaw.json."
      },
      "maxConsecutiveFailures": {
        "type": "number",
        "default": 8,
        "description": "Consecutive failure threshold before proxy self-exits. Proxy reads from openclaw.json."
      },
      "maxConsecutiveTimeouts": {
        "type": "number",
        "default": 5,
        "description": "Consecutive timeout threshold before proxy self-exits. Proxy reads from openclaw.json."
      },
      "streamResolveGraceMs": {
        "type": "number",
        "default": 5000,
        "description": "Grace period in ms after killing child before returning 503. Proxy reads from openclaw.json."
      },
      "instantResult": {
        "type": "boolean",
        "default": true,
        "description": "Send batch results instantly. Proxy reads from openclaw.json."
      },
      "forwardThinking": {
        "type": "string",
        "enum": [
          "off",
          "content",
          "reasoning_content"
        ],
        "default": "content",
        "description": "How to stream Cursor's thinking output. off: drop (not sent). content: send as normal content, markdown blockquote + \"---\" before reply (OpenClaw streaming cards). reasoning_content: send in the reasoning_content field (OpenAI-style). Proxy reads from openclaw.json."
      },
      "streamSpeed": {
        "type": "number",
        "default": 200,
        "description": "Chunked streaming chars/sec when instantResult is false. Proxy reads from openclaw.json."
      }
    }
  }
}