Introduction¶
In the DeepSeek Harness (DSH) ecosystem, HR or recruiting teams face a common pain point when processing resumes: document formats are diverse (Word, PDF, Excel, etc.), volumes are large, and manual screening is highly inefficient. If all resumes are sent to an LLM at once for full analysis, the context window limit is easily reached, costs grow linearly, and the results become hard to trace.
dsh-resume-screening targets this scenario and builds a complete workflow from ingestion and profiling to intelligent screening. It uses Markdown as the “source of truth” for archiving resumes, leverages SQLite as the screening index, first performs millisecond-level rough screening with a rule base, then runs LLM fine-grained evaluation on a shortlist, and finally outputs a ranked list based on a 0-100 suitability score.
What This Is¶
dsh-resume-screening is a bulk resume ingestion and automated initial screening tool for HR teams. It is maintained by wangzhanchao883 and released under the MIT License.
Its core value lies in: supporting management of up to 100,000 resumes in a single database (docx/pdf/xlsx/xls/md/txt), enabling automatic deduplication, structured profiling, and allowing screening conditions to be specified in natural language.
Core Features¶
The plugin provides six core capabilities:
1. Bulk Ingestion and Unified Management: Supports multiple file formats, automatically converts them to Markdown for archiving, and deduplicates by content hash.
2. Structured Profiling: Extracts hard fields (education, gender, age, etc.) and fine-grained skills (LLM fallback), building a multi-value tag system.
3. Two-Stage Intelligent Screening: First performs millisecond-level rough screening using database rules, then calls an LLM for shortlisted candidates to output a 0-100 score for fine-grained evaluation.
4. Incremental Automatic Ingestion: resume_screen supports passing a folder, automatically ingests unprocessed resumes, and runs screening.
5. Reusable Job Criteria: Saves recruitment requirements described in natural language as rules that can be repeatedly reused.
6. Engineering Foundation: Uses Markdown as the source of truth and SQLite as the screening index, supporting full index rebuilds.
Quick Start¶
Run the following commands in a DSH conversation to complete the basic workflow:
# 1. 初始化简历库
resume_init
# 2. 扫描文件夹收简历
resume_ingest folderPath="D:\简历库\0908简历"
# 3. 建立岗位要求(自然语言结构化)
resume_define_rule 岗位名="JAVA工程师岗" 必选: gender=男;education in 本科/硕士/博士;skill contains java 加分: experience_years>=2 (+15)
# 4. 自动入库 + 初筛 + LLM 精判
resume_screen reqId=2 folderPath="D:\简历库\0908简历" llm=true
# 5. 导出结果
resume_export reqId=2 outPath="D:\简历库\结果.csv"
Screening Rules and Operators¶
The plugin supports describing screening conditions in natural language. Under the hood, it is based on SQLite indexes. The semantics of common operators are as follows:
| Operator | Semantics |
|---|---|
= / != |
Whitespace trimming + case-insensitive comparison; numeric equivalence ("5" == 5) |
in |
Comma-separated (both Chinese and English commas are recognized); matches if any value is equal |
>= <= > < |
Numeric comparison; falls back to equality comparison when the value is not numeric |
contains |
Case-insensitive + Latin whole-word boundaries (e.g., java matches Java but not JavaScript) |
Tool Overview¶
| Tool | Purpose |
|---|---|
resume_init |
Initializes the resume database (archive directory + SQLite + tag dictionary) |
resume_ingest |
Scans a folder to ingest resumes and deduplicates by content hash |
resume_process |
Bulk conversion, rule extraction, LLM fallback, and ingestion |
resume_status |
Views the processing status distribution of resumes in the database |
resume_define_rule / resume_list_rules |
Saves / views job screening criteria |
resume_screen |
Runs screening; llm=true enables fine-grained evaluation; folderPath triggers automatic ingestion |
resume_export |
Exports screening results as CSV |
resume_rebuild |
Fully rebuilds the index from archived Markdown files |
How It Works¶
The plugin adopts a layered architecture:
* Markdown Archive (Source of Truth): Each resume is one .md file, containing structured attributes and original text.
* SQLite (Screening Index): A derived index supporting multi-value tags, weighted ranking, and multi-condition matching, with support for full rebuilds at any time.
* Screening Engine (Rule Layer): Mandatory hard filtering + optional bonus weighted ranking, implemented as pure, reproducible functions.
* LLM Fine Evaluation Layer: Reads the original text for shortlisted candidates to judge suitability, outputting structured scores and reasons.
Installation and Activation¶
This plugin depends on the host environment and specific versions.
Environment requirements:
* DeepSeek Harness (DSH): 0.1.7 ~ 0.2.x (the settings panel depends on the configForms contract in 0.1.7).
* Node.js: ^22 or >=24 (uses the built-in node:sqlite).
Dependencies:
* @deepseek-ai/dsh-tools
* @deepseek-ai/schemastery
* @deepseek-ai/cosmokit
* mammoth, pdfjs-dist, xlsx
Install the plugin from GitHub at the following address:
https://github.com/wangzhanchao883/dsh-resume-screening
Configuration and Settings¶
The plugin supports a Web settings panel. Referring to the settings.section pattern in dsh-study-notebook, it is divided into three sections:
1. General: Configure the resume database root directory, archive subdirectory, LLM toggle, thresholds, and more.
2. Tag Library: Add or modify tag definitions (e.g., skill categories, experience directions).
3. Job Requirements: Configure one job with a set of conditions (tags + operators + thresholds + mandatory/optional + weights).
Notes for 0.1.7 configuration:
* Volatile box handling: The parsed value of a .volatile() field is a “Volatile box” rather than a plain value. When reading the configuration in apply or settings.describe(), you must call .get() to unwrap it; otherwise, path operations may fail.
* Configuration refresh: Writing settings through the panel does not automatically trigger the plugin to re-run apply. The plugin must re-read settings.describe() at each entry point.
Use Cases¶
Suitable for recruitment scenarios with large document volumes, consistent formats, but tedious manual screening. Especially suited to teams that need to preserve traceability of screening results, have strict requirements for hard metrics, and want to control LLM invocation costs.
Conclusion¶
By decoupling resume archiving from screening logic and combining a rule engine with an LLM, dsh-resume-screening provides HR teams with a practical and extensible automated initial screening solution.