{"slug": "open-source-resume-builder-that-refuses-to-lie-for-you", "title": "Open source resume builder that refuses to lie for you", "summary": "ResumeHQ, an open-source resume builder available as a Claude Code plugin, Codex plugin, or standalone web app, refuses to fabricate experience and declines to tailor resumes for genuine job mismatches, using deterministic scoring engines and a fail-closed pipeline with an independent auditor. It discovers matching jobs, scores fit with ATS and HR simulations, and generates DOCX files, with a candidate-fit gate that cannot be bypassed. The tool publishes its own scoring failures in a benchmarks file and works with Claude Code, Codex, and claude.ai.", "body_md": "Every AI resume tool promises to \"beat the ATS.\" This one has a harder rule:\n**it never invents experience** — and when a job is a genuine mismatch, it\ndeclines to tailor at all and tells you why. Finds jobs, scores your fit with\ndeterministic engines (not LLM vibes), tailors through a fail-closed pipeline\nwhere an independent auditor can veto the writer, and\n[publishes its own scoring failures](/jananthan30/Resume-Builder/blob/master/BENCHMARKS.md). Works as a\n[Claude Code](https://docs.anthropic.com/en/docs/claude-code) plugin, Codex\nplugin, or standalone web app.\n\n*Upload a resume → paste the job posting → ATS + recruiter scores with fixes, in under 30 seconds. Try it free.*\n\nMost resume tools only score the resume you bring to them. ResumeHQ goes further:\n\n| Feature | Jobscan | Rezi | Teal | ResumeHQ |\n|---|---|---|---|---|\n| ATS keyword scoring | ✅ | ✅ | ✅ | ✅ |\n| HR / recruiter simulation | ❌ | ❌ | ❌ | ✅ |\n| Discover matching jobs | ❌ | ❌ | ❌ | ✅ |\n| Score jobs against your resume | ❌ | ❌ | ❌ | ✅ |\n| Auto-tailor resume to JD | ✅ | ✅ | ❌ | ✅ |\n| ATS-compliant DOCX output | ❌ | ✅ | ❌ | ✅ |\n| Application tracker | ❌ | ❌ | ✅ | ✅ |\n| Works in Claude Code / claude.ai / Codex | ❌ | ❌ | ❌ | ✅ |\n| Open source | ❌ | ❌ | ❌ | ✅ |\n|\n\n**Refuses to fabricate**— declines to tailor genuine mismatches, audits every claim against your real resumeYou paste a job description (or search for jobs). The system:\n\n**Discovers** matching jobs from live job boards — scored and ranked by fit with your resume**Gates candidate fit**— your master resume must clear the fit bar (default 50) against the exact JD with zero hard knockouts before resume work begins. If you don't fit, it says so and stops — no tool that invents experience to close the gap is working for you**Analyzes** passing JDs — extracts keywords, required skills, domain, seniority level**Tailors** your master resume — rewrites bullets, reorders sections, matches terminology**Scores** the result with two independent advisory engines (ATS + HR simulation)**Iterates** automatically until scores hit targets (ATS 75-85%, HR 70%+)**Generates** production-ready DOCX files (resume + cover letter)**Tracks** every application in an Excel spreadsheet\n\nThe candidate-fit gate always runs first and cannot be bypassed by ATS/HR scores. After it passes, safe read/scoring work may run concurrently while authorization, DOCX generation, and tracker mutation remain ordered.\n\nWorks with **Claude Code** (CLI/IDE), **Codex** (CLI/app/IDE), and **claude.ai** (web/Projects).\n\n**Step 1: Install the plugin**\n\nClaude Code:\n\n```\n/plugin marketplace add jananthan30/Resume-Builder\n/plugin install resume-builder\n```\n\nCodex from a local checkout:\n\n```\ncodex plugin marketplace add .\n```\n\nThen restart Codex and install **Resume Builder** from the **Resume Builder Local** marketplace.\n\n**Step 2: Configure the runtime**\n\nClaude Code exposes the plugin setup command:\n\n```\n/resume-builder:setup\n```\n\nThis walks you through everything:\n\n- Checks if Python is installed (tells you where to download it if not)\n- Installs all dependencies automatically (\n`pip install -r requirements.txt`\n\n) - Creates your\n`config.json`\n\nwith your name, email, phone, LinkedIn - Optionally links a Pro account for unlimited cloud scoring\n- Optionally sets up the LLM scorer (Claude API key)\n\nFor Codex, install Python 3.10+, run `python -m pip install -r requirements.txt`\n\n,\nand create `config.json`\n\nwith a valid `master_resume_path`\n\n. The installed Codex\nsurface exposes the Resume Team as `$resume-team`\n\n; it does not expose the\nClaude-style `/resume-builder:*`\n\ncommand namespace.\n\n**Step 3: Start building resumes**\n\nClaude Code:\n\n```\n/resume-builder:resume [paste a job description here]\n```\n\nCodex:\n\n```\n$resume-team [paste a job description here]\n```\n\n`$resume-team`\n\npublishes an authorized, digest-verified `resume.md`\n\ndraft. It does\nnot by itself create a DOCX or complete an application package.\n\nOr find jobs first:\n\n```\n/resume-builder:find-jobs Senior Data Scientist in New York\n```\n\n| Command | What It Does |\n|---|---|\n`/resume-builder:setup` |\nOne-time setup wizard (installs Python deps, creates config, links Pro account) |\n`/resume-builder:job-fit [JD]` |\nDeterministic master-vs-JD gate (fit bar, default 50, and zero hard knockouts) before tailoring |\n`/resume-builder:resume [JD]` |\nFull application: tailored resume + cover letter + scoring + DOCX + tracking |\n`/resume-builder:tailor-resume [JD]` |\nResume only (no cover letter) |\n`/resume-builder:cover-letter [JD]` |\nCover letter only |\n`/resume-builder:find-jobs [title] [location]` |\nDiscover and score matching jobs from live job boards |\n`/resume-builder:batch-resume` |\nProcess multiple job descriptions in parallel |\n`/resume-builder:writing-coach [file]` |\nAudit and rewrite resume bullets using 10 writing rules |\n`/resume-builder:resume-team [JD]` |\nPublish an authorized `resume.md` draft through the native Researcher → Writer → Auditor → Editor workflow |\n\nIf running Claude Code locally from the cloned repo, use short names: `/resume`\n\n,\n`/tailor-resume`\n\n, `/find-jobs`\n\n, etc. In Codex, invoke `$resume-team`\n\n.\n\nSome Claude Code commands can provide prompt-only previews before setup.\nProduction resume generation through `/resume-builder:resume`\n\n,\n`/resume-builder:resume-team`\n\n, or Codex `$resume-team`\n\nrequires Python,\n`config.json`\n\n, the deterministic candidate-fit preflight, and the evidence,\nhuman-voice, and canonical-integrity audit helpers; those gates are never skipped.\n\n| Command | Works immediately? | With setup? |\n|---|---|---|\n`/resume-builder:job-fit` |\nNo — requires the configured master and deterministic preflight | Digest-bound score, threshold, and hard-knockout decision |\n`/resume-builder:resume` |\nNo — the native team and deterministic audits require setup | Full audited resume + automated ATS/HR scoring and DOCX output |\n`/resume-builder:resume-team` / `$resume-team` |\nNo — requires macOS/Linux, the configured master resume, and Python audit helpers | Authorized, digest-verified `resume.md` draft; DOCX/tracker finalization is still pending |\n`/resume-builder:cover-letter` |\nYes — the assistant writes the letter | + DOCX output |\n`/resume-builder:writing-coach` |\nYes — full writing audit | Same |\n`/resume-builder:find-jobs` |\nYes — shows results (no score) | + ATS/HR fit scoring per job |\n`/resume-builder:setup` |\nYes — runs the setup wizard | N/A |\n| MCP scoring tools | No — needs Python | `score_resume` , `score_ats` , `score_hr` , `score_with_llm` , `explain_score` , `extract_text` , `discover_jobs` |\n\nAfter running `/resume-builder:setup`\n\n, the MCP scorer auto-starts and provides these tools that Claude Code or Codex can call natively:\n\n| Tool | What It Does |\n|---|---|\n`score_resume` |\nFull ATS + HR analysis in one call (recommended) |\n`score_ats` |\nATS keyword + semantic scoring (8 components) |\n`score_hr` |\nHR recruiter simulation (6 factors + F-pattern) |\n`score_with_llm` |\nLLM-augmented rubric scoring (requires ANTHROPIC_API_KEY) |\n`explain_score` |\nActionable improvement suggestions with missing keywords |\n`extract_text` |\nExtract text from DOCX/PDF/MD/TXT files |\n`discover_jobs` |\nSearch live job boards and score each job against your resume |\n\nAll listed MCP tools support **cloud-first scoring** — they try the cloud API first and fall back to local scoring automatically. Legacy direct rewrite endpoints or functions are not production-authorized tailoring paths. The capability-isolated native Resume Team is the sole production rewrite and draft-publication path.\n\nThe `/find-jobs`\n\ncommand and `discover_jobs`\n\nMCP tool search live job boards and rank results by how well each job matches your resume — answering \"which jobs should I actually apply to?\" with data.\n\n```\n/resume-builder:find-jobs Senior Product Manager in San Francisco\n/resume-builder:find-jobs Data Scientist remote\n```\n\n**How it works:**\n\n- Searches Adzuna (16 countries, salary data) + Remotive (remote jobs) + JSearch (aggregated boards incl. niche career centers; optional RapidAPI key)\n- Pre-filters top 20 results by title relevance\n- Lightweight scores all 20 candidates (keyword + phrase + BM25 — fast)\n- Full ATS + HR scores top 10 finalists\n- Returns ranked list with scores, salary range, and apply links\n\n**Sample output:**\n\n```\nRank  Title                        Company        ATS   HR    Salary\n────  ───────────────────────────  ─────────────  ────  ────  ──────────────\n#1    Senior Data Scientist        Pfizer          82%   74%  $120k–$150k\n#2    Data Scientist II            Goldman Sachs   79%   71%  $110k–$140k\n#3    ML Engineer – NLP            Microsoft       74%   68%  $130k–$160k\n```\n\n**API keys required for job search:**\n\n**Adzuna**(free): Register at[developer.adzuna.com](https://developer.adzuna.com/)— add`ADZUNA_APP_ID`\n\nand`ADZUNA_APP_KEY`\n\nto your`.env`\n\n**Remotive**: No key needed (remote jobs only, included automatically)\n\nSimulates how Applicant Tracking Systems filter resumes before a human ever sees them.\n\n| Component | Weight | What It Measures |\n|---|---|---|\n| Phrase Match | 25% | Multi-word industry phrases (10.6x callback increase for exact matches) |\n| Keyword Match | 20% | Lemmatized keywords with synonym expansion |\n| Weighted Industry Terms | 15% | Domain-specific terminology with recency decay |\n| Semantic Similarity | 10% | SBERT vector cosine similarity between resume and JD |\n| BM25 Score | 10% | Probabilistic relevance ranking (BM25Plus) |\n| Job Title Match | 10% | Exact JD title in resume header/summary |\n| Graph Centrality | 5% | Infers missing skills from related skills via NetworkX |\n| Skill Recency | 5% | Exponential decay — recent experience weighted higher |\n\n**Additional checks:** Hidden text detection, readability analysis (Flesch-Kincaid Grade 10-12 optimal), format risk assessment.\n\nSimulates how a human recruiter evaluates a resume in their typical 7-second scan.\n\n| Factor | Weight | What It Measures |\n|---|---|---|\n| Experience Fit | 30% | Years of experience vs. JD requirements, Goldilocks zone |\n| Skills Match | 20% | Demonstrated skills (action verbs) vs. listed skills |\n| Career Trajectory | 20% | Title progression via linear regression slope |\n| Impact Signals | 20% | Metrics density + Bloom's Taxonomy verb power levels |\n| Competitive Edge | 10% | Company/university prestige signals |\n| F-Pattern Visual | +/-5pts | Eye-tracking compliance (golden triangle, left-rail alignment) |\n\n**Risk penalties:** Job hopping (-8 to -15 pts), unexplained gaps (-5 to -15 pts), recent instability.\n\nClaude-powered rubric evaluation that catches nuances the algorithmic scorers miss — tone, coherence, storytelling quality.\n\n| Tier | Price | What You Get |\n|---|---|---|\nFree |\n$0 | 5 cloud scores (then automatic local scoring fallback for CLI/MCP users) |\nPro |\n$12/mo | Unlimited checks, full keyword gap + deep AI analysis, 10 AI rewrites/mo, 30 cover letters/mo |\nUltra |\n$29/mo | Everything in Pro + 100 AI rewrites/mo, 1,000 cover letters/mo |\n\n**Note for Claude Code / claude.ai users:** Your Anthropic subscription already handles resume writing via Claude. The scorer server only does ATS + HR scoring, so **Pro is all you need** — you do not need Ultra.\n\nSign up at [getresumehq.com](https://getresumehq.com). After signing up, run `/resume-builder:setup`\n\nto link your Pro account in one step.\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│             Claude Code / claude.ai                          │\n│  /resume  /tailor-resume  /cover-letter  /find-jobs  /setup  │\n├─────────────────────────────────────────────────────────────┤\n│                                                             │\n│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌───────────┐  │\n│  │  ATS     │  │  HR      │  │  LLM     │  │  Writing  │  │\n│  │  Scorer  │  │  Scorer  │  │  Scorer  │  │  Coach    │  │\n│  │ (8-comp) │  │ (6-fact) │  │ (Claude) │  │ (10 rules)│  │\n│  └────┬─────┘  └────┬─────┘  └────┬─────┘  └─────┬─────┘  │\n│       └──────────────┴─────────────┘               │        │\n│                      │                             │        │\n│              ┌───────┴───────┐              ┌──────┴─────┐  │\n│              │  MCP Server   │              │   DOCX     │  │\n│              │  (FastMCP 3)  │              │ Generator  │  │\n│              │  Cloud-first  │              │ (Workday)  │  │\n│              └───────┬───────┘              └────────────┘  │\n│                      │                                      │\n│            ┌─────────┴──────────┐                           │\n│            │  Cloud API         │                           │\n│            │  resume-scorer     │                           │\n│            │  .fly.dev          │                           │\n│            │  (JWT + API key)   │                           │\n│            └────────────────────┘                           │\n│                                                             │\n├─────────────────────────────────────────────────────────────┤\n│  Job Discovery: Adzuna + Remotive + JSearch → light score → │\n│  full ATS+HR score → ranked results                         │\n├─────────────────────────────────────────────────────────────┤\n│  Orchestration State (state.json) — Multi-Agent DAG        │\n│  Application Tracker (Excel) — Auto-updated per run        │\n└─────────────────────────────────────────────────────────────┘\n```\n\nThe MCP server operates in **thin client** mode: it tries the cloud API first for scoring, and falls back to local scoring if the cloud is unavailable or not configured. LLM scoring always runs locally using your own API key (BYOK).\n\n```\n1. /resume-builder:setup            One-time setup (install deps, create config, link Pro)\n2. Create your master resume         YOUR_MASTER_RESUME.md with full work history\n3. /resume-builder:find-jobs [JD]   Optional — discover matching jobs scored by fit\n4. /resume-builder:resume [JD]      Paste a job description — get a full application\n5. /resume-builder:writing-coach    Optional — audit and improve writing quality\n```\n\nEach resume command follows a gated workflow:\n\n**Phase 0:** Deterministic candidate-fit preflight against the configured master and exact JD (fit bar, default 50; zero hard knockouts). Rejected JDs create no output.**Phase 1:** Read-only master/JD planning; prior tailored resumes are not inputs.**Phase 2:** Native Researcher → Writer → Auditor → bounded Editor workflow.**Phase 3:** Advisory ATS/HR scoring and cover-letter generation where requested.**Phase 4:** Evidence, human-voice, and canonical-integrity authorization votes.**Phase 5:** Ordered resume DOCX → cover-letter DOCX → tracker finalization.**Phase 6:** Artifact verification, cleanup, and report.\n\nThe scoring engine and MCP server are on PyPI:\n\n```\npip install resumehq\n\n# Serve the scorer to Claude/any MCP client over stdio:\nresumehq-mcp\n```\n\nIf you prefer not to use the plugin system:\n\n```\ngit clone https://github.com/jananthan30/Resume-Builder.git\ncd Resume-Builder\n\npip install -r requirements.txt\n\n# Download NLTK data (one-time)\npython -c \"import nltk; nltk.download('wordnet'); nltk.download('punkt_tab')\"\n\ncp .env.example .env\ncp config.example.json config.json\n```\n\nThen edit `.env`\n\n(API keys) and `config.json`\n\n(your info), and use commands without the `resume-builder:`\n\nprefix (e.g., `/resume`\n\ninstead of `/resume-builder:resume`\n\n).\n\nThe scoring API is hosted at `https://resume-scorer.fly.dev`\n\n. Free users get **5 scored resumes**, then local scoring activates automatically. Sign up or upgrade at [getresumehq.com](https://getresumehq.com).\n\nThe easiest way to link your account is via the setup wizard:\n\n```\n/resume-builder:setup\n```\n\nOr manually add to your `.env`\n\n:\n\n```\nSCORER_CLOUD_URL=https://resume-scorer.fly.dev\nSCORER_CLOUD_API_KEY=rb_your_api_key_here\n```\n\nThe `.mcp.json`\n\nfile configures the MCP server to auto-start with Claude Code:\n\n```\n{\n  \"mcpServers\": {\n    \"ai-resume-tuner\": {\n      \"command\": \"python\",\n      \"args\": [\"mcp_scorer.py\"],\n      \"cwd\": \"/path/to/Resume-Builder\",\n      \"env\": {\n        \"SCORER_CLOUD_URL\": \"https://resume-scorer.fly.dev\"\n      }\n    }\n  }\n}\n```\n\n**Environment variables:**\n\n| Variable | Required | Default | Description |\n|---|---|---|---|\n`SCORER_CLOUD_URL` |\nNo | `https://resume-scorer.fly.dev` |\nCloud scoring API URL |\n`SCORER_CLOUD_API_KEY` |\nNo | — | Your cloud API key (`rb_...` ). Anonymous scoring (5 free) works without this. |\n`ANTHROPIC_API_KEY` |\nNo | — | For LLM scoring (always runs locally with your key) |\n`ANTHROPIC_MODEL` |\nNo | `claude-sonnet-4-6` |\nClaude model for LLM scoring |\n`ADZUNA_APP_ID` |\nNo | — | For job discovery (free at\n|\n\n`ADZUNA_APP_KEY`\n\n`RAPIDAPI_KEY`\n\nCreate a file with your complete work history. Supported formats: `.docx`\n\n, `.pdf`\n\n, `.md`\n\n, or `.txt`\n\n. This is the single source of truth — all tailored resumes are generated from it. DOCX is recommended since most people already have their resume in that format.\n\n```\nFULL NAME, CREDENTIALS\nCity, State ZIP | Phone | Email | LinkedIn\n\nPROFESSIONAL SUMMARY\n[Your comprehensive summary with all skills and experience]\n\nPROFESSIONAL EXPERIENCE\n\nJOB TITLE | COMPANY NAME | City, State\nMonth Year – Month Year\n\n• Achievement with quantified impact\n• Another achievement with metrics\n\nEDUCATION\n\nDegree Name\nUniversity Name, City, State | Year – Year\n\nCERTIFICATIONS\n• Certification Name – Issuing Body\n```\n\nSet the path to this file in your `config.json`\n\nas `master_resume_path`\n\n.\n\n| Score | Rating | Meaning |\n|---|---|---|\n| 80-100% | Excellent | Top candidate — likely to pass all ATS filters |\n| 65-79% | Good | Strong match — will pass most filters |\n| 50-64% | Fair | Competitive — may need optimization |\n| 35-49% | Low | Below average — significant gaps |\n| 0-34% | Poor | Unlikely to pass automated screening |\n\n| Score | Recommendation | Meaning |\n|---|---|---|\n| 85%+ | STRONG INTERVIEW | Top candidate |\n| 70-84% | INTERVIEW | Competitive |\n| 55-69% | MAYBE | Marginal — depends on candidate pool |\n| <55% | PASS | Weak match |\n\nThe scoring API runs locally (`python scorer_server.py --port 8100`\n\n) or is hosted at `https://resume-scorer.fly.dev`\n\n.\n\n| Endpoint | Method | Auth | Description |\n|---|---|---|---|\n`/health` |\nGET | No | Server health and version info |\n`/score/ats` |\nPOST | Yes | ATS scoring (8 weighted components) |\n`/score/hr` |\nPOST | Yes | HR recruiter simulation |\n`/score/both` |\nPOST | Yes | ATS + HR combined in one call (JSON by default, SSE with `Accept: text/event-stream` ) |\n`/score/llm` |\nPOST | Yes | LLM scoring via Claude |\n`/score/combined` |\nPOST | Yes | All 3 blended (70% rules / 30% LLM) |\n`/score/batch` |\nPOST | Yes | Score multiple resume/JD pairs |\n`/explain` |\nPOST | Yes | Detailed score explanation |\n`/jobs/discover` |\nPOST | Yes | Search jobs + score against resume |\n\n| Endpoint | Method | Description |\n|---|---|---|\n`/auth/register` |\nPOST | Create account (email + password) |\n`/auth/login` |\nPOST | Login and get JWT token |\n`/auth/api-key` |\nPOST | Create an API key (requires JWT) |\n`/auth/usage` |\nGET | Check usage stats and remaining scores |\n`/billing/checkout` |\nPOST | Start Stripe checkout for Pro upgrade |\n`/billing/portal` |\nPOST | Stripe customer portal |\n\n**JWT Bearer token:**`Authorization: Bearer <token>`\n\n(from`/auth/login`\n\n)**API key:**`X-API-Key: rb_...`\n\n(from`/auth/api-key`\n\nor web dashboard)\n\n```\ncurl -X POST https://resume-scorer.fly.dev/score/ats \\\n  -H \"X-API-Key: rb_your_api_key\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"resume_text\": \"Your resume text...\", \"jd_text\": \"Job description text...\"}'\ncurl -X POST https://resume-scorer.fly.dev/jobs/discover \\\n  -H \"X-API-Key: rb_your_api_key\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"resume_text\": \"Your resume...\", \"job_title\": \"Data Scientist\", \"location\": \"New York\", \"max_results\": 10}'\n```\n\nThe ATS scorer auto-detects the job domain and applies domain-specific adjustments:\n\n| Domain | Detection Method | Key Adjustments |\n|---|---|---|\nClinical Research |\nSBERT prototype embeddings | Publications bonus, transferable skills mapping |\nPharma/Biotech |\nKeyword + semantic hybrid | Regulatory terminology weighting, pipeline experience |\nTechnology |\nKeyword + semantic hybrid | Portfolio links bonus, 1.3x skill recency weight |\nFinance |\nKeyword + semantic hybrid | Deal artifacts required, 1.5x prestige weight |\nConsulting |\nKeyword + semantic hybrid | Impact metrics required, 1.4x prestige weight |\nHealthcare |\nKeyword + semantic hybrid | Certifications required, quality improvement focus |\n\nWorks for **any profession**. The scorer auto-detects domain and applies appropriate weights:\n\n| Domain | Example Roles |\n|---|---|\nClinical Research |\nCRA, Medical Monitor, Study Director, Clinical Operations |\nPharma/Biotech |\nRegulatory Affairs, Medical Science Liaison, Drug Safety |\nTechnology |\nSoftware Engineer, Product Manager, Data Scientist, ML Engineer |\nFinance |\nInvestment Analyst, Financial Controller, Risk Manager |\nConsulting |\nManagement Consultant, Strategy Analyst, Business Advisor |\nHealthcare |\nNurse Manager, Quality Director, Health Administrator |\nGeneral |\nAny role not matching a specific domain — uses universal scoring |\n\nThe DOCX generator produces files optimized for Applicant Tracking Systems (Workday, Taleo, Greenhouse, Lever):\n\n**No tables, text boxes, columns, or graphics**(ATS parsers can't read these)** Heading styles**for section detection (Workday XML parsing)** Safe fonts**: Calibri, Arial, Times New Roman (10-12pt body)** Clean structure**: Contact info in body (not headers/footers)** Bold metrics**for visual impact during human review\n\n| Component | Technology |\n|---|---|\n| AI Agent Framework |\n|\n\n[Claude](https://www.anthropic.com/claude)(Anthropic)[FastMCP 3.0](https://gofastmcp.com/)(auto-starts with plugin, cloud-first thin client)[Sentence Transformers](https://sbert.net/)(all-MiniLM-L6-v2)[Fly.io](https://fly.io)(auto-stop/start, persistent volume)[Stripe](https://stripe.com)(subscription management)\n\n```\nResume-Builder/\n├── agents/                     # Claude plugin-installed Researcher/Writer/Auditor/Editor definitions\n├── .codex/agents/              # Native Codex Researcher/Writer/Auditor/Editor definitions\n├── .claude/agents/             # Native Claude Code equivalents\n├── .claude-plugin/             # Plugin manifest\n│   └── plugin.json             # Plugin metadata (name, version, author)\n├── .codex-plugin/              # Codex plugin manifest\n│   └── plugin.json             # Codex metadata and install-surface copy\n├── .agents/plugins/\n│   └── marketplace.json        # Local Codex marketplace entry\n├── skills/resume-team/         # Installable Codex Resume Team entrypoint\n├── commands/                   # Slash commands (plugin format)\n│   ├── setup.md                # One-time setup wizard\n│   ├── job-fit.md              # Deterministic master-vs-JD candidate-fit gate\n│   ├── resume.md               # Full application (native four-role team)\n│   ├── resume-team.md          # Shared fail-closed coordinator protocol\n│   ├── tailor-resume.md        # Resume only\n│   ├── cover-letter.md         # Cover letter only\n│   ├── find-jobs.md            # Job discovery + scoring\n│   ├── batch-resume.md         # Batch processing\n│   └── writing-coach.md        # Human Voice + Impact rules (0-16)\n├── hooks/                      # Plugin hooks\n│   └── hooks.json              # SessionStart: checks if scoring is ready\n├── .mcp.json                   # MCP server config (auto-starts scorer)\n├── .codex.mcp.json             # Codex MCP server config\n├── mcp_scorer.py               # MCP scoring server (7 production-supported surfaces)\n├── job_discovery.py            # Job search + two-tier scoring (Adzuna + Remotive + JSearch)\n├── data/                       # Reference databases for scoring\n│   ├── keywords_*.json         # Domain-specific keyword databases (6 domains)\n│   ├── skill_taxonomy.json     # Skill categories with decay constants\n│   ├── company_prestige.json   # Company prestige scoring\n│   ├── university_rankings.json# University prestige scores\n│   ├── acronyms.json           # Industry acronym expansion\n│   └── action_verbs.json       # Verb power classifications\n├── ats_scorer.py               # ATS scoring engine (2,800+ lines)\n├── hr_scorer.py                # HR scoring engine (2,900+ lines)\n├── llm_scorer.py               # LLM-powered rubric scorer\n├── scorer_server.py            # FastAPI REST API (v3.0 — auth, usage, billing)\n├── pii_redactor.py             # PII redaction via Presidio (pre-LLM API calls)\n├── docx_generator.py           # ATS/Workday-compliant DOCX generator\n├── orchestration_state.py      # Multi-agent state management (DAG)\n├── multi_agent_team.py         # Vendor-neutral, offline, fail-closed team controller\n├── candidate_fit_preflight.py  # Deterministic fit-bar/no-knockout first gate\n├── native_resume_team.py       # Hardened Codex/Claude CLI adapter and draft publisher\n├── schemas/\n│   ├── resume-team-handoff.schema.json # Strict public role handoff contract\n│   ├── resume-team-authorization.schema.json # Three-vote authorization contract\n│   ├── resume-team-final-receipt.schema.json # Durable draft-authorization sidecar contract\n│   └── resume-team-result.schema.json # Draft-stage runtime result contract\n├── tracker_utils.py            # Excel application tracker utilities\n├── resume_builder.py           # Retired direct-rewrite CLI; native-team migration guard\n├── requirements.txt            # Python dependencies\n├── config.example.json         # Config template\n├── .env.example                # Environment variable template\n├── AGENTS.md                   # Project context for Codex\n├── CLAUDE.md                   # Project context for Claude Code\n├── LICENSE                     # MIT License\n└── README.md                   # You are here\n```\n\nCodex and Claude Code use the same `resume-team/v2`\n\ncontrol flow without API\nkeys or a third-party orchestration framework. Project custom-agent role files\nomit model pins and follow their host's inheritance rules. The hardened runtime\ndoes not inherit transient parent-session or user configuration: by default its\nmanaged CLI model/reasoning selection is unknown and must not be described as a\nspecific model, profile, or Ultra setting.\n\n- In an installed Claude Code plugin, run\n`/resume-builder:resume-team [JD]`\n\n; the four roles load from the plugin-root`agents/`\n\ndirectory. - In Codex, run\n`$resume-team [JD]`\n\n. The skill uses`python native_resume_team.py --host codex`\n\nas the authoritative production path; each role runs from an empty temporary working directory with tool surfaces disabled. A project checkout also registers the four read-only custom roles from`.codex/agents/`\n\nfor interactive inspection, but those manual roles are not the capability-isolated publication path. - The hardened production runtime requires macOS or Linux, Python 3.10+,\n`config.json`\n\n, the configured master resume,`candidate_fit_preflight.py`\n\n, and the local deterministic audit helpers. Windows preflight fails closed with`POSIX_RUNTIME_REQUIRED`\n\n. No external model API key is required for the role agents. - Codex model selection is unpinned by default. Only when the user explicitly\nrequests it may the runtime receive\n`--model <exact-model>`\n\nand/or`--reasoning-effort ultra`\n\n; it has no profile option. These Codex-only flags must not be passed to Claude.\n\n- Before any role/team invocation or output creation, the coordinator runs\n`candidate_fit_preflight.py`\n\nagainst the exact JD and only the configured master resume—never a prior tailored resume. The canonical`candidate-fit-policy-v2`\n\nreport must clear the fit bar (default 50) with trustworthy extraction, zero hard knockouts,`passed: true`\n\n, and no codes. Scores below the bar (including 60–69) or hard knockouts return`REJECTED:CANDIDATE_FIT`\n\n; unavailable, malformed, stale, or mismatched reports return`FAILED:CANDIDATE_FIT_PREFLIGHT`\n\n. No automatic or manual workflow bypass exists. - The coordinator sends the Researcher only the job description.\n- The coordinator sends the Writer only the master resume and validated research artifact.\n- The read-only Auditor checks the exact Writer draft and cannot edit it.\n- The Editor is invoked only for named failures, with at most two corrections and a fresh audit after each edit.\n- Draft-stage publication requires the final Auditor PASS plus independent evidence, human-voice, and canonical-integrity votes on the same draft digest.\n\nMalformed, stale, replayed, ambiguous, timed-out, unavailable, side-effecting,\nor partially published runs fail closed. A runtime `resume-team-result/v2`\n\n`PUBLISHED`\n\nresult means only\nthat an authorized, digest-verified `resume.md`\n\ndraft was atomically written and\nread back. It does not mean DOCX generation, tracker update, cleanup, or package\ncompletion. `/resume-builder:resume`\n\nand `/resume-builder:tailor-resume`\n\nmust\ncomplete their ordered DOCX, tracker, artifact-verification, cleanup, and report\ngates before claiming package success; a score cannot override an authenticity\ngate.\n\nEvery `PUBLISHED`\n\nresult includes the independently reproducible\n`candidate_fit_report`\n\nand `candidate_fit_report_digest`\n\n, plus an inline\n`resume-team-final-receipt/v2`\n\n`authorization_receipt`\n\n, its canonical\n`authorization_receipt_digest`\n\n, and a durable `authorization_receipt_path`\n\n.\nThe sidecar conforms to `schemas/resume-team-final-receipt.schema.json`\n\n.\nDownstream finalization resolves the path against the output directory when\nrelative, requires its resolved parent to be that directory, reads only a regular\nnon-symlink JSON sidecar, and matches its canonical digest, run/case IDs, exact\npassing candidate-fit report/digest, and draft and verified-target digests against\nthe result, configured master, exact JD, and independently hashed `resume.md`\n\n.\nIt also recomputes the master `source_digest`\n\nfrom `config.json`\n\n, recomputes\n`job_description_digest`\n\nfrom the fixed sibling `job_description.txt`\n\n, and requires\na SHA-256 Researcher artifact plus distinct same-host native Researcher/Auditor IDs.\nThe receipt must also carry a same-draft PASS `auditor_attestation`\n\nand the complete\npassing `authorization_report`\n\n: no codes, exactly three ordered named PASS votes on\nthe same draft with distinct IDs, `canonical_digest(report) == authorization_digest`\n\n, and an identical ordered `vote_invocation_ids`\n\nlist. The\nsame check is repeated immediately before DOCX generation. Cleanup preserves the\nreceipt as durable audit evidence.\n\nFinalization is code-bound: callers retain the captured runtime result, invoke\n`final_receipt_verifier.py`\n\nwith its exact receipt path, digest, and config, and use only\n`create_resume_from_md_authorized`\n\n, `create_cover_letter_from_md_authorized`\n\n, and\n`add_application_authorized`\n\n. Each wrapper revalidates authorization at the\nside-effect boundary; tracker success requires a literal `True`\n\nreturn.\n\nThe constructive-provenance experiment established that a self-consistent\nmodel-supplied evidence ledger is not a trust root. Such a ledger is accepted only\nwhen its digest is independently attested. Production therefore anchors every\nchanged line directly to coordinator-attested, same-role master-resume spans and\napplies the closed lexical verifier. `constructive_provenance.py`\n\nis a conditional\nchecker and test artifact, not an alternative publication path.\n\nClaude role definitions and the native runtime use an explicit zero-tool allowlist, so they cannot actively inspect workspace files; Claude Code may still supply its normal project startup instructions and basic environment context. Codex custom agents use a read-only sandbox, which prevents writes but is not a filesystem-read isolation boundary. In both cases, scoped payloads describe coordinator data flow rather than every byte of host-provided context. Codex currently has no documented per-custom-agent built-in-tool denylist, so manual Codex role instructions prohibit unrelated reads and must not be represented as capability isolation.\n\nThe `/writing-coach`\n\ncommand applies human-voice and impact rules to every bullet point. Core rules include:\n\n**Plain Verb Start**— Use direct verbs such as Led, Built, Wrote, Cut, Reviewed, or Directed; AI-cliché openers are banned** Quantified Impact**— 40%+ of bullets must contain metrics (%, $, numbers)** So-What Test**— Every bullet answers \"why does this matter?\"** Jargon Calibration**— Match terminology level to the target role** Tense Consistency**— Past tense for past roles, present for current** Parallel Structure**— Consistent grammatical patterns within sections** Length Optimization**— 1-2 lines per bullet, no walls of text** Keyword Integration**— Natural placement, never forced** Achievement vs. Duty**— Frame responsibilities as accomplishments** Readability**— Flesch-Kincaid Grade 10-12 target\n\nContributions are welcome! Some ideas:\n\n**New domain profiles**— add keyword databases for law, marketing, academia, etc.** Additional job boards**— integrate Indeed, LinkedIn, or regional boards** Additional ATS parsers**— test against more ATS systems (Taleo, iCIMS, Greenhouse)** Resume templates**— add more DOCX template styles** Internationalization**— support for non-English resumes and job markets\n\n```\ngit checkout -b feature/your-feature\n# ... make changes ...\ngit commit -m \"Add your feature\"\ngit push origin feature/your-feature\n```\n\nMIT License — see the [LICENSE](/jananthan30/Resume-Builder/blob/master/LICENSE) file for details.\n\n- Built with\n[Claude Code](https://docs.anthropic.com/en/docs/claude-code)by[Anthropic](https://www.anthropic.com/) - ATS scoring research based on real-world Applicant Tracking System behavior\n- HR scoring model informed by eye-tracking research on recruiter behavior\n- Domain keyword databases curated from thousands of real job descriptions\n- Job search powered by\n[Adzuna](https://www.adzuna.com/)and[Remotive](https://remotive.com/)\n\n**If this project helps you land interviews, give it a star ⭐**", "url": "https://wpnews.pro/news/open-source-resume-builder-that-refuses-to-lie-for-you", "canonical_source": "https://github.com/jananthan30/Resume-Builder", "published_at": "2026-08-11 17:07:16+00:00", "updated_at": "2026-08-11 17:12:22.654972+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools"], "entities": ["ResumeHQ", "Claude Code", "Codex", "claude.ai", "Anthropic", "Jobscan", "Rezi", "Teal"], "alternates": {"html": "https://wpnews.pro/news/open-source-resume-builder-that-refuses-to-lie-for-you", "markdown": "https://wpnews.pro/news/open-source-resume-builder-that-refuses-to-lie-for-you.md", "text": "https://wpnews.pro/news/open-source-resume-builder-that-refuses-to-lie-for-you.txt", "jsonld": "https://wpnews.pro/news/open-source-resume-builder-that-refuses-to-lie-for-you.jsonld"}}