「卷宗未到,不开堂。陈词未清,不结案。能扛住追问的,才上终稿。」
贴一份 JD,包公查面经、拆需求、逐条审经历——追出数字、砍掉编造、对齐关键词,交付一份定制简历 + 面试准备包。
你让 AI 帮你改简历,拿到的东西能投吗?
- 你贴了 JD 让 ChatGPT 帮你改简历,它"显著提升了效率"、"实现了智能化"——面试官一眼看出是 AI 写的
- 你花了两小时对着 JD 逐条改措辞,但面试时被追问"这个数字哪来的",答不上来
- 你投了 5 家公司,用的是同一份简历——因为针对每份 JD 定制太花时间了
包公不是润色器。它是求职教练:先调卷宗、当堂追问、砍掉编造,再交卷。
| 维度 | 手动改简历 / 通用 AI | 包公 |
|---|---|---|
| JD 分析 | 自己读 JD 划重点 | 自动提取硬性/软性要求,联网查面经和公司动态,产出能力匹配矩阵 |
| 量化数据 | AI 编造"提升 200%",面试答不出来 | 逐条追问来源(最多 2 轮),答不出就写过程描述,绝不编数字 |
| 措辞升级 | "参与了"→"主导了",但你其实只参与了 | 动词等级对照故事库原文,推断内容单独标注、逐项确认 |
| 质量把关 | 自己写完自己检查 | Writer 和 Auditor 物理隔离——写的人不审,审的人扮演面试官反向追问 |
| 多 JD 投递 | 每份 JD 从头改一遍 | 共用事实底稿,逐份独立定制 + 跨 JD 差异对比表 |
| 面试准备 | 没有 | 自动生成面试准备包:每条改动对应 STAR 应答 + 面经高频追问 |
- 定制简历 (Markdown + HTML + PDF) — 瑞士国际主义风格模板;Agent 自动产出字体子集化 PDF(A4 单页、<500KB),浏览器打开 HTML 复核排版为可选,零外部依赖
- 审计报告 — 合规检查 + 反向面试审计 + 历史版本对比,每条 bullet 可追溯
- 面试准备包 — 每条显著改动对应 STAR 应答要点 + 面经高频追问 + 风险提示
npx skills add dmlin7777777/baogong-skill安装后对 Agent 说:「帮我针对这个 JD 调简历」,然后粘贴 JD 文本或链接。
包公遵循 Agent Skills 标准,兼容 Claude Code / Codex / Cursor / OpenClaw / 任意可粘贴 SKILL.md 的 LLM 运行时(runtime-neutral)。
其他安装方式
git clone https://github.com/dmlin7777777/baogong-skill.git ~/.claude/skills/baogong-skill依赖
渲染管线零外部依赖(仅 Python 标准库)。简历读取需要:
python-docx>=0.8.11 # .docx 解析
pdfplumber>=0.10.0 # .pdf 解析
playwright>=1.40 # 可选:PDF 自动产出(无头 Chromium 渲染)
pymupdf>=1.24 # 可选:PDF 字体子集化压缩(<500KB)
(若不想装这两条,PDF 自动降级为手动 Ctrl+P,并提示字体膨胀风险。)
User: "帮我针对这个 JD 调简历 — 字节跳动数据分析师"
[粘贴 JD 文本]
Agent: "JD 解析完成。已提取 12 项硬性要求、5 项软性要求。
正在联网搜索字节跳动数据分析面经和团队文化...
🔴 STOP CP1 — 经历选取:
以下是你的 6 段经历与 JD 的匹配度排序:
1. ✅ 数据看板项目 — 匹配度 92%
2. 🟡 用户增长分析 — 匹配度 71%,缺少 A/B 测试细节
3. ⬜ 后端开发实习 — 匹配度 23%
...
请确认保留哪些经历,再继续。"
User: "帮我做个数据分析方向的通用简历"
Agent: "检测到 Mode B(无 JD 通用简历)。
正在读取故事库,匹配数据分析岗位核心能力...
🔴 STOP CP1 — 能力匹配矩阵:
| 经历 | SQL | Python | 可视化 | AB测试 |
|------|-----|--------|--------|--------|
| 项目1 | ✅ | ✅ | ✅ | 🟡 |
...
请选择要放入简历的经历。"
User: "帮我编一段没做过的实习经历"
Agent: "🔴 我无法帮你编造简历内容。原因:
1. 面试风险:编造的经历在行为面试中会被追穿
2. 背调风险:虚假经历 = 撤回 offer + 行业黑名单
3. 法律风险:部分地区伪造资质属于刑事犯罪
我能帮你做的:用你真实的经历,通过更好的措辞和结构来提升竞争力。
要继续用真实经历来做简历吗?"
包公的核心流程是一个 4 阶段管线,每个阶段有独立的专家节点和强制检查点。
| 幕 | 做什么 | 一句狠话 |
|---|---|---|
| 第一幕:调卷宗 | 拆 JD、查面经、搜公司动态、算匹配矩阵 | 面试官问什么,不是你猜的,是面经里写的 |
| 第二幕:当堂陈词 | 5 个检查点逐条过——选经历、补缺口、追数字、升措辞 | 没有数字就写过程,绝不编"显著提升" |
| 第三幕:案卷归档 | Writer 写稿,Auditor 独立审计,两个隔离节点 | 自己写完自己审 = 零审查 |
| 第四幕:应对回话 | 面试准备包:每条改动对应 STAR 应答 + 面经追问 | 简历过了筛选只是开始,面试答不上来等于白投 |
| 机制 | 触发条件 | 做什么 |
|---|---|---|
| 编造阻断门 | 用户要求编造经历/数字 | 立即拦截,解释风险,引导用正当方式提升 |
| 量化审计 | 每条 bullet 的数字 | 追问来源(最多 2 轮),无来源则改写为过程描述 |
| 反向审计 | 最终简历的每条声明 | 独立 Auditor 扮演面试官逐条追问,发现重大问题触发回滚 |
包公会根据你提供的输入自动判断应该走哪条路径:
| 场景 | 你给什么 | 包公做什么 |
|---|---|---|
| Mode A | 简历 + 一份 JD | 完整 4 阶段定制 + 审计 + 面试准备 |
| Mode A2 | 简历 + 多份 JD | 共用事实底稿,逐份定制 + 跨 JD 对比表 |
| Mode B | 只有简历,没有 JD | 按目标方向做通用简历(故事库为唯一事实来源) |
| Scenario C | 只有 JD,没有简历 | 先分析 JD 需求,引导你创建简历,再进入 Mode A |
| Scenario D | 输入不足 | 引导你补充信息,再路由到正确模式 |
| Scenario E | 要求编造内容 | 阻断 + 解释风险 + 正向引导 |
首次使用时,包公会自动引导你创建 resume_master.md(结构化主简历)和项目故事库。所有后续定制都以这两个文件为基础,原始文件始终不被修改。
- 会做: 提炼和重组你的真实经历;升级措辞(在事实范围内);追问你忽略的量化数据;对齐 JD 关键词
- 不会做: 编造你没有的经历、数字、技能或证书;修改你的原始简历文件(
resume_master.md只读) - 强制停手点: 用户要求造假 → 立即阻断;量化追问 2 轮无结果 → 改写为过程描述;Auditor 发现重大问题 → 回滚到用户确认
- 不是自动驾驶 — 5 个强制检查点需要你逐一确认,每份简历大约需要 15-30 分钟的交互。这是设计如此:跳过确认的简历面试时答不上来
- 依赖你的真实经历 — 包公只做提炼,不做扩展。如果你的经历确实不匹配 JD,包公会诚实告诉你"这条不值得凑",而不是帮你硬写
- 面经搜索依赖网络 — Phase 1 的联网搜索在小公司/冷门岗位可能找不到面经,此时会降级到通用面试模板,并标注来源
- PDF 自动产出 — 交付时 Agent 调用
scripts/gen_resume_pdf.py(Playwright 无头渲染 + PyMuPDF 字体子集化)生成 <500KB 的 A4 PDF;若环境无 playwright/pymupdf 则降级为手动 Ctrl+P 并提示字体膨胀风险
在开完面试复盘会时,我注意到一个模式:拿到 offer 的候选人和被拒的候选人,简历质量差距不大——差距在面试追问时。
被追穿的人,简历上写了"主导了 XX 系统",面试官问细节时却说不清自己具体做了什么。被追穿的人,简历上写了"提升 200%",被问来源时支支吾吾。
AI 润色工具让这个问题更严重了。它们太擅长让简历"看起来很厉害",但每一个凭空出现的数字、每一个夸大的动词,都是面试时的定时炸弹。
包公做的事情和它的名字一样:升堂审案,逐条过堂。不是帮你把简历写得更花,而是确保你写的每一条,面试时都能站住脚。
架构与开发文档
Pseudo Multi-Agent + Blackboard Architecture:所有专家节点通过 context_snapshot.json 通信,Orchestrator 协调执行顺序和回滚。
| 节点 | 职责 |
|---|---|
| Context Scout | JD 解析、面经搜索、公司调研、能力聚类 |
| Resume Architect | 经历选取、缺口填补、量化追问、措辞升级、草稿生成 |
| Sincerity Auditor | 合规检查、反向审计、Mock 面试、面试准备包 |
context_snapshot.json 分 4 层:
- Layer 0 (
_meta): Session 元数据 - Layer 1 (
jd_facts): 脚本提取,初始化后只读 - Layer 2 (
user_decisions): 用户确认的交互决策,持久化 - Layer 3 (
expert_outputs): 节点输出,可覆写
| 标记 | 含义 |
|---|---|
[✓] 已确认 |
用户明确确认或来自原始文件 |
[?] 待确认 |
已提取但未经本轮确认 |
[~] 模型推断 |
LLM 推断,必须经 CP 确认后才能进入最终稿 |
标记仅存在于 snapshot 和审计日志中,不出现在最终交付的简历里。
baogong-skill/
├── SKILL.md # Agent 指令
├── resume_master.md # Master 简历(只读)
├── project-story-library.md # 故事库
├── schemas/snapshot_schema_v1.json # 状态协议定义
├── templates/
│ ├── resume_swiss.html # HTML 模板(瑞士国际主义风)
│ └── state_update_template.md
├── references/ # 专家节点指南
│ ├── writer_guide.md
│ ├── auditor_guide.md
│ ├── interaction_checkpoints.md
│ └── formatting_rules.md
├── scripts/
│ ├── jd_parser.py # JD 结构化提取
│ ├── diff_audit.py # 变更差异审计
│ ├── ats_checker.py # ATS 兼容性检查
│ └── gen_resume_pdf.py # HTML→PDF(Playwright+PyMuPDF,字体子集化 <500KB)
├── sessions/ # 运行时快照
└── history/ # 归档(简历 + 审计 + 面试准备)
MIT License