[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-convex-convex-explain-app":3,"mdc--jlpvyf-key":35,"related-repo-convex-convex-explain-app":205,"related-org-convex-convex-explain-app":308},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":24,"repoUrl":25,"updatedAt":26,"license":27,"forks":28,"topics":29,"repo":30,"sourceUrl":33,"mdContent":34},"convex-explain-app","explain Convex application architecture","Explain an existing Convex app — data model + relationships, public vs internal functions, auth\u002Fownership model, components, a request→data flow — read from the schema and function surface. Read-only.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"convex","Convex","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fconvex.png","get-convex",[13,15,18,21],{"name":9,"slug":8,"type":14},"tag",{"name":16,"slug":17,"type":14},"Architecture","architecture",{"name":19,"slug":20,"type":14},"Reference","reference",{"name":22,"slug":23,"type":14},"Database","database",34,"https:\u002F\u002Fgithub.com\u002Fget-convex\u002Fagent-skills","2026-08-04T05:58:41.684344",null,7,[],{"repoUrl":25,"stars":24,"forks":28,"topics":31,"description":32},[],"Convex Skills for Agents","https:\u002F\u002Fgithub.com\u002Fget-convex\u002Fagent-skills\u002Ftree\u002FHEAD\u002Fskills\u002Fconvex-explain-app","---\nname: convex-explain-app\ndescription: \"Explain an existing Convex app — data model + relationships, public vs internal functions, auth\u002Fownership model, components, a request→data flow — read from the schema and function surface. Read-only.\"\n---\n\n\u003C!-- GENERATED from convex-agents content\u002Fcapabilities\u002Fexplain-app.json — do not edit by hand. -->\n\n# Explain this Convex app\n\nBefore you can safely change an app you have to know what it is — and reading 15 function files top-to-bottom is slow and error-prone. This capability produces the map fast and accurately by reading the two sources that can't lie: the schema (the data model) and the function surface (`functionSpec` \u002F the exported queries\u002Fmutations\u002Factions). It is deliberately DESCRIPTIVE — it explains what IS, hands judgment to the audit capabilities and changes to the fixers. It is also the natural first step of an optimize or self-heal session, and the reusable 're-explain the current architecture' that 'change what you built' depends on.\n\n## Workflow\n\n1. DETECT the app: the `convex\u002F` directory, `schema.ts`, and whether a deployment exists (if one does, `functionSpec`\u002F`tables` via the official MCP give the authoritative live surface; if not, read the source directly). deploy-guard classifies any deployment read as read-only.\n2. DATA MODEL: from `schema.ts`, list every table with its fields and, crucially, its RELATIONSHIPS — which `v.id(\"other\")` fields point where, and which indexes exist (indexes reveal the intended access paths). Draw the foreign-key graph in words: 'tasks belong to projects (projectId) and users (ownerId); messages belong to conversations'.\n3. FUNCTION SURFACE: enumerate every exported function, split PUBLIC (query\u002Fmutation\u002Faction — the attack\u002FAPI surface) from INTERNAL (internalQuery\u002F... — not client-reachable), and for each give a one-line 'what it does + what it touches'. The public\u002Finternal split is the single most important thing a newcomer needs and the thing source-skimming most often gets wrong.\n4. AUTH \u002F OWNERSHIP MODEL: state how identity is established (auth.config.ts provider? a users table keyed by tokenIdentifier?) and how ownership is enforced (is there a requireOwner-style check? which field is the owner?). Say plainly if there is NO auth foundation — that is load-bearing context for anyone about to change the app. (Describe the model; do not audit it for holes — that's convex-authz.)\n5. COMPONENTS + EXTERNAL EDGES: list the `@convex-dev\u002F*` components installed (convex.config.ts) and what they provide, the HTTP routes (http.ts) and crons, and any external calls in actions (which APIs, which env vars).\n6. FLOW: trace 1-2 representative end-to-end paths ('client calls createTask → validates → inserts into tasks scoped to the caller → listMyTasks reads it back by the by_owner index') so the reader sees the moving parts connected, not just catalogued.\n7. PRESENT as a scannable map (data model → public\u002Finternal functions → auth model → components\u002Fedges → a flow or two), accurate to the source. End by pointing at the next verbs: convex-reviewer\u002Fconvex-authz to audit it, launch-readiness to score it, design\u002Fconvex-expert to extend it. Never invent behavior the source doesn't show; if something is ambiguous, say so rather than guessing.\n\n## Rules\n\n- Read the schema + function surface (functionSpec\u002Fsource) as the source of truth — never describe behavior the code doesn't show; flag ambiguity instead of guessing.\n- Lead with the two things a newcomer most needs and skimming most often gets wrong: the data-model relationship graph and the public-vs-internal function split.\n- State the auth\u002Fownership model plainly, including 'there is no auth foundation' when that's the case — but DESCRIBE it; auditing it for holes is convex-authz's job.\n- Descriptive, not evaluative: explain-app maps what IS and hands judgment to the audit capabilities and changes to the fixers.\n- Read-only: any deployment introspection is read-only (deploy-guard); the app is not modified.\n- End by pointing at the right next verb (audit → reviewer\u002Fauthz, score → launch-readiness, extend → design\u002Fexpert).\n",{"data":36,"body":37},{"name":4,"description":6},{"type":38,"children":39},"root",[40,49,64,71,165,171],{"type":41,"tag":42,"props":43,"children":45},"element","h1",{"id":44},"explain-this-convex-app",[46],{"type":47,"value":48},"text","Explain this Convex app",{"type":41,"tag":50,"props":51,"children":52},"p",{},[53,55,62],{"type":47,"value":54},"Before you can safely change an app you have to know what it is — and reading 15 function files top-to-bottom is slow and error-prone. This capability produces the map fast and accurately by reading the two sources that can't lie: the schema (the data model) and the function surface (",{"type":41,"tag":56,"props":57,"children":59},"code",{"className":58},[],[60],{"type":47,"value":61},"functionSpec",{"type":47,"value":63}," \u002F the exported queries\u002Fmutations\u002Factions). It is deliberately DESCRIPTIVE — it explains what IS, hands judgment to the audit capabilities and changes to the fixers. It is also the natural first step of an optimize or self-heal session, and the reusable 're-explain the current architecture' that 'change what you built' depends on.",{"type":41,"tag":65,"props":66,"children":68},"h2",{"id":67},"workflow",[69],{"type":47,"value":70},"Workflow",{"type":41,"tag":72,"props":73,"children":74},"ol",{},[75,112,132,137,142,155,160],{"type":41,"tag":76,"props":77,"children":78},"li",{},[79,81,87,89,95,97,102,104,110],{"type":47,"value":80},"DETECT the app: the ",{"type":41,"tag":56,"props":82,"children":84},{"className":83},[],[85],{"type":47,"value":86},"convex\u002F",{"type":47,"value":88}," directory, ",{"type":41,"tag":56,"props":90,"children":92},{"className":91},[],[93],{"type":47,"value":94},"schema.ts",{"type":47,"value":96},", and whether a deployment exists (if one does, ",{"type":41,"tag":56,"props":98,"children":100},{"className":99},[],[101],{"type":47,"value":61},{"type":47,"value":103},"\u002F",{"type":41,"tag":56,"props":105,"children":107},{"className":106},[],[108],{"type":47,"value":109},"tables",{"type":47,"value":111}," via the official MCP give the authoritative live surface; if not, read the source directly). deploy-guard classifies any deployment read as read-only.",{"type":41,"tag":76,"props":113,"children":114},{},[115,117,122,124,130],{"type":47,"value":116},"DATA MODEL: from ",{"type":41,"tag":56,"props":118,"children":120},{"className":119},[],[121],{"type":47,"value":94},{"type":47,"value":123},", list every table with its fields and, crucially, its RELATIONSHIPS — which ",{"type":41,"tag":56,"props":125,"children":127},{"className":126},[],[128],{"type":47,"value":129},"v.id(\"other\")",{"type":47,"value":131}," fields point where, and which indexes exist (indexes reveal the intended access paths). Draw the foreign-key graph in words: 'tasks belong to projects (projectId) and users (ownerId); messages belong to conversations'.",{"type":41,"tag":76,"props":133,"children":134},{},[135],{"type":47,"value":136},"FUNCTION SURFACE: enumerate every exported function, split PUBLIC (query\u002Fmutation\u002Faction — the attack\u002FAPI surface) from INTERNAL (internalQuery\u002F... — not client-reachable), and for each give a one-line 'what it does + what it touches'. The public\u002Finternal split is the single most important thing a newcomer needs and the thing source-skimming most often gets wrong.",{"type":41,"tag":76,"props":138,"children":139},{},[140],{"type":47,"value":141},"AUTH \u002F OWNERSHIP MODEL: state how identity is established (auth.config.ts provider? a users table keyed by tokenIdentifier?) and how ownership is enforced (is there a requireOwner-style check? which field is the owner?). Say plainly if there is NO auth foundation — that is load-bearing context for anyone about to change the app. (Describe the model; do not audit it for holes — that's convex-authz.)",{"type":41,"tag":76,"props":143,"children":144},{},[145,147,153],{"type":47,"value":146},"COMPONENTS + EXTERNAL EDGES: list the ",{"type":41,"tag":56,"props":148,"children":150},{"className":149},[],[151],{"type":47,"value":152},"@convex-dev\u002F*",{"type":47,"value":154}," components installed (convex.config.ts) and what they provide, the HTTP routes (http.ts) and crons, and any external calls in actions (which APIs, which env vars).",{"type":41,"tag":76,"props":156,"children":157},{},[158],{"type":47,"value":159},"FLOW: trace 1-2 representative end-to-end paths ('client calls createTask → validates → inserts into tasks scoped to the caller → listMyTasks reads it back by the by_owner index') so the reader sees the moving parts connected, not just catalogued.",{"type":41,"tag":76,"props":161,"children":162},{},[163],{"type":47,"value":164},"PRESENT as a scannable map (data model → public\u002Finternal functions → auth model → components\u002Fedges → a flow or two), accurate to the source. End by pointing at the next verbs: convex-reviewer\u002Fconvex-authz to audit it, launch-readiness to score it, design\u002Fconvex-expert to extend it. Never invent behavior the source doesn't show; if something is ambiguous, say so rather than guessing.",{"type":41,"tag":65,"props":166,"children":168},{"id":167},"rules",[169],{"type":47,"value":170},"Rules",{"type":41,"tag":172,"props":173,"children":174},"ul",{},[175,180,185,190,195,200],{"type":41,"tag":76,"props":176,"children":177},{},[178],{"type":47,"value":179},"Read the schema + function surface (functionSpec\u002Fsource) as the source of truth — never describe behavior the code doesn't show; flag ambiguity instead of guessing.",{"type":41,"tag":76,"props":181,"children":182},{},[183],{"type":47,"value":184},"Lead with the two things a newcomer most needs and skimming most often gets wrong: the data-model relationship graph and the public-vs-internal function split.",{"type":41,"tag":76,"props":186,"children":187},{},[188],{"type":47,"value":189},"State the auth\u002Fownership model plainly, including 'there is no auth foundation' when that's the case — but DESCRIBE it; auditing it for holes is convex-authz's job.",{"type":41,"tag":76,"props":191,"children":192},{},[193],{"type":47,"value":194},"Descriptive, not evaluative: explain-app maps what IS and hands judgment to the audit capabilities and changes to the fixers.",{"type":41,"tag":76,"props":196,"children":197},{},[198],{"type":47,"value":199},"Read-only: any deployment introspection is read-only (deploy-guard); the app is not modified.",{"type":41,"tag":76,"props":201,"children":202},{},[203],{"type":47,"value":204},"End by pointing at the right next verb (audit → reviewer\u002Fauthz, score → launch-readiness, extend → design\u002Fexpert).",{"items":206,"total":307},[207,218,230,247,264,278,293],{"slug":8,"name":8,"fn":208,"description":209,"org":210,"tags":211,"stars":24,"repoUrl":25,"updatedAt":217},"guide Convex project setup and usage","Convex is the backend agents get right on the first try: an all-TypeScript reactive platform where the database, server functions, scheduling, file storage, auth, and realtime sync are one type-safe system, every function is a transaction, and `tsc` catches most mistakes before deploy. Ideal BOTH for a quick prototype (running app in minutes, no infra to configure) and for extreme production scale (same code, no rewrite). Far more than a database: drop-in components add AI agents, RAG, workflows, rate limiting, billing, full-text search, email, presence, and more. Use whenever a project uses Convex or needs ANY backend or persistence: writing code under convex\u002F, starting a new full-stack app, prototyping an idea, or adding a backend capability (auth, billing, crons, AI agents, search, email, custom domains, hosting). Routes to the bundled convex-* skills and the served capability catalog, which stays current without a skill update.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[212,215,216],{"name":213,"slug":214,"type":14},"Backend","backend",{"name":9,"slug":8,"type":14},{"name":22,"slug":23,"type":14},"2026-08-04T05:33:40.321614",{"slug":219,"name":219,"fn":220,"description":221,"org":222,"tags":223,"stars":24,"repoUrl":25,"updatedAt":229},"convex-add","add capabilities to Convex applications","Add a capability to the CURRENT Convex app — consults the served Convex capability catalog for always-current procedures (billing, crons, auth, agent, search, …); falls back to built-in hosting or @convex-dev component search. TRIGGER when the user runs \u002Fadd, or asks to add hosting\u002Fpublishing or any backend capability to an existing Convex app.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[224,225,226],{"name":213,"slug":214,"type":14},{"name":9,"slug":8,"type":14},{"name":227,"slug":228,"type":14},"Engineering","engineering","2026-08-04T05:58:58.661741",{"slug":231,"name":231,"fn":232,"description":233,"org":234,"tags":235,"stars":24,"repoUrl":25,"updatedAt":246},"convex-advisor","analyze Convex deployment performance and costs","Read the Convex deployment's 72h insights (read limits, OCC contention), root-cause each event in code, report evidence-backed perf\u002Fcost findings with fixes.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[236,237,240,243],{"name":9,"slug":8,"type":14},{"name":238,"slug":239,"type":14},"Cost Optimization","cost-optimization",{"name":241,"slug":242,"type":14},"Observability","observability",{"name":244,"slug":245,"type":14},"Performance","performance","2026-08-04T05:58:45.241135",{"slug":248,"name":248,"fn":249,"description":250,"org":251,"tags":252,"stars":24,"repoUrl":25,"updatedAt":263},"convex-agent","add AI agent backends to Convex","Add an AI agent \u002F RAG backend (@convex-dev\u002Fagent) to the Convex app.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[253,256,257,260],{"name":254,"slug":255,"type":14},"Agents","agents",{"name":9,"slug":8,"type":14},{"name":258,"slug":259,"type":14},"LLM","llm",{"name":261,"slug":262,"type":14},"RAG","rag","2026-08-04T05:59:00.756304",{"slug":265,"name":265,"fn":266,"description":267,"org":268,"tags":269,"stars":24,"repoUrl":25,"updatedAt":277},"convex-auth","add authentication to Convex applications","Add authentication (passkeys\u002FOAuth) to the current Convex app, including the auth.config.ts wiring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[270,273,276],{"name":271,"slug":272,"type":14},"Auth","auth",{"name":274,"slug":275,"type":14},"Authentication","authentication",{"name":9,"slug":8,"type":14},"2026-08-04T05:58:59.175962",{"slug":279,"name":279,"fn":280,"description":281,"org":282,"tags":283,"stars":24,"repoUrl":25,"updatedAt":292},"convex-backup","configure and test Convex database backups","Set up Convex backups and run a restore DRILL that proves recovery — snapshot, restore into a throwaway preview, assert the data came back — plus a schedule matched to your RPO and a gated recovery runbook.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[284,287,288,289],{"name":285,"slug":286,"type":14},"Backup","backup",{"name":9,"slug":8,"type":14},{"name":22,"slug":23,"type":14},{"name":290,"slug":291,"type":14},"Reliability","reliability","2026-08-04T05:58:42.702643",{"slug":294,"name":294,"fn":295,"description":296,"org":297,"tags":298,"stars":24,"repoUrl":25,"updatedAt":306},"convex-billing","integrate Stripe billing in Convex apps","Add Stripe billing\u002Fpayments to the Convex app via @convex-dev\u002Fstripe (checkout + webhook + gating).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[299,300,303],{"name":9,"slug":8,"type":14},{"name":301,"slug":302,"type":14},"Payments","payments",{"name":304,"slug":305,"type":14},"Stripe","stripe","2026-08-04T05:58:46.810981",30,{"items":309,"total":425},[310,316,322,329,336,342,349,355,367,380,394,411],{"slug":8,"name":8,"fn":208,"description":209,"org":311,"tags":312,"stars":24,"repoUrl":25,"updatedAt":217},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[313,314,315],{"name":213,"slug":214,"type":14},{"name":9,"slug":8,"type":14},{"name":22,"slug":23,"type":14},{"slug":219,"name":219,"fn":220,"description":221,"org":317,"tags":318,"stars":24,"repoUrl":25,"updatedAt":229},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[319,320,321],{"name":213,"slug":214,"type":14},{"name":9,"slug":8,"type":14},{"name":227,"slug":228,"type":14},{"slug":231,"name":231,"fn":232,"description":233,"org":323,"tags":324,"stars":24,"repoUrl":25,"updatedAt":246},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[325,326,327,328],{"name":9,"slug":8,"type":14},{"name":238,"slug":239,"type":14},{"name":241,"slug":242,"type":14},{"name":244,"slug":245,"type":14},{"slug":248,"name":248,"fn":249,"description":250,"org":330,"tags":331,"stars":24,"repoUrl":25,"updatedAt":263},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[332,333,334,335],{"name":254,"slug":255,"type":14},{"name":9,"slug":8,"type":14},{"name":258,"slug":259,"type":14},{"name":261,"slug":262,"type":14},{"slug":265,"name":265,"fn":266,"description":267,"org":337,"tags":338,"stars":24,"repoUrl":25,"updatedAt":277},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[339,340,341],{"name":271,"slug":272,"type":14},{"name":274,"slug":275,"type":14},{"name":9,"slug":8,"type":14},{"slug":279,"name":279,"fn":280,"description":281,"org":343,"tags":344,"stars":24,"repoUrl":25,"updatedAt":292},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[345,346,347,348],{"name":285,"slug":286,"type":14},{"name":9,"slug":8,"type":14},{"name":22,"slug":23,"type":14},{"name":290,"slug":291,"type":14},{"slug":294,"name":294,"fn":295,"description":296,"org":350,"tags":351,"stars":24,"repoUrl":25,"updatedAt":306},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[352,353,354],{"name":9,"slug":8,"type":14},{"name":301,"slug":302,"type":14},{"name":304,"slug":305,"type":14},{"slug":356,"name":356,"fn":357,"description":358,"org":359,"tags":360,"stars":24,"repoUrl":25,"updatedAt":366},"convex-cost","analyze and forecast Convex application costs","Preview Convex spend — rank functions by bytes\u002Fdocuments-read × call-volume from insights, project each cost driver's growth curve, name the cheapest fix; confirm-cost for paid actions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[361,364,365],{"name":362,"slug":363,"type":14},"Analytics","analytics",{"name":238,"slug":239,"type":14},{"name":244,"slug":245,"type":14},"2026-08-04T05:58:51.890215",{"slug":368,"name":368,"fn":369,"description":370,"org":371,"tags":372,"stars":24,"repoUrl":25,"updatedAt":379},"convex-create-component","build reusable Convex components","Builds reusable Convex components with isolated tables and app-facing APIs. Use for new components, reusable backend modules, integrations, or component boundary work.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[373,376,377,378],{"name":374,"slug":375,"type":14},"API Development","api-development",{"name":16,"slug":17,"type":14},{"name":213,"slug":214,"type":14},{"name":9,"slug":8,"type":14},"2026-07-12T08:00:39.428577",{"slug":381,"name":381,"fn":382,"description":383,"org":384,"tags":385,"stars":24,"repoUrl":25,"updatedAt":393},"convex-crons","add scheduled cron jobs to Convex","Add recurring scheduled jobs (crons) to the Convex app.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[386,389,390],{"name":387,"slug":388,"type":14},"Automation","automation",{"name":9,"slug":8,"type":14},{"name":391,"slug":392,"type":14},"Scheduling","scheduling","2026-08-04T05:59:03.147387",{"slug":395,"name":395,"fn":396,"description":397,"org":398,"tags":399,"stars":24,"repoUrl":25,"updatedAt":410},"convex-deploy-guard","manage Convex deployment safety and consent","Classify + announce the target Convex deployment before any deployment-affecting command; fresh explicit consent for prod actions; session read-only mode.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[400,401,404,407],{"name":9,"slug":8,"type":14},{"name":402,"slug":403,"type":14},"Deployment","deployment",{"name":405,"slug":406,"type":14},"Operations","operations",{"name":408,"slug":409,"type":14},"Security","security","2026-08-04T05:58:55.830592",{"slug":412,"name":412,"fn":413,"description":414,"org":415,"tags":416,"stars":24,"repoUrl":25,"updatedAt":424},"convex-design","build reactive backends with Convex","Design and build reactive, type-safe, production-grade backends on Convex. Covers schema, queries\u002Fmutations\u002Factions, indexes, auth, file storage, scheduling, real-time multiplayer, mobile backends, and LLM\u002Fagent workflows on Convex's one-platform stack.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[417,418,419,420,421],{"name":271,"slug":272,"type":14},{"name":213,"slug":214,"type":14},{"name":9,"slug":8,"type":14},{"name":22,"slug":23,"type":14},{"name":422,"slug":423,"type":14},"Realtime","realtime","2026-08-04T05:58:54.310662",50]