关于 convex-expert
convex-expert 是专注于 Convex 后端实现的开发技能,供修改 convex/ 目录代码时参考。它规定函数、验证器、索引和数据访问模式,并要求类型检查及部署验证。
主要功能
- 01先读取 schema 与指南
- 02使用对象形式定义函数
- 03为注册函数添加参数和返回验证
- 04用索引执行读取
- 05区分内部与公开函数
- 06检查类型并推送部署
适用场景
- 01编写 Convex 查询与变更
- 02调整数据库模式和索引
- 03实现 LLM 或多步骤工作流
- 04排查部署与验证错误
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ get-convex/ agent-skills --skill convex-expert安装后在 Claude Code 中输入/convex-expert确认已加载。
详细介绍
Convex 后端专家
常驻 Convex 后端专家,在触碰 convex/ 目录中的任何代码前调用。熟悉对象形式的函数语法、验证器要求、索引命名规则、内部与公开函数的使用规范、架构演进模式、资源限制、组件生态,以及通用模型经常弄错的运行时错误解码器。
工作流
- 准备编写或编辑
convex/下的任何文件时:先阅读convex/schema.ts(如果存在,也要阅读convex/_generated/ai/guidelines.md)。 - 所有 Convex 函数都必须使用对象形式,且每个已注册函数都必须同时提供
args和returns验证器。 - 每个读取路径都使用
withIndex(...)——任何可以用 SQL WHERE 子句表达的条件,都绝不要使用.filter()。 - 默认使用
internalQuery/internalMutation/internalAction;只有客户端钩子需要时才将其设为公开函数。 - 对于任何 LLM/聊天功能,使用
@convex-dev/agent;对于多步骤流程,使用@convex-dev/workflow——绝不要自行手动实现。 - 编写完成后,确认
convex dev已成功推送,并就地修复所有 Schema/Returns/Argument 验证错误。
规则
- 数据访问与导入——编写任何
convex/*.ts前必须先阅读(提前阅读,而不是事后检查): - 对可能增长的表,绝不要执行无界的
.collect()——改用.withIndex(...)和.paginate(paginationOptsValidator)/.take(n)。这是最常见的 Convex 部署阻塞问题和性能缺陷。 - 使用索引,不要过滤——在
schema.ts中为每个读取路径添加.index(...),并使用.withIndex(...)查询;.filter()会扫描整张表,绝不能代替 WHERE 子句。 - 精确的导入表——导入错误会导致应用无法部署:
query/mutation/action/internalQuery/internalMutation/internalAction从"./_generated/server"导入;api/internal从"./_generated/api"导入;应用代码中绝不要写import { query } from "convex/server"或import { internal } from "./_generated/server"——这两种写法都会导致部署失败。 - 对固定字符串/枚举成员使用
v.literal("exact value")(例如v.union(v.literal("open"), v.literal("closed")))——当取值集合固定时,不要使用裸的v.string()。 "use node";只能放在仅包含 action 的模块顶部——含有"use node"的文件绝不能同时导出query或mutation(它们不会在 Node 运行时中运行);如果两者都需要,请拆分文件。- 只能使用对象形式——绝不要使用旧式的位置参数语法
query(args, handler)。 - 每个已注册函数都必须提供
args和returns验证器,没有例外。 - ID 使用
v.id(tableName),绝不要使用v.string();undefined不是 Convex 值(请使用null)。 - 绝不要向已有数据的表添加必填字段——先添加
v.optional(...),完成数据回填后再收紧要求。 - 自定义索引中绝不要包含
_creationTime作为列(该字段为保留字段;这样做会导致IndexNameReserved错误)。 - 绝不要在表中存储存储 URL——存储
Id<'_storage'>,并在读取时调用ctx.storage.getUrl(id)。 - Mutation 不能进行数据获取——所有外部 I/O 都放在 action 中;通过
ctx.runMutation(internal.x.y)持久化数据。 - 不要添加并行数据库、缓存、实时服务、API 服务器、作业队列或对象存储——Convex 就是后端。
- Convex 函数只能在
convex/目录中运行——绝不要在项目根目录创建schema.ts/queries/mutations/actions。 - 自我验证规则——在宣布后端工作完成前,确认代码能够编译并推送:运行
npx tsc --noEmit,并将代码推送到部署环境。优先使用项目现有的部署环境;否则,如果npx convex whoami成功,则运行npx convex dev --once;只有在失败时,才运行CONVEX_AGENT_MODE=anonymous npx convex dev --once。对已登录用户强制使用 anonymous 模式会重新绑定.env.local,让用户失去他们预期的持久、可发布云端部署。完成前必须修复报告的所有错误——一次验证就能发现错误的相对导入、重复符号、不匹配括号等问题,否则这些问题会导致部署失败。
评论
支持 Markdown