{
  "name": "Surf, Bike or Skate",
  "description": "Given a free-time window and a location, a fleet of eight coordinating agents recommends surf, skate, bike, or stay-and-work — call find_activity(available_window, user_location, preferences).",
  "url": "https://agentnativesurfskate.vercel.app/",
  "version": "0.2.0",
  "protocolVersion": "1.0",
  "provider": {
    "organization": "Surf, Bike or Skate",
    "url": "https://agentnativesurfskate.vercel.app/"
  },
  "capabilities": {
    "streaming": false,
    "pushNotifications": false
  },
  "securitySchemes": {
    "bearer": {
      "type": "http",
      "scheme": "bearer",
      "description": "Obtain via POST /credential — zero-gate, self-serve, no human approval required."
    }
  },
  "security": [{ "bearer": [] }],
  "skills": [
    {
      "id": "find_activity",
      "name": "find_activity",
      "description": "Recommends surf, skate, bike, or stay-and-work for a given free-time window, location, and preferences. Returns the chosen activity, a score, a destination with coordinates, a departure time, travel and usable minutes, a return-by-deadline confidence, and the runner-up alternative.",
      "tags": ["activity-recommendation", "surf", "skate", "bike", "multi-agent"],
      "examples": ["Surf or skate before my 3 PM meeting?"]
    }
  ],
  "x-invocation": {
    "credential": {
      "method": "POST",
      "url": "https://agentnativesurfskate.vercel.app/credential",
      "auth": "none",
      "body": {},
      "returns": {
        "access_token": "string",
        "token_type": "bearer",
        "expires_in": "seconds",
        "scope": "find_activity"
      }
    },
    "find_activity": {
      "method": "POST",
      "url": "https://agentnativesurfskate.vercel.app/find_activity",
      "auth": "Authorization: Bearer <access_token>",
      "body": {
        "available_window": { "start": "ISO8601", "end": "ISO8601" },
        "user_location": { "lat": 0, "lon": 0 },
        "preferences": { "activities": ["surf", "skate", "bike", "stay"] }
      },
      "returns": {
        "activity": "surf | skate | bike | stay",
        "score": "0-100",
        "destination": { "name": "string", "lat": 0, "lon": 0 },
        "leaveAt": "ISO8601",
        "travelMinutes": 0,
        "usableMinutes": 0,
        "returnConfidence": "0.0-1.0",
        "alternative": { "activity": "string", "score": 0, "why": "string" },
        "source": "cotal-fleet | fixture"
      }
    }
  },
  "x-availability": {
    "stable": true,
    "note": "These URLs are permanent. The agent fleet itself runs on a Cloudflare tunnel whose hostname rotates; this domain proxies to it, so callers never see that churn. If the fleet is unreachable the proxy still answers 200 with a replayed Decision — that response is always marked \"source\":\"fixture\" in the body and \"x-sos-source: fixture\" in the headers. A live multi-agent run is marked \"source\":\"cotal-fleet\" / \"x-sos-source: live\". Check one of those before trusting a result as fresh.",
    "sourceHeader": "x-sos-source"
  }
}
