# Resume Matcher

Tailors a master resume to job descriptions and writes cover letters and PDFs.

- Repository: https://github.com/srbhr/Resume-Matcher (29033 stars)
- Category: Business
- License: Apache-2.0
- Last updated: 2026-10-30
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add srbhr/Resume-Matcher --skill resume-matcher -g -a claude-code -y`
Codex: `npx skills add srbhr/Resume-Matcher --skill resume-matcher -g -a codex -y`
Cursor: `npx skills add srbhr/Resume-Matcher --skill resume-matcher -g -a cursor -y`
Gemini CLI: `npx skills add srbhr/Resume-Matcher --skill resume-matcher -g -a gemini-cli -y`

## Description

Use Resume Matcher with no API key, with you doing the AI work. Sets up the app, creates a master resume, tailors it to job descriptions (pasted in chat or saved in jobs/), writes cover letters and outreach messages, and exports PDFs. Use when the user asks about resumes, CVs, job descriptions, tailoring, cover letters, or setting up or running Resume Matcher.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Resume Matcher, driven by you

You are the AI. The `resume-matcher` command stores, validates, scores and renders what you write, in the same database as the web app, so everything you save appears at <http://localhost:3000>. The user makes small edits there.

Work in this order: **set up** (once), **master resume** (once), **tailor** (per job), **hand off** to the UI. Skip a step that is already done. Talk to the user in their language.

## The command

From the repository root:

```bash
uv run --directory apps/backend resume-matcher <tool> [arguments]
```

- `resume-matcher --help` lists the tools; `resume-matcher <tool> --help` shows one tool's arguments as a JSON schema.
- Arguments are either one JSON object (`'{"resume_id": "…"}'`, `@args.json`, or `-` for stdin) or fields: `key=value` (string), `key=@file` (string from a file), `key:=json` (any JSON value), `key:=@file.json` (JSON from a file).
- **Use absolute paths.** `--directory` runs the command from `apps/backend`, so a relative path resolves from there.
- The result is JSON on stdout. Exit code 1: the tool failed and stderr says why. Exit code 2: the command line was wrong.
- Write argument files (large JSON such as a whole resume) to `jobs/.work/` in this repository (`mkdir -p jobs/.work` first). It is gitignored and inside every agent's sandbox.
- To shorten it, define a shell function, not a variable (zsh does not split a command stored in a variable): `rmx() { uv run --directory "$PWD/apps/backend" resume-matcher "$@"; }`

**Docker install:** run the same tools inside the container, from its backend folder so they use the app's data:

```bash
docker exec -i -w /app/backend resume-matcher python -m app.mcp_server.cli <tool> [arguments]
```

The rest: https://github.com/srbhr/Resume-Matcher/blob/HEAD/.claude/skills/resume-matcher/SKILL.md
