Skip to main content

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

Open Apply

Autonomous job search agent. Runs 100% locally. Your CV never leaves your machine.

Open Apply 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. Open Apply 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

Open Apply is designed as an end-to-end local pipeline:

  1. Job discovery across configured portals
  • scans active portals and discovers new listings
  • deduplicates against existing DB records and scan history
  1. 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/
  1. 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
  1. Human-reviewed application drafting
  • opens and drafts common form fields
  • never auto-submits
  • requires explicit human review before marking as applied
  1. Parallel batch processing
  • processes queued URLs concurrently
  • fault tolerant: one failure does not block the queue
  • resumable behavior for previously processed jobs
  1. 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).

  1. Open portals.yml
  2. Set at least one entry to active: true
  3. 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.yml exists (setup creates it) and set at least one portal to active: 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.

Open Apply 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

Open Apply uses local Ollama models. A practical starting setup:

  • llama3.1:8b for evaluation

    • Pros: fast, low hardware footprint, good for scoring and routing
    • Tradeoff: less nuanced generation quality for long-form text
  • qwen2.5:14b for 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

Open Apply is in active development (0.1.0) 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. Open Apply is implemented from scratch as a standalone Python product.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openapply-0.1.0.tar.gz (64.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

openapply-0.1.0-py3-none-any.whl (80.9 kB view details)

Uploaded Python 3

File details

Details for the file openapply-0.1.0.tar.gz.

File metadata

  • Download URL: openapply-0.1.0.tar.gz
  • Upload date:
  • Size: 64.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.4

File hashes

Hashes for openapply-0.1.0.tar.gz
Algorithm Hash digest
SHA256 8c6e968f2634af97df5ebc7b3d7fd4f65ddf848eea62702ff4021281db91413b
MD5 44e115698cc5f3dd26b8a6e1bd8123d4
BLAKE2b-256 35a3d7ab60171ed56882438e6f426ac7fc39e6efabeaf7f95ba3ad51709b4e97

See more details on using hashes here.

File details

Details for the file openapply-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: openapply-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 80.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.4

File hashes

Hashes for openapply-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d0eb82f53b9e5c585bba4d298d23fb4c8c33ca449d4ae3a9634b1b58064f2a42
MD5 cef502656c824f92dcd5a74ab5ed0b20
BLAKE2b-256 d515b0fb55eeac8ea3c36c37c9c74590bd59ed1c799ac69e16165f5b29d5e3de

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page