摘要:敏捷团队最累的往往不是写代码,而是每个迭代都要重复一遍的判断------估故事点、圈范围、拆任务、分人、预判风险、解读燃尽、做根因分析。这些工作高度依赖经验,却每两周重复一次。本文记录我参加 2026 华为开发者大赛·小红书 Skill 创新赛时,如何把这些「重复的脑力劳动」沉淀成一个纯语义 Skill:为什么选择「格式对接」而不是 API 集成、为什么用四阶段路由而不是一个大提示词、为什么坚持「建议而非代决」,以及无历史速率、模糊输入、迭代插单等边界场景是怎么设计的。
相关文章:
- 工程篇:https://blog.csdn.net/yuange1666/article/details/169561030
- 开源仓库:GitHub 搜索
https://github.com/Yuan1433223/agile-sprint-assistant
开篇:一个迭代负责人的两周
先描述一个很多人熟悉的场景。
一位中型互联网公司的迭代负责人,手下带一个 6 人左右的研发团队,用飞书多维表格管理迭代计划和任务领取,用华为云 CodeArts 做需求管理、代码托管和流水线。每两周一个迭代,他的节奏基本是固定的:
- 迭代第一天,组织规划会。对着一屏 Backlog,逐个故事点估算、争论、拍数,再算团队这两周能投入多少人日、圈定范围,最后把结果整理进飞书表格;
- 规划会后,把 Story 拆成子任务,结合每个人的技能栈和当前负荷推荐领取人,回答一轮「这个为什么分给我」;
- 迭代中,督促大家按规范开分支、写提交、提 MR,开发前还要帮忙看技术风险、补测试场景;
- 迭代最后一天,拉燃尽图、统计完成率和流水线质量,组织回顾会,用 5Whys 挖阻塞根因,产出改进 Action,再把报告贴进飞书文档。
这些工作没有一件是「创造性」的,但每一件都消耗经验带宽。真正的问题在于:它们每个迭代都在重复,而判断依据其实是可以沉淀的。
这正是我做 agile-sprint-assistant 这个 Skill 的出发点------把敏捷迭代闭环中重复的判断工作交给 AI 副驾,把人解放出来去做真正需要创造力的架构设计和业务建模。
第 1 章 痛点拆解:敏捷迭代里哪些活是「重复的脑力劳动」
动手之前,我先把一个完整迭代里的工作按「判断密度」拆了一遍。结论是:四阶段中每一个阶段,都存在一类「需要经验判断、但产出形式高度固定」的工作。
| 阶段 | 表面动作 | 真正消耗脑力的判断 |
|---|---|---|
| 迭代规划 | 填迭代计划表 | 这个 Story 估 5 点还是 8 点?团队容量打多少折?按速率能圈到哪?哪些 Story 之间有依赖? |
| 任务领取 | 填任务表 | Story 竖切还是横切?切成多细?谁的技能匹配、谁负荷已经满了? |
| 研发执行 | 录 CodeArts、开分支、提 MR | 技术描述里有没有风险信号?每条验收标准要测哪些场景?MR 请谁 Review、重点看什么? |
| 迭代回顾 | 写回顾报告 | 燃尽这个形态说明什么?阻塞的流程根因是什么?改进 Action 怎么定才有效? |
注意区分两类劳动。一类是人手的搬运 :把数据从一个表格复制到另一个表格、在两个平台之间同步字段;另一类是人脑的判断:估算、拆分、风险预判、根因分析。
市面上不缺解决第一类问题的工具------模板填充器替你把数据填进表格,API 集成中间件替你在平台之间搬数据。但第二类问题很少被认真处理,而它恰恰是最依赖资深工程师经验、也最消耗时间的部分。
所以这个 Skill 的核心论点从一开始就定了:
替代「人脑判断」,而非「人手粘贴」。
四阶段闭环形成一条完整价值链:
#mermaid-svg-YxdozZihmsu9YZ4G{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-YxdozZihmsu9YZ4G .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-YxdozZihmsu9YZ4G .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-YxdozZihmsu9YZ4G .error-icon{fill:#552222;}#mermaid-svg-YxdozZihmsu9YZ4G .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-YxdozZihmsu9YZ4G .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-YxdozZihmsu9YZ4G .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-YxdozZihmsu9YZ4G .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-YxdozZihmsu9YZ4G .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-YxdozZihmsu9YZ4G .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-YxdozZihmsu9YZ4G .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-YxdozZihmsu9YZ4G .marker{fill:#333333;stroke:#333333;}#mermaid-svg-YxdozZihmsu9YZ4G .marker.cross{stroke:#333333;}#mermaid-svg-YxdozZihmsu9YZ4G svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-YxdozZihmsu9YZ4G p{margin:0;}#mermaid-svg-YxdozZihmsu9YZ4G .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-YxdozZihmsu9YZ4G .cluster-label text{fill:#333;}#mermaid-svg-YxdozZihmsu9YZ4G .cluster-label span{color:#333;}#mermaid-svg-YxdozZihmsu9YZ4G .cluster-label span p{background-color:transparent;}#mermaid-svg-YxdozZihmsu9YZ4G .label text,#mermaid-svg-YxdozZihmsu9YZ4G span{fill:#333;color:#333;}#mermaid-svg-YxdozZihmsu9YZ4G .node rect,#mermaid-svg-YxdozZihmsu9YZ4G .node circle,#mermaid-svg-YxdozZihmsu9YZ4G .node ellipse,#mermaid-svg-YxdozZihmsu9YZ4G .node polygon,#mermaid-svg-YxdozZihmsu9YZ4G .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-YxdozZihmsu9YZ4G .rough-node .label text,#mermaid-svg-YxdozZihmsu9YZ4G .node .label text,#mermaid-svg-YxdozZihmsu9YZ4G .image-shape .label,#mermaid-svg-YxdozZihmsu9YZ4G .icon-shape .label{text-anchor:middle;}#mermaid-svg-YxdozZihmsu9YZ4G .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-YxdozZihmsu9YZ4G .rough-node .label,#mermaid-svg-YxdozZihmsu9YZ4G .node .label,#mermaid-svg-YxdozZihmsu9YZ4G .image-shape .label,#mermaid-svg-YxdozZihmsu9YZ4G .icon-shape .label{text-align:center;}#mermaid-svg-YxdozZihmsu9YZ4G .node.clickable{cursor:pointer;}#mermaid-svg-YxdozZihmsu9YZ4G .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-YxdozZihmsu9YZ4G .arrowheadPath{fill:#333333;}#mermaid-svg-YxdozZihmsu9YZ4G .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-YxdozZihmsu9YZ4G .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-YxdozZihmsu9YZ4G .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YxdozZihmsu9YZ4G .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-YxdozZihmsu9YZ4G .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YxdozZihmsu9YZ4G .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-YxdozZihmsu9YZ4G .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-YxdozZihmsu9YZ4G .cluster text{fill:#333;}#mermaid-svg-YxdozZihmsu9YZ4G .cluster span{color:#333;}#mermaid-svg-YxdozZihmsu9YZ4G div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-YxdozZihmsu9YZ4G .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-YxdozZihmsu9YZ4G rect.text{fill:none;stroke-width:0;}#mermaid-svg-YxdozZihmsu9YZ4G .icon-shape,#mermaid-svg-YxdozZihmsu9YZ4G .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YxdozZihmsu9YZ4G .icon-shape p,#mermaid-svg-YxdozZihmsu9YZ4G .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-YxdozZihmsu9YZ4G .icon-shape .label rect,#mermaid-svg-YxdozZihmsu9YZ4G .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YxdozZihmsu9YZ4G .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-YxdozZihmsu9YZ4G .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-YxdozZihmsu9YZ4G :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 下迭代建议回流
粘贴一段需求
Backlog + 团队 + 容量
飞书迭代计划表
估算依据 + 圈定范围
任务领取表
竖切拆分 + 人岗匹配
CodeArts 交付物
风险预判 + 测试骨架 + MR
回顾报告
燃尽解读 + 根因 + Action
第 2 章 设计决策一:格式对接,而不是 API 集成
第一个关键决策,是这个 Skill 怎么和飞书、CodeArts 两个平台对接。
直觉方案是做 API 集成:调飞书开放平台接口自动写入多维表格,调 CodeArts API 自动创建工作项。听起来很自动化,但我评估后放弃了,原因很实际:
- 配置成本高。要申请应用、配鉴权、管理 token 生命周期,还要处理字段映射、写入失败、幂等冲突和重试;
- 副作用风险高。自动写入真实研发系统,一旦逻辑出错,污染的是团队的迭代数据,排查成本远高于收益;
- 违背 Skill 的轻量定位。用户要的是「粘一段 Backlog 立刻得到带依据的建议」,不是再部署一套需要运维的集成中间件。
我选择的方案是格式对接(Format Coupling):Skill 只生成两个平台「可直接粘贴」的标准格式,落地动作由人完成。
- 飞书多维表格支持从 Markdown 表格直接粘贴,粘贴时自动识别列。Skill 输出的表格字段结构与飞书字段定义严格对齐,复制后贴到首行即落表;
- CodeArts 工作项、分支名、MR 描述都有固定结构,Skill 按规范生成结构化文本,由人录入。
#mermaid-svg-lhWNfKjF74B2ngY1{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-lhWNfKjF74B2ngY1 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-lhWNfKjF74B2ngY1 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-lhWNfKjF74B2ngY1 .error-icon{fill:#552222;}#mermaid-svg-lhWNfKjF74B2ngY1 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-lhWNfKjF74B2ngY1 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-lhWNfKjF74B2ngY1 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-lhWNfKjF74B2ngY1 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-lhWNfKjF74B2ngY1 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-lhWNfKjF74B2ngY1 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-lhWNfKjF74B2ngY1 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-lhWNfKjF74B2ngY1 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-lhWNfKjF74B2ngY1 .marker.cross{stroke:#333333;}#mermaid-svg-lhWNfKjF74B2ngY1 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-lhWNfKjF74B2ngY1 p{margin:0;}#mermaid-svg-lhWNfKjF74B2ngY1 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-lhWNfKjF74B2ngY1 .cluster-label text{fill:#333;}#mermaid-svg-lhWNfKjF74B2ngY1 .cluster-label span{color:#333;}#mermaid-svg-lhWNfKjF74B2ngY1 .cluster-label span p{background-color:transparent;}#mermaid-svg-lhWNfKjF74B2ngY1 .label text,#mermaid-svg-lhWNfKjF74B2ngY1 span{fill:#333;color:#333;}#mermaid-svg-lhWNfKjF74B2ngY1 .node rect,#mermaid-svg-lhWNfKjF74B2ngY1 .node circle,#mermaid-svg-lhWNfKjF74B2ngY1 .node ellipse,#mermaid-svg-lhWNfKjF74B2ngY1 .node polygon,#mermaid-svg-lhWNfKjF74B2ngY1 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-lhWNfKjF74B2ngY1 .rough-node .label text,#mermaid-svg-lhWNfKjF74B2ngY1 .node .label text,#mermaid-svg-lhWNfKjF74B2ngY1 .image-shape .label,#mermaid-svg-lhWNfKjF74B2ngY1 .icon-shape .label{text-anchor:middle;}#mermaid-svg-lhWNfKjF74B2ngY1 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-lhWNfKjF74B2ngY1 .rough-node .label,#mermaid-svg-lhWNfKjF74B2ngY1 .node .label,#mermaid-svg-lhWNfKjF74B2ngY1 .image-shape .label,#mermaid-svg-lhWNfKjF74B2ngY1 .icon-shape .label{text-align:center;}#mermaid-svg-lhWNfKjF74B2ngY1 .node.clickable{cursor:pointer;}#mermaid-svg-lhWNfKjF74B2ngY1 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-lhWNfKjF74B2ngY1 .arrowheadPath{fill:#333333;}#mermaid-svg-lhWNfKjF74B2ngY1 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-lhWNfKjF74B2ngY1 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-lhWNfKjF74B2ngY1 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lhWNfKjF74B2ngY1 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-lhWNfKjF74B2ngY1 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lhWNfKjF74B2ngY1 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-lhWNfKjF74B2ngY1 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-lhWNfKjF74B2ngY1 .cluster text{fill:#333;}#mermaid-svg-lhWNfKjF74B2ngY1 .cluster span{color:#333;}#mermaid-svg-lhWNfKjF74B2ngY1 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-lhWNfKjF74B2ngY1 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-lhWNfKjF74B2ngY1 rect.text{fill:none;stroke-width:0;}#mermaid-svg-lhWNfKjF74B2ngY1 .icon-shape,#mermaid-svg-lhWNfKjF74B2ngY1 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-lhWNfKjF74B2ngY1 .icon-shape p,#mermaid-svg-lhWNfKjF74B2ngY1 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-lhWNfKjF74B2ngY1 .icon-shape .label rect,#mermaid-svg-lhWNfKjF74B2ngY1 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-lhWNfKjF74B2ngY1 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-lhWNfKjF74B2ngY1 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-lhWNfKjF74B2ngY1 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Skill 边界(纯语义)
人复制粘贴
人录入
不调用任何 API
不调用任何 API
领域判断
估算/拆分/风险/根因
结构化输出
Markdown 表格 + 条目模板
飞书多维表格
华为云 CodeArts
这个取舍带来三个直接好处:零配置、零鉴权、零副作用。不存在集成失败、token 过期、幂等冲突这些运维问题,安装即生效。代价是保留了最后一步人工粘贴------但这步只占几秒钟,而 Skill 省下的是前面几个小时的判断工作。
一笔账算下来很清楚:把高频、高价值的判断自动化,把低频、低成本的粘贴留给人,是性价比最高的切法。
第 3 章 设计决策二:四阶段路由,而不是一个大而全的提示词
第二个决策是 Skill 的内部组织方式。
最容易写出来的方案是一个巨型提示词:把所有敏捷知识、所有输出格式、所有场景规则塞进一个文件,让模型自己判断该用哪部分。这种方案在简单场景能跑,但问题随内容增长迅速暴露:上下文臃肿、指令互相干扰、输出不稳定,而且每次对话都要加载全部内容,token 成本高。
我采用的是阶段路由(Phase Routing):先识别用户处于四阶段中的哪一阶段,再加载该阶段对应的工作流、领域知识和输出模板。
| 阶段 | 触发信号 | 典型输入 |
|---|---|---|
| ① 迭代规划 | 排迭代、排个期、帮我排、这周怎么排、故事点 | Backlog + 团队 + 容量 + 历史速率 |
| ② 任务领取 | 分活、分任务、认领、分配、拆分 | 迭代内 Story + 技能矩阵 + 负荷 |
| ③ 研发执行 | 开分支、提 MR、开发、CodeArts 条目 | 已领取的单个 Story |
| ④ 迭代回顾 | 复盘、回顾、迭代总结、燃尽 | 完成情况 + 燃尽 + 流水线质量 |
路由机制的结构如下:
#mermaid-svg-e3BMyxBPlnms77hg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-e3BMyxBPlnms77hg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-e3BMyxBPlnms77hg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-e3BMyxBPlnms77hg .error-icon{fill:#552222;}#mermaid-svg-e3BMyxBPlnms77hg .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-e3BMyxBPlnms77hg .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-e3BMyxBPlnms77hg .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-e3BMyxBPlnms77hg .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-e3BMyxBPlnms77hg .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-e3BMyxBPlnms77hg .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-e3BMyxBPlnms77hg .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-e3BMyxBPlnms77hg .marker{fill:#333333;stroke:#333333;}#mermaid-svg-e3BMyxBPlnms77hg .marker.cross{stroke:#333333;}#mermaid-svg-e3BMyxBPlnms77hg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-e3BMyxBPlnms77hg p{margin:0;}#mermaid-svg-e3BMyxBPlnms77hg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-e3BMyxBPlnms77hg .cluster-label text{fill:#333;}#mermaid-svg-e3BMyxBPlnms77hg .cluster-label span{color:#333;}#mermaid-svg-e3BMyxBPlnms77hg .cluster-label span p{background-color:transparent;}#mermaid-svg-e3BMyxBPlnms77hg .label text,#mermaid-svg-e3BMyxBPlnms77hg span{fill:#333;color:#333;}#mermaid-svg-e3BMyxBPlnms77hg .node rect,#mermaid-svg-e3BMyxBPlnms77hg .node circle,#mermaid-svg-e3BMyxBPlnms77hg .node ellipse,#mermaid-svg-e3BMyxBPlnms77hg .node polygon,#mermaid-svg-e3BMyxBPlnms77hg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-e3BMyxBPlnms77hg .rough-node .label text,#mermaid-svg-e3BMyxBPlnms77hg .node .label text,#mermaid-svg-e3BMyxBPlnms77hg .image-shape .label,#mermaid-svg-e3BMyxBPlnms77hg .icon-shape .label{text-anchor:middle;}#mermaid-svg-e3BMyxBPlnms77hg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-e3BMyxBPlnms77hg .rough-node .label,#mermaid-svg-e3BMyxBPlnms77hg .node .label,#mermaid-svg-e3BMyxBPlnms77hg .image-shape .label,#mermaid-svg-e3BMyxBPlnms77hg .icon-shape .label{text-align:center;}#mermaid-svg-e3BMyxBPlnms77hg .node.clickable{cursor:pointer;}#mermaid-svg-e3BMyxBPlnms77hg .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-e3BMyxBPlnms77hg .arrowheadPath{fill:#333333;}#mermaid-svg-e3BMyxBPlnms77hg .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-e3BMyxBPlnms77hg .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-e3BMyxBPlnms77hg .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-e3BMyxBPlnms77hg .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-e3BMyxBPlnms77hg .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-e3BMyxBPlnms77hg .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-e3BMyxBPlnms77hg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-e3BMyxBPlnms77hg .cluster text{fill:#333;}#mermaid-svg-e3BMyxBPlnms77hg .cluster span{color:#333;}#mermaid-svg-e3BMyxBPlnms77hg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-e3BMyxBPlnms77hg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-e3BMyxBPlnms77hg rect.text{fill:none;stroke-width:0;}#mermaid-svg-e3BMyxBPlnms77hg .icon-shape,#mermaid-svg-e3BMyxBPlnms77hg .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-e3BMyxBPlnms77hg .icon-shape p,#mermaid-svg-e3BMyxBPlnms77hg .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-e3BMyxBPlnms77hg .icon-shape .label rect,#mermaid-svg-e3BMyxBPlnms77hg .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-e3BMyxBPlnms77hg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-e3BMyxBPlnms77hg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-e3BMyxBPlnms77hg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 规划类信号
领取类信号
执行类信号
回顾类信号
无法判断
用户输入
阶段路由
扫描触发信号
加载 Phase 1 工作流
-
agile-knowledge 估算章节
-
sprint-plan 模板
加载 Phase 2 工作流 -
拆分原则
-
task-assignment 模板
加载 Phase 3 工作流 -
codearts-schema
-
deliverables 模板
加载 Phase 4 工作流 -
回顾方法
-
retrospective 模板
列出四阶段让用户选择
这个设计有三个好处:
- 上下文精简:每个阶段只加载自己需要的知识和模板,避免无关指令干扰输出;
- 可维护:领域知识和模板独立成文件,修改某个阶段的规则不会牵动全局;
- 可扩展:新增阶段或能力,只需增加一条路由和对应资源,不需要重写主文件。
另外我专门处理了一类跨阶段信号:用户提到「插单、加需求、范围变更」时,不强行归入四阶段,而是路由到独立的「迭代中范围变更」处理流程。这类信号在真实团队里出现频率很高,值得单独设计。
第 4 章 设计决策三:建议而非代决,敏捷的核心是人
第三个决策是关于 AI 和人的权责边界。
故事点估算、任务分配、范围圈定,这些事情 AI 能不能直接替人定了?技术上可以,但我明确禁止 Skill 这么做。原因来自敏捷的基本理念:敏捷的核心是人,团队的自组织和集体承诺不可替代。
如果 Skill 直接输出「S-101 分给张三、5 个点、必须做」,会带来两个问题:
- 估算失去校准过程。故事点的价值在于团队讨论中暴露理解分歧,直接给数等于跳过了这个过程;
- 任务分配失去承诺感。被分配的人没有参与认领,执行动力和责任感都打折扣。
所以 Skill 的定位是副驾,不是代驾:
- 估算只给建议值,但必须附依据------用哪个基准故事对比、为什么向上取整、风险在哪;
- 分配只给建议人,附技能匹配和负荷依据,最终由成员自行认领;
- 圈定范围给建议方案,超速率部分明确标注,由 PO 和团队拍板。
#mermaid-svg-0cYPUe7Nw2Hb7lqd{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-0cYPUe7Nw2Hb7lqd .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .error-icon{fill:#552222;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .marker{fill:#333333;stroke:#333333;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .marker.cross{stroke:#333333;}#mermaid-svg-0cYPUe7Nw2Hb7lqd svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-0cYPUe7Nw2Hb7lqd p{margin:0;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .cluster-label text{fill:#333;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .cluster-label span{color:#333;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .cluster-label span p{background-color:transparent;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .label text,#mermaid-svg-0cYPUe7Nw2Hb7lqd span{fill:#333;color:#333;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .node rect,#mermaid-svg-0cYPUe7Nw2Hb7lqd .node circle,#mermaid-svg-0cYPUe7Nw2Hb7lqd .node ellipse,#mermaid-svg-0cYPUe7Nw2Hb7lqd .node polygon,#mermaid-svg-0cYPUe7Nw2Hb7lqd .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .rough-node .label text,#mermaid-svg-0cYPUe7Nw2Hb7lqd .node .label text,#mermaid-svg-0cYPUe7Nw2Hb7lqd .image-shape .label,#mermaid-svg-0cYPUe7Nw2Hb7lqd .icon-shape .label{text-anchor:middle;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .rough-node .label,#mermaid-svg-0cYPUe7Nw2Hb7lqd .node .label,#mermaid-svg-0cYPUe7Nw2Hb7lqd .image-shape .label,#mermaid-svg-0cYPUe7Nw2Hb7lqd .icon-shape .label{text-align:center;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .node.clickable{cursor:pointer;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .arrowheadPath{fill:#333333;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-0cYPUe7Nw2Hb7lqd .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-0cYPUe7Nw2Hb7lqd .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-0cYPUe7Nw2Hb7lqd .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .cluster text{fill:#333;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .cluster span{color:#333;}#mermaid-svg-0cYPUe7Nw2Hb7lqd div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-0cYPUe7Nw2Hb7lqd rect.text{fill:none;stroke-width:0;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .icon-shape,#mermaid-svg-0cYPUe7Nw2Hb7lqd .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .icon-shape p,#mermaid-svg-0cYPUe7Nw2Hb7lqd .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .icon-shape .label rect,#mermaid-svg-0cYPUe7Nw2Hb7lqd .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-0cYPUe7Nw2Hb7lqd .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-0cYPUe7Nw2Hb7lqd .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-0cYPUe7Nw2Hb7lqd :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 认可
有异议
用户输入数据
Skill 生成建议
建议值 + 依据 + 风险标注
人拍板
复制落地
团队讨论调整
Skill 重新给建议
「每条建议附依据」是这个决策能成立的关键。没有依据的建议是噪音,有依据的建议才是可审查、可反驳、可学习的判断。比如一个 Story 被建议估 8 点,依据写的是「含文档切片、Embedding、向量库部署、检索面板,且向量库首次部署存在不确定性,按规则向上取整」------人可以立刻判断这个依据成不成立,而不是面对一个黑盒数字。
第 5 章 领域知识怎么沉淀:让判断有依据,而不是拍脑袋
Skill 输出的建议质量,本质上取决于沉淀进去的领域知识质量。我没有写泛泛的敏捷口号,而是把每条知识都写成可执行的判断规则,并在工作流中实际调用。
5.1 故事点估算:Modified Fibonacci + 基准故事
故事点度量「复杂度 + 不确定性 + 工作量」的相对规模,与具体人无关。估算序列采用 Modified Fibonacci:1, 2, 3, 5, 8, 13, 21------相邻差距随规模增大而增大,体现大任务估算的不确定性。
光有序列不够,我把「怎么给数」写成了显式规则:
- 描述含明确接口、数据模型、页面数 → 按数量加权;
- 含「未知第三方、性能要求、历史数据迁移」→ 不确定性高,向上取整并标注风险;
- 超过 13 点 → 建议拆分;
- 无法估算 → 标注「需澄清」,不强行给数。
5.2 速率与容量:把「拍脑袋」变成公式
text
迭代容量 = Σ(成员可投入天数 × 可投入率)
可投入率 = 1 − (会议/请假/支援/上下文切换损耗),典型值 0.6 ~ 0.8
速率预测分三档处理:有 3 个以上历史迭代取近 3 轮平均;历史不足 3 个用容量 × 0.7 保守起点;完全没有历史则用容量 × 0.6 并强标注。
5.3 拆分原则:竖切优于横切
- 竖切(推荐):按用户可感知的功能端到端切片,一个子任务含前端、接口、数据,独立可演示;
- 横切(避免):按技术层切,比如先做所有接口,导致迭代末期才有可演示价值。
配合 INVEST 检查(Independent / Negotiable / Valuable / Estimable / Small / Testable),子任务目标粒度是 ≤1 人日。
5.4 回顾方法:燃尽形态 + 5Whys
燃尽图不是只看「超没超」,我沉淀了五种形态及其对应含义:理想线下方(超前)、贴合理想线(健康)、上方扩大(落后)、中途陡降(范围被砍)、末期突增(末期加需求)。
根因分析用 5Whys,要求连续追问直到触及流程根因,而不是停在「人不够」。并且每个改进 Action 必须包含具体动作、Owner 和下迭代验证方式------没有 Owner 或无法验证的 Action 视为无效。
这些知识全部写在独立的领域知识文件中,四阶段工作流按需加载。知识和流程分离,是这个 Skill 能持续迭代的基础。
第 6 章 边界场景:不装懂、不编造、不硬撑
一个 Skill 的成熟度,往往不体现在 Happy Path,而体现在输入不理想时怎么表现。我设计了四类边界场景,核心原则只有一句:不装懂、不编造、不硬撑。
6.1 无历史速率:不瞎猜,强标注
新团队第一个迭代没有历史速率,这是最容易诱导模型瞎编的场景。Skill 的处理是明确提示「无历史依据」,按容量 × 0.6 保守估算,强标注「速率待校准」,并建议积累 3 轮后改用平均速率。
比如 6 人团队、每人 10 个工作日、可投入率 0.7,算出 42 人日容量,再打六折取整为 24 故事点上限。这个数不精确,但它诚实地标明了自己的不确定性,比假装精确可靠得多。
6.2 模糊输入:必要缺失先问,非必要保守默认
用户只丢来三个需求标题、没有优先级、没有团队信息时,Skill 不会静默编造一份完整计划,而是:
- 检测必要字段缺失,显式提示补全团队、容量、优先级;
- 同时对可处理部分给初步结果------基于标题先给粗略估算,标注「基于标题推断,待补充描述后细化」。
既不拒绝服务,也不硬撑输出。
6.3 大规模 Backlog:分批处理,对抗信息过载
Backlog 超过 30 个 Story 时,单次输出会过长、信息过载,质量也会下降。Skill 会主动建议按优先级筛选 Top N 或分批规划,而不是硬着头皮一次处理完。
6.4 迭代中插单:用评估框架代替情绪化决策
插单是真实团队的常态。我沉淀了「插单评估三问」:
| 评估问题 | 判断依据 | 处理方式 |
|---|---|---|
| ① 是否 P0? | 不做完是否阻塞上线、是否线上故障 | 是 → 进入插单流程;否 → 进下迭代 |
| ② 能否拆出 ≤2 人日的最小可交付切片? | 能否独立交付可演示价值 | 能 → 插入切片,其余进下迭代 |
| ③ 谁有 buffer? | 利用率是否低于 80% | 有 → 分配给该人;没有 → 换出等点数低优先级项 |
换出项要求标注「因插单滚动到下迭代」;如果插单项点数超过所有可换出项总和,Skill 提示「需 PO 决策」而不是替人决定。频繁插单(每迭代超过 2 次)则在回顾时讨论范围纪律。
第 7 章 交付结果:两轮盲评之后
这个 Skill 经过了两轮隔离盲评,过程本身也验证了设计的有效性。
| 轮次 | 评分 | 结论 | 问题与处理 |
|---|---|---|---|
| R1 | 86 | PASS_WITH_FIXES | 3 项 P2:输入处理策略不明确、测试只覆盖 Happy Path、无历史速率场景未测 → 全部修复 |
| R2 | 96 | PASS | 2 项 P2:跨迭代依赖规则、大规模 Backlog 限制 → 全部修复 |
最终 P0、P1 问题为 0,Ship Decision = YES。
回看评审轨迹,第一轮被挑出的问题恰好集中在边界处理上------这反过来印证了第 6 章那些设计不是锦上添花,而是决定一个 Skill 能不能放心交付的硬指标。
结语:Skill 的价值层级------判断高于搬运
做完这个项目,我最大的体会是 Skill(以及更广义的 AI 自动化)存在一个清晰的价值层级:
#mermaid-svg-TLe7xOK4h8k5jEsW{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-TLe7xOK4h8k5jEsW .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-TLe7xOK4h8k5jEsW .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-TLe7xOK4h8k5jEsW .error-icon{fill:#552222;}#mermaid-svg-TLe7xOK4h8k5jEsW .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-TLe7xOK4h8k5jEsW .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-TLe7xOK4h8k5jEsW .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-TLe7xOK4h8k5jEsW .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-TLe7xOK4h8k5jEsW .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-TLe7xOK4h8k5jEsW .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-TLe7xOK4h8k5jEsW .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-TLe7xOK4h8k5jEsW .marker{fill:#333333;stroke:#333333;}#mermaid-svg-TLe7xOK4h8k5jEsW .marker.cross{stroke:#333333;}#mermaid-svg-TLe7xOK4h8k5jEsW svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-TLe7xOK4h8k5jEsW p{margin:0;}#mermaid-svg-TLe7xOK4h8k5jEsW .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-TLe7xOK4h8k5jEsW .cluster-label text{fill:#333;}#mermaid-svg-TLe7xOK4h8k5jEsW .cluster-label span{color:#333;}#mermaid-svg-TLe7xOK4h8k5jEsW .cluster-label span p{background-color:transparent;}#mermaid-svg-TLe7xOK4h8k5jEsW .label text,#mermaid-svg-TLe7xOK4h8k5jEsW span{fill:#333;color:#333;}#mermaid-svg-TLe7xOK4h8k5jEsW .node rect,#mermaid-svg-TLe7xOK4h8k5jEsW .node circle,#mermaid-svg-TLe7xOK4h8k5jEsW .node ellipse,#mermaid-svg-TLe7xOK4h8k5jEsW .node polygon,#mermaid-svg-TLe7xOK4h8k5jEsW .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-TLe7xOK4h8k5jEsW .rough-node .label text,#mermaid-svg-TLe7xOK4h8k5jEsW .node .label text,#mermaid-svg-TLe7xOK4h8k5jEsW .image-shape .label,#mermaid-svg-TLe7xOK4h8k5jEsW .icon-shape .label{text-anchor:middle;}#mermaid-svg-TLe7xOK4h8k5jEsW .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-TLe7xOK4h8k5jEsW .rough-node .label,#mermaid-svg-TLe7xOK4h8k5jEsW .node .label,#mermaid-svg-TLe7xOK4h8k5jEsW .image-shape .label,#mermaid-svg-TLe7xOK4h8k5jEsW .icon-shape .label{text-align:center;}#mermaid-svg-TLe7xOK4h8k5jEsW .node.clickable{cursor:pointer;}#mermaid-svg-TLe7xOK4h8k5jEsW .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-TLe7xOK4h8k5jEsW .arrowheadPath{fill:#333333;}#mermaid-svg-TLe7xOK4h8k5jEsW .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-TLe7xOK4h8k5jEsW .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-TLe7xOK4h8k5jEsW .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TLe7xOK4h8k5jEsW .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-TLe7xOK4h8k5jEsW .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TLe7xOK4h8k5jEsW .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-TLe7xOK4h8k5jEsW .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-TLe7xOK4h8k5jEsW .cluster text{fill:#333;}#mermaid-svg-TLe7xOK4h8k5jEsW .cluster span{color:#333;}#mermaid-svg-TLe7xOK4h8k5jEsW div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-TLe7xOK4h8k5jEsW .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-TLe7xOK4h8k5jEsW rect.text{fill:none;stroke-width:0;}#mermaid-svg-TLe7xOK4h8k5jEsW .icon-shape,#mermaid-svg-TLe7xOK4h8k5jEsW .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TLe7xOK4h8k5jEsW .icon-shape p,#mermaid-svg-TLe7xOK4h8k5jEsW .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-TLe7xOK4h8k5jEsW .icon-shape .label rect,#mermaid-svg-TLe7xOK4h8k5jEsW .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TLe7xOK4h8k5jEsW .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-TLe7xOK4h8k5jEsW .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-TLe7xOK4h8k5jEsW :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 第三层:替代人脑判断
估算 · 拆分 · 风险预判 · 根因分析(本 Skill 的位置)
第二层:替代人手集成
平台之间搬数据(API 中间件)
第一层:替代人手填充
把数据填进表格(模板填充器)
三层不互相替代,各有适用场景。但越往上,工作越依赖经验、越难标准化,一旦被自动化,释放的人的带宽也越大。
agile-sprint-assistant 试图证明的是:即使不写一行脚本、不调一个 API,只要把领域知识沉淀成可执行的判断规则、把人机边界想清楚,一个纯语义 Skill 也能完整承接一个敏捷迭代闭环里最累的那部分脑力劳动。
工程师真正该花时间的,从来不是填表,而是判断。
相关文章:
- 工程篇:https://blog.csdn.net/yuange1666/article/details/169561030?spm=1001.2014.3001.5501
- 开源仓库:GitHub 搜索
https://github.com/Yuan1433223/agile-sprint-assistant