Skip to main content

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-kit has 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

Apache 2.0. See LICENSE and NOTICE.

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

resume_kit-0.5.0.tar.gz (182.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

resume_kit-0.5.0-py3-none-any.whl (226.7 kB view details)

Uploaded Python 3

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

Hashes for resume_kit-0.5.0.tar.gz
Algorithm Hash digest
SHA256 86dba1385b479856f76e339b7c5a717037ede74b1efa9f70caf0272fc48de08d
MD5 5dc4b147d71f7852d004f25d76ae7170
BLAKE2b-256 2d9185559b56c789f201d03b5610a4fba6aceb92715409a41ff68075e1900d5d

See more details on using hashes here.

Provenance

The following attestation bundles were made for resume_kit-0.5.0.tar.gz:

Publisher: publish.yml on dcassil/resume-kit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for resume_kit-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0ab4ac1ea0167f5f296c44cff0eac9d1095ff342c82143f5f5e153571c2d4eab
MD5 46e4e53b09ca0fca2c603be5111ae258
BLAKE2b-256 8b7c918edcfaf2d0675998708f093bed867dc2a9ba63ecba615ea1c3530b56bf

See more details on using hashes here.

Provenance

The following attestation bundles were made for resume_kit-0.5.0-py3-none-any.whl:

Publisher: publish.yml on dcassil/resume-kit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page