{
 "slug": "convex",
 "name": "Convex",
 "url": "https://convex.dev",
 "domain": "convex.dev",
 "category": "databases",
 "category_name": "Databases",
 "tested_at": "2026-10-02",
 "run": "20261002T053254Z",
 "draft": false,
 "reviewed": true,
 "owner_verified": null,
 "origin": "editorial",
 "history": [
  {
   "run": "20261002T053254Z",
   "date": "2026-10-02",
   "level": 3,
   "engine": {
    "runner": "omp",
    "model": null,
    "driver": null,
    "signed": true,
    "inbox": null,
    "robots": "start"
   }
  }
 ],
 "level": 3,
 "level_name": "Does the work",
 "level_selfhost": 4,
 "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 without an account (runs locally); can't sign up for one",
   "at": "signup",
   "how": "no-account"
  },
  {
   "key": "work",
   "label": "Use",
   "state": "part",
   "text": "Work done: 70% of the core"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, made nothing to delete",
   "how": "no-account",
   "left": "nothing_made"
  }
 ],
 "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 without an account (runs locally); can't sign up for one",
   "at": "signup",
   "how": "no-account",
   "stage": "in"
  },
  {
   "key": "use",
   "label": "Use",
   "state": "part",
   "text": "Work done: 70% of the core",
   "stage": "work"
  },
  {
   "key": "pay",
   "label": "Pay",
   "state": "unreached",
   "text": "Payment not reached",
   "value": "unreached",
   "route": "card_checkout",
   "stage": "pay"
  },
  {
   "key": "leave",
   "label": "Leave",
   "state": "yes",
   "text": "Leaves on its own: nothing to cancel, made nothing to delete",
   "how": "no-account",
   "left": "nothing_made",
   "stage": "leave"
  }
 ],
 "access": [
  {
   "key": "local",
   "label": "Runs locally",
   "routes": [
    "local"
   ],
   "minutes": null,
   "core": null
  }
 ],
 "minutes": null,
 "next": {
  "to": 4,
  "text": "Next: let an agent sign up for an account on its own (without one it does 70% of the core work)"
 },
 "stop": "signup",
 "core": null,
 "scores": {
  "coverage": 59,
  "reliability": null,
  "resilience": null,
  "setup": 100,
  "surface_coverage": null,
  "docs_accuracy": null,
  "docs_completeness": null
 },
 "parts": {
  "holds_up": null,
  "docs_match": null,
  "setup": 100,
  "security": null,
  "standards": []
 },
 "reliability_method": null,
 "resilience": null,
 "stress": [],
 "surface_audit": null,
 "coverage_core": 70,
 "after_wall": null,
 "coverage_source": "reported",
 "driver": null,
 "methodology": 15,
 "rules_date": "2026-10-15",
 "engine": {
  "runner": "omp",
  "model": null,
  "driver": null,
  "signed": true,
  "inbox": null,
  "robots": "start"
 },
 "same_level_drives": 1,
 "drives": 1,
 "works_assisted": null,
 "freshness": "fresh",
 "nothing_to_pay": false,
 "core_gated": false,
 "profiles": {},
 "agent_check": null,
 "agent_pass": null,
 "who_gets_in": {
  "server": {
   "state": "in"
  },
  "signed": {
   "state": "robots",
   "kind": "signup",
   "at": "2026-10-13"
  },
  "browser": {
   "state": "in",
   "measured": false
  },
  "our_key": "pending",
  "robots": "closed",
  "tip": false
 },
 "ladder": {
  "docs": {
   "status": "headless",
   "note": "llms.txt on docs and www, every page as .md, Management API OpenAPI at api.convex.dev/v1/openapi.json, an Agent Mode page for cloud agents"
  },
  "signup": {
   "status": "n/a",
   "note": "Not needed: a documented route works without an account.",
   "no_account": true,
   "note_driver": "auth.convex.dev/sign-up shows a visible Cloudflare 'Verify you are human' challenge (403 cf-mitigated: challenge) in a real browser and headless; the sign-in page itself loads fine. No signup API.",
   "status_driver": "human"
  },
  "verify": {
   "status": "n/a",
   "note": "Not needed: a documented route works without an account.",
   "no_account": true,
   "note_driver": "not reached: sign-up blocked",
   "status_driver": "blocked"
  },
  "credentials": {
   "status": "n/a",
   "note": "Not needed: a documented route works without an account.",
   "via": "",
   "no_account": true,
   "note_driver": "PAT/team token/deploy keys need a dashboard account (CLI device login works headless but needs an existing account). The documented anonymous local deployment needs no credentials, which is how the first call and the first action passed.",
   "status_driver": "blocked"
  },
  "first_call": {
   "status": "headless",
   "note": "Documented no-account route: npx convex dev --once in a non-interactive shell provisions an anonymous local deployment; npx convex run and POST /api/query worked. Cloud API returned 401 MissingAccessToken."
  },
  "first_action": {
   "status": "headless",
   "note": "Pushed schema+functions, inserted/patched/deleted documents, HTTP action, cron, scheduler, env vars on the local deployment. Nothing created in Convex Cloud."
  },
  "pay": {
   "status": "",
   "grade": "P1",
   "rails": [],
   "first_party": false,
   "rail_scope": "none",
   "trial_path": "free tier",
   "note": "Free & Starter plan needs no card. Upgrades only via the dashboard billing page (docs teams.md); no billing endpoints in the Management API; no 402/x402/MPP/L402 on api.convex.dev; x402./mpp./agents. subdomains do not resolve; no listing in x402 Bazaar, mpp.dev or projects.dev. Reaching that checkout needs an account, which needs a human at the sign-up challenge.",
   "reached": false
  },
  "cancel": {
   "status": "n/a",
   "note": "Nothing to cancel: our agent used the free plan.",
   "docs_note": "Per docs, subscription is managed on the dashboard billing page and deleting the team cancels it (web UI). Not testable: no account.",
   "docs_grade": "",
   "nothing": "free_plan"
  },
  "delete": {
   "status": "blocked",
   "note": "Cloud: no account to delete; docs place account deletion on the dashboard Profile page (web UI only). Local: no CLI command deletes a local deployment; removed the .convex folder by hand.",
   "left": "nothing_made",
   "account": false
  }
 },
 "routes": [],
 "checkout": null,
 "docs": null,
 "claims": null,
 "pay_options": {
  "checked": "2026-10-02",
  "source": "drive",
  "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": true,
  "cli": true,
  "sdk": true,
  "mcp": "official",
  "llms_txt": true,
  "webhooks": true,
  "sandbox": true
 },
 "surface_notes": {
  "api": "Management API, 49 operations, Bearer PAT/team/OAuth tokens; plus a per-deployment HTTP API",
  "openapi": "api.convex.dev/v1/openapi.json, 3.1",
  "cli": "npx convex: dev, deploy, run, data, env, import/export, logs, deployment create, token create, login with device code",
  "mcp": "official, 12 tools, needs a cloud login: 'Not Authorized' on anonymous local and self-hosted deployments",
  "webhooks": "incoming via HTTP actions",
  "sandbox": "anonymous local deployment, no account"
 },
 "can_do": [
  "Build and push a full Convex backend (schema, indexes, queries, mutations, actions) to a local deployment with no account",
  "Create, update and delete documents and read them back via CLI, HTTP API and HTTP actions",
  "Run scheduled functions and cron jobs, set environment variables",
  "Export and import data",
  "Self-host the open-source backend with Docker and drive it entirely from the CLI",
  "Upload, serve and delete files with file storage",
  "Run full-text search and vector search",
  "Authenticate users with a custom JWT provider",
  "Subscribe to live query updates over WebSocket"
 ],
 "cannot_do": [
  {
   "what": "Create a Convex Cloud account",
   "why": "Visible Cloudflare 'Verify you are human' challenge on auth.convex.dev/sign-up"
  },
  {
   "what": "Create cloud projects, deployments or deploy keys",
   "why": "Every route (Management API, CLI login, dashboard) needs an account"
  },
  {
   "what": "Use the official MCP server on local or self-hosted deployments",
   "why": "Returns 'Not Authorized: Run npx convex dev to login'"
  },
  {
   "what": "Upgrade or pay",
   "why": "Billing exists only in the dashboard; no agent payment rail"
  }
 ],
 "blockers": [
  "Cloudflare Turnstile challenge on the sign-up page",
  "No signup or billing API"
 ],
 "tips_for_owner": [
  "Let verified agents through the sign-up page",
  "Make MCP work on local deployments",
  "Add billing endpoints to the Management API",
  "Add a CLI command to delete local deployments",
  "Name the real cause in JWT errors"
 ],
 "tips_for_agents": [
  "Without an account, run `npx convex dev --once` in a non-interactive shell: it provisions a local anonymous deployment and never prompts for login",
  "Use `npx convex run`, `npx convex data` and POST /api/query to verify state; `function-spec` lists every function with its args",
  "For self-hosting, set CONVEX_SELF_HOSTED_URL and CONVEX_SELF_HOSTED_ADMIN_KEY in .env.local; the admin key comes from generate_admin_key.sh in the container",
  "The official MCP server only works after a cloud login; use the CLI otherwise",
  "Once a human has an account, the Agent Mode docs give you a per-agent dev deployment with a scoped deploy key (`deployment create` + `deployment token create`)"
 ],
 "selfhost": {
  "scores": {
   "overall": 80,
   "coverage": 70,
   "access": 90,
   "reliability": 85,
   "docs": 85
  },
  "ladder": {
   "docs": {
    "status": "headless",
    "note": "self-hosting docs + docker-compose.yml in get-convex/convex-backend"
   },
   "signup": {
    "status": "n/a",
    "note": "no account"
   },
   "verify": {
    "status": "n/a",
    "note": "no account"
   },
   "credentials": {
    "status": "headless",
    "note": "generate_admin_key.sh inside the backend container"
   },
   "first_call": {
    "status": "headless",
    "note": "npx convex deploy with CONVEX_SELF_HOSTED_URL/ADMIN_KEY"
   },
   "first_action": {
    "status": "headless",
    "note": "tasks:add mutation inserted a document, read back via data and HTTP action"
   },
   "delete": {
    "status": "headless",
    "note": "docker compose down -v removed containers and volume"
   },
   "pay": {
    "status": "n/a",
    "note": "Self-hosted: nothing to pay or cancel."
   },
   "cancel": {
    "status": "n/a",
    "note": "Self-hosted: nothing to pay or cancel."
   }
  },
  "coverage_core": 88,
  "coverage_source": "reported"
 },
 "summary": "Convex is one of the most agent-ready backends to build on. It has llms.txt and markdown docs, an OpenAPI Management API, an Agent Mode guide, and a CLI that starts a local backend with no account; on that backend every core backend task worked on the first try, and so did file storage, text and vector search, custom-JWT auth and live subscriptions. The hosted cloud is closed to agents at the first door: auth.convex.dev/sign-up shows a visible Cloudflare 'Verify you are human' challenge, so the drive got no cloud project, no deploy key, no MCP session and no purchase. The open-source self-hosted backend installed with Docker in under a minute and the CLI could drive it fully.",
 "wall": "Cloudflare human check on the sign-up page",
 "plan_scope": "none (no cloud account); free, no-account local deployment via the official CLI",
 "robots_stop": null,
 "robots": null,
 "plain": {
  "summary": "Convex is a backend-as-a-service for app developers to store data and run code in the cloud. An AI agent working alone could build and fully operate a free local version of Convex, including a real database, servers, and search, but it could not create a real Convex.dev cloud account because the signup page shows a human verification check.",
  "can_do": [
   "Build a complete working backend (database, servers, scheduled jobs) for free with no account, using the command line",
   "Create, read, update, and delete data, and read it back to confirm it worked",
   "Store and serve files, search text and do similarity (vector) search",
   "Set up login/authentication for end users of the app",
   "Get live updates pushed to a connected app automatically",
   "Install and fully run the open-source self-hosted version with Docker"
  ],
  "cannot_do": [
   {
    "what": "Create a Convex cloud account",
    "why": "A visible human-verification check blocks automated signup"
   },
   {
    "what": "Create cloud projects or get API keys for the hosted service",
    "why": "All of these require a cloud account first"
   },
   {
    "what": "Use the official AI assistant plugin (MCP) on the free local setup",
    "why": "It only works after logging into a cloud account"
   },
   {
    "what": "Pay for or cancel a paid plan",
    "why": "Billing is only available through the website dashboard, not automatically"
   }
  ]
 },
 "plan_gated": [
  {
   "capability": "Custom domains, log streaming, daily backups",
   "plan": "Professional ($25/dev/month)",
   "evidence": "www.convex.dev/pricing; not attempted (no account)"
  }
 ],
 "reply": null,
 "capabilities": [
  {
   "group": "Backend functions",
   "capability": "Write and push queries/mutations/actions (npx convex dev/deploy)",
   "weight": "core",
   "plan": "free",
   "source": "docs.convex.dev/llms.txt"
  },
  {
   "group": "Backend functions",
   "capability": "Define schema, tables and indexes",
   "weight": "core",
   "plan": "free",
   "source": "docs.convex.dev/database/schemas.md"
  },
  {
   "group": "Database",
   "capability": "Insert, read, update, delete documents",
   "weight": "core",
   "plan": "free",
   "source": "docs.convex.dev/database/writing-data.md"
  },
  {
   "group": "Client access",
   "capability": "Call functions over HTTP API / client SDKs (JS, React, Python, Rust, Swift, Kotlin)",
   "weight": "core",
   "plan": "free",
   "source": "docs.convex.dev/http-api, llms.txt client section"
  },
  {
   "group": "Backend functions",
   "capability": "Serve HTTP endpoints (HTTP actions, webhooks)",
   "weight": "core",
   "plan": "free",
   "source": "docs.convex.dev/functions/http-actions.md"
  },
  {
   "group": "Backend functions",
   "capability": "Schedule functions and cron jobs",
   "weight": "core",
   "plan": "free",
   "source": "www.convex.dev/pricing (Crons in Free)"
  },
  {
   "group": "Configuration",
   "capability": "Set and read environment variables",
   "weight": "core",
   "plan": "free",
   "source": "docs.convex.dev/cli/reference/env.md"
  },
  {
   "group": "Projects & deployments",
   "capability": "Create a cloud project and dev/prod deployment",
   "weight": "core",
   "plan": "free",
   "source": "Management API create_project/create_deployment; cli deployment create"
  },
  {
   "group": "Projects & deployments",
   "capability": "Deploy to production cloud deployment",
   "weight": "core",
   "plan": "free",
   "source": "docs.convex.dev/cli/reference/deploy.md"
  },
  {
   "group": "Access",
   "capability": "Create deploy keys / tokens for CI and agents",
   "weight": "core",
   "plan": "free",
   "source": "Management API create_deploy_key; cli deployment token create"
  },
  {
   "group": "Storage",
   "capability": "Upload and serve files",
   "weight": "secondary",
   "plan": "free",
   "source": "www.convex.dev/pricing"
  },
  {
   "group": "Search",
   "capability": "Text and vector search",
   "weight": "secondary",
   "plan": "free",
   "source": "www.convex.dev/pricing"
  },
  {
   "group": "Client access",
   "capability": "Realtime reactive subscriptions",
   "weight": "secondary",
   "plan": "free",
   "source": "www.convex.dev/llms.txt"
  },
  {
   "group": "Data",
   "capability": "Export and import data",
   "weight": "secondary",
   "plan": "free",
   "source": "cli reference export/import"
  },
  {
   "group": "Observability",
   "capability": "Logs, insights, function spec",
   "weight": "secondary",
   "plan": "free",
   "source": "cli reference logs/insights/function-spec"
  },
  {
   "group": "Agent tooling",
   "capability": "MCP server (12 tools)",
   "weight": "secondary",
   "plan": "free",
   "source": "docs.convex.dev/ai/convex-mcp-server.md"
  },
  {
   "group": "Projects & deployments",
   "capability": "Preview deployments / preview deploy keys",
   "weight": "secondary",
   "plan": "free",
   "source": "www.convex.dev/pricing"
  },
  {
   "group": "Team",
   "capability": "Invite teammates, roles",
   "weight": "secondary",
   "plan": "free",
   "source": "Management API invite_team_member (1-6 devs on Free)"
  },
  {
   "group": "Team",
   "capability": "Custom roles, audit log",
   "weight": "peripheral",
   "plan": "paid",
   "source": "Management API custom roles / audit log; team-management docs"
  },
  {
   "group": "Production",
   "capability": "Custom domains",
   "weight": "peripheral",
   "plan": "paid",
   "source": "www.convex.dev/pricing (Professional)"
  },
  {
   "group": "Production",
   "capability": "Log streaming, exception reporting, daily backups",
   "weight": "peripheral",
   "plan": "paid",
   "source": "www.convex.dev/pricing (Professional)"
  },
  {
   "group": "Auth",
   "capability": "Built-in auth / third-party JWT providers",
   "weight": "secondary",
   "plan": "free",
   "source": "www.convex.dev/pricing"
  },
  {
   "group": "AI",
   "capability": "AI Gateway (LLM proxy, billed)",
   "weight": "peripheral",
   "plan": "free",
   "source": "docs.convex.dev/ai-gateway"
  },
  {
   "group": "Billing",
   "capability": "Upgrade plan, spending limits, invoices",
   "weight": "peripheral",
   "plan": "paid",
   "source": "docs.convex.dev/dashboard/teams/teams.md (dashboard only)"
  },
  {
   "group": "Account",
   "capability": "Delete account / team",
   "weight": "peripheral",
   "plan": "free",
   "source": "docs.convex.dev/dashboard/profile.md"
  }
 ],
 "attempts": [
  {
   "t": "00:27",
   "capability": "Docs discovery",
   "task": "Find machine-readable docs, OpenAPI, MCP docs",
   "route": "api",
   "result": "done",
   "verified": true,
   "evidence": "docs.convex.dev/llms.txt (508 lines, .md per page), www.convex.dev/llms.txt, api.convex.dev/v1/openapi.json (Management API, 49 ops), docs page /cli/agent-mode.md",
   "notes": "Accept: text/markdown supported; agent-mode page targets cloud agents explicitly"
  },
  {
   "t": "00:17",
   "capability": "Agent discovery / pay probes",
   "task": "Probe .well-known/ucp, oauth-protected-resource, oauth-authorization-server, auth.md, SKILL.md, x402./mpp./agents. subdomains",
   "route": "api",
   "result": "done",
   "verified": true,
   "evidence": "All 404 (HTML soft-404 on www); api.convex.dev/.well-known/* 404; x402./mpp./agents.convex.dev do not resolve (curl 000); api.convex.dev/v1/teams unauth -> 404",
   "notes": "No agent-payment or agent-registration discovery"
  },
  {
   "t": "00:44",
   "capability": "Develop backend locally (no account)",
   "task": "npx convex dev --once in non-interactive shell with no login",
   "route": "cli",
   "result": "done",
   "verified": true,
   "evidence": ".env.local CONVEX_DEPLOYMENT=anonymous:anonymous-app; 'Convex functions ready', index tasks.by_done added",
   "notes": "Documented anonymous local deployment; downloads backend binary; no account needed"
  },
  {
   "t": "01:05",
   "capability": "Database CRUD",
   "task": "insert, patch, delete documents via mutations; read back",
   "route": "cli",
   "result": "done",
   "verified": true,
   "evidence": "npx convex run tasks:add -> id j57c206e...; complete patched done=true; remove deleted; npx convex data tasks shows expected rows",
   "notes": ""
  },
  {
   "t": "01:05",
   "capability": "Query via HTTP API",
   "task": "POST /api/query on deployment URL",
   "route": "api",
   "result": "done",
   "verified": true,
   "evidence": "POST http://127.0.0.1:3210/api/query {path:'tasks:list'} -> {status:success,value:[3 docs]}",
   "notes": "Documented HTTP API (docs /http-api)"
  },
  {
   "t": "01:05",
   "capability": "HTTP actions",
   "task": "Serve GET /tasks via httpRouter",
   "route": "api",
   "result": "done",
   "verified": true,
   "evidence": "curl http://127.0.0.1:3211/tasks returned JSON array of tasks",
   "notes": ""
  },
  {
   "t": "01:05",
   "capability": "Environment variables",
   "task": "env set/list and read from an action",
   "route": "cli",
   "result": "done",
   "verified": true,
   "evidence": "env set GREETING; env list shows it; run tasks:env -> 'hello-agent'",
   "notes": ""
  },
  {
   "t": "01:05",
   "capability": "Scheduling and crons",
   "task": "scheduler.runAfter 2s + interval cron",
   "route": "cli",
   "result": "done",
   "verified": true,
   "evidence": "'scheduled' row appeared after 4s; 'cron tick' row inserted on deploy",
   "notes": ""
  },
  {
   "t": "00:44",
   "capability": "Schema and indexes",
   "task": "Define schema with index, push",
   "route": "cli",
   "result": "done",
   "verified": true,
   "evidence": "deploy output: Added table indexes [+] tasks.by_done",
   "notes": ""
  },
  {
   "t": "01:05",
   "capability": "Export data",
   "task": "npx convex export",
   "route": "cli",
   "result": "done",
   "verified": true,
   "evidence": "Downloaded snapshot export to /tmp/cvx-export.zip (1324 bytes)",
   "notes": ""
  },
  {
   "t": "01:05",
   "capability": "Function metadata",
   "task": "npx convex function-spec",
   "route": "cli",
   "result": "done",
   "verified": true,
   "evidence": "JSON with HttpAction /tasks, Query tasks.js:list etc.",
   "notes": ""
  },
  {
   "t": "01:45",
   "capability": "MCP server",
   "task": "npx convex mcp start; tools/list; call status on anonymous local deployment",
   "route": "mcp",
   "result": "partial",
   "verified": false,
   "evidence": "tools/list -> 12 tools (status,data,tables,functionSpec,run,envList,envGet,envSet,envRemove,runOneoffQuery,logs,insights); tools/call status -> isError 'Not Authorized: Run `npx convex dev` to login to your Convex project.'",
   "notes": "MCP does not work against anonymous local deployment even though CLI does; also with --project-dir"
  },
  {
   "t": "03:34",
   "capability": "Sign up (cloud account)",
   "task": "Open dashboard.convex.dev/signup in browser",
   "route": "browser",
   "result": "blocked",
   "verified": true,
   "evidence": "Redirect to https://auth.convex.dev/sign-up -> title 'Just a moment...', Cloudflare 'Performing security verification' with visible 'Verify you are human' checkbox (shots/001.png, 002.png); after 12s still challenged; clicking the 'Sign up' link from the sign-in page hits the same challenge (shots/005.png)",
   "notes": "Visible Cloudflare Turnstile challenge on the sign-up path only; the sign-in page itself loads without challenge. Stopped: status human."
  },
  {
   "t": "02:46",
   "capability": "Sign up (cloud account)",
   "task": "Headless request to sign-up page",
   "route": "api",
   "result": "blocked",
   "verified": true,
   "evidence": "",
   "notes": "No documented signup API; Management API 'Create a team' is documented as not publicly accessible"
  },
  {
   "t": "02:46",
   "capability": "Log in via CLI device flow",
   "task": "npx convex login --no-open in non-interactive shell",
   "route": "cli",
   "result": "blocked",
   "verified": true,
   "evidence": "CLI printed 'Visit https://auth.convex.dev/device?user_code=•••• to finish logging in' (expires 299s); completing it requires an existing account, which needs the challenged sign-up",
   "notes": "CLI login itself is agent-friendly (device code, --no-open); the account behind it is not"
  },
  {
   "t": "03:46",
   "capability": "Sign in with email (try existing-account path)",
   "task": "Enter address on auth.convex.dev 'Continue with email'",
   "route": "browser",
   "result": "blocked",
   "verified": true,
   "evidence": "Moved to /password step (Email + Password, 'Sign in', passkey) - sign-in only, no account creation",
   "notes": "Did not submit a password; account does not exist"
  },
  {
   "t": "04:17",
   "capability": "Management API (projects, deployments, deploy keys)",
   "task": "Call api.convex.dev/v1 without account",
   "route": "api",
   "result": "blocked",
   "verified": true,
   "evidence": "GET https://api.convex.dev/v1/teams/1/projects -> 401 {code:MissingAccessToken,'An access token is required for this command.'}",
   "notes": "Clear error, no 402/payment challenge. Needs PAT/team token from dashboard (needs account)"
  },
  {
   "t": "04:17",
   "capability": "Cloud dev deployment per agent",
   "task": "npx convex deployment create --type dev + deployment token create (docs/agent-mode)",
   "route": "cli",
   "result": "blocked",
   "verified": true,
   "evidence": "Requires login/team token; no account possible past sign-up challenge",
   "notes": "Documented, purpose-built for agents; untestable here"
  },
  {
   "t": "04:09",
   "capability": "Upgrade plan / billing",
   "task": "Find agent-native or API billing route",
   "route": "none",
   "result": "blocked",
   "verified": true,
   "evidence": "Pricing: Free & Starter $0 + pay-as-you-go, Professional $25/dev/month; docs teams.md: upgrade via dashboard.convex.dev/team/settings/billing (web UI). No billing endpoints in Management OpenAPI (49 ops). No x402/MPP/L402 headers; no convex listing found in x402 Bazaar, mpp.dev/api/services, projects.dev",
   "notes": "Hosted checkout not reachable without account"
  },
  {
   "t": "04:17",
   "capability": "Pay step registries",
   "task": "Query x402 Bazaar, mpp.dev, Stripe Projects for convex",
   "route": "api",
   "result": "done",
   "verified": true,
   "evidence": "No 'convex' matches in Bazaar discovery resources, mpp.dev/api/services or projects.dev page",
   "notes": ""
  },
  {
   "t": "04:33",
   "capability": "Self-host install",
   "task": "docker compose (official self-hosted/docker/docker-compose.yml), generate_admin_key.sh",
   "route": "cli",
   "result": "done",
   "verified": true,
   "evidence": "backend Healthy, dashboard Started; admin key generated",
   "notes": "Bound ports to 127.0.0.1 (3310/3311/6891)"
  },
  {
   "t": "05:16",
   "capability": "Self-host: deploy + CRUD + env + HTTP action + export + import",
   "task": "npx convex deploy with CONVEX_SELF_HOSTED_URL/ADMIN_KEY, run, env set, data, import",
   "route": "cli",
   "result": "done",
   "verified": true,
   "evidence": "'Deployed Convex functions to http://127.0.0.1:3310'; tasks:add -> id; env GREETING read back 'selfhost-hi'; curl :3311/tasks JSON; export zip; import 'Added 2 documents to table tasks'",
   "notes": ""
  },
  {
   "t": "05:16",
   "capability": "Self-host: MCP",
   "task": "npx convex mcp start; tools/call status on self-hosted project",
   "route": "mcp",
   "result": "failed",
   "verified": true,
   "evidence": "isError 'Not Authorized: Run `npx convex dev` to login to your Convex project.'",
   "notes": "MCP server requires cloud login; does not use CONVEX_SELF_HOSTED_* or anonymous local deployments"
  },
  {
   "t": "05:38",
   "capability": "Leave: delete self-host",
   "task": "docker compose down -v",
   "route": "cli",
   "result": "done",
   "verified": true,
   "evidence": "Volume selfhost_data Removed; 0 containers, 0 volumes left",
   "notes": ""
  },
  {
   "t": "05:50",
   "capability": "Leave: delete local anonymous deployment",
   "task": "Remove local deployment and data",
   "route": "cli",
   "result": "partial",
   "verified": true,
   "evidence": "No CLI command to delete a local deployment (deployment: select/create/token/usage only); removed app/.convex (508K) by hand; ~/.cache/convex binaries remain",
   "notes": ""
  },
  {
   "t": "04:17",
   "capability": "Leave: delete cloud account",
   "task": "Delete account / cancel plan",
   "route": "none",
   "result": "skipped",
   "verified": false,
   "evidence": "No account created. Docs: account deletion in dashboard Profile page; team deletion cancels subscription (teams.md) - web UI only",
   "notes": ""
  },
  {
   "t": "14:14",
   "capability": "Text search",
   "task": "Search index on tasks.text, query 'milk'",
   "route": "cli",
   "result": "done",
   "verified": true,
   "evidence": "extra:search {q:'milk'} -> 1 row 'buy oat milk' (of 2 new rows)",
   "notes": "searchIndex pushed with schema"
  },
  {
   "t": "14:14",
   "capability": "Vector search",
   "task": "vectorIndex dims=3, insert 2 docs, ctx.vectorSearch from action",
   "route": "cli",
   "result": "done",
   "verified": true,
   "evidence": "similar([0.9,0.1,0]) -> cats _score 0.994, dogs 0.110",
   "notes": "Vector search only from actions, as documented"
  },
  {
   "t": "14:14",
   "capability": "File storage",
   "task": "generateUploadUrl -> POST file -> save id -> getUrl -> download -> delete",
   "route": "api",
   "result": "done",
   "verified": true,
   "evidence": "upload returned storageId kg205d03...; GET storage URL returned 'hello file from agentdrives'; after storage.delete fileUrl returned null and `npx convex data _storage` shows no documents",
   "notes": ""
  },
  {
   "t": "14:33",
   "capability": "Auth (custom JWT provider)",
   "task": "auth.config.ts customJwt with data: JWKS; call whoami with/without Bearer JWT",
   "route": "api",
   "result": "done",
   "verified": true,
   "evidence": "no token -> value null; signed RS256 JWT -> {issuer:'https://agentdrives.test',subject:'agent-1',name:'AgentDrives Test'}; tampered signature -> InvalidAuthHeader",
   "notes": "Error for a bad signature blames the 'kid' ('does this key match any key in the JWKS?') although the kid matched: slightly misleading. Convex Auth/Clerk/Auth0 providers not tested."
  },
  {
   "t": "14:33",
   "capability": "Realtime subscriptions",
   "task": "ConvexClient.onUpdate(tasks:list) then mutation from same client",
   "route": "sdk",
   "result": "done",
   "verified": true,
   "evidence": "subscription callback fired with row counts [3,4]: initial result then pushed update after insert",
   "notes": ""
  },
  {
   "t": "14:33",
   "capability": "Logs",
   "task": "npx convex logs --history 5",
   "route": "cli",
   "result": "partial",
   "verified": false,
   "evidence": "Printed 'Watching logs for dev deployment anonymous-app...' but no history lines within 8 s",
   "notes": "Did not dig further"
  },
  {
   "t": "12:28",
   "capability": "Preview deployments / team invites / custom domains / AI gateway",
   "task": "Cloud-only features",
   "route": "none",
   "result": "blocked",
   "verified": false,
   "evidence": "Need a cloud account (sign-up wall)",
   "notes": ""
  }
 ],
 "stale": false,
 "icon": "/logos/convex.png",
 "monitored": false,
 "verdict": "Gets in on its own, L3 · Does the work: a documented no-account route provisions a local deployment, where our agent pushed schema and functions, inserted and patched documents, ran an HTTP action, a cron and a scheduler, and set env vars, each checked back. The cloud side stopped at sign-up: a visible Cloudflare \"Verify you are human\" challenge blocked account creation, so no cloud project, deploy key or MCP session followed. Core backend work, plus file storage, text and vector search, custom-JWT auth and live subscriptions, ran on the local deployment; cloud paying and account deletion stayed out of reach, since both sit behind that same human checkpoint and the dashboard.",
 "page": "https://agentdrives.com/tools/convex?via=api"
}