{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "definitions": {
    "AbsolutePathBuf": {
      "description": "A path that is guaranteed to be absolute and normalized (though it is not guaranteed to be canonicalized or exist on the filesystem).\n\nIMPORTANT: When deserializing an `AbsolutePathBuf`, a base path must be set using [AbsolutePathBufGuard::new]. If no base path is set, the deserialization will fail unless the path being deserialized is already absolute.",
      "type": "string"
    },
    "ApprovalsReviewer": {
      "description": "Configures who approval requests are routed to for review. Examples include sandbox escapes, blocked network access, MCP approval prompts, and ARC escalations. Defaults to `user`. `auto_review` uses a carefully prompted subagent to gather relevant context and apply a risk-based decision framework before approving or denying the request. The legacy value `guardian_subagent` is accepted for compatibility.",
      "enum": [
        "user",
        "auto_review",
        "guardian_subagent"
      ],
      "type": "string"
    },
    "AskForApproval": {
      "oneOf": [
        {
          "enum": [
            "untrusted",
            "on-failure",
            "on-request",
            "never"
          ],
          "type": "string"
        },
        {
          "additionalProperties": false,
          "properties": {
            "granular": {
              "properties": {
                "mcp_elicitations": {
                  "type": "boolean"
                },
                "request_permissions": {
                  "default": false,
                  "type": "boolean"
                },
                "rules": {
                  "type": "boolean"
                },
                "sandbox_approval": {
                  "type": "boolean"
                },
                "skill_approval": {
                  "default": false,
                  "type": "boolean"
                }
              },
              "required": [
                "mcp_elicitations",
                "rules",
                "sandbox_approval"
              ],
              "type": "object"
            }
          },
          "required": [
            "granular"
          ],
          "title": "GranularAskForApproval",
          "type": "object"
        }
      ]
    },
    "PermissionProfileModificationParams": {
      "oneOf": [
        {
          "description": "Additional concrete directory that should be writable.",
          "properties": {
            "path": {
              "$ref": "#/definitions/AbsolutePathBuf"
            },
            "type": {
              "enum": [
                "additionalWritableRoot"
              ],
              "title": "AdditionalWritableRootPermissionProfileModificationParamsType",
              "type": "string"
            }
          },
          "required": [
            "path",
            "type"
          ],
          "title": "AdditionalWritableRootPermissionProfileModificationParams",
          "type": "object"
        }
      ]
    },
    "PermissionProfileSelectionParams": {
      "oneOf": [
        {
          "description": "Select a named built-in or user-defined profile and optionally apply bounded modifications that Codex knows how to validate.",
          "properties": {
            "id": {
              "type": "string"
            },
            "modifications": {
              "items": {
                "$ref": "#/definitions/PermissionProfileModificationParams"
              },
              "type": [
                "array",
                "null"
              ]
            },
            "type": {
              "enum": [
                "profile"
              ],
              "title": "ProfilePermissionProfileSelectionParamsType",
              "type": "string"
            }
          },
          "required": [
            "id",
            "type"
          ],
          "title": "ProfilePermissionProfileSelectionParams",
          "type": "object"
        }
      ]
    },
    "SandboxMode": {
      "enum": [
        "read-only",
        "workspace-write",
        "danger-full-access"
      ],
      "type": "string"
    },
    "ServiceTier": {
      "enum": [
        "fast",
        "flex"
      ],
      "type": "string"
    }
  },
  "description": "There are two ways to fork a thread: 1. By thread_id: load the thread from disk by thread_id and fork it into a new thread. 2. By path: load the thread from disk by path and fork it into a new thread.\n\nIf using path, the thread_id param will be ignored.\n\nPrefer using thread_id whenever possible.",
  "properties": {
    "approvalPolicy": {
      "anyOf": [
        {
          "$ref": "#/definitions/AskForApproval"
        },
        {
          "type": "null"
        }
      ]
    },
    "approvalsReviewer": {
      "anyOf": [
        {
          "$ref": "#/definitions/ApprovalsReviewer"
        },
        {
          "type": "null"
        }
      ],
      "description": "Override where approval requests are routed for review on this thread and subsequent turns."
    },
    "baseInstructions": {
      "type": [
        "string",
        "null"
      ]
    },
    "config": {
      "additionalProperties": true,
      "type": [
        "object",
        "null"
      ]
    },
    "cwd": {
      "type": [
        "string",
        "null"
      ]
    },
    "developerInstructions": {
      "type": [
        "string",
        "null"
      ]
    },
    "ephemeral": {
      "type": "boolean"
    },
    "excludeTurns": {
      "description": "When true, return only thread metadata and live fork state without populating `thread.turns`. This is useful when the client plans to call `thread/turns/list` immediately after forking.",
      "type": "boolean"
    },
    "model": {
      "description": "Configuration overrides for the forked thread, if any.",
      "type": [
        "string",
        "null"
      ]
    },
    "modelProvider": {
      "type": [
        "string",
        "null"
      ]
    },
    "sandbox": {
      "anyOf": [
        {
          "$ref": "#/definitions/SandboxMode"
        },
        {
          "type": "null"
        }
      ]
    },
    "serviceTier": {
      "anyOf": [
        {
          "anyOf": [
            {
              "$ref": "#/definitions/ServiceTier"
            },
            {
              "type": "null"
            }
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "threadId": {
      "type": "string"
    }
  },
  "required": [
    "threadId"
  ],
  "title": "ThreadForkParams",
  "type": "object"
}