{
 "slug": "coda",
 "name": "Coda",
 "url": "https://coda.io",
 "domain": "coda.io",
 "category": "workspace",
 "category_name": "Docs and workspace",
 "tested_at": "2026-10-06",
 "run": "20261006T011520Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261006T011520Z",
   "date": "2026-10-06",
   "level": 3,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 2,
    "signed": true,
    "inbox": [
     "agentdrives.com"
    ],
    "robots": "start"
   }
  }
 ],
 "level": 3,
 "level_name": "Does the work",
 "level_selfhost": null,
 "entry": "self-start",
 "door": {
  "passed": 1,
  "tries": 1,
  "self_start": true
 },
 "badges": [],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: sign-up in a browser"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "part",
   "text": "Work done: 70% of the core"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Card checkout",
   "value": "not_tried",
   "route": "card_checkout",
   "why": "no_card"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Nothing to cancel; can't delete its account",
   "at": "delete",
   "left": "stuck"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "part",
   "text": "Some docs agents can read: an OpenAPI and an MCP server",
   "have": [
    "openapi",
    "mcp"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "yes",
   "text": "Gets in on its own: sign-up in a browser",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "part",
   "text": "Work done: 70% of the core",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Card checkout",
   "value": "not_tried",
   "route": "card_checkout",
   "why": "no_card",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Nothing to cancel; can't delete its account",
   "at": "delete",
   "left": "stuck",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "browser_signup",
   "label": "Sign-up in a browser",
   "routes": [],
   "minutes": 5.3,
   "core": "8/10"
  }
 ],
 "minutes": 5.3,
 "next": {
  "to": 4,
  "text": "Next: do 80% of the core work (now 70%)"
 },
 "stop": "delete",
 "core": "7/10",
 "scores": {
  "coverage": 62,
  "reliability": 100,
  "resilience": null,
  "setup": 80,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 80,
  "security": null,
  "standards": [
   {
    "standard": "MCP",
    "state": "behind",
    "behind": 1,
    "value": "2025-11-25"
   },
   {
    "standard": "MCP client registration",
    "state": "behind",
    "behind": null,
    "value": "dcr"
   },
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 2,
    "value": "3.0.0"
   }
  ]
 },
 "reliability_method": "first-try",
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": 70,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 2,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": null,
  "prompt_sha": "59d395064c20",
  "kb_version": "2",
  "identity": null
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 2,
  "signed": true,
  "inbox": [
   "agentdrives.com"
  ],
  "robots": "start"
 },
 "same_level_drives": 1,
 "drives": 1,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": null,
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "in"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "in",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "OpenAPI 3.0.0 (API 1.6.0, 91 paths) at coda.io/apis/v1/openapi.json and docs.superhuman.com; API reference pages are HTML. The help center (help.superhuman.com, where the MCP setup article lives) answered our signed agent with a Cloudflare challenge (403 cf-mitigated: challenge). No llms.txt, no markdown pages."
  },
  "signup": {
   "status": "browser",
   "note": "No sign-up API. Web form at coda.io/signup/password (email, first and last name, password); no CAPTCHA signals, went through in our agent's browser."
  },
  "verify": {
   "status": "browser",
   "note": "Verification mail arrived within about a minute; its link (a plain GET) opened in the browser and led to onboarding."
  },
  "credentials": {
   "status": "browser",
   "note": "API token only from Account settings > API connections > Generate API token. MCP uses OAuth authorization_code + PKCE with a browser consent page; DCR works headless, no device flow, no CIMD.",
   "via": ""
  },
  "first_call": {
   "status": "headless",
   "note": "GET /apis/v1/whoami with the token returned our user and workspace."
  },
  "first_action": {
   "status": "headless",
   "note": "POST /docs created a doc (201), read back with GET /docs/{id}."
  },
  "pay": {
   "status": "browser",
   "grade": "P2",
   "rails": [
    "card form on superhuman.com/upgrade (Gr4vy secure fields)",
    "Google Pay via Stripe.js payment-request frame"
   ],
   "rail_ids": [
    "card",
    "stripe-elements"
   ],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "free tier",
   "note": "No 402, x402, MPP, UCP or billing API; x402./mpp./agents. subdomains do not resolve; no listing in x402 Bazaar or mpp.dev. Upgrade is a hosted checkout on superhuman.com (billing, seats, card details, Complete purchase), no trial. We stopped before payment details, so whether 3DS or another human step follows is unknown."
  },
  "cancel": {
   "status": "n/a",
   "note": "Nothing to cancel: our agent used the free plan.",
   "docs_note": "No plan started. The checkout says cancellation is on the Subscription page (web); no billing API or MCP tool.",
   "docs_grade": "",
   "nothing": "free_plan"
  },
  "delete": {
   "status": "blocked",
   "note": "Docs, folder and Pack deleted via API and MCP (read back 404). The account itself: no API; the web path (My Settings > account.grammarly.com > Delete Account) goes to a 'Verify that it's you' step on grammarly.com that rendered no form in our agent's browser, with an invisible reCAPTCHA Enterprise on the page. Account remains; API token revoked in the web UI.",
   "left": "stuck",
   "account": true
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-06",
  "source": "drive",
  "options": [
   {
    "id": "card",
    "name": "Card checkout",
    "kind": "checkout",
    "first_party": false,
    "lead": false,
    "networks": [],
    "testnet": false
   },
   {
    "id": "stripe-elements",
    "name": "Stripe card form",
    "kind": "checkout",
    "first_party": false,
    "lead": false,
    "networks": [],
    "testnet": false
   }
  ],
  "agentic": [],
  "paid": null,
  "exercised": null,
  "detected_grade": null,
  "trial": {
   "no_card": null,
   "card_required": null,
   "free_plan": true
  },
  "owner_fixes": [
   {
    "title": "Accept x402 or MPP on your API",
    "how": "Answer an unpaid call with 402 and a payment challenge, so an agent pays per call or buys credits without an account or a card."
   },
   {
    "title": "List your plans on Stripe Projects",
    "how": "Agents buy a plan with `stripe projects add`, paid with a token under a spend cap the owner sets (projects.dev)."
   }
  ]
 },
 "surfaces": {
  "api": true,
  "openapi": true,
  "cli": true,
  "sdk": true,
  "mcp": "official",
  "llms_txt": false,
  "webhooks": false,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST v1, 91 paths / 125 operations; writes are async (202 + requestId) and show up 3-20 s later",
  "openapi": "3.0.0, info.version 1.6.0, no x-payment-info",
  "mcp": "official, the older 25 Nov 2025 spec, 37 tools incl. table_create, control_manage, document_delete",
  "cli": "@codahq/packs-sdk 'coda' CLI for building and uploading Packs"
 },
 "can_do": [
  "Create a doc, add a page with markdown content and export it back as markdown (API)",
  "Create a table with typed columns and rows (MCP), then read, filter, insert, update, upsert and delete rows (API)",
  "Add formula and button columns and canvas formulas/buttons (MCP), press a row button and read formula values (API)",
  "Copy a doc, create folders and file docs in them (API)",
  "Share a doc by link, change its ACL settings and revoke access (API)",
  "Create a Pack and upload a version with the official packs-sdk CLI",
  "Delete docs, folders and Packs it made (API and MCP)"
 ],
 "cannot_do": [
  {
   "what": "Sign up or get an API token without a browser",
   "why": "web form only; tokens are minted only in account settings; MCP OAuth needs a browser consent page"
  },
  {
   "what": "Publish a doc to the web",
   "why": "the API answers 'Please create a maker profile before publishing a doc.' and the maker profile can only be created in the web UI"
  },
  {
   "what": "Delete the account",
   "why": "no API; the web path's re-auth step on grammarly.com rendered no form in our agent's browser (invisible reCAPTCHA Enterprise)"
  },
  {
   "what": "Use Docs AI, AI columns or create automation rules headless",
   "why": "no API or MCP route; Docs AI worked in the browser"
  },
  {
   "what": "Buy a plan the agent way",
   "why": "no 402 rail or billing API; only a card checkout on superhuman.com"
  }
 ],
 "blockers": [
  "Sign-up and API token are web-only",
  "Account deletion stuck at a re-auth step behind invisible reCAPTCHA Enterprise"
 ],
 "tips_for_owner": [
  "Let agents mint API tokens headless",
  "Answer MCP server/discover on the 28 Jul 2026 spec",
  "Stop redirecting MCP calls with 307",
  "Create maker profiles through the API",
  "Offer account deletion without a browser",
  "Publish llms.txt and markdown docs"
 ],
 "tips_for_agents": [
  "Use the REST API at https://coda.io/apis/v1 for reads and row writes; the MCP server at https://coda.io/apis/mcp for structure (table_create, table_columns_manage, control_manage) the REST API lacks.",
  "Writes are async: expect 202 + requestId and allow 3-20 s before reading back; right after a create, GETs can return 409 'try again in a moment' or 404.",
  "MCP doc-scoped calls answer 307 to /apis/mcp/docs/{docId} with an empty body: re-POST (with a fresh initialize) to that URL.",
  "MCP wants canvas URIs (coda://docs/{doc}/canvases/canvas-...) for table_create, not the REST page id under pages/; column number type is 'num'.",
  "MCP OAuth access tokens expire after 300 s: refresh with the 60-day refresh token.",
  "Upserts are idempotent with keyColumns on POST .../rows.",
  "Page export downloads are gzip-compressed and the link expires in 300 s."
 ],
 "selfhost": null,
 "summary": "The agent signed up, verified its email and made an API token itself in a browser; from there it ran Coda (now Superhuman Docs) through the REST API and the official MCP server: a doc, pages, a typed table with formula and button columns, rows, sharing and a Pack, all read back. 7 of the 10 core capabilities are done and verified; AI columns, automations and the AI assistant building tables were not tested. The gaps are the browser-only sign-up and token, an MCP server on the older 25 Nov 2025 spec that redirects doc calls with an empty 307, publishing that needs a maker profile made in the web app, a card-only checkout, and account deletion: the re-auth page on grammarly.com showed no form in our agent's browser (one try).",
 "wall": "Account deletion stuck behind invisible reCAPTCHA re-auth",
 "plan_scope": "free plan",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Coda (rebranded Superhuman Docs) is a documents-and-databases tool. An agent signed up, got an API key in a browser, and then built and managed docs, tables, rows, formulas and sharing on its own. It could not delete the account: the identity check before deletion showed no form to fill in.",
  "can_do": [
   "Create documents, pages and tables and fill them with data",
   "Add calculations and clickable buttons to a table and use them",
   "Organize documents into folders, copy them, and share them with specific people",
   "Build and upload a small plug-in (Pack) for the product",
   "Clean up everything it created, with proof it was really gone"
  ],
  "cannot_do": [
   {
    "what": "Sign up or get an API key without a web browser",
    "why": "the sign-up form and the key page only exist in the browser, not as a documented API"
   },
   {
    "what": "Publish a document to the public web",
    "why": "the product requires a one-time public profile that can only be created in the browser"
   },
   {
    "what": "Delete its own account",
    "why": "the identity check before deletion showed no form in our agent's browser"
   },
   {
    "what": "Buy a paid plan on its own",
    "why": "only a credit-card checkout page exists; no automated payment option"
   }
  ]
 },
 "plan_gated": [
  {
   "capability": "Customize a published doc's domain/branding",
   "plan": "Pro",
   "evidence": "superhuman.com/plans/docs lists 'Custom icons, branding, domains' under Pro"
  },
  {
   "capability": "Configure SSO / enterprise security controls",
   "plan": "Enterprise",
   "evidence": "superhuman.com/plans/docs lists SAML SSO and SCIM under Enterprise"
  }
 ],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "core",
   "capability": "Create a doc",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /docs",
    "mcp": "create doc (via Coda MCP)",
    "cli": null,
    "ui": "New doc button in workspace"
   },
   "check": "GET /docs/{docId} returns the new doc with matching name",
   "source": "https://docs.superhuman.com/developers (Docs: postCreate doc); https://coda.io/resources/guides/getting_started_with_coda_mcp"
  },
  {
   "id": "cap-02",
   "group": "core",
   "capability": "Build structured pages inside a doc (text, tables, canvas blocks)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /docs/{docId}/pages",
    "mcp": "create page",
    "cli": null,
    "ui": "Doc canvas / page editor"
   },
   "check": "GET /docs/{docId}/pages/{pageId} shows the created page content",
   "source": "https://docs.superhuman.com/developers (Pages: postCreate a page); https://coda.io/"
  },
  {
   "id": "cap-03",
   "group": "core",
   "capability": "Create and manage tables/databases of rows",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /docs/{docId}/tables; GET /docs/{docId}/tables/{tableId}",
    "mcp": "list/get tables",
    "cli": null,
    "ui": "Insert table in doc canvas"
   },
   "check": "GET /docs/{docId}/tables/{tableId} returns the table with its column schema",
   "source": "https://docs.superhuman.com/developers (Tables: getList tables, getGet a table)"
  },
  {
   "id": "cap-04",
   "group": "core",
   "capability": "Insert, update, and delete rows in a table",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /docs/{docId}/tables/{tableId}/rows; PUT .../rows/{rowId}; DELETE .../rows/{rowId}",
    "mcp": "insert/update/delete row",
    "cli": null,
    "ui": "Table grid/card view in doc"
   },
   "check": "GET /docs/{docId}/tables/{tableId}/rows/{rowId} reflects the new/changed/absent row",
   "source": "https://docs.superhuman.com/developers (Rows: postInsert/upsert rows, putUpdate row, delDelete row)"
  },
  {
   "id": "cap-05",
   "group": "core",
   "capability": "Read rows and filter/sort a table's data",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /docs/{docId}/tables/{tableId}/rows",
    "mcp": "list rows",
    "cli": null,
    "ui": "Table view with filters/sort"
   },
   "check": "GET request with query/useColumnNames returns rows matching the filter",
   "source": "https://docs.superhuman.com/developers (Rows: getList table rows)"
  },
  {
   "id": "cap-06",
   "group": "core",
   "capability": "Build formulas and buttons that act on data",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET /docs/{docId}/formulas; POST .../rows/{rowId}/buttons/{columnId}",
    "mcp": "list/get formula; push button",
    "cli": null,
    "ui": "Formula bar, button column type"
   },
   "check": "POST push-a-button returns a mutation status; GET mutation status shows completed",
   "source": "https://docs.superhuman.com/developers (Formulas: getList formulas; Rows: postPush a button; Miscellaneous: getGet mutation status)"
  },
  {
   "id": "cap-07",
   "group": "core",
   "capability": "Chat with Coda AI inside a doc",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "AI chat panel in doc"
   },
   "check": "Chat panel returns a generated response referencing doc content",
   "source": "https://coda.io/product/ai"
  },
  {
   "id": "cap-08",
   "group": "core",
   "capability": "Generate content/tables with AI assistant",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": "agent creates docs/tables from description (Coda MCP)",
    "cli": null,
    "ui": "AI assistant in doc editor"
   },
   "check": "Doc page shows new AI-generated section/table after prompt",
   "source": "https://coda.io/product/ai; https://coda.io/resources/guides/getting_started_with_coda_mcp"
  },
  {
   "id": "cap-09",
   "group": "core",
   "capability": "Run AI at scale over rows via an AI column",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "AI column type on a table"
   },
   "check": "AI column cell values populate automatically per row based on the prompt",
   "source": "https://coda.io/product/ai"
  },
  {
   "id": "cap-10",
   "group": "core",
   "capability": "Automate recurring/triggered actions in a doc",
   "weight": "core",
   "plan": "paid",
   "surfaces": {
    "api": "POST /docs/{docId}/automations/{ruleId}/trigger",
    "mcp": null,
    "cli": null,
    "ui": "Automation rule builder"
   },
   "check": "POST trigger automation returns a mutation status that completes, with the configured action's effect visible in the doc",
   "source": "https://docs.superhuman.com/developers (Automations: postTrigger automation)"
  },
  {
   "id": "cap-11",
   "group": "secondary",
   "capability": "Organize docs into folders/workspaces",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /folders; POST /folders; GET /folders/{id}/docs",
    "mcp": null,
    "cli": null,
    "ui": "Workspace sidebar folders"
   },
   "check": "GET /folders/{folderId} lists the doc after it is moved in",
   "source": "https://docs.superhuman.com/developers (Folders: getList folders, postCreate folder, getList folder children)"
  },
  {
   "id": "cap-12",
   "group": "secondary",
   "capability": "Copy an existing doc as a starting point",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /docs?sourceDoc=",
    "mcp": null,
    "cli": null,
    "ui": "Duplicate doc action"
   },
   "check": "GET /docs/{newDocId} shows content matching the source doc",
   "source": "https://docs.superhuman.com/developers (Introduction: 'Create new docs and copy existing ones')"
  },
  {
   "id": "cap-13",
   "group": "secondary",
   "capability": "Share a doc and manage collaborator permissions",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /docs/{docId}/acl/permissions; POST .../permissions; DELETE .../permissions/{id}",
    "mcp": null,
    "cli": null,
    "ui": "Share dialog"
   },
   "check": "GET /docs/{docId}/acl/permissions lists the newly added principal with the granted access",
   "source": "https://docs.superhuman.com/developers (Permissions: getList permissions, postAdd permission, delDelete permission)"
  },
  {
   "id": "cap-14",
   "group": "secondary",
   "capability": "Search for people/groups to share a doc with",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /docs/{docId}/acl/principals/search",
    "mcp": null,
    "cli": null,
    "ui": "Share dialog search box"
   },
   "check": "Search query returns matching principal objects usable in a permission grant",
   "source": "https://docs.superhuman.com/developers (Permissions: getSearch principals)"
  },
  {
   "id": "cap-15",
   "group": "secondary",
   "capability": "Configure a doc's access-control (ACL) defaults",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GET /docs/{docId}/acl/settings; PATCH /docs/{docId}/acl/settings",
    "mcp": null,
    "cli": null,
    "ui": "Doc sharing settings"
   },
   "check": "GET /docs/{docId}/acl/settings reflects the updated default role/link-sharing setting",
   "source": "https://docs.superhuman.com/developers (Permissions: getGet ACL settings, patchUpdate ACL settings)"
  },
  {
   "id": "cap-16",
   "group": "secondary",
   "capability": "Publish a doc to a public, shareable website",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "PUT /docs/{docId}/publish; DELETE /docs/{docId}/publish",
    "mcp": null,
    "cli": null,
    "ui": "Publish panel"
   },
   "check": "GET /docs/{docId} shows publish status/browserLink resolving to a live page",
   "source": "https://docs.superhuman.com/developers (Publishing: putPublish doc, delUnpublish doc); https://coda.io/product/publishing"
  },
  {
   "id": "cap-17",
   "group": "secondary",
   "capability": "Customize a published doc's domain/branding",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Publish settings > custom domain"
   },
   "check": "Published site resolves under the configured custom domain",
   "source": "https://coda.io/product/publishing"
  },
  {
   "id": "cap-18",
   "group": "secondary",
   "capability": "Get discovered via search engines and the public Gallery",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /docs/{docId}/categories",
    "mcp": null,
    "cli": null,
    "ui": "Publish panel > discoverability toggle; Gallery"
   },
   "check": "Doc appears in Gallery search/listing once discoverability is enabled",
   "source": "https://coda.io/product/publishing; https://docs.superhuman.com/developers (Publishing: getGet doc categories)"
  },
  {
   "id": "cap-19",
   "group": "secondary",
   "capability": "View stats (views, copies, likes) for a published doc",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GET /docs/{docId}/analytics/summary; GET /analytics/docs",
    "mcp": null,
    "cli": null,
    "ui": "Doc analytics panel"
   },
   "check": "GET /docs/{docId}/analytics/summary returns nonzero view/copy/like counts after traffic",
   "source": "https://docs.superhuman.com/developers (Analytics: getList doc analytics, getGet doc analytics summary); https://coda.io/product/publishing"
  },
  {
   "id": "cap-20",
   "group": "secondary",
   "capability": "Export a page's content",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "POST /docs/{docId}/pages/{pageId}/export; GET .../export/{requestId}",
    "mcp": null,
    "cli": null,
    "ui": "Page > Export"
   },
   "check": "GET export status returns 'complete' with a downloadable link",
   "source": "https://docs.superhuman.com/developers (Pages: postBegin content export, getContent export status)"
  },
  {
   "id": "cap-21",
   "group": "secondary",
   "capability": "Connect third-party tools via Packs (integrations)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Packs gallery inside a doc"
   },
   "check": "Doc shows a working Pack-provided sync table or formula after install",
   "source": "https://coda.io/product/packs; https://coda.io/ ('create workflows across your must-have tools... 600+ integrations')"
  },
  {
   "id": "cap-22",
   "group": "secondary",
   "capability": "Build custom Packs/integrations in Pack Studio",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": "Coda Packs SDK CLI (coda create/upload)",
    "ui": "Pack Studio"
   },
   "check": "A Pack built and uploaded via the SDK CLI appears installable from the maker's Pack list",
   "source": "https://coda.io/resources/packs/why-build-packs"
  },
  {
   "id": "cap-23",
   "group": "secondary",
   "capability": "View analytics on an installed Pack's usage/formulas",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": "GET /analytics/packs; GET /analytics/packs/{packId}/summary; GET /analytics/packs/formulas",
    "mcp": null,
    "cli": null,
    "ui": "Pack analytics dashboard"
   },
   "check": "GET /analytics/packs/{packId}/summary returns usage metrics for the connected Pack",
   "source": "https://docs.superhuman.com/developers (Analytics: getList Pack analytics, getGet Pack analytics summary, getList Pack formula analytics)"
  },
  {
   "id": "cap-25",
   "group": "secondary",
   "capability": "Use templates to start a doc/team hub",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Template gallery when creating a doc"
   },
   "check": "New doc created from a template matches the template's structure",
   "source": "https://coda.io/ ('customizable solutions and templates for every team')"
  },
  {
   "id": "cap-26",
   "group": "secondary",
   "capability": "Resolve a Coda browser link to a resource",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /resolveBrowserLink",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "GET /resolveBrowserLink?url=... returns the matching resource id/type",
   "source": "https://docs.superhuman.com/developers (Miscellaneous: getResolve browser link)"
  },
  {
   "id": "cap-27",
   "group": "secondary",
   "capability": "Check status of long-running API mutations",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /mutationStatus/{requestId}",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "GET /mutationStatus/{id} returns completed:true once the triggering action finishes",
   "source": "https://docs.superhuman.com/developers (Miscellaneous: getGet mutation status)"
  },
  {
   "id": "cap-28",
   "group": "secondary",
   "capability": "Inspect column schema/types for a table",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /docs/{docId}/tables/{tableId}/columns",
    "mcp": "list columns",
    "cli": null,
    "ui": "Table column header menu"
   },
   "check": "GET /docs/{docId}/tables/{tableId}/columns/{columnId} returns the column's format/type",
   "source": "https://docs.superhuman.com/developers (Columns: getList columns, getGet a column)"
  },
  {
   "id": "cap-29",
   "group": "secondary",
   "capability": "Inspect and use interactive controls in a doc",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /docs/{docId}/controls; GET .../controls/{controlId}",
    "mcp": null,
    "cli": null,
    "ui": "Control blocks (sliders, selects, buttons) in doc canvas"
   },
   "check": "GET /docs/{docId}/controls/{controlId} reflects the current control value after a user changes it",
   "source": "https://docs.superhuman.com/developers (Controls: getList controls, getGet a control)"
  },
  {
   "id": "cap-30",
   "group": "secondary",
   "capability": "Generate API keys/tokens for programmatic access",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /whoami",
    "mcp": null,
    "cli": null,
    "ui": "Account settings > API settings"
   },
   "check": "GET /whoami with a generated token returns the authenticated user's profile",
   "source": "https://docs.superhuman.com/developers (Account: getGet user info)"
  },
  {
   "id": "cap-31",
   "group": "peripheral",
   "capability": "Manage workspace members, roles, and domains (admin)",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Workspace admin settings"
   },
   "check": "Admin console reflects an invited/removed member or changed role",
   "source": "https://coda.io/solutions/team-size/enterprise"
  },
  {
   "id": "cap-32",
   "group": "peripheral",
   "capability": "Configure SSO / enterprise security controls",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Enterprise admin > security settings"
   },
   "check": "Workspace login flow redirects through the configured SSO provider",
   "source": "https://coda.io/solutions/team-size/enterprise"
  },
  {
   "id": "cap-33",
   "group": "peripheral",
   "capability": "Upgrade/change subscription plan and billing",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Workspace settings > Plan & billing"
   },
   "check": "Billing page shows the newly selected plan and seat count",
   "source": "https://superhuman.com/plans/docs"
  }
 ],
 "attempts": [
  {
   "t": "01:41",
   "cap": "discovery",
   "capability": "robots/aipref",
   "task": "Read robots.txt and Content-Usage",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "coda.io/robots.txt 200: User-agent: * Disallow: /apis/ /embed/ /docs /d/; no Content-Usage or Content-signal lines; no Content-Usage header on coda.io/. docs.superhuman.com/robots.txt: User-agent: * Disallow: /",
   "notes": "Start address coda.io/ is allowed; API and docs hosts are disallowed for all crawlers (robots.txt governs crawling, we use the API as one user on our own account)."
  },
  {
   "t": "01:41",
   "cap": "discovery",
   "capability": "OpenAPI",
   "task": "Fetch OpenAPI",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET https://coda.io/apis/v1/openapi.json 200 application/json, openapi 3.0.0, info.version 1.6.0, title Superhuman Docs API, servers https://docs.superhuman.com/apis/v1, 91 paths / 125 operations; also openapi.yaml",
   "notes": "3.0.0 is behind current 3.2.1. No x-payment-info."
  },
  {
   "t": "01:41",
   "cap": "discovery",
   "capability": "llms.txt / markdown",
   "task": "Look for llms.txt and markdown docs",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "coda.io/llms.txt 307 -> 404; docs.superhuman.com/llms.txt 404; docs page with Accept: text/markdown returns text/html, no Vary: Accept; /developers/apis/v1.md 307 not markdown",
   "notes": "no llms.txt, no markdown"
  },
  {
   "t": "01:41",
   "cap": "discovery",
   "capability": "well-known cards",
   "task": "ai-catalog, agent-card, server-card, ucp, auth.md, SKILL.md",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "/.well-known/ai-catalog.json, agent-card.json, agent.json, mcp/server-card.json, ucp: 404 HTML on coda.io and docs.superhuman.com; auth.md, SKILL.md: 307 to 404; <mcp>/server-card: 401",
   "notes": "none present"
  },
  {
   "t": "01:41",
   "cap": "discovery",
   "capability": "MCP server/discover",
   "task": "POST server/discover on official MCP endpoints",
   "route": "mcp",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "POST https://coda.io/apis/mcp and https://docs.superhuman.com/apis/mcp -> 401 application/json {statusCode:401,...}, WWW-Authenticate: Bearer realm=\"mcp\", resource_metadata=\".../.well-known/oauth-protected-resource/apis/mcp\", scope=\"mcp:all\"",
   "notes": "auth required before discover"
  },
  {
   "t": "01:41",
   "cap": "discovery",
   "capability": "MCP auth metadata",
   "task": "Read PRM and AS metadata",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "PRM coda.io: resource https://coda.io/apis/mcp, authorization_servers [https://coda.io]; PRM docs.superhuman.com: AS https://id.superhuman.com. AS metadata (coda.io and id.superhuman.com): authorization_code only, S256, registration_endpoint (DCR), no client_id_metadata_document_supported, no device_authorization_endpoint, no agent_auth",
   "notes": "DCR only (deprecated path), no CIMD, no device flow. docs.superhuman.com/.well-known/oauth-authorization-server has issuer tokens.grammarly.com, while PRM names id.superhuman.com"
  },
  {
   "t": "03:52",
   "cap": "signup",
   "capability": "Sign up",
   "task": "Create account with email+password",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "No sign-up API in OpenAPI (91 paths, none for accounts). Web form coda.io/signup/password (email, first, last name, password) -> \"Verify your email\" page; no CAPTCHA signals",
   "notes": "web form only; Google/Microsoft/SSO/magic link alternatives"
  },
  {
   "t": "03:52",
   "cap": "verify",
   "capability": "Verify email",
   "task": "Open verification link",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Mail \"Welcome! Please verify your email\" from noreply@docs.superhuman.com arrived within ~1 min; link coda.io/signup/verify?token=... -> /firstsignin -> docs.superhuman.com/onboarding \"Welcome, AgentDrives Test.\"",
   "notes": "link-based, plain GET; done in browser to keep the session"
  },
  {
   "t": "05:21",
   "cap": "credentials",
   "capability": "Get API token",
   "task": "Generate API token",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Account settings > API connections > Generate API token (name dialog, optional restriction) shows a UUID token; no API/CLI route to mint a token. MCP OAuth: authorization_code only (needs browser consent), DCR registration_endpoint, no device flow",
   "notes": "browser only"
  },
  {
   "t": "05:21",
   "cap": "first_call",
   "capability": "First API call",
   "task": "GET /whoami",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET https://coda.io/apis/v1/whoami 200 {name: AgentDrives Test, tokenName: agentdrives-drive, workspace ws-9SQudjGrx9}; same on docs.superhuman.com/apis/v1",
   "notes": "no RateLimit headers on response"
  },
  {
   "t": "05:21",
   "cap": "cap-30",
   "capability": "Generate API keys/tokens for programmatic access",
   "task": "Mint a token and confirm it with /whoami",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "token generated in account settings; GET /whoami returns tokenName agentdrives-drive",
   "notes": "minting is browser-only; /whoami confirms",
   "quality": {
    "verify_route": "yes"
   }
  },
  {
   "t": "06:34",
   "cap": "cap-01",
   "capability": "Create a doc",
   "task": "POST /docs titled AgentDrives Test Doc",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /docs 201 id L6j-i5mUW-; GET /docs/L6j-i5mUW- returns name AgentDrives Test Doc",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "06:34",
   "cap": "cap-02",
   "capability": "Build structured pages inside a doc",
   "task": "POST page with markdown canvas content (heading, list, bold)",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /docs/L6j-i5mUW-/pages 202 id canvas-UQFZlN5RA9; /mutationStatus completed true; GET /pages lists Project plan; markdown export returns the same heading/list/bold",
   "notes": "first GET /pages right after create gave 409 \"This doc is not currently accessible via the API, likely because it has just been created. Please try again in a moment.\" (no Retry-After)",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "recoverable": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "06:34",
   "cap": "cap-27",
   "capability": "Check status of long-running API mutations",
   "task": "Poll mutationStatus for the page create",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /mutationStatus/mutate:b6aef674-... {completed:false} then {completed:true}",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "06:34",
   "cap": "cap-20",
   "capability": "Export a page content",
   "task": "Export page as markdown",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST .../pages/canvas-UQFZlN5RA9/export {outputFormat:markdown} 202 inProgress; GET .../export/{id} complete with S3 downloadLink (expires 300 s); download is gzip, decompressed markdown matches what we wrote",
   "notes": "download is gzip-encoded without being obvious from the docs",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "07:44",
   "cap": "discovery",
   "capability": "MCP version",
   "task": "server/discover with OAuth token, then initialize fallback",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "server/discover with MCP-Protocol-Version 2026-07-28 -> HTTP 400 JSON-RPC -32000 \"Unsupported protocol version: 2026-07-28 (supported versions: 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05, 2024-10-07)\"; initialize offering 2026-07-28 -> protocolVersion 2025-11-25, serverInfo coda-agent-mcp-server 16.0.3, SSE reply, Mcp-Session-Id; tools/list 37 tools",
   "notes": "legacy server; error code -32000 not -32022. OAuth: DCR at /v4/api/oauth2/register 200, browser consent page, token via PKCE; access token expires_in 300 s, refresh token 60 days; authorization response has no iss parameter"
  },
  {
   "t": "09:52",
   "cap": "cap-03",
   "capability": "Create and manage tables/databases of rows",
   "task": "Create a Tasks table with 3 typed columns and 2 rows, read it back",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "MCP table_create (official Coda MCP, 2025-11-25) -> tableUri grid-ssK-URSluD, rowCount 2; REST GET /docs/L6j-i5mUW-/tables lists Tasks; GET .../columns shows Task text, Status text, Points number",
   "notes": "REST API has no create-table route (list/get only); MCP does. First MCP call on a doc returns 307 to /apis/mcp/docs/{docId} with an empty body: clients that do not re-POST get nothing. First try with a page URI failed \"page canvas-UQFZlN5RA9 has an invalid ID format\" (REST page id is a canvas id; MCP wants canvases/ URI); format type number rejected, needs num. Right after create, REST POST rows gave 404 \"Could not find a table\" for a few seconds",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "recoverable": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "09:52",
   "cap": "cap-04",
   "capability": "Insert, update, and delete rows in a table",
   "task": "Insert a row, update a cell, delete a row, upsert by key column",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST .../rows 202 then GET rows shows Publish result/Open/5; PUT .../rows/i-0Mnr1nW1sO Status Done -> read back Done; DELETE .../rows/i--BybqttjmE -> row gone after ~10 s; POST same Task with keyColumns [Task] and Points 8 -> row updated to 8, no duplicate",
   "notes": "writes are async (202 + requestId), visible after 3-10 s; /mutationStatus stayed completed:false for a delete that was already visible",
   "quality": {
    "verify_route": "yes",
    "idempotent": "yes",
    "docs_match": "drift"
   }
  },
  {
   "t": "09:52",
   "cap": "cap-05",
   "capability": "Read rows and filter/sort a table data",
   "task": "List rows with column names, filter by query Task:\"Review\"",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET .../rows?useColumnNames=true&sortBy=natural&valueFormat=simple returns 2 rows; ?query=Task:\"Review\" returns only i--BybqttjmE; GET unknown row -> 404 \"Could not find a row with the specified ID or name.\"",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "docs_match": "match"
   }
  },
  {
   "t": "09:52",
   "cap": "cap-28",
   "capability": "Inspect column schema/types for a table",
   "task": "List columns of Tasks",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /docs/L6j-i5mUW-/tables/grid-ssK-URSluD/columns -> c-Yjcn0TYKZy Task text, c-HmowX2tSKR Status text, c-Was_NAQI_M Points number",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "11:46",
   "cap": "cap-06",
   "capability": "Build formulas and buttons that act on data",
   "task": "Add a formula column and a button column (MCP), push the button (REST), add a named canvas formula and read it via REST",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "MCP table_columns_manage added Double points (Points * 2) and Mark done button (ModifyRows thisRow Status Done); REST rows show Double points 16; POST .../rows/i-eMOhY5bxZa/buttons/c-nywOcglosL 202 -> Status read back Done, mutationStatus completed true; MCP control_manage created formula TotalPoints; REST GET /formulas/f-9rBqptCY6k value 11; MCP formula_execute Tasks.Points.Sum = 11",
   "notes": "first button push 404 \"Not Found\" because REST column list lagged a few seconds behind the MCP write; MCP control_manage rejected format.{label,actionFormula} nested and wanted them on data directly (validation message named the fields)",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "recoverable": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "12:14",
   "cap": "cap-29",
   "capability": "Inspect and use interactive controls in a doc",
   "task": "Create a button control on the canvas (MCP) and read it via REST /controls",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "MCP control_manage type button -> ctrl-ylLHWmaqRQ; REST GET /docs/L6j-i5mUW-/controls listed it after ~20 s (first read empty, GET by id 404 \"Could not find a control\"); GET /controls/ctrl-ylLHWmaqRQ controlType button",
   "notes": "REST read model lags MCP writes by 10-20 s",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "12:14",
   "cap": "cap-11",
   "capability": "Organize docs into folders/workspaces",
   "task": "Create a folder and put a doc in it",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /folders lists My docs; POST /folders 201 fl-dRx89XM32t; POST /docs with folderId -> GET /docs?folderId=fl-dRx89XM32t lists AgentDrives Copy",
   "notes": "/folders/{id}/children lists subfolders only (as documented)",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "12:15",
   "cap": "cap-12",
   "capability": "Copy an existing doc as a starting point",
   "task": "Copy the test doc with sourceDoc",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /docs {sourceDoc:L6j-i5mUW-, folderId} 201 MM6E3gVlmR with sourceDoc set; GET /docs/MM6E3gVlmR/tables lists Tasks",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "12:46",
   "cap": "cap-13",
   "capability": "Share a doc and manage collaborator permissions",
   "task": "Grant anyone-with-link read access, read it back, revoke it",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /docs/L6j-i5mUW-/acl/permissions {access readonly, principal anyone, suppressEmail} 200 {}; GET /acl/permissions shows id 6643d18f... readonly anyone; DELETE /acl/permissions/6643d18f... 200; GET shows items []",
   "notes": "used anyone-with-link so no email went to anyone",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "12:46",
   "cap": "cap-14",
   "capability": "Search for people/groups to share a doc with",
   "task": "Search principals for \"drive\"",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /docs/L6j-i5mUW-/acl/principals/search?query=drive -> users [AgentDrives Test the agent's inbox], groups []",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "12:46",
   "cap": "cap-15",
   "capability": "Configure a doc access-control (ACL) defaults",
   "task": "Turn off allowCopying and back on",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "PATCH /docs/L6j-i5mUW-/acl/settings {allowCopying:false} 200; GET /acl/settings shows allowCopying false; PATCH back to true",
   "notes": "worked on the Free plan although the map lists it as paid",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "12:46",
   "cap": "cap-16",
   "capability": "Publish a doc to a public, shareable website",
   "task": "PUT /docs/{id}/publish with a slug",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": true,
   "evidence": "PUT /docs/L6j-i5mUW-/publish {slugName, discoverable false, mode view} -> 400 {\"statusCode\":400,\"statusMessage\":\"Bad Request\",\"message\":\"Please create a maker profile before publishing a doc.\"}",
   "notes": "no API to create a maker profile; content-type application/json, not problem+json",
   "quality": {
    "error_legibility": "clear",
    "recoverable": "no",
    "docs_match": "drift"
   }
  },
  {
   "t": "15:13",
   "cap": "cap-16",
   "capability": "Publish a doc to a public, shareable website",
   "task": "Find how to create the maker profile the API asks for",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "No API route for a maker profile in the OpenAPI; doc Share > globe opens \"Share to web\" with \"Create profile\" (public profile docs.superhuman.com/@agentdrives-test)",
   "notes": "publishing needs a public maker profile that only the web UI creates; we did not create a public profile or publish (no public posts under our rules)"
  },
  {
   "t": "15:13",
   "cap": "cap-18",
   "capability": "Get discovered via search engines and the public Gallery",
   "task": "List gallery categories",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "GET /categories 200 lists Coda AI, Personal, Project management, ...",
   "notes": "assigning categories needs a published doc, blocked by the maker-profile step"
  },
  {
   "t": "15:13",
   "cap": "cap-19",
   "capability": "View stats (views, copies, likes) for a published doc",
   "task": "Read doc analytics",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "GET /analytics/docs 200 {items:[]}; GET /analytics/docs/summary 200 {totalSessions:0}",
   "notes": "endpoints answer on the Free plan; no published doc so no stats to read"
  },
  {
   "t": "15:14",
   "cap": "cap-26",
   "capability": "Resolve a Coda browser link to a resource",
   "task": "Resolve the table browser link",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /resolveBrowserLink?url=https://docs.superhuman.com/d/_dL6j-i5mUW-#_tugrid-ssK-URSluD -> resource type table id grid-ssK-URSluD name Tasks",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "15:14",
   "cap": "cap-08",
   "capability": "Generate content/tables with AI assistant",
   "task": "Have an agent build a structured table and page from a description over the Coda MCP",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "MCP table_create / table_columns_manage / control_manage built the Tasks table with typed, formula and button columns and a TotalPoints formula on the Project plan page; read back via REST tables/columns/formulas",
   "notes": "this is the MCP route the map names (agent creates docs/tables); Coda own Docs AI inside the doc not used here, see"
  },
  {
   "t": "16:04",
   "cap": "cap-22",
   "capability": "Build custom Packs/integrations in Pack Studio",
   "task": "Create a Pack and upload a version with a Greet formula",
   "route": "cli",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /packs {name} 200 {packId:70269}; official @codahq/packs-sdk CLI `coda upload pack.ts` (API token in .coda.json) -> Done; GET /packs/70269/versions lists packVersion 1, buildNotes AgentDrives test",
   "notes": "CLI talks to the API itself, so those calls were not Web-Bot-Auth signed; npm install warned isolated-vm install script was not run, upload worked anyway",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "16:04",
   "cap": "cap-21",
   "capability": "Connect third-party tools via Packs",
   "task": "Install a Pack into a doc headless",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "OpenAPI has pack listing/admin routes (/packs, /packs/listings) but no route to install a Pack into a doc; MCP tools/list (37 tools) has none either",
   "notes": "web UI only; not tried in the browser for time"
  },
  {
   "t": "18:47",
   "cap": "cap-07",
   "capability": "Chat with Coda AI inside a doc",
   "task": "Ask Docs AI the total points in the Tasks table",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Docs AI (Beta) side panel: prompt \"How many points are in the Tasks table in total?\" -> \"Reading table - Done\", answer 11 (3 + 8 = 11), matches REST formula TotalPoints value 11",
   "notes": "no API or MCP route to Docs AI; Free plan shows it as a limited trial"
  },
  {
   "t": "18:47",
   "cap": "cap-10",
   "capability": "Automate recurring/triggered actions in a doc",
   "task": "Create or trigger an automation headless",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "OpenAPI has POST /docs/{docId}/hooks/automation/{ruleId} to trigger a webhook-triggered rule, but no route to create a rule; MCP tools/list has no automation tool",
   "notes": "rule must be made in the web UI first; not tried for time"
  },
  {
   "t": "19:52",
   "cap": "pay",
   "capability": "Buy a plan the agent way",
   "task": "Probe 402 rails, discovery and the checkout without paying",
   "route": "browser",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "No 402 anywhere: unauthenticated GET /apis/v1/docs -> 401 JSON; x402./mpp./agents. on coda.io and superhuman.com do not resolve; /.well-known/ucp 404; no x-payment-info in OpenAPI; x402 Bazaar and mpp.dev list no coda/superhuman service; no billing routes in OpenAPI or MCP tools. Pricing coda.io/pricing -> superhuman.com/plans/docs: Free EUR 0, Pro EUR 12/15, Business EUR 33/40, Enterprise contact sales. Get Superhuman Pro -> superhuman.com/upgrade/docs/pro: choose billing, seats, \"Enter your payment details / Credit or debit card\" (Gr4vy secure fields, Stripe/Google Pay frames), Complete purchase; no trial offered",
   "notes": "stopped before entering anything; 3DS behaviour unknown; cancellation stated as \"cancel anytime on your Subscription page\" (web)"
  },
  {
   "t": "25:00",
   "cap": "delete",
   "capability": "Delete created data",
   "task": "Delete the docs, folder and Pack we made",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "DELETE /docs/MM6E3gVlmR 202; MCP document_delete coda://docs/L6j-i5mUW- ok; DELETE /packs/70269 200; DELETE /folders/fl-dRx89XM32t 200; GET /docs/{both} 404 \"Doc has been deleted.\", GET /packs/70269 404, GET /folders/fl-dRx89XM32t 403, GET /docs items []",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "docs_match": "match"
   }
  },
  {
   "t": "25:00",
   "cap": "delete",
   "capability": "Delete the account",
   "task": "Delete the Superhuman account",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "No account-delete route in the OpenAPI or MCP tools. Docs account settings has no delete; profile menu My Settings -> account.grammarly.com/profile \"Delete Account\" -> www.grammarly.com/signin?popup=deleteAccount&secureLogin=true shows \"Verify that it is you\" with a reCAPTCHA Enterprise anchor frame and no input or button, unchanged after ~30 s",
   "notes": "invisible reCAPTCHA Enterprise on the re-auth step; no visible challenge to hand off, so not retried. Account stays; data inside it was deleted via the API"
  },
  {
   "t": "25:30",
   "cap": "cap-17",
   "capability": "Customize a published doc domain/branding",
   "task": "Check plan for custom domains",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": false,
   "evidence": "superhuman.com/plans/docs: Pro (EUR 12/month annual) lists \"Custom icons, branding, domains\"; Free does not",
   "notes": "also needs publishing, blocked at maker profile"
  },
  {
   "t": "25:30",
   "cap": "cap-23",
   "capability": "View analytics on an installed Pack usage/formulas",
   "task": "Read Pack analytics",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "GET /analytics/packs?limit=3 200 {items:[]} on the Free plan",
   "notes": "endpoint answers; our Pack was never installed in a doc so there are no stats"
  },
  {
   "t": "25:30",
   "cap": "cap-32",
   "capability": "Configure SSO / enterprise security controls",
   "task": "Check plan",
   "route": "none",
   "documented": true,
   "result": "plan_gated",
   "verified": false,
   "evidence": "superhuman.com/plans/docs: SAML SSO and SCIM listed under Enterprise (Contact sales)"
  },
  {
   "t": "25:30",
   "cap": "cap-33",
   "capability": "Upgrade/change subscription plan and billing",
   "task": "Find how to upgrade without paying",
   "route": "browser",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "superhuman.com/upgrade/docs/pro: billing choice, seats, card fields, Complete purchase; no billing API or MCP tool",
   "notes": "stopped before payment details (no card)"
  },
  {
   "t": "25:30",
   "cap": "cap-09",
   "capability": "Run AI at scale over rows via an AI column",
   "task": "Add an AI column",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "no API or MCP route for AI columns (MCP table_columns_manage format types: none, num, button, canvas, ... no AI type)",
   "notes": "web UI only; not tried for time"
  },
  {
   "t": "25:30",
   "cap": "cap-25",
   "capability": "Use templates to start a doc/team hub",
   "task": "Start from a template",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "no template route in the OpenAPI; POST /docs sourceDoc copies a doc we can read",
   "notes": "not tried for time"
  },
  {
   "t": "25:30",
   "cap": "cap-31",
   "capability": "Manage workspace members, roles, and domains (admin)",
   "task": "n/a",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "no admin routes used; would invite real people",
   "notes": "peripheral, not tried"
  },
  {
   "t": "26:42",
   "cap": "cancel",
   "capability": "Cancel the plan",
   "task": "Find how a plan is cancelled",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "no plan started (Free). Checkout text: \"You can cancel anytime on your Subscription page\"; account.grammarly.com has a Subscription tab; no billing API or MCP tool",
   "notes": "cancel would be web UI"
  },
  {
   "t": "26:42",
   "cap": "delete",
   "capability": "Revoke the API token",
   "task": "Revoke our API token",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Account settings > API connections > token menu > Revoke; GET /whoami with the token -> 401 Unauthorized",
   "notes": "no API to revoke tokens; the MCP OAuth grant (refresh token, 60 days) was not revoked"
  }
 ],
 "stale": false,
 "icon": "/logos/coda.png",
 "monitored": false,
 "verdict": "Gets in on its own: L3 · Does the work. Sign-up ran in the browser with no CAPTCHA signals; verification arrived by email and the API token came from Account settings, then our agent switched to headless calls. It created a doc, pages, a typed table with formula and button columns, rows, sharing and a Pack through the REST API and the official MCP server, each read back. Upgrading needs a hosted checkout with card details on superhuman.com; our agent stopped before entering payment details. Deleting the account stopped at a \"Verify that it's you\" step on grammarly.com that showed no form in our agent's browser, so the account remains; our agent revoked its API token instead.",
 "page": "https://agentdrives.com/tools/coda?via=api"
}