Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tailor

A local, AI-powered resume content engine. Tailor combines your rich personal profile with a target job posting and uses a locally running Ollama model (default gemma4:latest) to produce tailored resume content as JSON Resume data.

Tailor is a content engine, not a renderer. It decides what to say and how to word it for a specific job and emits structured JSON. A separate tool imports that JSON and handles layout / PDF.

What it does

  1. Generate tailored resume content from profile + job posting via your local model.
  2. Store your profile neatly as rich, human-editable YAML — paragraphs, many bullets, timelines, and multiple "position framings" per experience.
  3. Pull job postings from arbitrary sites (HTTP, with a headless-browser fallback for JS-rendered boards), and use the model to normalize the messy page into structured data.

Requirements

  • Python ≥ 3.10
  • Ollama running locally with a model installed (e.g. ollama pull gemma4)
  • Optional: Playwright for JS-heavy job boards (uv pip install playwright && playwright install chromium)

Install

cd ~/personal/prosperis/tailor
uv venv --python 3.10
uv pip install -e ".[dev]"        # add ",browser" for Playwright

Run the CLI with uv run tailor ... or activate the venv and use tailor.

Quick start

# 0. Check Ollama connectivity & model
uv run tailor doctor

# 1. Create your profile (or copy the bundled example to explore)
uv run tailor profile init
uv run tailor profile use-example      # optional: load the example profile
uv run tailor profile edit experiences # opens YAML in $EDITOR
uv run tailor profile validate

# 2. Pull a job posting (auto browser-fallback; or paste manually)
uv run tailor job fetch "https://boards.greenhouse.io/acme/jobs/123"
uv run tailor job add --file posting.txt     # manual fallback
uv run tailor job list
uv run tailor job show acme-payments-senior-backend-engineer

# 3. Generate tailored JSON Resume content
uv run tailor generate --job acme-payments-senior-backend-engineer
# -> data/output/<slug>.json  (+ .meta.json with selection trace)

How profile data is modeled

Each item is rich by design (never just title + one sentence):

Field Meaning
summary Free multiline narrative (paragraphs allowed)
bullets Unbounded list of detailed achievement points
timeline start / end (or per-position stints)
positions Multiple title framings of one role; the generator picks one
tags Keywords used for relevance matching

See data/profile/example/ for a complete worked example.

Architecture

CLI (typer):  tailor profile | job | generate | doctor
   ├── profile/   YAML store + Pydantic models (rich items)
   ├── jobs/      fetch (httpx → Playwright fallback) + Ollama extract → Job JSON
   └── generate/  two-step (select → word) → JSON Resume
            └── ollama/  shared httpx client (only layer that calls the model)

The generation pipeline is two-step: the model first selects and scores relevant profile items (cheap, reliable on long profiles), then words only those items toward the job — constrained by prompt to use only your stored facts.

Configuration

Edit config.toml:

[ollama]
url = "http://localhost:11434"
model = "gemma4:latest"
timeout = 300

Override the model per command with --model/-m.

Testing

uv run pytest        # Ollama is mocked; no model required

Design spec: docs/superpowers/specs/2026-06-15-tailor-design.md

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages