@chasen-liao/resume-skills
v0.9.1
Published
Agent skills and a local canvas editor for generated HTML resumes
Readme
Resume Skills
详细教程参考我的 X 推文:https://x.com/chasen_liao/status/2077689805752942619?s=20

这是一个面向 Codex、Claude Code 和其他兼容 Agent Skills 的简历工作流技能。
它把做简历拆成一条可复用的工作流:从已有简历解析并补充,或从真实经历采访开始,建立一份简历母版;再分析目标 JD、生成岗位定制版、检查 ATS 可读性,并维护不同投递版本。生成的简历是独立 HTML,可在浏览器中打印为 PDF;视觉版还可以用附带的本地 Canvas 做最后的排版微调。
这不是一个独立的在线简历网站,而是一组让你的 Agent 按稳定流程工作的 Skills。你仍然需要在 Codex、Claude Code 或其他兼容客户端中与 Agent 对话。
完整的分章节安装与使用指南见:Resume Skills GitHub Pages 教程(页面源码)。

适合谁
- 想先整理一份可长期维护的简历母版,再针对不同岗位投递的人
- 希望 Agent 先采访和核对事实,而不是直接套模板编内容的人
- 需要同时保留视觉版和 ATS-safe 单栏版简历的人
- 需要管理多家公司、多岗位投递版本的人
30 秒开始
1. 安装全部 Skills
先确保本机已安装 Node.js 20 或更高版本,然后在终端执行:
npx skills add Chasen-Liao/resume-skills也可以先查看仓库中的 Skill 列表,不立即安装:
npx skills add Chasen-Liao/resume-skills --list安装完成后,重新打开或新建 Agent 会话。
npm 包:本地 Canvas 编辑器
本仓库同时发布了 npm 包 @chasen-liao/resume-skills,当前 latest 版本以 npm 页面为准。
- GitHub 仓库中的
SKILL.md:提供简历采访、JD 定制、ATS 检查和版本管理流程 - npm 包:提供
resume-skillsCLI 和本地 Canvas 编辑器
Skill 的安装不依赖 npm 包;只有需要手动打开本地 Canvas 时才需要使用 npm CLI:
npx -p @chasen-liao/resume-skills@latest resume-skills editor resume_visual.html推荐使用带
-p @chasen-liao/resume-skills@latest resume-skills的显式形式:裸写npx @chasen-liao/resume-skills@latest resume_visual.html在 Git Bash 等环境下可能被 shim 拦截而无声失败。
也可以全局安装后使用:
npm install --global @chasen-liao/resume-skills
resume-skills editor resume_visual.html包地址:https://www.npmjs.com/package/@chasen-liao/resume-skills
版本自检:CLI 启动时会异步对比 npm registry 的
@latest,发现新版本时在终端提示更新命令(--json模式输出update_available事件);编辑器左下角也会显示当前版本号,并在有新版本时给出提示。离线或不想检查时设置RESUME_SKILLS_NO_UPDATE_CHECK=1。
2. 选择入口
空的简历工作区:先建立母版
没有 resume-facts.yaml 和母版时,调用 resume-workflow。可以导入已有简历或采访真实经历,确认事实后生成母版:
使用 `resume-workflow` 帮我创建或更新简历。我想申请前端开发实习,请先确认事实,不要编造任何经历或数据。你不需要先准备固定格式的简历。已有简历会走“解析 → 确认 → 增量追问”:先确认已识别内容,再只补充模糊、缺失或可能过期的信息;没有简历时,Agent 才会逐步采访个人信息、教育背景、经历、项目和技能。事实确认完成后,再选择输出模式与视觉风格。
已有母版:输入 JD 生成岗位版本
已有 resume-facts.yaml 和母版后,直接输入 JD 文本或文件:
请用我的简历母版分析这份 JD,先告诉我匹配点和真实缺口,再生成定制版。不要把 JD 要求当成我的经历。jd-tailorer 会输出岗位定制版和匹配分析,不会覆盖你的母版。
你可以使用的 4 个核心 Skills
| Skill | 什么时候用 | 主要输入 | 主要输出 |
|---|---|---|---|
| resume-workflow | 希望由 Agent 串联完整流程,不想自己挑选单个 skill | 已有简历或真实经历;可附 JD | 完整端到端生命周期编排(母版制作 + 针对 JD 定制) |
| resume-builder | 创建或更新简历母版、就地打磨经历 | 已有简历或真实个人信息、经历、项目、技能 | 经确认的母版事实库、视觉版或 ATS-safe 版 HTML/PDF |
| jd-tailorer | 针对具体岗位 JD 进行结构化解构、匹配评估与定向定制 | 目标 JD 文本/链接 + 简历母版/事实库 | 变更预览确认后的定制 HTML/PDF、匹配分析报告与版本归档 |
| resume-canvas | 视觉版生成并验证后,进行本地可视化微调与重验闭环 | 已验证的视觉 HTML;可附带 manifest | 本地微调后 HTML、重新验证的 PDF 与更新的 manifest |
推荐工作流
空的简历工作区 → resume-workflow(端到端总编排)
↓
【阶段一:母版生命周期】
已有简历 ──→ 解析 → 确认 → 增量追问 ──┐
├→ resume-builder → 就地打磨经历 → 渲染单页母版
从零开始 ──→ 逐步采访 ─────────────────┘
↓
(可选微调)resume-canvas → 本地可视化微调排版与文字 → 保存后重验闭环
↓
【阶段二:岗位定制生命周期】
输入目标 JD ──→ jd-tailorer ──→ 结构化解构 JD & 输出要求地图
↓
变更预览(前置经历 / 对齐术语 / 真实缺口)
↓
用户确认门禁
↓
生成定制版 HTML/PDF + matching-analysis.md
↓
ATS 质量门禁与单页验证(validate_resume.py)
↓
输出至 tailored/<公司>-<岗位>/ 并更新版本记录
↓
(可选微调)resume-canvas → 本地微调定制版 → 保存后重验闭环每个专业 Skill 均可单独使用;全程只基于用户明确确认的事实,不编造经历,不静默覆盖母版。
两种输出模式
开始生成前,Agent 会让你选择模式。两种模式使用同一份已确认的事实,不会因为换版式而增加经历。
视觉 HTML/PDF
适合人工阅读、作品集和需要更强视觉层次的场景。内置 6 种 A4 风格:
视觉版以 A4 单页和有效区域至少 98% 为目标。resume-builder、jd-tailorer 或 resume-workflow 生成视觉母版或视觉定制版并完成 PDF 验证后,应先询问用户是否需要 Canvas 预览:用户选择需要时,再执行 npx -p @chasen-liao/resume-skills@latest resume-skills editor <实际生成的_visual.html路径> --manifest <实际_manifest路径>;用户暂时不需要时不启动 Canvas,也不阻塞 HTML/PDF 交付。渲染脚本会对声明 data-resume-layout="full-page" 的视觉 HTML 自动分布短内容、在安全密度下限内压缩长内容,并生成低分辨率 *.preview.png。若仍无法达到 98%、单页或底部安全区,必须明确报告原因。若用户选择 Canvas 但当前环境不能执行 npx,Agent 必须明确说明未启动并给出完整手动命令。内容过多时,应优先删减或确认事实,而不是为了塞进一页而缩小到难以阅读。最终 PDF 必须有 *.resume-manifest.json,其中 HTML/PDF/preview hash、Playwright renderer 版本与验证结果都对应当前文件。
ATS-safe HTML/PDF
适合招聘平台或机器解析风险较高的投递场景。它使用单栏布局、标准章节标题、可复制文本和清晰的阅读顺序,尽量减少图片、复杂表格和装饰对解析的影响。
ATS-safe 只是降低解析风险,不代表一定通过任何 ATS,也不代表一定获得面试。当前项目输出 HTML 和浏览器打印 PDF,不生成 DOCX。
本地 Canvas 编辑器
AI 生成简历 HTML 之后,常常只需要一些小修小补:改一个错别字、微调字号或对齐。不必为这些小事重走一遍 Agent 工作流——在终端打开本地 Web 预览端,改完直接保存回本地 HTML,再导出 PDF 即可。
完整闭环:AI 生成 HTML → 打开 Web 预览端 → 小修小补 → 保存到本地 → 导出 PDF。分步实操见 Canvas 预览端指南。
Canvas 只负责已生成视觉简历的最后文字与排版微调,不负责采访、AI 改写、JD 匹配或重新设计结构。文字修改后必须回到 Agent 工作流重新确认事实并验证 PDF。HTML 中已有的本地相对图片路径(例如 ../证件照/证件照-new.png)可在预览中显示;保存时仍保留原始 src,不会把图片内嵌为 base64。
下面是通过 npx -p @chasen-liao/resume-skills@latest resume-skills editor <生成的_visual.html> 打开的实际网页界面:
这个界面怎么用
打开视觉版 HTML:在简历文件所在目录执行下面的命令。编辑器会启动本机服务,并尝试自动打开浏览器。
npx -p @chasen-liao/resume-skills@latest resume-skills editor resume_visual.html选择与编辑文字:在中间的 A4 画布上单击文字即选中并可输入(仅纯文本,中文输入法可用);双击同样进入编辑。Tab/方向键移动焦点,Enter/空格进入编辑,Ctrl/Cmd+Enter 或点击别处完成,Escape 撤销本次修改。
调整排版:选中文字后,在右侧“排版”面板调整字号、字重、颜色、对齐、行高和段后间距;页面级设置可以调整页边距和主题色。修改会实时反映在画布中。
检查页面状态:左侧会显示 A4 垂直溢出提示。出现溢出时,先回到内容或排版流程处理,不要把字号压缩到难以阅读。
保存修改后的 HTML:点击左侧“保存修改”,会直接覆盖原始 HTML,并把同名前缀的 PDF manifest 标为失效。保存后必须重新渲染和验证 PDF。
打印 PDF:点击“打印为 PDF”,在浏览器打印面板中选择 A4,并按需要关闭浏览器默认的页眉和页脚后保存。
草稿会保存在当前浏览器中;关闭页面前请保存修改或打印 PDF。ATS-safe 单栏 HTML、普通外部模板和不带编辑协议的 HTML 不一定能被 Canvas 打开。
可以调整:
- 字号、字重、颜色和对齐方式
- 行高、段后距、页边距和主题色
不支持:
- AI 改写或自动补充经历
- JD 分析和关键词匹配
- 新增字段、插入 HTML、自由拖拽、结构重排或图片编辑
- ATS-safe 单栏模板
对已有视觉 HTML 手动打开编辑器:
npx -p @chasen-liao/resume-skills@latest resume-skills editor resume_visual.html启动前强制校验:
editor会先检查编辑协议(至少 1 个data-resume-editor-id位于叶子文本字段、ID 唯一、无容器级 ID),不合格时直接报错退出并给出rg -n定位命令,不会启动服务。需要单独检查时使用:npx -p @chasen-liao/resume-skills@latest resume-skills validate resume_visual.html
validate只做协议校验不启动服务,退出码 0 = 通过、1 = 失败(失败详情与修复指引在 stderr)。
支持的高级 CLI 参数:
--port <number>或-p <number>:指定监听端口。默认8848;被占用时自动顺延到8853,仍不可用则回退随机端口。显式传入--port时为严格模式:占用即报错退出,不换端口。--host <host>:仅允许 loopback 地址127.0.0.1或::1(默认127.0.0.1);编辑器不会绑定到局域网或公网地址。--json:以 NDJSON 逐行输出事件(server_started/error/update_available/validation_passed);协议校验失败、参数校验失败、端口占用失败均输出event: "error"。脚本请逐行JSON.parse。--manifest <path>:显式指定与该 HTML 关联的 PDF manifest,支持 HTML、PDF 和 manifest 分目录或不同文件名;未传时保存会自动失效与 HTML 同目录同前缀的<文件名>.resume-manifest.json(若存在且关联当前 HTML)。--write-port-file <path>:服务启动后把{url, port, pid, sourcePath}写入该文件(Jupyter 式端口文件),供后台启动/脚本轮询读取就绪状态。--no-open:禁用自动调起系统浏览器(适合集成环境或无 GUI 控制台)。
编辑器建立连接后支持 Live Preview 实时热重载:当源 HTML 文件在外部或由 Agent 更新时,预览与 Canvas 编辑器会自动拉取并刷新最新页面内容。
点击“保存修改”后,文字修改和排版覆盖会原子写回原始 HTML;关联的 *.resume-manifest.json 会立即失效,防止旧 PDF 被误认为仍对应当前 HTML。若 manifest 不在同目录或文件名不同,请用 --manifest <path> 显式关联。
点击“打印为 PDF”后,在浏览器打印面板中选择 A4 并保存 PDF。若浏览器没有自动打开,请直接打开终端中显示的本地地址。
文件会如何组织
在项目目录外创建本地私有工作区,推荐保持“事实库和母版不动、定制版分目录”:
resume/
├── resume-facts.yaml # 唯一事实源;不存放未确认内容
├── resume_visual.html
├── resume_visual.pdf
├── resume_visual.preview.png
├── resume_visual.resume-manifest.json
├── resume_ats.html
├── resume_ats.pdf
└── tailored/
└── company-role/
├── resume_visual.html
├── resume_visual.pdf
├── resume_visual.preview.png
├── resume_visual.resume-manifest.json
├── resume_ats.html
├── resume_ats.pdf
└── matching-analysis.mdresume-facts.yaml 使用 resume-facts.example.yaml 的结构,保存每条事实的来源、证据、置信度和确认时间。jd-tailorer 和 resume-version-manager 都遵循这个思路:定制版只能基于已确认事实进行重排、强调和改写,除非你明确要求,否则不回写或覆盖母版。
用 Git 保留版本历史(推荐)
可以将项目目录外的整个 resume/ 工作区放入本地私有 Git 仓库。在确认事实库/母版变更或生成一份岗位定制版后创建一次提交,就可以清楚比较、恢复和追溯每次投递的依据;只有在试验互斥的母版方向时才需要分支。源码仓库根目录下的 resume/ 已被忽略,避免误提交个人数据。
简历包含个人信息,不应推送到公开远程仓库。Agent 不会自动初始化仓库、提交、推送或覆盖历史;这些会改变版本历史的操作都需要你确认。
重要边界
- 不编造经历、技能、指标、证书、公司或 JD 匹配结果。
- JD 中的关键词是目标要求,不是你的个人事实;缺失项会被标记为缺口,而不是被补进简历。
- 待确认的信息只能留在采访记录或匹配报告中,不能进入最终简历成稿。
- “匹配度”是基于已提供材料的可解释比较,不是录用概率。
- “ATS-safe”是结构和可解析性建议,不是对任何招聘系统的保证。
- 你应在投递前核对联系方式、时间、数字、链接、页数和 PDF 中的文字复制结果。
常用对话示例
从零创建简历
帮我创建一份后端开发实习简历。
请先逐步采访我,再让我选择视觉版或 ATS-safe 版。
所有经历和指标都必须来自我确认的信息。改写经历,但不编数据
请优化下面三条项目经历,目标岗位是 Python 后端实习。
可以调整表达和顺序,但不要补充我没有提供的数字、技术或成果。先分析 JD,再决定是否投递
请分析这份 JD:列出硬性要求、加分项、关键词、我的匹配证据和真实缺口。
先不要改写简历。定制一个岗位版本
请根据这份 JD 定制我的简历。
保留母版,说明每处重排和改写的事实来源,并同时检查视觉版和 ATS-safe 版是否适合这个岗位。投递前做 ATS 检查
请检查这份 resume_ats.pdf 的文本提取顺序、章节结构和 JD 关键词覆盖。
请把解析风险和真实内容缺口分开说明,不要承诺一定通过 ATS。常见问题
Agent 没有自动使用 Skill
重新打开或新建会话,然后在请求中明确写出 Skill 名称,例如 resume-workflow、resume-builder 或 jd-tailorer。也可以在客户端支持时使用 $resume-workflow 这样的显式调用方式。
jd-tailorer 提示缺少参考文件
重新安装全部 Skills:
npx skills add Chasen-Liao/resume-skills --skill '*' --agent codex --yesjd-tailorer 会共享 resume-builder 的事实契约和写作规范;只安装单个 Skill 可能缺少这些参考文件。
Canvas 无法打开某个 HTML
Canvas 只接受带 Resume Skills 编辑协议的内置视觉模板。ATS-safe HTML、普通外部模板或手写 HTML 不一定支持;请回到 Agent 重新生成视觉版,或直接用浏览器打开 HTML 并打印 PDF。
PDF 超过一页或排版溢出
先确认是否有可以删减的低相关内容,再让 Agent 做排版调整。不要删除关键事实、压缩到不可读的字号,或把未确认信息塞进空白区域。
相关链接
License
MIT
