CommunityCoding & Developmentgithub.com

tobby168/resume-pipeline

Use when the user sends a job posting link (or pasted JD text) with little or no instruction — a bare URL, "tailor a resume for this", "is this one worth applying to". Builds a one-page resume from the module library, scores it with the blind 3-gate panel, and creates the application record. Never applies, never commits.

What is resume-pipeline?

resume-pipeline is a Claude Code agent skill that use when the user sends a job posting link (or pasted JD text) with little or no instruction — a bare URL, "tailor a resume for this", "is this one worth applying to". Builds a one-page resume from the module library, scores it with the blind 3-gate panel, and creates the application record. Never applies, never commits.

Works with~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/tobby168/resume-pipeline/tree/HEAD/.claude/skills/build-and-score-resume

Installed? Explore more Coding & Development skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

Build & score a resume from a job link

A bare job link is a complete instruction. Do the whole pipeline without asking. Stop at "built + scored + recorded" — applying is the user's action.

Steps

  1. Dedupe. Run python -m resume_pipeline.tracker report data/applications and check whether this company/team is already there. Say so up front; keep going anyway.
  2. Extract the JD — stop at the first method that returns the full text:
    1. the ATS's public JSON endpoint (Greenhouse / Ashby / Lever boards expose one),
    2. a structured web fetch ("list every responsibility and requirement, one per line"),
    3. a browser, for JS-rendered career sites. If all fail, ask the user to paste it. Never invent JD content.
  3. Write the record data/applications/<slug>.md from examples/applications/_TEMPLATE.md. New record = one found event only (not applied; the user applies). One file = one requisition.
  4. Write the target data/targets/<slug>.yaml:
    • choose module ids from data/modules.yaml, ordered for this JD; no resume text in a target
    • set output: (a missing output: silently builds resume.docx)
    • a JD keyword with no real bullet behind it is a gap: write it in the header comment, never as a skills-line keyword. Mark each gap inherent (no such experience -> interview narrative) or fixable (real experience, wrong wording).
    • fill the page; if it spills to page 2, trim project_bullets first. Do not edit config/layout.yaml — it is shared by every resume.
  5. Build + verify one page
    python -m resume_pipeline.build_resume data/targets/<slug>.yaml --modules data/modules.yaml --out /tmp/resume_<slug>.docx
    soffice --headless --convert-to pdf --outdir /tmp /tmp/resume_<slug>.docx   # then count pages
    
  6. Score with the scoring-resumes skill. A resume is not done until the scorecard is in the record.
  7. Validate the record: python -m resume_pipeline.tracker validate data/applications.
  8. Report: verdict + three gate scores -> which JD asks are covered -> gaps (inherent/fixable) -> positioning -> non-resume gates (location, visa, on-site days, clearance — the application form asks these separately and they are not resume edits) -> one-line recommendation.

Rules

  • Never fabricate experience, a date, or a JD. Add a bullet only for real experience the user confirms.
  • A low score is information, not a veto: the user decides whether to apply.
  • On a full page, "add a bullet to patch a flagged gap" must be A/B-scored — patches often score worse.
  • Several links at once: extract all JDs first, then run steps 3-8 one job at a time; say when one resume can cover two near-identical roles instead of building a duplicate.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Related Skills