Resume Intelligence Toolkit — evaluate, match, align, validate, and generate resume materials against jobs.
Project description
Resume Intelligence Toolkit (resume-kit)
A reusable, trustworthy system for evaluating, comparing, aligning, generating, and validating resume materials against specific jobs. It answers five core questions:
- Can an ATS reliably parse this resume?
- How closely does this resume match a specific job?
- Which relevant qualifications are missing or poorly represented?
- What truthful changes would improve alignment?
- Did the revised resume actually improve?
Resume-kit is a shared core engine exposed through an agent plugin, an MCP server,
a CLI (resume-tool), and a REST API. All interfaces are thin adapters over the same
core — no business rule lives only in a route, command, handler, or skill.
Installation
resume-kit ships as a single self-contained wheel that vendors every internal
import package. Choose extras for the surface(s) you want:
pip install resume-kit # core engine + export (base)
pip install "resume-kit[cli]" # + the resume-tool CLI
pip install "resume-kit[mcp]" # + the MCP server
pip install "resume-kit[api]" # + the FastAPI/uvicorn REST API
pip install "resume-kit[all]" # everything
The base install carries the engine and export third-party runtime dependencies
(pydantic, markitdown, pdfminer.six, python-docx, reportlab). Extras add
typer (cli), mcp (mcp), and fastapi + uvicorn (api).
The resume-tool command
Installing the cli extra exposes the console script:
pip install "resume-kit[cli]"
resume-tool --help
Deterministic ingest pipeline
Turning a resume/job file into structured JSON is split into deterministic rails around one confined interpretation step, so only the text→schema mapping needs an agent — extraction and validation are mechanical:
resume-tool init # scaffold resume-kit/ + config.json (idempotent)
resume-tool extract-text resume.docx # deterministic text (docx/pdf/md/txt), no LLM, no network
# → agent maps the extracted text onto the ResumeDocument schema (the one agentic step)
resume-tool validate-faithfulness \ # HARD GATE: exits non-zero on drift
--source resume.docx --json resume-kit/resumes/resume-original.json
resume-tool set-active \ # record active pointer + originating source path
--resume resumes/resume-original.json --source resume.docx
Text extraction (markitdown, pdfminer.six, python-docx) is bundled in the
base install — docx/pdf/md/txt all extract deterministically with no optional
extra. validate-faithfulness is a machine gate: it diffs the produced JSON
against the source (bullet/section parity, dropped/added tokens, altered
high-signal fields, non-ASCII scan) and exits non-zero when the conversion is
not faithful, so an unfaithful conversion never silently reaches disk. The
resume-kit/ working directory and its config.json (active resume/job pointers,
their source paths, and alias_file) are owned by code via init / set-active
— not hand-authored.
Building & publishing
Build the umbrella wheel and sdist locally with uv:
uv build # produces dist/resume_kit-*.whl and dist/resume_kit-*.tar.gz
The wheel vendors all import packages (schemas, core, document-parser, job-parser,
ats, matching, policy, evidence, alignment, export, facade, cli, mcp, api, and the
job-hunter bridge) via Hatch force-include, so the shipped metadata declares only
third-party dependencies — no internal resume-kit-* requirements. The per-package
pyproject.toml files remain only for local uv workspace development.
Publishing to PyPI uses Trusted Publishing
(OIDC, no long-lived API tokens). The GitHub Actions workflow in
.github/workflows/publish.yml builds and publishes on a v* version tag; it is not
triggered by ordinary pushes. To cut a release, push a tag:
git tag v0.1.0
git push origin v0.1.0
As a manual fallback (also Trusted-Publishing-friendly), you can upload from a local build with twine:
uv build
python -m twine upload dist/*
Note:
resume-kithas not been published to PyPI yet. The commands above describe how a release would be cut once the project is ready.
Status
Early development. Built by selectively porting proven behavior from
Resume-Matcher (Apache 2.0) into a clean, modular
architecture. Resume-Matcher is a donor codebase and upstream reference, not the product
architecture. See references/ for the upstream audit, reuse inventory, and
attribution.
Language & distribution
Implemented in Python (the donor codebase and all extractable subsystems are Python: Pydantic models, MarkItDown extraction, LiteLLM providers). Distribution targets PyPI, not npm — see ADR-0001.
Principles
- Deterministic parsing, checks, diffs, and scoring before any LLM reasoning; LLM usage is optional, explicit, and replaceable by local/no-LLM modes.
- Never fabricate employers, titles, dates, accomplishments, metrics, certifications, or experience. The user is the final authority over truth.
- Original resumes are preserved by default; every change ships with a structured diff, claim provenance, and a truth-validation report.
Repository layout
packages/ core, schemas, document-parser, job-parser, matching, alignment,
evidence, policy, ats, llm, export, cli, mcp, api
plugins/ resume-intelligence agent plugin
integrations/ job-hunter bridge
references/ upstream-audit.md, reuse-inventory.md, attribution.md, ADRs
tests/ fixtures, characterization, unit, integration, evals
License
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file resume_kit-0.5.0.tar.gz.
File metadata
- Download URL: resume_kit-0.5.0.tar.gz
- Upload date:
- Size: 182.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
86dba1385b479856f76e339b7c5a717037ede74b1efa9f70caf0272fc48de08d
|
|
| MD5 |
5dc4b147d71f7852d004f25d76ae7170
|
|
| BLAKE2b-256 |
2d9185559b56c789f201d03b5610a4fba6aceb92715409a41ff68075e1900d5d
|
Provenance
The following attestation bundles were made for resume_kit-0.5.0.tar.gz:
Publisher:
publish.yml on dcassil/resume-kit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
resume_kit-0.5.0.tar.gz -
Subject digest:
86dba1385b479856f76e339b7c5a717037ede74b1efa9f70caf0272fc48de08d - Sigstore transparency entry: 2346086252
- Sigstore integration time:
-
Permalink:
dcassil/resume-kit@6c5389396ca93f16a90ff705f753ac9bed49b2b2 -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/dcassil
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6c5389396ca93f16a90ff705f753ac9bed49b2b2 -
Trigger Event:
push
-
Statement type:
File details
Details for the file resume_kit-0.5.0-py3-none-any.whl.
File metadata
- Download URL: resume_kit-0.5.0-py3-none-any.whl
- Upload date:
- Size: 226.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ab4ac1ea0167f5f296c44cff0eac9d1095ff342c82143f5f5e153571c2d4eab
|
|
| MD5 |
46e4e53b09ca0fca2c603be5111ae258
|
|
| BLAKE2b-256 |
8b7c918edcfaf2d0675998708f093bed867dc2a9ba63ecba615ea1c3530b56bf
|
Provenance
The following attestation bundles were made for resume_kit-0.5.0-py3-none-any.whl:
Publisher:
publish.yml on dcassil/resume-kit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
resume_kit-0.5.0-py3-none-any.whl -
Subject digest:
0ab4ac1ea0167f5f296c44cff0eac9d1095ff342c82143f5f5e153571c2d4eab - Sigstore transparency entry: 2346087021
- Sigstore integration time:
-
Permalink:
dcassil/resume-kit@6c5389396ca93f16a90ff705f753ac9bed49b2b2 -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/dcassil
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6c5389396ca93f16a90ff705f753ac9bed49b2b2 -
Trigger Event:
push
-
Statement type: