{
 "slug": "craft",
 "name": "Craft",
 "url": "https://craft.do",
 "domain": "craft.do",
 "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": [
  "agent-can-leave"
 ],
 "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: 78% of the core"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "part",
   "text": "Reaches the checkout: stopped at the card form",
   "value": "ready",
   "route": "card_checkout"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, deletes its account",
   "left": "deleted"
  }
 ],
 "outcomes": [
  {
   "key": "find",
   "label": "Find",
   "state": "yes",
   "text": "Docs agents can read: llms.txt, an OpenAPI and an MCP server",
   "have": [
    "llms_txt",
    "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: 78% of the core",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "part",
   "text": "Reaches the checkout: stopped at the card form",
   "value": "ready",
   "route": "card_checkout",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, deletes its account",
   "left": "deleted",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "browser_signup",
   "label": "Sign-up in a browser",
   "routes": [],
   "minutes": 6.3,
   "core": "7/9"
  }
 ],
 "minutes": 6.3,
 "next": {
  "to": 4,
  "text": "Next: do 80% of the core work (now 78%)"
 },
 "stop": null,
 "core": "7/9",
 "scores": {
  "coverage": 53,
  "reliability": 82,
  "resilience": null,
  "setup": 90,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 90,
  "security": "private",
  "standards": [
   {
    "standard": "MCP",
    "state": "behind",
    "behind": 1,
    "value": "2025-11-25"
   },
   {
    "standard": "MCP discovery",
    "state": "behind",
    "behind": null,
    "value": "legacy"
   },
   {
    "standard": "MCP client registration",
    "state": "behind",
    "behind": null,
    "value": "dcr"
   },
   {
    "standard": "OpenAPI",
    "state": "behind",
    "behind": 1,
    "value": "3.1.1"
   }
  ]
 },
 "reliability_method": "first-try",
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": 78,
 "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": {
  "rung": "signup",
  "vendor": "reCAPTCHA (invisible)",
  "signed": true
 },
 "who_gets_in": {
  "server": {
   "state": "in"
  },
  "signed": {
   "state": "page",
   "kind": "home",
   "at": "2026-10-13"
  },
  "browser": {
   "state": "in",
   "measured": false
  },
  "our_key": "pending",
  "robots": null,
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "llms.txt on www.craft.do and support.craft.do; support pages served as text/markdown (Accept header and .md URL); OpenAPI 3.1.1 embedded in connect.craft.do/api-docs/space (no standalone openapi.json)"
  },
  "signup": {
   "status": "browser",
   "note": "email-code web form at docs.craft.do (invisible reCAPTCHA passed); no sign-up API"
  },
  "verify": {
   "status": "browser",
   "note": "6-digit code mail arrived in <1 min; signed in by opening the magic link in the browser (typing the code returned to the email screen)"
  },
  "credentials": {
   "status": "browser",
   "note": "API link created in the Connections tab (Connect All Documents, read+write, public secret URL). MCP: DCR register is headless but the OAuth authorize step needs a browser 'Approve' click; no device flow or CIMD",
   "via": ""
  },
  "first_call": {
   "status": "headless",
   "note": "GET /connection 200"
  },
  "first_action": {
   "status": "headless",
   "note": "POST /documents created a document, verified with GET /documents"
  },
  "pay": {
   "status": "browser",
   "grade": "P2",
   "rails": [
    "Stripe Checkout"
   ],
   "rail_ids": [
    "stripe-checkout"
   ],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "free tier",
   "note": "no 402/x402/MPP/UCP/auth.md; not listed in x402 Bazaar or mpp.dev. Upgrade opens hosted Stripe Checkout with a card form (not completed: no card). Team plans: 15-day trial without upfront payment per docs"
  },
  "cancel": {
   "status": "n/a",
   "note": "Nothing to cancel: our agent used the free plan.",
   "docs_note": "no plan started; docs: cancel in Settings and Billing via the Stripe billing portal (web UI); no billing API",
   "docs_grade": "",
   "nothing": "free_plan"
  },
  "delete": {
   "status": "browser",
   "note": "Settings > Account Settings > Delete Account, confirm by typing the email; afterwards published link 404, MCP token 401 'Access revoked', API link returns no content. No API route to delete the account",
   "left": "deleted",
   "account": true
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-06",
  "source": "drive",
  "options": [
   {
    "id": "stripe-checkout",
    "name": "Stripe Checkout",
    "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": false,
  "sdk": false,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": false,
  "sandbox": false
 },
 "surface_notes": {
  "api": "REST, 44 operations per space link (documents, blocks, folders, tasks, collections, whiteboards, search, comments, reminders)",
  "openapi": "3.1.1 embedded in the HTML docs page; no downloadable spec URL",
  "mcp": "official OAuth server, 3 command-string tools, the older 25 Nov 2025 spec"
 },
 "can_do": [
  "Create documents and write, update and read blocks (API and MCP)",
  "Create folders and move documents into them",
  "Create, schedule and complete tasks in the inbox or in documents",
  "Write to and read today's Daily Note",
  "Create a collection with a typed schema, add and read rows",
  "Create a whiteboard and add shapes and text",
  "Search the space (keywords; regex with lowercase patterns)",
  "Tag blocks with inline #tags",
  "Export a document as Markdown",
  "Delete documents to trash"
 ],
 "cannot_do": [
  {
   "what": "Get API or MCP credentials without a browser",
   "why": "API links are created in the Connections tab; MCP OAuth needs a browser consent click; no device flow"
  },
  {
   "what": "Publish or share a document headless",
   "why": "no API/MCP route; web UI only"
  },
  {
   "what": "Have the Assistant apply edits",
   "why": "no API route; in the browser it generated a summary but did not insert it"
  },
  {
   "what": "Start a document from a template",
   "why": "no instantiate-template operation"
  },
  {
   "what": "Delete the account headless",
   "why": "web UI only"
  }
 ],
 "blockers": [
  "API/MCP credential creation needs the web app (Connections tab or OAuth consent page)"
 ],
 "tips_for_owner": [
  "Let agents get credentials without a browser",
  "Return success when task updates succeed",
  "Make cross-document regex search case-insensitive",
  "Add API routes for publish and share",
  "Support MCP (the 28 Jul 2026 spec) and CIMD",
  "Publish a standalone openapi.json",
  "Add account deletion to the API"
 ],
 "tips_for_agents": [
  "Create one 'Connect All Documents' API link (or approve MCP) in the browser once; then everything is headless",
  "GET /blocks with Accept: text/markdown for readable content, JSON for block ids",
  "After a task update error, re-read the task before retrying: the change may have applied",
  "Use lowercase patterns in /documents/search?regexps=",
  "MCP tools take command strings; '<entity> <action> --help' explains them and ';' batches commands",
  "Rate limit: 50 req/10 s per IP, 100 req/60 s per space; headers x-ratelimit-*"
 ],
 "selfhost": null,
 "summary": "Craft has a rich documented space API (44 operations) and an official OAuth MCP server. The agent signed up, made an API link and approved MCP itself in its browser, then drove 7 of 9 core capabilities: documents, folders, tasks, daily notes, collections and whiteboards headless, publishing in the browser. Sign-up, credentials, publish, share, the Assistant and account deletion are web-only; MCP is on the older 25 Nov 2025 spec (DCR only), a task update answers a false 404, and cross-document regex ignores capital letters.",
 "wall": "API/MCP credentials need the web app",
 "plan_scope": "free plan",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Craft is a notes and documents app with a real API and an official MCP server for AI agents. The agent signed up, created an access link and approved the AI connection itself in a browser, then created documents, folders, tasks, daily notes, databases and whiteboards on its own. Publishing a page and deleting the account it did in the browser; sharing with another person and having the AI assistant apply edits did not work.",
  "can_do": [
   "Create and edit notes, checklists and daily journal entries on its own",
   "Organize notes into folders",
   "Build simple databases with typed fields inside a note",
   "Create a freeform whiteboard with shapes and text",
   "Search its notes and read, export and tag them",
   "Sign up, get access and delete its account itself in a browser"
  ],
  "cannot_do": [
   {
    "what": "Get access credentials without a browser",
    "why": "the access link and the AI connection approval are only in the web app"
   },
   {
    "what": "Publish a page or invite a collaborator through code",
    "why": "those actions only exist in the web interface, not the API"
   },
   {
    "what": "Have the built-in AI assistant actually apply its suggested edits",
    "why": "it only shows a preview; inserting it takes a manual copy-paste"
   },
   {
    "what": "Delete its own account through code",
    "why": "account deletion is a web-only form, not an API call"
   }
  ]
 },
 "plan_gated": [],
 "reply": null,
 "capabilities": [
  {
   "id": "cap-01",
   "group": "Writing",
   "capability": "Write a block-based document",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api-docs/documents",
    "mcp": "create_document",
    "cli": null,
    "ui": "Document editor"
   },
   "check": "GET the document endpoint and confirm the new block/page appears in its content tree",
   "source": "https://www.craft.do/write; https://support.craft.do/en/write-and-edit"
  },
  {
   "id": "cap-02",
   "group": "Organization",
   "capability": "Organize documents into folders and Spaces",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Sidebar Spaces/Folders"
   },
   "check": "Open the Space's folder tree and confirm the document now lists under the target folder",
   "source": "https://www.craft.do/organize; https://support.craft.do/hc/en-us/articles/12470232238236-Creating-Customizing-and-Deleting-Spaces"
  },
  {
   "id": "cap-03",
   "group": "Tasks",
   "capability": "Create, schedule, and complete tasks inside documents",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET/POST /api-docs/daily-notes (tasks)",
    "mcp": "list_tasks / update_task",
    "cli": null,
    "ui": "Tasks: Inbox/Today/Upcoming/All"
   },
   "check": "GET the task via API/MCP and confirm its checkbox state is 'done' and it no longer shows in Today/Upcoming",
   "source": "https://support.craft.do/en/plan-and-do/tasks; https://www.craft.do/plan"
  },
  {
   "id": "cap-04",
   "group": "Planning",
   "capability": "Use Daily Notes synced with Calendar",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "GET/POST /api-docs/daily-notes",
    "mcp": "get_daily_note",
    "cli": null,
    "ui": "Calendar sidebar section"
   },
   "check": "Read today's Daily Note via API and confirm a written entry appears under that date",
   "source": "https://www.craft.do/plan; https://support.craft.do/hc/en-us/articles/17051048843548-Craft-Calendar-Update"
  },
  {
   "id": "cap-05",
   "group": "Databases",
   "capability": "Build a structured database with a Collection (table/gallery/kanban)",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": "POST /api-docs/space (collection schema + rows)",
    "mcp": "create_collection / add_row",
    "cli": null,
    "ui": "Slash menu /collection, /gallery, /kanban"
   },
   "check": "GET the collection and confirm the new field/row is present with correct field type",
   "source": "https://support.craft.do/en/organize-and-find/collections; https://support.craft.do/en/integrate/api"
  },
  {
   "id": "cap-06",
   "group": "Writing",
   "capability": "Create a Whiteboard for freeform visual work",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Whiteboard block/page"
   },
   "check": "Open the Whiteboard and confirm the dropped blocks/shapes persist at their placed position",
   "source": "https://www.craft.do/customize; https://www.craft.do/write"
  },
  {
   "id": "cap-07",
   "group": "AI",
   "capability": "Use Craft Assistant to generate, restructure, or edit document content",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Assistant panel (Explore/Execute modes)"
   },
   "check": "Run an Execute-mode request and re-open the document to confirm the proposed blocks were applied",
   "source": "https://support.craft.do/en/ai-assistant; https://support.craft.do/en/ai-assistant/editing"
  },
  {
   "id": "cap-08",
   "group": "Publishing",
   "capability": "Publish a document as a public web page",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Share > Publish > Create Link"
   },
   "check": "GET the generated craft.me URL unauthenticated and confirm it renders the document content",
   "source": "https://support.craft.do/en/share-and-publish/publish"
  },
  {
   "id": "cap-09",
   "group": "Collaboration",
   "capability": "Share a document with collaborators for real-time co-editing",
   "weight": "core",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Share > Invite (viewer/editor)"
   },
   "check": "Have the invited collaborator open the doc and confirm their edit appears live in the owner's view",
   "source": "https://support.craft.do/en/share-and-publish; https://support.craft.do/en/share-and-publish/share"
  },
  {
   "id": "cap-10",
   "group": "Search",
   "capability": "Search across the workspace (exact phrase, exclude, regex)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "GET /api-docs/space (search)",
    "mcp": "search_documents",
    "cli": null,
    "ui": "Global Search (Cmd+F)"
   },
   "check": "Run a regex: query and confirm only matching documents are returned",
   "source": "https://support.craft.do/en/organize-and-find/search"
  },
  {
   "id": "cap-11",
   "group": "Organization",
   "capability": "Tag content for cross-folder filtering",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Tag picker on page/block"
   },
   "check": "Filter by the tag and confirm the tagged block/page appears in results",
   "source": "https://support.craft.do/hc/en-us/articles/21155996375964-Tags-in-Craft-lightweight-powerful-and-personal"
  },
  {
   "id": "cap-12",
   "group": "Customization",
   "capability": "Apply a document style/theme",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Style picker (100+ styles)"
   },
   "check": "Apply a style and confirm the document's fonts/colors change and persist on reopen",
   "source": "https://www.craft.do/customize; https://support.craft.do/hc/en-us/articles/10293992410780-Document-Styling"
  },
  {
   "id": "cap-13",
   "group": "Writing",
   "capability": "Start a document from a template",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "New document > Templates"
   },
   "check": "Create from a template and confirm its predefined blocks appear in the new document",
   "source": "https://www.craft.do/write; https://www.craft.do/customize"
  },
  {
   "id": "cap-14",
   "group": "Developer",
   "capability": "Connect external tools via the Craft REST API",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": "Connections tab generated endpoint (see connect.craft.do/api-docs)",
    "mcp": null,
    "cli": null,
    "ui": "Connections tab > API Connection"
   },
   "check": "Call the generated API endpoint and confirm it returns only the selected documents' content",
   "source": "https://support.craft.do/en/integrate/api; https://connect.craft.do/api-docs"
  },
  {
   "id": "cap-16",
   "group": "Capture",
   "capability": "Clip web pages into Craft with the Web Clipper",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Browser extension"
   },
   "check": "Clip a page and confirm a new document with the page content appears in the target space",
   "source": "https://support.craft.do/hc/en-us/articles/21463603834780-Craft-Web-Clipper"
  },
  {
   "id": "cap-17",
   "group": "Capture",
   "capability": "Forward emails directly into a Craft space",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Email-to-Craft unique address"
   },
   "check": "Send an email to the space's address and confirm a new document with its content appears",
   "source": "https://support.craft.do/hc/en-us/articles/20816138381084-Email-to-Craft-Sending-Emails-Directly-Into-Your-Space"
  },
  {
   "id": "cap-18",
   "group": "Import/Export",
   "capability": "Import notes from other apps (Notion, Obsidian, Evernote, Markdown, TextBundle, CSV)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Import menu"
   },
   "check": "Import a file and confirm its content appears as a new Craft document with matching structure",
   "source": "https://support.craft.do/en/import-and-export; https://support.craft.do/en/introduction/move-to-craft"
  },
  {
   "id": "cap-19",
   "group": "Import/Export",
   "capability": "Export documents (Markdown, PDF, TextBundle, CSV)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Document menu > Export"
   },
   "check": "Export a document and confirm the downloaded file opens with the expected content/format",
   "source": "https://support.craft.do/en/import-and-export"
  },
  {
   "id": "cap-20",
   "group": "Publishing",
   "capability": "Present a document as a slideshow",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Published doc > Present icon"
   },
   "check": "Click Present and confirm navigation advances through separator-defined slides",
   "source": "https://support.craft.do/en/share-and-publish/publish"
  },
  {
   "id": "cap-21",
   "group": "Publishing",
   "capability": "Track analytics on a published page",
   "weight": "secondary",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Publish settings > Analytics"
   },
   "check": "Visit the published link, then confirm the Analytics panel's view count incremented",
   "source": "https://support.craft.do/en/share-and-publish/publish/analytics"
  },
  {
   "id": "cap-22",
   "group": "Publishing",
   "capability": "Restrict access to a published page (password, email domain, expiration)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Publish settings > Security"
   },
   "check": "Load the link unauthenticated and confirm it prompts for the password instead of showing content",
   "source": "https://support.craft.do/en/share-and-publish/publish"
  },
  {
   "id": "cap-23",
   "group": "Integrations",
   "capability": "Sync tasks with Apple Reminders",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Settings > Reminders integration (Mac/iOS)"
   },
   "check": "Complete the task in Apple Reminders and confirm it shows checked off in Craft",
   "source": "https://support.craft.do/en/integrate/reminders"
  },
  {
   "id": "cap-24",
   "group": "Integrations",
   "capability": "View Apple Calendar events alongside Craft tasks/notes",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Calendar settings"
   },
   "check": "Confirm an Apple Calendar event appears on Craft's Calendar view next to Craft tasks for that day",
   "source": "https://support.craft.do/en/integrate/calendar"
  },
  {
   "id": "cap-25",
   "group": "Integrations",
   "capability": "Import highlights from Readwise (Kindle, Instapaper, etc.)",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Connections > Readwise"
   },
   "check": "Sync Readwise and confirm new highlight documents/entries appear in the connected Craft folder",
   "source": "https://support.craft.do/en/integrate/readwise"
  },
  {
   "id": "cap-26",
   "group": "Document history",
   "capability": "Restore a prior document version",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Document > Version History"
   },
   "check": "Restore an earlier version and confirm the document content reverts to that snapshot",
   "source": "https://www.craft.do/pricing"
  },
  {
   "id": "cap-27",
   "group": "Navigation",
   "capability": "Jump to any document/daily note with Quick Open",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Quick Open (Cmd/Ctrl+O)"
   },
   "check": "Trigger Quick Open, type a title, hit Enter, and confirm that exact document opens",
   "source": "https://support.craft.do/en/organize-and-find/search"
  },
  {
   "id": "cap-28",
   "group": "Automation",
   "capability": "Automate Craft with Apple Shortcuts/Siri",
   "weight": "secondary",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "iOS Shortcuts app actions"
   },
   "check": "Run the Shortcut and confirm the resulting document/task was created in the target Craft space",
   "source": "https://support.craft.do/en/integrate/apple-shortcuts; https://www.craft.do/imagine/guide/api/shortcuts"
  },
  {
   "id": "cap-29",
   "group": "Branding",
   "capability": "Connect a custom domain for published pages",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Publish settings > Custom Domain"
   },
   "check": "Visit the custom domain and confirm it resolves to the published Craft page",
   "source": "https://support.craft.do/en/share-and-publish/publish/domains"
  },
  {
   "id": "cap-30",
   "group": "Branding",
   "capability": "Add a custom logo/brand to published pages",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Publish settings > Branding"
   },
   "check": "Load the published page and confirm the uploaded logo renders in place of the default Craft mark",
   "source": "https://support.craft.do/en/share-and-publish/publish/branding"
  },
  {
   "id": "cap-31",
   "group": "Account admin",
   "capability": "Manage team members across a shared Space",
   "weight": "peripheral",
   "plan": "paid",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Space settings > Members"
   },
   "check": "Add a member and confirm they appear in the Members list with the assigned role",
   "source": "https://support.craft.do/en/share-and-publish/share/teams; https://www.craft.do/pricing"
  },
  {
   "id": "cap-32",
   "group": "AI",
   "capability": "Choose the Assistant's AI model (Core/Fast/Max/on-device Local)",
   "weight": "peripheral",
   "plan": "free",
   "surfaces": {
    "api": null,
    "mcp": null,
    "cli": null,
    "ui": "Assistant panel model selector"
   },
   "check": "Switch model and confirm the Assistant panel's active-model indicator reflects the new choice",
   "source": "https://support.craft.do/en/ai-assistant; https://www.craft.do/pricing"
  }
 ],
 "attempts": [
  {
   "t": "02:17",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "robots.txt",
   "task": "Fetch robots.txt",
   "result": "done",
   "evidence": "https://www.craft.do/robots.txt 200 text/plain; User-Agent * Allow / with some Disallows (/.well-known/*, /payment, /api/draft/*); no Content-Usage or Content-signal lines",
   "notes": "our agent falls under the * group"
  },
  {
   "t": "02:17",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "llms.txt",
   "task": "Fetch llms.txt",
   "result": "done",
   "evidence": "www.craft.do/llms.txt 200 (H1 '# Craft'), llms-full.txt 200; support.craft.do/llms.txt 200 (34 KB help-center index with .md links)"
  },
  {
   "t": "02:17",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "markdown docs",
   "task": "Accept: text/markdown on docs pages and .md URL",
   "result": "done",
   "evidence": "support.craft.do/en/integrate/mcp with Accept: text/markdown -> 200 content-type text/markdown, vary lacks accept (has accept-encoding); www.craft.do/imagine/guide/api -> text/markdown with Vary incl. accept; support .md URL -> 200 text/markdown"
  },
  {
   "t": "02:17",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "OpenAPI",
   "task": "Find API reference",
   "result": "done",
   "evidence": "connect.craft.do/api-docs/space embeds OpenAPI 3.1.1 'Craft: Full Space API' 1.0.0, 44 operations, server https://connect.craft.do/links/{secretLinkId}/api/v1, bearerAuth optional; no standalone openapi.json (connect.craft.do/api-docs/openapi.json returns the HTML app)",
   "quality": {
    "docs_match": "match"
   }
  },
  {
   "t": "02:17",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "MCP server/discover",
   "task": "POST server/discover 2026-07-28 to https://mcp.craft.do/my/mcp",
   "result": "done",
   "evidence": "401 WWW-Authenticate: Bearer error=invalid_token, resource_metadata=https://mcp.craft.do/.well-known/oauth-protected-resource/my/mcp; needs auth first"
  },
  {
   "t": "02:17",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "MCP auth metadata",
   "task": "PRM and AS metadata",
   "result": "done",
   "evidence": "PRM {resource: https://mcp.craft.do/my/mcp, authorization_servers:[https://mcp.craft.do/my/auth]}; AS metadata has registration_endpoint (DCR), S256 PKCE, grants authorization_code+refresh_token, no client_id_metadata_document_supported, no device_authorization_endpoint, no agent_auth"
  },
  {
   "t": "02:17",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "cards",
   "task": "AI catalog, server card, A2A card",
   "result": "failed",
   "evidence": "www.craft.do/.well-known/ai-catalog.json, agent-card.json, agent.json, mcp/server-card.json all 404 HTML; mcp.craft.do/my/mcp/server-card 401 JSON (auth required)"
  },
  {
   "t": "02:17",
   "cap": "discovery",
   "route": "api",
   "documented": true,
   "verified": true,
   "capability": "pay discovery",
   "task": "auth.md, SKILL.md, /.well-known/ucp, oauth well-knowns on www",
   "result": "failed",
   "evidence": "all 404 HTML soft pages on www.craft.do; api.craft.do/ 403 {message: Forbidden}"
  },
  {
   "t": "04:01",
   "cap": "signup",
   "capability": "Sign up",
   "task": "Create account at docs.craft.do with the agent's inbox",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "docs.craft.do login form (email -> 6-digit code), name 'AgentDrives Test', 'By myself'; landed in 'My Space' All Docs. Page notes 'protected by reCAPTCHA' (invisible), no visible challenge",
   "notes": "no documented sign-up API; email-code web form only"
  },
  {
   "t": "04:01",
   "cap": "verify",
   "capability": "Verify email",
   "task": "Read sign-in code from inbox",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "mail 'Your Sign In Code: 405659' from login-noreply@craft.do arrived <1 min; typing code into the field returned to the email screen, opening the magic link https://docs.craft.do/link/web/login?code=•••• in the browser signed in",
   "quality": {
    "error_legibility": "silent"
   }
  },
  {
   "t": "05:17",
   "cap": "credentials",
   "capability": "Get API credentials",
   "task": "Create an API connection (All Documents, read+write)",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Connections tab > Add Your First API Connection > Connect All Documents: generated URL https://connect.craft.do/links/••••/api/v1, Permission Read and Write, Access Mode Public (secret URL is the credential; no API key by default)",
   "notes": "no headless/API way to create a connection; MCP alternative is OAuth with DCR + browser consent"
  },
  {
   "t": "06:18",
   "cap": "first_call",
   "capability": "First API call",
   "task": "GET /connection",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET https://connect.craft.do/links/••••/api/v1/connection -> 200 {space:{name:'My Space',timezone:'Europe/Amsterdam'}}; headers x-ratelimit-limit 100, x-ratelimit-remaining 99, x-ratelimit-reset 60"
  },
  {
   "t": "06:18",
   "cap": "first_action",
   "capability": "First real action",
   "task": "POST /documents creates 'AgentDrives Test Doc'",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "200 items[0].id c02eedf4-...; GET /documents?folderId lists it"
  },
  {
   "t": "06:18",
   "cap": "cap-01",
   "capability": "Write a block-based document",
   "task": "Create doc, insert h2+text+task blocks, update a block, read back",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /documents 200; POST /blocks (position end, pageId) returned 3 block ids; PUT /blocks updated text; GET /blocks?id=<doc> Accept text/markdown shows '## Plan / Written and then updated by the AgentDrives agent. / - [ ] Draft outline'",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "06:18",
   "cap": "cap-02",
   "capability": "Organize documents into folders and Spaces",
   "task": "Create folder, move doc into it",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /folders 200 id 3ecb2e2e...; PUT /documents/move 200; GET /documents?folderId=3ecb... lists the doc; GET /folders shows documentCount 1",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   },
   "notes": "Spaces themselves (create new space) not in the API; each connection is one space"
  },
  {
   "t": "06:53",
   "cap": "cap-03",
   "capability": "Create, schedule, and complete tasks inside documents",
   "task": "Add inbox task scheduled today, mark done",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "POST /tasks 200 (scheduleDate 2026-10-06, in scope=active); PUT /tasks state done -> HTTP 404 {error:'Target page not found',code:NOT_FOUND_ERROR}, yet GET /tasks?scope=inbox shows state done, completedAt set, and scope=active is empty. Docs say done inbox tasks move to logbook; scope=logbook stayed empty",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "silent",
    "docs_match": "drift",
    "recoverable": "yes"
   },
   "notes": "the update applied but the API answered 404; a retry of the same PUT returned 200"
  },
  {
   "t": "06:53",
   "cap": "cap-03",
   "capability": "Create, schedule, and complete tasks inside documents",
   "task": "Add task in a document scheduled tomorrow, mark done",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /tasks location document -> 200, listed in scope=upcoming; PUT /tasks state done -> 200 completedAt; GET scope=document shows '- [x] AgentDrives doc task'; scope=upcoming now empty",
   "quality": {
    "verify_route": "yes",
    "idempotent": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "07:00",
   "cap": "cap-04",
   "capability": "Use Daily Notes synced with Calendar",
   "task": "Write an entry into today's Daily Note and read it back",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /blocks position {end, date: today} 200; GET /blocks?date=today (text/markdown) returns page '2026.10.06' with '## AgentDrives log / Daily note entry written by the agent.'",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   },
   "notes": "calendar (Apple Calendar) sync side not reachable by API"
  },
  {
   "t": "07:18",
   "cap": "cap-05",
   "capability": "Build a structured database with a Collection",
   "task": "Create 'Reading list' collection (singleSelect + date) in the doc, add a row, read back",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /collections 200 collectionBlockId af88...; POST /collections/{id}/items 200; GET items returns the row with status 'To read', due_date 2026-10-20; GET schema returns JSON Schema. Invalid option -> 400 VALIDATION_ERROR naming valid options",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "clear",
    "docs_match": "match",
    "recoverable": "yes"
   },
   "notes": "errors are {errors:[{code,message}]} application/json, not RFC 9457 problem+json"
  },
  {
   "t": "07:26",
   "cap": "cap-06",
   "capability": "Create a Whiteboard for freeform visual work",
   "task": "Create a whiteboard in the doc, add a rectangle and a text element, read back",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /whiteboards 201 whiteboardBlockId d182...; POST /whiteboards/{id}/elements 201; GET elements returns ad-rect-1 at x100,y80 and ad-text-1 'AgentDrives' (Excalidraw format)",
   "quality": {
    "verify_route": "yes",
    "docs_match": "drift"
   },
   "notes": "docs list 200 as the success status, live returns 201"
  },
  {
   "t": "07:50",
   "cap": "cap-10",
   "capability": "Search across the workspace (exact phrase, exclude, regex)",
   "task": "Regex search across the space for 'Agent[Dd]rives (agent|log)'",
   "route": "api",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "GET /documents/search?regexps=Agent[Dd]rives (agent|log) -> 200 {items:[]}; 'Agent.rives' -> []; lowercase 'agentdrives (agent|log)' -> 2 correct hits (daily note + doc block). include=AgentDrives works. GET /blocks/search (in one doc) matches the mixed-case pattern",
   "quality": {
    "verify_route": "yes",
    "error_legibility": "silent",
    "docs_match": "drift",
    "recoverable": "yes"
   },
   "notes": "cross-document regex appears to run against a lowercased index: any uppercase letter in the pattern silently returns nothing; docs say RE2 syntax and do not mention it"
  },
  {
   "t": "07:50",
   "cap": "cap-10",
   "capability": "Search across the workspace (exact phrase, exclude, regex)",
   "task": "Regex search with lowercase pattern",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "regexps='agentdrives (agent|log)' -> exactly the 2 matching blocks; 'daily note entr(y|ies)' -> only the daily note",
   "quality": {
    "verify_route": "yes",
    "docs_match": "drift"
   }
  },
  {
   "t": "11:31",
   "cap": "cap-08",
   "capability": "Publish a document as a public web page",
   "task": "Publish the test doc and open the link logged out",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Share > Publish > Create Link produced https://badgers-flow-qo9.craft.me/••••. opened on craft.me (no session there, shows 'What's your name?' prompt) it renders 'Plan / Written and then updated by the AgentDrives agent. / Reading list' table",
   "notes": "no API or MCP route to publish; not in the 44 documented operations",
   "quality": {
    "verify_route": "yes"
   }
  },
  {
   "t": "17:21",
   "cap": "discovery",
   "capability": "MCP version",
   "task": "server/discover with token, then initialize",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "server/discover (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 -> 200 SSE protocolVersion 2025-11-25, serverInfo craft-workflow-links 1.0.0, no Mcp-Session-Id",
   "notes": "legacy server: not -32022, no server/discover"
  },
  {
   "t": "17:21",
   "cap": "credentials",
   "capability": "MCP OAuth credential",
   "task": "DCR register + authorization code with PKCE for https://mcp.craft.do/my/mcp",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /my/auth/register 201 client_id (headless); /my/auth/authorize redirected to docs.craft.do/authorize-external 'Authorize MCP client … My Space / Approve' (browser click); token endpoint returned bearer, expires_in 3600, refresh_token",
   "notes": "consent needs a signed-in browser; no device flow, no CIMD"
  },
  {
   "t": "17:21",
   "cap": "cap-01",
   "capability": "Write a block-based document",
   "task": "Append a block via MCP craft_write and read back via craft_read",
   "route": "mcp",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "tools/list: craft_read, craft_write, blocks_revert (command-string tools); craft_write 'blocks add --id <doc>' -> 'Added 1 block'; craft_read 'blocks get <doc> --format markdown' contains 'Line added through the Craft MCP server.'",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "17:57",
   "cap": "cap-09",
   "capability": "Share a document with collaborators for real-time co-editing",
   "task": "Invite our second inbox the agent's inbox as Editor",
   "route": "browser",
   "documented": true,
   "result": "partial",
   "verified": false,
   "evidence": "Share > Invite to Collaborate (panel needs coordinate clicks, its fields are not reachable by role/text selectors): the agent's inbox listed with role Editor, Share button shows collaborators icon. No invitation mail reached an inbox within ~5 min (cause may be on either side). Live co-editing by the invitee not verified",
   "notes": "no API/MCP route for sharing"
  },
  {
   "t": "19:39",
   "cap": "cap-07",
   "capability": "Use Craft Assistant to generate, restructure, or edit document content",
   "task": "Ask the Assistant (browser) to add a Summary paragraph at the end of the doc",
   "route": "browser",
   "documented": true,
   "result": "partial",
   "verified": true,
   "evidence": "Assistant panel (Fast, Auto) read the doc and generated a 'Summary' card, then said 'You can copy this summary and add it to the end of your document'; GET /blocks?id=<doc> afterwards has no Summary block: generated, not applied",
   "notes": "free plan; no API/MCP route to the Assistant. One try only"
  },
  {
   "t": "20:19",
   "cap": "cap-11",
   "capability": "Tag content for cross-folder filtering",
   "task": "Tag a block with #agentdrivestag via the API and filter by it",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "POST /blocks markdown 'Tagged line #agentdrivestag' 200; GET /documents/search?include=#agentdrivestag returns that block; web app All Tags lists 'agentdrivestag 1 / AgentDrives Test Doc'",
   "quality": {
    "verify_route": "yes",
    "docs_match": "undocumented"
   },
   "notes": "the API docs do not describe #tags in markdown; worked as inline Craft tag syntax"
  },
  {
   "t": "20:19",
   "cap": "cap-19",
   "capability": "Export documents (Markdown, PDF, TextBundle, CSV)",
   "task": "Export the doc as Markdown through the API",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "GET /blocks?id=<doc> with Accept: text/markdown returns the whole document as markdown (headings, tasks, collection as <collection> tags, whiteboard as image link); also the bundle.md download",
   "notes": "Markdown only; PDF/TextBundle/CSV export is UI only (Share > Export), not tried",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "20:30",
   "cap": "cap-13",
   "capability": "Start a document from a template",
   "task": "Create a new document from a template via API",
   "route": "api",
   "documented": true,
   "result": "failed",
   "verified": false,
   "evidence": "API can create a template (POST /documents destination templates -> 200, listed under location=templates) but no documented operation instantiates a new document from a template; POST /documents takes only title + destination",
   "quality": {
    "docs_match": "match"
   },
   "notes": "an agent could copy the template's blocks with GET /blocks + POST /blocks; not the product feature"
  },
  {
   "t": "20:30",
   "cap": "cap-14",
   "capability": "Connect external tools via the Craft REST API",
   "task": "Create an API connection and call its endpoint",
   "route": "api",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "All-Documents connection URL https://connect.craft.do/links/••••/api/v1 answered 30+ documented calls (documents, blocks, tasks, collections, whiteboards, search). A selected-documents connection was not created, so scoping to selected docs was not checked",
   "quality": {
    "verify_route": "yes",
    "docs_match": "match"
   }
  },
  {
   "t": "22:12",
   "cap": "pay",
   "capability": "Pay step",
   "task": "Probe agent payment rails and the upgrade path, without paying",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "x402.craft.do and mpp.craft.do do not resolve; agents.craft.do is 'Craft Agents' product page (HTML); no 402 on API paths (bad link -> 404); /.well-known/ucp, auth.md, SKILL.md 404; craft.do not found in x402 Bazaar or mpp.dev/api/services; no x-payment-info in the OpenAPI; no billing tools in MCP tools/list. 'Get Craft Plus' > 'Get Plus Monthly' opens Stripe Checkout (checkout.stripe.com/c/pay/cs_live_…, 'Craft Docs Ltd', card number field); stopped there. Docs: Team plans have a 15-day trial 'no payment required upfront'",
   "notes": "hosted Stripe Checkout; whether 3DS/approval would be asked is unknown since no card was entered"
  },
  {
   "t": "22:12",
   "cap": "cancel",
   "capability": "Cancel plan",
   "task": "Find the cancel route",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "no plan started. Docs (cancel-subscription.md): cancel in Craft > Settings and Billing > Billing & Subscription (Stripe billing portal); App Store/Setapp through those stores. No billing API"
  },
  {
   "t": "25:21",
   "cap": "delete",
   "capability": "Delete account and data",
   "task": "Delete the account in Settings > Account Settings > Danger Zone",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "Delete Account dialog asks to type the account email; after Delete the app returns to the login screen. Afterwards: published craft.me link 404; MCP token 401 'Access revoked'; API link GET /blocks?id=<doc> 404 'Block not found', /folders only built-in empty locations, search empty.",
   "notes": "no API/MCP route to delete the account; documents can be deleted via API (DELETE /documents moved the template to trash)"
  },
  {
   "t": "25:21",
   "cap": "cleanup",
   "capability": "Cleanup",
   "task": "Remove test data",
   "route": "browser",
   "documented": true,
   "result": "done",
   "verified": true,
   "evidence": "account deleted (see delete); MCP refresh token revoked before deletion",
   "notes": ""
  },
  {
   "t": "25:33",
   "cap": "cap-12",
   "capability": "Apply a document style/theme",
   "task": "not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "styles: no API/MCP write route found (MCP only has 'blocks explore-themes' read); UI not tried for time"
  },
  {
   "t": "25:33",
   "cap": "cap-16",
   "capability": "Clip web pages into Craft with the Web Clipper",
   "task": "not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "Web Clipper is a browser extension; not installable in the drive browser"
  },
  {
   "t": "25:33",
   "cap": "cap-17",
   "capability": "Forward emails directly into a Craft space",
   "task": "not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "needs sending an email from a mailbox; our inbox only receives"
  },
  {
   "t": "25:33",
   "cap": "cap-18",
   "capability": "Import notes from other apps (Notion, Obsidian, Evernote, Markdown, TextBundle, CSV)",
   "task": "not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "import is UI-only (file upload / third-party OAuth); not tried for time"
  },
  {
   "t": "25:33",
   "cap": "cap-20",
   "capability": "Present a document as a slideshow",
   "task": "not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "present mode is UI-only; not tried for time"
  },
  {
   "t": "25:33",
   "cap": "cap-21",
   "capability": "Track analytics on a published page",
   "task": "not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "paid feature per map; not attempted on free plan"
  },
  {
   "t": "25:33",
   "cap": "cap-22",
   "capability": "Restrict access to a published page (password, email domain, expiration)",
   "task": "not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "publish security settings UI-only; not tried for time"
  },
  {
   "t": "25:33",
   "cap": "cap-23",
   "capability": "Sync tasks with Apple Reminders",
   "task": "not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "Apple Reminders needs Mac/iOS"
  },
  {
   "t": "25:33",
   "cap": "cap-24",
   "capability": "View Apple Calendar events alongside Craft tasks/notes",
   "task": "not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "Apple Calendar needs Mac (docs: not on Windows or Web)"
  },
  {
   "t": "25:33",
   "cap": "cap-25",
   "capability": "Import highlights from Readwise (Kindle, Instapaper, etc.)",
   "task": "not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "needs a Readwise account"
  },
  {
   "t": "25:33",
   "cap": "cap-26",
   "capability": "Restore a prior document version",
   "task": "not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "version history not in API/MCP; UI not tried for time"
  },
  {
   "t": "25:33",
   "cap": "cap-27",
   "capability": "Jump to any document/daily note with Quick Open",
   "task": "not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "Quick Open is an in-app keyboard UI; not tried"
  },
  {
   "t": "25:33",
   "cap": "cap-28",
   "capability": "Automate Craft with Apple Shortcuts/Siri",
   "task": "not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "Apple Shortcuts needs iOS/macOS"
  },
  {
   "t": "25:33",
   "cap": "cap-29",
   "capability": "Connect a custom domain for published pages",
   "task": "not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "paid feature per map; not attempted"
  },
  {
   "t": "25:33",
   "cap": "cap-30",
   "capability": "Add a custom logo/brand to published pages",
   "task": "not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "paid feature per map; not attempted"
  },
  {
   "t": "25:33",
   "cap": "cap-31",
   "capability": "Manage team members across a shared Space",
   "task": "not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "paid feature per map; not attempted"
  },
  {
   "t": "25:33",
   "cap": "cap-32",
   "capability": "Choose the Assistant's AI model (Core/Fast/Max/on-device Local)",
   "task": "not attempted",
   "route": "none",
   "documented": true,
   "result": "skipped",
   "verified": false,
   "evidence": "Assistant model picker seen in the UI ('Fast', 'Auto' buttons) but switching not tried"
  }
 ],
 "stale": false,
 "icon": "/logos/craft.png",
 "monitored": false,
 "verdict": "Gets in on its own and does the work: L3 · Does the work. Our agent passed every checkpoint it tried headless, with no step blocking it outright. Sign-up used an email-code web form behind an invisible challenge that let it through, and credentials needed one browser approval for MCP; from there it created a document through the API and read it back. Through the API it drove documents, folders, tasks, daily notes, collections and whiteboards, with publishing, sharing and the Assistant reachable only in the browser. Upgrading opens a hosted card form a human has to complete, and deleting the account is a browser-only step with no matching API route, though it fully revoked the agent's access afterward.",
 "page": "https://agentdrives.com/tools/craft?via=api"
}