Open-source autonomous job search agent. Runs locally.
This project has been archived.
The maintainers of this project have marked this project as archived. No new releases are expected.
Project description
openapply
Autonomous job search agent. Runs 100% locally. Your CV never leaves your machine.
openapply is an open-source, privacy-first, terminal-first job application assistant. It helps you discover roles, score fit, tailor ATS-safe CVs, and draft applications with Human In The Loop controls.
Why
career-ops showed the world this is possible. openapply makes it accessible to everyone:
- No paid cloud AI subscription requirement
- No cloud API key requirement
- No vendor lock-in
- Full local control over data and models
What It Does
openapply is designed as an end-to-end local pipeline:
- Job discovery across configured portals
- scans active portals and discovers new listings
- deduplicates against existing DB records and scan history
- 10-dimension fit evaluation
- scores each role from 1.0 to 5.0 across role, skills, seniority, compensation, geo, stage, PMF, growth, interview likelihood, and timeline
- computes weighted score + grade (A/B/C/D/F)
- writes a markdown report to reports/
- Tailored ATS CV generation
- extracts high-value JD keywords
- reorders bullets by relevance (without deleting user content)
- renders ATS-safe HTML to PDF via Playwright
- saves artifacts to output/ and metadata to DB
- Human-reviewed application drafting
- opens and drafts common form fields
- never auto-submits
- requires explicit human review before marking as applied
- Parallel batch processing
- processes queued URLs concurrently
- fault tolerant: one failure does not block the queue
- resumable behavior for previously processed jobs
- Outcome learning loop
- logs interview/rejection/offer/ghosted outcomes
- adjusts scoring weights in DB based on feedback patterns
Quick Start
pip install openapply
openapply setup
Then:
openapply scan
Required: enable at least 1 portal
scan requires at least one active portal in portals.yml (setup creates it for you, but everything is disabled by default).
- Open
portals.yml - Set at least one entry to
active: true - Run:
openapply doctor
openapply scan --limit 5 --link-limit 30
How To Test (Recommended)
1) Developer install (this repo)
python -m venv .venv
.venv\Scripts\activate
pip install -e .
python -m playwright install chromium
Run quick health checks:
openapply doctor
Run unit tests:
python -m unittest discover -s tests -v
2) User install (PyPI / TestPyPI)
Once you publish (see “Publish To PyPI” below), verify in a clean environment:
python -m venv .venv
.venv\Scripts\activate
pip install openapply
openapply setup
openapply doctor
3) End-to-end CLI smoke test
- Ensure
portals.ymlexists (setup creates it) and set at least one portal toactive: true. - Scan:
openapply scan --limit 5 --link-limit 30
- Run auto-pipeline for a known job URL:
openapply pipeline <job-url>
- Open tracker TUI:
openapply tracker
Philosophy
AI analyzes. You decide. HITL always.
openapply intentionally avoids full autonomy on final submission actions. The system can evaluate, draft, and prefill, but a human must review before applying.
Core Commands
openapply setup
openapply doctor
openapply scan
openapply scan --auto
openapply batch --min-score B --limit 20
openapply pipeline <url-or-jd-text>
openapply apply <url-or-jd-text>
openapply tracker
openapply learn <job-id> <outcome>
Models
openapply uses local Ollama models. A practical starting setup:
-
llama3.1:8bfor evaluation- Pros: fast, low hardware footprint, good for scoring and routing
- Tradeoff: less nuanced generation quality for long-form text
-
qwen2.5:14bfor generation- Pros: stronger CV/cover-letter drafting quality
- Tradeoff: slower and heavier resource usage
General guidance:
- Use smaller models for high-volume scan/eval loops.
- Use larger models for final artifact generation quality.
- Keep all inference local through Ollama.
Local-First Privacy
- CV, config, reports, and generated files are stored locally.
- SQLite DB runs locally (
data/openapply.db). - Prompt and model execution are local-first by design.
Project Status
openapply is in active development (0.1.1) and currently optimized for terminal workflows.
Web UI support is planned as secondary priority.
Documentation
- docs/ARCHITECTURE.md
- docs/SETUP.md
- docs/PUBLISH.md (maintainers: publish to PyPI)
Publish To PyPI
Use this flow to publish releases so users can run:
pip install openapply
openapply setup
Build and validate:
python -m pip install --upgrade build twine
python -m build
python -m twine check dist/*
Upload to TestPyPI first:
python -m twine upload --repository testpypi dist/*
Test install from TestPyPI in a clean environment:
python -m pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple openapply
Upload to PyPI:
python -m twine upload dist/*
PowerShell helper:
./scripts/publish.ps1
./scripts/publish.ps1 -TestPyPI
./scripts/publish.ps1 -PyPI
Inspiration
Inspired by the ideas popularized in career-ops (MIT), including structured fit scoring, CV templating workflow, and portal scanning patterns. openapply is implemented from scratch as a standalone Python product.
License
MIT
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 openapply-0.1.1.tar.gz.
File metadata
- Download URL: openapply-0.1.1.tar.gz
- Upload date:
- Size: 66.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a5cb616b3588c6e7e13c906dc1d93188abbbaec2cbc3e6283ea30c5d04ebfd71
|
|
| MD5 |
ce8b68627ba567fd19b803899293556f
|
|
| BLAKE2b-256 |
dbf0266ac6a41ac4db5458de0cfbe95f614145d045f687ef93108da7bf5015ea
|
File details
Details for the file openapply-0.1.1-py3-none-any.whl.
File metadata
- Download URL: openapply-0.1.1-py3-none-any.whl
- Upload date:
- Size: 82.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ceddf4c75359214fa4e26f5b127858af9ac0d60998d1b0196cde236d77635808
|
|
| MD5 |
a165051edd8170c840ed7af6ef1724fd
|
|
| BLAKE2b-256 |
26a254cb4de157da7ce8cff2ccb9146a746c9aa7929f8bd494ef21199f3e562e
|