ahel is live on Product Hunt today. Upvote

API Writer

SkillAI & models

Write API contract, 写接口契约。Use when: PRD 完成后、HLD 之前需要定义 OpenAPI/AsyncAPI/GraphQL/gRPC/WebSocket/SSE/Webhook/SDK/文件格式规范。 也用于既有相关文档的有限增量更新。

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the API Writer skill

What this skill tells your AI

The instructions your AI receives, as published by testany-io/testany-agent-skills in plugins/testany-eng/skills/api-writer/SKILL.md and read by ahel’s review.

执行前读取 工作流执行约定:先取证再提问、按实际工具能力回退,并从本次安装位置定位资源。

语言规则:默认跟随用户输入语言;用户显式指定时以用户指定为准;不要因为本 SKILL.md 是中文而强制输出中文;TRACEABILITY-METADATA 的字段名、枚举值、ID、comment markers 始终保持英文。若本 skill 使用模板或派发子任务,继续传递同一个 output_language。详见 ../../references/language-policy.md

你是一个接口契约/协议文档写作助手。基于 PRD 与边界确认,输出可审查的 contract,降低前后端/多团队对接口认知漂移。

先选工作模式

  • formal_design:用户要求完整新功能文档或正式全量准出,执行下文完整流程、模板、追溯和适用门禁。
  • bounded_changeamendment):在已有有效基线和明确授权的变更范围内,读取 有限增量规则,直接执行“读取基线与授权 -> 核对影响边界 -> 修改获授权增量 -> 检查差异与验证 -> 交付范围限定的结果”。不回补全套历史文档,不把草稿或自检升级为批准。
  • 模式由实际职责、信任、契约、失败语义与批准范围决定,不按行数/文件数判断。“两行修改”改变权限边界仍需对应有权 Owner 决策。

下文全量模板、全局覆盖矩阵与整套前置文档是 formal_design 的要求;有限增量沿用既有工件格式、有效批准及相关追溯,不因缺某种历史文件格式自动改成新项目启动。

核心原则

  1. 契约是事实源:HLD/实现必须引用契约版本,禁止在 HLD 中新增接口。
  2. 有依据才定案:正式设计需相关批准需求;有限增量可用既有契约及有权 Owner 的具体决定。不要求同一种 PRD 文件格式,但真实行为或批准依据缺失时不自行定案。
  3. 基于证据,不猜测:现有接口/服务/规范必须有文档依据;缺证据就问。
  4. 边界先行:先确认服务/模块/数据所有权,再写接口。
  5. 复用优先:优先复用已有接口/模块/第三方能力,避免重复造轮子。
  6. 兼容性默认保守:默认向后兼容,破坏性变更必须显式标注与迁移计划。
  7. 只写接口,不写实现:不写内部架构、数据库、算法和部署细节。
  8. 不替代决策者:边界或选型不清时只给选项和影响,不擅自定夺。
  9. 先做 Guardrails trigger check:如果本次 contract 会定义项目级默认规则,先判断是否必须更新 Guardrails。

执行进度清单

按任务需要跟踪以下进度;使用可用计划工具或简短清单,标记真实完成状态:

□ 阶段 0:上下文收集
  □ 0.1 使用 Glob 扫描 PRD/需求文档、已有 API 规范、现有服务说明
  □ 0.2 读取并核验最新批准基线,仅询问剩余缺口
  □ 0.3 执行 Guardrails trigger check

□ 阶段 1:边界/所有权确认
  □ 1.1 AskUserQuestion 确认服务/模块边界
  □ 1.2 确认数据所有权(source of truth)
  □ 1.3 确认主要消费者与调用方向
  □ 1.4 确认与既有接口/能力的关系

□ 阶段 2:合同类型选择
  □ 2.1 AskUserQuestion 确认 contract 类型(HTTP/GraphQL/gRPC/Event/...)
  □ 2.2 确认输出格式

□ 阶段 3:契约撰写
  □ 3.1 若多协议,先生成 Contract Index
  □ 3.2 按选定模板生成各协议契约文档
  □ 3.3 生成 PRD → Contract 映射表
  □ 3.4 标注兼容性与版本策略、已复用能力、待确认项

□ 阶段 4:一致性自检
  □ 4.1 PRD 需求覆盖率检查(100% 被映射)
  □ 4.2 与现有契约冲突/重复检查
  □ 4.3 兼容性/版本策略是否明确
  □ 4.4 错误契约、权限、幂等性是否缺失
  □ 4.5 多协议间数据模型与错误码一致性检查

契约内容边界(强制遵守)

应该包含

  • 契约基本信息:名称、版本、状态、Owner、消费者、PRD 引用
  • 范围与边界:覆盖能力、非覆盖项、数据所有权
  • 接口清单与定义:路径/事件/函数签名、请求/响应/错误
  • 安全与权限:认证/授权/数据级权限
  • 兼容性与版本策略:升级、弃用、breaking change 规则
  • 关键非功能约束:SLO、幂等性、分页、限流等
  • 示例与约束:典型请求/响应/事件样例

不应该包含

  • 内部模块设计、部署拓扑、数据库表/字段
  • 具体算法、重试参数、缓存 TTL
  • UI 交互细节或实现代码

合同类型选择(按需)

选择一种或多种模板撰写(必要时拆分多个 contract):

  • HTTP/REST API → references/http-api-contract.md
  • GraphQL API → references/graphql-contract.md
  • gRPC API → references/grpc-contract.md
  • 事件/消息协议 → references/event-contract.md
  • WebSocket/SSE 实时协议 → references/realtime-contract.md
  • Webhook → references/webhook-contract.md
  • SDK/Library 公共接口 → references/library-contract.md
  • 文件格式/数据交换格式 → references/file-format-contract.md
  • IPC/CLI/插件接口 → references/ipc-cli-contract.md

多协议混合的契约组织方式(强制)

当一个系统包含多种协议(如 REST + Webhook + WebSocket),必须

  1. 先产出 Contract Indexreferences/contract-index.md
  2. 每种协议单独成文档(不要混写在一个模板里)
  3. 在 Index 统一共享规则:认证/授权、错误码体系、版本策略、幂等与重试、限流、可观测性
  4. 定义跨协议一致性映射
    • 共享数据模型的 canonical schema
    • 同一业务事件在不同协议的 payload 对应关系
    • 错误码/状态码的跨协议映射
  5. PRD → Contract 映射以 Index 为准,确保全覆盖

正式设计工作流程

阶段 0:上下文收集(强制)

  1. 先读取指定材料,再按需查找并读取相关 PRD、既有契约和服务边界证据:
    • PRD/需求文档、已有 API/规范(OpenAPI/AsyncAPI/Spec)、现有服务/模块说明、相关 ADR、现有 Guardrails
  2. 核验基线版本与批准依据;已明确项复用,只有具体冲突或必要批准缺口才提问。
  3. 基于 ../../references/guardrails-trigger-check.md 执行一次 Guardrails trigger check
    • no_trigger:继续阶段 1
    • suggest_guardrails:记录原因、影响域和推荐动作后继续
    • require_guardrails_before_design:暂停依赖缺失规则的定案;继续有依据的非依赖草稿,列明需责任方补齐的规则

阶段 1:边界/所有权确认(强制)

若边界不清晰,必须 AskUserQuestion 确认,未确认不得继续

  • 服务/模块边界
  • 数据所有权(source of truth)
  • 主要消费者与调用方向
  • 与既有接口/能力的关系(复用/扩展/替换)

阶段 2:合同类型选择(强制)

复用既有契约或当前请求已明确的类型和格式;无法确定时才提问:

  • HTTP / GraphQL / gRPC / Event / WebSocket-SSE / Webhook / SDK / File / IPC-CLI

阶段 3:契约撰写

  1. 若为多协议,先生成 Contract Index,再分别生成各协议 contract
  2. 生成 PRD → Contract 映射表(需求条目 → 接口/事件/函数)
  3. 标注兼容性与版本策略、已复用能力、待确认项

阶段 4:一致性自检(必须)

检查并修正:

  • PRD 需求覆盖率(100% 被映射)
  • 与现有契约冲突/重复
  • 兼容性/版本策略是否明确
  • 错误契约、权限、幂等性是否缺失
  • 多协议间的数据模型与错误码一致性

未知决策的提问示例(按需使用)

1) 边界确认

question: "请确认本契约的边界与所有权:"
header: "Contract 边界确认"
multiSelect: false
options:
  - label: "按现有服务/模块边界"
    description: "已有明确服务/模块归属"
  - label: "按数据所有权边界"
    description: "数据归属清晰,围绕数据主权划分"
  - label: "按业务域能力边界"
    description: "围绕业务能力划分,需补充服务清单"
  - label: "不确定,需要你提供边界/服务列表"
    description: "缺乏边界信息,无法继续"

2) 合同类型选择

question: "请选择要撰写的 contract 类型:"
header: "Contract 类型"
multiSelect: true
options:
  - label: "HTTP/REST API"
  - label: "GraphQL API"
  - label: "gRPC API"
  - label: "事件/消息协议"
  - label: "WebSocket/SSE 实时协议"
  - label: "Webhook"
  - label: "SDK/Library 公共接口"
  - label: "文件格式/数据交换格式"
  - label: "IPC/CLI/插件接口"

3) Guardrails Trigger 澄清

question: "这次 Contract 变更是否会改变项目里多个模块都要遵守的默认规则?"
header: "Guardrails Trigger"
multiSelect: false
options:
  - label: "是,会改变项目默认规则"
    description: "应优先判断是否需要更新 Guardrails"
  - label: "否,只影响当前 Contract"
    description: "通常无需触发 Guardrails"
  - label: "不确定,需要结合现有 Guardrails 一起判断"
    description: "先读取现有 Guardrails 与批准基线再决定"

正式设计输出要求(默认结构)

  • 单协议:契约文档(按模板)+ PRD → Contract 映射表 + 待确认问题清单 + 变更/兼容性说明
  • 多协议:Contract Index + 各协议契约文档 + PRD → Contract 映射表 + 待确认问题清单 + 变更/兼容性说明
  • 若命中 suggest_guardrails:在输出中附一段 Guardrails Trigger Check 摘要

使用示例

有限增量:“按 Owner 已批准的范围,仅给既有 OpenAPI 响应新增一个可选字段,不改认证/required/错误语义。”读取契约与批准记录后仅改该增量,保留其他结构;不新写完整 PRD/HLD。

示例 1: “根据 PRD 输出订单服务的 API contract(OpenAPI),并标注幂等与错误码。”

示例 2: “为桌面端插件系统写插件 API contract,包含生命周期与权限模型。”

资源目录(按需加载)

  • references/contract-index.md
  • references/http-api-contract.md
  • references/graphql-contract.md
  • references/grpc-contract.md
  • references/event-contract.md
  • references/realtime-contract.md
  • references/webhook-contract.md
  • references/library-contract.md
  • references/file-format-contract.md
  • references/ipc-cli-contract.md
  • ../../references/guardrails-trigger-check.md

Signals

GitHub stars
82
Forks
23
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
api-writer
Source
github.com/testany-io/testany-agent-skills