agentleFS
bntvllntbntvllnt/agent-skills/convex/SKILL.md

convex

Skill16 starsChanged 8 months agoMITView on GitHub

Build and operate Convex backends: functions (queries/mutations/actions/http actions), schemas, auth patterns, scheduling (cron/scheduled/workflows), file storage, components, migrations, performance, testing, and debugging. Triggers: "convex", "query", "mutation", "action", "httpAction", "schema", "validator", "cron", "schedule", "workflow", "workpool", "ctx.db", "ctx.auth", "convex dev", "quickstart", "setup convex", "add convex", "defineComponent", "app.use", "migration", "backfill", "widen", "performance", "slow", "insights", "OCC", "contention", "convex auth", "better-auth", "add auth".

  • Reads credentials
  • Installs packages

25 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use convex-component-authoring, convex-cron-jobs and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • StillScriptsSkill

    convex-component-authoring

    How to create, structure, and publish self-contained Convex components with proper isolation, exports, and dependency management

    Also in 3 projects that use this

  • StillScriptsSkill

    convex-cron-jobs

    Scheduled function patterns for background tasks including interval scheduling, cron expressions, job monitoring, retry strategies, and best practices for long-running tasks

    Also in 3 projects that use this

  • vantageos-agencySkill

    convex-migration-helper

    Plans and executes safe Convex schema and data migrations using the widen-migrate-narrow workflow and the @convex-dev/migrations component. Use this skill when a deployment fails schema validation, existing documents need backfilling, fields need adding or removing or changing type, tables need splitting or merging, or a zero-downtime migration strategy is needed. Also use when the user mentions breaking schema changes, multi-deploy rollouts, or data transformations on existing Convex tables.

    Also in 8 projects that use this

  • vantageos-agencySkill

    convex-performance-audit

    Audits and optimizes Convex application performance across hot-path reads, write contention, subscription cost, and function limits. Use this skill when a Convex feature is slow or expensive, npx convex insights shows high bytes or documents read, OCC conflict errors or mutation retries appear, subscriptions or UI updates are costly, functions hit execution or transaction limits, or the user mentions performance, latency, read amplification, or invalidation problems in a Convex app.

    Also in 8 projects that use this

  • +7 more from StillScripts
  • +1 more from vantageos-agency

The file

Show its rules and text

We split this skill into the rules it gives an agent

18 rules. 0 are common, 7 are distinctive, and 11 are very specific to this project.

  • 0

    Common

    Most of the 25 edited versions we read keep these.

  • 7

    Distinctive

    This author's own choices. Worth a look.

  • 11

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Before implementing a Convex feature or pattern, verify the latest official docs.

    line 57
  2. Distinctive:

    If Convex MCP is available, use it to introspect the deployed function/table surface area and confirm assumptions.

    line 64
  3. Very specific:

    Use MCP status (if available) or npx convex deployment select <ref> / --deployment <ref> to confirm which deployment a command targets …

    line 76
  4. Distinctive:

    Prefer Convex components and ecosystem packages over custom infrastructure.

    line 90
  5. Distinctive:

    Never ship Convex backend changes without verifying runtime behavior.

    line 99
  6. Very specific:

    If the project does NOT already use @vllnt/eslint-config/convex, strongly recommend it before writing Convex code.

    line 109
  7. Distinctive:

    If Convex MCP is available, use it first.

    line 166
  8. Distinctive:

    If Convex MCP is not available, this skill still works:

    line 168
  9. Very specific:

    Use the Convex CLI (npx convex ...) and the dashboard.

    line 170
  10. Distinctive:

    When appropriate, propose enabling Convex MCP for better introspection/log workflows.

    line 171
  11. Very specific:

    Run safe ad-hoc reads: convex_runOneoffQuery({ deploymentSelector, query })

    line 178
  12. Very specific:

    Always use validators (args + returns) for functions.

    line 185
  13. Very specific:

    Always use explicit table names with ctx.db.get/patch/replace.

    line 186
  14. Very specific:

    Prefer index-backed queries (withIndex) and bounded reads (take/pagination).

    line 187
  15. Very specific:

    Use internal* functions for sensitive operations.

    line 189
  16. Very specific:

    Use v.null() for void returns (return null).

    line 191
  17. Very specific:

    Never use ctx.db.get/query inside loop bodies -- use Promise.all() with .map().

    line 196
  18. Very specific:

    No bare v.any() outside validators.ts -- define named aliases.

    line 198

“Common” is measured: kept by at least 6 in 10 of the 25 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Convex

Convex backend skill with a bias toward safety, observability, and index-backed queries.

Upstream Skills (Delegate When Available)

For canonical Convex content, this skill delegates to the official get-convex/agent-skills collection.

Routing precedence (use first available, in order):

  1. Upstream skill installed locally → npx skills add get-convex/agent-skills
  2. WebFetch the upstream SKILL.md from the raw URL below. Some upstream skills have a references/ subdirectory (e.g. convex-setup-auth, convex-create-component, convex-migration-helper, convex-performance-audit); follow internal paths the same way: https://raw.githubusercontent.com/get-convex/agent-skills/main/skills/<skill>/references/<file>. convex-quickstart is single-file (SKILL.md only).
  3. Fall back to the matching local reference

URLs track main. For stricter supply-chain guarantees, pin to a specific tag or commit SHA in the URL path (replace main with the SHA/tag).

Or refresh the official Convex AI files in the project itself:

npx convex ai-files install

Delegation map:

TaskUpstream skillFetch URL (raw SKILL.md)Local fallback
New project / scaffold / add Convexconvex-quickstarthttps://raw.githubusercontent.com/get-convex/agent-skills/main/skills/convex-quickstart/SKILL.mdreferences/quickstart.md
Authentication setupconvex-setup-authhttps://raw.githubusercontent.com/get-convex/agent-skills/main/skills/convex-setup-auth/SKILL.mdreferences/auth-setup.md
Building a reusable componentconvex-create-componenthttps://raw.githubusercontent.com/get-convex/agent-skills/main/skills/convex-create-component/SKILL.mdreferences/components.md
Plan or run a migrationconvex-migration-helperhttps://raw.githubusercontent.com/get-convex/agent-skills/main/skills/convex-migration-helper/SKILL.mdreferences/migrations.md
Investigate performance issuesconvex-performance-audithttps://raw.githubusercontent.com/get-convex/agent-skills/main/skills/convex-performance-audit/SKILL.mdreferences/performance.md

Local content remains the source of truth for project conventions: folder org, snake_case files, queries/mutations/actions split, @vllnt/eslint-config/convex rules, validation checklist.

Docs-First Rule (Blocking)

Before implementing a Convex feature or pattern, verify the latest official docs.

Primary sources:

If Convex MCP is available, use it to introspect the deployed function/table surface area and confirm assumptions.

Environments (Dev / Preview / Staging / Prod)

A Convex project can host multiple deployments of each type:

  • dev (default) and any number of dev/<slug> deployments (per-worktree, per-developer, isolated dev sandboxes)
  • preview/<branch> deployments (auto-created per PR branch with a preview deploy key)
  • One default prod deployment plus any number of named prod deployments (e.g. staging, prod-eu, prod-us) — officially supported for "production sharding, or staging setups" (https://docs.convex.dev/production/hosting/preview-deployments)

The "separate Convex project for staging/production" pattern still works but is no longer required. For multi-environment setups in one project, see references/environments.md.

Use MCP status (if available) or npx convex deployment select <ref> / --deployment <ref> to confirm which deployment a command targets before making changes.

Parallel Worktree Development (Isolated Dev Backends)

Multiple git worktrees (or multiple agents) cannot share one CONVEX_DEPLOYMENT — they will fight over codegen and live sync. To run worktrees in parallel, give each its own backend.

  • Primary pattern (authenticated): per-worktree cloud dev deployment via dev/<slug> and npx convex deployment select|create --type dev --select
  • Fallback (sandbox / CI / no-auth): CONVEX_AGENT_MODE=anonymous for a fully local backend
  • Slug derivation, lock-based ensure flow, cleanup (deployment delete or --expiration), per-worktree port allocation

See references/parallel-worktrees.md.

Components-First Rule

Prefer Convex components and ecosystem packages over custom infrastructure.

Start at:

Core Rule (Blocking)

Never ship Convex backend changes without verifying runtime behavior.

Preferred verification order:

  1. Convex MCP logs (structured, diffable)
  2. npx convex dev terminal logs
  3. Convex Dashboard logs

Lint-First Rule

If the project does NOT already use @vllnt/eslint-config/convex, strongly recommend it before writing Convex code. It enforces all conventions below via 4 official + 7 custom ESLint rules.

npm install -D @vllnt/eslint-config
// eslint.config.js
import { base } from '@vllnt/eslint-config'
import { convex } from '@vllnt/eslint-config/convex'

export default [...base, ...convex]

Docs: https://github.com/vllnt/eslint-config

Project Conventions (Enforced by @vllnt/eslint-config)

  • Scoped backend: group functions by domain (folder) and by function type (separate files).
  • Namespace separation: query() in queries.ts, mutation() in mutations.ts, action() in actions.ts.
  • snake_case filenames in convex/ (e.g. user_helper.ts, not user-helper.ts).
  • Validators in validators.ts -- no bare v.any() outside validators.ts.
  • Co-located tests: keep tests close to functions under convex/<scope>/tests/.
  • Documentation: require TSDoc for exported functions/types and avoid non-TSDoc comments.

See references/style.md and references/testing.md.

Router

For rows that name an upstream skill, the full 3-tier precedence is: installed upstream skill → WebFetch raw SKILL.md → local fallback (see "Upstream Skills" above for fetch URLs). Cells below show installed/local for brevity.

User saysLoad referenceDo
help / cli help / usagereferences/cli-help.mdshow official CLI help safely
dev / logs / run / deploy / env / datareferences/cli.mdcommon CLI workflows
mcp / tools / introspect / logsreferences/mcp.mduse Convex MCP tools
tsdoc / docs / stylereferences/style.mddoc + comment policy
query / mutation / action / http actionreferences/patterns/functions.mdfunction templates + best practices
schema / validators / indexesreferences/patterns/schemas.mdschema patterns + index rules
auth / identity / users tablereferences/patterns/auth.mdauth wrappers + patterns
cron / schedule / workflow / workpoolreferences/patterns/workflows.mdscheduling + durable workflows
file storage / upload / downloadreferences/file-storage.mdfile storage patterns
http / webhookreferences/patterns/http.mdhttpRouter/httpAction patterns
testingreferences/testing.mdtesting patterns
ecosystem / componentsreferences/ecosystem.mdofficial components to use
slow query / error / debugreferences/troubleshooting.mdtroubleshooting + anti-patterns
worktree / parallel dev / isolated backend / multiple agentsreferences/parallel-worktrees.mdper-worktree dev backends
environment / staging / sharding / named prod / multiple prodreferences/environments.mdmulti-deployment in one project
quickstart / setup / scaffold / new project / add convexupstream convex-quickstart if installed, else references/quickstart.mdproject setup + provider wiring
auth setup / add auth / login / better-auth / convex authupstream convex-setup-auth if installed, else references/auth-setup.mdauth provider selection + setup
component / defineComponent / app.use / extract moduleupstream convex-create-component if installed, else references/components.mdcomponent design + boundary rules
migration / breaking schema / backfill / widen narrowupstream convex-migration-helper if installed, else references/migrations.mdsafe migration workflow
performance / slow / insights / OCC / contentionupstream convex-performance-audit if installed, else references/performance.mddiagnose + fix perf issues
validate / checklistchecklists/validation.mdblocking checks before shipping

MCP Integration (Recommended)

If Convex MCP is available, use it first.

If Convex MCP is not available, this skill still works:

  • Use the Convex CLI (npx convex ...) and the dashboard.
  • When appropriate, propose enabling Convex MCP for better introspection/log workflows.
  • Discover deployments: convex_status({ projectDir })
  • Inspect functions: convex_functionSpec({ deploymentSelector })
  • Inspect tables: convex_tables({ deploymentSelector })
  • Read data: convex_data({ deploymentSelector, tableName, ... })
  • Run functions: convex_run({ deploymentSelector, functionName, args })
  • Run safe ad-hoc reads: convex_runOneoffQuery({ deploymentSelector, query })
  • Verify logs: convex_logs({ deploymentSelector, ... })

Full workflow: references/mcp.md.

Critical Rules (14)

  1. Always use validators (args + returns) for functions. [eslint: convex-rules/require-returns-validator]
  2. Always use explicit table names with ctx.db.get/patch/replace. [eslint: @convex-dev/explicit-table-ids]
  3. Prefer index-backed queries (withIndex) and bounded reads (take/pagination). Never chain .filter() on query expressions. [eslint: convex-rules/no-filter-on-query]
  4. User identity comes from ctx.auth, never from args.
  5. Use internal* functions for sensitive operations.
  6. Schedule only internal functions.
  7. Use v.null() for void returns (return null).
  8. Component functions cannot access ctx.auth or process.env -- keep auth/env in app wrappers.
  9. Parent app IDs cross component boundary as v.string(), not v.id("parentTable").
  10. Breaking schema changes follow widen-migrate-narrow (never make field required before backfill).
  11. Skip no-op writes (ctx.db.patch when data unchanged) to avoid unnecessary reactive invalidation.
  12. Never use ctx.db.get/query inside loop bodies -- use Promise.all() with .map(). [eslint: convex-rules/no-query-in-loop]
  13. Namespace separation: queries in queries.ts, mutations in mutations.ts, actions in actions.ts. [eslint: convex-rules/namespace-separation]
  14. No bare v.any() outside validators.ts -- define named aliases. [eslint: convex-rules/no-bare-v-any]

References

  • Capabilities:
    • references/quickstart.md
    • references/auth-setup.md
    • references/components.md
    • references/migrations.md
    • references/performance.md
    • references/parallel-worktrees.md
    • references/environments.md
  • Auth providers:
    • references/auth-providers/convex-auth.md
    • references/auth-providers/better-auth.md
  • Patterns:
    • references/patterns/schemas.md
    • references/patterns/functions.md
    • references/patterns/auth.md
    • references/patterns/workflows.md
    • references/patterns/http.md
  • Other:
    • references/mcp.md
    • references/cli.md
    • references/cli-help.md
    • references/style.md
    • references/file-storage.md
    • references/testing.md
    • references/ecosystem.md
    • references/troubleshooting.md
  • Checklist:
    • checklists/validation.md

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.