CLI tool
saeedkolivand/ai-job-hunter-app avatar
saeedkolivand/ai-job-hunter-app

ai-job-hunter-app sends two things without asking, and one of them is off in Settings

Local-first AI desktop assistant that scrapes job boards, matches roles to your resume, and auto-generates resumes & cover letters. Offline with Ollama, BYO API key, or route it through an AI CLI agent (Claude Code, Codex, Gemini CLI).

62 stars8 forksRustApache-2.0

At a glance

What is it?
A Tauri desktop app that scrapes 24 job boards, matches postings to your resume and generates tailored documents against a provider you choose, keeping resumes in local SQLite and credentials in the OS keychain. The privacy story is specific rather than absolute: two outbound calls happen automatically.
Who is it for?
Use ai-job-hunter-app if you want resume generation and job tracking to run against a model you control, since Ollama keeps the whole flow offline and no key is needed to start. Do not read the privacy claims as an offline guarantee, because the update check and crash reporting are automatic and the app does talk to job boards, a location autocomplete service and any logo enrichment you enable.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Rust, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • saeedkolivand/ai-job-hunter-app62 ★ · +11
Star history
Repository2026-08-212026-10-22
saeedkolivand/ai-job-hunter-app5162

11 Stars in the last 62 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

Two outbound calls happen without you asking

The privacy claim here is unusually specific, and it comes with an inventory rather than a slogan. Resumes, generated documents, applications and tracked job data live in a local SQLite database, credentials live in the OS keychain, and there is no app-operated backend collecting any of it. Two things still happen automatically. The app checks for updates against GitHub ten seconds after launch and then every four hours, transmitting your app version and operating system and architecture. It also sends crash reports to Sentry when the app breaks, carrying the error and stack trace, the OS and the app version. The update check cannot be switched off in the documentation; the crash report can, it is on by default, you are asked about it during setup, and it is redacted of paths, links, hosts, e-mail addresses and credentials before sending. Neither payload includes your documents or job data.

freehire is the only aggregator that needs no key, and it runs last

The job scraping layer is tiered by what you have to supply, and the ordering is documented. An Adzuna and JSearch aggregator covers walled boards that do not expose their own feeds, naming Indeed, Glassdoor and Xing among them, and company-scoped applicant tracking boards such as Greenhouse and Lever are handled directly. Below those sit the Adzuna, JSearch over RapidAPI, Jooble and Apify tiers, which each need credentials you supply. The freehire aggregator is the odd one out: it is the one that needs no key, and it is tried last. That ordering is worth understanding before you conclude the app is broken, because an empty result set on a board you expect to be covered may mean a key is missing rather than that nothing is listed. Twenty-four boards are covered in total across these paths.

Twelve templates split into an ATS-safe tier and a design tier

The template set is organised by what the template optimises for, and the division is the point rather than the count. Seven sit in the ATS-Safe tier: Classic, Swiss Minimal, Academic, Meridian, Throughline, Cadence and Regent. Five sit in the Design tier: Atelier, Portrait, Lebenslauf, Aria and Saffron. Generation streams, so you watch the document appear, and export covers DOCX, PDF and TXT. The tier names signal a real trade-off in applicant tracking systems, where a layout that reads well to a human can parse badly to a parser, so the ATS-safe tier exists as the conservative default and the Design tier as the deliberate departure. The names themselves are worth scanning, since Lebenslauf and Aria are German and French in origin respectively, which tells you something about the audience the tier was drawn for.

The provider choice includes CLI agents, not just API keys

Four ways of reaching a model are offered, and they are genuinely different in what they cost you in privacy. Running fully offline with Ollama keeps generation on the machine, and the quick start pulls a local model with a single command, marked optional. Bringing your own OpenAI, Anthropic or Gemini key is the second route, configured later in Settings under AI rather than at install time. The third is routing through an AI command line agent such as Claude Code, Codex or Gemini CLI, which means the work leaves the app into a tool you already trust. The fourth is not a provider at all: no key is needed to start at all. One feature spans all of them, a universal thinking view that shows the model reasoning stream live regardless of which provider is behind it, rather than only for the cloud APIs. Running from source is four commands:

bash
git clone https://github.com/saeedkolivand/ai-job-hunter-app.git
cd ai-job-hunter-app && pnpm install
ollama pull mistral   # optional: a local model for the offline Ollama provider
pnpm dev              # launches the Tauri app with hot reload

The manifest pins the package manager and the runtime floor: pnpm 11.10.0 is declared as the package manager, with Node 20.11.0 or newer and pnpm 9.0.0 or newer as the stated engines.

Optional enrichment is opt-in, and one of it defaults to off

Beyond scraping and generation there is a layer of enrichment, and every item in it is described as something you turn on rather than something that runs. Location autocomplete goes through Photon and has an offline fallback, so the field degrades rather than breaking when the network does. Company logo enrichment through Clearbit is listed as opt-in and off by default, which is the correct default for a service that maps your employer list to a third party. Web search is only used if you explicitly enable it, either your own provider's search or Exa if you add a key. Email-confirmation watching over IMAP is opt-in, takes a credential you supply, keeps it in the OS keychain, and email content never leaves the device. Profile import from GitHub or LinkedIn is likewise optional. Together these define the difference between what the app does for you and what it does about you.

Generated API docs fail the build when they drift

The developer scripts reveal a monorepo that treats generated artefacts as checked-in contracts. There is a generate script for API documentation and a matching check script that regenerates and then fails on any difference against the committed file, which is the git diff in exit-code form. The same paired pattern repeats for the IPC definitions, for the agent catalogue and for prompts, each with a generate and a generate-check variant. A geonames index and a set of workflows are generated the same way. The consequence for a contributor is that running the generator is not optional housekeeping: a pull request that changes a signature without regenerating fails the same way a failing test does. The workspace uses turbo for task running, vitest for tests, and eslint with a strict zero-warning mode alongside prettier.

The repository root carries seven agent configuration files

Look at the top level of the repository and the tooling tells you who is expected to work in it. There is an aider configuration directory and file, a Claude directory, a cline rules file, a Codex rules file, a Roo rules file, an example model context protocol configuration, and two agent instruction documents alongside the human-facing contributing guide. That is seven or more assistant-specific configuration surfaces in one root, which tells you the project expects coding agents to be a normal way of contributing rather than an occasional experiment. The rest of the root is conventional and thorough: a change log, a security policy, husky hooks, a lint-staged configuration wired to commitlint, a gitleaks configuration for secret scanning, a typos configuration, a knip configuration for unused code, and a lighthouse configuration for the landing page. The same repository also builds a browser extension for Chrome and Firefox alongside the desktop app, with a separate build script per browser, and that extension is explicitly excluded from every telemetry path the desktop app uses.

Editorial conclusion

Use ai-job-hunter-app if you want resume generation and job tracking to run against a model you control, since Ollama keeps the whole flow offline and no key is needed to start. Do not read the privacy claims as an offline guarantee, because the update check and crash reporting are automatic and the app does talk to job boards, a location autocomplete service and any logo enrichment you enable. Before you connect a cloud key, read the section on automatic egress so you know exactly what leaves without a prompt, then disable crash reporting in Settings if you want none. And if you build from source, note the Node floor is 20.11.0 or newer with pnpm 9 or newer, and that the generated API documentation is checked in CI.

Frequently asked questions

How do I use AI for job hunting with ai-job-hunter-app?

It scrapes 24 job boards, semantically matches postings to your resume, then generates tailored cover letters and resumes and drafts grounded answers to application questions, tracking what you apply to. You choose the model provider.

Is there a free AI job application from ai-job-hunter-app?

No API key is required to start. You can run fully offline with Ollama by pulling a local model, or add an OpenAI, Anthropic or Gemini key later in Settings under AI. One scraping aggregator, freehire, also needs no key.

Does ai-job-hunter-app send my resume or credentials anywhere?

Resumes, applications and tracked job data stay in a local SQLite database and credentials stay in the OS keychain. Your AI provider receives the resume and job text you ask it to generate from, and email content never leaves the device.

What does ai-job-hunter-app send automatically?

Two things without being asked: an update check against GitHub ten seconds after launch and then every four hours, carrying your app version and OS and architecture, and crash reports to Sentry when the app breaks, which you can switch off in Settings under Privacy.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/saeedkolivand-ai-job-hunter-app.svg)](https://hysenlabs.com/projects/saeedkolivand-ai-job-hunter-app)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/saeedkolivand-ai-job-hunter-app.svg)](https://hysenlabs.com/projects/saeedkolivand-ai-job-hunter-app)