Skip to content

Add resume-screening skill - #1763

Open
maweis1981 wants to merge 1 commit into
anthropics:mainfrom
maweis1981:add-resume-screening-skill
Open

maweis1981 wants to merge 1 commit into
anthropics:mainfrom
maweis1981:add-resume-screening-skill

Conversation

@maweis1981

Copy link
Copy Markdown

Summary

Adds skills/resume-screening, a skill that turns job-application emails into an HR-ready screening report, and registers it as a plugin in .claude-plugin/marketplace.json.

It demonstrates a multi-step local workflow that combines scripts with Claude's judgment:

  1. Export: scripts/export_mail.applescript pulls applications for a role from macOS Mail (subject keywords + date range), including resume attachments.
  2. Extract: scripts/extract.py (stdlib only) parses candidate metadata and phone/email, strips recruiting-platform watermarks from PDF text, and de-duplicates repeat applicants.
  3. Evaluate: Claude reads every resume in full and tiers candidates A/B/C using the rubric and red-flag checklist in SKILL.md (timeline overlaps, copy-paste artifacts, buzzword stuffing, inflated metrics, direction/salary mismatch), then writes evaluation.json.
  4. Report: scripts/build_report.py renders a PDF via headless Chrome (summary, contact table with page references, per-candidate cards, interview questions) and appends the original shortlisted resumes with poppler's pdfunite.

Privacy is built into the instructions: all processing stays local, and the skill tells Claude not to upload or publish reports that contain candidate contact data unless explicitly asked.

Notes

  • Platform: macOS (Mail.app, Google Chrome, brew install poppler).
  • Skill instructions are written in Chinese; it targets China-based recruiting flows (e.g. BOSS Zhipin forwards).
  • License: MIT (skills/resume-screening/LICENSE.txt).
  • Also maintained at https://github.com/maweis1981/claude-skills.

Testing

Ran end-to-end on a real batch of 20 applications for an AI engineer role: export → extraction (all phones/emails recovered) → evaluation → a 48-page PDF with 11 resumes attached; verified rendering and page references. Fixed a headless-Chrome issue where the process keeps running after writing the PDF. No candidate data is included in this PR.

🤖 Generated with Claude Code

https://claude.ai/code/session_01AkrHSBuySQ1WuDd2eEjgS2

@98zc5g5jyw-arch

Copy link
Copy Markdown

Reviewed as a fresh pass — this looks solid. Verified on macOS / python3:

  • ✅ Layout: only skills/resume-screening/* plus a 10-line marketplace.json entry; nothing else touched.
  • ✅ python3 -m py_compile passes on extract.py and build_report.py; both are stdlib-only, use argument-list subprocess calls (no shell interpolation), and make no network calls — candidate data stays local, matching the privacy note at the end of SKILL.md.
  • ✅ build_report.py HTML-escapes (html.escape) every interpolated value before it reaches the Chrome-rendered report.
  • ✅ Frontmatter is spec-clean: quick_validate.py <dir> → "Skill is valid!" (kebab-case name, 146-char description, well under the 1024 cap); marketplace.json parses.
  • ✅ Workflow doc is actionable — defaults, the [文本过少] fallback for image-only resumes, and the "inspect the generated PDF" step are all explicit.

Suggestions:

  1. $S hardcodes an install path. SKILL.md L10 sets $S=~/.claude/skills/resume-screening/scripts/, but no other skill in the repo assumes an install location — they reference paths relative to the skill dir (e.g. python scripts/with_server.py in skills/webapp-testing). Installed via the plugin marketplace instead of copied to ~/.claude/skills, that path won't exist; scripts/… relative to the skill directory would be more robust.
  2. export_mail.applescript requires 应聘 in the subject (hardcoded in the Mail filter alongside the keyword list). That's documented in the script's header but not in SKILL.md, so subjects worded differently return an empty export with no explanation — worth a line in step 1.
  3. Optional: the description is Chinese-only; every other skill in this repo has an English description, so a bilingual one may trigger more consistently.
  4. Tiny: the standalone , on its own line in marketplace.json is valid JSON but inconsistent with the }, style used elsewhere.

(This repo has no GitHub Actions workflows, so there's nothing CI-side to wait on.) Nice work — the risk-signal checklist (time overlaps, copy-paste tells, inflated numbers) is a helpful addition.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants