Skip to content
Convex Quickstart

Convex Quickstart Skill

Convex's official skill for turning a one-sentence app idea into a running Next.js + Convex template with an anonymous dev deployment, plus strict rules for writing Convex functions that compile and push first time.

GitHub Docs
Development
Added to Onei AI
Apache-2.0

Install

Install with the skills CLI

One command for Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf and dozens of other agents. Needs Node.js; the skill is fetched straight from convex/agent-skills.

$ npx skills add convex/agent-skills --skill convex-quickstart

Run it in a terminal. The CLI finds the agents installed on your machine, asks which ones to add the skill to, and whether to install it into the folder you ran it from or for all your projects.

Other ways to install

Copy the whole skill folder — SKILL.md and any scripts or references beside it — into ~/.claude/skills/convex-quickstart/, where Claude Code picks it up in every project. Only git is needed.

tmp=$(mktemp -d) && \
  git clone --depth 1 --branch main https://github.com/convex/agent-skills.git "$tmp" && \
  mkdir -p ~/.claude/skills && \
  cp -R "$tmp"/skills/convex-quickstart ~/.claude/skills/convex-quickstart

No scripts or references next to it? Saving the SKILL.md alone as ~/.claude/skills/convex-quickstart/SKILL.md works too.

Using another agent? Its personal skills folder
Codex
~/.agents/skills/
Cursor
~/.cursor/skills/
GitHub Copilot
~/.copilot/skills/
Gemini CLI
~/.gemini/skills/
Windsurf
~/.codeium/windsurf/skills/
OpenCode
~/.config/opencode/skills/

About

  • Scaffolds a Next.js + Convex template from a one-sentence idea and opens the dev URL
  • Confirms a plan with the user before building beyond the template
  • Fallback that writes a plain Convex project when the scaffold cannot run
  • Catches Convex pitfalls: unbounded .collect(), reserved names, httpRouter params, Node builtins
  • Self-verifies with tsc and convex dev --once before declaring work done

Convex Quickstart is the most-installed skill in Convex's official agent-skills repository. Its job is narrow: take a one-sentence idea and get a barebones Next.js + Convex app running locally, against an anonymous development deployment, as fast as possible. It deliberately stops there, with no publish step and no pre-built auth, and asks the agent to present a short plan and get confirmation before building anything beyond the template.

The workflow runs a versioned recipe (quickstart-recipe@^2) that creates the project, installs dependencies, starts the Convex backend and the web dev server, and prints the URL for the agent to open. Rules keep the agent from re-running a recipe that already succeeded, adding Postgres, Redis or Express instead of Convex primitives, or bolting on hosting and auth the user did not ask for. When the scaffold cannot run, for example in a non-interactive or sandboxed session, a degradation rule has the agent write a standard Convex project by hand, with all backend code under convex/ and no extra documentation files.

Most of the skill's value is in its compressed list of Convex correctness rules. It forbids unbounded .collect() on growing tables in favour of .withIndex() with .paginate() or .take(), points out that index callbacks only support eq, gt, gte, lt and lte, fixes import paths to ./_generated/server and ./_generated/api, and warns about reserved export names, table names starting with _, Express-style :param routes in httpRouter, and importing Node builtins outside "use node" files.

It ends with a self-verify rule: run npx tsc --noEmit and push to a deployment, using CONVEX_AGENT_MODE=anonymous only when the user is not signed in, so a logged-in user does not lose their cloud deployment. Apache-2.0.

SKILL.md

The instructions your agent loads, as published by Convex.

SKILL.md
name
convex-quickstart
description
Get a barebones Convex + web template running from a one-sentence idea.

<!-- GENERATED from convex-agents content/capabilities/quickstart.json — do not edit by hand. -->

Quickstart: a barebones Convex template, running

Stand up a barebones Next.js + Convex template from the idea, locally, with an anonymous dev deployment. Minimal by design: local dev servers, no publish step, no pre-baked auth.

Workflow
  1. Run recipe quickstart-recipe@^2 with {idea, template} (the pack fetches + caches it; pinned offline fallback). It creates the project, installs deps, starts the backend (anonymous) and the web dev server.
  2. When it prints the dev URL, open it for the user.
  3. Present a short plan and CONFIRM before building features beyond the template.
Rules
  • Never re-run the recipe if it already reported success.
  • Delegate any code under convex/ to the convex-expert capability.
  • Don't add Postgres/Redis/Express — use Convex primitives.
  • Don't add hosting/publish or pre-baked auth here — keep the template minimal unless the user asks for more.
  • DEGRADATION RULE — if the scaffold cannot run (non-interactive session, no network, a sandboxed temp dir, or the user just wants code, not an app): skip the recipe and write a standard Convex project directly. ALL backend code goes under convex/ (schema.ts, functions) — NEVER at the project root; Convex functions only run from the convex/ directory. Write ZERO scaffold/documentation files (no START_HERE.md, ARCHITECTURE.md, MANIFEST.txt, README walls) unless explicitly asked. "Build me a backend" means code, not ceremony.
  • Data access + imports — before writing any convex/*.ts: never an unbounded .collect() on a table that can grow — use .withIndex(...) and .paginate(...)/.take(n). Use an index, not .filter(), for anything that would be a SQL WHERE. .withIndex(...) callbacks only have eq/gt/gte/lt/lte — there is no .range(...) method. Imports: query/mutation/action/internalQuery/internalMutation/internalAction come from ./_generated/server; api/internal come from ./_generated/api; NEVER import from convex/server in application code. v.literal("exact value") for fixed string/enum members, not a bare string. "use node" only at the top of action-only modules — never in a file that also exports a query or mutation. Never import a Node builtin (crypto/fs/path/http/child_process/os, with or without the node: prefix) into a file lacking "use node" — including http.ts route handlers; use Web Crypto (crypto.subtle) instead of importing crypto where possible.
  • Reserved names — never export const <jsReservedWord> = ... (e.g. delete, new, class, function, return) as a query/mutation/action export name; esbuild fails to parse it. Never a table or index name starting with _ (e.g. _migrations: defineTable(...)) — _ is reserved and errors at push as TableNameReserved/IndexNameReserved.
  • HTTP routes — httpRouter has no Express-style :param segments (path: "/users/:id" only matches that literal string and is dead code); use pathPrefix and parse the trailing segment yourself. Every http.route({...}) handler: must be wrapped in httpAction(...) from ./_generated/server — a bare async (ctx, request) => {...} type-checks but isn't a valid HTTP action.
  • ctx.runQuery/ctx.runMutation/ctx.runAction need a codegen'd function reference (api.foo.bar/internal.foo.bar), never a raw imported module member (import * as queries from "./queries"; ctx.runQuery(queries.getX, ...) compiles but fails at runtime).
  • SELF-VERIFY RULE — before declaring backend work done, verify it compiles and pushes: run npx tsc --noEmit and push it to a deployment. Prefer the project's existing one; otherwise npx convex dev --once when npx convex whoami succeeds, and CONVEX_AGENT_MODE=anonymous npx convex dev --once ONLY when it does not. Forcing anonymous on a signed-in user rebinds .env.local and costs them the persistent, publishable cloud deployment they expect. Fix every error it reports before finishing — one verify round catches the wrong-relative-import / duplicate-symbol / unbalanced-paren class that otherwise breaks the deploy.
Install

Skill: Convex

by Convex

Featured

Convex's official top-level agent skill — routes an agent to the right convex-* skill for the task and to a served capability catalogue that stays current without a reinstall.

Convex's official skill for changing the schema of a deployed app without breaking it — add the field optional, backfill with @convex-dev/migrations, verify, then tighten the validator.

Convex's official skill for adding passkey or OAuth authentication to a Convex app — including the auth.config.ts wiring and a headless key-generation path that avoids the interactive wizard.

Prisma's official Prisma Client reference skill: client setup with driver adapters, CRUD and bulk queries, select/include/omit, filters, relation reads and nested writes, transactions and safe raw SQL.

Browse all skills →