Skip to content
Apache-2.0 · runs on your machine · no account

Stop rewriting. Start compounding.

Write down what you did, once. Maestro builds every tailored resume, cover letter and screening answer from that record. Scored by an engine that never guesses. Typeset locally into a real PDF. About a penny an application.

One real run: 49.2 to 70.8, every AI edit shown as a diff you can revert, and a typeset PDF at the end.

≈1¢

per application

Measured on real applications. Not guessed at.

83

MCP tools

Run the whole pipeline from Claude, Codex or ChatGPT desktop.

3

local containers

Bound to 127.0.0.1. No account, no cloud, no upload.

4,023

tests passing

Scoring determinism is enforced in CI, not claimed in a README.

The premise

Your effort should compound. Right now it evaporates.

You rebuild your resume for every role. You rewrite the cover letter from memory. You answer “tell us about a time you…” for the fourth time. Then the next posting arrives and you start from nothing.

Meanwhile the average opening draws around 240 applicants, and screens increasingly flag resumes that read like a machine wrote them. Volume stopped working. Depth is the only lever left, and depth is only affordable when last month's work is still sitting there.

Write it once. Reuse it forever.

Why you'd want this

You already know these feelings.

Each one is a specific, ordinary part of a job search that software should have fixed by now. Here's the pain, and here's what fixes it.
01

You hate that resume tailoring is a slot machine.

A score that never guesses.

Most checkers ask an LLM. One popular tool scored the same resume anywhere from 66 to 99 across a hundred runs. Maestro has no LLM in the scoring path at all, so the same resume and posting give you the same number and the same breakdown every time.

Deterministic ATS engine
02

Your folder is a graveyard of resume_v2_FINAL(3).docx.

Version history, not a pile of copies.

Every edit becomes a version: manual, chat, tailoring run, even a restore. Diff any two. Restore any one. Old variants get archived instead of deleted, so the bullet you wrote in March is still findable in September.

Resume versions
03

LaTeX looks great and is miserable to edit. Tailoring one, unthinkable.

LaTeX quality without LaTeX editing.

You edit content in a structured editor. A bullet is a bullet, not a .tex line you hand-patch. Layout stays the template's job, so changing a word can't break your formatting.

Structured editing
04

How many resume templates have you changed in your life?

One or two. Here it's a button.

In Word or raw .tex, a redesign means rebuilding the document, so nobody bothers. Here a template owns presentation and nothing else. The same content renders through any design without being touched.

Templates
05

You re-explain how you want to sound in every single prompt.

Say it once. It sticks.

Your persona holds who you are as a candidate: strengths, goals, working style, how your writing should read. Set it once and every generated document comes out in that voice. It shapes tone and emphasis, never facts.

Persona

What it costs

A tailored application costs about a penny.

We traced real applications end to end with Langfuse in August 2026, on the default model profile, priced at list. Your payloads will vary. Not by an order of magnitude.

≈1¢

per tailored application

Capture the posting, score it, close the gaps, tailor, render the PDF, and write the cover letter and screening answers. All of it.


My whole search so far has cost under $2 in tokens. Hosted tools charge $15–75 a month.

OperationTokens (in / out)Cost
JD extraction~3k / ~1.5k~¼¢
Gap enrichment~7k / ~3k~½¢
Tailoring pass~11k / ~0.6k~¼¢
Cover letter + screening answers~8k / ~0.9k~¼¢
Career KB consolidation, per resume (one-time)~7k / ~1.5k~⅓¢
Capture → tailored resume → full apply package≈1.3¢

Priced against GPT-5.6 Luna at $0.20/M input and $1.20/M output.

What makes it different

Three commitments, and everything else follows from them

These are the parts other tools in this category do not do — not because they are hard to copy, but because each one costs something a subscription product is unwilling to pay.

Scoring that can't drift

No LLM anywhere in the scoring path. Deterministic lexical layers plus a pinned embedding model running on your CPU. Same resume, same posting, same config, same number.


One popular LLM-judged checker scored the same resume 66–99 across a hundred runs.

Evidence, not invention

Resumes compose from approved points in your Career KB, word for word. Rewriting a bullet is a separate step that asks first. A keyword with no evidence behind it reaches your skills list and nowhere else.


Every edit is a version. Nothing is lost, nothing is one-way.

It leaves with you

Apache-2.0. No account, no subscription, no usage tier. You pay for the tokens you spend and nothing else. Your KB exports to one career.md you can read and diff.


About a penny an application, against $15–75 a month.

The loop

Five steps, and the fourth one is where the value is

Built for few, well-evidenced applications rather than volume — because depth per application is the only lever left when a single opening draws around 240 of them.

01

Feed the Career KB, once

Every resume variant you own. The old ones, the role-specific ones, the one that runs to three pages.

02

Build a base resume per track

One per track you actually target. Not one per job.

03

Capture the job, then pre-scan it

Paste the posting, or grab it with the extension from the board you're already reading.

04

Work the gaps

A gap is a requirement your resume doesn't evidence yet.

05

Render it, read it, track it

Cover letter, screening answers, and a real LaTeX or Typst PDF compiled on your machine.

Walk the whole loop, step by step.

How it works

Inside the studio

The parts you will actually live in

Everything below is in the shipped app — these are real captures, not mockups.

The record

A Career KB that resolves your history

Add your resume variants and Maestro performs entity resolution, deduplication, bullet clustering and profile synthesis. What comes out is one structured record of your work, projects and skills. Certifications, project write-ups and review notes belong in there too.

Approved points compose word for word into resumes and applications

Every point keeps provenance back to the document it came from

Seeding defers cleanly with no API key and retries on a later boot

Career KB onboarding: drop in your resumes, get a knowledge base

The measurement

Deterministic scoring, and a measured lift

Deterministic lexical layers plus a pinned embedding model for semantics. Soft matches need both a shared lexical anchor and embedding proximity, so “container orchestration” earns credit against Kubernetes without inventing a skill you don't have.

Same resume, posting and config version gives an identical score and breakdown

Base-to-tailored delta recorded per application, so you can see if tailoring did anything

Runs offline on CPU. Scoring never calls a model.

A job overview with the deterministic score breakdown and knock-out pre-scan

Choose your models

One key. Two profiles we measured.

We benchmarked the combinations on real postings with every call traced. The Fast tier turned out to decide almost everything: how much of a posting gets extracted, how honest your base score is, and most of the waiting. The Smart tier barely moved the result. So the choice comes down to which key you already have.

Thorough

default

about a penny

per application

Every tier set to

gpt-5.6-luna

The one key you need

OpenAI

JD requirements captured

The most complete extraction we measured

Capture + tailor feels like

~40 seconds

Hallucinated skills

none measured

Snappy

when speed wins

under 3¢

Gemini promo pricing doubles Jan 2027

Every tier set to

gemini-3.7-flash

The one key you need

Gemini

JD requirements captured

About ¾ of that, strongest on named tools

Capture + tailor feels like

~10 seconds

Hallucinated skills

none measured


Thorough ships as the default because honest scoring starts at extraction. A fast model that misses requirements inflates your fit score, in our tests by about nine points. You can mix tiers across providers, but it bought us nothing these two don't already give you.

How it compares

The rows a subscription product cannot fill in

No vibes, no vendor asterisks — every claim here is one you can check against the source in an afternoon.
Typical AI resume buildersCLI skill frameworksMaestro CS
ATS scoringLLM or black-box. Same input, different score per run.LLM judgmentDeterministic and LLM-free. Same input, same score.
Measured tailoring liftStatic score onlyNot scored as a liftBase-to-tailored delta, per application
See what the AI changedNo audit trailNoPer-hunk diff, revertible
Typeset outputHouse web templatesHTML to PDFReal LaTeX and Typst, bring your own
Career recordNone, per documentFlat markdown/YAML filesStructured, versioned, exports to one career.md
Agent accessNoCLI skill filesMCP server, 83 tools, on your machine
Auto-submits for youN/ANever (stated)Never. Consent ledger, enforced.
Cost$15–75/monthFree + tokensFree, Apache-2.0, plus ≈1¢ an application in tokens

Only checkable claims. Verify any row yourself. Columns describe the categories as of August 2026; tell us if one has gone stale.

Agent surfaces

The assistant you already use can drive all of it

Maestro ships an MCP server. Extract a posting, score it, walk the gaps, render the PDF, all without leaving Claude, the ChatGPT desktop app or the Codex CLI. Unlike SaaS-backed job-search servers, it runs on your machine against your database.
Claude pulling the whole pipeline over MCP and building its own view of it

One script, then one paste

bash
./scripts/setup-mcp.sh

Registers Claude Code for you. Prints ready-to-paste config for Claude Desktop and ChatGPT desktop / Codex CLI.

Six profiles keep the tool list relevant per chat — enable one at a time.

full
hunt
apply
explore
templates
career

No API key? Over MCP your assistant is the model, so tailoring and KB upkeep still work.

Agents, hunting and the consent ledger

Local-first isn't a marketing word here. It's the architecture.

Three containers on your machine, every port on 127.0.0.1. No account, no tenancy, no server holding your career history. One hard rule follows from that.
Read the honest version

Nothing is uploaded

Scoring, rendering, tracking and export run locally. The only outbound traffic goes to the one LLM provider you configure.

Your key stays yours

It lives in your .env or your local database and goes to exactly one place: the provider endpoint you set. The API never echoes a stored key back out; the settings endpoint reports only whether one is configured. A non-http(s) model endpoint is refused outright, because that URL decides where your key is sent.

No telemetry leaves your machine

The extension's one telemetry endpoint posts to your own backend on localhost. There is no collector at the other end, in this repo or anywhere else.

Your data is files you own

Resumes are JSON on your disk. Renders land in company-and-role folders. Your KB exports to one career.md with no model involved.

Get running

Four pieces, and only the first is required.

The rest attach whenever you want them.
bash
git clone https://github.com/seinun-ai/maestro-career-studio.git
cd maestro-career-studio
cp .env.example .env

# Recommended: open .env and paste an OPENAI_API_KEY (or GEMINI_API_KEY).
# The deterministic core runs without one. The AI lanes want one.

docker compose up -d --build
1

The stack

2

One API key · optional

3

MCP for your assistant · optional

4

The browser extension · optional

Full setup guide

Questions

The ones worth answering up front

Recommended, yes. The parts that make Maestro fastest day to day run on it: in-app tailoring, the extension's tailor-on-the-go and form filling, cover letters and screening answers, KB consolidation, chat. One key, OpenAI or Gemini, is a complete setup. Without one you still get the deterministic core, and if you drive it over MCP your assistant supplies the model.

About a penny per tailored application on the default profile, under 3¢ on the fast one. Measured with Langfuse on real postings at list prices. My whole search so far has cost under $2 in tokens. The software is Apache-2.0: no account, no subscription, no tier.

No. Three containers on your machine, bound to 127.0.0.1. The only outbound traffic goes to whichever LLM provider you configure, and your key goes to exactly that endpoint. It lives in your .env or your local database, and the API never echoes it back out.

You can point it at any OpenAI-compatible endpoint, including Ollama, LM Studio and vLLM. We won't claim it works, because we haven't validated a local model end to end. Long tailoring prompts, strict JSON and streaming tool calls are where small models struggle. The deterministic core never calls a model at all, so that half is genuinely offline today.

It's our score: deterministic, versioned, reproducible. It doesn't predict what an employer's ATS shows them, and no consumer tool can. Use it to compare your own drafts and to catch parsing and coverage problems. Chasing 100 gets you a keyword-stuffed resume that modern screens flag.

It carries an application to the point of submission and stops. Filling and submitting happen only inside a live agent session you're running, with consent recorded one turn before the click and a daily cap you set. Nothing is submitted from the web app, and a submit click that can't be verified ends there rather than being retried.

Yes, that's the point of the template layer. Start from a bundled LaTeX or Typst design, adapt one you found, or write your own in the editor. Validation compiles a sample PDF and runs a parse gate, so a design that would break an ATS parser never ships.

English resumes and job descriptions, with full support for accented Latin characters (Zürich, José, Nestlé, São Paulo). Non-Latin scripts are refused at ingest rather than scored misleadingly at zero coverage.

Early, and the repo says so. The fresh-clone compose boot especially. KNOWN_ISSUES.md lists what's solid, what's rough and what's a deliberate limitation: the tracker doesn't paginate server-side, scores aren't re-derived when a base resume changes, and autofill isn't first-try-clean on every ATS. If something breaks, a clear bug report is the most useful thing you can send.

It's early. I'd rather hear about it.

I built this because I needed it, and I use it every day. It also has the rough edges of software with one user, especially that first boot from a fresh clone. If something breaks, tell me. A clear bug report is a contribution and right now it's the most useful kind. Pull requests welcome too.

Ajey Dhayashanker Loganathan

Career tooling should be infrastructure, not a rental.

Clone it, run it, keep everything it produces. Nothing here was built to make leaving hard.

Apache-2.0 · no account · no subscription · your data stays on your disk