{
  "id": "ecosystem",
  "title": "AIIdiots — Read the Ecosystem (agent-operability)",
  "asOf": "2026-06-18",
  "humanRoute": "/ecosystem",
  "status": "first-pass",
  "lens": "Can my agent actually drive this? A tool an agent can drive end to end beats a more powerful one that traps it behind a human-only screen.",
  "lived": {
    "posture": "local",
    "movesWell": ["GitHub", "Vercel", "local files", "docs", "CLIs", "structured APIs", "RSS", "issue trackers"],
    "hitsGlass": ["account dashboards", "registrar / DNS / billing portals", "OAuth consoles", "captcha-heavy services", "human-only admin UIs", "platforms that hide state or block export"]
  },
  "rubric": [
    { "id": "friendly", "tier": "agent-friendly", "meaning": "An agent can drive it end to end and prove what it did.", "signals": ["stable URLs", "docs", "APIs", "exports", "CLIs", "files", "logs", "reproducible state"] },
    { "id": "tolerant", "tier": "agent-tolerant", "meaning": "The agent can work it, but a human still has to open the door.", "signals": ["dashboard works", "but setup, auth, or billing still needs a human"] },
    { "id": "hostile", "tier": "agent-hostile", "meaning": "The platform fights automation; route around it or keep a human in the seat.", "signals": ["captcha", "no API or export", "brittle UI", "hidden state", "session traps", "ToS or account risk"] }
  ],
  "platformRatings": [
    { "id": "github", "name": "GitHub", "tier": "friendly", "verified": false },
    { "id": "vercel", "name": "Vercel", "tier": "friendly", "verified": false },
    { "id": "files", "name": "Local files and CLIs", "tier": "friendly", "verified": false },
    { "id": "issue-trackers", "name": "Issue trackers", "tier": "friendly", "verified": false },
    { "id": "registrars", "name": "Registrar / DNS / billing portals", "tier": "hostile", "verified": false },
    { "id": "oauth", "name": "OAuth consoles", "tier": "tolerant", "verified": false },
    { "id": "captcha", "name": "Captcha-heavy services", "tier": "hostile", "verified": false }
  ],
  "verifiedExamples": [
    { "id": "github-verified", "name": "GitHub", "tier": "friendly", "verified": true, "posture": "public-docs", "source": "https://docs.github.com/en/rest", "note": "REST and GraphQL APIs, the gh CLI, Actions, and webhooks — an agent drives the whole loop, run logs as receipts." },
    { "id": "stripe-verified", "name": "Stripe", "tier": "friendly", "verified": true, "posture": "public-docs", "source": "https://docs.stripe.com/stripe-cli", "note": "Full API plus a stripe CLI that triggers and forwards webhook events in test mode — no human in the loop." },
    { "id": "google-oauth-verified", "name": "Google Cloud OAuth consent screen", "tier": "tolerant", "verified": true, "posture": "public-docs", "source": "https://developers.google.com/identity/protocols/oauth2/production-readiness/brand-verification", "note": "APIs are drivable once configured, but standing up the consent screen needs a human: external apps go through brand verification, a manual review measured in days." },
    { "id": "linkedin-verified", "name": "LinkedIn", "tier": "hostile", "verified": true, "posture": "public-docs", "source": "https://www.linkedin.com/legal/user-agreement", "note": "User Agreement 8.2 forbids scrapers, bots, and automated access; no general data API; aggressive automation detection. A wall, not a workaround." }
  ],
  "researchSlots": [
    { "id": "verified-ratings", "title": "Verified per-platform ratings", "status": "open" },
    { "id": "api-export-audit", "title": "API and export audit", "status": "open" },
    { "id": "session-trap-catalog", "title": "Session-trap and captcha catalog", "status": "open" },
    { "id": "agent-friendly-rising", "title": "Who is getting more agent-friendly", "status": "open" }
  ],
  "note": "First-pass platformRatings remain a snapshot. verifiedExamples are the first sourced inserts (2026-06-18), one or more per tier, each anchored to the platform's own public docs/terms. A verifiedExample supersedes any platformRatings row of the same name (e.g. GitHub) — treat the verified row as authoritative and the first-pass row as promoted-out. The slots grow; rows are added, never silently overwritten.",
  "relatedRoutes": ["/path", "/tools", "/build"]
}
