Skip to content
Conduit

skill

ats-resume-optimizer

Free ATS resume checker & AI resume builder: Claude Code / Cowork / Codex skill + CLI/TUI. Tailor your CV to any job, audit ATS parsing (Workday, Greenhouse, Lever, Taleo, iCIMS), export ATS-safe PDF/

paulo-amaral/ats-resume-optimizercommunitylistedunreviewed

Set up

Skills are installed by placing their folder where your agent loads skills.

The download comes from github.com/paulo-amaral/ats-resume-optimizer itself, not from our server, so what you get is exactly what its author published.

Install instructions come from the README

Skills do not use an MCP config. Follow the steps in the README below.

README

synced Oct 27, 2026

ATS Resume Optimizer: free ATS resume checker, CV builder and LinkedIn optimizer

CI PyPI Python License: MIT Languages

Português: README.pt-BR.md

Check your resume the way an Applicant Tracking System (ATS) reads it, tailor it to a job description, and export a clean ATS-friendly PDF or DOCX. Works three ways:

  1. Terminal app (TUI): pick your CV, paste a job, see the results live.
  2. Command line (CLI): one command per task, scriptable.
  3. AI agent skill for Claude Code: your AI writes the words with you; the tools check layout, keywords and truthfulness.

Optimized for ATS parsing (Workday, Greenhouse, Lever, Taleo, iCIMS, Ashby), the 7-second recruiter skim, and LinkedIn recruiter search. Zero fabrication: it never invents employers, titles, dates or numbers.

Terminal app

Get started in 1 minute

You need uv (one installer, handles Python for you). Then:

uv tool install "ats-resume[tui]"
ats-resume tui

That's it. Pick your resume (PDF, DOCX, TXT or JSON) in the left panel, paste the job description, and read the three tabs: ATS file, Style, Keywords.

Prefer pipx? pipx install "ats-resume[tui]". Or plain pip: pip install "ats-resume[tui]".

Try it without installing: uvx ats-resume check my-cv.pdf.

What you can do

GoalCommand
Check the resume you already haveats-resume check my-cv.pdf
Compare it with a job postingats-resume check my-cv.pdf --job job.txt
Turn a PDF/DOCX into editable JSONats-resume import my-cv.pdf
Start from an exampleats-resume new (or --lang pt)
Export an ATS-safe PDF or DOCXats-resume render resume.json -o Jane-Doe-Resume.pdf -t modern
Export LaTeX (Overleaf) or a LaTeX-built PDFats-resume render resume.json -o cv.tex / -o cv.pdf --latex
Prove nothing was inventedats-resume validate resume.json --source master.json
Interactive appats-resume tui

Real output of check on the bundled example (ats-resume new, rendered with -t modern) against this job.txt:

Senior Data Engineer
Requirements:
- Python, SQL, Spark, Kafka
- Kubernetes and Terraform
Nice to have:
- dbt, Airflow
ATS file check: en-modern.pdf
  ✓ selectable text (1906 chars)
  ✓ 1 page(s)
  ✓ email found
  ✓ standard section headings detected

Style (de-slop): 0
  ✓ no issues found

Keyword coverage vs job (ESTIMATE, not a real ATS score)
  94.0% (strong)  required_coverage=88.9%, preferred_coverage=100.0%, quantification_rate=92.3%, ...
  Missing required keywords: kubernetes
  Add missing keywords only if you truly have the skill: in Skills and in a real bullet.

The score is a labeled estimate of keyword fit. No tool can reproduce a real ATS's internal ranking, and this one does not pretend to.

Templates

Three single-column, text-based templates. All pass the built-in ATS check.

classicmodern
classicmodern

compact uses a serif font and tighter spacing to fit more on one page.

LaTeX. ats-resume render resume.json -o cv.tex writes LaTeX source you can edit or upload to Overleaf, where the compiler must be set to XeLaTeX; -o cv.pdf --latex compiles it locally with Tectonic, XeLaTeX or LuaLaTeX. The LaTeX output is tuned for ATS text extraction: kerning is turned off, because kerned pairs like "AW" or "Va" extract as split words ("A WS", "V arejo"). pdfLaTeX is not used for that reason: it cannot switch kerning off, and CI caught it splitting "Texas". A test compiles the examples and fails if any word from the source is missing from the extracted text. Portuguese resumes ("lang": "pt") get localized headings and A4 paper automatically.

Use it with your AI agent

The agent writes the words with you; ats-resume checks layout, keywords and truthfulness.

AgentInstall
Claude Code/plugin marketplace add paulo-amaral/ats-resume-optimizer then /plugin install ats-resume-optimizer@ats-resume-optimizer
Claude Cowork (desktop)In Customize, open Plugins, choose Add marketplace, add from repository enter paulo-amaral/ats-resume-optimizer and install the plugin
OpenAI Codexgit clone https://github.com/paulo-amaral/ats-resume-optimizer && mkdir -p ~/.agents/skills && cp -R ats-resume-optimizer/skills/resume-ats-linkedin-optimizer ~/.agents/skills/
Cursor, Gemini CLI, othersOpen this repository in the agent: AGENTS.md tells it what to do. Or add the skills/resume-ats-linkedin-optimizer/ folder to its context.

Then ask, in English or Portuguese:

  • "Here is my old CV (cv.pdf). Import it, check it for ATS and improve it."
  • "Tailor my resume to this job: ..."
  • "Optimize my LinkedIn headline and About."
  • "Write a cover letter for this role."

Importing a previous CV. ats-resume import old-cv.pdf extracts what is safe to extract automatically (contact data, headline, summary, skills, language) and keeps every other section as raw text for the agent to structure, asking you when something is ambiguous. Your original stays the source of truth: ats-resume validate proves no employer, title, date or contact detail was invented. Step-by-step flow: AGENTS.md.

The skill works in phases and finishes each one before starting the next: intake, Master Profile, metric excavation, content, ATS formatting, keyword tailoring, rendering, evaluation and, when asked, LinkedIn.

The Master Profile is your private record of everything you have done. Every resume is a selection from it, never an invention on top of it.

Why this one

  • Honest scoring. A labeled keyword-coverage estimate, never a fake "ATS score 98/100".
  • Reads your real file. Detects scanned PDFs with no selectable text, tables, images and header/footer text in DOCX, missing email, missing standard headings.
  • Sourced guidance. Harvard/MIT career services, Google's XYZ formula, recruiter eye-tracking research, documented ATS parsing behavior. Myths are debunked in 07-myths-and-truth.md.
  • Bilingual. English and Brazilian Portuguese: headings, A4, PT-BR keyword matching (accents included), PT-BR cliché detection, and a Brazilian market guide (LGPD, Lei 9.029/1995, Gupy).
  • Private. Runs locally. Nothing is uploaded anywhere.

Myths it refuses to repeat

  • "ATS auto-reject 75% of resumes." A myth from a defunct 2012 vendor. What filters people out is recruiter overload and knockout questions.
  • "Hidden white-text keywords beat the bot." Modern screening flags it.
  • "ATS can't read PDFs." Text-based PDFs parse fine. Two-column and image layouts are the problem.

Project layout

src/ats_resume/        CLI, TUI, checks, renderer, importer (Python package)
skills/…/SKILL.md      the AI agent workflow (start here for the skill)
skills/…/references/   ATS, bullets, keywords, LinkedIn, scoring, myths, cover letters, Brazil
skills/…/assets/       schema, templates, verb banks and cliché lists (EN + PT-BR)
tests/                 pytest suite: renders every format, reads it back, and drives the TUI

Develop

uv sync --all-extras
uv run pytest
uv run ruff check .

License

MIT. See LICENSE.

↑↓ navigate openesc close