{
  "$schema": "./sdk-model.schema.json",
  "schemaVersion": 1,
  "clientName": "Wildflower",
  "defaultBaseUrl": "http://localhost:8080",
  "cli": {
    "version": "0.1.0",
    "binaryName": "wildflower",
    "aliases": [
      "wf"
    ],
    "description": "Fast command-line access to Wildflower Computer sandboxes and provider profiles.",
    "commands": {
      "sandbox": {
        "list": "listSandboxes",
        "create": "createSandbox",
        "get": "getSandbox",
        "exec": "runSandboxCommand",
        "read": "readSandboxFile",
        "write": "writeSandboxFile",
        "delete": "deleteSandbox"
      },
      "provider": {
        "list": "listProviderProfiles",
        "connect": "connectProvider",
        "test": "testProviderProfile",
        "verify": "verifyProviderProfile",
        "disconnect": "disconnectProvider"
      }
    },
    "workflows": {
      "run": [
        "createSandbox",
        "runSandboxCommand",
        "deleteSandbox"
      ]
    },
    "providerProfiles": {
      "agentcore": {
        "apiKeyEnvironment": "AGENTCORE_BRIDGE_API_KEY",
        "connectionEnvironment": {
          "bridgeUrl": "AGENTCORE_BRIDGE_URL"
        }
      },
      "blaxel": {
        "apiKeyEnvironment": "BLAXEL_API_KEY",
        "connectionEnvironment": {
          "workspace": "BLAXEL_WORKSPACE"
        }
      },
      "box": {
        "apiKeyEnvironment": "BOX_API_KEY",
        "connectionEnvironment": {}
      },
      "cloudflare": {
        "apiKeyEnvironment": "CLOUDFLARE_SANDBOX_API_KEY",
        "connectionEnvironment": {
          "bridgeUrl": "CLOUDFLARE_BRIDGE_URL"
        }
      },
      "e2b": {
        "apiKeyEnvironment": "E2B_API_KEY",
        "connectionEnvironment": {}
      },
      "novita": {
        "apiKeyEnvironment": "NOVITA_API_KEY",
        "connectionEnvironment": {}
      },
      "daytona": {
        "apiKeyEnvironment": "DAYTONA_SANDBOX_API_KEY",
        "connectionEnvironment": {}
      },
      "modal": {
        "apiKeyEnvironment": "MODAL_BRIDGE_API_KEY",
        "connectionEnvironment": {
          "bridgeUrl": "MODAL_BRIDGE_URL"
        }
      },
      "runloop": {
        "apiKeyEnvironment": "RUNLOOP_API_KEY",
        "connectionEnvironment": {}
      },
      "smol": {
        "apiKeyEnvironment": "SMOL_CLOUD_TOKEN",
        "connectionEnvironment": {}
      },
      "sprites": {
        "apiKeyEnvironment": "FLY_SPRITE_API_TOKEN",
        "connectionEnvironment": {}
      },
      "vercel": {
        "apiKeyEnvironment": "VERCEL_ACCESS_TOKEN",
        "connectionEnvironment": {
          "teamId": "VERCEL_TEAM_ID",
          "projectId": "VERCEL_PROJECT_ID"
        }
      }
    }
  },
  "packages": {
    "typescript": {
      "displayName": "TypeScript",
      "packageName": "@wildflowercomputer/sdk",
      "description": "Generated TypeScript sandbox SDK with typed provider inputs and the complete shared lifecycle.",
      "runtime": "Node.js 20 or newer",
      "asyncModel": "Promise-based",
      "installCommand": "npm install @wildflowercomputer/sdk",
      "distributionStatus": "source-only"
    },
    "python": {
      "displayName": "Python",
      "packageName": "wildflower-computer",
      "description": "Generated Python sandbox SDK with synchronous and async clients over the complete shared lifecycle.",
      "runtime": "Python 3.11 or newer",
      "asyncModel": "Synchronous and async clients",
      "installCommand": "python -m pip install wildflower-computer",
      "distributionStatus": "source-only"
    },
    "rust": {
      "displayName": "Rust",
      "packageName": "wildflower-computer",
      "description": "Generated asynchronous Rust sandbox SDK with typed provider inputs, normalized errors, and an injectable HTTP client.",
      "runtime": "Rust 1.88 or newer",
      "asyncModel": "Asynchronous reqwest client",
      "installCommand": "cargo add wildflower-computer",
      "distributionStatus": "source-only"
    },
    "go": {
      "displayName": "Go",
      "packageName": "github.com/dnosk/wildflower/sdks/go",
      "description": "Generated context-aware Go sandbox SDK with typed provider inputs and injectable HTTP clients.",
      "runtime": "Go 1.26 or newer",
      "asyncModel": "Context-aware synchronous methods",
      "installCommand": "go get github.com/dnosk/wildflower/sdks/go",
      "distributionStatus": "source-only"
    },
    "zig": {
      "displayName": "Zig",
      "packageName": "wildflower",
      "description": "Generated synchronous Zig sandbox SDK with explicit allocation, a narrow transport boundary, and owned return values.",
      "runtime": "Zig 0.16.0",
      "asyncModel": "Synchronous transport boundary",
      "installCommand": "zig fetch --save <wildflower-source-archive>",
      "distributionStatus": "source-only"
    }
  },
  "resources": {
    "sandboxes": {
      "operations": {
        "list": "listSandboxes",
        "create": "createSandbox",
        "get": "getSandbox",
        "runCommand": "runSandboxCommand",
        "readFile": "readSandboxFile",
        "writeFile": "writeSandboxFile",
        "delete": "deleteSandbox"
      }
    },
    "providers": {
      "operations": {
        "list": "listProviders"
      }
    }
  },
  "credentials": {
    "wildflowerApiKey": {
      "scheme": "WildflowerApiKey",
      "scope": "client"
    },
    "apiKey": {
      "scheme": "ProviderApiKey",
      "scope": "request",
      "rememberByResourceId": true
    }
  },
  "providerCapabilities": {
    "agentcore": [
      "timeout"
    ],
    "blaxel": [
      "image",
      "timeout"
    ],
    "box": [
      "timeout"
    ],
    "cloudflare": [],
    "e2b": [
      "image",
      "timeout"
    ],
    "novita": [
      "image",
      "timeout"
    ],
    "daytona": [
      "image",
      "timeout"
    ],
    "modal": [
      "image",
      "timeout"
    ],
    "runloop": [
      "image",
      "timeout"
    ],
    "smol": [
      "image",
      "timeout"
    ],
    "sprites": [],
    "vercel": [
      "image",
      "timeout"
    ]
  },
  "providerRuntimeCapabilities": {
    "agentcore": {
      "imageMode": "fixed",
      "timeoutMode": "seconds",
      "timeoutDefaultSeconds": 900,
      "timeoutMaximumSeconds": 28800,
      "timeoutGranularitySeconds": 1,
      "supportsCwd": true,
      "supportsEnv": true,
      "outputStreams": "separate",
      "supportsPersistentResume": true,
      "supportsExplicitStop": false,
      "supportsSnapshots": false,
      "supportsRestore": false,
      "supportsDelete": true
    },
    "blaxel": {
      "imageMode": "container",
      "timeoutMode": "seconds",
      "timeoutGranularitySeconds": 1,
      "supportsCwd": true,
      "supportsEnv": true,
      "outputStreams": "separate",
      "supportsPersistentResume": true,
      "supportsExplicitStop": false,
      "supportsSnapshots": false,
      "supportsRestore": false,
      "supportsDelete": true
    },
    "box": {
      "imageMode": "fixed",
      "timeoutMode": "seconds",
      "timeoutDefaultSeconds": 3600,
      "timeoutMaximumSeconds": 2592000,
      "timeoutGranularitySeconds": 1,
      "supportsCwd": true,
      "supportsEnv": true,
      "outputStreams": "separate",
      "supportsPersistentResume": true,
      "supportsExplicitStop": true,
      "supportsSnapshots": true,
      "supportsRestore": true,
      "supportsDelete": true
    },
    "cloudflare": {
      "imageMode": "fixed",
      "timeoutMode": "provider_managed",
      "supportsCwd": true,
      "supportsEnv": false,
      "outputStreams": "separate",
      "supportsPersistentResume": true,
      "supportsExplicitStop": false,
      "supportsSnapshots": false,
      "supportsRestore": false,
      "supportsDelete": true
    },
    "e2b": {
      "imageMode": "template",
      "timeoutMode": "seconds",
      "timeoutDefaultSeconds": 300,
      "timeoutGranularitySeconds": 1,
      "supportsCwd": true,
      "supportsEnv": true,
      "outputStreams": "separate",
      "supportsPersistentResume": false,
      "supportsExplicitStop": false,
      "supportsSnapshots": false,
      "supportsRestore": false,
      "supportsDelete": true
    },
    "novita": {
      "imageMode": "template",
      "timeoutMode": "seconds",
      "timeoutDefaultSeconds": 300,
      "timeoutGranularitySeconds": 1,
      "supportsCwd": true,
      "supportsEnv": true,
      "outputStreams": "separate",
      "supportsPersistentResume": true,
      "supportsExplicitStop": false,
      "supportsSnapshots": false,
      "supportsRestore": false,
      "supportsDelete": true
    },
    "daytona": {
      "imageMode": "container",
      "timeoutMode": "seconds",
      "timeoutGranularitySeconds": 60,
      "supportsCwd": true,
      "supportsEnv": true,
      "outputStreams": "combined",
      "supportsPersistentResume": false,
      "supportsExplicitStop": false,
      "supportsSnapshots": false,
      "supportsRestore": false,
      "supportsDelete": true
    },
    "modal": {
      "imageMode": "container",
      "timeoutMode": "seconds",
      "timeoutGranularitySeconds": 1,
      "supportsCwd": true,
      "supportsEnv": true,
      "outputStreams": "separate",
      "supportsPersistentResume": true,
      "supportsExplicitStop": false,
      "supportsSnapshots": false,
      "supportsRestore": false,
      "supportsDelete": true
    },
    "runloop": {
      "imageMode": "blueprint",
      "timeoutMode": "seconds",
      "timeoutMaximumSeconds": 172800,
      "timeoutGranularitySeconds": 1,
      "supportsCwd": true,
      "supportsEnv": true,
      "outputStreams": "separate",
      "supportsPersistentResume": false,
      "supportsExplicitStop": false,
      "supportsSnapshots": false,
      "supportsRestore": false,
      "supportsDelete": true
    },
    "smol": {
      "imageMode": "container",
      "timeoutMode": "seconds",
      "timeoutGranularitySeconds": 1,
      "supportsCwd": true,
      "supportsEnv": true,
      "outputStreams": "separate",
      "supportsPersistentResume": true,
      "supportsExplicitStop": true,
      "supportsSnapshots": true,
      "supportsRestore": false,
      "supportsDelete": true
    },
    "sprites": {
      "imageMode": "fixed",
      "timeoutMode": "provider_managed",
      "supportsCwd": true,
      "supportsEnv": true,
      "outputStreams": "separate",
      "supportsPersistentResume": true,
      "supportsExplicitStop": false,
      "supportsSnapshots": false,
      "supportsRestore": false,
      "supportsDelete": true
    },
    "vercel": {
      "imageMode": "container",
      "timeoutMode": "seconds",
      "timeoutGranularitySeconds": 1,
      "supportsCwd": true,
      "supportsEnv": true,
      "outputStreams": "separate",
      "supportsPersistentResume": true,
      "supportsExplicitStop": false,
      "supportsSnapshots": false,
      "supportsRestore": false,
      "supportsDelete": true
    }
  },
  "providerConnections": {
    "agentcore": [
      {
        "name": "bridgeUrl",
        "header": "X-Provider-Bridge-Url"
      }
    ],
    "blaxel": [
      {
        "name": "workspace",
        "header": "X-Provider-Workspace"
      }
    ],
    "box": [],
    "cloudflare": [
      {
        "name": "bridgeUrl",
        "header": "X-Provider-Bridge-Url"
      }
    ],
    "e2b": [],
    "novita": [],
    "daytona": [],
    "modal": [
      {
        "name": "bridgeUrl",
        "header": "X-Provider-Bridge-Url"
      }
    ],
    "runloop": [],
    "smol": [],
    "sprites": [],
    "vercel": [
      {
        "name": "teamId",
        "header": "X-Provider-Team-Id"
      },
      {
        "name": "projectId",
        "header": "X-Provider-Project-Id"
      }
    ]
  },
  "operationExamples": {
    "listProviders": {
      "pathParameters": {},
      "queryParameters": {},
      "response": {
        "status": 200,
        "body": {
          "providers": [
            {
              "provider": "e2b",
              "imageMode": "template",
              "timeoutMode": "seconds",
              "timeoutDefaultSeconds": 300,
              "timeoutGranularitySeconds": 1,
              "supportsCwd": true,
              "supportsEnv": true,
              "outputStreams": "separate",
              "supportsPersistentResume": false,
              "supportsExplicitStop": false,
              "supportsSnapshots": false,
              "supportsRestore": false,
              "supportsDelete": true
            }
          ]
        }
      }
    },
    "listSandboxes": {
      "pathParameters": {},
      "queryParameters": {
        "limit": 2
      },
      "response": {
        "status": 200,
        "body": {
          "items": [
            {
              "id": "wf_e2b_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
              "provider": "e2b",
              "status": "running",
              "metadata": {
                "nativeProviderId": "native-1"
              },
              "createdAt": "2026-07-28T12:00:00Z",
              "updatedAt": "2026-07-28T12:00:00Z",
              "statusObservedAt": "2026-07-28T12:00:00Z"
            }
          ],
          "nextCursor": "next-page"
        }
      }
    },
    "createSandbox": {
      "pathParameters": {},
      "queryParameters": {},
      "requestBody": {
        "provider": "e2b",
        "image": "base",
        "timeout": 300
      },
      "response": {
        "status": 201,
        "body": {
          "id": "wf_e2b_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
          "provider": "e2b",
          "status": "creating",
          "metadata": {
            "nativeProviderId": "native-1"
          }
        }
      }
    },
    "getSandbox": {
      "pathParameters": {
        "id": "wf_e2b_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
      },
      "queryParameters": {},
      "response": {
        "status": 200,
        "body": {
          "id": "wf_e2b_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
          "provider": "e2b",
          "status": "running",
          "metadata": {
            "nativeProviderId": "native-1"
          }
        }
      }
    },
    "runSandboxCommand": {
      "pathParameters": {
        "id": "wf_e2b_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
      },
      "queryParameters": {},
      "requestBody": {
        "command": "echo hello",
        "cwd": "/workspace"
      },
      "response": {
        "status": 200,
        "body": {
          "sandboxId": "wf_e2b_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
          "stdout": "hello\n",
          "stderr": "",
          "exitCode": 0
        }
      }
    },
    "readSandboxFile": {
      "pathParameters": {
        "id": "wf_e2b_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
      },
      "queryParameters": {},
      "requestBody": {
        "path": "/tmp/hello.txt",
        "encoding": "utf8"
      },
      "response": {
        "status": 200,
        "body": {
          "sandboxId": "wf_e2b_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
          "path": "/tmp/hello.txt",
          "content": "hello",
          "encoding": "utf8"
        }
      }
    },
    "writeSandboxFile": {
      "pathParameters": {
        "id": "wf_e2b_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
      },
      "queryParameters": {},
      "requestBody": {
        "path": "/tmp/hello.txt",
        "content": "hello",
        "encoding": "utf8"
      },
      "response": {
        "status": 200,
        "body": {
          "sandboxId": "wf_e2b_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
          "path": "/tmp/hello.txt",
          "bytesWritten": 5
        }
      }
    },
    "deleteSandbox": {
      "pathParameters": {
        "id": "wf_e2b_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
      },
      "queryParameters": {},
      "response": {
        "status": 200,
        "body": {
          "id": "wf_e2b_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
          "provider": "e2b",
          "status": "deleted",
          "metadata": {
            "nativeProviderId": "native-1"
          }
        }
      }
    }
  },
  "errorDocumentation": {
    "invalid_request": {
      "description": "The request did not satisfy the endpoint contract.",
      "retryable": false,
      "remediation": "Correct the fields identified by the response message before sending the request again."
    },
    "payload_too_large": {
      "description": "The request body or file content exceeded the supported size limit.",
      "retryable": false,
      "remediation": "Reduce the payload to the documented limit or split the work into smaller operations."
    },
    "request_timeout": {
      "description": "Wildflower stopped waiting before the operation completed.",
      "retryable": true,
      "remediation": "Retry with exponential backoff. For create operations, first reconcile using the operation ID because the provider may have succeeded."
    },
    "invalid_idempotency_key": {
      "description": "The Idempotency-Key header was missing, malformed, or outside the supported length.",
      "retryable": false,
      "remediation": "Send a stable, non-secret key that follows the documented Idempotency-Key constraints."
    },
    "idempotency_conflict": {
      "description": "The same idempotency key was reused with a different create request.",
      "retryable": false,
      "remediation": "Reuse the key only for the identical logical request, or generate a new key for changed input."
    },
    "idempotency_in_progress": {
      "description": "An identical idempotent operation is still running.",
      "retryable": true,
      "remediation": "Wait for the Retry-After interval and retry the same request with the same idempotency key."
    },
    "idempotency_outcome_unknown": {
      "description": "Wildflower cannot safely determine whether a prior create reached the provider.",
      "retryable": false,
      "remediation": "Do not issue a blind create retry. Reconcile the operation ID with the sandbox registry or support."
    },
    "idempotency_unavailable": {
      "description": "The idempotency store was temporarily unavailable.",
      "retryable": true,
      "remediation": "Retry with exponential backoff and the same idempotency key."
    },
    "sandbox_registry_unavailable": {
      "description": "The sandbox registry could not be read or updated.",
      "retryable": true,
      "remediation": "Retry with exponential backoff. For create or delete, preserve identifiers and reconcile state before repeating the operation."
    },
    "sandbox_create_outcome_unknown": {
      "description": "The provider create outcome could not be confirmed.",
      "retryable": false,
      "remediation": "Do not create again automatically. Use the operation ID to reconcile the provider and Wildflower registry."
    },
    "invalid_file_content": {
      "description": "File content was not valid for the declared wire encoding.",
      "retryable": false,
      "remediation": "Encode the content as valid UTF-8 or base64 and make the encoding field match."
    },
    "file_not_utf8": {
      "description": "The requested file contains bytes that cannot be returned as UTF-8.",
      "retryable": false,
      "remediation": "Read the file with base64 encoding instead."
    },
    "file_operation_failed": {
      "description": "The provider could not complete the requested file operation.",
      "retryable": false,
      "remediation": "Verify that the path exists, is permitted, and is within provider limits before retrying."
    },
    "missing_api_key": {
      "description": "No usable Wildflower or provider credential was supplied.",
      "retryable": false,
      "remediation": "Configure the required project API key and connect or supply the provider credential."
    },
    "provider_profiles_unavailable": {
      "description": "Connected provider profiles could not be loaded.",
      "retryable": true,
      "remediation": "Retry with exponential backoff; do not replace a stored profile unless the failure persists."
    },
    "provider_profile_not_found": {
      "description": "The project has no connected profile for the requested provider.",
      "retryable": false,
      "remediation": "Connect that provider or supply a valid inline provider credential for the request."
    },
    "provider_operation_unavailable": {
      "description": "A prior deep verification proved that the connected provider credential cannot perform the requested operation.",
      "retryable": false,
      "remediation": "Use the response operation, reason, and remediation fields to grant the missing permission, replace the credential, or choose a supported provider."
    },
    "invalid_sandbox_id": {
      "description": "The sandbox ID is malformed or names a provider that does not match the route.",
      "retryable": false,
      "remediation": "Use the opaque sandbox ID returned by Wildflower without modifying it."
    },
    "provider_invalid_request": {
      "description": "The selected provider rejected the normalized request as invalid.",
      "retryable": false,
      "remediation": "Correct provider-specific image, timeout, command, or connection settings before retrying."
    },
    "authentication_error": {
      "description": "A Wildflower or upstream provider credential was rejected.",
      "retryable": false,
      "remediation": "Replace or reconnect the invalid credential, then retry the original operation."
    },
    "control_plane_conflict": {
      "description": "The requested account or project mutation conflicts with current control-plane state.",
      "retryable": false,
      "remediation": "Refresh the current resource state and submit a mutation that satisfies its ownership and lifecycle rules."
    },
    "last_account_owner": {
      "description": "The operation would leave an organization without an owner.",
      "retryable": false,
      "remediation": "Promote another member to owner before removing, demoting, or transferring the current owner."
    },
    "personal_account_immutable": {
      "description": "The requested ownership or membership change is not allowed for a personal account.",
      "retryable": false,
      "remediation": "Use an organization account for shared ownership and membership changes."
    },
    "account_deleting": {
      "description": "The account is already in its deletion lifecycle.",
      "retryable": false,
      "remediation": "Wait for deletion to finish and avoid starting new work in the account."
    },
    "sandbox_not_found": {
      "description": "No sandbox visible to this project matches the supplied ID.",
      "retryable": false,
      "remediation": "Check the project and sandbox ID; a previously deleted sandbox cannot be restored through this endpoint."
    },
    "rate_limited": {
      "description": "The request exceeded a Wildflower or provider rate limit.",
      "retryable": true,
      "remediation": "Wait for Retry-After when present, then retry with exponential backoff and jitter."
    },
    "provider_unavailable": {
      "description": "The selected provider or customer-owned bridge is temporarily unavailable.",
      "retryable": true,
      "remediation": "Retry with exponential backoff or select another provider when workload portability permits."
    },
    "provider_error": {
      "description": "The provider returned a failure that Wildflower could not classify more narrowly.",
      "retryable": false,
      "remediation": "Inspect the safe response message and operation ID; retry only when the provider condition is known to be transient."
    },
    "internal_error": {
      "description": "Wildflower encountered an unexpected server-side failure.",
      "retryable": true,
      "remediation": "Retry with exponential backoff and retain the request or operation ID for support if the failure repeats."
    },
    "legal_acceptance_required": {
      "description": "The actor or account must accept the current legal release before continuing.",
      "retryable": false,
      "remediation": "Review and accept the required documents, then repeat the blocked operation."
    },
    "legal_release_changed": {
      "description": "The legal release changed between review and acceptance.",
      "retryable": false,
      "remediation": "Fetch and review the new current release before submitting acceptance again."
    },
    "legal_not_found": {
      "description": "The requested legal document or release does not exist.",
      "retryable": false,
      "remediation": "Refresh the legal manifest and use a published document and version."
    },
    "legal_unavailable": {
      "description": "The legal publication or acceptance store is temporarily unavailable.",
      "retryable": true,
      "remediation": "Retry with exponential backoff; do not assume acceptance was recorded unless it can be confirmed."
    },
    "invalid_email_webhook": {
      "description": "The inbound email webhook signature or payload was invalid.",
      "retryable": false,
      "remediation": "Verify webhook signing configuration and send a payload that matches the documented provider event shape."
    }
  },
  "languageOverrides": {
    "typescript": {},
    "python": {
      "runCommand": "run_command",
      "readFile": "read_file",
      "writeFile": "write_file"
    },
    "rust": {
      "runCommand": "run_command",
      "readFile": "read_file",
      "writeFile": "write_file"
    },
    "go": {
      "list": "List",
      "create": "Create",
      "get": "Get",
      "delete": "Delete",
      "runCommand": "RunCommand",
      "readFile": "ReadFile",
      "writeFile": "WriteFile"
    },
    "zig": {}
  }
}
