npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@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

alt text

这是一个面向 Codex、Claude Code 和其他兼容 Agent Skills 的简历工作流技能。

它把做简历拆成一条可复用的工作流:从已有简历解析并补充,或从真实经历采访开始,建立一份简历母版;再分析目标 JD、生成岗位定制版、检查 ATS 可读性,并维护不同投递版本。生成的简历是独立 HTML,可在浏览器中打印为 PDF;视觉版还可以用附带的本地 Canvas 做最后的排版微调。

这不是一个独立的在线简历网站,而是一组让你的 Agent 按稳定流程工作的 Skills。你仍然需要在 Codex、Claude Code 或其他兼容客户端中与 Agent 对话。

完整的分章节安装与使用指南见:Resume Skills GitHub Pages 教程(页面源码)。

Resume Skills builder

适合谁

  • 想先整理一份可长期维护的简历母版,再针对不同岗位投递的人
  • 希望 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-skills CLI 和本地 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> 打开的实际网页界面:

这个界面怎么用

  1. 打开视觉版 HTML:在简历文件所在目录执行下面的命令。编辑器会启动本机服务,并尝试自动打开浏览器。

    npx -p @chasen-liao/resume-skills@latest resume-skills editor resume_visual.html
  2. 选择与编辑文字:在中间的 A4 画布上单击文字即选中并可输入(仅纯文本,中文输入法可用);双击同样进入编辑。Tab/方向键移动焦点,Enter/空格进入编辑,Ctrl/Cmd+Enter 或点击别处完成,Escape 撤销本次修改。

  3. 调整排版:选中文字后,在右侧“排版”面板调整字号、字重、颜色、对齐、行高和段后间距;页面级设置可以调整页边距和主题色。修改会实时反映在画布中。

  4. 检查页面状态:左侧会显示 A4 垂直溢出提示。出现溢出时,先回到内容或排版流程处理,不要把字号压缩到难以阅读。

  5. 保存修改后的 HTML:点击左侧“保存修改”,会直接覆盖原始 HTML,并把同名前缀的 PDF manifest 标为失效。保存后必须重新渲染和验证 PDF。

  6. 打印 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.md

resume-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 --yes

jd-tailorer 会共享 resume-builder 的事实契约和写作规范;只安装单个 Skill 可能缺少这些参考文件。

Canvas 无法打开某个 HTML

Canvas 只接受带 Resume Skills 编辑协议的内置视觉模板。ATS-safe HTML、普通外部模板或手写 HTML 不一定支持;请回到 Agent 重新生成视觉版,或直接用浏览器打开 HTML 并打印 PDF。

PDF 超过一页或排版溢出

先确认是否有可以删减的低相关内容,再让 Agent 做排版调整。不要删除关键事实、压缩到不可读的字号,或把未确认信息塞进空白区域。

相关链接

License

MIT