{
 "slug": "framer",
 "name": "Framer",
 "url": "https://framer.com",
 "domain": "framer.com",
 "category": "website-builders",
 "category_name": "Website builders",
 "tested_at": "2026-10-11",
 "run": "20261011T163337Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261011T163337Z",
   "date": "2026-10-11",
   "level": 1,
   "engine": {
    "runner": "omp",
    "model": "claude-opus-5-5",
    "driver": 3,
    "signed": true,
    "inbox": [
     "matfy.com"
    ],
    "robots": "obey"
   }
  }
 ],
 "level": 1,
 "level_name": "Needs a person",
 "level_selfhost": null,
 "entry": "closed",
 "door": {
  "passed": 0,
  "tries": 1,
  "self_start": false
 },
 "badges": [],
 "stages": [
  {
   "key": "in",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "part",
   "text": "Some docs agents can read: llms.txt and an MCP server",
   "have": [
    "llms_txt",
    "mcp"
   ]
  },
  {
   "key": "access",
   "label": "Access",
   "state": "no",
   "text": "Can't get in on its own",
   "at": "signup",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "unreached",
   "text": "Work not measured",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "unreached",
   "text": "Leaving not reached",
   "how": "no-account",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "person",
   "label": "A person sets it up",
   "routes": [],
   "minutes": null,
   "core": null
  }
 ],
 "minutes": null,
 "next": {
  "to": 2,
  "text": "Next: let an agent sign up on its own"
 },
 "stop": "signup",
 "core": "0/9",
 "scores": {
  "coverage": null,
  "reliability": null,
  "resilience": null,
  "setup": 75,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 75,
  "security": null,
  "standards": [
   {
    "standard": "MCP client registration",
    "state": "behind",
    "behind": null,
    "value": "dcr"
   }
  ]
 },
 "reliability_method": null,
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": null,
 "after_wall": null,
 "coverage_source": "computed",
 "driver": {
  "version": 3,
  "model": "claude-opus-5-5",
  "profile": "full",
  "assisted": false,
  "handoff": false,
  "prompt_sha": "076cd4c65a1a",
  "kb_version": "3+overlay-1353601952",
  "identity": "e8a92f24a9a8"
 },
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": "claude-opus-5-5",
  "driver": 3,
  "signed": true,
  "inbox": [
   "matfy.com"
  ],
  "robots": "obey"
 },
 "same_level_drives": 1,
 "drives": 1,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": {
  "rung": "signup",
  "vendor": "Castle (risk SDK castleSDKV3)",
  "visible": false,
  "type": "network",
  "human": null,
  "how": "Let signed agents (valid Web Bot Auth signature) skip the bot check on sign-up, or offer a documented sign-up API with email verification.",
  "signed": true
 },
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "form"
  },
  "signed": {
   "state": "page",
   "kind": "signup",
   "at": "2026-10-12"
  },
  "browser": {
   "state": "through",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "llms.txt, ?md pages and Accept: text/markdown all served markdown headless; Server API quick start, External Agents and plugin docs read."
  },
  "signup": {
   "status": "blocked",
   "note": "Email-first form at framer.com/login shows no challenge; on Continue a Castle risk token is sent and api.framer.com/auth/v4/signin answers 403 'Access denied by policy' ('Verification failed'). Other route: Continue with Google only."
  },
  "verify": {
   "status": "",
   "note": "No email was sent; sign-up refused first.",
   "reached": false
  },
  "credentials": {
   "status": "",
   "note": "Server API keys come from Site Settings in the editor; @framer/agent 'project new' and MCP OAuth (DCR + PKCE) both need a logged-in browser session. No device flow or headless key route.",
   "via": "",
   "reached": false
  },
  "first_call": {
   "status": "",
   "note": "No credential; mcp.framer.com/mcp answers 401 without a token.",
   "reached": false
  },
  "first_action": {
   "status": "",
   "note": "Creating a project needs browser approval in a logged-in session.",
   "reached": false
  },
  "pay": {
   "status": "",
   "grade": "P1",
   "rails": [
    "card checkout in the app",
    "PayPal (some regions)"
   ],
   "rail_ids": [
    "card"
   ],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "free tier",
   "note": "Pricing: free plan, Basic $10/mo, Pro $30/mo; paid 'with a credit card or, in some regions, via PayPal'. No 402, x402, MPP, UCP or registry listing; we paid nothing. Checkout sits inside the logged-in app, not reached.",
   "reached": false
  },
  "cancel": {
   "status": "",
   "note": "not tested: no plan or trial was started, and no account exists to start one (sign-up blocked). Help article: Workspace settings > Plans > Cancel Plan, with a feedback step (web UI).",
   "docs_grade": "",
   "reached": false
  },
  "delete": {
   "status": "",
   "note": "No account was created, so nothing to delete. Docs: Account settings > Profile > Delete Account, web UI only.",
   "account": false,
   "reached": false
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-11",
  "source": "probe",
  "options": [],
  "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": false,
  "cli": true,
  "sdk": true,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": false,
  "sandbox": false
 },
 "surface_notes": {
  "api": "Server API via the framer-api npm package (5.1.0), project-bound API key",
  "cli": "@framer/agent 0.0.46: exec, apply-changes, project new/auth via browser approval",
  "mcp": "mcp.framer.com/mcp, OAuth (DCR), not tried past 401",
  "llms_txt": "www.framer.com/llms.txt, links with ?md"
 },
 "can_do": [
  "Read all docs as markdown (llms.txt, ?md, Accept: text/markdown)",
  "Run the public AEO scanner on a site and read its score and findings"
 ],
 "cannot_do": [
  {
   "what": "Create an account",
   "why": "Castle risk check returns 403 'Access denied by policy' on the email step"
  },
  {
   "what": "Get an API key, use the CLI or MCP, build or publish a site",
   "why": "All need a logged-in account"
  }
 ],
 "blockers": [
  "Sign-up: api.framer.com/auth/v4/signin 403 'Access denied by policy' (Castle risk check, invisible)"
 ],
 "tips_for_owner": [
  "Let verified agents past the sign-in risk check",
  "Offer a headless credential path",
  "Say what failed in the sign-in error",
  "Add CIMD to the OAuth server",
  "Accept an agent payment rail"
 ],
 "tips_for_agents": [
  "Docs: fetch any www.framer.com page with ?md or Accept: text/markdown.",
  "The intended agent route is npx @framer/agent (skills + bridge) after a human approves the project in a logged-in browser.",
  "Server API: npm framer-api, connect(projectUrl, key) with a key from Site Settings > General."
 ],
 "selfhost": null,
 "summary": "Framer's docs are very agent-readable (llms.txt, markdown on every page) and it offers a CLI, a Server API package and an OAuth MCP endpoint. But our signed agent could not open an account: the email step is refused by an invisible Castle risk check (403 'Access denied by policy') with no challenge to hand to a human, so nothing behind the login could be tried.",
 "wall": "Invisible risk check refuses sign-up",
 "plan_scope": "",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Framer is a website builder with an AI design assistant, a CMS, and developer tools (CLI, API, MCP). An agent trying it on its own could read all the documentation but never got past the account sign-up: an invisible automated risk check rejected the request with no explanation and no way for a human to step in.",
  "can_do": [
   "Read every help and developer page as clean text",
   "Run the free public tool that scores a website's visibility to AI search engines"
  ],
  "cannot_do": [
   {
    "what": "Create an account",
    "why": "An automated risk check silently rejects sign-up attempts"
   },
   {
    "what": "Design, publish, or manage a site; use the API, CLI, or AI assistant",
    "why": "All of these require a logged-in account, which could not be created"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Design",
   "capability": "Design a page visually on the canvas",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Canvas editor"
   },
   "check": "Published page HTML reflects the new layout/elements added on canvas",
   "source": "https://www.framer.com/, https://www.framer.com/design/"
  },
  {
   "id": "cap-02",
   "group": "Agents",
   "capability": "Generate or edit site design from a text prompt",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Canvas / Agent chat panel"
   },
   "check": "Prompted change (e.g. new section, color change) appears as an editable layer in the project, viewable in canvas history",
   "source": "https://www.framer.com/agents/, https://www.framer.com/"
  },
  {
   "id": "cap-03",
   "group": "Agents",
   "capability": "Build a new multi-page site from a description or reference",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Canvas / Agent chat"
   },
   "check": "New project contains the requested pages (e.g. Home, About, Contact) after the prompt",
   "source": "https://www.framer.com/agents/"
  },
  {
   "id": "cap-04",
   "group": "CMS",
   "capability": "Create and manage a CMS collection (fields, items)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "Server API (framer-api package)",
    "mcp": null,
    "cli": null,
    "ui": "CMS panel / Agent prompt"
   },
   "check": "GET project via Server API or CMS panel shows the new collection with its fields and item count",
   "source": "https://www.framer.com/cms/, https://www.framer.com/pricing"
  },
  {
   "id": "cap-05",
   "group": "CMS",
   "capability": "Import content into CMS from CSV or another CMS (WordPress, Contentful)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "CMS panel / Agent prompt"
   },
   "check": "CMS collection item count matches imported rows, visible in CMS panel",
   "source": "https://www.framer.com/cms/"
  },
  {
   "id": "cap-06",
   "group": "Code",
   "capability": "Add custom code components or interactions via an agent",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Code Components panel / Agent chat"
   },
   "check": "New React code component appears attached to the layer and renders on canvas preview",
   "source": "https://www.framer.com/, https://www.framer.com/developers/components-introduction"
  },
  {
   "id": "cap-07",
   "group": "Publishing",
   "capability": "Publish a site to a live URL",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "framer-api .publish/.deploy",
    "mcp": null,
    "cli": null,
    "ui": "Publish button"
   },
   "check": "GET the site's published URL returns 200 with the latest content; framer.getChangedPaths shows no pending diff",
   "source": "https://www.framer.com/developers/server-api-quick-start, https://www.framer.com/publish/"
  },
  {
   "id": "cap-08",
   "group": "External Agents",
   "capability": "Connect an external coding agent (Claude Code, Cursor, Codex) to read/write a Framer project",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "npx @framer/agent bridge (no separate MCP server)",
    "mcp": null,
    "cli": "npx @framer/agent setup",
    "ui": "/framer skill in external agent"
   },
   "check": "External agent session shows 'Connected to your Site project'; changes land on an auto-created branch visible in Framer collaborate panel",
   "source": "https://www.framer.com/agents/external/"
  },
  {
   "id": "cap-09",
   "group": "Responsive",
   "capability": "Make layouts responsive across breakpoints (tablet/mobile)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Canvas breakpoint editor / Agent prompt"
   },
   "check": "Canvas shows distinct tablet/mobile breakpoint overrides for the edited layer",
   "source": "https://www.framer.com/agents/"
  },
  {
   "id": "cap-10",
   "group": "Hosting",
   "capability": "Connect a custom domain to the site",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Project Settings > Domains"
   },
   "check": "Domain tab shows domain status 'Connected' and DNS resolves to Framer hosting",
   "source": "https://www.framer.com/domains/, https://www.framer.com/pricing"
  },
  {
   "id": "cap-11",
   "group": "CMS/SEO",
   "capability": "Set per-page/per-item SEO metadata (title, description, social preview) with CMS variables",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Page Settings panel"
   },
   "check": "Published page <head> contains the configured title/description/og:image tags",
   "source": "https://www.framer.com/seo/"
  },
  {
   "id": "cap-12",
   "group": "SEO",
   "capability": "Set up URL redirects",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "SEO settings > Redirects"
   },
   "check": "Requesting the old URL on the published site returns a 301 to the configured target",
   "source": "https://www.framer.com/seo/, https://www.framer.com/pricing"
  },
  {
   "id": "cap-13",
   "group": "SEO",
   "capability": "Upload well-known static files (robots.txt, llms.txt, security.txt)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "SEO settings > Files"
   },
   "check": "GET /robots.txt or /llms.txt on the published domain returns the uploaded file content",
   "source": "https://www.framer.com/seo/"
  },
  {
   "id": "cap-14",
   "group": "SEO",
   "capability": "Scan site for AI/answer-engine visibility (AEO scanner)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "/aeo scanner page"
   },
   "check": "Scanner returns an overall AEO score and per-category findings for the submitted URL",
   "source": "https://www.framer.com/seo/, https://www.framer.com/aeo"
  },
  {
   "id": "cap-15",
   "group": "Collaboration",
   "capability": "Create and merge branches for parallel editing",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Branches panel"
   },
   "check": "New branch appears in branch list with its own staging URL; merging updates main's changelog entry",
   "source": "https://www.framer.com/collaborate/"
  },
  {
   "id": "cap-16",
   "group": "Collaboration",
   "capability": "Leave comments pinned to canvas elements",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Canvas comment mode (press C)"
   },
   "check": "Comment thread appears pinned to the element and is visible/resolvable by other collaborators",
   "source": "https://www.framer.com/collaborate/"
  },
  {
   "id": "cap-17",
   "group": "Collaboration",
   "capability": "Assign member roles and permissions (editor, content editor, viewer)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Project Settings > Members"
   },
   "check": "Member list shows the assigned role; a Viewer account cannot publish or edit design",
   "source": "https://www.framer.com/collaborate/, https://www.framer.com/help/articles/member-roles-and-permissions/"
  },
  {
   "id": "cap-18",
   "group": "Content editing",
   "capability": "Edit CMS content directly on the live page (on-page editing) from any device",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Published site on-page editor"
   },
   "check": "Edited text/field value on the live page updates the corresponding CMS item record",
   "source": "https://www.framer.com/help/articles/on-page-editing/, https://www.framer.com/cms/"
  },
  {
   "id": "cap-19",
   "group": "Analytics",
   "capability": "View site analytics (pageviews, visitors, traffic by page/country/device/source/UTM)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Analytics panel"
   },
   "check": "Analytics dashboard shows nonzero pageview/visitor counts for the published site after traffic occurs",
   "source": "https://www.framer.com/analytics"
  },
  {
   "id": "cap-20",
   "group": "Convert add-on",
   "capability": "Run A/B tests on page variants",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Convert / Analytics panel"
   },
   "check": "A/B test results view shows per-variant views/conversion rate and a declared winner",
   "source": "https://www.framer.com/convert/, https://www.framer.com/pricing"
  },
  {
   "id": "cap-21",
   "group": "Convert add-on",
   "capability": "Build visual conversion funnels",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Convert / Analytics panel"
   },
   "check": "Funnel view shows step-by-step visitor counts and drop-off between defined steps",
   "source": "https://www.framer.com/convert/"
  },
  {
   "id": "cap-22",
   "group": "Convert add-on",
   "capability": "Set up dynamic triggers (show overlay/switch variant on visitor condition)",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Convert panel > Triggers"
   },
   "check": "Visiting the site with the matching condition (e.g. URL parameter) serves the configured variant/overlay",
   "source": "https://www.framer.com/convert/"
  },
  {
   "id": "cap-23",
   "group": "Forms",
   "capability": "Add a native form that captures submissions (leads, signups)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Canvas form component"
   },
   "check": "Submitting the published form creates a retrievable submission record/notification",
   "source": "https://www.framer.com/convert/"
  },
  {
   "id": "cap-24",
   "group": "Localization",
   "capability": "Translate site into multiple locales with AI",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Localization panel"
   },
   "check": "Published site serves locale-specific content at the locale's URL/subpath with translated text",
   "source": "https://www.framer.com/pricing, https://www.framer.com/"
  },
  {
   "id": "cap-25",
   "group": "Hosting",
   "capability": "Preview and test changes on a staging URL before publishing",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "framer-api .publish preview deployment",
    "mcp": null,
    "cli": null,
    "ui": "Staging/branch preview link"
   },
   "check": "Staging URL serves the branch's unpublished changes while production URL remains unchanged",
   "source": "https://www.framer.com/collaborate/, https://www.framer.com/developers/server-api-quick-start"
  },
  {
   "id": "cap-26",
   "group": "Site admin",
   "capability": "Password-protect a published site/page",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Project/page Settings"
   },
   "check": "Accessing the protected URL unauthenticated returns a password prompt instead of content",
   "source": "https://www.framer.com/pricing, https://www.framer.com/collaborate/"
  },
  {
   "id": "cap-27",
   "group": "Developer",
   "capability": "Automate publish/deploy from external scripts via Server API",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "framer-api npm package: getProjectInfo, getChangedPaths, publish, deploy",
    "mcp": null,
    "cli": null,
    "ui": null
   },
   "check": "Script's framer.publish call returns a deployment id that subsequently appears as a new version in project history",
   "source": "https://www.framer.com/developers/server-api-quick-start"
  },
  {
   "id": "cap-28",
   "group": "Developer",
   "capability": "Build a custom plugin that interacts with the Framer editor and CMS",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Plugins marketplace / Developer docs"
   },
   "check": "Installed plugin appears in the editor's plugin panel and can read/modify canvas or CMS state",
   "source": "https://www.framer.com/developers/plugins-introduction"
  },
  {
   "id": "cap-29",
   "group": "Developer",
   "capability": "Build a Fetch API endpoint usable without code on the site",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Fetch panel"
   },
   "check": "A canvas element bound to the Fetch endpoint renders data retrieved from that endpoint at runtime",
   "source": "https://www.framer.com/developers/fetch-introduction"
  },
  {
   "id": "cap-30",
   "group": "Marketplace",
   "capability": "Browse and use community templates, components, and vectors",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Community marketplace"
   },
   "check": "Chosen template/component is added to the project and appears as a usable layer/asset",
   "source": "https://www.framer.com/community/marketplace/templates/"
  },
  {
   "id": "cap-31",
   "group": "Account/Workspace",
   "capability": "Manage a team workspace and invite additional editors/viewers",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Workspace settings"
   },
   "check": "Invited user appears in the workspace member list and can log in with the assigned role",
   "source": "https://www.framer.com/collaborate/, https://www.framer.com/pricing"
  },
  {
   "id": "cap-32",
   "group": "Account/Workspace",
   "capability": "View and buy AI credits / upgrade add-ons for agent and localization usage",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Billing / Pricing"
   },
   "check": "Workspace credit balance updates after purchasing additional credits",
   "source": "https://www.framer.com/pricing"
  },
  {
   "id": "cap-33",
   "group": "Enterprise",
   "capability": "Configure SSO/SCIM for enterprise workspace access",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Enterprise admin settings"
   },
   "check": "Enterprise workspace login enforces SSO provider authentication for member sign-in",
   "source": "https://www.framer.com/pricing"
  },
  {
   "id": "cap-34",
   "group": "Developer",
   "capability": "Install static headers/firewall rules via Advanced Hosting add-on",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Advanced Hosting settings"
   },
   "check": "Response headers on the published site match the configured custom header/firewall rule values",
   "source": "https://www.framer.com/pricing"
  },
  {
   "id": "cap-35",
   "group": "Integrations",
   "capability": "Integrate Google Analytics/Tag Manager via measurement ID or script",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "SEO/Integrations settings"
   },
   "check": "Published page's HTML includes the configured GA/GTM script tag firing on load",
   "source": "https://www.framer.com/seo/, https://www.framer.com/help/integrations/"
  }
 ],
 "attempts": [
  {
   "t": "00:05",
   "cap": "discovery",
   "capability": "robots, llms.txt, cards, markdown",
   "task": "probe well-knowns",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "robots.txt: 'Content-Signal: ai-train=yes, search=yes, ai-input=yes' (Cloudflare Content Signals form, parses); llms.txt 200 text/plain with ?md links; Accept: text/markdown on /agents/external/ -> content-type text/markdown, vary Accept; ai-catalog, agent-card, agent.json, auth.md, ucp, oauth-protected-resource on www all 404",
   "notes": "Docs: Server API (framer-api npm, project-bound API key from Site Settings), External Agents (npx @framer/agent setup, browser grant), plugins. No OpenAPI."
  },
  {
   "t": "00:06",
   "cap": "docs",
   "capability": "Find docs",
   "task": "Read developer docs and llms.txt",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "https://www.framer.com/developers/server-api-quick-start?md and /agents/external/?md fetched headless as markdown",
   "notes": "headless"
  },
  {
   "t": "00:06",
   "cap": "pay",
   "capability": "Pay probes",
   "task": "Read pay_probe.json/pay_tx.json; check www well-knowns",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "pay_probe: no 402 challenges, x402./mpp./agents. no such host, no registry listings, /.well-known/ucp 404; pay_tx: refused, no 402 on own domain",
   "notes": "free plan exists; checkout location to be checked in-app"
  },
  {
   "t": "00:09",
   "cap": "signup",
   "capability": "Sign up",
   "task": "Sign up with the agent's inbox via framer.com/r/signup (email-first login form)",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "Form loads with no visible challenge; on Continue the page loads castleSDKV3 (Castle risk engine) and POSTs castleToken with the email to api.framer.com/auth/v4/signin -> 403 {\"error\":{\"message\":\"Access denied by policy\",\"status\":403,\"type\":\"Forbidden\"}}; page shows 'Verification failed / Please try again'",
   "notes": "Invisible risk check (Castle) rejected our agent's browser before any email was sent. Retried once identically only to record the network response; same 403. Only other route is Continue with Google (we have no Google account).",
   "quality": {
    "error_legibility": "vague",
    "recoverable": "no"
   }
  },
  {
   "t": "05:10",
   "cap": "verify",
   "capability": "Verify email",
   "task": "Verify sign-up email",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "No mail sent: sign-in/sign-up request refused with 403 before any email step",
   "notes": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line"
  },
  {
   "t": "05:15",
   "cap": "credentials",
   "capability": "Get API credentials",
   "task": "Project API key (Site Settings > General) or @framer/agent 'project new' browser approval",
   "route": "cli",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "key": "create",
   "evidence": "npx @framer/agent project new prints https://framer.com/projects/server-api/auth?callback=http://127.0.0.1:<port>/callback&state=…&createProject=true (loopback browser approval, needs a logged-in Framer session); Server API keys only from Site Settings in the editor; MCP OAuth (DCR, auth-code+PKCE) also needs a logged-in session. No headless key route, no device flow.",
   "notes": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line"
  },
  {
   "t": "05:16",
   "cap": "first_call",
   "capability": "First API call",
   "task": "framer-api connect / MCP tools/list",
   "route": "api",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "No credential obtainable; MCP endpoint answers 401 without a token",
   "notes": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line"
  },
  {
   "t": "05:17",
   "cap": "first_action",
   "capability": "First real action",
   "task": "Create a project",
   "route": "cli",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "@framer/agent project new needs browser approval in a logged-in session",
   "notes": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line"
  },
  {
   "t": "05:20",
   "cap": "cap-01",
   "capability": "Design a page visually on the canvas",
   "task": "Try: Design a page visually on the canvas",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {
    "docs_url": "https://www.framer.com/design/"
   }
  },
  {
   "t": "05:20",
   "cap": "cap-02",
   "capability": "Generate or edit site design from a text prompt",
   "task": "Try: Generate or edit site design from a text prompt",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {
    "docs_url": "https://www.framer.com/"
   }
  },
  {
   "t": "05:20",
   "cap": "cap-03",
   "capability": "Build a new multi-page site from a description or reference",
   "task": "Try: Build a new multi-page site from a description or reference",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {
    "docs_url": "https://www.framer.com/agents/"
   }
  },
  {
   "t": "05:20",
   "cap": "cap-04",
   "capability": "Create and manage a CMS collection (fields, items)",
   "task": "Try: Create and manage a CMS collection (fields, items)",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {
    "docs_url": "https://www.framer.com/pricing"
   }
  },
  {
   "t": "05:20",
   "cap": "cap-05",
   "capability": "Import content into CMS from CSV or another CMS (WordPress, Contentful)",
   "task": "Try: Import content into CMS from CSV or another CMS (WordPress, Contentful)",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {
    "docs_url": "https://www.framer.com/cms/"
   }
  },
  {
   "t": "05:20",
   "cap": "cap-06",
   "capability": "Add custom code components or interactions via an agent",
   "task": "Try: Add custom code components or interactions via an agent",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {
    "docs_url": "https://www.framer.com/developers/components-introduction"
   }
  },
  {
   "t": "05:20",
   "cap": "cap-07",
   "capability": "Publish a site to a live URL",
   "task": "Try: Publish a site to a live URL",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {
    "docs_url": "https://www.framer.com/publish/"
   }
  },
  {
   "t": "05:20",
   "cap": "cap-08",
   "capability": "Connect an external coding agent (Claude Code, Cursor, Codex) to read/write a Framer project",
   "task": "Try: Connect an external coding agent (Claude Code, Cursor, Codex) to read/write a Framer project",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {
    "docs_url": "https://www.framer.com/agents/external/"
   }
  },
  {
   "t": "05:20",
   "cap": "cap-09",
   "capability": "Make layouts responsive across breakpoints (tablet/mobile)",
   "task": "Try: Make layouts responsive across breakpoints (tablet/mobile)",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {
    "docs_url": "https://www.framer.com/agents/"
   }
  },
  {
   "t": "05:20",
   "cap": "cap-10",
   "capability": "Connect a custom domain to the site",
   "task": "Try: Connect a custom domain to the site",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line; also needs a paid plan per pricing.md (paid)",
   "notes": "Not reachable without an account",
   "quality": {}
  },
  {
   "t": "05:20",
   "cap": "cap-11",
   "capability": "Set per-page/per-item SEO metadata (title, description, social preview) with CMS variables",
   "task": "Try: Set per-page/per-item SEO metadata (title, description, social preview) with CMS variables",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {}
  },
  {
   "t": "05:20",
   "cap": "cap-12",
   "capability": "Set up URL redirects",
   "task": "Try: Set up URL redirects",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {}
  },
  {
   "t": "05:20",
   "cap": "cap-13",
   "capability": "Upload well-known static files (robots.txt, llms.txt, security.txt)",
   "task": "Try: Upload well-known static files (robots.txt, llms.txt, security.txt)",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {}
  },
  {
   "t": "05:20",
   "cap": "cap-15",
   "capability": "Create and merge branches for parallel editing",
   "task": "Try: Create and merge branches for parallel editing",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {}
  },
  {
   "t": "05:20",
   "cap": "cap-16",
   "capability": "Leave comments pinned to canvas elements",
   "task": "Try: Leave comments pinned to canvas elements",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {}
  },
  {
   "t": "05:20",
   "cap": "cap-17",
   "capability": "Assign member roles and permissions (editor, content editor, viewer)",
   "task": "Try: Assign member roles and permissions (editor, content editor, viewer)",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {}
  },
  {
   "t": "05:20",
   "cap": "cap-18",
   "capability": "Edit CMS content directly on the live page (on-page editing) from any device",
   "task": "Try: Edit CMS content directly on the live page (on-page editing) from any device",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {}
  },
  {
   "t": "05:20",
   "cap": "cap-19",
   "capability": "View site analytics (pageviews, visitors, traffic by page/country/device/source/UTM)",
   "task": "Try: View site analytics (pageviews, visitors, traffic by page/country/device/source/UTM)",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {}
  },
  {
   "t": "05:20",
   "cap": "cap-20",
   "capability": "Run A/B tests on page variants",
   "task": "Try: Run A/B tests on page variants",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line; also needs a paid plan per pricing.md (paid)",
   "notes": "Not reachable without an account",
   "quality": {}
  },
  {
   "t": "05:20",
   "cap": "cap-21",
   "capability": "Build visual conversion funnels",
   "task": "Try: Build visual conversion funnels",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line; also needs a paid plan per pricing.md (paid)",
   "notes": "Not reachable without an account",
   "quality": {}
  },
  {
   "t": "05:20",
   "cap": "cap-22",
   "capability": "Set up dynamic triggers (show overlay/switch variant on visitor condition)",
   "task": "Try: Set up dynamic triggers (show overlay/switch variant on visitor condition)",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line; also needs a paid plan per pricing.md (paid)",
   "notes": "Not reachable without an account",
   "quality": {}
  },
  {
   "t": "05:20",
   "cap": "cap-23",
   "capability": "Add a native form that captures submissions (leads, signups)",
   "task": "Try: Add a native form that captures submissions (leads, signups)",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {}
  },
  {
   "t": "05:20",
   "cap": "cap-24",
   "capability": "Translate site into multiple locales with AI",
   "task": "Try: Translate site into multiple locales with AI",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line; also needs a paid plan per pricing.md (paid)",
   "notes": "Not reachable without an account",
   "quality": {}
  },
  {
   "t": "05:20",
   "cap": "cap-25",
   "capability": "Preview and test changes on a staging URL before publishing",
   "task": "Try: Preview and test changes on a staging URL before publishing",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {}
  },
  {
   "t": "05:20",
   "cap": "cap-26",
   "capability": "Password-protect a published site/page",
   "task": "Try: Password-protect a published site/page",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line; also needs a paid plan per pricing.md (paid)",
   "notes": "Not reachable without an account",
   "quality": {}
  },
  {
   "t": "05:20",
   "cap": "cap-27",
   "capability": "Automate publish/deploy from external scripts via Server API",
   "task": "Try: Automate publish/deploy from external scripts via Server API",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {}
  },
  {
   "t": "05:20",
   "cap": "cap-28",
   "capability": "Build a custom plugin that interacts with the Framer editor and CMS",
   "task": "Try: Build a custom plugin that interacts with the Framer editor and CMS",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {}
  },
  {
   "t": "05:20",
   "cap": "cap-29",
   "capability": "Build a Fetch API endpoint usable without code on the site",
   "task": "Try: Build a Fetch API endpoint usable without code on the site",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "No account: sign-up blocked by Castle risk policy (POST api.framer.com/auth/v4/signin -> 403 'Access denied by policy'), see signup line",
   "notes": "Not reachable without an account",
   "quality": {}
  },
  {
   "t": "05:12",
   "cap": "cap-14",
   "capability": "Scan site for AI/answer-engine visibility (AEO scanner)",
   "task": "Scan https://agentdrives.com (our own site) in the public AEO scanner",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Form at www.framer.com/aeo (URL, first/last name, business email; hidden honeypot fields left empty) -> https://www.framer.com/aeo/results?id=agentdrives-com-mv41skfq shows 'Overall AEO Score 69/100', Findable 20/25, Quotable/Understandable Good, Trustworthy Poor, per-check findings",
   "notes": "No account needed; no visible challenge. Lead form sends name and email to Framer.",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "n/a"
   }
  },
  {
   "t": "05:25",
   "cap": "cap-30",
   "capability": "Browse and use community templates, components, and vectors",
   "task": "Check against docs",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Marketplace templates/components/vectors listed in llms.txt (/marketplace/templates/?md etc.); adding one to a project needs an account",
   "notes": "Peripheral: checked against the docs; trying it needs an account (sign-up blocked)"
  },
  {
   "t": "05:25",
   "cap": "cap-31",
   "capability": "Manage a team workspace and invite additional editors/viewers",
   "task": "Check against docs",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "pricing.md: 'Workspaces without a subscription also support collaboration with up to three editors'; invite is in the editor UI only",
   "notes": "Peripheral: checked against the docs; trying it needs an account (sign-up blocked)"
  },
  {
   "t": "05:25",
   "cap": "cap-32",
   "capability": "View and buy AI credits / upgrade add-ons for agent and localization usage",
   "task": "Check against docs",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "pricing.md: free plan gets '500 AI credits to try'; 'add credits anytime' on paid plans; paid by card or PayPal (pricing FAQ); UI only",
   "notes": "Peripheral: checked against the docs; trying it needs an account (sign-up blocked)"
  },
  {
   "t": "05:25",
   "cap": "cap-33",
   "capability": "Configure SSO/SCIM for enterprise workspace access",
   "task": "Check against docs",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "pricing.md: SSO and SCIM on the Enterprise plan ('Request Trial' via /enterprise/)",
   "notes": "Peripheral: checked against the docs; trying it needs an account (sign-up blocked)"
  },
  {
   "t": "05:25",
   "cap": "cap-34",
   "capability": "Install static headers/firewall rules via Advanced Hosting add-on",
   "task": "Check against docs",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "pricing.md: Advanced Hosting add-on: up to 6 rewrites, 6 firewall rules, custom Permissions-Policy/Referrer-Policy/X-Frame-Options headers, 500 static files",
   "notes": "Peripheral: checked against the docs; trying it needs an account (sign-up blocked)"
  },
  {
   "t": "05:25",
   "cap": "cap-35",
   "capability": "Integrate Google Analytics/Tag Manager via measurement ID or script",
   "task": "Check against docs",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "Listed in capability map from /seo/ and help/integrations; not checked further: needs an account to try",
   "notes": "Peripheral: checked against the docs; trying it needs an account (sign-up blocked)"
  },
  {
   "t": "05:28",
   "cap": "pay",
   "capability": "Pay step",
   "task": "Find how to buy",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "pricing.md: Free plan (Start for Free -> /r/signup/), Basic $10/mo, Pro $30/mo; 'You can pay for your Framer subscription with a credit card or, in some regions, via PayPal'; no 402/x402/MPP/UCP/registry listing (pay_probe.json); checkout is inside the logged-in app, not reachable",
   "notes": "P1-level: card/PayPal checkout in the app UI; no billing API documented"
  },
  {
   "t": "05:29",
   "cap": "cancel",
   "capability": "Cancel plan",
   "task": "Docs check",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "help/articles/cancel-your-framer-plan: Workspace settings > Plans > three-dot menu > Cancel Plan > feedback and confirm",
   "notes": "not tested: no plan or trial was started"
  },
  {
   "t": "05:30",
   "cap": "delete",
   "capability": "Delete account",
   "task": "Delete the account",
   "route": "none",
   "documented": true,
   "result": "blocked",
   "verified": false,
   "evidence": "help/articles/deleting-your-framer-account: Dashboard > Account settings > Profile > Delete Account (web UI only)",
   "notes": "No account was created (sign-up refused), nothing to delete"
  },
  {
   "t": "06:40",
   "cap": "cap-01",
   "capability": "Design a page visually on the canvas",
   "task": "Open the editor to try: Design a page visually on the canvas",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "https://framer.com/projects/ redirects to https://framer.com/login/?origin=framer-web&redirect=…; the only ways in are email (refused 403 'Access denied by policy' by the Castle risk check) or Continue with Google (no Google account)",
   "notes": "Canvas/agent features need a logged-in account; sign-up blocked",
   "quality": {
    "docs_url": "https://www.framer.com/design/",
    "verify_route": "no"
   }
  },
  {
   "t": "06:40",
   "cap": "cap-02",
   "capability": "Generate or edit site design from a text prompt",
   "task": "Open the editor to try: Generate or edit site design from a text prompt",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "https://framer.com/projects/ redirects to https://framer.com/login/?origin=framer-web&redirect=…; the only ways in are email (refused 403 'Access denied by policy' by the Castle risk check) or Continue with Google (no Google account)",
   "notes": "Canvas/agent features need a logged-in account; sign-up blocked",
   "quality": {
    "docs_url": "https://www.framer.com/",
    "verify_route": "no"
   }
  },
  {
   "t": "06:40",
   "cap": "cap-03",
   "capability": "Build a new multi-page site from a description or reference",
   "task": "Open the editor to try: Build a new multi-page site from a description or reference",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "https://framer.com/projects/ redirects to https://framer.com/login/?origin=framer-web&redirect=…; the only ways in are email (refused 403 'Access denied by policy' by the Castle risk check) or Continue with Google (no Google account)",
   "notes": "Canvas/agent features need a logged-in account; sign-up blocked",
   "quality": {
    "docs_url": "https://www.framer.com/agents/",
    "verify_route": "no"
   }
  },
  {
   "t": "06:40",
   "cap": "cap-05",
   "capability": "Import content into CMS from CSV or another CMS (WordPress, Contentful)",
   "task": "Open the editor to try: Import content into CMS from CSV or another CMS (WordPress, Contentful)",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "https://framer.com/projects/ redirects to https://framer.com/login/?origin=framer-web&redirect=…; the only ways in are email (refused 403 'Access denied by policy' by the Castle risk check) or Continue with Google (no Google account)",
   "notes": "Canvas/agent features need a logged-in account; sign-up blocked",
   "quality": {
    "docs_url": "https://www.framer.com/cms/",
    "verify_route": "no"
   }
  },
  {
   "t": "06:40",
   "cap": "cap-06",
   "capability": "Add custom code components or interactions via an agent",
   "task": "Open the editor to try: Add custom code components or interactions via an agent",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "https://framer.com/projects/ redirects to https://framer.com/login/?origin=framer-web&redirect=…; the only ways in are email (refused 403 'Access denied by policy' by the Castle risk check) or Continue with Google (no Google account)",
   "notes": "Canvas/agent features need a logged-in account; sign-up blocked",
   "quality": {
    "docs_url": "https://www.framer.com/developers/components-introduction",
    "verify_route": "no"
   }
  },
  {
   "t": "06:40",
   "cap": "cap-09",
   "capability": "Make layouts responsive across breakpoints (tablet/mobile)",
   "task": "Open the editor to try: Make layouts responsive across breakpoints (tablet/mobile)",
   "route": "browser",
   "documented": true,
   "result": "blocked",
   "verified": true,
   "evidence": "https://framer.com/projects/ redirects to https://framer.com/login/?origin=framer-web&redirect=…; the only ways in are email (refused 403 'Access denied by policy' by the Castle risk check) or Continue with Google (no Google account)",
   "notes": "Canvas/agent features need a logged-in account; sign-up blocked",
   "quality": {
    "docs_url": "https://www.framer.com/agents/",
    "verify_route": "no"
   }
  }
 ],
 "stale": false,
 "icon": "/logos/framer.png",
 "monitored": false,
 "verdict": "A person has to get in first: L1 · Needs a person is where Framer sits. Its docs read well on their own, with llms.txt and markdown on every page, plus Server API, External Agents and plugin guides. Our agent stopped at the first step: the email signup form sends a Castle risk check with no visible challenge, and api.framer.com answers \"Access denied by policy, Verification failed,\" so no verification email went out. With no account, the Server API key, the CLI's project command and the MCP server's OAuth login stayed out of reach, and mcp.framer.com returned 401 with no token to send. Checkout and account deletion sit behind that same locked door, untested.",
 "page": "https://agentdrives.com/tools/framer?via=api"
}