{"id":"feeea2e6-9e74-46c0-a55a-7aa5d0048871","entityType":"agent","slug":"clawhub-soulzhong-recruiting-resume-screening","name":"Recruiting Resume Screening","canonicalUrl":"https://www.xpersona.co/agent/clawhub-soulzhong-recruiting-resume-screening","canonicalPath":"/agent/clawhub-soulzhong-recruiting-resume-screening","generatedAt":"2026-10-11T23:02:43.377Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T18:59:42.068Z","emptyReason":null},"description":"Use when reviewing one or more Chinese-language resumes against a JD, batch-ranking candidates, identifying red flags and follow-up interview questions, or r... Skill: Recruiting Resume Screening Owner: soulzhong Summary: Use when reviewing one or more Chinese-language resumes against a JD, batch-ranking candidates, identifying red flags and follow-up interview questions, or r... Tags: latest:0.1.2 Version history: v0.1.2 | 2026-05-27T13:36:50.049Z | auto - Bumped version metadata to 0.1.2. - Removed the version field from SKILL.md frontmatter for improved consistency. - No","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s173pxpf8zadbjg09cr1s8pzpn83h9dd:recruiting-resume-screening","sourceUrl":"https://clawhub.ai/soulzhong/recruiting-resume-screening","homepage":"https://clawhub.ai/soulzhong/skills/recruiting-resume-screening","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/soulzhong/recruiting-resume-screening","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/soulzhong/skills/recruiting-resume-screening","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Use when reviewing one or more Chinese-language resumes against a JD, batch-ranking candidates, identifying red flags and follow-up interview questions, or r..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T18:59:42.068Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T18:59:42.068Z","emptyReason":null},"stars":null,"forks":null,"downloads":1006,"likes":null,"task":null,"library":null,"packageName":null,"latestVersion":"0.1.2","tractionLabel":"1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T18:59:42.057Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T18:59:42.068Z","lastCrawledAt":"2026-10-11T18:59:42.057Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T18:59:42.057Z","lastVerifiedAt":null,"highlights":[{"version":"0.1.2","createdAt":"2026-05-27T13:36:50.049Z","changelog":"- Bumped version metadata to 0.1.2. - Removed the version field from SKILL.md frontmatter for improved consistency. - No user-facing logic or workflow changes in this release.","fileCount":10,"zipByteSize":21114},{"version":"0.1.1","createdAt":"2026-05-14T13:22:05.623Z","changelog":"Add homepage link to GitHub source repository (https://github.com/SoulZhong/recruiting-skills).","fileCount":9,"zipByteSize":19507},{"version":"0.1.0","createdAt":"2026-05-14T10:15:09.343Z","changelog":"Initial release of recruiting-resume-screening skill. - Provides structured workflow for evaluating Chinese-language resumes against job descriptions. - Emphasizes evidence-based, multi-dimensional assessment rather than keyword matching. - Includes PDF extraction guidelines using multiple backends for robust text retrieval. - Outlines step-by-step process: extraction, triage, five-dimension evaluation, red flag identification, and output discipline. - Enforces reporting standards and anti-patterns to ensure consistency and prevent bias. - Supplies self-checklists and feedback mechanisms for continuous improvement.","fileCount":9,"zipByteSize":19465}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s173pxpf8zadbjg09cr1s8pzpn83h9dd:recruiting-resume-screening","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-soulzhong-recruiting-resume-screening/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-soulzhong-recruiting-resume-screening/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-soulzhong-recruiting-resume-screening/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-soulzhong-recruiting-resume-screening/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-soulzhong-recruiting-resume-screening/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-soulzhong-recruiting-resume-screening/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T23:02:43.376Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-soulzhong-recruiting-resume-screening/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-soulzhong-recruiting-resume-screening/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-soulzhong-recruiting-resume-screening/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-soulzhong-recruiting-resume-screening/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T18:59:42.068Z","emptyReason":null},"readme":"Skill: Recruiting Resume Screening\n\nOwner: soulzhong\n\nSummary: Use when reviewing one or more Chinese-language resumes against a JD, batch-ranking candidates, identifying red flags and follow-up interview questions, or r...\n\nTags: latest:0.1.2\n\nVersion history:\n\nv0.1.2 | 2026-05-27T13:36:50.049Z | auto\n\n- Bumped version metadata to 0.1.2.\n- Removed the version field from SKILL.md frontmatter for improved consistency.\n- No user-facing logic or workflow changes in this release.\n\nv0.1.1 | 2026-05-14T13:22:05.623Z | user\n\nAdd homepage link to GitHub source repository (https://github.com/SoulZhong/recruiting-skills).\n\nv0.1.0 | 2026-05-14T10:15:09.343Z | auto\n\nInitial release of recruiting-resume-screening skill.\n\n- Provides structured workflow for evaluating Chinese-language resumes against job descriptions.\n- Emphasizes evidence-based, multi-dimensional assessment rather than keyword matching.\n- Includes PDF extraction guidelines using multiple backends for robust text retrieval.\n- Outlines step-by-step process: extraction, triage, five-dimension evaluation, red flag identification, and output discipline.\n- Enforces reporting standards and anti-patterns to ensure consistency and prevent bias.\n- Supplies self-checklists and feedback mechanisms for continuous improvement.\n\nArchive index:\n\nArchive v0.1.2: 10 files, 21114 bytes\n\nFiles: batch-screening.md (4000b), EVOLUTION.md (2444b), five-dimension-rubric.md (4520b), output-templates.md (2164b), pdf-extraction.md (2517b), red-flags-catalog.md (2955b), scripts/resume_pdf_extract.py (10306b), skill-card.md (2747b), SKILL.md (8108b), _meta.json (146b)\n\nFile v0.1.2:SKILL.md\n\n---\nname: recruiting-resume-screening\ndescription: Use when reviewing one or more Chinese-language resumes against a JD, batch-ranking candidates, identifying red flags and follow-up interview questions, or re-screening a prior candidate batch. Triggers include 发简历给我筛、根据 JD 评估候选人、批量简历筛选、给候选人排序、找出简历疑点、生成面试必问题、根据面试反馈复核排序、重新评估之前那批简历 等。\n---\n\n# 简历筛选\n\n## Overview\n\n按岗位 JD（或岗位标准包）对候选人做多维度评估，识别疑点与矛盾，给出排序与面试问题。\n\n**Core principle: 看证据，不看关键词。**\n\n简历出现关键词 ≠ 真的做过 ≠ 做深；必须看项目证据和个人贡献。\n\n## When to Use\n\n- 用户发送一份或多份简历 PDF 要求筛选。\n- 用户要求\"根据 JD 评估这个候选人\"。\n- 用户要求\"对比这几个候选人\"并给排序。\n- 用户要求\"找出简历里的疑点 / 风险点\"。\n- 用户要求\"生成面试必问题\"。\n- 用户要求\"重新评估之前那批简历\"。\n\n如果任务覆盖 JD + 筛选 + 面评的完整流程，先加载 [[recruiting-skillset]]。\n\n## Prerequisites\n\n- 已有岗位 JD 或岗位标准包；没有则先从 JD 抽取核心要求。\n- 简历文件已在本地或可获取。\n- 本机可用 PDF 提取后端（任一即可，越多越好）：`fitz` (PyMuPDF) / `pdfplumber` / `pdfminer.six`。\n- 已了解招聘上下文：团队现状、业务阶段、用人风格。\n\n## Workflow\n\n### Step 1 — 获取并提取简历文本\n\n**不要默认单跑 `pdfplumber`**。中文简历 PDF 常有页边跟踪串、竖排装饰字、隐藏文本层，单一后端不可靠。\n\n推荐命令（脚本见 `scripts/resume_pdf_extract.py`）：\n\n```bash\n# 单份 PDF\npython3 scripts/resume_pdf_extract.py /path/to/resume.pdf --output-dir /tmp/resume_extract_one\n\n# 批量 PDF / 一个目录\npython3 scripts/resume_pdf_extract.py /path/to/resume_dir --output-dir /tmp/resume_extract_batch\n```\n\n脚本会：\n\n1. 分别尝试可用的 PDF 后端（`fitz` / `pdfplumber` / `pdfminer.six`）。\n2. 做 Unicode 归一化、空白折叠、跟踪串 / 碎片行清洗。\n3. 计算 `score / chars / lines / keyword_hits / quality`。\n4. 选择分数最高的文本作为正式筛选输入。\n5. 输出 `summary.json`、每份 PDF 对应的最佳 `.txt`、Markdown 索引表。\n\n详见 [pdf-extraction.md](pdf-extraction.md)。\n\n### Step 2 — 批量简历必须先做质量分层\n\n用户一次性发送多份简历时**不要直接逐份硬读**。先做一轮 triage，把能直接评估和需要补核的简历分开。详见 [batch-screening.md](batch-screening.md)。\n\n质量分层建议：\n\n- `high`：`chars >= 2600` 且 `lines >= 55` 且 `score >= 65`\n- `medium`：`chars >= 1600` 且 `lines >= 35` 且 `score >= 35`\n- `low`：低于阈值，标记\"待补核\"，不阻塞整批交付\n\n### Step 3 — 五维评估 + 疑点识别\n\n每位候选人，从五个维度逐一评估，每维度 ★~★★★★★：\n\n1. 专业匹配度（Skill Fit）\n2. 履历稳定性（Career Stability）\n3. 潜在风险（Risk Assessment）\n4. 抗压与自驱（Resilience & Drive）\n5. 团队适配（Team Fit）\n\n完整维度定义与打分依据见 [five-dimension-rubric.md](five-dimension-rubric.md)。\n\n逐条审读简历，主动发现疑点。完整疑点清单（时间类 / 内容类 / 逻辑类 / 行为类）见 [red-flags-catalog.md](red-flags-catalog.md)。每个疑点标注严重程度：\n\n- 🔴 需面试必问\n- 🟡 需关注\n- 🟢 可能正常\n\n### Step 4 — 综合评级\n\n| 评级 | 含义 | 条件 |\n| --- | --- | --- |\n| ⭐⭐⭐ **强推** | 直通面试 | 专业匹配度 ≥ 4★ 且无重大风险，总得分 ≥ 20/25 |\n| ⭐⭐ **推荐** | 进入面试 | 专业匹配度 ≥ 3★，总得分 ≥ 15/25 |\n| ⭐ **待定** | 需电话筛选 | 有亮点但存在明显短板或风险 |\n| ❌ **不推荐** | 不进入面试 | 专业匹配度 < 3★ 或存在不可接受风险 |\n\n### Step 5 — 输出评估报告\n\n每人一份**个人评估卡** + 整批**汇总排序表**。模板见 [output-templates.md](output-templates.md)。\n\n### Step 6 — 面试反馈复核（可选）\n\n用户补充技术一面 / HR 二面 / 用人经理初评后，做一次\"去偏见复核\"：\n\n- 把面试反馈与简历原文逐项对照，区分\"有证据支撑\"和\"主观印象\"。\n- \"能力更强 / 更弱 / 成长性更好\"这类结论，若没有具体案例支撑，标记为证据不足。\n- 自动化、性能、AI 提效等容易被泛化的能力，默认按\"接触过\"处理，除非有明确独立负责证据。\n- 优先检查时间线、工作年限、离职原因、薪资诉求等是否前后矛盾。\n\n必须输出：总体结论（含排序调整）、逐人可疑点（🔴🟡🟢）、对已有面评的修正建议、终面追问（每人 ≥ 5 个 + 横向必问）、可选《终面准备说明》。\n\n## Red Lines（一票否决）\n\n以下情况直接 ❌ 不推荐，无论其他维度多强：\n\n1. 简历造假或严重夸大（有明确证据）。\n2. 方向完全不相关且无转型意愿。\n3. 平均在职时间 < 8 个月且无合理解释。\n4. 薪酬预期超出岗位预算 50% 以上。\n\n## Anti-Patterns（严格禁止）\n\n| 反模式 | 后果 | 正确做法 |\n| --- | --- | --- |\n| 凭记忆输出评估结论 | 凭印象漂移 | 必须先提取文本 → 五维评估 → 评级 |\n| 复用旧会话结论 | 标准漂移、错过更新 | 重新提取、重新评估 |\n| 省略个人评估卡 | 用户无法追溯结论 | 每人必须有完整评估卡 |\n| 无文件评估 | 凭空编造 | 找不到简历必须告知用户并请求 |\n| \"看起来像做了\"，3 行总结 | 失真 | 完整执行五维 + 疑点 + 面试题 |\n| 把内部过程混入正式报告 | 干扰决策 | 文本提取索引、清洗日志只作内部材料 |\n| 全员都给推荐 | 排序失去意义 | 敢下不推荐 / 待定 |\n\n## Self-Check\n\n输出前逐项确认：\n\n- [ ] 每位候选人都提取了简历文本？\n- [ ] 每人都有五维 ★ 评分？\n- [ ] 每人都有疑点清单（🔴🟡🟢）？\n- [ ] 每人都有 3 个面试必问题？\n- [ ] 输出了汇总排序表？\n- [ ] 评级引用了简历中具体内容作为证据？\n- [ ] 不同结论的候选人在排序中区分开？\n- [ ] 报告里没有混入提取脚本明细、清洗日志等过程性内容？\n\n## Output Discipline\n\n- Markdown 格式，适合飞书 / Notion 粘贴。\n- 中文输出。\n- **最终面向用户的报告只保留与筛选决策直接相关的内容**：个人评估卡、汇总排序、亮点、风险、疑点、面试问题、必要的待补核说明。\n- **不要输出与筛选无关的过程性版块**：文本提取质量索引、backend/score/chars/lines 统计、清洗日志等只作内部工作材料，除非用户明确要求。\n- 评估结论要有理有据，引用简历中具体内容作为证据。\n- 不回避矛盾——候选人某方面强但另一方面有风险，两面都写。\n\n## Feedback Loop\n\n完成筛选后主动询问用户：\n\n1. 评级是否准确？哪些人评高了 / 评低了？\n2. 是否遗漏了重要评估维度？\n3. 面试后的实际表现与评估是否一致？\n\n用户反馈 → 更新本 Skill 的评估标准。新发现的风险模式 → 补充到 [red-flags-catalog.md](red-flags-catalog.md)。重大变更 → 写入 [EVOLUTION.md](EVOLUTION.md)。\n\n## See Also\n\n- [five-dimension-rubric.md](five-dimension-rubric.md) — 五维评估完整定义。\n- [red-flags-catalog.md](red-flags-catalog.md) — 疑点完整清单。\n- [output-templates.md](output-templates.md) — 评估卡 / 排序表 / 复核报告模板。\n- [batch-screening.md](batch-screening.md) — 批量筛选纪律。\n- [pdf-extraction.md](pdf-extraction.md) — PDF 提取与多后端 triage。\n- [scripts/resume_pdf_extract.py](scripts/resume_pdf_extract.py) — 多后端 PDF 提取脚本。\n- [EVOLUTION.md](EVOLUTION.md) — 演化日志。\n- 总控流程：[[recruiting-skillset]]；面评：[[interview-evaluation]]。\n\nFile v0.1.2:_meta.json\n\n{\n  \"ownerId\": \"kn71016gfqv0mwvysq1h2adhqd82bt5s\",\n  \"slug\": \"recruiting-resume-screening\",\n  \"version\": \"0.1.2\",\n  \"publishedAt\": 1779889010049\n}\n\nFile v0.1.2:batch-screening.md\n\n# 批量简历筛选纪律\n\n用户一次性发送多份简历时**不要直接逐份硬读原始提取结果**，否则容易被低质量抽取文本拖住整批交付。\n\n## 推荐流程\n\n1. **按人群拆批次**：如果同一轮里混有不同口径（社招 / 校招、算法 / 产品），先拆成独立批次，不要混在一张筛选表里。\n2. **批量提取 PDF 文本**：用 [scripts/resume_pdf_extract.py](scripts/resume_pdf_extract.py) 跑多后端 triage，不要只保留第一种提取结果。\n3. **生成清洗索引**：统计每份 txt 的 `backend / score / chars / lines / quality`，必要时附前几行预览。\n4. **优先筛 high / medium**：先完成可判断候选人的正式筛选并交付，不要等 low 质量文本全部补完。\n5. **low 单独列为待补核**：明确告诉用户该候选人需要回看原 PDF，或暂列\"待补材料\"。\n6. **清洗索引只作为内部执行产物**：除非用户明确要求查看提取质量 / 清洗过程，否则最终交付报告中**不要加入**文本提取质量索引、backend/score/chars/lines 表、抽取质量说明等版块。\n\n## 文本质量分层\n\n- `high`：`chars >= 2600` 且 `lines >= 55` 且 `score >= 65`\n- `medium`：`chars >= 1600` 且 `lines >= 35` 且 `score >= 35`\n- `low`：低于上述阈值，先标记\"待补核\"，避免阻塞整批交付\n\n## 根因判断提示\n\n如果原始文本出现以下模式，优先怀疑是 PDF 结构问题，**不要**误判成候选人简历本身差：\n\n- 大量 `n n / B B / x x / X X` 之类的单字符碎片。\n- 页首或页尾反复出现一长串字母数字混合 ID。\n- 正文中间穿插竖排页边字符或装饰层文字。\n- 同一段正文可读，但夹杂少量莫名英文 / 数字碎片。\n\n## 批量任务执行纪律\n\n- **只处理本轮明确提供的文件**：本机缓存目录可能混有历史附件。批量提取前应把本轮附件路径复制 / 链接到独立临时目录，或显式传入文件清单，避免把无关简历 / JD 混入本次评估。\n- **先交付一批，再开下一批**：例如社招和校招分开发文件，不要等所有人都看完才第一次交付。\n- **不要让坏文本阻塞整批**：单个候选人的抽取失败，不影响其他候选人先出正式结论。\n- **必须有状态面板**：至少明确哪些候选人已提取、已评估、待补核、已交付。\n- **大批量可并行评估**：10 份以上简历可按 3-5 人一组拆分并行产出分组评估卡，再由主线程统一校准分数、排序和措辞；最终报告必须保持同一评价口径。\n- **索引文件可落盘复用**：建议生成一份 Markdown 清洗索引，后续筛选直接按索引优先级推进。\n\n## 重新评估之前批次的纪律\n\n用户说\"重新评估之前的某批简历\"时，**不要**直接沿用旧结论，也不要先让用户重传。按下面顺序恢复材料：\n\n1. 用会话搜索（或本地笔记）找回上次筛选时的岗位名称、JD 文件名、候选人名单。\n2. 到本机缓存目录优先查找历史附件：\n   - `~/Downloads/` 或对话工具的附件缓存目录\n   - 用户常用的临时目录（按当前 agent 环境约定）\n   - 常见命名形态：`doc_<id>_候选人名.pdf`、`doc_<id>_岗位JD.md`\n3. 批量 PDF 优先按岗位关键词过滤，再确认与上次会话中的候选人名单一致。\n4. 找回文件后**必须重新提取、重新评估**。允许复用历史\"文件定位结果\"，**不允许**复用历史\"评估结论\"。\n5. 如果用户要求\"把评估 markdown 文件发回会话\"，先生成本地 `.md` 报告文件，再通过附件机制发送，而不是只把内容粘到回复里。\n\n## 索引输出字段建议\n\n```markdown\n| 候选人 | 文本质量 | 有效行数 | 有效字符数 | 提取文件 |\n| --- | --- | ---: | ---: | --- |\n| 张三 | high | 78 | 3120 | /tmp/resume_extract/zhang_san.fitz.txt |\n| 李四 | low | 22 | 980 | /tmp/resume_extract/li_si.pdfminer.txt（待补核） |\n```\n\nFile v0.1.2:EVOLUTION.md\n\n# Evolution Log — recruiting-resume-screening\n\n## 2026-05-12 — PDF 脚本补 stderr 警告\n\n- CEO review 发现：三个后端 wrapper 静默吞错（`except Exception: return None`），批量跑挂时无法 debug 是哪个后端在哪个文件上失败。\n- 修正：新增 `_warn()` 辅助，在 fitz / pdfplumber / pdfminer 三处 wrapper 里输出 `warn: {backend} failed on {file}: {ErrType}: {msg}`。\n- 接口不变；评分与最佳后端选择逻辑不变。\n\n## 2026-05-12 — 重构为 Superpowers 风格 + 开源 PDF 脚本\n\n- 把原 `05-resume-screening.md` 拆分：SKILL.md 只留触发、工作流、评级、反模式、自检；\n  - 五维评估细节独立为 `five-dimension-rubric.md`。\n  - 疑点清单独立为 `red-flags-catalog.md`。\n  - 个人评估卡 / 排序表 / 复核报告模板独立为 `output-templates.md`。\n  - 批量筛选纪律独立为 `batch-screening.md`。\n  - PDF 提取与多后端 triage 独立为 `pdf-extraction.md`。\n- 补一份开源版 `scripts/resume_pdf_extract.py`：多后端（fitz / pdfplumber / pdfminer.six）+ Unicode 归一化 + 跟踪串 / 碎片行清洗 + 评分 + 质量分层 + JSON / Markdown 输出。\n- 描述字段改为 \"Use when ...\" 触发条件。\n\n## 2026-05-11 — 校招 AI 平台工程师筛选校准\n\n- 在反模式中明确\"凭记忆输出\"\"复用旧会话结论\"\"3 行总结当完整执行\"\"把内部过程混入正式报告\"。\n- 强化文本质量分层：`high / medium / low`，low 候选人单独列待补核，不阻塞整批交付。\n- 强化 PDF 提取纪律：不再默认单跑 `pdfplumber`，必须先做多后端 triage。\n\n## 2025-02-14 — 多后端 PDF 提取 triage 沉淀\n\n- 触发：多简历筛选暴露 `pdfplumber` 在中文简历 PDF 上的严重噪声（页边跟踪串、隐藏文本层、装饰碎片）。\n- 验证集：11 份 AI 平台工程师简历。\n- 发现：\n  - 单一后端时 11 份都被判为 `low`。\n  - 多后端 + 清洗后，每份 PDF 的\"最佳后端\"会变化（`pdfplumber` / `pdfminer` / `fitz` 各有胜出）。\n  - 跟踪串 / 短 ASCII 碎片清洗显著提升可读性和关键词召回。\n- 输出：\n  - 新增 `scripts/resume_pdf_extract.py`。\n  - 强制要求\"先 triage 再排序\"，废弃旧固定阈值，改为评分驱动的 `high / medium / low` 分层。\n- 经验：\n  - 不要相信第一次提取结果。\n  - 始终 triage、选最佳清洗文本、把 `low` 单独留人工复核。\n\nFile v0.1.2:five-dimension-rubric.md\n\n# 五维评估完整定义\n\n每个维度 ★~★★★★★（1-5 星）。打分必须引用简历原文证据。\n\n## 维度 1：专业匹配度（Skill Fit）\n\n衡量核心技术 / 理论能力与 JD 要求的重合度。\n\n观察点：\n\n- 区分\"真正做过\"与\"简历提及\"：项目深度、个人贡献比例、可验证产出。\n- **警惕光环效应**：强能力不等于对口能力。例如强化学习高手 ≠ 大模型微调专家、CV 算法专家 ≠ 时序预测专家。\n- 识别\"听起来相关\"但实际无关的经历：传统推荐算法 ≠ 大模型应用；NLP 标注 ≠ 大模型应用。\n- 评估学位与岗位需求的匹配度：博士理论强但工程交付薄是常见模式。\n\n打分参考：\n\n| 星级 | 标准 |\n| --- | --- |\n| ★★★★★ | 核心要求全部命中，有可验证的深度项目，能独立主导 |\n| ★★★★ | 核心要求大部分命中，有 1-2 个可验证的深度项目 |\n| ★★★ | 核心要求部分命中，可参与，需要补能力短板 |\n| ★★ | 关键词匹配但缺乏深度证据，转型成本较大 |\n| ★ | 方向不匹配，关键词命中但实际经历不相关 |\n\n## 维度 2：履历稳定性（Career Stability）\n\n衡量工作连续性与履历健康度。\n\n观察点：\n\n- 工作经历连续性：有无频繁跳槽（平均每段 < 1.5 年需警示）。\n- 空窗期：超过 3 个月的空白需标注并追问。\n- 学业路径是否连贯：博士学制过长需了解原因。\n- 当前状态：是否在职、是否刚入职新公司又看机会。\n\n打分参考：\n\n| 星级 | 标准 |\n| --- | --- |\n| ★★★★★ | 经历连续，主动晋升 / 转型逻辑清晰 |\n| ★★★★ | 经历完整，偶有短期工作但有合理解释 |\n| ★★★ | 有 1-2 段短期工作或空窗期，需面试澄清 |\n| ★★ | 多次短期工作或长空窗期，稳定性存疑 |\n| ★ | 持续短期跳动 / 时间线混乱 / 自述与事实矛盾 |\n\n## 维度 3：潜在风险（Risk Assessment）\n\n衡量录用候选人后可能引入的负面因素。\n\n观察点：\n\n- **硬风险**：竞业协议、薪酬超标、地域 / 签证问题。\n- **软风险**：简历包装过度（数据不可验证）、频繁转行、学历水分。\n- **团队风险**：工作风格不匹配（如纯学术背景进入高压冲刺团队）。\n- **文化风险**：个人价值观与团队文化的潜在冲突。\n\n打分参考（高分 = 低风险）：\n\n| 星级 | 标准 |\n| --- | --- |\n| ★★★★★ | 无明显风险，信息透明，期望合理 |\n| ★★★★ | 有 1-2 个小风险点，可通过面试澄清 |\n| ★★★ | 有需要面试重点验证的风险（如薪资缺口、转行） |\n| ★★ | 存在多个风险或单一重大风险（如竞业、严重夸大） |\n| ★ | 存在不可接受的风险或硬性冲突 |\n\n## 维度 4：抗压与自驱（Resilience & Drive）\n\n衡量能否在高压、不确定、缺乏指令的环境下交付。\n\n观察点：\n\n- 有无高压环境交付经验（创业公司、紧急项目、军工等）。\n- 是否有\"从 0 到 1\"的经历，而非只在大公司做螺丝钉。\n- 持续学习的证据：近 1-2 年是否有新技能 / 新方向的探索。\n- 自驱力的信号：个人项目、开源贡献、技术博客、独立完成的小工具等。\n\n打分参考：\n\n| 星级 | 标准 |\n| --- | --- |\n| ★★★★★ | 多次从 0 到 1 + 持续学习 + 独立产出（开源 / 项目 / 内容） |\n| ★★★★ | 有 1-2 段高压 / 从 0 到 1 经验，有学习证据 |\n| ★★★ | 有交付经验，自驱信号有限 |\n| ★★ | 主要在大团队执行螺丝钉式工作，缺乏自驱证据 |\n| ★ | 长期处于稳定低压环境，缺乏主动行为 |\n\n## 维度 5：团队适配（Team Fit）\n\n衡量与当前团队阶段、节奏、风格的匹配度。\n\n观察点：\n\n- 团队阶段：冲刺期 / 建设期 / 维护期。\n- 工作节奏：能否适应\"先出结果再优化\"的务实风格。\n- 协作模式：独狼型 vs 团队型，与当前团队需求是否匹配。\n- 技术栈兼容性：是否能快速融入现有技术体系。\n\n打分参考：\n\n| 星级 | 标准 |\n| --- | --- |\n| ★★★★★ | 经历与当前团队阶段高度匹配，协作模式契合 |\n| ★★★★ | 有可迁移的协作经验，少量风格差异可补齐 |\n| ★★★ | 协作模式与团队当前阶段有些不一致，需引导 |\n| ★★ | 协作模式 / 节奏 / 风格存在明显落差 |\n| ★ | 方向、节奏、协作均不匹配 |\n\nFile v0.1.2:output-templates.md\n\n# 简历筛选输出模板\n\n正式交付给用户的报告只保留与决策直接相关的版块；过程性内容（提取脚本明细、清洗日志、文本质量索引）一律放进内部材料。\n\n## 个人评估卡（每人一份）\n\n```markdown\n## [姓名]（[工作年限] / [学历]）\n\n**综合评级：⭐⭐⭐ 强推 | ⭐⭐ 推荐 | ⭐ 待定 | ❌ 不推荐**\n\n### 五维评分\n\n| 维度 | 评分 | 关键发现 |\n| --- | --- | --- |\n| 专业匹配 | ★★★★☆ | ... |\n| 履历稳定 | ★★★☆☆ | ... |\n| 潜在风险 | ★★★★☆ | ... |\n| 抗压自驱 | ★★★☆☆ | ... |\n| 团队适配 | ★★★★☆ | ... |\n\n### 疑点清单\n- 🔴/🟡/🟢 [疑点描述]\n\n### 核心亮点\n- ...\n\n### 风险提示\n- ⚠️ ...\n\n### 面试必问题（Top 3）\n1. ...\n2. ...\n3. ...\n```\n\n## 汇总排序表\n\n```markdown\n| 排名 | 姓名 | 评级 | 专业力 | 稳定性 | 风险 | 疑点 | 总分 | 核心理由（一句话） |\n| --- | --- | --- | --- | --- | --- | --- | --- | --- |\n| 1 | ... | ⭐⭐⭐ | ★★★★★ | ★★★★ | 低 | 无 | 22/25 | ... |\n```\n\n## 面试反馈复核报告（Step 6 可选）\n\n```markdown\n# [岗位] 面试反馈复核（YYYY-MM-DD）\n\n## 总体结论\n- 排序调整建议：\n- 不同岗位方向（如业务测试 vs 系统测试）应分别给出排序：\n\n## 逐人可疑点\n\n### [候选人姓名]\n- 🔴 [证据冲突或高风险项]\n- 🟡 [证据不足 / 被高估项]\n- 🟢 [需确认项]\n\n## 已有面评修正建议\n- [候选人]：把\"能独立负责自动化\"修正为\"接触过，独立负责待验证\"\n\n## 终面追问\n\n### [候选人]（每人 ≥ 5 个问题）\n1. 时间线类追问\n2. 真实贡献追问\n3. 能力深度追问\n4. 稳定性 / 离职原因追问\n5. 岗位匹配追问\n\n## 横向必问问题\n1. ...\n2. ...\n```\n\n## 内部清洗索引（仅内部使用，不发用户）\n\n```markdown\n| 候选人 | 文本质量 | 有效行数 | 有效字符数 | 提取文件 |\n| --- | --- | ---: | ---: | --- |\n```\n\n## 待补核名单\n\n```markdown\n| 候选人 | 原因 | 需补材料 |\n| --- | --- | --- |\n| ... | 文本提取质量低 | 原始 PDF / 候选人重发 |\n```\n\nFile v0.1.2:pdf-extraction.md\n\n# PDF 提取与多后端 triage\n\n中文简历 PDF 上下文：\n\n- 单一后端容易把页边跟踪串、竖排装饰字、隐藏文本层一起抽出。\n- `pdfplumber` / `pdfminer.six` / `fitz`（PyMuPDF）对同一份 PDF 表现差异明显。\n- 先做\"多后端提取 → 清洗 → 打分 → 选最优文本\"，比人工盯原始噪声稳定得多。\n\n## 依赖\n\n任一即可，越多越好：\n\n```bash\n# 推荐三套都装上，脚本会自动选最优\npython3 -m pip install --user pymupdf pdfplumber pdfminer.six\n```\n\n> macOS 备选：`textutil -convert txt -stdout xxx.pdf` 只对文字型 PDF 有效，图片型 PDF 会报 encoding 错误，仍需 OCR。\n\n## 推荐命令\n\n单份 PDF：\n\n```bash\npython3 scripts/resume_pdf_extract.py /path/to/resume.pdf --output-dir /tmp/resume_extract_one\n```\n\n批量 PDF / 一个目录：\n\n```bash\npython3 scripts/resume_pdf_extract.py /path/to/resume_dir --output-dir /tmp/resume_extract_batch\n```\n\n脚本会：\n\n1. 分别尝试可用后端（`fitz` / `pdfplumber` / `pdfminer.six`）。\n2. 对每个结果做 Unicode 归一化、空白折叠、跟踪串 / 碎片行清洗。\n3. 计算 `score / chars / lines / keyword_hits / quality`。\n4. 选择分数最高的文本作为正式筛选输入。\n5. 输出：\n   - `summary.json`\n   - 每份 PDF 对应的最佳 `.txt`\n   - stdout Markdown 表格（可直接粘回会话）\n\n## 文本质量分层\n\n| 等级 | 判定 |\n| --- | --- |\n| `high` | `chars >= 2600` 且 `lines >= 55` 且 `score >= 65` |\n| `medium` | `chars >= 1600` 且 `lines >= 35` 且 `score >= 35` |\n| `low` | 低于上述阈值，标记\"待补核\" |\n\n## 常见陷阱\n\n- **下载到 JSON 不是 PDF**：批量下载后检查文件大小，若所有文件都是几百 bytes 大概率是错误响应体。\n- **`.doc` 旧格式**：macOS 上没有 antiword/catdoc 时难以提取，建议要求候选人发 PDF 或 `.docx`。\n- **加密 / 图片型 PDF**：所有文本后端都会返回空或乱码，需要 OCR；当前脚本会把这种情况标记为 `low` 并提示原因。\n- **简历模板花哨**：极简模板、双列 / 三列模板、带装饰侧边栏的模板，往往要换后端才能正确还原阅读顺序。\n\n## 与简历筛选流程的衔接\n\n- 提取完成后**不要**把 backend/score/chars/lines 表写进正式筛选报告，只放进内部工作材料。\n- 文本质量 `low` 的候选人单独列\"待补核\"名单，**不阻塞**其他候选人交付。\n- 提取产物建议落到独立临时目录，避免与历史附件混淆。\n\nFile v0.1.2:red-flags-catalog.md\n\n# 简历疑点完整清单\n\n逐条审读简历，主动发现以下类型的疑点。**每条都要列出来**。\n\n标注严重程度：🔴 需面试必问 | 🟡 需关注 | 🟢 可能正常。\n\n## 时间类疑点\n\n- 工作经历之间的空窗期（> 3 个月未说明）。\n- 在职时间异常短（< 6 个月）。\n- 学业时间异常（如博士 > 6 年、本科 > 5 年）。\n- 时间重叠（同时声称在两家公司任职）。\n- 简历时间线至今未闭合（最后一段经历结束于过去，当前状态不明）。\n- 时间写到未来，或\"至今\"口径混乱。\n\n## 内容类疑点\n\n- 成果数据过于漂亮且无法第三方验证（如\"性能提升 16 倍\"）。\n- 职责描述模糊，无法判断实际参与深度（如\"参与\"\"了解\"）。\n- 角色定位模糊（\"技术顾问\"但描述像全职）。\n- 项目描述宏大但个人贡献比例不清。\n- 关键词堆砌但缺乏对应的具体项目支撑。\n- 自动化 / 性能 / AI 提效等容易泛化的能力，没有规模 / 框架 / 维护证据。\n\n## 逻辑类疑点\n\n- 岗位层级与年龄 / 经验不匹配（如 7 年经验仍为初级岗）。\n- 薪资 / 职级在同一公司长期无变化。\n- 转行无过渡（如通信突然转 AI，无中间经历）。\n- 简历前后矛盾（如教育时间与工作时间重叠）。\n- 自述年限与真实起止时间不匹配。\n\n## 行为类疑点\n\n- 刚入职新公司即投简历。\n- 频繁在相似岗位间跳动（无晋升逻辑）。\n- 长期在同一职级水平流动。\n- 从稳定工作转向自由职业 / 个人项目且持续时间长。\n- 离职原因连续偏主观（发展、重复、无帮助），稳定性存疑。\n\n## 关键词光环类（容易高估）\n\n- 提到 LangGraph / Claude Code / OpenHands / Skill / Agent 框架等新概念 → 默认按\"了解过\"处理，必须面试核实是否读过源码、跑过 demo、改造过旧系统。\n- 提到 RAG / LoRA / SFT / RLHF / MoE / Agent → 区分是工程师独立完成还是工程团队配合、自己负责什么具体环节。\n- \"我设计 / 我负责\" → 需核实 mentor、正式员工、数据 / 测试团队的参与边界。\n- 强算法背景（RL / GAN / Diffusion / 大模型等）→ 不等于具体业务方向匹配（推荐、搜索、对话、内容生成、风控等都是常见业务方向，要看候选人长项与岗位真正核心问题是否对齐）。\n\n## 表达与实际差距类\n\n- 表达流畅、项目链路讲得完整 → 不等于技术深度强；必须看关键追问下能否讲清实现细节、指标、badcase 和方案权衡。\n- 全链路主导 → 不等于细节掌握扎实；必须追问素材库规模、数据清洗、评测方法等细节。\n\n## 使用要点\n\n- 每个疑点都要在面试问题中转化为可验证的追问。\n- 🔴 必须问；🟡 视情况问；🟢 留作面试官现场判断。\n- 一个候选人 🔴 ≥ 3 个时需要考虑是否直接降级评级。\n\nFile v0.1.2:skill-card.md\n\n## Description:\n\nReviews Chinese-language resumes against a job description, ranks candidate batches, flags risks, and generates follow-up interview questions.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[soulzhong](https://clawhub.ai/user/soulzhong)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nRecruiters, hiring managers, and recruiting operations teams use this skill to screen Chinese-language resumes against a JD, compare candidates in batches, identify evidence-backed concerns, and prepare interview follow-up questions.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Searching historical local folders or attachment caches can expose unrelated private resumes or job materials.\n\nMitigation: Run the skill in a constrained workspace and process only files explicitly provided or confirmed for the current screening task.\n\nRisk: Plaintext resume extraction outputs can retain sensitive candidate data after screening.\n\nMitigation: Write extraction outputs to a task-specific temporary directory and delete plaintext resume files after use.\n\nRisk: Feedback-driven changes to screening rules can alter future evaluations without review.\n\nMitigation: Treat proposed rule changes as maintainer-reviewed updates rather than automatic persistent edits.\n\nRisk: PDF parsing dependencies expand the runtime surface for untrusted resume files.\n\nMitigation: Install PDF dependencies in an isolated, pinned environment and review the skill before deployment.\n\n## Reference(s):\n\n- [ClawHub Skill Page](https://clawhub.ai/soulzhong/skills/recruiting-resume-screening)\n- [Five-Dimension Rubric](artifact/five-dimension-rubric.md)\n- [Red Flags Catalog](artifact/red-flags-catalog.md)\n- [Output Templates](artifact/output-templates.md)\n- [Batch Screening Guidance](artifact/batch-screening.md)\n- [PDF Extraction Guidance](artifact/pdf-extraction.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Chinese Markdown reports with candidate assessment cards, ranking tables, risk notes, and interview questions; optional JSON and Markdown extraction summaries when processing PDFs.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May produce local extracted resume text and summary files during PDF triage; final reports omit extraction logs unless requested.]\n\n## Skill Version(s):\n\n0.1.2 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.1.1: 9 files, 19507 bytes\n\nFiles: batch-screening.md (4000b), EVOLUTION.md (2433b), five-dimension-rubric.md (4520b), output-templates.md (2164b), pdf-extraction.md (2517b), red-flags-catalog.md (2955b), scripts/resume_pdf_extract.py (9858b), SKILL.md (8180b), _meta.json (146b)\n\nFile v0.1.1:SKILL.md\n\n---\nname: recruiting-resume-screening\ndescription: Use when reviewing one or more Chinese-language resumes against a JD, batch-ranking candidates, identifying red flags and follow-up interview questions, or re-screening a prior candidate batch. Triggers include 发简历给我筛、根据 JD 评估候选人、批量简历筛选、给候选人排序、找出简历疑点、生成面试必问题、根据面试反馈复核排序、重新评估之前那批简历 等。\nversion: 0.1.0\nhomepage: https://github.com/SoulZhong/recruiting-skills\n---\n\n# 简历筛选\n\n## Overview\n\n按岗位 JD（或岗位标准包）对候选人做多维度评估，识别疑点与矛盾，给出排序与面试问题。\n\n**Core principle: 看证据，不看关键词。**\n\n简历出现关键词 ≠ 真的做过 ≠ 做深；必须看项目证据和个人贡献。\n\n## When to Use\n\n- 用户发送一份或多份简历 PDF 要求筛选。\n- 用户要求\"根据 JD 评估这个候选人\"。\n- 用户要求\"对比这几个候选人\"并给排序。\n- 用户要求\"找出简历里的疑点 / 风险点\"。\n- 用户要求\"生成面试必问题\"。\n- 用户要求\"重新评估之前那批简历\"。\n\n如果任务覆盖 JD + 筛选 + 面评的完整流程，先加载 [[recruiting-skillset]]。\n\n## Prerequisites\n\n- 已有岗位 JD 或岗位标准包；没有则先从 JD 抽取核心要求。\n- 简历文件已在本地或可获取。\n- 本机可用 PDF 提取后端（任一即可，越多越好）：`fitz` (PyMuPDF) / `pdfplumber` / `pdfminer.six`。\n- 已了解招聘上下文：团队现状、业务阶段、用人风格。\n\n## Workflow\n\n### Step 1 — 获取并提取简历文本\n\n**不要默认单跑 `pdfplumber`**。中文简历 PDF 常有页边跟踪串、竖排装饰字、隐藏文本层，单一后端不可靠。\n\n推荐命令（脚本见 `scripts/resume_pdf_extract.py`）：\n\n```bash\n# 单份 PDF\npython3 scripts/resume_pdf_extract.py /path/to/resume.pdf --output-dir /tmp/resume_extract_one\n\n# 批量 PDF / 一个目录\npython3 scripts/resume_pdf_extract.py /path/to/resume_dir --output-dir /tmp/resume_extract_batch\n```\n\n脚本会：\n\n1. 分别尝试可用的 PDF 后端（`fitz` / `pdfplumber` / `pdfminer.six`）。\n2. 做 Unicode 归一化、空白折叠、跟踪串 / 碎片行清洗。\n3. 计算 `score / chars / lines / keyword_hits / quality`。\n4. 选择分数最高的文本作为正式筛选输入。\n5. 输出 `summary.json`、每份 PDF 对应的最佳 `.txt`、Markdown 索引表。\n\n详见 [pdf-extraction.md](pdf-extraction.md)。\n\n### Step 2 — 批量简历必须先做质量分层\n\n用户一次性发送多份简历时**不要直接逐份硬读**。先做一轮 triage，把能直接评估和需要补核的简历分开。详见 [batch-screening.md](batch-screening.md)。\n\n质量分层建议：\n\n- `high`：`chars >= 2600` 且 `lines >= 55` 且 `score >= 65`\n- `medium`：`chars >= 1600` 且 `lines >= 35` 且 `score >= 35`\n- `low`：低于阈值，标记\"待补核\"，不阻塞整批交付\n\n### Step 3 — 五维评估 + 疑点识别\n\n每位候选人，从五个维度逐一评估，每维度 ★~★★★★★：\n\n1. 专业匹配度（Skill Fit）\n2. 履历稳定性（Career Stability）\n3. 潜在风险（Risk Assessment）\n4. 抗压与自驱（Resilience & Drive）\n5. 团队适配（Team Fit）\n\n完整维度定义与打分依据见 [five-dimension-rubric.md](five-dimension-rubric.md)。\n\n逐条审读简历，主动发现疑点。完整疑点清单（时间类 / 内容类 / 逻辑类 / 行为类）见 [red-flags-catalog.md](red-flags-catalog.md)。每个疑点标注严重程度：\n\n- 🔴 需面试必问\n- 🟡 需关注\n- 🟢 可能正常\n\n### Step 4 — 综合评级\n\n| 评级 | 含义 | 条件 |\n| --- | --- | --- |\n| ⭐⭐⭐ **强推** | 直通面试 | 专业匹配度 ≥ 4★ 且无重大风险，总得分 ≥ 20/25 |\n| ⭐⭐ **推荐** | 进入面试 | 专业匹配度 ≥ 3★，总得分 ≥ 15/25 |\n| ⭐ **待定** | 需电话筛选 | 有亮点但存在明显短板或风险 |\n| ❌ **不推荐** | 不进入面试 | 专业匹配度 < 3★ 或存在不可接受风险 |\n\n### Step 5 — 输出评估报告\n\n每人一份**个人评估卡** + 整批**汇总排序表**。模板见 [output-templates.md](output-templates.md)。\n\n### Step 6 — 面试反馈复核（可选）\n\n用户补充技术一面 / HR 二面 / 用人经理初评后，做一次\"去偏见复核\"：\n\n- 把面试反馈与简历原文逐项对照，区分\"有证据支撑\"和\"主观印象\"。\n- \"能力更强 / 更弱 / 成长性更好\"这类结论，若没有具体案例支撑，标记为证据不足。\n- 自动化、性能、AI 提效等容易被泛化的能力，默认按\"接触过\"处理，除非有明确独立负责证据。\n- 优先检查时间线、工作年限、离职原因、薪资诉求等是否前后矛盾。\n\n必须输出：总体结论（含排序调整）、逐人可疑点（🔴🟡🟢）、对已有面评的修正建议、终面追问（每人 ≥ 5 个 + 横向必问）、可选《终面准备说明》。\n\n## Red Lines（一票否决）\n\n以下情况直接 ❌ 不推荐，无论其他维度多强：\n\n1. 简历造假或严重夸大（有明确证据）。\n2. 方向完全不相关且无转型意愿。\n3. 平均在职时间 < 8 个月且无合理解释。\n4. 薪酬预期超出岗位预算 50% 以上。\n\n## Anti-Patterns（严格禁止）\n\n| 反模式 | 后果 | 正确做法 |\n| --- | --- | --- |\n| 凭记忆输出评估结论 | 凭印象漂移 | 必须先提取文本 → 五维评估 → 评级 |\n| 复用旧会话结论 | 标准漂移、错过更新 | 重新提取、重新评估 |\n| 省略个人评估卡 | 用户无法追溯结论 | 每人必须有完整评估卡 |\n| 无文件评估 | 凭空编造 | 找不到简历必须告知用户并请求 |\n| \"看起来像做了\"，3 行总结 | 失真 | 完整执行五维 + 疑点 + 面试题 |\n| 把内部过程混入正式报告 | 干扰决策 | 文本提取索引、清洗日志只作内部材料 |\n| 全员都给推荐 | 排序失去意义 | 敢下不推荐 / 待定 |\n\n## Self-Check\n\n输出前逐项确认：\n\n- [ ] 每位候选人都提取了简历文本？\n- [ ] 每人都有五维 ★ 评分？\n- [ ] 每人都有疑点清单（🔴🟡🟢）？\n- [ ] 每人都有 3 个面试必问题？\n- [ ] 输出了汇总排序表？\n- [ ] 评级引用了简历中具体内容作为证据？\n- [ ] 不同结论的候选人在排序中区分开？\n- [ ] 报告里没有混入提取脚本明细、清洗日志等过程性内容？\n\n## Output Discipline\n\n- Markdown 格式，适合飞书 / Notion 粘贴。\n- 中文输出。\n- **最终面向用户的报告只保留与筛选决策直接相关的内容**：个人评估卡、汇总排序、亮点、风险、疑点、面试问题、必要的待补核说明。\n- **不要输出与筛选无关的过程性版块**：文本提取质量索引、backend/score/chars/lines 统计、清洗日志等只作内部工作材料，除非用户明确要求。\n- 评估结论要有理有据，引用简历中具体内容作为证据。\n- 不回避矛盾——候选人某方面强但另一方面有风险，两面都写。\n\n## Feedback Loop\n\n完成筛选后主动询问用户：\n\n1. 评级是否准确？哪些人评高了 / 评低了？\n2. 是否遗漏了重要评估维度？\n3. 面试后的实际表现与评估是否一致？\n\n用户反馈 → 更新本 Skill 的评估标准。新发现的风险模式 → 补充到 [red-flags-catalog.md](red-flags-catalog.md)。重大变更 → 写入 [EVOLUTION.md](EVOLUTION.md)。\n\n## See Also\n\n- [five-dimension-rubric.md](five-dimension-rubric.md) — 五维评估完整定义。\n- [red-flags-catalog.md](red-flags-catalog.md) — 疑点完整清单。\n- [output-templates.md](output-templates.md) — 评估卡 / 排序表 / 复核报告模板。\n- [batch-screening.md](batch-screening.md) — 批量筛选纪律。\n- [pdf-extraction.md](pdf-extraction.md) — PDF 提取与多后端 triage。\n- [scripts/resume_pdf_extract.py](scripts/resume_pdf_extract.py) — 多后端 PDF 提取脚本。\n- [EVOLUTION.md](EVOLUTION.md) — 演化日志。\n- 总控流程：[[recruiting-skillset]]；面评：[[interview-evaluation]]。\n\nFile v0.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn71016gfqv0mwvysq1h2adhqd82bt5s\",\n  \"slug\": \"recruiting-resume-screening\",\n  \"version\": \"0.1.1\",\n  \"publishedAt\": 1778764925623\n}\n\nFile v0.1.1:batch-screening.md\n\n# 批量简历筛选纪律\n\n用户一次性发送多份简历时**不要直接逐份硬读原始提取结果**，否则容易被低质量抽取文本拖住整批交付。\n\n## 推荐流程\n\n1. **按人群拆批次**：如果同一轮里混有不同口径（社招 / 校招、算法 / 产品），先拆成独立批次，不要混在一张筛选表里。\n2. **批量提取 PDF 文本**：用 [scripts/resume_pdf_extract.py](scripts/resume_pdf_extract.py) 跑多后端 triage，不要只保留第一种提取结果。\n3. **生成清洗索引**：统计每份 txt 的 `backend / score / chars / lines / quality`，必要时附前几行预览。\n4. **优先筛 high / medium**：先完成可判断候选人的正式筛选并交付，不要等 low 质量文本全部补完。\n5. **low 单独列为待补核**：明确告诉用户该候选人需要回看原 PDF，或暂列\"待补材料\"。\n6. **清洗索引只作为内部执行产物**：除非用户明确要求查看提取质量 / 清洗过程，否则最终交付报告中**不要加入**文本提取质量索引、backend/score/chars/lines 表、抽取质量说明等版块。\n\n## 文本质量分层\n\n- `high`：`chars >= 2600` 且 `lines >= 55` 且 `score >= 65`\n- `medium`：`chars >= 1600` 且 `lines >= 35` 且 `score >= 35`\n- `low`：低于上述阈值，先标记\"待补核\"，避免阻塞整批交付\n\n## 根因判断提示\n\n如果原始文本出现以下模式，优先怀疑是 PDF 结构问题，**不要**误判成候选人简历本身差：\n\n- 大量 `n n / B B / x x / X X` 之类的单字符碎片。\n- 页首或页尾反复出现一长串字母数字混合 ID。\n- 正文中间穿插竖排页边字符或装饰层文字。\n- 同一段正文可读，但夹杂少量莫名英文 / 数字碎片。\n\n## 批量任务执行纪律\n\n- **只处理本轮明确提供的文件**：本机缓存目录可能混有历史附件。批量提取前应把本轮附件路径复制 / 链接到独立临时目录，或显式传入文件清单，避免把无关简历 / JD 混入本次评估。\n- **先交付一批，再开下一批**：例如社招和校招分开发文件，不要等所有人都看完才第一次交付。\n- **不要让坏文本阻塞整批**：单个候选人的抽取失败，不影响其他候选人先出正式结论。\n- **必须有状态面板**：至少明确哪些候选人已提取、已评估、待补核、已交付。\n- **大批量可并行评估**：10 份以上简历可按 3-5 人一组拆分并行产出分组评估卡，再由主线程统一校准分数、排序和措辞；最终报告必须保持同一评价口径。\n- **索引文件可落盘复用**：建议生成一份 Markdown 清洗索引，后续筛选直接按索引优先级推进。\n\n## 重新评估之前批次的纪律\n\n用户说\"重新评估之前的某批简历\"时，**不要**直接沿用旧结论，也不要先让用户重传。按下面顺序恢复材料：\n\n1. 用会话搜索（或本地笔记）找回上次筛选时的岗位名称、JD 文件名、候选人名单。\n2. 到本机缓存目录优先查找历史附件：\n   - `~/Downloads/` 或对话工具的附件缓存目录\n   - 用户常用的临时目录（按当前 agent 环境约定）\n   - 常见命名形态：`doc_<id>_候选人名.pdf`、`doc_<id>_岗位JD.md`\n3. 批量 PDF 优先按岗位关键词过滤，再确认与上次会话中的候选人名单一致。\n4. 找回文件后**必须重新提取、重新评估**。允许复用历史\"文件定位结果\"，**不允许**复用历史\"评估结论\"。\n5. 如果用户要求\"把评估 markdown 文件发回会话\"，先生成本地 `.md` 报告文件，再通过附件机制发送，而不是只把内容粘到回复里。\n\n## 索引输出字段建议\n\n```markdown\n| 候选人 | 文本质量 | 有效行数 | 有效字符数 | 提取文件 |\n| --- | --- | ---: | ---: | --- |\n| 张三 | high | 78 | 3120 | /tmp/resume_extract/zhang_san.fitz.txt |\n| 李四 | low | 22 | 980 | /tmp/resume_extract/li_si.pdfminer.txt（待补核） |\n```\n\nFile v0.1.1:EVOLUTION.md\n\n# Evolution Log — resume-screening\n\n## 2026-05-12 — PDF 脚本补 stderr 警告\n\n- CEO review 发现：三个后端 wrapper 静默吞错（`except Exception: return None`），批量跑挂时无法 debug 是哪个后端在哪个文件上失败。\n- 修正：新增 `_warn()` 辅助，在 fitz / pdfplumber / pdfminer 三处 wrapper 里输出 `warn: {backend} failed on {file}: {ErrType}: {msg}`。\n- 接口不变；评分与最佳后端选择逻辑不变。\n\n## 2026-05-12 — 重构为 Superpowers 风格 + 开源 PDF 脚本\n\n- 把原 `05-resume-screening.md` 拆分：SKILL.md 只留触发、工作流、评级、反模式、自检；\n  - 五维评估细节独立为 `five-dimension-rubric.md`。\n  - 疑点清单独立为 `red-flags-catalog.md`。\n  - 个人评估卡 / 排序表 / 复核报告模板独立为 `output-templates.md`。\n  - 批量筛选纪律独立为 `batch-screening.md`。\n  - PDF 提取与多后端 triage 独立为 `pdf-extraction.md`。\n- 补一份开源版 `scripts/resume_pdf_extract.py`：多后端（fitz / pdfplumber / pdfminer.six）+ Unicode 归一化 + 跟踪串 / 碎片行清洗 + 评分 + 质量分层 + JSON / Markdown 输出。\n- 描述字段改为 \"Use when ...\" 触发条件。\n\n## 2026-05-11 — 校招 AI 平台工程师筛选校准\n\n- 在反模式中明确\"凭记忆输出\"\"复用旧会话结论\"\"3 行总结当完整执行\"\"把内部过程混入正式报告\"。\n- 强化文本质量分层：`high / medium / low`，low 候选人单独列待补核，不阻塞整批交付。\n- 强化 PDF 提取纪律：不再默认单跑 `pdfplumber`，必须先做多后端 triage。\n\n## 2025-02-14 — 多后端 PDF 提取 triage 沉淀\n\n- 触发：多简历筛选暴露 `pdfplumber` 在中文简历 PDF 上的严重噪声（页边跟踪串、隐藏文本层、装饰碎片）。\n- 验证集：11 份 AI 平台工程师简历。\n- 发现：\n  - 单一后端时 11 份都被判为 `low`。\n  - 多后端 + 清洗后，每份 PDF 的\"最佳后端\"会变化（`pdfplumber` / `pdfminer` / `fitz` 各有胜出）。\n  - 跟踪串 / 短 ASCII 碎片清洗显著提升可读性和关键词召回。\n- 输出：\n  - 新增 `scripts/resume_pdf_extract.py`。\n  - 强制要求\"先 triage 再排序\"，废弃旧固定阈值，改为评分驱动的 `high / medium / low` 分层。\n- 经验：\n  - 不要相信第一次提取结果。\n  - 始终 triage、选最佳清洗文本、把 `low` 单独留人工复核。\n\nFile v0.1.1:five-dimension-rubric.md\n\n# 五维评估完整定义\n\n每个维度 ★~★★★★★（1-5 星）。打分必须引用简历原文证据。\n\n## 维度 1：专业匹配度（Skill Fit）\n\n衡量核心技术 / 理论能力与 JD 要求的重合度。\n\n观察点：\n\n- 区分\"真正做过\"与\"简历提及\"：项目深度、个人贡献比例、可验证产出。\n- **警惕光环效应**：强能力不等于对口能力。例如强化学习高手 ≠ 大模型微调专家、CV 算法专家 ≠ 时序预测专家。\n- 识别\"听起来相关\"但实际无关的经历：传统推荐算法 ≠ 大模型应用；NLP 标注 ≠ 大模型应用。\n- 评估学位与岗位需求的匹配度：博士理论强但工程交付薄是常见模式。\n\n打分参考：\n\n| 星级 | 标准 |\n| --- | --- |\n| ★★★★★ | 核心要求全部命中，有可验证的深度项目，能独立主导 |\n| ★★★★ | 核心要求大部分命中，有 1-2 个可验证的深度项目 |\n| ★★★ | 核心要求部分命中，可参与，需要补能力短板 |\n| ★★ | 关键词匹配但缺乏深度证据，转型成本较大 |\n| ★ | 方向不匹配，关键词命中但实际经历不相关 |\n\n## 维度 2：履历稳定性（Career Stability）\n\n衡量工作连续性与履历健康度。\n\n观察点：\n\n- 工作经历连续性：有无频繁跳槽（平均每段 < 1.5 年需警示）。\n- 空窗期：超过 3 个月的空白需标注并追问。\n- 学业路径是否连贯：博士学制过长需了解原因。\n- 当前状态：是否在职、是否刚入职新公司又看机会。\n\n打分参考：\n\n| 星级 | 标准 |\n| --- | --- |\n| ★★★★★ | 经历连续，主动晋升 / 转型逻辑清晰 |\n| ★★★★ | 经历完整，偶有短期工作但有合理解释 |\n| ★★★ | 有 1-2 段短期工作或空窗期，需面试澄清 |\n| ★★ | 多次短期工作或长空窗期，稳定性存疑 |\n| ★ | 持续短期跳动 / 时间线混乱 / 自述与事实矛盾 |\n\n## 维度 3：潜在风险（Risk Assessment）\n\n衡量录用候选人后可能引入的负面因素。\n\n观察点：\n\n- **硬风险**：竞业协议、薪酬超标、地域 / 签证问题。\n- **软风险**：简历包装过度（数据不可验证）、频繁转行、学历水分。\n- **团队风险**：工作风格不匹配（如纯学术背景进入高压冲刺团队）。\n- **文化风险**：个人价值观与团队文化的潜在冲突。\n\n打分参考（高分 = 低风险）：\n\n| 星级 | 标准 |\n| --- | --- |\n| ★★★★★ | 无明显风险，信息透明，期望合理 |\n| ★★★★ | 有 1-2 个小风险点，可通过面试澄清 |\n| ★★★ | 有需要面试重点验证的风险（如薪资缺口、转行） |\n| ★★ | 存在多个风险或单一重大风险（如竞业、严重夸大） |\n| ★ | 存在不可接受的风险或硬性冲突 |\n\n## 维度 4：抗压与自驱（Resilience & Drive）\n\n衡量能否在高压、不确定、缺乏指令的环境下交付。\n\n观察点：\n\n- 有无高压环境交付经验（创业公司、紧急项目、军工等）。\n- 是否有\"从 0 到 1\"的经历，而非只在大公司做螺丝钉。\n- 持续学习的证据：近 1-2 年是否有新技能 / 新方向的探索。\n- 自驱力的信号：个人项目、开源贡献、技术博客、独立完成的小工具等。\n\n打分参考：\n\n| 星级 | 标准 |\n| --- | --- |\n| ★★★★★ | 多次从 0 到 1 + 持续学习 + 独立产出（开源 / 项目 / 内容） |\n| ★★★★ | 有 1-2 段高压 / 从 0 到 1 经验，有学习证据 |\n| ★★★ | 有交付经验，自驱信号有限 |\n| ★★ | 主要在大团队执行螺丝钉式工作，缺乏自驱证据 |\n| ★ | 长期处于稳定低压环境，缺乏主动行为 |\n\n## 维度 5：团队适配（Team Fit）\n\n衡量与当前团队阶段、节奏、风格的匹配度。\n\n观察点：\n\n- 团队阶段：冲刺期 / 建设期 / 维护期。\n- 工作节奏：能否适应\"先出结果再优化\"的务实风格。\n- 协作模式：独狼型 vs 团队型，与当前团队需求是否匹配。\n- 技术栈兼容性：是否能快速融入现有技术体系。\n\n打分参考：\n\n| 星级 | 标准 |\n| --- | --- |\n| ★★★★★ | 经历与当前团队阶段高度匹配，协作模式契合 |\n| ★★★★ | 有可迁移的协作经验，少量风格差异可补齐 |\n| ★★★ | 协作模式与团队当前阶段有些不一致，需引导 |\n| ★★ | 协作模式 / 节奏 / 风格存在明显落差 |\n| ★ | 方向、节奏、协作均不匹配 |\n\nFile v0.1.1:output-templates.md\n\n# 简历筛选输出模板\n\n正式交付给用户的报告只保留与决策直接相关的版块；过程性内容（提取脚本明细、清洗日志、文本质量索引）一律放进内部材料。\n\n## 个人评估卡（每人一份）\n\n```markdown\n## [姓名]（[工作年限] / [学历]）\n\n**综合评级：⭐⭐⭐ 强推 | ⭐⭐ 推荐 | ⭐ 待定 | ❌ 不推荐**\n\n### 五维评分\n\n| 维度 | 评分 | 关键发现 |\n| --- | --- | --- |\n| 专业匹配 | ★★★★☆ | ... |\n| 履历稳定 | ★★★☆☆ | ... |\n| 潜在风险 | ★★★★☆ | ... |\n| 抗压自驱 | ★★★☆☆ | ... |\n| 团队适配 | ★★★★☆ | ... |\n\n### 疑点清单\n- 🔴/🟡/🟢 [疑点描述]\n\n### 核心亮点\n- ...\n\n### 风险提示\n- ⚠️ ...\n\n### 面试必问题（Top 3）\n1. ...\n2. ...\n3. ...\n```\n\n## 汇总排序表\n\n```markdown\n| 排名 | 姓名 | 评级 | 专业力 | 稳定性 | 风险 | 疑点 | 总分 | 核心理由（一句话） |\n| --- | --- | --- | --- | --- | --- | --- | --- | --- |\n| 1 | ... | ⭐⭐⭐ | ★★★★★ | ★★★★ | 低 | 无 | 22/25 | ... |\n```\n\n## 面试反馈复核报告（Step 6 可选）\n\n```markdown\n# [岗位] 面试反馈复核（YYYY-MM-DD）\n\n## 总体结论\n- 排序调整建议：\n- 不同岗位方向（如业务测试 vs 系统测试）应分别给出排序：\n\n## 逐人可疑点\n\n### [候选人姓名]\n- 🔴 [证据冲突或高风险项]\n- 🟡 [证据不足 / 被高估项]\n- 🟢 [需确认项]\n\n## 已有面评修正建议\n- [候选人]：把\"能独立负责自动化\"修正为\"接触过，独立负责待验证\"\n\n## 终面追问\n\n### [候选人]（每人 ≥ 5 个问题）\n1. 时间线类追问\n2. 真实贡献追问\n3. 能力深度追问\n4. 稳定性 / 离职原因追问\n5. 岗位匹配追问\n\n## 横向必问问题\n1. ...\n2. ...\n```\n\n## 内部清洗索引（仅内部使用，不发用户）\n\n```markdown\n| 候选人 | 文本质量 | 有效行数 | 有效字符数 | 提取文件 |\n| --- | --- | ---: | ---: | --- |\n```\n\n## 待补核名单\n\n```markdown\n| 候选人 | 原因 | 需补材料 |\n| --- | --- | --- |\n| ... | 文本提取质量低 | 原始 PDF / 候选人重发 |\n```\n\nFile v0.1.1:pdf-extraction.md\n\n# PDF 提取与多后端 triage\n\n中文简历 PDF 上下文：\n\n- 单一后端容易把页边跟踪串、竖排装饰字、隐藏文本层一起抽出。\n- `pdfplumber` / `pdfminer.six` / `fitz`（PyMuPDF）对同一份 PDF 表现差异明显。\n- 先做\"多后端提取 → 清洗 → 打分 → 选最优文本\"，比人工盯原始噪声稳定得多。\n\n## 依赖\n\n任一即可，越多越好：\n\n```bash\n# 推荐三套都装上，脚本会自动选最优\npython3 -m pip install --user pymupdf pdfplumber pdfminer.six\n```\n\n> macOS 备选：`textutil -convert txt -stdout xxx.pdf` 只对文字型 PDF 有效，图片型 PDF 会报 encoding 错误，仍需 OCR。\n\n## 推荐命令\n\n单份 PDF：\n\n```bash\npython3 scripts/resume_pdf_extract.py /path/to/resume.pdf --output-dir /tmp/resume_extract_one\n```\n\n批量 PDF / 一个目录：\n\n```bash\npython3 scripts/resume_pdf_extract.py /path/to/resume_dir --output-dir /tmp/resume_extract_batch\n```\n\n脚本会：\n\n1. 分别尝试可用后端（`fitz` / `pdfplumber` / `pdfminer.six`）。\n2. 对每个结果做 Unicode 归一化、空白折叠、跟踪串 / 碎片行清洗。\n3. 计算 `score / chars / lines / keyword_hits / quality`。\n4. 选择分数最高的文本作为正式筛选输入。\n5. 输出：\n   - `summary.json`\n   - 每份 PDF 对应的最佳 `.txt`\n   - stdout Markdown 表格（可直接粘回会话）\n\n## 文本质量分层\n\n| 等级 | 判定 |\n| --- | --- |\n| `high` | `chars >= 2600` 且 `lines >= 55` 且 `score >= 65` |\n| `medium` | `chars >= 1600` 且 `lines >= 35` 且 `score >= 35` |\n| `low` | 低于上述阈值，标记\"待补核\" |\n\n## 常见陷阱\n\n- **下载到 JSON 不是 PDF**：批量下载后检查文件大小，若所有文件都是几百 bytes 大概率是错误响应体。\n- **`.doc` 旧格式**：macOS 上没有 antiword/catdoc 时难以提取，建议要求候选人发 PDF 或 `.docx`。\n- **加密 / 图片型 PDF**：所有文本后端都会返回空或乱码，需要 OCR；当前脚本会把这种情况标记为 `low` 并提示原因。\n- **简历模板花哨**：极简模板、双列 / 三列模板、带装饰侧边栏的模板，往往要换后端才能正确还原阅读顺序。\n\n## 与简历筛选流程的衔接\n\n- 提取完成后**不要**把 backend/score/chars/lines 表写进正式筛选报告，只放进内部工作材料。\n- 文本质量 `low` 的候选人单独列\"待补核\"名单，**不阻塞**其他候选人交付。\n- 提取产物建议落到独立临时目录，避免与历史附件混淆。\n\nFile v0.1.1:red-flags-catalog.md\n\n# 简历疑点完整清单\n\n逐条审读简历，主动发现以下类型的疑点。**每条都要列出来**。\n\n标注严重程度：🔴 需面试必问 | 🟡 需关注 | 🟢 可能正常。\n\n## 时间类疑点\n\n- 工作经历之间的空窗期（> 3 个月未说明）。\n- 在职时间异常短（< 6 个月）。\n- 学业时间异常（如博士 > 6 年、本科 > 5 年）。\n- 时间重叠（同时声称在两家公司任职）。\n- 简历时间线至今未闭合（最后一段经历结束于过去，当前状态不明）。\n- 时间写到未来，或\"至今\"口径混乱。\n\n## 内容类疑点\n\n- 成果数据过于漂亮且无法第三方验证（如\"性能提升 16 倍\"）。\n- 职责描述模糊，无法判断实际参与深度（如\"参与\"\"了解\"）。\n- 角色定位模糊（\"技术顾问\"但描述像全职）。\n- 项目描述宏大但个人贡献比例不清。\n- 关键词堆砌但缺乏对应的具体项目支撑。\n- 自动化 / 性能 / AI 提效等容易泛化的能力，没有规模 / 框架 / 维护证据。\n\n## 逻辑类疑点\n\n- 岗位层级与年龄 / 经验不匹配（如 7 年经验仍为初级岗）。\n- 薪资 / 职级在同一公司长期无变化。\n- 转行无过渡（如通信突然转 AI，无中间经历）。\n- 简历前后矛盾（如教育时间与工作时间重叠）。\n- 自述年限与真实起止时间不匹配。\n\n## 行为类疑点\n\n- 刚入职新公司即投简历。\n- 频繁在相似岗位间跳动（无晋升逻辑）。\n- 长期在同一职级水平流动。\n- 从稳定工作转向自由职业 / 个人项目且持续时间长。\n- 离职原因连续偏主观（发展、重复、无帮助），稳定性存疑。\n\n## 关键词光环类（容易高估）\n\n- 提到 LangGraph / Claude Code / OpenHands / Skill / Agent 框架等新概念 → 默认按\"了解过\"处理，必须面试核实是否读过源码、跑过 demo、改造过旧系统。\n- 提到 RAG / LoRA / SFT / RLHF / MoE / Agent → 区分是工程师独立完成还是工程团队配合、自己负责什么具体环节。\n- \"我设计 / 我负责\" → 需核实 mentor、正式员工、数据 / 测试团队的参与边界。\n- 强算法背景（RL / GAN / Diffusion / 大模型等）→ 不等于具体业务方向匹配（推荐、搜索、对话、内容生成、风控等都是常见业务方向，要看候选人长项与岗位真正核心问题是否对齐）。\n\n## 表达与实际差距类\n\n- 表达流畅、项目链路讲得完整 → 不等于技术深度强；必须看关键追问下能否讲清实现细节、指标、badcase 和方案权衡。\n- 全链路主导 → 不等于细节掌握扎实；必须追问素材库规模、数据清洗、评测方法等细节。\n\n## 使用要点\n\n- 每个疑点都要在面试问题中转化为可验证的追问。\n- 🔴 必须问；🟡 视情况问；🟢 留作面试官现场判断。\n- 一个候选人 🔴 ≥ 3 个时需要考虑是否直接降级评级。\n\nArchive v0.1.0: 9 files, 19465 bytes\n\nFiles: batch-screening.md (4000b), EVOLUTION.md (2433b), five-dimension-rubric.md (4520b), output-templates.md (2164b), pdf-extraction.md (2517b), red-flags-catalog.md (2955b), scripts/resume_pdf_extract.py (9858b), SKILL.md (8123b), _meta.json (146b)\n\nFile v0.1.0:SKILL.md\n\n---\nname: recruiting-resume-screening\ndescription: Use when reviewing one or more Chinese-language resumes against a JD, batch-ranking candidates, identifying red flags and follow-up interview questions, or re-screening a prior candidate batch. Triggers include 发简历给我筛、根据 JD 评估候选人、批量简历筛选、给候选人排序、找出简历疑点、生成面试必问题、根据面试反馈复核排序、重新评估之前那批简历 等。\nversion: 0.1.0\n---\n\n# 简历筛选\n\n## Overview\n\n按岗位 JD（或岗位标准包）对候选人做多维度评估，识别疑点与矛盾，给出排序与面试问题。\n\n**Core principle: 看证据，不看关键词。**\n\n简历出现关键词 ≠ 真的做过 ≠ 做深；必须看项目证据和个人贡献。\n\n## When to Use\n\n- 用户发送一份或多份简历 PDF 要求筛选。\n- 用户要求\"根据 JD 评估这个候选人\"。\n- 用户要求\"对比这几个候选人\"并给排序。\n- 用户要求\"找出简历里的疑点 / 风险点\"。\n- 用户要求\"生成面试必问题\"。\n- 用户要求\"重新评估之前那批简历\"。\n\n如果任务覆盖 JD + 筛选 + 面评的完整流程，先加载 [[recruiting-skillset]]。\n\n## Prerequisites\n\n- 已有岗位 JD 或岗位标准包；没有则先从 JD 抽取核心要求。\n- 简历文件已在本地或可获取。\n- 本机可用 PDF 提取后端（任一即可，越多越好）：`fitz` (PyMuPDF) / `pdfplumber` / `pdfminer.six`。\n- 已了解招聘上下文：团队现状、业务阶段、用人风格。\n\n## Workflow\n\n### Step 1 — 获取并提取简历文本\n\n**不要默认单跑 `pdfplumber`**。中文简历 PDF 常有页边跟踪串、竖排装饰字、隐藏文本层，单一后端不可靠。\n\n推荐命令（脚本见 `scripts/resume_pdf_extract.py`）：\n\n```bash\n# 单份 PDF\npython3 scripts/resume_pdf_extract.py /path/to/resume.pdf --output-dir /tmp/resume_extract_one\n\n# 批量 PDF / 一个目录\npython3 scripts/resume_pdf_extract.py /path/to/resume_dir --output-dir /tmp/resume_extract_batch\n```\n\n脚本会：\n\n1. 分别尝试可用的 PDF 后端（`fitz` / `pdfplumber` / `pdfminer.six`）。\n2. 做 Unicode 归一化、空白折叠、跟踪串 / 碎片行清洗。\n3. 计算 `score / chars / lines / keyword_hits / quality`。\n4. 选择分数最高的文本作为正式筛选输入。\n5. 输出 `summary.json`、每份 PDF 对应的最佳 `.txt`、Markdown 索引表。\n\n详见 [pdf-extraction.md](pdf-extraction.md)。\n\n### Step 2 — 批量简历必须先做质量分层\n\n用户一次性发送多份简历时**不要直接逐份硬读**。先做一轮 triage，把能直接评估和需要补核的简历分开。详见 [batch-screening.md](batch-screening.md)。\n\n质量分层建议：\n\n- `high`：`chars >= 2600` 且 `lines >= 55` 且 `score >= 65`\n- `medium`：`chars >= 1600` 且 `lines >= 35` 且 `score >= 35`\n- `low`：低于阈值，标记\"待补核\"，不阻塞整批交付\n\n### Step 3 — 五维评估 + 疑点识别\n\n每位候选人，从五个维度逐一评估，每维度 ★~★★★★★：\n\n1. 专业匹配度（Skill Fit）\n2. 履历稳定性（Career Stability）\n3. 潜在风险（Risk Assessment）\n4. 抗压与自驱（Resilience & Drive）\n5. 团队适配（Team Fit）\n\n完整维度定义与打分依据见 [five-dimension-rubric.md](five-dimension-rubric.md)。\n\n逐条审读简历，主动发现疑点。完整疑点清单（时间类 / 内容类 / 逻辑类 / 行为类）见 [red-flags-catalog.md](red-flags-catalog.md)。每个疑点标注严重程度：\n\n- 🔴 需面试必问\n- 🟡 需关注\n- 🟢 可能正常\n\n### Step 4 — 综合评级\n\n| 评级 | 含义 | 条件 |\n| --- | --- | --- |\n| ⭐⭐⭐ **强推** | 直通面试 | 专业匹配度 ≥ 4★ 且无重大风险，总得分 ≥ 20/25 |\n| ⭐⭐ **推荐** | 进入面试 | 专业匹配度 ≥ 3★，总得分 ≥ 15/25 |\n| ⭐ **待定** | 需电话筛选 | 有亮点但存在明显短板或风险 |\n| ❌ **不推荐** | 不进入面试 | 专业匹配度 < 3★ 或存在不可接受风险 |\n\n### Step 5 — 输出评估报告\n\n每人一份**个人评估卡** + 整批**汇总排序表**。模板见 [output-templates.md](output-templates.md)。\n\n### Step 6 — 面试反馈复核（可选）\n\n用户补充技术一面 / HR 二面 / 用人经理初评后，做一次\"去偏见复核\"：\n\n- 把面试反馈与简历原文逐项对照，区分\"有证据支撑\"和\"主观印象\"。\n- \"能力更强 / 更弱 / 成长性更好\"这类结论，若没有具体案例支撑，标记为证据不足。\n- 自动化、性能、AI 提效等容易被泛化的能力，默认按\"接触过\"处理，除非有明确独立负责证据。\n- 优先检查时间线、工作年限、离职原因、薪资诉求等是否前后矛盾。\n\n必须输出：总体结论（含排序调整）、逐人可疑点（🔴🟡🟢）、对已有面评的修正建议、终面追问（每人 ≥ 5 个 + 横向必问）、可选《终面准备说明》。\n\n## Red Lines（一票否决）\n\n以下情况直接 ❌ 不推荐，无论其他维度多强：\n\n1. 简历造假或严重夸大（有明确证据）。\n2. 方向完全不相关且无转型意愿。\n3. 平均在职时间 < 8 个月且无合理解释。\n4. 薪酬预期超出岗位预算 50% 以上。\n\n## Anti-Patterns（严格禁止）\n\n| 反模式 | 后果 | 正确做法 |\n| --- | --- | --- |\n| 凭记忆输出评估结论 | 凭印象漂移 | 必须先提取文本 → 五维评估 → 评级 |\n| 复用旧会话结论 | 标准漂移、错过更新 | 重新提取、重新评估 |\n| 省略个人评估卡 | 用户无法追溯结论 | 每人必须有完整评估卡 |\n| 无文件评估 | 凭空编造 | 找不到简历必须告知用户并请求 |\n| \"看起来像做了\"，3 行总结 | 失真 | 完整执行五维 + 疑点 + 面试题 |\n| 把内部过程混入正式报告 | 干扰决策 | 文本提取索引、清洗日志只作内部材料 |\n| 全员都给推荐 | 排序失去意义 | 敢下不推荐 / 待定 |\n\n## Self-Check\n\n输出前逐项确认：\n\n- [ ] 每位候选人都提取了简历文本？\n- [ ] 每人都有五维 ★ 评分？\n- [ ] 每人都有疑点清单（🔴🟡🟢）？\n- [ ] 每人都有 3 个面试必问题？\n- [ ] 输出了汇总排序表？\n- [ ] 评级引用了简历中具体内容作为证据？\n- [ ] 不同结论的候选人在排序中区分开？\n- [ ] 报告里没有混入提取脚本明细、清洗日志等过程性内容？\n\n## Output Discipline\n\n- Markdown 格式，适合飞书 / Notion 粘贴。\n- 中文输出。\n- **最终面向用户的报告只保留与筛选决策直接相关的内容**：个人评估卡、汇总排序、亮点、风险、疑点、面试问题、必要的待补核说明。\n- **不要输出与筛选无关的过程性版块**：文本提取质量索引、backend/score/chars/lines 统计、清洗日志等只作内部工作材料，除非用户明确要求。\n- 评估结论要有理有据，引用简历中具体内容作为证据。\n- 不回避矛盾——候选人某方面强但另一方面有风险，两面都写。\n\n## Feedback Loop\n\n完成筛选后主动询问用户：\n\n1. 评级是否准确？哪些人评高了 / 评低了？\n2. 是否遗漏了重要评估维度？\n3. 面试后的实际表现与评估是否一致？\n\n用户反馈 → 更新本 Skill 的评估标准。新发现的风险模式 → 补充到 [red-flags-catalog.md](red-flags-catalog.md)。重大变更 → 写入 [EVOLUTION.md](EVOLUTION.md)。\n\n## See Also\n\n- [five-dimension-rubric.md](five-dimension-rubric.md) — 五维评估完整定义。\n- [red-flags-catalog.md](red-flags-catalog.md) — 疑点完整清单。\n- [output-templates.md](output-templates.md) — 评估卡 / 排序表 / 复核报告模板。\n- [batch-screening.md](batch-screening.md) — 批量筛选纪律。\n- [pdf-extraction.md](pdf-extraction.md) — PDF 提取与多后端 triage。\n- [scripts/resume_pdf_extract.py](scripts/resume_pdf_extract.py) — 多后端 PDF 提取脚本。\n- [EVOLUTION.md](EVOLUTION.md) — 演化日志。\n- 总控流程：[[recruiting-skillset]]；面评：[[interview-evaluation]]。\n\nFile v0.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn71016gfqv0mwvysq1h2adhqd82bt5s\",\n  \"slug\": \"recruiting-resume-screening\",\n  \"version\": \"0.1.0\",\n  \"publishedAt\": 1778753709343\n}\n\nFile v0.1.0:batch-screening.md\n\n# 批量简历筛选纪律\n\n用户一次性发送多份简历时**不要直接逐份硬读原始提取结果**，否则容易被低质量抽取文本拖住整批交付。\n\n## 推荐流程\n\n1. **按人群拆批次**：如果同一轮里混有不同口径（社招 / 校招、算法 / 产品），先拆成独立批次，不要混在一张筛选表里。\n2. **批量提取 PDF 文本**：用 [scripts/resume_pdf_extract.py](scripts/resume_pdf_extract.py) 跑多后端 triage，不要只保留第一种提取结果。\n3. **生成清洗索引**：统计每份 txt 的 `backend / score / chars / lines / quality`，必要时附前几行预览。\n4. **优先筛 high / medium**：先完成可判断候选人的正式筛选并交付，不要等 low 质量文本全部补完。\n5. **low 单独列为待补核**：明确告诉用户该候选人需要回看原 PDF，或暂列\"待补材料\"。\n6. **清洗索引只作为内部执行产物**：除非用户明确要求查看提取质量 / 清洗过程，否则最终交付报告中**不要加入**文本提取质量索引、backend/score/chars/lines 表、抽取质量说明等版块。\n\n## 文本质量分层\n\n- `high`：`chars >= 2600` 且 `lines >= 55` 且 `score >= 65`\n- `medium`：`chars >= 1600` 且 `lines >= 35` 且 `score >= 35`\n- `low`：低于上述阈值，先标记\"待补核\"，避免阻塞整批交付\n\n## 根因判断提示\n\n如果原始文本出现以下模式，优先怀疑是 PDF 结构问题，**不要**误判成候选人简历本身差：\n\n- 大量 `n n / B B / x x / X X` 之类的单字符碎片。\n- 页首或页尾反复出现一长串字母数字混合 ID。\n- 正文中间穿插竖排页边字符或装饰层文字。\n- 同一段正文可读，但夹杂少量莫名英文 / 数字碎片。\n\n## 批量任务执行纪律\n\n- **只处理本轮明确提供的文件**：本机缓存目录可能混有历史附件。批量提取前应把本轮附件路径复制 / 链接到独立临时目录，或显式传入文件清单，避免把无关简历 / JD 混入本次评估。\n- **先交付一批，再开下一批**：例如社招和校招分开发文件，不要等所有人都看完才第一次交付。\n- **不要让坏文本阻塞整批**：单个候选人的抽取失败，不影响其他候选人先出正式结论。\n- **必须有状态面板**：至少明确哪些候选人已提取、已评估、待补核、已交付。\n- **大批量可并行评估**：10 份以上简历可按 3-5 人一组拆分并行产出分组评估卡，再由主线程统一校准分数、排序和措辞；最终报告必须保持同一评价口径。\n- **索引文件可落盘复用**：建议生成一份 Markdown 清洗索引，后续筛选直接按索引优先级推进。\n\n## 重新评估之前批次的纪律\n\n用户说\"重新评估之前的某批简历\"时，**不要**直接沿用旧结论，也不要先让用户重传。按下面顺序恢复材料：\n\n1. 用会话搜索（或本地笔记）找回上次筛选时的岗位名称、JD 文件名、候选人名单。\n2. 到本机缓存目录优先查找历史附件：\n   - `~/Downloads/` 或对话工具的附件缓存目录\n   - 用户常用的临时目录（按当前 agent 环境约定）\n   - 常见命名形态：`doc_<id>_候选人名.pdf`、`doc_<id>_岗位JD.md`\n3. 批量 PDF 优先按岗位关键词过滤，再确认与上次会话中的候选人名单一致。\n4. 找回文件后**必须重新提取、重新评估**。允许复用历史\"文件定位结果\"，**不允许**复用历史\"评估结论\"。\n5. 如果用户要求\"把评估 markdown 文件发回会话\"，先生成本地 `.md` 报告文件，再通过附件机制发送，而不是只把内容粘到回复里。\n\n## 索引输出字段建议\n\n```markdown\n| 候选人 | 文本质量 | 有效行数 | 有效字符数 | 提取文件 |\n| --- | --- | ---: | ---: | --- |\n| 张三 | high | 78 | 3120 | /tmp/resume_extract/zhang_san.fitz.txt |\n| 李四 | low | 22 | 980 | /tmp/resume_extract/li_si.pdfminer.txt（待补核） |\n```\n\nFile v0.1.0:EVOLUTION.md\n\n# Evolution Log — resume-screening\n\n## 2026-05-12 — PDF 脚本补 stderr 警告\n\n- CEO review 发现：三个后端 wrapper 静默吞错（`except Exception: return None`），批量跑挂时无法 debug 是哪个后端在哪个文件上失败。\n- 修正：新增 `_warn()` 辅助，在 fitz / pdfplumber / pdfminer 三处 wrapper 里输出 `warn: {backend} failed on {file}: {ErrType}: {msg}`。\n- 接口不变；评分与最佳后端选择逻辑不变。\n\n## 2026-05-12 — 重构为 Superpowers 风格 + 开源 PDF 脚本\n\n- 把原 `05-resume-screening.md` 拆分：SKILL.md 只留触发、工作流、评级、反模式、自检；\n  - 五维评估细节独立为 `five-dimension-rubric.md`。\n  - 疑点清单独立为 `red-flags-catalog.md`。\n  - 个人评估卡 / 排序表 / 复核报告模板独立为 `output-templates.md`。\n  - 批量筛选纪律独立为 `batch-screening.md`。\n  - PDF 提取与多后端 triage 独立为 `pdf-extraction.md`。\n- 补一份开源版 `scripts/resume_pdf_extract.py`：多后端（fitz / pdfplumber / pdfminer.six）+ Unicode 归一化 + 跟踪串 / 碎片行清洗 + 评分 + 质量分层 + JSON / Markdown 输出。\n- 描述字段改为 \"Use when ...\" 触发条件。\n\n## 2026-05-11 — 校招 AI 平台工程师筛选校准\n\n- 在反模式中明确\"凭记忆输出\"\"复用旧会话结论\"\"3 行总结当完整执行\"\"把内部过程混入正式报告\"。\n- 强化文本质量分层：`high / medium / low`，low 候选人单独列待补核，不阻塞整批交付。\n- 强化 PDF 提取纪律：不再默认单跑 `pdfplumber`，必须先做多后端 triage。\n\n## 2025-02-14 — 多后端 PDF 提取 triage 沉淀\n\n- 触发：多简历筛选暴露 `pdfplumber` 在中文简历 PDF 上的严重噪声（页边跟踪串、隐藏文本层、装饰碎片）。\n- 验证集：11 份 AI 平台工程师简历。\n- 发现：\n  - 单一后端时 11 份都被判为 `low`。\n  - 多后端 + 清洗后，每份 PDF 的\"最佳后端\"会变化（`pdfplumber` / `pdfminer` / `fitz` 各有胜出）。\n  - 跟踪串 / 短 ASCII 碎片清洗显著提升可读性和关键词召回。\n- 输出：\n  - 新增 `scripts/resume_pdf_extract.py`。\n  - 强制要求\"先 triage 再排序\"，废弃旧固定阈值，改为评分驱动的 `high / medium / low` 分层。\n- 经验：\n  - 不要相信第一次提取结果。\n  - 始终 triage、选最佳清洗文本、把 `low` 单独留人工复核。\n\nFile v0.1.0:five-dimension-rubric.md\n\n# 五维评估完整定义\n\n每个维度 ★~★★★★★（1-5 星）。打分必须引用简历原文证据。\n\n## 维度 1：专业匹配度（Skill Fit）\n\n衡量核心技术 / 理论能力与 JD 要求的重合度。\n\n观察点：\n\n- 区分\"真正做过\"与\"简历提及\"：项目深度、个人贡献比例、可验证产出。\n- **警惕光环效应**：强能力不等于对口能力。例如强化学习高手 ≠ 大模型微调专家、CV 算法专家 ≠ 时序预测专家。\n- 识别\"听起来相关\"但实际无关的经历：传统推荐算法 ≠ 大模型应用；NLP 标注 ≠ 大模型应用。\n- 评估学位与岗位需求的匹配度：博士理论强但工程交付薄是常见模式。\n\n打分参考：\n\n| 星级 | 标准 |\n| --- | --- |\n| ★★★★★ | 核心要求全部命中，有可验证的深度项目，能独立主导 |\n| ★★★★ | 核心要求大部分命中，有 1-2 个可验证的深度项目 |\n| ★★★ | 核心要求部分命中，可参与，需要补能力短板 |\n| ★★ | 关键词匹配但缺乏深度证据，转型成本较大 |\n| ★ | 方向不匹配，关键词命中但实际经历不相关 |\n\n## 维度 2：履历稳定性（Career Stability）\n\n衡量工作连续性与履历健康度。\n\n观察点：\n\n- 工作经历连续性：有无频繁跳槽（平均每段 < 1.5 年需警示）。\n- 空窗期：超过 3 个月的空白需标注并追问。\n- 学业路径是否连贯：博士学制过长需了解原因。\n- 当前状态：是否在职、是否刚入职新公司又看机会。\n\n打分参考：\n\n| 星级 | 标准 |\n| --- | --- |\n| ★★★★★ | 经历连续，主动晋升 / 转型逻辑清晰 |\n| ★★★★ | 经历完整，偶有短期工作但有合理解释 |\n| ★★★ | 有 1-2 段短期工作或空窗期，需面试澄清 |\n| ★★ | 多次短期工作或长空窗期，稳定性存疑 |\n| ★ | 持续短期跳动 / 时间线混乱 / 自述与事实矛盾 |\n\n## 维度 3：潜在风险（Risk Assessment）\n\n衡量录用候选人后可能引入的负面因素。\n\n观察点：\n\n- **硬风险**：竞业协议、薪酬超标、地域 / 签证问题。\n- **软风险**：简历包装过度（数据不可验证）、频繁转行、学历水分。\n- **团队风险**：工作风格不匹配（如纯学术背景进入高压冲刺团队）。\n- **文化风险**：个人价值观与团队文化的潜在冲突。\n\n打分参考（高分 = 低风险）：\n\n| 星级 | 标准 |\n| --- | --- |\n| ★★★★★ | 无明显风险，信息透明，期望合理 |\n| ★★★★ | 有 1-2 个小风险点，可通过面试澄清 |\n| ★★★ | 有需要面试重点验证的风险（如薪资缺口、转行） |\n| ★★ | 存在多个风险或单一重大风险（如竞业、严重夸大） |\n| ★ | 存在不可接受的风险或硬性冲突 |\n\n## 维度 4：抗压与自驱（Resilience & Drive）\n\n衡量能否在高压、不确定、缺乏指令的环境下交付。\n\n观察点：\n\n- 有无高压环境交付经验（创业公司、紧急项目、军工等）。\n- 是否有\"从 0 到 1\"的经历，而非只在大公司做螺丝钉。\n- 持续学习的证据：近 1-2 年是否有新技能 / 新方向的探索。\n- 自驱力的信号：个人项目、开源贡献、技术博客、独立完成的小工具等。\n\n打分参考：\n\n| 星级 | 标准 |\n| --- | --- |\n| ★★★★★ | 多次从 0 到 1 + 持续学习 + 独立产出（开源 / 项目 / 内容） |\n| ★★★★ | 有 1-2 段高压 / 从 0 到 1 经验，有学习证据 |\n| ★★★ | 有交付经验，自驱信号有限 |\n| ★★ | 主要在大团队执行螺丝钉式工作，缺乏自驱证据 |\n| ★ | 长期处于稳定低压环境，缺乏主动行为 |\n\n## 维度 5：团队适配（Team Fit）\n\n衡量与当前团队阶段、节奏、风格的匹配度。\n\n观察点：\n\n- 团队阶段：冲刺期 / 建设期 / 维护期。\n- 工作节奏：能否适应\"先出结果再优化\"的务实风格。\n- 协作模式：独狼型 vs 团队型，与当前团队需求是否匹配。\n- 技术栈兼容性：是否能快速融入现有技术体系。\n\n打分参考：\n\n| 星级 | 标准 |\n| --- | --- |\n| ★★★★★ | 经历与当前团队阶段高度匹配，协作模式契合 |\n| ★★★★ | 有可迁移的协作经验，少量风格差异可补齐 |\n| ★★★ | 协作模式与团队当前阶段有些不一致，需引导 |\n| ★★ | 协作模式 / 节奏 / 风格存在明显落差 |\n| ★ | 方向、节奏、协作均不匹配 |\n\nFile v0.1.0:output-templates.md\n\n# 简历筛选输出模板\n\n正式交付给用户的报告只保留与决策直接相关的版块；过程性内容（提取脚本明细、清洗日志、文本质量索引）一律放进内部材料。\n\n## 个人评估卡（每人一份）\n\n```markdown\n## [姓名]（[工作年限] / [学历]）\n\n**综合评级：⭐⭐⭐ 强推 | ⭐⭐ 推荐 | ⭐ 待定 | ❌ 不推荐**\n\n### 五维评分\n\n| 维度 | 评分 | 关键发现 |\n| --- | --- | --- |\n| 专业匹配 | ★★★★☆ | ... |\n| 履历稳定 | ★★★☆☆ | ... |\n| 潜在风险 | ★★★★☆ | ... |\n| 抗压自驱 | ★★★☆☆ | ... |\n| 团队适配 | ★★★★☆ | ... |\n\n### 疑点清单\n- 🔴/🟡/🟢 [疑点描述]\n\n### 核心亮点\n- ...\n\n### 风险提示\n- ⚠️ ...\n\n### 面试必问题（Top 3）\n1. ...\n2. ...\n3. ...\n```\n\n## 汇总排序表\n\n```markdown\n| 排名 | 姓名 | 评级 | 专业力 | 稳定性 | 风险 | 疑点 | 总分 | 核心理由（一句话） |\n| --- | --- | --- | --- | --- | --- | --- | --- | --- |\n| 1 | ... | ⭐⭐⭐ | ★★★★★ | ★★★★ | 低 | 无 | 22/25 | ... |\n```\n\n## 面试反馈复核报告（Step 6 可选）\n\n```markdown\n# [岗位] 面试反馈复核（YYYY-MM-DD）\n\n## 总体结论\n- 排序调整建议：\n- 不同岗位方向（如业务测试 vs 系统测试）应分别给出排序：\n\n## 逐人可疑点\n\n### [候选人姓名]\n- 🔴 [证据冲突或高风险项]\n- 🟡 [证据不足 / 被高估项]\n- 🟢 [需确认项]\n\n## 已有面评修正建议\n- [候选人]：把\"能独立负责自动化\"修正为\"接触过，独立负责待验证\"\n\n## 终面追问\n\n### [候选人]（每人 ≥ 5 个问题）\n1. 时间线类追问\n2. 真实贡献追问\n3. 能力深度追问\n4. 稳定性 / 离职原因追问\n5. 岗位匹配追问\n\n## 横向必问问题\n1. ...\n2. ...\n```\n\n## 内部清洗索引（仅内部使用，不发用户）\n\n```markdown\n| 候选人 | 文本质量 | 有效行数 | 有效字符数 | 提取文件 |\n| --- | --- | ---: | ---: | --- |\n```\n\n## 待补核名单\n\n```markdown\n| 候选人 | 原因 | 需补材料 |\n| --- | --- | --- |\n| ... | 文本提取质量低 | 原始 PDF / 候选人重发 |\n```\n\nFile v0.1.0:pdf-extraction.md\n\n# PDF 提取与多后端 triage\n\n中文简历 PDF 上下文：\n\n- 单一后端容易把页边跟踪串、竖排装饰字、隐藏文本层一起抽出。\n- `pdfplumber` / `pdfminer.six` / `fitz`（PyMuPDF）对同一份 PDF 表现差异明显。\n- 先做\"多后端提取 → 清洗 → 打分 → 选最优文本\"，比人工盯原始噪声稳定得多。\n\n## 依赖\n\n任一即可，越多越好：\n\n```bash\n# 推荐三套都装上，脚本会自动选最优\npython3 -m pip install --user pymupdf pdfplumber pdfminer.six\n```\n\n> macOS 备选：`textutil -convert txt -stdout xxx.pdf` 只对文字型 PDF 有效，图片型 PDF 会报 encoding 错误，仍需 OCR。\n\n## 推荐命令\n\n单份 PDF：\n\n```bash\npython3 scripts/resume_pdf_extract.py /path/to/resume.pdf --output-dir /tmp/resume_extract_one\n```\n\n批量 PDF / 一个目录：\n\n```bash\npython3 scripts/resume_pdf_extract.py /path/to/resume_dir --output-dir /tmp/resume_extract_batch\n```\n\n脚本会：\n\n1. 分别尝试可用后端（`fitz` / `pdfplumber` / `pdfminer.six`）。\n2. 对每个结果做 Unicode 归一化、空白折叠、跟踪串 / 碎片行清洗。\n3. 计算 `score / chars / lines / keyword_hits / quality`。\n4. 选择分数最高的文本作为正式筛选输入。\n5. 输出：\n   - `summary.json`\n   - 每份 PDF 对应的最佳 `.txt`\n   - stdout Markdown 表格（可直接粘回会话）\n\n## 文本质量分层\n\n| 等级 | 判定 |\n| --- | --- |\n| `high` | `chars >= 2600` 且 `lines >= 55` 且 `score >= 65` |\n| `medium` | `chars >= 1600` 且 `lines >= 35` 且 `score >= 35` |\n| `low` | 低于上述阈值，标记\"待补核\" |\n\n## 常见陷阱\n\n- **下载到 JSON 不是 PDF**：批量下载后检查文件大小，若所有文件都是几百 bytes 大概率是错误响应体。\n- **`.doc` 旧格式**：macOS 上没有 antiword/catdoc 时难以提取，建议要求候选人发 PDF 或 `.docx`。\n- **加密 / 图片型 PDF**：所有文本后端都会返回空或乱码，需要 OCR；当前脚本会把这种情况标记为 `low` 并提示原因。\n- **简历模板花哨**：极简模板、双列 / 三列模板、带装饰侧边栏的模板，往往要换后端才能正确还原阅读顺序。\n\n## 与简历筛选流程的衔接\n\n- 提取完成后**不要**把 backend/score/chars/lines 表写进正式筛选报告，只放进内部工作材料。\n- 文本质量 `low` 的候选人单独列\"待补核\"名单，**不阻塞**其他候选人交付。\n- 提取产物建议落到独立临时目录，避免与历史附件混淆。\n\nFile v0.1.0:red-flags-catalog.md\n\n# 简历疑点完整清单\n\n逐条审读简历，主动发现以下类型的疑点。**每条都要列出来**。\n\n标注严重程度：🔴 需面试必问 | 🟡 需关注 | 🟢 可能正常。\n\n## 时间类疑点\n\n- 工作经历之间的空窗期（> 3 个月未说明）。\n- 在职时间异常短（< 6 个月）。\n- 学业时间异常（如博士 > 6 年、本科 > 5 年）。\n- 时间重叠（同时声称在两家公司任职）。\n- 简历时间线至今未闭合（最后一段经历结束于过去，当前状态不明）。\n- 时间写到未来，或\"至今\"口径混乱。\n\n## 内容类疑点\n\n- 成果数据过于漂亮且无法第三方验证（如\"性能提升 16 倍\"）。\n- 职责描述模糊，无法判断实际参与深度（如\"参与\"\"了解\"）。\n- 角色定位模糊（\"技术顾问\"但描述像全职）。\n- 项目描述宏大但个人贡献比例不清。\n- 关键词堆砌但缺乏对应的具体项目支撑。\n- 自动化 / 性能 / AI 提效等容易泛化的能力，没有规模 / 框架 / 维护证据。\n\n## 逻辑类疑点\n\n- 岗位层级与年龄 / 经验不匹配（如 7 年经验仍为初级岗）。\n- 薪资 / 职级在同一公司长期无变化。\n- 转行无过渡（如通信突然转 AI，无中间经历）。\n- 简历前后矛盾（如教育时间与工作时间重叠）。\n- 自述年限与真实起止时间不匹配。\n\n## 行为类疑点\n\n- 刚入职新公司即投简历。\n- 频繁在相似岗位间跳动（无晋升逻辑）。\n- 长期在同一职级水平流动。\n- 从稳定工作转向自由职业 / 个人项目且持续时间长。\n- 离职原因连续偏主观（发展、重复、无帮助），稳定性存疑。\n\n## 关键词光环类（容易高估）\n\n- 提到 LangGraph / Claude Code / OpenHands / Skill / Agent 框架等新概念 → 默认按\"了解过\"处理，必须面试核实是否读过源码、跑过 demo、改造过旧系统。\n- 提到 RAG / LoRA / SFT / RLHF / MoE / Agent → 区分是工程师独立完成还是工程团队配合、自己负责什么具体环节。\n- \"我设计 / 我负责\" → 需核实 mentor、正式员工、数据 / 测试团队的参与边界。\n- 强算法背景（RL / GAN / Diffusion / 大模型等）→ 不等于具体业务方向匹配（推荐、搜索、对话、内容生成、风控等都是常见业务方向，要看候选人长项与岗位真正核心问题是否对齐）。\n\n## 表达与实际差距类\n\n- 表达流畅、项目链路讲得完整 → 不等于技术深度强；必须看关键追问下能否讲清实现细节、指标、badcase 和方案权衡。\n- 全链路主导 → 不等于细节掌握扎实；必须追问素材库规模、数据清洗、评测方法等细节。\n\n## 使用要点\n\n- 每个疑点都要在面试问题中转化为可验证的追问。\n- 🔴 必须问；🟡 视情况问；🟢 留作面试官现场判断。\n- 一个候选人 🔴 ≥ 3 个时需要考虑是否直接降级评级。","readmeExcerpt":"Skill: Recruiting Resume Screening Owner: soulzhong Summary: Use when reviewing one or more Chinese-language resumes against a JD, batch-ranking candidates, identifying red flags and follow-up interview questions, or r... Tags: latest:0.1.2 Version history: v0.1.2 | 2026-05-27T13:36:50.049Z | auto - Bumped version metadata to 0.1.2. - Removed the version field from SKILL.md frontmatter for improved consistency. - No ","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"# 单份 PDF\npython3 scripts/resume_pdf_extract.py /path/to/resume.pdf --output-dir /tmp/resume_extract_one\n\n# 批量 PDF / 一个目录\npython3 scripts/resume_pdf_extract.py /path/to/resume_dir --output-dir /tmp/resume_extract_batch"},{"language":"markdown","snippet":"| 候选人 | 文本质量 | 有效行数 | 有效字符数 | 提取文件 |\n| --- | --- | ---: | ---: | --- |\n| 张三 | high | 78 | 3120 | /tmp/resume_extract/zhang_san.fitz.txt |\n| 李四 | low | 22 | 980 | /tmp/resume_extract/li_si.pdfminer.txt（待补核） |"},{"language":"markdown","snippet":"## [姓名]（[工作年限] / [学历]）\n\n**综合评级：⭐⭐⭐ 强推 | ⭐⭐ 推荐 | ⭐ 待定 | ❌ 不推荐**\n\n### 五维评分\n\n| 维度 | 评分 | 关键发现 |\n| --- | --- | --- |\n| 专业匹配 | ★★★★☆ | ... |\n| 履历稳定 | ★★★☆☆ | ... |\n| 潜在风险 | ★★★★☆ | ... |\n| 抗压自驱 | ★★★☆☆ | ... |\n| 团队适配 | ★★★★☆ | ... |\n\n### 疑点清单\n- 🔴/🟡/🟢 [疑点描述]\n\n### 核心亮点\n- ...\n\n### 风险提示\n- ⚠️ ...\n\n### 面试必问题（Top 3）\n1. ...\n2. ...\n3. ..."},{"language":"markdown","snippet":"| 排名 | 姓名 | 评级 | 专业力 | 稳定性 | 风险 | 疑点 | 总分 | 核心理由（一句话） |\n| --- | --- | --- | --- | --- | --- | --- | --- | --- |\n| 1 | ... | ⭐⭐⭐ | ★★★★★ | ★★★★ | 低 | 无 | 22/25 | ... |"},{"language":"markdown","snippet":"# [岗位] 面试反馈复核（YYYY-MM-DD）\n\n## 总体结论\n- 排序调整建议：\n- 不同岗位方向（如业务测试 vs 系统测试）应分别给出排序：\n\n## 逐人可疑点\n\n### [候选人姓名]\n- 🔴 [证据冲突或高风险项]\n- 🟡 [证据不足 / 被高估项]\n- 🟢 [需确认项]\n\n## 已有面评修正建议\n- [候选人]：把\"能独立负责自动化\"修正为\"接触过，独立负责待验证\"\n\n## 终面追问\n\n### [候选人]（每人 ≥ 5 个问题）\n1. 时间线类追问\n2. 真实贡献追问\n3. 能力深度追问\n4. 稳定性 / 离职原因追问\n5. 岗位匹配追问\n\n## 横向必问问题\n1. ...\n2. ..."},{"language":"markdown","snippet":"| 候选人 | 文本质量 | 有效行数 | 有效字符数 | 提取文件 |\n| --- | --- | ---: | ---: | --- |"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: recruiting-resume-screening\ndescription: Use when reviewing one or more Chinese-language resumes against a JD, batch-ranking candidates, identifying red flags and follow-up interview questions, or re-screening a prior candidate batch. Triggers include 发简历给我筛、根据 JD 评估候选人、批量简历筛选、给候选人排序、找出简历疑点、生成面试必问题、根据面试反馈复核排序、重新评估之前那批简历 等。\n---\n\n# 简历筛选\n\n## Overview\n\n按岗位 JD（或岗位标准包）对候选人做多维度评估，识别疑点与矛盾，给出排序与面试问题。\n\n**Core principle: 看证据，不看关键词。**\n\n简历出现关键词 ≠ 真的做过 ≠ 做深；必须看项目证据和个人贡献。\n\n## When to Use\n\n- 用户发送一份或多份简历 PDF 要求筛选。\n- 用户要求\"根据 JD 评估这个候选人\"。\n- 用户要求\"对比这几个候选人\"并给排序。\n- 用户要求\"找出简历里的疑点 / 风险点\"。\n- 用户要求\"生成面试必问题\"。\n- 用户要求\"重新评估之前那批简历\"。\n\n如果任务覆盖 JD + 筛选 + 面评的完整流程，先加载 [[recruiting-skillset]]。\n\n## Prerequisites\n\n- 已有岗位 JD 或岗位标准包；没有则先从 JD 抽取核心要求。\n- 简历文件已在本地或可获取。\n- 本机可用 PDF 提取后端（任一即可，越多越好）：`fitz` (PyMuPDF) / `pdfplumber` / `pdfminer.six`。\n- 已了解招聘上下文：团队现状、业务阶段、用人风格。\n\n## Workflow\n\n### Step 1 — 获取并提取简历文本\n\n**不要默认单跑 `pdfplumber`**。中文简历 PDF 常有页边跟踪串、竖排装饰字、隐藏文本层，单一后端不可靠。\n\n推荐命令（脚本见 `scripts/resume_pdf_extract.py`）：\n\n```bash\n# 单份 PDF\npython3 scripts/resume_pdf_extract.py /path/to/resume.pdf --output-dir /tmp/resume_extract_one\n\n# 批量 PDF / 一个目录\npython3 scripts/resume_pdf_extract.py /path/to/resume_dir --output-dir /tmp/resume_extract_batch\n```\n\n脚本会：\n\n1. 分别尝试可用的 PDF 后端（`fitz` / `pdfplumber` / `pdfminer.six`）。\n2. 做 Unicode 归一化、空白折叠、跟踪串 / 碎片行清洗。\n3. 计算 `score / chars / lines / keyword_hits / quality`。\n4. 选择分数最高的文本作为正式筛选输入。\n5. 输出 `summary.json`、每份 PDF 对应的最佳 `.txt`、Markdown 索引表。\n\n详见 [pdf-extraction.md](pdf-extraction.md)。\n\n### Step 2 — 批量简历必须先做质量分层\n\n用户一次性发送多份简历时**不要直接逐份硬读**。先做一轮 triage，把能直接评估和需要补核的简历分开。详见 [batch-screening.md](batch-screening.md)。\n\n质量分层建议：\n\n- `high`：`chars >= 2600` 且 `lines >= 55` 且 `score >= 65`\n- `medium`：`chars >= 1600` 且 `lines >= 35` 且 `score >= 35`\n- `low`：低于阈值，标记\"待补核\"，不阻塞整批交付\n\n### Step 3 — 五维评估 + 疑点识别\n\n每位候选人，从五个维度逐一评估，每维度 ★~★★★★★：\n\n1. 专业匹配度（Skill Fit）\n2. 履历稳定性（Career Stability）\n3. 潜在风险（Risk Assessment）\n4. 抗压与自驱（Resilience & Drive）\n5. 团队适配（Team Fit）\n\n完整维度定义与打分依据见 [five-dimension-rubric.md](five-dimension-rubric.md)。\n\n逐条审读简历，主动发现疑点。完整疑点清单（时间类 / 内容类 / 逻辑类 / 行为类）见 [red-flags-catalog.md](red-flags-catalog.md)。每个疑点标注严重程度：\n\n- 🔴 需面试必问\n- 🟡 需关注\n- 🟢 可能正常\n\n### Step 4 — 综合评级\n\n| 评级 | 含义 | 条件 |\n| --- | --- | --- |\n| ⭐⭐⭐ **强推** | 直通面试 | 专业匹配度 ≥ 4★ 且无重大风险，总得分 ≥ 20/25 |\n| ⭐⭐ **推荐** | 进入面试 | 专业匹配度 ≥ 3★，总得分 ≥ 15/25 |\n| ⭐ **待定** | 需电话筛选 | 有亮点但存在明显短板或风险 |\n| ❌ **不推荐** | 不进入面试 | 专业匹配度 < 3★ 或存在不可接受风险 |\n\n### Step 5 — 输出评估报告\n\n每人一份**个人评估卡** + 整批**汇总排序表**。模板见 [output-templates.md](output-templates.md)。\n\n### Step 6 — 面试反馈复核（可选）\n\n用户补充技术一面 / HR 二面 / 用人经理初评后，做一次\"去偏见复核\"：\n\n- 把面试反馈与简历原文逐项对照，区分\"有证据支撑\"和\"主观印象\"。\n- \"能力更强 / 更弱 / 成长性更好\"这类结论，若没有具体案例支撑，标记为证据不足。\n- 自动化、性能、AI 提效等容易被泛化的能力，默认按\"接触过\"处理，除非有明确独立负责证据。\n- 优先检查时间线、工作年限、离职原因、薪资诉求等是否前后矛盾。\n\n必须输出：总体结论（含排序调整）、逐人可疑点（🔴🟡🟢）、对已有面评的修正建议、终面追问（每人 ≥ 5 个 + 横向必问）、可选《终面准备说明》。\n\n## Red Lines（一票否决）\n\n以下情况直接 ❌ 不推荐，无论其他维度多强：\n\n1. 简历造假或严重夸大（有明确证据）。\n2. 方向完全不相关且无转型意愿。\n3. 平均在职时间 < 8 个月且无合理解释。\n4. 薪酬预期超出岗位预算 50% 以上。\n\n## Anti-Patterns（严格禁止）\n\n| 反模式 | 后果 | 正确做法 |\n| --- | --- | --- |\n| 凭记"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn71016gfqv0mwvysq1h2adhqd82bt5s\",\n  \"slug\": \"recruiting-resume-screening\",\n  \"version\": \"0.1.2\",\n  \"publishedAt\": 1779889010049\n}"},{"path":"batch-screening.md","content":"# 批量简历筛选纪律\n\n用户一次性发送多份简历时**不要直接逐份硬读原始提取结果**，否则容易被低质量抽取文本拖住整批交付。\n\n## 推荐流程\n\n1. **按人群拆批次**：如果同一轮里混有不同口径（社招 / 校招、算法 / 产品），先拆成独立批次，不要混在一张筛选表里。\n2. **批量提取 PDF 文本**：用 [scripts/resume_pdf_extract.py](scripts/resume_pdf_extract.py) 跑多后端 triage，不要只保留第一种提取结果。\n3. **生成清洗索引**：统计每份 txt 的 `backend / score / chars / lines / quality`，必要时附前几行预览。\n4. **优先筛 high / medium**：先完成可判断候选人的正式筛选并交付，不要等 low 质量文本全部补完。\n5. **low 单独列为待补核**：明确告诉用户该候选人需要回看原 PDF，或暂列\"待补材料\"。\n6. **清洗索引只作为内部执行产物**：除非用户明确要求查看提取质量 / 清洗过程，否则最终交付报告中**不要加入**文本提取质量索引、backend/score/chars/lines 表、抽取质量说明等版块。\n\n## 文本质量分层\n\n- `high`：`chars >= 2600` 且 `lines >= 55` 且 `score >= 65`\n- `medium`：`chars >= 1600` 且 `lines >= 35` 且 `score >= 35`\n- `low`：低于上述阈值，先标记\"待补核\"，避免阻塞整批交付\n\n## 根因判断提示\n\n如果原始文本出现以下模式，优先怀疑是 PDF 结构问题，**不要**误判成候选人简历本身差：\n\n- 大量 `n n / B B / x x / X X` 之类的单字符碎片。\n- 页首或页尾反复出现一长串字母数字混合 ID。\n- 正文中间穿插竖排页边字符或装饰层文字。\n- 同一段正文可读，但夹杂少量莫名英文 / 数字碎片。\n\n## 批量任务执行纪律\n\n- **只处理本轮明确提供的文件**：本机缓存目录可能混有历史附件。批量提取前应把本轮附件路径复制 / 链接到独立临时目录，或显式传入文件清单，避免把无关简历 / JD 混入本次评估。\n- **先交付一批，再开下一批**：例如社招和校招分开发文件，不要等所有人都看完才第一次交付。\n- **不要让坏文本阻塞整批**：单个候选人的抽取失败，不影响其他候选人先出正式结论。\n- **必须有状态面板**：至少明确哪些候选人已提取、已评估、待补核、已交付。\n- **大批量可并行评估**：10 份以上简历可按 3-5 人一组拆分并行产出分组评估卡，再由主线程统一校准分数、排序和措辞；最终报告必须保持同一评价口径。\n- **索引文件可落盘复用**：建议生成一份 Markdown 清洗索引，后续筛选直接按索引优先级推进。\n\n## 重新评估之前批次的纪律\n\n用户说\"重新评估之前的某批简历\"时，**不要**直接沿用旧结论，也不要先让用户重传。按下面顺序恢复材料：\n\n1. 用会话搜索（或本地笔记）找回上次筛选时的岗位名称、JD 文件名、候选人名单。\n2. 到本机缓存目录优先查找历史附件：\n   - `~/Downloads/` 或对话工具的附件缓存目录\n   - 用户常用的临时目录（按当前 agent 环境约定）\n   - 常见命名形态：`doc_<id>_候选人名.pdf`、`doc_<id>_岗位JD.md`\n3. 批量 PDF 优先按岗位关键词过滤，再确认与上次会话中的候选人名单一致。\n4. 找回文件后**必须重新提取、重新评估**。允许复用历史\"文件定位结果\"，**不允许**复用历史\"评估结论\"。\n5. 如果用户要求\"把评估 markdown 文件发回会话\"，先生成本地 `.md` 报告文件，再通过附件机制发送，而不是只把内容粘到回复里。\n\n## 索引输出字段建议\n\n```markdown\n| 候选人 | 文本质量 | 有效行数 | 有效字符数 | 提取文件 |\n| --- | --- | ---: | ---: | --- |\n| 张三 | high | 78 | 3120 | /tmp/resume_extract/zhang_san.fitz.txt |\n| 李四 | low | 22 | 980 | /tmp/resume_extract/li_si.pdfminer.txt（待补核） |\n```"},{"path":"EVOLUTION.md","content":"# Evolution Log — recruiting-resume-screening\n\n## 2026-05-12 — PDF 脚本补 stderr 警告\n\n- CEO review 发现：三个后端 wrapper 静默吞错（`except Exception: return None`），批量跑挂时无法 debug 是哪个后端在哪个文件上失败。\n- 修正：新增 `_warn()` 辅助，在 fitz / pdfplumber / pdfminer 三处 wrapper 里输出 `warn: {backend} failed on {file}: {ErrType}: {msg}`。\n- 接口不变；评分与最佳后端选择逻辑不变。\n\n## 2026-05-12 — 重构为 Superpowers 风格 + 开源 PDF 脚本\n\n- 把原 `05-resume-screening.md` 拆分：SKILL.md 只留触发、工作流、评级、反模式、自检；\n  - 五维评估细节独立为 `five-dimension-rubric.md`。\n  - 疑点清单独立为 `red-flags-catalog.md`。\n  - 个人评估卡 / 排序表 / 复核报告模板独立为 `output-templates.md`。\n  - 批量筛选纪律独立为 `batch-screening.md`。\n  - PDF 提取与多后端 triage 独立为 `pdf-extraction.md`。\n- 补一份开源版 `scripts/resume_pdf_extract.py`：多后端（fitz / pdfplumber / pdfminer.six）+ Unicode 归一化 + 跟踪串 / 碎片行清洗 + 评分 + 质量分层 + JSON / Markdown 输出。\n- 描述字段改为 \"Use when ...\" 触发条件。\n\n## 2026-05-11 — 校招 AI 平台工程师筛选校准\n\n- 在反模式中明确\"凭记忆输出\"\"复用旧会话结论\"\"3 行总结当完整执行\"\"把内部过程混入正式报告\"。\n- 强化文本质量分层：`high / medium / low`，low 候选人单独列待补核，不阻塞整批交付。\n- 强化 PDF 提取纪律：不再默认单跑 `pdfplumber`，必须先做多后端 triage。\n\n## 2025-02-14 — 多后端 PDF 提取 triage 沉淀\n\n- 触发：多简历筛选暴露 `pdfplumber` 在中文简历 PDF 上的严重噪声（页边跟踪串、隐藏文本层、装饰碎片）。\n- 验证集：11 份 AI 平台工程师简历。\n- 发现：\n  - 单一后端时 11 份都被判为 `low`。\n  - 多后端 + 清洗后，每份 PDF 的\"最佳后端\"会变化（`pdfplumber` / `pdfminer` / `fitz` 各有胜出）。\n  - 跟踪串 / 短 ASCII 碎片清洗显著提升可读性和关键词召回。\n- 输出：\n  - 新增 `scripts/resume_pdf_extract.py`。\n  - 强制要求\"先 triage 再排序\"，废弃旧固定阈值，改为评分驱动的 `high / medium / low` 分层。\n- 经验：\n  - 不要相信第一次提取结果。\n  - 始终 triage、选最佳清洗文本、把 `low` 单独留人工复核。"},{"path":"five-dimension-rubric.md","content":"# 五维评估完整定义\n\n每个维度 ★~★★★★★（1-5 星）。打分必须引用简历原文证据。\n\n## 维度 1：专业匹配度（Skill Fit）\n\n衡量核心技术 / 理论能力与 JD 要求的重合度。\n\n观察点：\n\n- 区分\"真正做过\"与\"简历提及\"：项目深度、个人贡献比例、可验证产出。\n- **警惕光环效应**：强能力不等于对口能力。例如强化学习高手 ≠ 大模型微调专家、CV 算法专家 ≠ 时序预测专家。\n- 识别\"听起来相关\"但实际无关的经历：传统推荐算法 ≠ 大模型应用；NLP 标注 ≠ 大模型应用。\n- 评估学位与岗位需求的匹配度：博士理论强但工程交付薄是常见模式。\n\n打分参考：\n\n| 星级 | 标准 |\n| --- | --- |\n| ★★★★★ | 核心要求全部命中，有可验证的深度项目，能独立主导 |\n| ★★★★ | 核心要求大部分命中，有 1-2 个可验证的深度项目 |\n| ★★★ | 核心要求部分命中，可参与，需要补能力短板 |\n| ★★ | 关键词匹配但缺乏深度证据，转型成本较大 |\n| ★ | 方向不匹配，关键词命中但实际经历不相关 |\n\n## 维度 2：履历稳定性（Career Stability）\n\n衡量工作连续性与履历健康度。\n\n观察点：\n\n- 工作经历连续性：有无频繁跳槽（平均每段 < 1.5 年需警示）。\n- 空窗期：超过 3 个月的空白需标注并追问。\n- 学业路径是否连贯：博士学制过长需了解原因。\n- 当前状态：是否在职、是否刚入职新公司又看机会。\n\n打分参考：\n\n| 星级 | 标准 |\n| --- | --- |\n| ★★★★★ | 经历连续，主动晋升 / 转型逻辑清晰 |\n| ★★★★ | 经历完整，偶有短期工作但有合理解释 |\n| ★★★ | 有 1-2 段短期工作或空窗期，需面试澄清 |\n| ★★ | 多次短期工作或长空窗期，稳定性存疑 |\n| ★ | 持续短期跳动 / 时间线混乱 / 自述与事实矛盾 |\n\n## 维度 3：潜在风险（Risk Assessment）\n\n衡量录用候选人后可能引入的负面因素。\n\n观察点：\n\n- **硬风险**：竞业协议、薪酬超标、地域 / 签证问题。\n- **软风险**：简历包装过度（数据不可验证）、频繁转行、学历水分。\n- **团队风险**：工作风格不匹配（如纯学术背景进入高压冲刺团队）。\n- **文化风险**：个人价值观与团队文化的潜在冲突。\n\n打分参考（高分 = 低风险）：\n\n| 星级 | 标准 |\n| --- | --- |\n| ★★★★★ | 无明显风险，信息透明，期望合理 |\n| ★★★★ | 有 1-2 个小风险点，可通过面试澄清 |\n| ★★★ | 有需要面试重点验证的风险（如薪资缺口、转行） |\n| ★★ | 存在多个风险或单一重大风险（如竞业、严重夸大） |\n| ★ | 存在不可接受的风险或硬性冲突 |\n\n## 维度 4：抗压与自驱（Resilience & Drive）\n\n衡量能否在高压、不确定、缺乏指令的环境下交付。\n\n观察点：\n\n- 有无高压环境交付经验（创业公司、紧急项目、军工等）。\n- 是否有\"从 0 到 1\"的经历，而非只在大公司做螺丝钉。\n- 持续学习的证据：近 1-2 年是否有新技能 / 新方向的探索。\n- 自驱力的信号：个人项目、开源贡献、技术博客、独立完成的小工具等。\n\n打分参考：\n\n| 星级 | 标准 |\n| --- | --- |\n| ★★★★★ | 多次从 0 到 1 + 持续学习 + 独立产出（开源 / 项目 / 内容） |\n| ★★★★ | 有 1-2 段高压 / 从 0 到 1 经验，有学习证据 |\n| ★★★ | 有交付经验，自驱信号有限 |\n| ★★ | 主要在大团队执行螺丝钉式工作，缺乏自驱证据 |\n| ★ | 长期处于稳定低压环境，缺乏主动行为 |\n\n## 维度 5：团队适配（Team Fit）\n\n衡量与当前团队阶段、节奏、风格的匹配度。\n\n观察点：\n\n- 团队阶段：冲刺期 / 建设期 / 维护期。\n- 工作节奏：能否适应\"先出结果再优化\"的务实风格。\n- 协作模式：独狼型 vs 团队型，与当前团队需求是否匹配。\n- 技术栈兼容性：是否能快速融入现有技术体系。\n\n打分参考：\n\n| 星级 | 标准 |\n| --- | --- |\n| ★★★★★ | 经历与当前团队阶段高度匹配，协作模式契合 |\n| ★★★★ | 有可迁移的协作经验，少量风格差异可补齐 |\n| ★★★ | 协作模式与团队当前阶段有些不一致，需引导 |\n| ★★ | 协作模式 / 节奏 / 风格存在明显落差 |\n| ★ | 方向、节奏、协作均不匹配 |"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Use when reviewing one or more Chinese-language resumes against a JD, batch-ranking candidates, identifying red flags and follow-up interview questions, or r... Skill: Recruiting Resume Screening Owner: soulzhong Summary: Use when reviewing one or more Chinese-language resumes against a JD, batch-ranking candidates, identifying red flags and follow-up interview questions, or r... Tags: latest:0.1.2 Version history: v0.1.2 | 2026-05-27T13:36:50.049Z | auto - Bumped version metadata to 0.1.2. - Removed the version field from SKILL.md frontmatter for improved consistency. - No","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":842,"uniquenessScore":52,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T18:59:42.068Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T18:59:42.068Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T23:02:43.377Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}