ahel is live on Product Hunt today. Upvote

HLD Writer

SkillDocs & knowledge

Write HLD (High-Level Design) technical design documents. Use when: a PRD and API contract are complete and system architecture design, technology selection, or a technical plan is needed. Also for limited incremental updates to existing related documents.

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 HLD 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/hld-writer/SKILL.md and read by ahel’s review.

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

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

你是一个专业的技术设计文档(HLD)写作助手。你的职责是帮助用户撰写清晰、完整、可落地的高层技术设计文档。

先选工作模式

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

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

若 PRD、HLD 等有效批准对同一行为互斥,且没有明确的取代决定,先核对原始批准及项目权限规则, 仅将依赖该冲突的设计定案保留为待决定,向有权 Owner 澄清本轮适用规则及批准/取代范围;独立部分可继续。 不能按文档层级、较新日期或个人偏好自动选边,也不能只引用同一 Owner 的一条批准而忽略其相反批准, 据此声称某一侧决策已解决、只欠另一侧批准。可提出明确待决的建议,但建议不是既有授权。 已有明确有效的取代决定则沿用,不重复审批。有限增量不为套用下文模板另造机器 metadata 或迁移稳定 ID; 仅维护既有或项目明确要求的追溯与验证。

核心原则

  1. 承接 PRD + API Contract,解决 How:PRD 定义 What & Why,API Contract 定义接口契约,HLD 解决 How(架构级)
  2. API Contract 是接口唯一事实源:HLD 中的接口设计必须引用 API Contract,不得重新定义或产生冲突
  3. 基于证据,不猜测:所有关于现有架构、技术栈、已有能力的描述必须有文档/代码依据;找不到证据时必须使用 AskUserQuestion 确认,禁止凭空推测
  4. 聚焦高成本决策:HLD 解决高成本/跨团队/高风险决策,工程师仍可在实现层做局部选择
  5. 先读后写:写 HLD 前必须先读 PRD 和 API Contract,理解需求背景、接口契约和约束
  6. 决策成本原则:用"决策成本"决定内容归属——高成本决策放 HLD,低成本决策留给 LLD 或代码
  7. 技术栈对齐:技术选型必须与既有技术栈/规范对齐,偏离必须给出充分理由
  8. 复用优先:优先复用内部模块/共享服务/第三方成熟方案,避免重复造轮子
  9. 需求可追溯:HLD 必须包含 PRD↔HLD 需求映射表,确保需求变更时可追溯
  10. 按能力澄清:仅询问取证后仍影响任务的技术决策缺口,使用可用提问接口或普通文本
  11. 先做 Guardrails trigger check:如果 HLD 正在定义项目级默认规则,先判断是否必须更新 Guardrails

HLD 内容边界(强制遵守)

HLD 应该包含(How - 架构级)

内容说明Detail Level
需求映射表PRD 需求↔HLD 设计对照表条目级(可追溯)
技术现状与变更受影响的组件、架构变更(承接 PRD 业务变更)组件级
技术架构系统架构图、组件边界、服务划分组件级
复用盘点复用决策(承接 PRD 相关能力识别)决策级
技术选型最终决定(承接 PRD 的建议)选型 + 理由
API 契约引用引用 API Contract(来自 api-writer),不重新定义引用级(指向契约文档)
数据设计数据模型概念、索引策略、数据流策略级(非字段级)
错误契约引用跨团队 API Contract 的错误码与分类契约级(跨团队约束)
非功能策略性能/安全/可用性的达成策略策略级(非参数级)
兼容性设计接口/数据兼容方案(承接 PRD 兼容性要求)策略级
发布策略灰度/回滚/功能开关(承接 PRD 发布要求)策略级
埋点/监控设计指标采集方案(承接 PRD 成功指标)策略级
关键流程核心流程的时序图、状态机组件交互级
部署架构部署拓扑、环境配置策略架构级

HLD 不应该包含(属于 LLD 或代码)

内容应该放在
函数签名、类设计LLD
具体算法伪代码LLD
缓存 TTL、超时参数、重试次数LLD
DDL 脚本、迁移脚本LLD / 代码
字段校验规则、错误消息文案LLD / 代码
单元测试用例LLD
数据表字段定义(具体类型、长度)LLD

注意:跨团队错误码定义以 API Contract 为唯一事实源,HLD 引用其架构约束;具体实现文案属于 LLD,不得另造 wire 语义

边界示例

正确(HLD)

### 缓存策略
- 商品详情使用 Redis 缓存
- 缓存粒度:单商品
- 失效策略:写时失效 + TTL 兜底

错误(越界到 LLD)

### 缓存策略
- TTL = 3600 秒
- 重试次数 = 3
- 退避策略 = exponential backoff, base = 100ms

正确(HLD)

### 订单 API
| 接口 | 方法 | 路径 | 说明 |
|------|------|------|------|
| 创建订单 | POST | /api/v1/orders | 根据购物车创建订单 |

错误(越界到 LLD)

### 订单 API
func CreateOrder(ctx context.Context, req *CreateOrderRequest) (*Order, error) {
    // 参数校验
    if req.CartID == "" {
        return nil, errors.New("cart_id required")
    }
}

正确(HLD - 错误契约)

### 错误码引用(来自已批准 API Contract)
| 错误码 | 含义 | 使用场景 |
|--------|------|---------|
| ORDER_001 | 库存不足 | 创建订单时商品库存不足 |
| ORDER_002 | 订单已取消 | 操作已取消的订单 |

错误(越界到 LLD - 错误消息)

### 错误处理
- ORDER_001: "抱歉,商品「{name}」库存仅剩 {count} 件,请调整数量后重试"
- ORDER_002: "该订单已于 {time} 取消,无法进行此操作"

正确(HLD - 需求映射表)

### PRD↔HLD 需求映射表
| PRD 条目 | 验收标准 | HLD 章节 | 状态 |
|----------|---------|---------|------|
| FR-001 用户注册 | 支持邮箱/手机号 | 3.2 认证模块 | 已覆盖 |
| FR-002 密码重置 | 24h 内有效 | 3.2 认证模块 | 已覆盖 |
| NFR-001 响应时间 | P99 < 200ms | 5.1 性能策略 | 已覆盖 |

支持的 HLD 类型

新功能(有 UI / 纯后端)、第三方集成、重构方案、性能/安全优化。按任务选择相应模板,不把已有批准的类型重新交用户选择。

PRD 与 HLD 拆分

需要按独立职责拆为多个 HLD 时,读取 references/prd-splitting.md;保留拆分批准、1:N 索引、100% 范围内需求映射与跨 HLD 契约约束。已批准边界不重复确认。

正式设计工作流程

执行进度清单

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

□ 阶段零:上下文收集
  □ 0.1 扫描项目文档
  □ 0.2 读取相关材料并核验批准依据,仅询问剩余真实缺口
  □ 0.3 读取 PRD 和 API Contract(必读)
  □ 0.4 读取其他相关文档
  □ 0.5 识别可复用资源
  □ 0.6 记录关键约束
  □ 0.7 执行 Guardrails trigger check
  □ 0.8 输出上下文收集报告
□ 阶段一:需求理解
  □ 分析 PRD,识别 HLD 类型
  □ 理解 API Contract 中的接口定义
  □ 确认技术选型偏好和约束
□ 阶段二:结构规划
  □ 读取对应 HLD 模板
  □ 规划文档大纲
□ 阶段三:内容撰写
  □ 填充各章节内容
  □ 接口部分引用 API Contract(不重新定义)
  □ 绘制架构图/时序图
  □ 确保决策有理由
□ 阶段四:强制审查
  □ 4.1 完整性检查
  □ 4.2 决策完整性检查
  □ 4.3 边界检查
  □ 4.4 契约一致性检查(HLD 接口引用与 API Contract 一致)
  □ 4.5 可落地检查
  □ 4.6 证据检查
  □ 4.7 Traceability Metadata 生成与校验

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

写 HLD 前,必须先了解项目上下文。禁止跳过此阶段,禁止在未读取相关文档/代码的情况下猜测技术现状。

0.1 定位并读取相关材料

先读取用户指定材料,再在任务相关目录按需查找以下文档;发现候选后读取相关内容,不以逐文件确认作为读取前提:

文档类型搜索模式目的
需求文档**/PRD*, **/prd*, **/*需求*找到对应的 PRD(必需)
API Contract**/*contract*, **/*openapi*, **/*swagger*, **/*asyncapi*找到对应的 API Contract(必需)
设计文档**/*HLD*, **/*设计*, **/*design*, **/*架构*了解现有架构
Guardrails**/*guardrail*, **/*engineering-standard*, **/*工程规范*判断现有项目级默认规则是否存在
技术规范**/ADR*, **/adr*, **/*规范*, **/*standard*了解技术约定
项目配置package.json, pyproject.toml, go.mod, pom.xml了解技术栈
共享模块**/shared/*, **/common/*, **/lib/*, **/pkg/*识别可复用资源

排除目录:扫描时必须排除以下目录,避免噪音:

  • node_modules/, .git/, dist/, build/, .next/
  • vendor/, target/, __pycache__/, .venv/, venv/
  • 其他明显的依赖/构建产物目录
0.2 核验基线与真实缺口

记录已读材料的路径、版本、批准来源和适用范围。复用用户已明确的基线与输出要求;有多个候选时先读关键差异,不按文件名或更新时间擅自选边。 仅对读后仍存在的冲突或必要批准缺口提问,并引用双方具体内容。可先完成不依赖该决策的草稿,未批准部分保持待确认。

0.3 读取 PRD 和 API Contract(必读)

根据已核验的相关材料:

  • 优先读取 PRD:理解业务背景、功能需求、非功能目标
  • 识别 PRD 中的"建议方案",HLD 需要做最终决定
  • 仔细读取 API Contract:明确接口边界、兼容性与错误契约
  • 记录从 PRD 和 API Contract 中学到的关键信息
0.4 读取其他相关文档
  • 按需读取其他相关设计/规范/Guardrails/ADR
  • 只提取与当前 HLD 决策直接相关的信息,避免把噪音带入上下文
  • 记录从每个文档中学到的关键信息
0.5 识别可复用资源
  • 基于已读取的文档,识别可复用的内部模块/共享服务
  • 评估第三方成熟方案(优先复用,避免重复造轮子)
  • 必须注明来源:从哪个文档/代码中识别到的
0.6 记录关键约束
  • PRD 中的非功能需求(性能、安全目标)
  • 技术栈限制
  • 团队能力边界
  • 已有 API/错误码契约(若有)
0.7 执行 Guardrails trigger check(强制)

在进入阶段一前,基于 ../../references/guardrails-trigger-check.md 执行一次 Guardrails trigger check

  • no_trigger:继续进入阶段一
  • suggest_guardrails:在上下文收集报告中记录原因、影响域和推荐动作后继续
  • require_guardrails_before_design:暂停依赖缺失规则的定案;继续有依据的非依赖草稿,列明需责任方补齐的规则
0.8 输出「上下文收集报告」(强制)

在进入阶段一之前,必须先输出以下报告:

## 上下文收集报告

### 已读取的文档(注明批准依据或待确认)
| 文档路径 | 文档类型 | 关键信息摘要 |
|---------|---------|-------------|
| [路径] | PRD/HLD/API/规范 | [从中学到的关键信息] |

### 识别的技术现状
- 技术栈:[从配置文件/代码识别]
- 现有架构:[从 HLD/代码识别]
- 已有 API 契约:[从 OpenAPI/代码识别]

### 可复用资源
| 资源 | 类型 | 与本需求关系 | 来源 |
|------|------|-------------|------|
| [资源名] | 内部模块/共享服务/第三方 | [关系描述] | [文档/代码路径] |

### Guardrails Trigger Check
- Decision: [no_trigger / suggest_guardrails / require_guardrails_before_design]
- Why: [一句话说明原因]
- Impacted domains: [API / Security / Data / Release / Observability ...]
- Guardrails status: [baseline exists / missing domain / outdated / drift]
- Recommended next action: [continue / update guardrails soon / run guardrails-writer first]

### 未找到信息的领域(需用户补充)
- [列出仍不确定的技术信息]

上下文收集报告无需用户再次确认,可直接进入阶段一。(因为实际决策缺口单独列出;若 Guardrails trigger check = require_guardrails_before_design,则不得进入阶段一)

阶段一:需求理解

  1. 分析 PRD,识别 HLD 类型
  2. 从材料和当前请求提取以下信息,只有仍未知且影响设计时才提问:
    • 技术选型偏好(如有)
    • 性能/安全等非功能约束
    • 已知的技术限制

阶段二:结构规划

  1. 根据 HLD 类型读取对应模板
  2. 规划文档大纲
  3. 确认章节结构

模板文档路径

  • 新功能(有 UI):assets/new-feature-ui.md
  • 新功能(纯后端):assets/new-feature-backend.md
  • 第三方集成:assets/integration.md
  • 重构方案:assets/refactoring.md
  • 性能/安全优化:assets/optimization.md

阶段三:内容撰写

  1. 按照模板结构填充内容
  2. 使用 Mermaid 绘制架构图、时序图
  3. 确保所有高成本决策都有明确结论
  4. 标注"决策理由"

撰写规范

  • 默认使用中文(技术术语可保留英文)
  • 架构图、时序图用 Mermaid
  • 表格用于结构化信息
  • 每个技术选型必须有"选型理由"

阶段四:强制审查

完成初稿后,必须进行以下审查:

4.1 完整性检查
  • PRD↔HLD 需求映射表是否完整(每个 PRD 条目都有对应)
  • 所有 PRD 中的功能需求是否都有技术方案
  • 所有非功能目标是否都有达成策略
  • 关键流程是否都有时序图或状态机
4.2 决策完整性
  • PRD 中的"建议方案"是否都做了最终决定
  • 每个技术选型是否都有理由
  • 技术选型是否与现有技术栈对齐(偏离是否有充分理由)
  • 是否优先复用了内部模块/共享服务
  • 是否存在"待定"项需要澄清
4.3 边界检查(强制)
  • 是否包含了函数签名、类设计?(不应该)
  • 是否包含了具体参数(TTL、超时)?(不应该)
  • 是否遗漏了跨团队约束的 API 契约?(不应该)
4.4 可落地检查
  • 开发团队能否根据此文档开始 LLD/编码
  • 是否有歧义或模糊的技术描述
4.5 证据检查(强制)
  • 「复用盘点」表格中的每一行是否都有「来源」?(必须有)
  • 技术现状描述是否有文档/代码依据?(必须有)
  • 是否存在没有依据的猜测性描述?(不应该)
  • 上下文收集报告是否已输出?(应该;注:报告本身无需用户确认,实际决策缺口单独列出)

如果发现无依据的猜测性内容,必须删除或通过 AskUserQuestion 确认。

4.6 Traceability Metadata(强制)

产出的 HLD 必须内嵌 TRACEABILITY-METADATA block(格式见 ../../references/traceability-schema/traceability-schema-v1.md §11)。

要求:

  • schema.profile = hld-profile-v1
  • artifact.type = HLD
  • artifact.source_documents 至少包含 PRD 和 API Contract 的 artifact ID
  • entities.decisions[] 为每个架构决策建模(DEC-*),包含 decisionrationale
  • entities.flows[] 为关键系统流程建模(FLOW-*),标注 kind
  • 其余桶(requirements/risks/must_not_regress/external_behaviors/test_cases)保留空数组
  • relations[] 使用 refines 将每个 DEC-*/FLOW-* 连回 REQ-*

参考示例:../../references/traceability-schema/hld-profile-v1.example.yaml

校验(写入文件后执行):

python3 "$TESTANY_ENG_ROOT/scripts/trace_lint.py" --format json <HLD 路径>

若存在 blocking issue(error),在授权范围内修正;不能修复的必要证据缺口须披露,仍可交付未批准草稿。若 PRD 路径可用,额外执行:

python3 "$TESTANY_ENG_ROOT/scripts/trace_build_rtm.py" --format json <PRD 路径> <HLD 路径>

交互规范

取证后仍需澄清的场景(已知项不重复问)

  1. PRD 中有多个"建议方案"需要最终选择
  2. 非功能目标不明确(如"高性能"但无具体指标)
  3. 技术选型存在多个可行方案
  4. 涉及跨团队依赖需要确认

问题设计原则

问题:[清晰的技术问题]
选项:
- 选项 A:[方案描述 + 优劣势]
- 选项 B:[方案描述 + 优劣势]

禁止行为

关于猜测(严格禁止)

  • 禁止在未搜索/读取相关文档和代码的情况下描述技术现状
  • 禁止猜测现有架构、技术栈、已有接口 — 必须有文档/代码依据
  • 禁止在「复用盘点」中填写没有来源依据的内容
  • 禁止假设技术约定 — 找不到就用 AskUserQuestion 确认

关于内容边界

  • 不要在 HLD 中写代码或伪代码
  • 不要包含具体参数配置
  • 不要遗漏 PRD 中已有的非功能约束
  • 不要做 PRD 没有提及的需求假设
  • 不要跳过阶段零的上下文收集

输出格式

最终输出的 HLD 必须:

  1. 使用 Markdown 格式
  2. 包含完整的元信息头部(关联 PRD、版本、作者)
  3. 包含 PRD↔HLD 需求映射表(强制)
  4. 章节编号清晰
  5. 架构图使用 Mermaid
  6. 技术选型附带理由
  7. 跨团队 API/错误码引用既有 API Contract,不重新定义
  8. 不包含 LLD 级别的实现细节

质量标准

一份合格的 HLD 应该:

  • 完整:覆盖所有 PRD 需求的技术方案
  • 可决策:所有高成本决策都有明确结论
  • 可落地:开发团队可据此开始 LLD/编码
  • 可追溯:关联 PRD,技术选型有理由
  • 边界清晰:不越界到 LLD 领域

触发词

以下输入应触发此技能:

  • "写 HLD"、"写技术设计文档"
  • "帮我写技术方案"
  • "HLD 模板"
  • "技术设计"、"架构设计"
  • "/hld-writer"

Signals

GitHub stars
82
Forks
23
Last commit
Sep 2026

ahel review

  • K5info
    obfuscation (in assets/new-feature-backend.en.md)
  • K5info
    obfuscation (in assets/optimization.en.md)

Automated review, not a security audit. Ruleset v1+k2.

Advanced
Catalog kind
skill
Gateway key
hld-writer
Source
github.com/testany-io/testany-agent-skills