Developer Guide

Submitting for Review

How to publish a version of your Agent App and submit it for internal review.

Publishing a Version

After registering your Agent App, the next step is to publish a version. Publishing creates a version record in app_versions with status in_review.

Via the API

Send a POST request to the agent-app-publish edge function with your bundle info:

curl -X POST "${SUPABASE_URL}/functions/v1/agent-app-publish" \
  -H "Authorization: Bearer ${AUTH_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "slug": "my-app",
    "version": "1.0.0",
    "changelog": "Initial release with weather forecasting",
    "bundle_url": "https://your-cdn.com/my-app/1.0.0/index.html",
    "bundle_hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "bundle_size": 524288
  }'

Required Fields

FieldDescription
slugYour app's slug (must be already registered, and you must be the owner)
versionSemantic version, e.g. 1.0.0, 2.1.0-beta

Optional Fields

FieldDescription
changelogWhat changed in this version
bundle_urlURL where the host can download the web bundle
bundle_hashSHA256 hash of the bundle file (for integrity verification)
bundle_sizeBundle size in bytes

Required Environment Variables

export SUPABASE_URL="https://your-project.supabase.co"
export AUTH_TOKEN="your-auth-token"  # From Supabase Auth

Bundle Upload

Before calling the publish API, upload your bundle to any publicly accessible URL. Common options:

  • Supabase Storage — upload via Supabase dashboard or CLI
  • S3 / CloudFlare R2 — any object storage with public read
  • CDN — any CDN with a stable URL
  • GitHub Releases — attach the bundle as a release asset

The host app downloads the bundle from the bundle_url you provide and verifies the bundle_hash before loading.

# Compute SHA256 hash of your bundle
sha256sum dist/index.html

Validation Rules

  • slug: Must reference an existing app that you own (developer_id must match your user ID)
  • version: Must follow semantic versioning format (x.y.z, e.g., 1.0.0, 2.1.0-beta)
  • Duplicate versions: Returns HTTP 409 if the version already exists for that app

What Happens After Publishing

  1. A new row is created in app_versions with status in_review
  2. If the app was in draft status, it is moved to in_review
  3. The version enters the review queue
  4. A reviewer will evaluate the submission (see Review Process)
  5. Once approved, the version status becomes published and the app is available to all users

Version Lifecycle

draft → in_review → approved → published   (approved by reviewer, then made live)
                  → rejected               (rejected by reviewer)
published → deprecated                     (superseded by newer version)

Note: The approved and published states are separate — approved means the reviewer accepted the version, and published means it has been made available to users. In practice, approved versions are automatically published.

Updating Your App

To release a new version:

  1. Build a new bundle with your changes
  2. Upload the bundle to a new URL (or overwrite the existing one)
  3. Call the publish API with the new version number:
    curl -X POST "${SUPABASE_URL}/functions/v1/agent-app-publish" \
      -H "Authorization: Bearer ${AUTH_TOKEN}" \
      -H "Content-Type: application/json" \
      -d '{
        "slug": "my-app",
        "version": "1.1.0",
        "changelog": "Added dark mode support",
        "bundle_url": "https://your-cdn.com/my-app/1.1.0/index.html",
        "bundle_hash": "<new-sha256>",
        "bundle_size": 530000
      }'
  4. Each new version goes through the review process independently
  5. The host app always loads the latest published version