AI-powered job search platform. Self-hosted, open-source, privacy-first.
Project description
Kestrel
Stop spray-and-praying. Start running your job search like a system.
Kestrel scrapes job boards, scores every posting against your profile, and tracks your pipeline — all on your machine.
Pipeline — drag applications across stages
Discovery — AI-scored job matches
What it does
You tell Kestrel what you're looking for. It does the rest.
- Scrapes job boards — Indeed, LinkedIn, Glassdoor, Arbeitsagentur. Runs daily. You wake up to new matches.
- Scores every posting — AI reads the job, compares it to your profile, and gives you a fit score (0-10) and a desire score (0-10). Two numbers, because "can you do it?" and "do you want it?" are different questions.
- Tracks your pipeline — Kanban board. Drag jobs between stages. See where everything stands.
- Preps you for interviews — Company research, mock questions, a STAR story library you build over time.
- Runs on your machine — Your data stays on your disk. No account, no cloud, no tracking. Unless you choose otherwise.
Demo Mode works offline, for free, right now. Real AI scoring costs $1-5/month with the built-in optimizations (prompt caching, model routing, response caching — 8 techniques stacked).
Why Kestrel
Job search tools fall into two camps. The SaaS apps (Huntr, Teal, Simplify) want $30/month and your data on their servers. The open-source tools are either abandoned or developer-only CLI scripts.
Kestrel is neither. It's a full app — web dashboard, REST API, mobile app (in progress) — that runs locally. You own the data, pick your own AI provider (or use none), and pay nothing for the software itself.
Install
Pick one. They all give you the same app.
# One command (detects OS, installs, opens browser)
curl -fsSL https://raw.githubusercontent.com/pleasedodisturb/kestrel/main/install.sh | bash
# Or with pip
pip install kestrel-app && kestrel start
# Or with Node.js
npx kestrel-app
# Or with Homebrew
brew install pleasedodisturb/kestrel/kestrel && kestrel start
# Or with Docker (nothing touches your system)
git clone https://github.com/pleasedodisturb/kestrel.git && cd kestrel && bash setup.sh
Zero install option: Open in GitHub Codespaces — your own instance in 2 minutes, free with a GitHub account.
Need hand-holding? The step-by-step guide assumes you've never used a terminal.
Add AI (optional)
Kestrel works without AI. Demo Mode gives you the full UI with simulated scores — enough to explore everything and decide if it's for you.
When you're ready for real scoring: go to Settings, click "Connect to OpenRouter," log in. Done. Free-tier models (Llama 3.3 70B) score jobs at zero cost.
Want more control? Kestrel supports 6 providers — from free local models to the best commercial APIs. You can even run multiple at once.
| Provider | Cost | Privacy | Good for |
|---|---|---|---|
| Demo Mode | Free | Perfect | Trying it out |
| OpenRouter | $0-10/mo | Good | Most people — one account, 300+ models |
| Anthropic | $1-10/mo | Excellent (7-day retention) | Best quality, prompt caching |
| Together AI | $1-5/mo | Good (ZDR available) | Bulk scoring on a budget |
| Ollama | Free | Perfect | Nothing leaves your machine |
| OpenAI | $1-10/mo | Good | GPT models direct |
Full guide with the electricity analogy → · Technical comparison + API keys → · Privacy deep dive →
Docs
| Quickstart | First-time setup, zero assumptions |
| FAQ | Common questions answered |
| Help | Something broke? Start here |
| How Scoring Works | What "fit score" means, how Kestrel decides |
| How Testing Works | 2,800+ automated checks explained |
| Comparison | Kestrel vs Huntr, Teal, Simplify, and others |
| All docs → | Full index of 40+ documents |
Contributing
Contributing guide · Deployment · API Reference
License
AGPL-3.0 — free and open source. If you modify Kestrel and offer it as a service, share your changes under the same license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kestrel_app-0.12.0.tar.gz.
File metadata
- Download URL: kestrel_app-0.12.0.tar.gz
- Upload date:
- Size: 1.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5fd1cb5991712f2edbdb9604085283fe108bcb09aeb263a1a731fa4162694f71
|
|
| MD5 |
ca8d91bf5349ae7cf57a7c5fd833b0f2
|
|
| BLAKE2b-256 |
a49df21727cfb3cb82584e66cdd759f35c6cacd0d0f387177023af0873d961aa
|
Provenance
The following attestation bundles were made for kestrel_app-0.12.0.tar.gz:
Publisher:
publish.yml on pleasedodisturb/kestrel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kestrel_app-0.12.0.tar.gz -
Subject digest:
5fd1cb5991712f2edbdb9604085283fe108bcb09aeb263a1a731fa4162694f71 - Sigstore transparency entry: 1369932191
- Sigstore integration time:
-
Permalink:
pleasedodisturb/kestrel@f557136174792b929689ce01ce951c818171553e -
Branch / Tag:
refs/tags/v0.12.0 - Owner: https://github.com/pleasedodisturb
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f557136174792b929689ce01ce951c818171553e -
Trigger Event:
push
-
Statement type:
File details
Details for the file kestrel_app-0.12.0-py3-none-any.whl.
File metadata
- Download URL: kestrel_app-0.12.0-py3-none-any.whl
- Upload date:
- Size: 1.0 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b307e5b67bc0100c9824836fa79d9b473553f0520a7217071472ae9772bfe148
|
|
| MD5 |
68db061c5b97dc9ea087f4da4a6a0e86
|
|
| BLAKE2b-256 |
8edbae510cb5bb3405810c3da536c93f3899c33f14091e2e56484d0814b1e4c4
|
Provenance
The following attestation bundles were made for kestrel_app-0.12.0-py3-none-any.whl:
Publisher:
publish.yml on pleasedodisturb/kestrel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kestrel_app-0.12.0-py3-none-any.whl -
Subject digest:
b307e5b67bc0100c9824836fa79d9b473553f0520a7217071472ae9772bfe148 - Sigstore transparency entry: 1369932312
- Sigstore integration time:
-
Permalink:
pleasedodisturb/kestrel@f557136174792b929689ce01ce951c818171553e -
Branch / Tag:
refs/tags/v0.12.0 - Owner: https://github.com/pleasedodisturb
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f557136174792b929689ce01ce951c818171553e -
Trigger Event:
push
-
Statement type: