Skip to main content

DivApply: AI-assisted end-to-end job application pipeline

Project description

DivApply

DivApply is an AI-assisted job application pipeline that discovers jobs, enriches postings, scores fit, tailors resumes, writes cover letters, and can optionally drive browser-based applications.

It is designed to stay fact-driven: it uses your profile, resume, saved preferences, and private coursework knowledge to make matching decisions without inventing experience.

For transparency about the Codex-assisted development process, see AI_ASSISTANCE.md.

What It Does

DivApply runs in stages:

  1. Discover jobs from configured boards and direct sources.
  2. Enrich postings with full descriptions and application URLs.
  3. Score jobs against your profile and resume.
  4. Tailor a resume per job.
  5. Generate a cover letter per job.
  6. Export PDFs and, if enabled, launch browser-based auto-apply.

Main Parts

  • src/divapply/discovery/ handles job discovery.
  • src/divapply/enrichment/ expands short listings into full job descriptions.
  • src/divapply/scoring/ scores jobs, tailors resumes, writes cover letters, and produces PDFs.
  • src/divapply/apply/ handles browser automation and form filling.
  • src/divapply/database.py stores jobs and hidden coursework knowledge.
  • src/divapply/config.py loads profile, search config, and runtime paths.

Install

Quick Install

Once DivApply is published to PyPI:

pip install divapply
pip install --no-deps python-jobspy && pip install pydantic tls-client requests markdownify regex
python -m playwright install chromium firefox
divapply init              # one-time setup: resume, profile, preferences, API keys
divapply doctor            # verify setup and show what's missing
divapply run               # discover > enrich > score > tailor > cover letters
divapply run -w 4          # same but parallel
divapply apply             # autonomous browser-driven submission
divapply apply -w 3        # parallel apply workers
divapply apply --dry-run   # fill forms without submitting

Before the first PyPI release is published, install directly from GitHub:

pip install git+https://github.com/InnitDivine/DivApply.git
pip install --no-deps python-jobspy && pip install pydantic tls-client requests markdownify regex
python -m playwright install chromium firefox

Why the second install command? python-jobspy pins an exact NumPy version in its metadata that can fight pip's resolver. Installing JobSpy with --no-deps, then installing its real runtime dependencies separately, avoids that resolver trap.

divapply apply also needs Node.js 18+ for npx and either the Codex CLI or Claude Code CLI.

Clone Install

Use this if you want a local checkout, development setup, or the all-in-one installer.

Windows Command Prompt:

git clone https://github.com/InnitDivine/DivApply.git
cd DivApply
install

PowerShell:

.\install.ps1

macOS/Linux:

git clone https://github.com/InnitDivine/DivApply.git
cd DivApply
bash ./install.sh

The clone installer creates a local .venv, installs DivApply, installs JobSpy support, downloads Playwright browsers, prepares ~/.divapply, and runs divapply doctor.

Installer Options

Windows Command Prompt:

install -Dev              # editable install with test/lint tools
install -Init             # run divapply init after installing
install -Recreate         # rebuild the .venv from scratch
install -SkipBrowsers     # skip Playwright browser downloads
install -SkipJobSpy       # skip python-jobspy
install -Browsers all     # install chromium, firefox, and webkit
install -Help             # show installer help

PowerShell:

.\install.ps1 -Dev
.\install.ps1 -Init
.\install.ps1 -Recreate
.\install.ps1 -SkipBrowsers
.\install.ps1 -SkipJobSpy
.\install.ps1 -Browsers all
.\install.ps1 -Help

macOS/Linux:

bash ./install.sh --dev
bash ./install.sh --init
bash ./install.sh --recreate
bash ./install.sh --skip-browsers
bash ./install.sh --skip-jobspy
bash ./install.sh --browsers all
bash ./install.sh --python /path/to/python3.11

Publishing To PyPI

This repo includes a GitHub Actions workflow for PyPI Trusted Publishing. See PUBLISHING.md for the one-time PyPI setup and release commands.

Manual Local Install

If you already have a working Python 3.11+ environment:

pip install ".[full]"
pip install --no-deps python-jobspy
python -m playwright install chromium firefox

For editable development:

pip install -e ".[dev,full]"
pip install --no-deps python-jobspy
python -m playwright install chromium firefox

After installing, run:

divapply doctor

That checks your profile files, LLM setup, browser runtime, and apply backend.

If you are upgrading from a previous release, run:

divapply migrate

That copies your old local files into the new ~/.divapply layout.

First Run

divapply init

This creates your profile, resume, search config, and environment file under your local app data directory.

Common Commands

divapply run
divapply run discover enrich
divapply run score tailor cover
divapply apply
divapply apply --dry-run
divapply status
divapply dashboard
divapply import-coursework path\to\transcript.json
divapply migrate

Configuration

DivApply reads local user data from your app directory:

  • profile.json for personal details, work history, and preferences
  • resume.txt for the base resume
  • searches.yaml for search terms and locations
  • .env for API keys and runtime settings
  • divapply.db for jobs and coursework knowledge

Coursework Knowledge

DivApply can keep transcript and coursework information in a hidden local database. That knowledge is used to improve matching and reasoning, but it is not copied into your resume or cover letter unless that information already belongs there.

You can add coursework with:

divapply import-coursework path\to\file.json

Supported import formats:

  • JSON
  • CSV
  • plain text
  • PDF transcripts if pypdf is installed

Build

hatch build

Or, if you just want a quick local verification:

python -m py_compile src/divapply/**/*.py

Notes

  • The codebase uses the divapply Python package.
  • The primary public branding and CLI entry point is DivApply.
  • Migration notes and legacy compatibility items live in MIGRATION_CHECKLIST.md.
  • Auto-apply on a fresh machine needs Node.js npx, an apply agent CLI such as Codex or Claude Code, and Playwright browser binaries. The installer downloads the browser binaries; rerun .\install.ps1 -Browsers firefox if Firefox is missing.
  • Browser-based auto-apply can be risky. Use dry runs and review the generated prompt files if you are testing a new setup.

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

divapply-0.4.2.tar.gz (175.4 kB view details)

Uploaded Source

Built Distribution

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

divapply-0.4.2-py3-none-any.whl (183.7 kB view details)

Uploaded Python 3

File details

Details for the file divapply-0.4.2.tar.gz.

File metadata

  • Download URL: divapply-0.4.2.tar.gz
  • Upload date:
  • Size: 175.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for divapply-0.4.2.tar.gz
Algorithm Hash digest
SHA256 6b383e33223060f9ac220ab0a0a948905bee818bb252c57e894054ee23e95b86
MD5 ccac483df85296570300aad0492ca7bf
BLAKE2b-256 bef5fc9f2e4440355e3a32ad52e2eb341b600dc6b99f96513ac9c0d55641c024

See more details on using hashes here.

Provenance

The following attestation bundles were made for divapply-0.4.2.tar.gz:

Publisher: publish.yml on InnitDivine/DivApply

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file divapply-0.4.2-py3-none-any.whl.

File metadata

  • Download URL: divapply-0.4.2-py3-none-any.whl
  • Upload date:
  • Size: 183.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for divapply-0.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d468aeed1f4fb77f30dc7c6988c61d4484e00b32c429ea74996309657c097702
MD5 a07fb890efe3512e369b211887577117
BLAKE2b-256 0646bc278207c26a27edbf5a457fc0de17b90e102b74f5c9d07a08f8ddf87f9f

See more details on using hashes here.

Provenance

The following attestation bundles were made for divapply-0.4.2-py3-none-any.whl:

Publisher: publish.yml on InnitDivine/DivApply

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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