CometScout
Open-source job search agent · runs on your own server

Every evening, two roles worth your time, with the application ready.

CometScout reads the job boards and alerts you already get, judges each posting against your profile, and picks the two best open roles of the day. For each one it drafts a CV from text you approved, a cover letter when the form asks for one, and answers to the form's questions. It uses the Claude or ChatGPT subscription you already have.

Grew out of its author's own job-search pipeline, in daily use since July 2026. Testers welcome.
The CometScout Today screen: the day's picks on the left, the fit verdict with reasons in the middle, the application pack with checks, form answers and the tailored CV on the right

The Today screen with the fictional example profile: the picks, the reasoning behind each one, and its application pack.

What happens every evening

One run on a timer, on your server. By the time you sit down, the decisions are made and the paperwork is drafted. What stays yours is the judgement call and the send button.

Collect

Greenhouse, Ashby and Lever boards of your target companies, RealtimeJobs, LinkedIn and hh.ru alerts from Gmail, Hirify, career-ops, and any tool that drops a file into a folder.

Gate

Hard rules before any model call: language, work permit and citizenship, on-site countries, remote scope, sponsorship refusals, excluded companies and industries. A missing field never rejects a job; it is flagged.

Decode

Each job is judged against your profile: strong fit, investable stretch, long shot or weak fit, with the reasons, the gaps, the next step, and your history with that company.

Pick

The best two open roles of the last two weeks, at different companies. Dead links, and roles you are already talking to, are skipped.

Pack

A CV assembled only from lines you approved, form answers in your voice, a cover letter when the form asks, and a list of what to check before sending.

And afterwards: with Gmail connected, answers to your applications (received, rejection, interview, test task, offer) are recognised and recorded, so a closed role never comes back as a pick.

How it is built

An agent that writes job applications has one hard requirement: it must never put a false claim in front of a recruiter. Most of the design follows from that.

The model chooses, the code checks

The CV comes from a vetted library: the model selects and orders lines, and may write only the tagline and summary. Your own fact rules and lint rules catch every claim you have corrected once, and a CV that still breaks one is not sent.

Proven on real data first

Before replacing the pipeline it grew out of, it was checked on that pipeline's real data: identical tracker rows, 14 days of gate decisions replayed with no unexplained difference, and outcome tracking agreeing on 28 of 30 email events.

Every product decision written down

Each decision is logged with the options that were considered and what would reopen it, from the dedupe rule to the update policy.

Built with coding agents, reviewed like a team

Work is briefed as self-contained tasks to Claude Code sessions; every pull request gets an independent review against real data and the full test suite on Linux and Windows before it is merged.

The application pack on a phone: checks before sending, lint notes, and draft form answers with copy buttons, plus Applied, Skip, Later and Open job link buttons

On the phone: check the pack, copy an answer, mark it applied.

In numbers

2roles a day, at most
387postings judged by the pipeline since July
7kinds of sources
437automated tests
95/95tracker rows identical to the original pipeline

Where it is going

The goal: nobody should need a terminal or an AI coding session after the first setup.

Run it yourself

A Debian or Ubuntu server, Node.js 20, and a Claude or ChatGPT subscription. Your data stays on your server; only the model calls leave it.

# on the server, as your normal user
git clone https://github.com/Dreamkeeper/cometscout.git && cd cometscout
bash deploy/install.sh
# then open the folder in Claude Code or Codex and say "set me up"