openapply 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- openapply-0.1.0/PKG-INFO +267 -0
- openapply-0.1.0/README.md +237 -0
- openapply-0.1.0/agent/__init__.py +26 -0
- openapply-0.1.0/agent/batch.py +221 -0
- openapply-0.1.0/agent/cv_builder.py +632 -0
- openapply-0.1.0/agent/evaluator.py +430 -0
- openapply-0.1.0/agent/ollama_client.py +304 -0
- openapply-0.1.0/agent/portals_config.py +98 -0
- openapply-0.1.0/agent/prompts/apply_form.md +46 -0
- openapply-0.1.0/agent/prompts/compare_offers.md +23 -0
- openapply-0.1.0/agent/prompts/cover_letter.md +40 -0
- openapply-0.1.0/agent/prompts/deep_research.md +39 -0
- openapply-0.1.0/agent/prompts/evaluate.md +105 -0
- openapply-0.1.0/agent/prompts/outreach.md +35 -0
- openapply-0.1.0/agent/prompts/scan_query.md +38 -0
- openapply-0.1.0/agent/prompts/tailor_cv.md +50 -0
- openapply-0.1.0/agent/scan_history.py +88 -0
- openapply-0.1.0/agent/scanner.py +335 -0
- openapply-0.1.0/agent/scraper.py +415 -0
- openapply-0.1.0/agent/templates/cv.html +266 -0
- openapply-0.1.0/agent/url_utils.py +20 -0
- openapply-0.1.0/cli/__init__.py +1 -0
- openapply-0.1.0/cli/assets/config.example.yml +54 -0
- openapply-0.1.0/cli/assets/portals.example.yml +60 -0
- openapply-0.1.0/cli/commands/__init__.py +1 -0
- openapply-0.1.0/cli/commands/apply.py +116 -0
- openapply-0.1.0/cli/commands/batch.py +155 -0
- openapply-0.1.0/cli/commands/compare.py +130 -0
- openapply-0.1.0/cli/commands/doctor.py +118 -0
- openapply-0.1.0/cli/commands/learn.py +242 -0
- openapply-0.1.0/cli/commands/outreach.py +105 -0
- openapply-0.1.0/cli/commands/pipeline.py +27 -0
- openapply-0.1.0/cli/commands/portal.py +239 -0
- openapply-0.1.0/cli/commands/research.py +117 -0
- openapply-0.1.0/cli/commands/scan.py +163 -0
- openapply-0.1.0/cli/commands/setup.py +287 -0
- openapply-0.1.0/cli/commands/tracker.py +60 -0
- openapply-0.1.0/cli/commands/update.py +35 -0
- openapply-0.1.0/cli/flows/offer_pipeline.py +335 -0
- openapply-0.1.0/cli/main.py +214 -0
- openapply-0.1.0/cli/pipeline_queue.py +109 -0
- openapply-0.1.0/cli/tracker_store.py +105 -0
- openapply-0.1.0/cli/tui/tracker_app.py +305 -0
- openapply-0.1.0/cli/ui.py +205 -0
- openapply-0.1.0/memory/db.py +241 -0
- openapply-0.1.0/openapply.egg-info/PKG-INFO +267 -0
- openapply-0.1.0/openapply.egg-info/SOURCES.txt +54 -0
- openapply-0.1.0/openapply.egg-info/dependency_links.txt +1 -0
- openapply-0.1.0/openapply.egg-info/entry_points.txt +2 -0
- openapply-0.1.0/openapply.egg-info/requires.txt +12 -0
- openapply-0.1.0/openapply.egg-info/top_level.txt +3 -0
- openapply-0.1.0/pyproject.toml +55 -0
- openapply-0.1.0/setup.cfg +4 -0
- openapply-0.1.0/tests/test_pipeline_queue.py +27 -0
- openapply-0.1.0/tests/test_scan_history.py +16 -0
- openapply-0.1.0/tests/test_url_utils.py +13 -0
openapply-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: openapply
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Open-source autonomous job search agent. Runs locally.
|
|
5
|
+
License-Expression: MIT
|
|
6
|
+
Keywords: job-search,cli,ollama,local-first,career,resume,ats
|
|
7
|
+
Classifier: Development Status :: 4 - Beta
|
|
8
|
+
Classifier: Environment :: Console
|
|
9
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
10
|
+
Classifier: Operating System :: OS Independent
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
+
Classifier: Topic :: Office/Business
|
|
16
|
+
Requires-Python: >=3.11
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
Requires-Dist: typer>=0.12
|
|
19
|
+
Requires-Dist: rich>=13
|
|
20
|
+
Requires-Dist: textual>=0.80
|
|
21
|
+
Requires-Dist: ollama>=0.3
|
|
22
|
+
Requires-Dist: playwright>=1.44
|
|
23
|
+
Requires-Dist: sqlalchemy>=2.0
|
|
24
|
+
Requires-Dist: alembic>=1.13
|
|
25
|
+
Requires-Dist: pyyaml>=6
|
|
26
|
+
Requires-Dist: jinja2>=3.1
|
|
27
|
+
Requires-Dist: httpx>=0.27
|
|
28
|
+
Requires-Dist: python-slugify
|
|
29
|
+
Requires-Dist: python-dateutil
|
|
30
|
+
|
|
31
|
+
# Open Apply
|
|
32
|
+
|
|
33
|
+
> Autonomous job search agent. Runs 100% locally. Your CV never leaves your machine.
|
|
34
|
+
|
|
35
|
+
Open Apply is an open-source, privacy-first, terminal-first job application assistant.
|
|
36
|
+
It helps you discover roles, score fit, tailor ATS-safe CVs, and draft applications with Human In The Loop controls.
|
|
37
|
+
|
|
38
|
+
## Why
|
|
39
|
+
|
|
40
|
+
career-ops showed the world this is possible.
|
|
41
|
+
Open Apply makes it accessible to everyone:
|
|
42
|
+
|
|
43
|
+
- No paid cloud AI subscription requirement
|
|
44
|
+
- No cloud API key requirement
|
|
45
|
+
- No vendor lock-in
|
|
46
|
+
- Full local control over data and models
|
|
47
|
+
|
|
48
|
+
## What It Does
|
|
49
|
+
|
|
50
|
+
Open Apply is designed as an end-to-end local pipeline:
|
|
51
|
+
|
|
52
|
+
1. Job discovery across configured portals
|
|
53
|
+
- scans active portals and discovers new listings
|
|
54
|
+
- deduplicates against existing DB records and scan history
|
|
55
|
+
|
|
56
|
+
2. 10-dimension fit evaluation
|
|
57
|
+
- scores each role from 1.0 to 5.0 across role, skills, seniority, compensation, geo, stage, PMF, growth, interview likelihood, and timeline
|
|
58
|
+
- computes weighted score + grade (A/B/C/D/F)
|
|
59
|
+
- writes a markdown report to reports/
|
|
60
|
+
|
|
61
|
+
3. Tailored ATS CV generation
|
|
62
|
+
- extracts high-value JD keywords
|
|
63
|
+
- reorders bullets by relevance (without deleting user content)
|
|
64
|
+
- renders ATS-safe HTML to PDF via Playwright
|
|
65
|
+
- saves artifacts to output/ and metadata to DB
|
|
66
|
+
|
|
67
|
+
4. Human-reviewed application drafting
|
|
68
|
+
- opens and drafts common form fields
|
|
69
|
+
- never auto-submits
|
|
70
|
+
- requires explicit human review before marking as applied
|
|
71
|
+
|
|
72
|
+
5. Parallel batch processing
|
|
73
|
+
- processes queued URLs concurrently
|
|
74
|
+
- fault tolerant: one failure does not block the queue
|
|
75
|
+
- resumable behavior for previously processed jobs
|
|
76
|
+
|
|
77
|
+
6. Outcome learning loop
|
|
78
|
+
- logs interview/rejection/offer/ghosted outcomes
|
|
79
|
+
- adjusts scoring weights in DB based on feedback patterns
|
|
80
|
+
|
|
81
|
+
## Quick Start
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
pip install openapply
|
|
85
|
+
openapply setup
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Then:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
openapply scan
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Required: enable at least 1 portal
|
|
95
|
+
`scan` requires at least one active portal in `portals.yml` (setup creates it for you, but everything is disabled by default).
|
|
96
|
+
|
|
97
|
+
1) Open `portals.yml`
|
|
98
|
+
2) Set at least one entry to `active: true`
|
|
99
|
+
3) Run:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
openapply doctor
|
|
103
|
+
openapply scan --limit 5 --link-limit 30
|
|
104
|
+
```
|
|
105
|
+
## How To Test (Recommended)
|
|
106
|
+
|
|
107
|
+
### 1) Developer install (this repo)
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
python -m venv .venv
|
|
111
|
+
.venv\Scripts\activate
|
|
112
|
+
pip install -e .
|
|
113
|
+
python -m playwright install chromium
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Run quick health checks:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
openapply doctor
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Run unit tests:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
python -m unittest discover -s tests -v
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### 2) User install (PyPI / TestPyPI)
|
|
129
|
+
|
|
130
|
+
Once you publish (see “Publish To PyPI” below), verify in a clean environment:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
python -m venv .venv
|
|
134
|
+
.venv\Scripts\activate
|
|
135
|
+
pip install openapply
|
|
136
|
+
openapply setup
|
|
137
|
+
openapply doctor
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### 3) End-to-end CLI smoke test
|
|
141
|
+
|
|
142
|
+
- Ensure `portals.yml` exists (setup creates it) and set at least one portal to `active: true`.
|
|
143
|
+
- Scan:
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
openapply scan --limit 5 --link-limit 30
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
- Run auto-pipeline for a known job URL:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
openapply pipeline <job-url>
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
- Open tracker TUI:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
openapply tracker
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Philosophy
|
|
162
|
+
|
|
163
|
+
AI analyzes. You decide. HITL always.
|
|
164
|
+
|
|
165
|
+
Open Apply intentionally avoids full autonomy on final submission actions.
|
|
166
|
+
The system can evaluate, draft, and prefill, but a human must review before applying.
|
|
167
|
+
|
|
168
|
+
## Core Commands
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
openapply setup
|
|
172
|
+
openapply doctor
|
|
173
|
+
openapply scan
|
|
174
|
+
openapply scan --auto
|
|
175
|
+
openapply batch --min-score B --limit 20
|
|
176
|
+
openapply pipeline <url-or-jd-text>
|
|
177
|
+
openapply apply <url-or-jd-text>
|
|
178
|
+
openapply tracker
|
|
179
|
+
openapply learn <job-id> <outcome>
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Models
|
|
183
|
+
|
|
184
|
+
Open Apply uses local Ollama models. A practical starting setup:
|
|
185
|
+
|
|
186
|
+
- `llama3.1:8b` for evaluation
|
|
187
|
+
- Pros: fast, low hardware footprint, good for scoring and routing
|
|
188
|
+
- Tradeoff: less nuanced generation quality for long-form text
|
|
189
|
+
|
|
190
|
+
- `qwen2.5:14b` for generation
|
|
191
|
+
- Pros: stronger CV/cover-letter drafting quality
|
|
192
|
+
- Tradeoff: slower and heavier resource usage
|
|
193
|
+
|
|
194
|
+
General guidance:
|
|
195
|
+
|
|
196
|
+
- Use smaller models for high-volume scan/eval loops.
|
|
197
|
+
- Use larger models for final artifact generation quality.
|
|
198
|
+
- Keep all inference local through Ollama.
|
|
199
|
+
|
|
200
|
+
## Local-First Privacy
|
|
201
|
+
|
|
202
|
+
- CV, config, reports, and generated files are stored locally.
|
|
203
|
+
- SQLite DB runs locally (`data/openapply.db`).
|
|
204
|
+
- Prompt and model execution are local-first by design.
|
|
205
|
+
|
|
206
|
+
## Project Status
|
|
207
|
+
|
|
208
|
+
Open Apply is in active development (`0.1.0`) and currently optimized for terminal workflows.
|
|
209
|
+
Web UI support is planned as secondary priority.
|
|
210
|
+
|
|
211
|
+
## Documentation
|
|
212
|
+
|
|
213
|
+
- docs/ARCHITECTURE.md
|
|
214
|
+
- docs/SETUP.md
|
|
215
|
+
- docs/PUBLISH.md (maintainers: publish to PyPI)
|
|
216
|
+
|
|
217
|
+
## Publish To PyPI
|
|
218
|
+
|
|
219
|
+
Use this flow to publish releases so users can run:
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
pip install openapply
|
|
223
|
+
openapply setup
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Build and validate:
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
python -m pip install --upgrade build twine
|
|
230
|
+
python -m build
|
|
231
|
+
python -m twine check dist/*
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
Upload to TestPyPI first:
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
python -m twine upload --repository testpypi dist/*
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Test install from TestPyPI in a clean environment:
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
python -m pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple openapply
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Upload to PyPI:
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
python -m twine upload dist/*
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
PowerShell helper:
|
|
253
|
+
|
|
254
|
+
```powershell
|
|
255
|
+
./scripts/publish.ps1
|
|
256
|
+
./scripts/publish.ps1 -TestPyPI
|
|
257
|
+
./scripts/publish.ps1 -PyPI
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## Inspiration
|
|
261
|
+
|
|
262
|
+
Inspired by the ideas popularized in career-ops (MIT), including structured fit scoring, CV templating workflow, and portal scanning patterns.
|
|
263
|
+
Open Apply is implemented from scratch as a standalone Python product.
|
|
264
|
+
|
|
265
|
+
## License
|
|
266
|
+
|
|
267
|
+
MIT
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# Open Apply
|
|
2
|
+
|
|
3
|
+
> Autonomous job search agent. Runs 100% locally. Your CV never leaves your machine.
|
|
4
|
+
|
|
5
|
+
Open Apply is an open-source, privacy-first, terminal-first job application assistant.
|
|
6
|
+
It helps you discover roles, score fit, tailor ATS-safe CVs, and draft applications with Human In The Loop controls.
|
|
7
|
+
|
|
8
|
+
## Why
|
|
9
|
+
|
|
10
|
+
career-ops showed the world this is possible.
|
|
11
|
+
Open Apply makes it accessible to everyone:
|
|
12
|
+
|
|
13
|
+
- No paid cloud AI subscription requirement
|
|
14
|
+
- No cloud API key requirement
|
|
15
|
+
- No vendor lock-in
|
|
16
|
+
- Full local control over data and models
|
|
17
|
+
|
|
18
|
+
## What It Does
|
|
19
|
+
|
|
20
|
+
Open Apply is designed as an end-to-end local pipeline:
|
|
21
|
+
|
|
22
|
+
1. Job discovery across configured portals
|
|
23
|
+
- scans active portals and discovers new listings
|
|
24
|
+
- deduplicates against existing DB records and scan history
|
|
25
|
+
|
|
26
|
+
2. 10-dimension fit evaluation
|
|
27
|
+
- scores each role from 1.0 to 5.0 across role, skills, seniority, compensation, geo, stage, PMF, growth, interview likelihood, and timeline
|
|
28
|
+
- computes weighted score + grade (A/B/C/D/F)
|
|
29
|
+
- writes a markdown report to reports/
|
|
30
|
+
|
|
31
|
+
3. Tailored ATS CV generation
|
|
32
|
+
- extracts high-value JD keywords
|
|
33
|
+
- reorders bullets by relevance (without deleting user content)
|
|
34
|
+
- renders ATS-safe HTML to PDF via Playwright
|
|
35
|
+
- saves artifacts to output/ and metadata to DB
|
|
36
|
+
|
|
37
|
+
4. Human-reviewed application drafting
|
|
38
|
+
- opens and drafts common form fields
|
|
39
|
+
- never auto-submits
|
|
40
|
+
- requires explicit human review before marking as applied
|
|
41
|
+
|
|
42
|
+
5. Parallel batch processing
|
|
43
|
+
- processes queued URLs concurrently
|
|
44
|
+
- fault tolerant: one failure does not block the queue
|
|
45
|
+
- resumable behavior for previously processed jobs
|
|
46
|
+
|
|
47
|
+
6. Outcome learning loop
|
|
48
|
+
- logs interview/rejection/offer/ghosted outcomes
|
|
49
|
+
- adjusts scoring weights in DB based on feedback patterns
|
|
50
|
+
|
|
51
|
+
## Quick Start
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
pip install openapply
|
|
55
|
+
openapply setup
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Then:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
openapply scan
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Required: enable at least 1 portal
|
|
65
|
+
`scan` requires at least one active portal in `portals.yml` (setup creates it for you, but everything is disabled by default).
|
|
66
|
+
|
|
67
|
+
1) Open `portals.yml`
|
|
68
|
+
2) Set at least one entry to `active: true`
|
|
69
|
+
3) Run:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
openapply doctor
|
|
73
|
+
openapply scan --limit 5 --link-limit 30
|
|
74
|
+
```
|
|
75
|
+
## How To Test (Recommended)
|
|
76
|
+
|
|
77
|
+
### 1) Developer install (this repo)
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
python -m venv .venv
|
|
81
|
+
.venv\Scripts\activate
|
|
82
|
+
pip install -e .
|
|
83
|
+
python -m playwright install chromium
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Run quick health checks:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
openapply doctor
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Run unit tests:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
python -m unittest discover -s tests -v
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### 2) User install (PyPI / TestPyPI)
|
|
99
|
+
|
|
100
|
+
Once you publish (see “Publish To PyPI” below), verify in a clean environment:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
python -m venv .venv
|
|
104
|
+
.venv\Scripts\activate
|
|
105
|
+
pip install openapply
|
|
106
|
+
openapply setup
|
|
107
|
+
openapply doctor
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### 3) End-to-end CLI smoke test
|
|
111
|
+
|
|
112
|
+
- Ensure `portals.yml` exists (setup creates it) and set at least one portal to `active: true`.
|
|
113
|
+
- Scan:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
openapply scan --limit 5 --link-limit 30
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
- Run auto-pipeline for a known job URL:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
openapply pipeline <job-url>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
- Open tracker TUI:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
openapply tracker
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Philosophy
|
|
132
|
+
|
|
133
|
+
AI analyzes. You decide. HITL always.
|
|
134
|
+
|
|
135
|
+
Open Apply intentionally avoids full autonomy on final submission actions.
|
|
136
|
+
The system can evaluate, draft, and prefill, but a human must review before applying.
|
|
137
|
+
|
|
138
|
+
## Core Commands
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
openapply setup
|
|
142
|
+
openapply doctor
|
|
143
|
+
openapply scan
|
|
144
|
+
openapply scan --auto
|
|
145
|
+
openapply batch --min-score B --limit 20
|
|
146
|
+
openapply pipeline <url-or-jd-text>
|
|
147
|
+
openapply apply <url-or-jd-text>
|
|
148
|
+
openapply tracker
|
|
149
|
+
openapply learn <job-id> <outcome>
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Models
|
|
153
|
+
|
|
154
|
+
Open Apply uses local Ollama models. A practical starting setup:
|
|
155
|
+
|
|
156
|
+
- `llama3.1:8b` for evaluation
|
|
157
|
+
- Pros: fast, low hardware footprint, good for scoring and routing
|
|
158
|
+
- Tradeoff: less nuanced generation quality for long-form text
|
|
159
|
+
|
|
160
|
+
- `qwen2.5:14b` for generation
|
|
161
|
+
- Pros: stronger CV/cover-letter drafting quality
|
|
162
|
+
- Tradeoff: slower and heavier resource usage
|
|
163
|
+
|
|
164
|
+
General guidance:
|
|
165
|
+
|
|
166
|
+
- Use smaller models for high-volume scan/eval loops.
|
|
167
|
+
- Use larger models for final artifact generation quality.
|
|
168
|
+
- Keep all inference local through Ollama.
|
|
169
|
+
|
|
170
|
+
## Local-First Privacy
|
|
171
|
+
|
|
172
|
+
- CV, config, reports, and generated files are stored locally.
|
|
173
|
+
- SQLite DB runs locally (`data/openapply.db`).
|
|
174
|
+
- Prompt and model execution are local-first by design.
|
|
175
|
+
|
|
176
|
+
## Project Status
|
|
177
|
+
|
|
178
|
+
Open Apply is in active development (`0.1.0`) and currently optimized for terminal workflows.
|
|
179
|
+
Web UI support is planned as secondary priority.
|
|
180
|
+
|
|
181
|
+
## Documentation
|
|
182
|
+
|
|
183
|
+
- docs/ARCHITECTURE.md
|
|
184
|
+
- docs/SETUP.md
|
|
185
|
+
- docs/PUBLISH.md (maintainers: publish to PyPI)
|
|
186
|
+
|
|
187
|
+
## Publish To PyPI
|
|
188
|
+
|
|
189
|
+
Use this flow to publish releases so users can run:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
pip install openapply
|
|
193
|
+
openapply setup
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Build and validate:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
python -m pip install --upgrade build twine
|
|
200
|
+
python -m build
|
|
201
|
+
python -m twine check dist/*
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
Upload to TestPyPI first:
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
python -m twine upload --repository testpypi dist/*
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Test install from TestPyPI in a clean environment:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
python -m pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple openapply
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
Upload to PyPI:
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
python -m twine upload dist/*
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
PowerShell helper:
|
|
223
|
+
|
|
224
|
+
```powershell
|
|
225
|
+
./scripts/publish.ps1
|
|
226
|
+
./scripts/publish.ps1 -TestPyPI
|
|
227
|
+
./scripts/publish.ps1 -PyPI
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
## Inspiration
|
|
231
|
+
|
|
232
|
+
Inspired by the ideas popularized in career-ops (MIT), including structured fit scoring, CV templating workflow, and portal scanning patterns.
|
|
233
|
+
Open Apply is implemented from scratch as a standalone Python product.
|
|
234
|
+
|
|
235
|
+
## License
|
|
236
|
+
|
|
237
|
+
MIT
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"""Open Apply agent layer."""
|
|
2
|
+
|
|
3
|
+
from .batch import BatchProcessor, BatchRunResult, BatchTaskResult
|
|
4
|
+
from .cv_builder import CVBuildResult, CVBuilder, CVBuilderError
|
|
5
|
+
from .evaluator import EvaluationResult, JobEvaluator
|
|
6
|
+
from .ollama_client import OllamaClient, OllamaClientError
|
|
7
|
+
from .scanner import DiscoveredJob, JobScanner, ScanResult
|
|
8
|
+
from .scraper import JobScraper, ScraperError
|
|
9
|
+
|
|
10
|
+
__all__ = [
|
|
11
|
+
"OllamaClient",
|
|
12
|
+
"OllamaClientError",
|
|
13
|
+
"BatchProcessor",
|
|
14
|
+
"BatchRunResult",
|
|
15
|
+
"BatchTaskResult",
|
|
16
|
+
"JobScanner",
|
|
17
|
+
"ScanResult",
|
|
18
|
+
"DiscoveredJob",
|
|
19
|
+
"CVBuilder",
|
|
20
|
+
"CVBuildResult",
|
|
21
|
+
"CVBuilderError",
|
|
22
|
+
"EvaluationResult",
|
|
23
|
+
"JobEvaluator",
|
|
24
|
+
"JobScraper",
|
|
25
|
+
"ScraperError",
|
|
26
|
+
]
|