AI-powered automated job application system with a self-learning memory engine and native desktop UI.
101
stars
27
commits
Python
primary language
Aug 9, 2026
updated
AI-powered job application automation with a native desktop UI
English · हिन्दी · Deutsch · Français · Español · العربية · Nederlands · 日本語 · 한국어 · Português · Bahasa Melayu
Applying to jobs is tedious. You find a listing, click through to the application, fill in the same fields you filled in yesterday, answer the same screening questions, upload your resume again — repeat fifty times. LangHire automates the entire loop.
It uses AI browser agents to search LinkedIn, collect matching jobs, fill out applications, upload your resume, and submit — while a self-learning memory system remembers how each applicant tracking system (ATS) works so it gets faster and more accurate over time. Everything runs locally on your machine. No data leaves your computer except LLM API calls.
Requires an LLM API key (OpenAI, Anthropic, or AWS). Chromium is installed automatically on first launch. See Quick Start.
Developers -- See Development Setup to run from source.
The macOS release is signed and notarized by Apple. Just open the .dmg, drag LangHire to Applications, and double-click to launch. No extra steps needed.
The Windows installer is not code-signed. You may see a SmartScreen warning:
.exe installerAppImage:
chmod +x LangHire_1.0.0_amd64.AppImage
./LangHire_1.0.0_amd64.AppImage
Debian / Ubuntu:
# Install uv package manager (required for browser management)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Install the app
sudo dpkg -i LangHire_1.0.0_arm64.deb
[!TIP] If Chromium doesn't launch: Some Linux distributions (like Ubuntu 24.04+) have sandbox restrictions. Run this to manually install browsers and dependencies:
uvx playwright install --with-deps chromium
|
|
|
Click any screenshot to expand
LangHire runs a three-stage loop: Collect → Apply → Learn.
Collect -- An AI browser agent logs into LinkedIn, searches for jobs matching your target titles and locations, and saves each listing with its URL, company, title, and description.
Apply -- For each pending job, the agent opens the application (Easy Apply or external ATS), fills every field using your profile, uploads your resume, answers screening questions from its Q&A bank, and submits. Multiple workers can run in parallel.
Learn -- After each application, the system extracts procedural learnings: which buttons to click, how forms are structured, what fails and what works. These memories are stored per-ATS domain with confidence scores, so next time it encounters the same ATS, it already knows how to navigate it.
┌──────────────────────────────────────────────────┐
│ Tauri Desktop Shell (Rust) │
│ Lightweight native wrapper, ~10 MB │
└────────────────────┬─────────────────────────────┘
│ spawns sidecar
▼
┌──────────────────────────────────────────────────┐
│ React Frontend │ FastAPI Backend │
│ (TypeScript) │ (Python sidecar) │
│ │ │
│ - Dashboard │ - browser-use agents │
│ - Profile editor │ - Playwright browser │
│ - LLM settings │ - Memory system │
│ - Job browser │ - Multi-LLM factory │
│ - Apply controls │ - 20+ REST endpoints │
│ - Memory viewer │ │
│ ◄── HTTP localhost:8742 ──► │
└──────────────────────────────────────────────────┘
│
▼
SQLite + JSON (OS app data directory)
All data is stored locally:
| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/langhire/ |
| Windows | %APPDATA%/langhire/ |
| Linux | ~/.config/langhire/ |
| Tool | Version | Install |
|---|---|---|
| Node.js | 18+ | nodejs.org |
| Rust | 1.77+ | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh |
| Python | 3.13+ | python.org |
| uv | latest | curl -LsSf https://astral.sh/uv/install.sh | sh |
git clone https://github.com/jaimaann/LangHire.git
cd LangHire
npm install # Node dependencies
uv sync # Python dependencies
uv run python -m playwright install chromium # Browser engine
Two terminals:
# Terminal 1 -- Python backend
uv run python backend/main.py
# Terminal 2 -- Frontend dev server
npm run dev
Open http://localhost:1420, or run as a native desktop app instead:
# Terminal 2 (alternative) -- Native Tauri app
cargo tauri dev
The first
cargo tauri devcompiles the Rust shell (~2 min). Subsequent runs are fast.
cargo tauri build
Produces platform-specific installers in src-tauri/target/release/bundle/.
LangHire/
├── src/ # React frontend (TypeScript)
│ ├── pages/ # Dashboard, Profile, Jobs, Apply, Memory, Settings, LLMSettings, Logs
│ ├── components/ # UI primitives, SetupWizard, Sidebar, LoginCards
│ └── lib/ # API client, TypeScript types
│
├── backend/ # Python backend (FastAPI)
│ ├── main.py # Server with 20+ endpoints
│ ├── core/ # Config, LLM factory, shared utilities
│ └── memory/ # SQLite store, post-run extractors, metrics
│
├── src-tauri/ # Tauri native shell (Rust)
│ ├── src/lib.rs # App setup, sidecar launch
│ └── tauri.conf.json # Window config, permissions, bundling
│
├── cli/ # CLI automation scripts
│ ├── collect_jobs.py # Job collection
│ ├── apply_jobs.py # Job application (multi-worker)
│ ├── apply_jobs_tailored.py # Tailored resume variant
│ ├── dashboard.py # Terminal analytics dashboard
│ └── memory_cli.py # Memory management
│
└── scripts/ # Build helpers (macOS DMG, backend bundling)
The CLI scripts work standalone alongside the desktop app:
# Collect jobs from LinkedIn
uv run python cli/collect_jobs.py
# Apply to jobs (3 parallel workers)
uv run python cli/apply_jobs.py --workers 3
# Apply with per-job tailored resumes
uv run python cli/apply_jobs_tailored.py --workers 2
# Memory management
uv run python cli/memory_cli.py stats
uv run python cli/memory_cli.py domains
uv run python cli/memory_cli.py show linkedin.com
# Terminal performance dashboard
uv run python cli/dashboard.py
Contributions are welcome. See CONTRIBUTING.md for full guidelines.
git clone https://github.com/jaimaann/LangHire.git
cd LangHire
npm install && uv sync
uv run python backend/main.py # Terminal 1
npm run dev # Terminal 2
Areas where help is needed:
This tool automates job applications on LinkedIn and other platforms. Use it responsibly:
Built with Tauri, React, Python, and browser-use
Python
46.1%
TypeScript
44.5%
Astro
4.3%
MDX
2.3%
Shell
1.3%
AI-powered automated job application system with a self-learning memory engine and native desktop UI.
101
stars
27
commits
Python
primary language
Aug 9, 2026
updated
AI-powered job application automation with a native desktop UI
English · हिन्दी · Deutsch · Français · Español · العربية · Nederlands · 日本語 · 한국어 · Português · Bahasa Melayu
Applying to jobs is tedious. You find a listing, click through to the application, fill in the same fields you filled in yesterday, answer the same screening questions, upload your resume again — repeat fifty times. LangHire automates the entire loop.
It uses AI browser agents to search LinkedIn, collect matching jobs, fill out applications, upload your resume, and submit — while a self-learning memory system remembers how each applicant tracking system (ATS) works so it gets faster and more accurate over time. Everything runs locally on your machine. No data leaves your computer except LLM API calls.
Requires an LLM API key (OpenAI, Anthropic, or AWS). Chromium is installed automatically on first launch. See Quick Start.
Developers -- See Development Setup to run from source.
The macOS release is signed and notarized by Apple. Just open the .dmg, drag LangHire to Applications, and double-click to launch. No extra steps needed.
The Windows installer is not code-signed. You may see a SmartScreen warning:
.exe installerAppImage:
chmod +x LangHire_1.0.0_amd64.AppImage
./LangHire_1.0.0_amd64.AppImage
Debian / Ubuntu:
# Install uv package manager (required for browser management)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Install the app
sudo dpkg -i LangHire_1.0.0_arm64.deb
[!TIP] If Chromium doesn't launch: Some Linux distributions (like Ubuntu 24.04+) have sandbox restrictions. Run this to manually install browsers and dependencies:
uvx playwright install --with-deps chromium
|
|
|
Click any screenshot to expand
LangHire runs a three-stage loop: Collect → Apply → Learn.
Collect -- An AI browser agent logs into LinkedIn, searches for jobs matching your target titles and locations, and saves each listing with its URL, company, title, and description.
Apply -- For each pending job, the agent opens the application (Easy Apply or external ATS), fills every field using your profile, uploads your resume, answers screening questions from its Q&A bank, and submits. Multiple workers can run in parallel.
Learn -- After each application, the system extracts procedural learnings: which buttons to click, how forms are structured, what fails and what works. These memories are stored per-ATS domain with confidence scores, so next time it encounters the same ATS, it already knows how to navigate it.
┌──────────────────────────────────────────────────┐
│ Tauri Desktop Shell (Rust) │
│ Lightweight native wrapper, ~10 MB │
└────────────────────┬─────────────────────────────┘
│ spawns sidecar
▼
┌──────────────────────────────────────────────────┐
│ React Frontend │ FastAPI Backend │
│ (TypeScript) │ (Python sidecar) │
│ │ │
│ - Dashboard │ - browser-use agents │
│ - Profile editor │ - Playwright browser │
│ - LLM settings │ - Memory system │
│ - Job browser │ - Multi-LLM factory │
│ - Apply controls │ - 20+ REST endpoints │
│ - Memory viewer │ │
│ ◄── HTTP localhost:8742 ──► │
└──────────────────────────────────────────────────┘
│
▼
SQLite + JSON (OS app data directory)
All data is stored locally:
| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/langhire/ |
| Windows | %APPDATA%/langhire/ |
| Linux | ~/.config/langhire/ |
| Tool | Version | Install |
|---|---|---|
| Node.js | 18+ | nodejs.org |
| Rust | 1.77+ | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh |
| Python | 3.13+ | python.org |
| uv | latest | curl -LsSf https://astral.sh/uv/install.sh | sh |
git clone https://github.com/jaimaann/LangHire.git
cd LangHire
npm install # Node dependencies
uv sync # Python dependencies
uv run python -m playwright install chromium # Browser engine
Two terminals:
# Terminal 1 -- Python backend
uv run python backend/main.py
# Terminal 2 -- Frontend dev server
npm run dev
Open http://localhost:1420, or run as a native desktop app instead:
# Terminal 2 (alternative) -- Native Tauri app
cargo tauri dev
The first
cargo tauri devcompiles the Rust shell (~2 min). Subsequent runs are fast.
cargo tauri build
Produces platform-specific installers in src-tauri/target/release/bundle/.
LangHire/
├── src/ # React frontend (TypeScript)
│ ├── pages/ # Dashboard, Profile, Jobs, Apply, Memory, Settings, LLMSettings, Logs
│ ├── components/ # UI primitives, SetupWizard, Sidebar, LoginCards
│ └── lib/ # API client, TypeScript types
│
├── backend/ # Python backend (FastAPI)
│ ├── main.py # Server with 20+ endpoints
│ ├── core/ # Config, LLM factory, shared utilities
│ └── memory/ # SQLite store, post-run extractors, metrics
│
├── src-tauri/ # Tauri native shell (Rust)
│ ├── src/lib.rs # App setup, sidecar launch
│ └── tauri.conf.json # Window config, permissions, bundling
│
├── cli/ # CLI automation scripts
│ ├── collect_jobs.py # Job collection
│ ├── apply_jobs.py # Job application (multi-worker)
│ ├── apply_jobs_tailored.py # Tailored resume variant
│ ├── dashboard.py # Terminal analytics dashboard
│ └── memory_cli.py # Memory management
│
└── scripts/ # Build helpers (macOS DMG, backend bundling)
The CLI scripts work standalone alongside the desktop app:
# Collect jobs from LinkedIn
uv run python cli/collect_jobs.py
# Apply to jobs (3 parallel workers)
uv run python cli/apply_jobs.py --workers 3
# Apply with per-job tailored resumes
uv run python cli/apply_jobs_tailored.py --workers 2
# Memory management
uv run python cli/memory_cli.py stats
uv run python cli/memory_cli.py domains
uv run python cli/memory_cli.py show linkedin.com
# Terminal performance dashboard
uv run python cli/dashboard.py
Contributions are welcome. See CONTRIBUTING.md for full guidelines.
git clone https://github.com/jaimaann/LangHire.git
cd LangHire
npm install && uv sync
uv run python backend/main.py # Terminal 1
npm run dev # Terminal 2
Areas where help is needed:
This tool automates job applications on LinkedIn and other platforms. Use it responsibly:
Built with Tauri, React, Python, and browser-use
Python
46.1%
TypeScript
44.5%
Astro
4.3%
MDX
2.3%
Shell
1.3%