Community寫作與編輯github.com

lonelydoctor/ats-resume-builder

Local-first ATS resume builder and exporter for ResumeIR JSON.

相容平台~Claude Code~Codex CLI~Cursor
npx skills add lonelydoctor/ats-resume-builder

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

說明文件

ATS 简历生成/优化 Skill

任务目标

  • 本 Skill 用于:帮助用户创建、优化和管理 ATS 友好的专业简历
  • 能力包含:简历生成、简历优化、投递可接受性检查、版本管理、导出文件
  • 触发条件:用户需要创建新简历、优化现有简历、对比或导出简历

前置准备

  • 依赖说明:本 Skill 使用纯本地 Python 库处理文件解析与导出(无任何外部服务/网络依赖)
    pdfplumber>=0.10.0   # 解析 PDF 简历
    python-docx>=1.1.0   # 生成 DOCX
    reportlab>=4.0.0     # 生成 PDF(内置 CJK 字体,纯 pip;缺失时自动回退 HTML)
    
  • 目录准备:在当前工作目录创建版本管理目录
    mkdir -p .resume-versions
    

核心原则

硬性规则

  1. 绝不编造用户经历/数据:缺失内容用 【占位符】 并输出"最小补充清单"
  2. ATS 友好:默认单栏、无表格、无文本框、无图标;使用标准段落标题
  3. 投递可接受性:诊断报告必须从 HR 首筛视角检查标题是否对口、年限/地点/联系方式/工作授权/到岗时间是否清楚,以及是否存在照片、年龄、婚育、政治面貌、期望薪资等目标市场禁忌信息
  4. 完整输出:必须同时输出 ResumeIR JSON、诊断报告、投递可接受性结论、改写后的简历正文;导出文件按需由本地脚本生成(见"导出文件")
  5. 用户输入成本最低化:优先支持"粘贴文本/上传文件",仅在关键字段缺失时追问

输出结构

所有操作必须输出以下三部分(导出文件按需生成):

  1. ResumeIR JSON:固定字段名,符合 ResumeIR.v1 Schema
  2. 诊断报告:问题清单 + 严重度 + 建议,符合 诊断报告规范
  3. 投递可接受性结论application_acceptability,回答"现在能不能投 / HR 首筛会卡在哪里 / 先补什么"
  4. 改写后的简历正文:纯文本预览
  5. (可选)导出文件:用户需要 DOCX/PDF 时,调用 scripts/render_resume.py 本地生成

操作步骤

模式选择

根据用户需求选择模式:

  • 模式 1:生成简历(从零):帮助用户从零创建简历
  • 模式 2:优化简历(已有简历):基于用户已有简历进行优化

所有模式都支持可选输入:

  • JD(用户粘贴原文)
  • 目标岗位:target_title / target_level(中国:P6/P7、资深/专家/主管;美国科技岗:Senior/Staff、L5/L6、SDE II 等)
  • 语言:zh-CN / en-US
  • 行业:互联网/AI/数据/研发/运营/销售/职能等
  • 模板:template_id(默认 cn_ats_a4_v1)

模式 1:生成简历(从零)

步骤 1:信息收集

使用最少的追问帮助用户收集以下信息:

  • 基本信息:姓名、电话、邮箱、城市
  • 目标岗位:target_title、target_level、target_industry
  • 最近 2-3 段工作经历:每段包含公司、岗位、起止时间、3 个成果要点
  • 教育经历:学校、学位、专业、毕业时间
  • 技能:主要技能(primary)和次要技能(secondary)

步骤 2:生成 ResumeIR

将收集的信息转换为 ResumeIR 格式(完整字段见 ResumeIR.v1 Schema),缺失字段用 【占位符】 填充。最小骨架示例:

{
  "meta": {"version": "1.0", "language": "zh-CN", "locale": "zh-CN"},
  "basics": {"name": "张三", "phone": "【占位符】", "email": "【占位符】", "target_title": "产品经理"},
  "summary": "",
  "skills": {"primary": ["需求分析", "数据分析"], "secondary": []},
  "work": [{"company": "某公司", "title": "产品经理", "start": "2021-06", "end": "present",
            "bullets": ["主导……,使……提升 20%"]}],
  "projects": [],
  "education": [{"school": "【占位符】", "degree": "本科", "start": "", "end": ""}]
}

步骤 3:输出第一版简历

  • 输出 ResumeIR JSON
  • 输出纯文本预览(按标准顺序排版)
  • 生成诊断报告(重点检查完整性)
  • 生成投递可接受性结论:ready / needs_fix / do_not_submit,并列出 HR 首筛会卡住的 3 个以内问题
  • 输出最小补充清单(最多 8 条问题)

步骤 4:保存版本

自动保存为第一个版本:version_name = "{target_title}-{date}-{lang}"

模式 2:优化简历(已有简历)

步骤 1:解析简历

  • 如果用户上传文件(PDF/DOCX/TXT):调用 scripts/parse_resume.py 提取文本
  • 如果用户粘贴文本:直接使用文本内容

步骤 2:回显确认

向用户回显以下关键字段,确认解析准确性:

  • 姓名
  • 最近公司
  • 最近岗位
  • 工作年限估计

步骤 3:收集 JD(可选)

询问用户是否有目标 JD,如有则粘贴

步骤 4:生成 ResumeIR 和诊断报告

  • 从简历文本中提取信息,生成 ResumeIR(缺失用 【占位符】
  • 输出诊断报告(评分 0-100,问题列表 + 严重度 + 建议)
  • 输出投递可接受性结论:标题匹配、首屏可读、联系方式、地点/到岗/工作授权、市场禁忌信息、岗位证据是否满足 HR 初筛
  • 生成改写后的 ResumeIR
  • 输出纯文本预览(用户需要文件时再调用 render_resume.py 导出)

步骤 5:保存版本

自动保存为第一个版本:version_name = "{target_title}-{date}-{lang}"

简历改写规范

工作经历 bullet 写法

每个 bullet 必须符合以下结构:

动作动词 + 任务 + 方法/工具 + 结果(指标)

示例:

  • ❌ 错误:负责数据分析和报表生成
  • ✅ 正确:使用 Python 和 SQL 分析用户行为数据,通过 A/B 测试优化产品功能,使日活用户增长 20%

量化要求

  • 尽可能使用具体数字、百分比、金额等量化指标
  • 无法量化时使用 【metric】 占位符,并在补充清单中提示

JD 关键词覆盖(如果有 JD)

  • 对 primary skills 做关键词覆盖(≤12 个)
  • 在 bullets 中自然体现,避免生硬堆词

版本管理

保存版本

使用脚本保存当前 ResumeIR:

python3 scripts/version_manager.py save --version-name "产品经理-2024-01-15-zh-CN" --resume-ir "resume_ir.json"

命名版本

python3 scripts/version_manager.py rename --old-name "v1" --new-name "产品经理-2024-01-15-zh-CN"

对比版本

python3 scripts/version_manager.py compare --version1 "v1" --version2 "v2"

回滚版本

python3 scripts/version_manager.py rollback --version-name "v1"

导出文件

本地导出(纯 Python,无外部服务/网络)

当用户要求导出时,将当前 ResumeIR 存为 JSON 后调用脚本:

python3 scripts/render_resume.py --resume-ir "resume_ir.json" --output-formats "docx,pdf" --output-dir ./out

导出采用降级阶梯,任何环境都能产出可用文件:

  • DOCX:python-docx 生成,单栏、标准标题、无表格/文本框,ATS 友好(推荐投递格式)
  • PDF:reportlab + 内置 CJK 字体直出(纯 pip,无需系统字体/系统库);若未安装 reportlab,则自动改出打印优化 HTML,并提示"用浏览器打开后 Ctrl+P 另存为 PDF"
  • 脚本不依赖任何远程服务,clone 到本地即可运行

可用样式

  • cn_ats_a4_v1(中文,默认)/ en_ats_a4_v1(英文);实际中英文由 ResumeIR 的 meta.language 决定
  • 查看:python3 scripts/render_resume.py --list-templates
  • 生成双语或英文简历时,请参考 references/en-resume-conventions.md(动作动词库、禁照片/年龄/婚姻、1 页优先、英文日期 MMM YYYY、量化优先)
  • 面向美国科技岗(SWE/PM/DS):可直接参考 assets/examples/ 下的 en-US-software-engineer.jsonen-US-product-manager.jsonen-US-data-scientist.json 三份可渲染样例(含 LinkedIn/GitHub、美国职级、p99/QPS/SLA 等美国科技度量);meta.language=en-US 时渲染层自动套英文区块标题,并把 ISO 日期 YYYY-MM 自动转 MMM YYYY

资源索引

必要脚本

  • scripts/parse_resume.py:简历解析脚本,支持 PDF/DOCX/TXT/MD
    • 参数:位置参数 <文件路径>(亦兼容 --input-file <路径>
    • 输出:JSON {"text": "...", "format": "pdf|docx|txt", "pages": N, "success": true};失败返回 {"error": "...", "exit_code": N}
  • scripts/version_manager.py:版本管理脚本
    • 参数:save/rename/compare/rollback + 对应参数
    • 输出:版本操作结果
  • scripts/render_resume.py:本地导出脚本(DOCX/PDF/HTML,无外部服务)
    • 参数:--resume-ir <JSON 文件>--output-formats docx,pdf,html--output-dir--file-name
    • 输出:DOCX / PDF(或 HTML 兜底)文件

领域参考

对话流程示例

场景 1:从零生成简历

用户:帮我生成一份简历
智能体:好的,让我帮你创建简历。请告诉我:
       1. 你的目标岗位是什么?
       2. 目前的工作情况(公司/岗位/工作年限)?
       ...

[收集信息]

智能体:已生成第一版简历,以下是我的分析:
       [诊断报告]

       最小补充清单(8 个问题):
       1. 请补充你的具体联系方式(电话/邮箱)
       2. 在第一段工作经历中,你提到的【metric】具体是多少?
       ...

场景 2:优化已有简历

用户:帮我优化这份简历 [上传文件]
智能体:[解析简历] 我从你的简历中提取到以下信息,请确认:
       姓名:张三
       最近公司:某科技公司
       最近岗位:产品经理
       工作年限:3-5 年

       是否有目标 JD?如有请粘贴。

[如有 JD]

智能体:已完成优化,诊断报告如下:
       总评分:72/100

       问题列表:
       [P0] 工作经历部分缺乏量化指标(严重)
            建议:每个 bullet 应包含具体的数字或百分比
            示例改写:"负责产品迭代" → "主导 5 个产品迭代,使用户留存率提升 15%"

       ...

       缺口清单(JD 要求但简历缺失):
       1. SQL 技能(JD 明确要求)
           最小补充问题:你是否有使用 SQL 的经验?用于什么场景?

       [输出改写后的简历]

场景 3:导出文件

用户:导出这份简历
智能体:正在生成 DOCX 和 PDF 文件... [调用 render_resume.py]
       已生成文件:
       - 张三-产品经理-2024-01-15.docx
       - 张三-产品经理-2024-01-15.pdf

场景 4:版本对比

用户:对比 v1 和 v2
智能体:[调用 version_manager.py compare]
       主要差异:
       1. 工作经历 - 某科技公司(2019-2022)
          v1: 负责产品设计和需求分析
          v2: 主导 8 个产品迭代,通过数据驱动优化,使用户满意度提升 25%

       2. 技能 - primary
          v1: ["产品设计", "需求分析", "项目管理"]
          v2: ["产品设计", "需求分析", "项目管理", "数据分析", "SQL", "A/B 测试"]

       建议:v2 版本内容更完整,建议使用 v2 版本进行投递。

场景 5:回滚版本

用户:回滚到 v1
智能体:[调用 version_manager.py rollback]
       已回滚到 v1 版本(产品经理-2024-01-10-zh-CN)

注意事项

失败兜底

  • 简历解析失败:要求用户粘贴纯文本;或让用户用"教育/经历/项目"分段粘贴
  • 信息缺失:用 【占位符】 + 最小补充清单(≤8 问)
  • JD 太长:只抽取岗位职责与任职要求两段,其余忽略
  • 生成内容过泛:强制每条 bullet 含"结果/影响",否则标记为 P1 问题并给改写示例

ATS 友好性(约束对象为"生成/导出"的简历;解析用户上传文件时可正常读取其中的表格内容)

  • 使用标准段落标题(工作经历、教育、技能等)
  • 避免使用表格、文本框、图标、图片
  • 默认单栏布局
  • 使用标准字体(如 Arial、Calibri)
  • 避免使用特殊字符和装饰性元素

质量保证

  • 所有 bullet 必须以动作动词开头(如"主导"、"设计"、"实现"、"优化"等)
  • 确保每个 bullet 都有明确的结果或影响
  • 避免"负责"、"参与"等弱化词
  • 优先使用主动语态,避免被动语态

使用示例

示例 1:从零生成简历(中英文)

  • 功能说明:帮助用户从零创建中英文双语简历
  • 执行方式:智能体对话 + 脚本保存版本
  • 关键参数:language=zh-CN/en-US,target_title,target_level
  • 步骤:
    1. 收集基本信息和经历
    2. 生成中文版 ResumeIR
    3. 生成英文版 ResumeIR(自动翻译)
    4. 保存为两个版本(中文版和英文版)

示例 2:基于 JD 优化简历

  • 功能说明:针对特定 JD 优化简历内容
  • 执行方式:智能体分析 + 脚本解析
  • 关键参数:JD 文本,原简历文件
  • 步骤:
    1. 解析原简历
    2. 分析 JD 要求
    3. 对比找出缺口
    4. 改写简历以覆盖 JD 关键词
    5. 输出对比和优化建议

示例 3:多版本管理

  • 功能说明:创建多个简历版本,对比并选择最佳版本
  • 执行方式:脚本管理版本
  • 关键参数:version_name,resume_ir
  • 步骤:
    1. 保存 v1 版本
    2. 修改后保存 v2 版本
    3. 对比 v1 和 v2
    4. 回滚到最佳版本
    5. 导出最终版本

相關技能

Andrea201709/mcp-docs-toolkit

MCP toolkit for validating, packaging, and maintaining documentation workflows with Codex-friendly checks.

community

coreyhaines31/revops

When the user wants help with revenue operations, lead lifecycle management, or marketing-to-sales handoff processes. Also use when the user mentions 'RevOps,' 'revenue operations,' 'lead scoring,' 'lead routing,' 'MQL,' 'SQL,' 'pipeline stages,' 'deal desk,' 'CRM automation,' 'marketing-to-sales handoff,' 'data hygiene,' 'leads aren't getting to sales,' 'pipeline management,' 'lead qualification,' or 'when should marketing hand off to sales.' Use this for anything involving the systems and processes that connect marketing to revenue. For cold outreach emails, see cold-email. For email drip campaigns, see emails. For pricing decisions, see pricing.

community

chiggosVikash/pattern_principal

AI Agent skills for writing clean, principled production code — GoF, SOLID, YAGNI, DRY

community

tomgoeck/project-docs-skill

Claude Code skill: living single-page project documentation at project-docs/index.html, auto-read and surgically updated by Claude.

community

onmax/nuxt-content

Use when working with Nuxt Content v3, markdown content, or CMS features in Nuxt - provides collections (local/remote/API sources), queryCollection API, MDC rendering, database configuration, NuxtStudio integration, hooks, i18n patterns, and LLMs integration

community

apex-stack-ai/blog-publisher-lite

Free Claude skill for cross-publishing blog articles to Dev.to via API

community