add
Add a capability to the Convex app — consults the served Convex capability catalog for always-current procedures (billing, crons,…
Add authentication (passkeys/OAuth) to the current Convex app, including the auth.config.ts wiring.
How it fires
How this command gets triggered: by you, by Claude, or both.
/authContext preview
What this command does when you run it.
Add authentication (passkeys/OAuth) to the current Convex app, including the auth.config.ts wiring.
description: "Add authentication (passkeys/OAuth) to the current Convex app, including the auth.config.ts wiring."
Install and wire @convex-dev/auth for the current app: a provider (passkeys by default, or OAuth/password), the server config, the client hooks, and a sign-in UI — correctly, including the auth.config.ts that's the #1 real-world auth footgun.
1. Install @convex-dev/auth (pinned build) and add it to convex.config.ts. With pnpm, also `pnpm add jose` (it won't hoist otherwise); you need it for step 3. 2. Add the provider in convex/auth.ts (Passkey by default; Password or OAuth like Google on request). 3. Generate the auth keys HEADLESSLY. Do NOT run the interactive `npx @convex-dev/auth` wizard: it needs a login/TTY and hangs in non-interactive, anonymous, or CI runs (the #1 auth time-sink). Generate JWT_PRIVATE_KEY + JWKS deterministically with `jose`: node -e 'import("jose").then(async({generateKeyPair,exportPKCS8,exportJWK})=>{const k=await generateKeyPair("RS256",{extractable:true});const priv=await exportPKCS8(k.privateKey);const pub=await exportJWK(k.publicKey);process.stdout.write(JSON.stringify({JWT_PRIVATE_KEY:priv.trimEnd().replace(/\n/g," "),JWKS:JSON.stringify({keys:[{use:"sig",...pub}]})}))})' > .auth-keys.json Then set JWT_PRIVATE_KEY and JWKS (from .auth-keys.json) plus SITE_URL on the deployment. Prefer the Convex MCP `envSet` tool, one call per var, to avoid shell-quoting the multi-line key. CLI fallback: use the NAME=VALUE form (`npx convex env set "JWT_PRIVATE_KEY=$JWT"`), NEVER `env set JWT_PRIVATE_KEY "$JWT"` (the value starts with `-----BEGIN` and the CLI parses the leading `-` as an unknown flag). SITE_URL is the dev URL (e.g. http://localhost:3000). Delete .auth-keys.json after. 4. Write convex/auth.config.ts (the silently-always-signed-out bug lives here if it's wrong). 5. Wire the client: ConvexAuthProvider, the sign-in component, and route guards. If you import shadcn/ui primitives (button, input, textarea, label, and so on), add them first with `npx shadcn@latest add <name>`; a missing @/components/ui/* is a hard build error. 6. Verify a sign-in round-trips before declaring done.
Official Convex plugins for AI coding agents, providing comprehensive development tools for building reactive backends with TypeScript. Supported Agents: Cursor, Claude Code (more coming soon)
Add a capability to the Convex app — consults the served Convex capability catalog for always-current procedures (billing, crons,…
Add Stripe billing/payments to the Convex app via @convex-dev/stripe (checkout + webhook + gating).
Read the Convex deployment's 72h insights (read limits, OCC contention), root-cause each event in code, report evidence-backed…
Audit and harden Convex authorization: identity-from-arg impersonation, missing per-document ownership checks, PII-leaking public…
Set up Convex backups and run a restore DRILL that proves recovery — snapshot, restore into a throwaway preview, assert the data…