ferret.

A job search that keeps its own evidence.

Ferret watches the organizations you care about, pulls their real postings, scores them against what you actually want next, researches employers with citations, and drafts tailored résumés and cover letters into Google Docs.

It is one person’s tool, built in the open. You are welcome to read it, run it, or take the parts you want.

Read the sourceThis instance is invite-only.

What happens to a posting

  1. ingestATS APIs and searches, deduplicated and reconciled
  2. prefilterrules, free, with a readable verdict on every refusal
  3. scorethe survivors only, batched against a cached profile
  4. dossierlive research, cited, refusing to write without sources
  5. draftrésumé and letter, every claim traced to something you wrote

Why it is built this way

A job board is proven, never guessed

Adding an organization crawls its careers pages, extracts any applicant-tracking token, and then calls that board's API to confirm it returns postings. If the page renders its board in the browser - which is common - likely tokens are tried instead, and again only a response containing real postings is accepted. A source that cannot be demonstrated is not connected.

Two stages, so the model reads almost nothing

A prefilter made of rules handles geography, compensation floor, title level, and topic - free, deterministic, and it records why it turned each posting down, so a rule that is wrong is visible rather than silent. Only what survives costs a model call. Compensation and location are parsed by rules and never by the model: a salary that drives a hard filter must not be invented, and one that cannot be parsed reads as "not stated".

A résumé bullet that cannot cite you is dropped

Bullets are rewritten from highlights you supplied, and each must carry the index of the one it came from. Any bullet whose index does not resolve is discarded before the document is assembled, as is any skill absent from your profile. Fabrication is prevented structurally rather than discouraged in a prompt, and everything dropped is reported back to you.

Research that admits what it could not find

Employer dossiers are built from pages actually fetched. Any citation that does not match one is removed, and the pass refuses to write at all if research retrieved nothing. What could not be established is listed as an open question instead of asserted - which is the failure mode that matters when the document exists to prepare you for a conversation.

Where it does not reach

Coverage is uneven and the mission-driven sector is the hard end of it. Startup-style boards are straightforward; a sample of twelve DC-area development and civic organizations found connectable boards for four. The rest run payroll suites with no public API or render their careers page in the browser. For those you can paste a careers URL or add a real jobs feed, and a command tells you which of a list of domains will work before you add any of them.

Running your own

Ferret is a Next.js application over Postgres. It needs an Anthropic API key for scoring and drafting, and a Google OAuth client if you want sign-in and Docs export; syncing job sources works without either. The README carries the startup instructions, and the infrastructure it is deployed on is in the repository too.

github.com/brodydittemore/ferret