katze 0.1.1__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.
- katze-0.1.1/PKG-INFO +259 -0
- katze-0.1.1/README.md +240 -0
- katze-0.1.1/katze/__init__.py +4 -0
- katze-0.1.1/katze/cli.py +245 -0
- katze-0.1.1/katze/client.py +97 -0
- katze-0.1.1/katze/config.py +224 -0
- katze-0.1.1/katze/fill.py +915 -0
- katze-0.1.1/katze/letter.py +393 -0
- katze-0.1.1/katze/pickers.py +82 -0
- katze-0.1.1/katze/questions.py +621 -0
- katze-0.1.1/katze/screens.py +228 -0
- katze-0.1.1/katze/shell.py +234 -0
- katze-0.1.1/katze/tui.py +1008 -0
- katze-0.1.1/katze.egg-info/PKG-INFO +259 -0
- katze-0.1.1/katze.egg-info/SOURCES.txt +29 -0
- katze-0.1.1/katze.egg-info/dependency_links.txt +1 -0
- katze-0.1.1/katze.egg-info/entry_points.txt +2 -0
- katze-0.1.1/katze.egg-info/requires.txt +8 -0
- katze-0.1.1/katze.egg-info/top_level.txt +1 -0
- katze-0.1.1/pyproject.toml +37 -0
- katze-0.1.1/setup.cfg +4 -0
- katze-0.1.1/tests/test_auto_apply_e2e.py +241 -0
- katze-0.1.1/tests/test_cli.py +314 -0
- katze-0.1.1/tests/test_fill.py +451 -0
- katze-0.1.1/tests/test_letter.py +254 -0
- katze-0.1.1/tests/test_login_scenarios_e2e.py +249 -0
- katze-0.1.1/tests/test_pickers.py +68 -0
- katze-0.1.1/tests/test_questions.py +129 -0
- katze-0.1.1/tests/test_screens.py +82 -0
- katze-0.1.1/tests/test_shell.py +182 -0
- katze-0.1.1/tests/test_tui_e2e.py +359 -0
katze-0.1.1/PKG-INFO
ADDED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: katze
|
|
3
|
+
Version: 0.1.1
|
|
4
|
+
Summary: JobKatze Auto-Apply CLI
|
|
5
|
+
Author: Monnawat Tongkaw
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/ModemT/jobkatze
|
|
8
|
+
Project-URL: Repository, https://github.com/ModemT/jobkatze
|
|
9
|
+
Requires-Python: >=3.11
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
Requires-Dist: typer>=0.12.0
|
|
12
|
+
Requires-Dist: rich>=13.0.0
|
|
13
|
+
Requires-Dist: httpx>=0.27.0
|
|
14
|
+
Requires-Dist: playwright>=1.40.0
|
|
15
|
+
Requires-Dist: pypdf>=4.0.0
|
|
16
|
+
Requires-Dist: pyyaml>=6.0.0
|
|
17
|
+
Requires-Dist: prompt_toolkit>=3.0.40
|
|
18
|
+
Requires-Dist: typst>=0.11.0
|
|
19
|
+
|
|
20
|
+
# `katze` — JobKatze Auto-Apply CLI
|
|
21
|
+
|
|
22
|
+
`katze` pulls your curated (`saved`) or matched (`match`) jobs from JobKatze, generates tailored English cover letters compiled to PDF via Typst and `agy`, opens and pre-fills ATS application forms in a persistent Chrome window, and harvests mandatory application questions across companies.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Prerequisites
|
|
27
|
+
|
|
28
|
+
1. **Python 3.11+**
|
|
29
|
+
2. **Google Chrome** (or Chromium) installed locally
|
|
30
|
+
3. **Typst** for compiling cover letters to PDF:
|
|
31
|
+
```bash
|
|
32
|
+
brew install typst
|
|
33
|
+
```
|
|
34
|
+
4. **Antigravity CLI (`agy`)** on `PATH` for local agent cover letter generation
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Installation
|
|
39
|
+
|
|
40
|
+
### Recommended: Global Tool via `uv`
|
|
41
|
+
|
|
42
|
+
Install `katze` globally from anywhere on your machine in editable mode:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
uv tool install --editable /path/to/jobkatze/cli
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Whenever you pull changes in the repository, the global `katze` executable automatically reflects code changes. To update dependencies:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
uv tool install --editable /path/to/jobkatze/cli --reinstall
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Local Virtual Environment
|
|
55
|
+
|
|
56
|
+
Or install inside a virtual environment:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
cd cli
|
|
60
|
+
python3 -m venv .venv
|
|
61
|
+
.venv/bin/pip install -e .
|
|
62
|
+
.venv/bin/playwright install chromium
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Or using the repository's `api` virtual environment:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
api/.venv/bin/pip install -e cli
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Quickstart
|
|
74
|
+
|
|
75
|
+
### 1. Initialize configuration and resume
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
katze init /path/to/your/resume.pdf
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
This creates `~/.config/jobkatze/` (override with `JOBKATZE_CONFIG_DIR`) containing:
|
|
82
|
+
- `resume.pdf` — copy of your resume uploaded to ATS file inputs
|
|
83
|
+
- `profile.yaml` — candidate answers used to auto-fill application forms
|
|
84
|
+
- `letter.typ` — Typst template for compiling cover letter PDFs
|
|
85
|
+
|
|
86
|
+
### 2. Edit your pre-filled form answers (`katze config`) or update your resume (`katze resume`)
|
|
87
|
+
|
|
88
|
+
Modify your profile interactively in the terminal UI, set individual fields directly, or open in `$EDITOR`:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Interactive terminal UI (select field by # or name, 'a' for all, 'e' for $EDITOR)
|
|
92
|
+
katze config
|
|
93
|
+
|
|
94
|
+
# Set fields directly from the command line
|
|
95
|
+
katze config --set city=Munich --set salary_expectation_eur=95000
|
|
96
|
+
|
|
97
|
+
# Show current configuration table
|
|
98
|
+
katze config --show
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Update your resume at any time (copies into `~/.config/jobkatze/resume.pdf` and syncs to backend):
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# Inspect active resume path and file status
|
|
105
|
+
katze resume
|
|
106
|
+
|
|
107
|
+
# Choose a PDF via native macOS Finder dialog
|
|
108
|
+
katze resume --finder
|
|
109
|
+
|
|
110
|
+
# Copy a specific PDF into ~/.config/jobkatze/resume.pdf and sync to backend
|
|
111
|
+
katze resume /path/to/new_resume.pdf
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### 3. Interactive Shell & Command Guides (`katze`)
|
|
115
|
+
|
|
116
|
+
Launch the full interactive shell with in-place screen switching, `↑`/`↓` arrow keys, and command suggestions:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
# Launch interactive shell
|
|
120
|
+
katze
|
|
121
|
+
|
|
122
|
+
# View quick reference guide anytime
|
|
123
|
+
katze help
|
|
124
|
+
|
|
125
|
+
# View dedicated guide for a specific command
|
|
126
|
+
katze help resume
|
|
127
|
+
katze help apply
|
|
128
|
+
katze help login
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Inside the interactive shell:
|
|
132
|
+
- Type `/` to open the command suggestion menu.
|
|
133
|
+
- Use `↑`/`↓` arrow keys or `Tab` to navigate options and press `Enter` to select.
|
|
134
|
+
- Each command has its own screen with step-by-step guidance and actions.
|
|
135
|
+
- Screens switch in place without filling up terminal scrollback. Press `Esc` or `/back` to return to the main menu, and `q` or `/quit` to exit.
|
|
136
|
+
|
|
137
|
+
### 4. Log in to JobKatze
|
|
138
|
+
|
|
139
|
+
Authenticate seamlessly through your web browser or command line:
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
# Browser login: opens JobKatze web app to authorize in 1 click
|
|
143
|
+
katze login
|
|
144
|
+
|
|
145
|
+
# Headless login with email and password
|
|
146
|
+
katze login --email you@example.com --password secret
|
|
147
|
+
|
|
148
|
+
# Local devserver (http://localhost:7071/api)
|
|
149
|
+
katze login --local
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
When running `katze login`, your default browser opens the authorization page. If you are already logged in to JobKatze in your browser, click **Authorize katze** to connect immediately without retyping credentials.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Commands
|
|
157
|
+
|
|
158
|
+
### `katze apply` — Open and pre-fill application tabs in Chrome
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# Apply to jobs you bookmarked ("Saved") on JobKatze Web
|
|
162
|
+
katze apply --from saved --limit 5
|
|
163
|
+
|
|
164
|
+
# Pull top resume-matched jobs from direct ATS boards (Greenhouse, Personio, Ashby, Lever, Recruitee, Workable)
|
|
165
|
+
katze apply --from match --limit 5
|
|
166
|
+
|
|
167
|
+
# Filter by specific ATS platform(s)
|
|
168
|
+
katze apply --from match --source greenhouse,personio,ashby --limit 5
|
|
169
|
+
|
|
170
|
+
# Apply to a single job ID
|
|
171
|
+
katze apply --job <job_id>
|
|
172
|
+
|
|
173
|
+
# Regenerate cover letters even if cached locally
|
|
174
|
+
katze apply --job <job_id> --regen
|
|
175
|
+
|
|
176
|
+
# Prompt immediately in the terminal for submission confirmation
|
|
177
|
+
katze apply --from saved --prompt
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
#### How persistent Chrome tabs work
|
|
181
|
+
- `katze apply` launches a detached Chrome process using `~/.config/jobkatze/chrome-profile` on `--remote-debugging-port=9222` and connects via Chrome DevTools Protocol (CDP).
|
|
182
|
+
- When `katze apply` exits, **all Chrome tabs stay open**.
|
|
183
|
+
- Running `katze apply` again attaches to the same Chrome window and appends new tabs next to your existing ones.
|
|
184
|
+
- Each tab title is prefixed with:
|
|
185
|
+
- `[READY] Company - Role` when 0 mandatory fields remain unfilled.
|
|
186
|
+
- `[NEEDS N] Company - Role` when `N` mandatory fields need manual input (outlined in amber `2px solid #e08b00` on the page).
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
### `katze confirm` — Mark submitted tabs as `applied`
|
|
191
|
+
|
|
192
|
+
After reviewing open tabs and clicking **Submit** in Chrome, sync your submission status back to JobKatze Web:
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
# Interactively confirm each pending tab [y/N]
|
|
196
|
+
katze confirm
|
|
197
|
+
|
|
198
|
+
# Mark all pending tabs as applied without prompting
|
|
199
|
+
katze confirm --all
|
|
200
|
+
|
|
201
|
+
# Mark a specific job ID as applied
|
|
202
|
+
katze confirm --job <job_id>
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
### `katze letter` — Generate a tailored cover letter PDF only
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
# Generate ~/.config/jobkatze/applications/<job_id>/cover_letter.{txt,pdf}
|
|
211
|
+
katze letter <job_id>
|
|
212
|
+
|
|
213
|
+
# Pass a custom angle or instruction to the agent
|
|
214
|
+
katze letter <job_id> --hint "Emphasize distributed systems and Kubernetes experience"
|
|
215
|
+
|
|
216
|
+
# Overwrite an existing letter
|
|
217
|
+
katze letter <job_id> --regen
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
### `katze questions` — Harvest & analyze mandatory ATS questions
|
|
223
|
+
|
|
224
|
+
Scan application forms over plain HTTP (no browser required) to inspect what mandatory questions companies ask and verify what percentage of fields your `profile.yaml` covers:
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
# Scan mandatory questions across top 25 resume-matched direct-ATS jobs
|
|
228
|
+
katze questions scan --from match --limit 25
|
|
229
|
+
|
|
230
|
+
# Scan mandatory questions across your saved jobs
|
|
231
|
+
katze questions scan --from saved --limit 25
|
|
232
|
+
|
|
233
|
+
# View the cumulative frequency and profile coverage report from ~/.config/jobkatze/questions.jsonl
|
|
234
|
+
katze questions report
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## Local Files (`~/.config/jobkatze/`)
|
|
240
|
+
|
|
241
|
+
| Path | Purpose |
|
|
242
|
+
| :--- | :--- |
|
|
243
|
+
| `config.toml` | API base URL and authentication token (`0600` permissions) |
|
|
244
|
+
| `profile.yaml` | Pre-filled candidate answers for text inputs, dropdowns, radio groups, and checkboxes |
|
|
245
|
+
| `resume.pdf` | Candidate CV uploaded to file inputs |
|
|
246
|
+
| `letter.typ` | Typst template compiled for each cover letter |
|
|
247
|
+
| `applications/<job_id>/cover_letter.txt` | Plain-text cover letter generated by `agy` |
|
|
248
|
+
| `applications/<job_id>/cover_letter.pdf` | Compiled PDF cover letter uploaded to ATS forms |
|
|
249
|
+
| `questions.jsonl` | Deduplicated log of observed mandatory ATS form questions |
|
|
250
|
+
| `pending_tabs.json` | Queue of open tabs awaiting `katze confirm` |
|
|
251
|
+
| `chrome-profile/` | Persistent Chromium user data directory |
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## Running Tests
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
PYTHONPATH=cli api/.venv/bin/pytest cli/tests/
|
|
259
|
+
```
|
katze-0.1.1/README.md
ADDED
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
# `katze` — JobKatze Auto-Apply CLI
|
|
2
|
+
|
|
3
|
+
`katze` pulls your curated (`saved`) or matched (`match`) jobs from JobKatze, generates tailored English cover letters compiled to PDF via Typst and `agy`, opens and pre-fills ATS application forms in a persistent Chrome window, and harvests mandatory application questions across companies.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Prerequisites
|
|
8
|
+
|
|
9
|
+
1. **Python 3.11+**
|
|
10
|
+
2. **Google Chrome** (or Chromium) installed locally
|
|
11
|
+
3. **Typst** for compiling cover letters to PDF:
|
|
12
|
+
```bash
|
|
13
|
+
brew install typst
|
|
14
|
+
```
|
|
15
|
+
4. **Antigravity CLI (`agy`)** on `PATH` for local agent cover letter generation
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Installation
|
|
20
|
+
|
|
21
|
+
### Recommended: Global Tool via `uv`
|
|
22
|
+
|
|
23
|
+
Install `katze` globally from anywhere on your machine in editable mode:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
uv tool install --editable /path/to/jobkatze/cli
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Whenever you pull changes in the repository, the global `katze` executable automatically reflects code changes. To update dependencies:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
uv tool install --editable /path/to/jobkatze/cli --reinstall
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Local Virtual Environment
|
|
36
|
+
|
|
37
|
+
Or install inside a virtual environment:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
cd cli
|
|
41
|
+
python3 -m venv .venv
|
|
42
|
+
.venv/bin/pip install -e .
|
|
43
|
+
.venv/bin/playwright install chromium
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Or using the repository's `api` virtual environment:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
api/.venv/bin/pip install -e cli
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Quickstart
|
|
55
|
+
|
|
56
|
+
### 1. Initialize configuration and resume
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
katze init /path/to/your/resume.pdf
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
This creates `~/.config/jobkatze/` (override with `JOBKATZE_CONFIG_DIR`) containing:
|
|
63
|
+
- `resume.pdf` — copy of your resume uploaded to ATS file inputs
|
|
64
|
+
- `profile.yaml` — candidate answers used to auto-fill application forms
|
|
65
|
+
- `letter.typ` — Typst template for compiling cover letter PDFs
|
|
66
|
+
|
|
67
|
+
### 2. Edit your pre-filled form answers (`katze config`) or update your resume (`katze resume`)
|
|
68
|
+
|
|
69
|
+
Modify your profile interactively in the terminal UI, set individual fields directly, or open in `$EDITOR`:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# Interactive terminal UI (select field by # or name, 'a' for all, 'e' for $EDITOR)
|
|
73
|
+
katze config
|
|
74
|
+
|
|
75
|
+
# Set fields directly from the command line
|
|
76
|
+
katze config --set city=Munich --set salary_expectation_eur=95000
|
|
77
|
+
|
|
78
|
+
# Show current configuration table
|
|
79
|
+
katze config --show
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Update your resume at any time (copies into `~/.config/jobkatze/resume.pdf` and syncs to backend):
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Inspect active resume path and file status
|
|
86
|
+
katze resume
|
|
87
|
+
|
|
88
|
+
# Choose a PDF via native macOS Finder dialog
|
|
89
|
+
katze resume --finder
|
|
90
|
+
|
|
91
|
+
# Copy a specific PDF into ~/.config/jobkatze/resume.pdf and sync to backend
|
|
92
|
+
katze resume /path/to/new_resume.pdf
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 3. Interactive Shell & Command Guides (`katze`)
|
|
96
|
+
|
|
97
|
+
Launch the full interactive shell with in-place screen switching, `↑`/`↓` arrow keys, and command suggestions:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
# Launch interactive shell
|
|
101
|
+
katze
|
|
102
|
+
|
|
103
|
+
# View quick reference guide anytime
|
|
104
|
+
katze help
|
|
105
|
+
|
|
106
|
+
# View dedicated guide for a specific command
|
|
107
|
+
katze help resume
|
|
108
|
+
katze help apply
|
|
109
|
+
katze help login
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Inside the interactive shell:
|
|
113
|
+
- Type `/` to open the command suggestion menu.
|
|
114
|
+
- Use `↑`/`↓` arrow keys or `Tab` to navigate options and press `Enter` to select.
|
|
115
|
+
- Each command has its own screen with step-by-step guidance and actions.
|
|
116
|
+
- Screens switch in place without filling up terminal scrollback. Press `Esc` or `/back` to return to the main menu, and `q` or `/quit` to exit.
|
|
117
|
+
|
|
118
|
+
### 4. Log in to JobKatze
|
|
119
|
+
|
|
120
|
+
Authenticate seamlessly through your web browser or command line:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# Browser login: opens JobKatze web app to authorize in 1 click
|
|
124
|
+
katze login
|
|
125
|
+
|
|
126
|
+
# Headless login with email and password
|
|
127
|
+
katze login --email you@example.com --password secret
|
|
128
|
+
|
|
129
|
+
# Local devserver (http://localhost:7071/api)
|
|
130
|
+
katze login --local
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
When running `katze login`, your default browser opens the authorization page. If you are already logged in to JobKatze in your browser, click **Authorize katze** to connect immediately without retyping credentials.
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Commands
|
|
138
|
+
|
|
139
|
+
### `katze apply` — Open and pre-fill application tabs in Chrome
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
# Apply to jobs you bookmarked ("Saved") on JobKatze Web
|
|
143
|
+
katze apply --from saved --limit 5
|
|
144
|
+
|
|
145
|
+
# Pull top resume-matched jobs from direct ATS boards (Greenhouse, Personio, Ashby, Lever, Recruitee, Workable)
|
|
146
|
+
katze apply --from match --limit 5
|
|
147
|
+
|
|
148
|
+
# Filter by specific ATS platform(s)
|
|
149
|
+
katze apply --from match --source greenhouse,personio,ashby --limit 5
|
|
150
|
+
|
|
151
|
+
# Apply to a single job ID
|
|
152
|
+
katze apply --job <job_id>
|
|
153
|
+
|
|
154
|
+
# Regenerate cover letters even if cached locally
|
|
155
|
+
katze apply --job <job_id> --regen
|
|
156
|
+
|
|
157
|
+
# Prompt immediately in the terminal for submission confirmation
|
|
158
|
+
katze apply --from saved --prompt
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
#### How persistent Chrome tabs work
|
|
162
|
+
- `katze apply` launches a detached Chrome process using `~/.config/jobkatze/chrome-profile` on `--remote-debugging-port=9222` and connects via Chrome DevTools Protocol (CDP).
|
|
163
|
+
- When `katze apply` exits, **all Chrome tabs stay open**.
|
|
164
|
+
- Running `katze apply` again attaches to the same Chrome window and appends new tabs next to your existing ones.
|
|
165
|
+
- Each tab title is prefixed with:
|
|
166
|
+
- `[READY] Company - Role` when 0 mandatory fields remain unfilled.
|
|
167
|
+
- `[NEEDS N] Company - Role` when `N` mandatory fields need manual input (outlined in amber `2px solid #e08b00` on the page).
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
### `katze confirm` — Mark submitted tabs as `applied`
|
|
172
|
+
|
|
173
|
+
After reviewing open tabs and clicking **Submit** in Chrome, sync your submission status back to JobKatze Web:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
# Interactively confirm each pending tab [y/N]
|
|
177
|
+
katze confirm
|
|
178
|
+
|
|
179
|
+
# Mark all pending tabs as applied without prompting
|
|
180
|
+
katze confirm --all
|
|
181
|
+
|
|
182
|
+
# Mark a specific job ID as applied
|
|
183
|
+
katze confirm --job <job_id>
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
### `katze letter` — Generate a tailored cover letter PDF only
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
# Generate ~/.config/jobkatze/applications/<job_id>/cover_letter.{txt,pdf}
|
|
192
|
+
katze letter <job_id>
|
|
193
|
+
|
|
194
|
+
# Pass a custom angle or instruction to the agent
|
|
195
|
+
katze letter <job_id> --hint "Emphasize distributed systems and Kubernetes experience"
|
|
196
|
+
|
|
197
|
+
# Overwrite an existing letter
|
|
198
|
+
katze letter <job_id> --regen
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
### `katze questions` — Harvest & analyze mandatory ATS questions
|
|
204
|
+
|
|
205
|
+
Scan application forms over plain HTTP (no browser required) to inspect what mandatory questions companies ask and verify what percentage of fields your `profile.yaml` covers:
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
# Scan mandatory questions across top 25 resume-matched direct-ATS jobs
|
|
209
|
+
katze questions scan --from match --limit 25
|
|
210
|
+
|
|
211
|
+
# Scan mandatory questions across your saved jobs
|
|
212
|
+
katze questions scan --from saved --limit 25
|
|
213
|
+
|
|
214
|
+
# View the cumulative frequency and profile coverage report from ~/.config/jobkatze/questions.jsonl
|
|
215
|
+
katze questions report
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Local Files (`~/.config/jobkatze/`)
|
|
221
|
+
|
|
222
|
+
| Path | Purpose |
|
|
223
|
+
| :--- | :--- |
|
|
224
|
+
| `config.toml` | API base URL and authentication token (`0600` permissions) |
|
|
225
|
+
| `profile.yaml` | Pre-filled candidate answers for text inputs, dropdowns, radio groups, and checkboxes |
|
|
226
|
+
| `resume.pdf` | Candidate CV uploaded to file inputs |
|
|
227
|
+
| `letter.typ` | Typst template compiled for each cover letter |
|
|
228
|
+
| `applications/<job_id>/cover_letter.txt` | Plain-text cover letter generated by `agy` |
|
|
229
|
+
| `applications/<job_id>/cover_letter.pdf` | Compiled PDF cover letter uploaded to ATS forms |
|
|
230
|
+
| `questions.jsonl` | Deduplicated log of observed mandatory ATS form questions |
|
|
231
|
+
| `pending_tabs.json` | Queue of open tabs awaiting `katze confirm` |
|
|
232
|
+
| `chrome-profile/` | Persistent Chromium user data directory |
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## Running Tests
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
PYTHONPATH=cli api/.venv/bin/pytest cli/tests/
|
|
240
|
+
```
|