关于 coral-review-source-spec
面向 Coral source spec 的代码审查技能,供评审者检查可用性、安全性、一致性和查询设计。它侧重用户可见的问题,并要求按严重程度列出含文件和行号的发现。
主要功能
- 01检查 source 的范围与适用性
- 02审查配置和文档
- 03评估查询与架构设计
- 04核对 API 语义和列定义
- 05按严重程度列出带引用的发现
适用场景
- 01评审新的 Coral source
- 02检查拉取请求中的 source 变更
- 03审查配置指引和查询设计
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ withcoral/ skills --skill coral-review-source-spec安装后在 Claude Code 中输入/coral-review-source-spec确认已加载。
附带文件agents/openai.yaml
详细介绍
Coral Review Source 规范
审核目标
将源视为产品界面进行审核。除非 CI、架构验证或 YAML 检查的失败可见且相关,否则不要将审核重点放在复述这些结果上。重点关注源对 Coral 用户和 Agent 是否易于理解、有用、安全且一致。
工作流
- 确定目标源目录或 PR 变更。
- 对于路径请求,检查
manifest.yaml、任何 README,以及相关源文档或测试。 - 对于 PR 请求,查找
sources/core/或sources/community/下的变更文件。如果 PR 没有新增或更新源,请说明此技能不适用,并按常规方式审核。
- 对于路径请求,检查
- 在判断风格前,阅读 Coral 仓库中的指南:
CONTRIBUTING.md,尤其是“Source contributions”。- 仓库中的
AGENTS.md以及更近目录中的任何AGENTS.md。 sources/core/中的类似源,以及sources/community/hn/中的社区示例。
- 与现有源的模式进行比较,而不是套用通用的 API 封装理想。查看形态相似的相邻源:无需身份验证的公共 API、令牌 API、基于 OAuth 的 API、GraphQL API、以搜索为主的 API、日志/时间序列 API,或生成的大型 API 源。
- 按代码审查风格给出结果:先列问题,按严重程度排序,并注明文件和行号。只有在问题之后才列出未决问题。如果没有实质性问题,请说明这一点,并提及剩余风险或审查盲区。
审核清单
这些检查应以源所公开 API 的权威文档为依据。
范围与适配性
- 源应放在正确的目录中:社区源应放在
sources/community/;新增sources/core/内容需事先按照CONTRIBUTING.md进行讨论。外部贡献者提交的 PR 几乎总是应该放在sources/community。 - 如果审核的是新源,确保它没有重复现有源的功能。
- 源名称应清晰、稳定、使用小写,并与用户将输入的 SQL 架构名称一致。
- 范围应足够聚焦且逻辑连贯。小型源应公开主要用户工作流,而不是覆盖所有边缘端点。
- 不得提交真实凭据、客户数据、内部测试数据或私有 URL。
- 更新源时,如果用户可见行为、表、列、输入或语义发生变化,应递增
version。
设置与文档
- 顶层
description应说明用户可以查询什么,而不只是说明封装了哪个供应商 API。 inputs应正确区分机密与变量,使用清晰的环境变量风格名称,并提供足够的提示,帮助用户首次成功使用。环境变量风格名称应带有服务专属前缀(例如GITHUB_API_TOKEN,而不是API_TOKEN)。- 无论凭据的权限是否为只读,或身份验证模式是否为可选,都应将类似凭据的输入视为机密。名称或描述中包含
API_KEY、TOKEN、ACCESS_TOKEN、PASSWORD、SECRET、APPLICATION_KEY、READ_KEY、ADMIN_KEY、私钥、Bearer 值或授权标头值的输入必须设置为kind: secret;端点、基础 URL、站点、区域、域、组织、账户、用户或电子邮件值可以设置为kind: variable。 - 不要将凭据设为带空默认值的变量,以此模拟可选身份验证。对于当前的 source-spec 功能,必须要求提供机密,或明确指出缺少可选身份验证设计;绝不要仅为支持匿名安装而暴露令牌。
- 身份验证文档应说明所需的令牌类型、作用域或权限,以及获取凭据的方式。
- 如果机密声明了
credential.methods,每种方法都必须符合供应商支持的设置路径。OAuth 方法应使用设备代码、授权码或客户端凭据流程。授权码方法必须明确设置pkce值和环回重定向 URI,使用正确的重定向端口模式,并支持 SSH、VM 和分离浏览器设置;在 CLI 等待环回回调时,用户可以粘贴最终的本地主机重定向 URL。设备代码方法必须包含device_authorization_url,不得包含重定向 URI 字段,也不得包含静态客户端机密。客户端凭据方法必须包含token_url、client.id.input、client.secret.input和client.secret.transport,且不得包含重定向 URI 字段、授权端点、设备授权端点、PKCE 或动态客户端注册。所有 OAuth 方法都必须使用正确的端点 URL、适当的客户端 ID/默认值/输入行为、适用时正确的客户端机密传输方式,以及遵循最小权限原则的作用域。对于授权码或设备代码动态客户端注册,Coral 始终注册原生客户端,source spec 无法配置web应用类型;只有当供应商支持注册刷新令牌授权时,才应包含request_refresh_token_grant: true。如果受 OAuth 保护的 Streamable HTTP MCP 源要求资源指示符,则应包含oauth.resource。OAuth URL 模板只能引用已声明的kind: variable输入,用于非机密 URL 组件。 - OAuth 方法不能替代运行时身份验证。供应商需要时,仍须通过
auth、请求标头、查询参数或正文中的字段引用已存储的机密。 - OAuth 设置文档应告知用户是否需要自己的 OAuth 客户端、适用时需要注册哪个重定向 URI、需要授予哪些作用域,以及签发刷新令牌所需的任何供应商/客户端设置。只有当供应商返回可用的
expires_in元数据时,客户端凭据方法才能依靠重新签发短时有效的访问令牌;否则,令牌过期后用户必须重新连接。对于供应商不会签发刷新令牌的其他方法,也应说明访问令牌过期后用户必须重新连接。 - 同时支持 OAuth 和粘贴令牌设置时,方法的顺序和标签应清楚表明首选路径,通常先列 OAuth,再列
source_config备用方案。 - 非简单的源应提供 README 或清单指南,说明设置方式、架构概览和查询示例。
- 行为变更、设置变更、源语义和示例都应在同一个 PR 中记录。
查询体验
- 表应体现有用的用户概念:用户、项目、频道、服务、团队、代码库或元数据等维度表都是不错的起点。
- 高基数或开销较大的端点必须要求筛选条件,或设置较保守的
fetch_limit_default值。 - 必需的筛选条件应明确列出,并在表的
description或guide中说明。 - 指南应告知用户如何开始、通过哪些 ID 进行关联,以及任何特定于提供方的时间戳或查询语法陷阱。
- 接受查询文本并返回排序候选项的提供方端点,应使用带有
search_limits、稳定结果标识符和实用候选项元数据的kind: search表函数。非检索型表函数应保留默认类型,用于带参数的操作,例如限定范围的子集合、时间范围日志、指标查询或详情操作。普通表筛选条件用于精确查找、限定范围或提供方端筛选;mode: contains仅用于子串匹配。如果将提供方原生搜索建模为筛选条件,应标记出来并要求改用kind: search函数。 - 表、表函数和列的名称应采用 snake_case,保持稳定且一目了然。
表名和表函数名在源的
不区分大小写的关系命名空间内必须唯一。表函数名必须符合 SQL
标识符语法:以 ASCII 字母或下划线开头,之后仅使用 ASCII
字母、数字或下划线。表名优先使用普通的
snake_case;为兼容性而使用带引号的 SQL 表名也有效,但除非该源有意通过生成方式创建,否则不应暴露奇特的提供方操作名称。
HTTP 和 API 语义
base_url和基于输入生成的 URL 应能处理托管版、云端、区域版或企业版等变体,同时避免让常见使用场景变得繁琐。- 身份验证标头和请求标头应符合提供方要求,必要时包括 API 版本或 Accept 标头。
- 分页模式、游标路径、页面大小限制和结果路径应反映 API 的实际响应,而非猜测的模式。
- 如果提供方的 API 行为有此需求,应提供
ok_path、error_path、allow_404_empty和速率限制提示。 - 所需的 API 权限不应超出已公开的只读功能范围。
列设计
- 列应保留稳定标识符,并在可用时包含便于人类阅读的名称。
- 不透明 ID 和非常大的数值 ID 通常应使用
Utf8;对于用户应进行数值比较或聚合的值,则使用数值类型。 - 对于重要时间,如果 Coral 能够可靠地解析或推导,应公开为
Timestamp列;仅在有用时才保留原始提供方时间戳字段。 nullable应符合提供方的实际情况。不要仅仅因为示例中包含某些字段,就将其标记为非空。- 仅当嵌套对象中的字段普遍有用时才将其扁平化;否则应公开 JSON/文本列,避免创建脆弱且价值低的列。
- 列描述应简洁,并面向用户。
风格一致性
- YAML 应易于阅读,并遵循现有清单的顺序:标识信息、输入/身份验证/基础 URL、测试查询、函数/表。
- 现有核心源使用简短的表描述,并通过
guide块提供使用建议;优先采用这种拆分方式。 - 如果提供 README,其结构应与现有源 README 相似:身份验证、相关时的速率限制、表类别或架构概览,以及示例。
- 表述应让新用户也能理解。除非 Coral 内部实现术语属于面向用户的源规范接口,否则应避免使用。
输出格式
先列出具体发现。仅在有帮助时使用严重程度标签,不要把问题埋在摘要之下。优先采用:
Findings
- High: `sources/community/foo/manifest.yaml:42` marks `created_at` non-null, but the provider omits it for imported records...
- Medium: `sources/community/foo/README.md:18` shows setup but never states the required token scope...
Open questions
- Is endpoint X intentionally omitted from the first version?
Review notes
- I treated CI lint/schema checks as out of scope unless visible in the diff.
如果没有发现问题,应直接说明,并列出任何限制,例如没有实时凭据或未检查 CI 日志。
指出源与 API 文档之间的差异时,始终附上指向确切 API 文档页面的链接。
评论
支持 Markdown