{
  "$schema": "https://aiia.dev/schemas/ai-agent/v1.json",
  "name": "skew",
  "displayName": "Skew",
  "description": "An authored design service. Submit a brief; receive a one-of-one landing page, pitch deck, or research-grounded brief. Every artifact is generated through a curated method, not assembled from templates.",
  "version": "1.0.0",
  "type": "design-service",
  "vendor": {
    "name": "Skew",
    "url": "https://skew.site"
  },
  "endpoints": {
    "base": "https://skew.site",
    "mcp": "https://skew.site/api/mcp",
    "a2a": "https://skew.site/api/a2a",
    "llmsIndex": "https://skew.site/llms.txt"
  },
  "discovery": {
    "mcp": "https://skew.site/.well-known/mcp.json",
    "a2a": "https://skew.site/.well-known/agent-card.json",
    "oauth": "https://skew.site/.well-known/oauth-protected-resource",
    "llms": "https://skew.site/llms.txt"
  },
  "mcp": {
    "url": "https://skew.site/api/mcp",
    "transport": "streamable-http"
  },
  "a2a": {
    "url": "https://skew.site/api/a2a"
  },
  "agent": {
    "callable": true
  },
  "auth": {
    "type": "oauth2",
    "provider": "clerk",
    "note": "Authenticated POST via Bearer token, three accepted shapes. Humans: Clerk-issued JWT (OAuth2 session). Agents: a 64-hex agent_token minted via the RFC 8628 device-code grant, which is the intended agent entry point (a Clerk JWT requires a human OAuth session). x402 per-call payment bearers are on the roadmap and not yet live. generate-landing also accepts anonymous calls gated by a Turnstile token. Public reads on /p/, /d/, /b/ slugs."
  },
  "actions": [
    {
      "name": "generate-landing",
      "description": "Stream a one-of-one landing page from a one-paragraph brief.",
      "url": "https://skew.site/api/generate",
      "method": "POST",
      "input": {
        "brief": "string (required, 10 to 8000 chars). The one-paragraph design brief.",
        "persona": "enum (optional). One of saville, scher, rams, weingart, bierut. Auto-routes if omitted.",
        "referenceImageUrls": "string[] (optional, max 3). Accepted but not yet wired: images are stored but not passed to the model, so they do not influence the output today. Source-anchored generation is on the roadmap."
      },
      "output": {
        "stream": "text/event-stream. Server-sent message deltas of generated HTML.",
        "persistedSlug": "string. Returned on stream close; resolves to /p/{slug}."
      }
    },
    {
      "name": "generate-deck",
      "description": "BETA, not generally available: gated server-side and returns 503 beta_not_enabled for callers not yet flipped on (no public path to enable it today). Generate a one-of-one pitch deck from a brief and slide count.",
      "available": false,
      "status": "beta",
      "url": "https://skew.site/api/generate/deck",
      "method": "POST",
      "input": {
        "brief": "string (required).",
        "slideCount": "number (optional, default 10, range 6 to 20).",
        "persona": "enum (optional). Same persona set as generate-landing."
      },
      "output": {
        "stream": "text/event-stream. Structured slide deltas.",
        "persistedSlug": "string. Resolves to /d/{slug}."
      }
    },
    {
      "name": "generate-brief",
      "description": "Generate a research-grounded brief from a topic and optional source URLs.",
      "url": "https://skew.site/api/generate/brief",
      "method": "POST",
      "input": {
        "topic": "string (required). The brief subject.",
        "researchUrls": "string[] (optional, max 5). Sources to anchor the brief.",
        "persona": "enum (optional). Same persona set as generate-landing."
      },
      "output": {
        "stream": "text/event-stream. Markdown body deltas.",
        "persistedSlug": "string. Resolves to /b/{slug}."
      }
    },
    {
      "name": "fetch-artifact",
      "description": "Retrieve a previously generated artifact by slug.",
      "url": "https://skew.site/p/{slug}",
      "method": "GET",
      "note": "Use /d/{slug} for decks, /b/{slug} for briefs. Public HTML; no auth required for public artifacts. Private artifacts return 403; password-protected return 401 with WWW-Authenticate."
    }
  ],
  "recovery": {
    "if_endpoint_404": "POST a JSON body to https://skew.site/api/agent/feedback with kind=endpoint_404, path=<the path you hit>, detail=<short message>. Re-fetch this manifest before retrying; the canonical URL list lives in endpoints and actions.",
    "if_schema_mismatch": "POST to https://skew.site/api/agent/feedback with kind=schema_mismatch and include the unexpected field or shape. Treat this manifest as the source of truth for action input and output shapes; if your client cache disagrees, refresh from https://skew.site/.well-known/ai-agent.json.",
    "if_stale_doc": "POST to https://skew.site/api/agent/feedback with kind=stale_doc and the URL of the stale page. Compare metadata.updatedAt against the date you cached this manifest; if older than 30 days, refresh before relying on it.",
    "out_of_band_contact": "legal@skew.site"
  },
  "policy": {
    "termsOfService": "https://skew.site/legal/terms",
    "privacyPolicy": "https://skew.site/legal/privacy",
    "acceptableUse": "https://skew.site/legal/aup",
    "humanOversight": "advised-for-public-publishing",
    "discoveryMode": "public"
  },
  "metadata": {
    "createdAt": "2026-05-16T00:00:00Z",
    "updatedAt": "2026-05-24T00:00:00Z",
    "tags": [
      "design",
      "generation",
      "landing-page",
      "pitch-deck",
      "research-brief",
      "agent-callable",
      "one-of-one"
    ],
    "categories": ["design-service", "creative-generation"]
  }
}
