[
  {
    "id": "acquire-domain",
    "namespace": "labs",
    "title": "Acquire a domain (labs) — find and buy through Convex",
    "summary": "Find a memorable domain for the app, check live availability + price, and (only on explicit yes) register it through Convex and bind it to the deployment. Labs — a spend action. If the user already owns a domain, use `domains` instead.",
    "trigger": "the user wants to FIND and BUY a domain for their app ('find me a domain', 'get me a real domain', 'buy a domain for this'). SKIP if they haven't shipped yet (publish first), and SKIP if they already own a domain at their own registrar — that's `domains`.",
    "tier": 2,
    "doc": "/capability/acquire-domain.md"
  },
  {
    "id": "agent",
    "namespace": "convex",
    "title": "Add an AI agent / RAG backend",
    "summary": "Build an AI agent or RAG feature on Convex with @convex-dev/agent (threads, messages, tools, vector search).",
    "trigger": "the user wants an AI chatbot / assistant / agent / RAG / 'chat with my docs' / LLM feature backed by Convex.",
    "tier": 0,
    "doc": "/capability/agent.md"
  },
  {
    "id": "auth",
    "namespace": "convex",
    "title": "Add sign-in to the app",
    "summary": "Add authentication (passkeys by default, OAuth/password optional) to the current Convex + web app, wired end to end.",
    "trigger": "the user wants login / sign-in / accounts / 'users can log in' / passkeys / OAuth for the current app. SKIP a brand-new app that should use scaffold's baked-in auth.",
    "tier": 0,
    "doc": "/capability/auth.md"
  },
  {
    "id": "billing",
    "namespace": "convex",
    "title": "Add billing / payments",
    "summary": "Add Stripe billing to a Convex app — checkout, the webhook HTTP action, and subscription state in the database.",
    "trigger": "the user wants payments / billing / subscriptions / 'charge users' / Stripe / a paywall in their Convex app.",
    "tier": 0,
    "doc": "/capability/billing.md"
  },
  {
    "id": "crons",
    "namespace": "convex",
    "title": "Add scheduled jobs (crons)",
    "summary": "Set up recurring scheduled functions (crons) on Convex — daily digests, cleanups, polling, retries.",
    "trigger": "the user wants a recurring/scheduled task — cron, 'every day/hour', digest email, cleanup job, periodic poll. SKIP one-off scheduling (use ctx.scheduler.runAfter inline).",
    "tier": 0,
    "doc": "/capability/crons.md"
  },
  {
    "id": "domains",
    "namespace": "convex",
    "title": "Set up a custom domain with your own provider",
    "summary": "Point a domain the user ALREADY OWNS (GoDaddy, Namecheap, Cloudflare, Porkbun, …) at their Convex app: the DNS records to create, the custom-domain attachment, and the auth-origin rebind. No purchase, no registrar credentials.",
    "trigger": "the user already OWNS a domain at their own registrar and wants it pointing at their Convex app ('point my GoDaddy domain at this', 'use my own domain', 'set up example.com for my app'). SKIP if they need to FIND or BUY one — that's labs-acquire-domain.",
    "tier": 0,
    "doc": "/capability/domains.md"
  },
  {
    "id": "env",
    "namespace": "convex",
    "title": "Manage env vars + secrets",
    "summary": "Set and wire deployment environment variables / secrets (API keys) for a Convex app — never hardcoded.",
    "trigger": "the user needs an API key / secret / environment variable in their Convex functions — 'add my OpenAI key', 'set an env var', 'where do secrets go'.",
    "tier": 0,
    "doc": "/capability/env.md"
  },
  {
    "id": "migrate",
    "namespace": "convex",
    "title": "Migrate the schema / data on a live app",
    "summary": "Safely change the schema and backfill data on a deployed Convex app using @convex-dev/migrations.",
    "trigger": "the user is changing the schema on a LIVE/deployed app, needs a data backfill, hit a schema-validation error after a change, or asks to 'migrate'/'backfill'/'change the schema safely'. SKIP a fresh local app (just edit the schema).",
    "tier": 0,
    "doc": "/capability/migrate.md"
  },
  {
    "id": "monitor",
    "namespace": "convex",
    "title": "Watch for the next thing to react to",
    "summary": "A blocking watch that returns the next typed event — a dev error, a prod error, or a user request — so the agent reacts instead of polling.",
    "trigger": "the agent should wait for and react to the next event while building or running a Convex app — surface the next dev or prod error or request rather than poll. Used continuously during a build loop.",
    "tier": 0,
    "doc": "/capability/monitor.md"
  },
  {
    "id": "optimize",
    "namespace": "convex",
    "title": "Audit and optimize an existing Convex app",
    "summary": "The front door for an existing Convex app: a security and scale audit, component upgrades, and production observability.",
    "trigger": "the user points the agent at an EXISTING Convex app and wants an audit, review, upgrade, 'make it production-ready', 'is this scalable', or 'add observability'. SKIP for brand-new projects (use scaffold).",
    "tier": 0,
    "doc": "/capability/optimize.md"
  },
  {
    "id": "quickstart",
    "namespace": "convex",
    "title": "Quickstart: a barebones Convex template, running",
    "summary": "Get a minimal Convex + web template running from scratch — scaffold, install, dev backend + web server up. No hosting, panel, or auth extras (that's labs-quickstart).",
    "trigger": "the user wants to START a new Convex app/template from scratch (\"build me an app where users can …\", \"new app\", \"get me a convex template\", ran /quickstart). SKIP if there's already a Convex project in the cwd; SKIP the extras — the full wow-shell (static hosting/publish, chef feedback panel, passkeys) is labs-quickstart.",
    "tier": 0,
    "doc": "/capability/quickstart.md"
  },
  {
    "id": "seed",
    "namespace": "convex",
    "title": "Seed / import data",
    "summary": "Seed the Convex database with starter/fixture data, or import an existing dataset.",
    "trigger": "the user wants starter/sample/fixture data, to seed the db, or to import an existing dataset (CSV/JSON) into Convex.",
    "tier": 0,
    "doc": "/capability/seed.md"
  },
  {
    "id": "sentinel",
    "namespace": "convex",
    "title": "Capture production errors in your own deployment",
    "summary": "A proactive, realtime pipeline that captures production errors into the user's own Convex deployment, redacted at write time, and hands them to the agent to fix.",
    "trigger": "the user wants production error capture / observability / 'why is my live app failing' / 'set up Sentinel' / 'add error tracking' for a Convex app. The component + its tables live in the user's OWN deployment.",
    "tier": 0,
    "doc": "/capability/sentinel.md"
  },
  {
    "id": "ship",
    "namespace": "convex",
    "title": "Ship the app live",
    "summary": "Build + publish the current app to a live URL (*.convex.app), and deploy its Convex backend to the cloud.",
    "trigger": "the user wants to deploy/publish/ship the current app — 'put it live', 'publish', 'deploy', 'give me a URL to share'. Needs a built app in the cwd.",
    "tier": 2,
    "doc": "/capability/ship.md"
  },
  {
    "id": "test",
    "namespace": "convex",
    "title": "Generate Convex tests",
    "summary": "Write tests for Convex functions using convex-test (queries, mutations, auth, scheduling).",
    "trigger": "the user wants tests for their Convex functions, to add a test suite, or asks 'how do I test this'. SKIP pure frontend tests.",
    "tier": 0,
    "doc": "/capability/test.md"
  }
]
