<!-- © 2026 StarpartnerAI(星搭档 AI). 专有授权,非开源技能,禁止转售与二次分发。 -->
项目计划表(一键排期甘特图)
30 秒上手
典型用户原话(照这个样子接就行):
> 帮我做一份项目计划:智能门锁新品上市推广,10 月 8 日到 11 月 30 日
只需要确认两样(其余全部自动推理,不要追问):
| 需要什么 | 去哪拿 | 不填怎么办 |
|---|---|---|
| 要做什么 | 项目 brief、用户口述、一句话就行 | 一句模糊的话也直接开工,先补一条项目总目标 |
| 多久做完 | 合同节点 / 活动日历 / 用户给的总时长 | 只给「3 个月」就以今天顺推并标「暂定」;完全没给就按行业范式给建议周期并标注 |
最小示例:
- 输入:
帮我做智能门锁新品上市推广计划,10 月 8 日到 11 月 30 日 - 输出:对话内 Markdown 预览 +
<项目名>计划表.xlsx(6 个 Sheet,含甘特图)+ 单文件 HTML 预览
最短路径:拆解排期 → 写 plan.json → check_plan.py 跑到 0 ERROR → 本地渲染 → 落盘交付。
不需要准备:API Key、账号、模板、素材文件。全流程在本机完成,不联网、不上传。
不做什么(超出范围直接说明,不要硬上):不做进度跟踪与逾期提醒、不做成本测算、不画资源直方图。
甘特图是有的,在 xlsx 的 06_甘特图 Sheet。
拿不准时先看 references/faq.md。
交付物与边界
一次调用交付三件套,缺一件都不算交付完整:
| 产物 | 说明 |
|---|---|
<项目名>计划表.xlsx |
6 个 Sheet(含 06_甘特图),自带极简高级商务排版(灰蓝主色、横向细线无竖线、缩进分层),Excel / WPS 直接打开,可导入飞书 / 腾讯文档 |
预览.html |
自包含单文件,本地打开或作为文件发送;本 Skill 不负责发布成公网链接 |
| 对话内 Markdown 预览 | 结构 + 缩进 + 文字标签,先看全貌再导出 |
甘特图在 xlsx 里,不在 HTML 里。 它是 06_甘特图 Sheet,条形用单元格色块绘制,时间轴按项目跨度自动切换粒度(≤70 天按天、≤400 天按周、更长按月),
关键路径任务标为深红条、里程碑在条形末端标 ◆、阶段行画汇总条、周末列浅灰底。
样式是固定的:渲染脚本按统一规范输出(xlsx 默认样式 + HTML --plain 精简样式)。除非用户明确点名要隔行底色 / 竖线 / 黑白打印,否则不要开 --zebra / --vlines / --mono;不要主动向用户推销这些开关。
核心不是「填表」,是拆解质量:阶段划分是否贴合行业、工期是否合理、串并行与依赖是否正确、有没有漏掉必备配套任务。
输入契约
| 参数 | 必填 | 格式 | 不填时的处理 |
|---|---|---|---|
| 项目核心需求 / 意图 | 是 | 一句话,模糊笼统均可 | 必须要有,否则无法拆解 |
| 项目整体周期 | 是 | 起止日期 或 总时长 | 只有总时长 → 以今天为暂定起始日顺推;完全没给 → 按行业范式给建议周期并标「暂定」 |
| 所属行业 / 场景 | 否 | — | 按需求语义归入 8 类范式之一,在预览中标注 |
| 核心参与角色 | 否 | — | 按行业惯例生成角色名,不要写「待定」 |
| 核心约束 | 否 | — | 硬交付节点 / 预算上限 / 资源限制 |
plan.json 必填字段(缺任一项 check_plan.py 会报 ERROR,渲染脚本也会拒绝出成品):
meta.project_name · phases 非空 · 每个阶段有 name · 每个子任务有 name / start / end · start <= end · 至少 1 个子任务
> 日期必须写成补零的 YYYY-MM-DD(如 2026-10-01,不能写 2026-10-1)。渲染与排期按字符串比较日期,不补零会被误判成「结束早于开始」。check_plan.py 会拦这一条。
依赖与环境
本 Skill 只有一个可选第三方依赖,只在生成 xlsx 时需要:
# 生成 Excel 需要 openpyxl(>=3.1);只装一次,之后一直可用
pip install -r "<技能目录>/scripts/requirements.txt"
# 或:pip install openpyxl>=3.1.0
| 组件 | 用途 | 是否必须 |
|---|---|---|
| Python 3.8+ | 跑全部三个脚本 | 必须 |
openpyxl >= 3.1 |
仅 build_plan_xlsx.py 渲染 xlsx 用 |
仅出 xlsx 时必须 |
check_plan.py |
纯标准库 | 无需额外安装 |
render_preview.py |
纯标准库 | 无需额外安装 |
- 命令示例为 macOS / Linux shell 写法;Windows 用 PowerShell 等价写法(
python替python3) - 不装 openpyxl 也能用:Markdown 预览 + HTML 预览照常出,只是拿不到
.xlsx。此时要如实告诉用户「Excel 需要装一个依赖」,并给出上面那条命令,不要假装已经交付了 xlsx
数据与网络行为声明
| 项目 | 说明 |
|---|---|
| 出网域名 | 无。本 Skill 全程离线运行,不发起任何网络请求 |
| 上传的数据 | 无。不向任何服务器发送内容 |
| 派生的外部进程 | 无 |
| 密钥 / 凭据 | 不读取、不使用、不转发任何 API Key、私钥或环境变量凭据 |
| 读取的本地文件 | 仅用户指定的 plan.json |
| 写入的本地文件 | 仅用户指定输出路径下的 .xlsx / .html / .md |
| 第三方依赖 | 仅 openpyxl(生成 xlsx 时),来自 PyPI,本地安装 |
| 自动扣款 / 计费 | 无。本版本不收取任何费用 |
> 项目计划内容通常含商业信息。本版本全部在本机完成,不上传,这一点可以在用户担心泄密时明确告知。
触发条件
用户要「做一份项目计划 / 排期 / 拆任务 / 排里程碑」,或给出「我要做 XX,大概 N 天」这类模糊意图时使用。不需要用户会 WBS、不需要项目管理经验。
标准流程(严格按序)
先把技能目录取到变量里,后面几步都用它:
SK="$(dirname "$(grep -rl '^name: project-plan-generator' "$HOME/.workbuddy/skills" --include=SKILL.md 2>/dev/null | head -1)")"
> 若 grep 定位失败,改用 Glob 搜 **/project-plan-generator/SKILL.md 取其所在目录。
Step 1 · 解析输入(缺什么就合理推理,不要反复追问)
> 周期缺失、只给相对时长、行业不在 8 类内等场景,按 references/faq.md 处理,不要自创流程。
推理规则:
- 没给行业 → 归类到 industry-templates.md 的 8 类之一,并在预览标注「按 X 行业范式拆解,如需调整请告知」。
- 用户只给一句模糊需求 → 先补一条「项目总目标(含可量化结果)」;量化指标缺依据时标注「待核实」,不要把推断值写成事实。
Step 2 · 拆解与排期
先读 references/industry-templates.md:套行业阶段范式 → 按工期估算基准定天数 → 按排期算法排期 → 风险从风险库按类别取用。
排期算法:定锚点 → 倒排关键路径 → 正排非关键任务 → 识别并行 → 留 10% 缓冲 → 校核负荷 → 写依赖。
硬约束:子任务工期通常 1–10 天(研发模块按范式可到 15 天,超过上限再拆);每阶段 ≥2 模块、每模块 ≥2 子任务;任务名全局唯一。
关键路径与资源负荷不用你手算——plan_analyze.py 会按依赖关系反推每项任务的浮动时间,浮动为 0 的就是关键路径;
并按责任角色逐日统计并行数,超过 6 项告警。你要做的是把依赖写对、把 owner 写实(不要都写「项目负责人」,
否则负荷统计失去意义)。
Step 3 · 写 plan.json
先读 references/plan-schema.md。日期一律补零的 YYYY-MM-DD。
> 不要手写 xlsx。样式与排版全部由脚本保证,手写必然走形。
Step 4 · 自检(不可跳过)
python3 "$SK/scripts/check_plan.py" plan.json
必须 0 个 ERROR。WARN 逐条判断,能修就修,修不了在交付时说明原因。
自检同时会打印关键路径(浮动为 0 的任务链)。交付时把它讲给用户听——它回答的是「哪件事延一天会拖全局」,
这是这份计划里最该被盯住的信息。
| 新增编号 | 含义 |
|---|---|
E9 |
前置依赖成环(A→B→C→A),环上任务互相等待,无法排期也无法算关键路径 |
W6 |
单个责任角色单日并行超 6 项,计划看着合理但人撑不住 |
自检不通过就不要渲染,先修数据。
Step 5 · 渲染
# ① Excel 计划表(需要 openpyxl)
python3 "$SK/scripts/build_plan_xlsx.py" plan.json -o "<项目名>计划表.xlsx"
# ② 单文件 HTML 预览(纯标准库,必定可用)
python3 "$SK/scripts/render_preview.py" plan.json -o preview.html --md preview.md --plain
> --plain 不是笔误:HTML 默认会带隔行浅灰(为长表格屏幕阅读),加 --plain 才是与 xlsx 一致的极简外观。保持这个参数就不要去掉,否则 HTML 和 Excel 看起来是两套风格。
三条命令都成功后才算渲染完成。build_plan_xlsx.py 缺 openpyxl 时会给出中文三步式提示并退出码 2,按提示装依赖后重跑即可。
Step 6 · 落盘与交付
对话里先贴 Markdown 预览表(阶段加粗、任务用 &nbsp; 缩进、属性用文字标签),再说明交付文件,最后调用 present_files。
多平台导出:Excel / WPS 直接开;飞书 / 腾讯文档导入 .xlsx(涉及腾讯文档先走 tencent-docs-routing)。导入会丢失纵向边框、字体、冻结窗格,照 references/style-spec.md 手工对齐,并明确告知用户需恢复哪几项。
Step 7 · 二次迭代
用户提出修改时,直接改 plan.json → 重跑 Step 4 → 重跑 Step 5,全程不产生任何费用、不受任何限制。
异常与降级
| 你会遇到 | 系统怎么表现 | 怎么处理 | 不能做的事 |
|---|---|---|---|
plan.json 路径写错 / 还没生成 |
[问题] 找不到计划文件 + 原因 + 下一步 |
用绝对路径重跑 | 不要凭空造一份 plan.json |
plan.json 不是合法 JSON |
报出行列号 + 原因 + 下一步 | 按行列修语法,或对照 assets/sample-plan.json 重写 |
不要跳过自检直接渲染 |
日期写成 2026-10-1 |
自检 E3「日期缺失或格式非法」 | 改成补零的 2026-10-01 |
不要以为「看起来一样」就能过 |
| 自检有 ERROR | 逐条打印 + 集中「修复指引」 | 清零后再渲染 | ERROR 未清零不渲染 |
| 自检只有 WARN | 正常输出,退出码 0 | 能修就修,修不了在交付时说明 | 不要把 WARN 当 ERROR 卡住 |
| 缺 openpyxl | [问题]/[原因]/[下一步] 三步式提示,退出码 2 |
按提示 pip install 后重跑 |
不要跳过 xlsx 却说已交付三件套 |
| 装 openpyxl 失败 / 无权限 | pip 报权限错误 | 用 pip install --user 或虚拟环境后重试 |
不要直接 sudo pip(污染系统环境) |
| 输出目录不存在或无写权限 | 脚本报 IO 错误 | 换一个可写目录(如用户桌面)后重跑 | 不要静默失败 |
| 生成的 xlsx 打不开 / 提示损坏 | Excel 报错 | 用 check_plan.py 复查数据,重跑渲染 |
不要手工改 xlsx 二进制 |
| 行业不在 8 类范式内 | 无硬报错 | 取骨架最接近的一类改写阶段与任务 | 不要硬套出无关任务 |
| 用户要进度跟踪 / 成本测算 / 资源报价 | 无此能力 | 明确告知未实现,给出替代(Excel 内加列自行跟踪) | 不要临时手搓超出规格的产物 |
| 用户要甘特图 | 有,在 06_甘特图 Sheet |
直接交付 xlsx 并说明关键路径深红条 | 不要手画 ASCII 条形图充数(精度对不上) |
输出规范
| Sheet | 内容 |
|---|---|
01_项目总览 |
基础信息(目标 / 周期 / 交付 / 约束 / 执行逻辑)+ 阶段进度概览 |
02_任务计划表 |
15 列全字段,阶段 / 模块 / 子任务缩进分层,冻结 D3 + 自动筛选 |
03_里程碑清单 |
由 tasks[].milestone 自动派生 |
04_风险与应对 |
类别 / 描述 / 等级 / 影响 / 应对 / 责任人 |
05_执行建议 |
并发管控建议 / 可调优化建议 / 关键重难点 |
06_甘特图 |
任务条形图 + 关键路径高亮 + 里程碑 ◆ + 阶段汇总条,冻结 H4 |
样式要点:主色 #364F6B;里程碑 #3FC1C9、高优 #FC5185、中优 #F0B67F、低优 #95A3B3;正文 #2D3436(不用纯黑);彩色只上文字,禁止整行底色;仅横向细线,默认无竖线;表头下方一条加粗主色分割线;横向 A4 fitToWidth、关闭网格线。完整规范见 references/style-spec.md。
交付前自检清单
- [ ]
check_plan.py无 ERROR,WARN 已处理或已说明 - [ ] 全部日期是补零的
YYYY-MM-DD,任务名无重复 - [ ] 关键路径任务标为「高」优先级;每个锚点前有缓冲
- [ ] 里程碑 ≥3 个且分布在关键节点(不是都堆在最后)
- [ ] 风险 ≥3 类,应对方案是具体动作而非「加强管理」
- [ ] xlsx 六个 Sheet 齐全(含
06_甘特图),冻结窗格 / 打印区域已生效 - [ ] 关键路径已核对:深红条任务确实是「延期即拖全局」的那些,不是算法误判
- [ ]
owner写实到具体角色,资源负荷统计才有意义(全写「项目负责人」等于没统计) - [ ] HTML 预览已落盘并可打开:无换行错位、无截断、层级清晰
- [ ] 对话内 Markdown 预览与 xlsx 数据一致(数字、日期、任务名)
- [ ] 已
present_files交付
常见问题
完整条目见 references/faq.md。最高频的几个:
- 只说得清要做什么、说不清周期 → faq 第 1 条
- 改工期 / 加任务要不要重来 → 随便改,改完重跑自检与渲染即可,无任何限制
- 装不上 openpyxl → 用
pip install --user openpyxl>=3.1.0,或只出 HTML + Markdown - 导入飞书 / 腾讯文档后样式变了 → 在线表格会丢纵向边框 / 字体 / 冻结窗格
- 出甘特图吗 → 出,在 xlsx 的
06_甘特图Sheet(HTML 预览里没有) - 关键路径怎么算的 → 按依赖反推浮动时间,浮动 0 天即在关键路径上
- 我的项目信息会不会外传 → 不会,全程本机离线运行
已知坑
meta.duration_text不要附起止日期:只写「54 天」,否则和「整体起止时间」行重复。- 阶段行不要塞阶段目标:
02_任务计划表的阶段行只放层级 / 名称 / 起止 / 工期 / 责任角色;阶段目标放01_项目总览。 - 前置依赖必须写完整任务名:写「上一步」会触发
check_plan.pyE6。 - 中文列宽由脚本估算:1 个中文字 ≈ 2 个单位,别手工改列宽,应在拆解时压缩任务名长度。
- 颜色只上文字:给整行加底色会破坏极简观感。
- 里程碑自动派生:
tasks[].milestone=true自动进03_里程碑清单;若同时手写顶层milestones,以手写的为准,两者不要冲突。 - HTML 要带
--plain:不带的话 HTML 会渲染成隔行版,与 xlsx 的极简外观不一致。 - Windows 上命令用
python而非python3,路径分隔符用\或正斜杠均可。
目录结构
提交给 SkillHub 的包只含这四项:
project-plan-generator/
├── SKILL.md 本文件
├── references/
│ ├── plan-schema.md plan.json 结构规范(Step 3 必读)
│ ├── industry-templates.md 8 行业拆解范式 + 工期基准 + 排期算法 + 风险库
│ ├── style-spec.md 样式规范(含在线表格对齐清单 + 甘特图配色)
│ └── faq.md 高频问题
├── scripts/
│ ├── check_plan.py 逻辑门禁(纯标准库)
│ ├── plan_analyze.py 依赖环检测 / 关键路径 / 资源负荷(纯标准库,门禁与甘特图共用)
│ ├── build_plan_xlsx.py plan.json → xlsx 渲染,含甘特图(需 openpyxl)
│ ├── render_preview.py plan.json → HTML / Markdown(纯标准库)
│ └── requirements.txt 仅 openpyxl>=3.1.0
└── assets/
└── sample-plan.json 完整示例(54 天市场活动,22 子任务)
> 维护目录另有 README.md(详情页正文)、skill.json(发布元数据)、SKILLHUB-PUBLISH.md(上架清单)、CHANGELOG.md、LICENSE.md、_icon.png —— 这些不随包分发,完整授权条款见 SkillHub 详情页。
授权
- 授权范围:个人自用及其自身客户交付,禁止转售、二次分发、重新上架。
- 收费:本版本免费,SkillHub 与开发者均不就本版本收取费用。
- 专有授权:非开源,不授予修改后公开发布的权利。
免责声明
生成的计划表基于大模型推理与通用行业范式,工期、资源与风险评估仅供参考,不构成专业项目管理或商业决策建议;涉及合同交付、预算承诺、工期承诺时请由项目负责人复核。