--- name: convex description: Routes Convex work to the right builder skill and covers the handful of rules that apply everywhere: validators on every function, withIndex over filter, idempotent mutations, internal functions for scheduling. Use when a task mentions Convex and no more specific skill matches, or as the first stop before picking one. --- # Convex Start here, pick the matching skill below, and load it. If nothing matches, the rules at the bottom still apply. ## Pick a skill | Skill | Load when | | --- | --- | | convex-best-practices | general patterns, project structure, "is this the Convex way" | | convex-functions | queries, mutations, actions, internal functions, error handling | | convex-schema-validator | tables, indexes, validators, `v.*` types, schema changes | | convex-realtime | useQuery, optimistic updates, pagination, presence, rerender churn | | convex-http-actions | webhooks, REST endpoints, `convex/http.ts`, Stripe or Clerk callbacks | | convex-file-storage | uploads, upload URLs, serving files, storage cleanup | | convex-cron-jobs | crons.ts, runAfter, runAt, batching, a cron that is not firing | | convex-migrations | backfills, renaming fields, schema evolution with live data | | convex-agents | AI agents, threads, tools, streaming, RAG with `@convex-dev/agent` | | convex-component-authoring | building a reusable component package, `defineComponent` | | convex-security-check | fast pre ship audit: auth on public functions, exposed data | | convex-security-audit | deep review: authorization model, injection, rate limits, secrets | | avoid-feature-creep | scope pushback, MVP cuts, "just one more feature" | | project-workflow | multi step tasks, PRDs in prds/, task.md, plans for review | | project-docs | syncing task.md, changelog.md, files.md with shipped code | | git-safety | revert, undo, reset, checkout, clean, stash, force push | Two skills often apply at once. Load the domain skill for the code and the process skill for the workflow, for example convex-functions plus project-workflow. ## Rules that hold everywhere - Every function declares `args` and `returns` validators, including internal ones. - Read through `withIndex`. `.filter()` on a table scan is a bug waiting for data. - Mutations are idempotent. Check current state, return early when there is nothing to do. - Schedule and cron only `internal.*` functions. Never `api.*`. - Never call `Date.now()` inside a query. Pass time in as an argument. - Use `npx convex dev` for development. Do not run `npx convex deploy` unless asked. - Fetch https://docs.convex.dev/llms.txt before trusting memory about an API. ## Do not - Edit anything under `convex/_generated/`. - Use `crons.daily`, `crons.hourly`, or `crons.weekly`. Use `crons.interval` or `crons.cron`. - Put `"use node"` in a file that also exports queries or mutations. - Run git commands that discard work without loading git-safety first. ## Docs - https://docs.convex.dev/llms.txt - https://docs.convex.dev/understanding/best-practices - https://docs.convex.dev/functions