关于 swain-roadmap
swain-roadmap 是一项根据工件图重新生成项目路线图并打开结果的 skill。它支持项目级视图、指定工件的路线图切片,以及纯文本命令行摘要。
主要功能
- 01重新生成项目路线图
- 02生成指定范围的路线图切片
- 03呈现优先级与依赖关系
- 04从工件内容填充意图占位符
- 05显示命令行状态与路线图摘要
适用场景
- 01刷新项目路线图
- 02查看某个愿景或计划的路线图切片
- 03在终端查看优先级与依赖关系
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ cristoslc/ swain --skill swain-roadmap安装后在 Claude Code 中输入/swain-roadmap确认已加载。
详细介绍
路线图
在执行任何会改变状态的操作之前,检查是否存在活动会话:
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
bash "$REPO_ROOT/.agents/bin/swain-session-check.sh" 2>/dev/null
如果 JSON 输出中的 "status" 不是 "active",请告知操作员:“没有活动会话——要用 /swain-init 启动一个吗?”如果操作员选择忽略,则继续。
根据制品图重新生成 ROADMAP.md 并打开它。繁重工作由 swain-design 中的 chart.sh roadmap 完成——此技能是面向用户的入口。
调用时
1. 定位 chart.sh
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
CHART_SH="$REPO_ROOT/.agents/bin/chart.sh"
如果未找到 chart.sh,请告知用户未安装 swain-design,然后停止。
2. 重新生成路线图
解析参数:如果用户提供了制品 ID(例如,swain-roadmap VISION-001),则将该 ID 设为 SCOPE_ID。否则,SCOPE_ID 为空。
如果设置了 SCOPE_ID:
bash "$CHART_SH" roadmap --scope "$SCOPE_ID"
这会在指定制品的文件夹中写入一个 roadmap.md。
如果 SCOPE_ID 为空:
bash "$CHART_SH" roadmap
这会在项目根目录中写入 ROADMAP.md,并重新生成各自制品文件夹中所有按 Vision 和 Initiative 划分的 roadmap.md 切片。
项目级 ROADMAP.md 包含:
- 象限图 — 以 PNG 格式呈现的优先级矩阵(如果
mmdc不可用,则回退为内嵌 Mermaid) - 图例 — 按象限分组并附带短 ID 的史诗
- 艾森豪威尔表格 — 立即执行 / 安排 / 进行中 / 待办,包含进度、解除阻塞的计数和需要操作员决策的事项
- 甘特时间线 — 按优先级错开的计划及依赖关系链接
- 依赖关系图 — 跨优先级边界的阻塞关系(仅在存在依赖关系时显示)
每个制品切片包含:意图摘要、带链接和进度的子制品表、汇总进度条、近期 git 提交,以及艾森豪威尔优先级子集。
2.5. 后处理意图占位符
chart.sh 完成后,扫描输出文件中的 {{INTENT: <ID>}} 占位符。对每个占位符:
- 读取源制品 Markdown 文件。
- 提取
## Value Proposition(适用于 Visions)或## Goal / Objective(适用于 Initiatives)中的第一句话。 - 将
{{INTENT: <ID>}}标记替换为提取的句子。 - 写回文件。
如果找不到该章节,则保留占位符原样(操作员可以手动填写,也可以等待通过 SPEC-144 填充 brief-description frontmatter)。
3. 打开路线图
如果设置了 SCOPE_ID,则打开对应的切片。根据图缓存查找制品的文件路径,以找到其文件夹:
ARTIFACT_FILE="$(bash "$CHART_SH" show "$SCOPE_ID" 2>/dev/null | grep -oE 'docs/[^ ]+' | head -1)"
if [ -n "$ARTIFACT_FILE" ]; then
open "$REPO_ROOT/$(dirname "$ARTIFACT_FILE")/roadmap.md"
fi
如果未指定范围,则打开项目级路线图:
open "$REPO_ROOT/ROADMAP.md"
始终打开渲染后的文件,以便操作员查看完整的图表和示意图。不要让操作员自己打开——直接打开即可。
4. 显示 CLI 摘要
ROADMAP.md 包含表格、Mermaid 图表和图片引用,这些内容无法在终端中渲染。使用 --cli 标志获取预先格式化的纯文本摘要:
bash "$CHART_SH" roadmap --cli
这会输出一个确定且对齐的摘要,按艾森豪威尔象限(立即执行、安排、进行中、待办)分组,并将所有第一层子项(EPIC、SPEC、SPIKE)嵌套在其父级 Initiative 下。直接显示此输出——不要重新格式化或筛选。
在 CLI 输出前说“ROADMAP.md 已刷新并打开。”对于指定范围的运行,则改说“{SCOPE_ID} 的路线图切片已刷新并打开。”
上下文丰富的显示
列出路线图条目(艾森豪威尔象限、甘特时间线)时,将每个制品显示为上下文行,而不是单独显示 ID:
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
bash "$REPO_ROOT/.agents/bin/artifact-context.sh" <ID> 2>/dev/null
如果该工具不可用,则回退为 <ID> — <title>。
6. 关注泳道上下文
如果 .agents/session.json 中设置了关注泳道,请在末尾提及。
FOCUS="$(bash "$REPO_ROOT/.agents/bin/swain-focus.sh" 2>/dev/null)"
如果设置了关注项,请注明:“关注:{FOCUS}。建议仅针对该泳道。”
新鲜度检查(供其他技能使用)
其他技能可以直接调用 chart.sh,根据过时情况重新生成内容。此技能始终无条件重新生成——这是“强制刷新”路径。
状态仪表板(ADR-023,原名 SPEC-122)
当操作人员说“状态”“接下来做什么”“仪表板”“概览”“进展如何”或“我应该做什么”时,运行状态脚本:
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
STATUS_SCRIPT="$REPO_ROOT/.agents/bin/swain-status.sh"
[ -f "$STATUS_SCRIPT" ] && bash "$STATUS_SCRIPT" --refresh || echo "status dashboard script not found"
紧凑模式(MOTD):bash "$STATUS_SCRIPT" --compact
缓存
状态会写入 .agents/status-cache.json,有效期为 120 秒。使用 --refresh 绕过缓存,使用 --json 获取原始输出。
建议
从 JSON 缓存中读取 .priority.recommendations[0]。设置了焦点泳道时,建议会限定在该愿景/计划范围内。
模式推断
- 两份规格都在审查中,且有待处理的战略决策 -> 询问操作人员
- 规格等待审查 -> 详细模式
- 已设置焦点泳道,且有待处理的决策 -> 愿景模式
- 没有可采取行动的事项 -> 愿景模式(主计划镜像)
待决策事项(路线图集成)
使用 chart.sh roadmap --json 进行艾森豪威尔分类。显示“立即处理”和“安排处理”象限中需要操作人员决策的前 5 项。
错误处理
- 如果 chart.sh 失败,显示错误输出,并建议运行
swain-doctor - 如果 ROADMAP.md 存在但 chart.sh 不可用,显示现有文件(可能已过时),并发出过时警告
- 绝不要直接失败——显示所有可用内容