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
MCP clients need an absolute path to the server binary, and GUI apps don't inherit your shell PATH. The script handles that: it creates the host venv, reads your backend port out of .env, and registers the server with Claude Code directly.
./scripts/setup-mcp.shClaude Code · Registered automatically
Claude Desktop · Prints a block for claude_desktop_config.json
ChatGPT desktop / Codex CLI · Prints a block for ~/.codex/config.toml
Claude Desktop and the ChatGPT desktop app / Codex CLI get a ready-to-paste block instead, every path already filled in. Those two you paste yourself, because both config files are shared with your other MCP servers and the script won't edit them behind your back.
Add --profile hunt for a scoped profile, or --print-only to change nothing and just see the config. Restart Claude Desktop with Cmd+Q after pasting. Closing the window isn't enough.
Six profiles — enable one at a time
All 83 tools
Find, capture, triage, propose
Tailor, render, package
Analytics and market questions
Author and validate designs
Career KB reads and writes
full alongside a scoped profile registers each shared tool twice — pick one.
Or just ask the assistant to do it
Agents that can edit files and run commands are perfectly capable of wiring this up themselves. Run the script with --print-only, hand the output to Claude Code or the Codex CLI, and ask it to add the server to your config. It knows where those files live and it can merge into them without clobbering your other MCP servers.
Run ./scripts/setup-mcp.sh --print-only, then add the maestro-career-studio server to my MCP config. Merge it in — don't overwrite the servers already there.Read the diff before you accept it. It is editing a config file that other tools depend on.
No key required
No API key? Your assistant is the model.
Over MCP, Claude or Codex extracts the posting and authors the tailoring edits, and the server applies them through the same honesty gates. The whole capture, score, tailor, render arc plus Career KB and resume upkeep, with no in-house LLM calls at all. If that's how you work anyway, it's a complete setup on its own.
Hunting
Hunt with the agent you already use
get_job_search_brief hands your agent your preferences, your work-authorization answers word for word, and the guardrails you configured. A Claude or Codex session then finds postings on whatever boards it can read, captures them, scores them against your bases and hands back a ranked shortlist.

No board integration to get locked into. No scraper to break. The agent reads what you would have read.
The author's own daily prompts — a scheduled hunt and two apply-session variants, with the personal parts turned into placeholders — ship in docs/agent-prompts/ as starting points to adapt.
The consent ledger
The proposal ledger
A hunted job becomes a proposal in a staged lane: tailored, rendered and filled without interrupting you at every page. Then it stops. You triage proposals in bulk, and apply runs only touch the ones you accepted. Nothing is ever executed from the web app. Filling and submitting happen inside a live agent session holding a browser, and consent lives in that session, one turn before the click.
Consent is an append-only event, capped daily at a number you set
An agent can't self-certify. Marking a proposal submitted needs a receipt or your own attestation.
A submit click that can't be verified ends as submission_uncertain. Never retried, never re-clicked.
Be clear-eyed about what that consent event is: the agent writes it when it calls the tool, so it records that the agent said you agreed. It gives you attribution after the fact and a hard ceiling on volume; it is not a lock a prompt-injected agent cannot pick. The lane is built to be run while you watch it.
Risks
The risks, plainly
Letting an agent read job pages and drive a browser means three real exposures. The consent gate exists because they're real and unfixable.
Prompt injection
A job posting is untrusted text. Text inside one can try to instruct the agent reading it.
Unverified employers
A hunted posting isn't a vetted one, and an application carries your contact details and work history to whoever posted it.
Bot detection
Some employers filter applications that look automated, and we won't help you hide. No stealth automation, no CAPTCHA bypass, no headless submitting.
Use the lane on jobs you've looked at yourself. Everything it does is written down.
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