{ "listing": { "skills": [ { "path": "skills/add/SKILL.md", "name": "add", "description": "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 /add, or asks to add hosting/publishing or any backend capability to an existing Convex app.", "files": { "skills/add/SKILL.md": "029a0d39e09be7f4550996fecaaae19f48b20227cf62e92b1542d1e8e83faa91" } }, { "path": "skills/agent/SKILL.md", "name": "agent", "description": "Add an AI agent / chatbot / RAG backend on Convex with @convex-dev/agent (durable threads, messages, tools, vector search). TRIGGER when the user wants an AI assistant/chatbot/agent or 'chat with my docs' feature. Calls models through the Convex AI Gateway — no provider key to manage.", "files": { "skills/agent/SKILL.md": "3efa7c2cc62d19c56fa4350ddf7c2590836aa608235f7fe16d29edb460cfc02c" } }, { "path": "skills/auth/SKILL.md", "name": "auth", "description": "Add authentication to the current Convex + web app — passkeys by default (OAuth/password optional), wired end to end incl. the auth.config.ts that's the #1 auth footgun. TRIGGER when the user wants login / sign-in / accounts / passkeys / OAuth for an existing app.", "files": { "skills/auth/SKILL.md": "0086a9d6f4e2fbd1eab22413d9b99463b22f93fbf1b236b917d1effc410184b4" } }, { "path": "skills/billing/SKILL.md", "name": "billing", "description": "Add Stripe billing/payments/subscriptions to a Convex app via @convex-dev/stripe — checkout action, auto-verified webhook, server-side subscription gating. TRIGGER when the user wants payments/billing/subscriptions/a paywall/Stripe.", "files": { "skills/billing/SKILL.md": "dd100b610b077a8595e2c64ff14d3136f45d67a39555b7ba5cc54aaa28e8f7ba" } }, { "path": "skills/convex-authz/SKILL.md", "name": "convex-authz", "description": "Audit and harden a Convex app's authorization: identity-from-arg impersonation, missing per-document ownership checks, public queries leaking data by a client-supplied id, and writes into a parent/container the caller doesn't own. Scans for the 4 shapes, applies requireIdentity/requireOwner, verifies with tsc. TRIGGER on 'secure my app', 'audit auth/authz', 'who can access this data'. SKIP when there is no convex/ directory.", "files": { "skills/convex-authz/SKILL.md": "ec017427739a958b7577bfde7b97e33b8e99a64f441f0f7ba7f2079b9e007a3f" } }, { "path": "skills/crons/SKILL.md", "name": "crons", "description": "Set up recurring scheduled jobs (crons) on Convex — digests, cleanups, polling, retries. TRIGGER when the user wants a recurring/scheduled task ('every day/hour', cron, periodic cleanup). Targets internal functions, idempotent handlers.", "files": { "skills/crons/SKILL.md": "d152a0e5e2d9e96f4298f6eb08551309d1f577261e556ed4026ae0d08164a954" } }, { "path": "skills/design/SKILL.md", "name": "design", "description": "Design and build reactive, type-safe, production-grade backends on Convex. Covers schema, queries/mutations/actions, indexes, auth, file storage, scheduling, real-time multiplayer, mobile backends, and LLM/agent workflows on Convex's one-platform stack.", "files": { "skills/design/LICENSE.txt": "79aaec53ef1333544088fe80ecb8ec70f2b84f60c0c4157240df0911cf9696c7", "skills/design/SKILL.md": "7b287be123aa10096f4449b63b473b9c10a7b23b593117cb72d36698c5e68c62" } }, { "path": "skills/domains/SKILL.md", "name": "domains", "description": "Wire a domain the user ALREADY OWNS (GoDaddy/Namecheap/Cloudflare/…) to their Convex app: exact DNS records, custom-domain attachment, auth-origin rebind. TRIGGER when the user owns a domain and wants it pointing at their app ('point my domain at this', 'use my own domain', 'set up example.com'). Never asks for registrar credentials.", "files": { "skills/domains/SKILL.md": "18b053c9069e79d287c9a4a58df993351cfd561ef8efe34765a2ca4913a8ce27" } }, { "path": "skills/env/SKILL.md", "name": "env", "description": "Set + wire deployment env vars / secrets (API keys) for a Convex app — stored in Convex env, read in actions, never hardcoded. TRIGGER when the user needs an API key/secret/env var ('add my OpenAI key', 'set an env var').", "files": { "skills/env/SKILL.md": "9480271a69aab3bbe330e38af0a3bafd7f0e1f6825163d2bacb3910c76cee980" } }, { "path": "skills/improve-convex-plugin/SKILL.md", "name": "improve-convex-plugin", "description": "Send THIS coding session's transcript (Claude Code or Codex) to the Convex quickstart backend (anteater) for an AI post-mortem that improves the whole system — the runbook, bootstrap script, and skills. Use after a quickstart run (success or failure), or whenever the user wants to \"send feedback\", \"report how that went\", or \"help improve the quickstart\".", "files": { "skills/improve-convex-plugin/SKILL.md": "ccbc1ccbc1988ce7ca0592ed6cb288aef6fc95bd761c65cee913080ab1f5114c" } }, { "path": "skills/labs-quickstart/SKILL.md", "name": "labs-quickstart", "description": "LABS — the FULL Convex quickstart: scaffold a Next.js + shadcn app from one sentence with passkey sign-in and an in-app feedback panel pre-baked, build it live, then PUBLISH to a public convex.app URL (with the user's confirmation).", "files": { "skills/labs-quickstart/SKILL.md": "23332ce7c6d3462ee487eb5c2796374d0a4aeb7cb4c61a0c9444baf4fa7433f3" } }, { "path": "skills/migrate/SKILL.md", "name": "migrate", "description": "Safely migrate the schema + backfill data on a deployed Convex app with @convex-dev/migrations. TRIGGER when changing the schema on a live app, backfilling data, or after a schema-validation error from a change. SKIP a fresh local app.", "files": { "skills/migrate/SKILL.md": "fe502b63e902be29b565be568b7577f23de6035a4a9e51158b2cfe7bb7696753" } }, { "path": "skills/quickstart/SKILL.md", "name": "quickstart", "description": "Scaffold a brand-new Convex app from a one-sentence idea and build it live — a running Next.js + shadcn app with `convex dev` + `next dev` and error watchers already armed, going from idea to running app in under a minute (locally).", "files": { "skills/quickstart/SKILL.md": "ffdf43071a8a1c47ce1d8aa990567782713e52a1aa14d44b6de21af6ee60ea3c" } }, { "path": "skills/seed/SKILL.md", "name": "seed", "description": "Seed the Convex database with starter/fixture data or import an existing dataset (CSV/JSON). TRIGGER when the user wants sample/seed data or to import a dataset into Convex. Idempotent, schema-matching.", "files": { "skills/seed/SKILL.md": "21f690bbc22b7ee0d511cec73552362cb44209d0bb5720641a58c6f25b79bd8a" } }, { "path": "skills/suggest/SKILL.md", "name": "suggest", "description": "Proactively suggest the right Convex component when the user hand-rolls what already exists: setInterval polling → crons, counter increments → sharded-counter, .collect() counts → aggregate, email → resend, DB-counter rate limiting → rate-limiter, uploads → storage, search, presence, multi-step actions → workflow, vector DB → rag, collaborative editing → prosemirror-sync. TRIGGER on noticing the pattern in a Convex app, AFTER completing the user's request. NEVER for non-Convex code.", "files": { "skills/suggest/SKILL.md": "3c7dffe23fb8ba140f69bd03e3b8e97ed1912813a9cbbe08a2a5f43cf9b4336e" } }, { "path": "skills/test/SKILL.md", "name": "test", "description": "Generate tests for Convex functions with convex-test (queries/mutations/auth/scheduling, in-memory). TRIGGER when the user wants tests / a test suite for their Convex backend / 'how do I test this'.", "files": { "skills/test/SKILL.md": "82ac0dd31c3d82822f28f4932edfe226a9044488415383702871893e947279c0" } }, { "path": "skills/workflow/SKILL.md", "name": "workflow", "description": "Build a durable multi-step pipeline on Convex where each step runs in order and is retried independently on failure (transcribe→summarize→email, ETL, order fulfillment, any 'do A then B then C, retry each' job). Use @convex-dev/workflow — do NOT hand-roll a chain of scheduler calls or a custom jobs table. TRIGGER on multi-step / pipeline / 'retry each step' / long-running orchestration requests.", "files": { "skills/workflow/SKILL.md": "0bb64f6934a4b072635135ba7763f4e095624e6816386176eb9c74e0715f9206" } } ], "hooks": [ { "path": "hooks/hooks.json", "sha256": "c99e2d9a8b52620b1513ef36949d1c63c0a734d498fb6c93a4cc3ec190fb893b", "event": "SessionStart", "matcher": null, "declaration": { "type": "command", "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/session-start.mjs\"" }, "executed": false }, { "path": "hooks/hooks.json", "sha256": "c99e2d9a8b52620b1513ef36949d1c63c0a734d498fb6c93a4cc3ec190fb893b", "event": "SessionStart", "matcher": null, "declaration": { "type": "command", "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/convex-freshness.mjs\"", "timeout": 10 }, "executed": false }, { "path": "hooks/hooks.json", "sha256": "c99e2d9a8b52620b1513ef36949d1c63c0a734d498fb6c93a4cc3ec190fb893b", "event": "PreToolUse", "matcher": "Write|Edit|MultiEdit", "declaration": { "type": "command", "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/convex-lint.mjs\"" }, "executed": false }, { "path": "hooks/hooks.json", "sha256": "c99e2d9a8b52620b1513ef36949d1c63c0a734d498fb6c93a4cc3ec190fb893b", "event": "Stop", "matcher": null, "declaration": { "type": "command", "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/convex-typecheck.mjs\"", "timeout": 180 }, "executed": false } ], "executions": [] } }