{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://www.schemastore.org/claude-code-launch.json",
  "title": "launch configuration",
  "description": "Configuration for preview servers in Claude Code Desktop.\nhttps://code.claude.com/docs/en/desktop#configure-preview-servers",
  "type": "object",
  "required": ["version", "configurations"],
  "additionalProperties": true,
  "properties": {
    "$schema": {
      "type": "string",
      "description": "JSON Schema reference for this configuration file."
    },
    "version": {
      "type": "string",
      "const": "0.0.1",
      "description": "Version of the launch configuration format."
    },
    "autoVerify": {
      "type": "boolean",
      "default": true,
      "description": "Whether Claude automatically verifies changes after editing files.\nhttps://code.claude.com/docs/en/desktop#auto-verify-changes"
    },
    "configurations": {
      "type": "array",
      "description": "Preview server configurations.",
      "items": {
        "$ref": "#/definitions/configuration"
      }
    }
  },
  "definitions": {
    "configuration": {
      "title": "preview server configuration",
      "type": "object",
      "required": ["name"],
      "additionalProperties": true,
      "properties": {
        "name": {
          "type": "string",
          "minLength": 1,
          "description": "Unique identifier for this server."
        },
        "runtimeExecutable": {
          "type": "string",
          "minLength": 1,
          "description": "Command used to start the server, such as npm, yarn, or node."
        },
        "runtimeArgs": {
          "type": "array",
          "description": "Arguments passed to runtimeExecutable.",
          "items": {
            "type": "string"
          }
        },
        "port": {
          "type": "integer",
          "minimum": 1,
          "maximum": 65535,
          "default": 3000,
          "description": "Port on which the server listens."
        },
        "cwd": {
          "type": "string",
          "description": "Working directory relative to the project root. Use ${workspaceFolder} to reference the project root explicitly."
        },
        "env": {
          "type": "object",
          "description": "Additional environment variables passed to the server. Do not store secrets here because launch.json is committed to the repository.",
          "additionalProperties": {
            "type": "string"
          }
        },
        "autoPort": {
          "type": "boolean",
          "description": "Whether Claude automatically selects a free port when the configured port is unavailable. When omitted, Claude asks the user."
        },
        "program": {
          "type": "string",
          "minLength": 1,
          "description": "Standalone script run directly with Node.js."
        },
        "args": {
          "type": "array",
          "description": "Arguments passed to program.",
          "items": {
            "type": "string"
          }
        },
        "url": {
          "type": "string",
          "format": "uri",
          "pattern": "^https?://",
          "description": "Address opened by the preview instead of http://localhost:<port>. Must use HTTP or HTTPS and must not contain a username or password. Localhost URLs must contain only the origin, and their port must match port.\nhttps://code.claude.com/docs/en/desktop#open-the-preview-at-a-specific-url"
        }
      },
      "dependencies": {
        "runtimeArgs": ["runtimeExecutable"],
        "args": ["program"]
      },
      "anyOf": [
        {
          "properties": {
            "runtimeExecutable": {}
          },
          "required": ["runtimeExecutable"]
        },
        {
          "properties": {
            "program": {}
          },
          "required": ["program"]
        },
        {
          "properties": {
            "url": {}
          },
          "required": ["url"]
        }
      ]
    }
  },
  "examples": [
    {
      "version": "0.0.1",
      "configurations": [
        {
          "name": "web",
          "runtimeExecutable": "npm",
          "runtimeArgs": ["run", "dev"],
          "port": 3000
        }
      ]
    },
    {
      "version": "0.0.1",
      "configurations": [
        {
          "name": "server",
          "program": "server.js",
          "args": ["--verbose"],
          "port": 4000
        }
      ]
    },
    {
      "version": "0.0.1",
      "configurations": [
        {
          "name": "existing-server",
          "url": "https://app.localhost:3000"
        }
      ]
    }
  ]
}
