Local Chrome tracer for job hunting on a MacBook Air M4 (24 GB). It records pages you already opened, keeps a should-apply / continue / applied / pending pipeline on this Mac, and only then (if you ask) scores a posting against your resume with a local model.
It does not crawl career sites, click Apply, or message anyone. Opening a job is not Analyze.
seen → should apply → continue → applied → pending → completed
↘ skipped
| Status | Meaning |
|---|---|
| Seen | You opened the posting. No model ran. |
| Should apply | Queued. Reminder-eligible if the score is strong. |
| Continue | Application started, not submitted. |
| Applied | Submitted (you marked it, or a “application has been submitted” page was detected). |
| Pending | Waiting on them (OA / recruiter / loop). |
| Completed | Closed: offer / rejected / withdrawn / expired / ghosted. |
| Skipped | Not applying. |
History is an event log (visited, imported, scored, submitted, status changed). The current card is the job row.
| Action | Model |
|---|---|
| Visit, confirmation, status, filters, badge | Never |
| Visible list-card score | Keywords + vetoes only |
| Analyze / talking points / resume alternatives | Ollama (qwen3.5:9b, or 4b in light mode) |
| Staff + citizenship + years stacked | Keywords only, unless you click Analyze anyway |
Suggestions have to name a resume line. Gaps get a substitute (Kubernetes → Docker at Qure.ai; Go → Java/Spring + C++ fibers) or a hard-blocker label. Empty shrugs are dropped.
ATS boolean filters are a separate check (no model): if the JD says React.js and the CV says React, that is a spelling trap, not a missing skill. The tracker lists the exact string to put on the CV.
On this fanless 24 GB Air, Chrome + LinkedIn already use a lot of RAM. Marketing posts that say “24 GB runs Qwen 3.6 27B” assume Chrome is closed.
| Model | Size | Role |
|---|---|---|
qwen3.5:9b | 6.6 GB | Daily driver. Best small 2026 model for extraction + JSON. |
qwen3.5:4b | 3.4 GB | Light mode / visible list-card scoring. |
qwen3.5:27b / 35b / Gemma 4 26B | 16–24 GB | Do not run while browsing. Will swap and heat the Air. |
Thinking mode is off. Context is capped at 8k. Ollama unloads after 5 minutes idle.
chrome.storage.localjfa in the extension origin (not cookies, not sync, not a server)new → seen, later → should apply)chmod +x ~/job-focus-assist/scripts/setup-ollama.sh
~/job-focus-assist/scripts/setup-ollama.sh
Or by hand:
brew install ollama
launchctl setenv OLLAMA_ORIGINS "chrome-extension://*"
launchctl setenv OLLAMA_KEEP_ALIVE "5m"
launchctl setenv OLLAMA_NUM_CTX "8192"
open -a Ollama
ollama pull qwen3.5:9b
ollama pull qwen3.5:4b
Restart Chrome after setting OLLAMA_ORIGINS so the extension can reach 127.0.0.1:11434.
chrome://extensions → enable Developer mode~/job-focus-assist (the folder that now contains manifest.json)Open extension/demo/sample-job.html and click Analyze this tab.
Open extension/demo/sample-microsoft.html — the visit is saved as Seen with Eightfold ids 1970393556957799 / 200047330. The #submitted hash is a confirmation page and logs Applied.
Open extension/demo/sample-meesho.html for the Lever flow (Meesho SDE II Data): job → #apply (Continue) → #submitted (Applied). The apply and thanks URLs collapse to the same posting id.
Open extension/demo/sample-keka.html for Keka Hire (Scry AI Java Developer): visit → Seen, #submitted → Applied.
If you want the on-page chip on file:// pages, enable Allow access to file URLs on the extension’s details page.
/apply is Continue. “Application submitted!” is Applied.A daily reminder (default 20:00) fires for Should apply and Continue with score ≥ 65. Glanced-at Seen rows do not nag.
Seeded from your resume: IIT (ISM) Dhanbad CSE 8.80, Amazon SDE intern (Hyderabad), Qure.ai AI intern (Bengaluru), InferMesh, fiber scheduler, io_uring server.
<all_urls> crawl permission. Content scripts are host-allowlisted.extension/ Chrome MV3
background/ Tracer, Ollama (suggestions only), reminders
content/ Chip, extractors, Microsoft page hook
lib/ IndexedDB, pipeline, resume alternatives
popup/ On/Off + health
sidepanel/ Tracker + history
options/ Profile + model
demo/ Offline sample postings
scripts/ Icon generator + Ollama setup
node scripts/test-match.mjs
4 commits
JavaScript
85.8%
HTML
9.2%
CSS
3.4%
Python
1.1%
Local Chrome tracer for job hunting on a MacBook Air M4 (24 GB). It records pages you already opened, keeps a should-apply / continue / applied / pending pipeline on this Mac, and only then (if you ask) scores a posting against your resume with a local model.
It does not crawl career sites, click Apply, or message anyone. Opening a job is not Analyze.
seen → should apply → continue → applied → pending → completed
↘ skipped
| Status | Meaning |
|---|---|
| Seen | You opened the posting. No model ran. |
| Should apply | Queued. Reminder-eligible if the score is strong. |
| Continue | Application started, not submitted. |
| Applied | Submitted (you marked it, or a “application has been submitted” page was detected). |
| Pending | Waiting on them (OA / recruiter / loop). |
| Completed | Closed: offer / rejected / withdrawn / expired / ghosted. |
| Skipped | Not applying. |
History is an event log (visited, imported, scored, submitted, status changed). The current card is the job row.
| Action | Model |
|---|---|
| Visit, confirmation, status, filters, badge | Never |
| Visible list-card score | Keywords + vetoes only |
| Analyze / talking points / resume alternatives | Ollama (qwen3.5:9b, or 4b in light mode) |
| Staff + citizenship + years stacked | Keywords only, unless you click Analyze anyway |
Suggestions have to name a resume line. Gaps get a substitute (Kubernetes → Docker at Qure.ai; Go → Java/Spring + C++ fibers) or a hard-blocker label. Empty shrugs are dropped.
ATS boolean filters are a separate check (no model): if the JD says React.js and the CV says React, that is a spelling trap, not a missing skill. The tracker lists the exact string to put on the CV.
On this fanless 24 GB Air, Chrome + LinkedIn already use a lot of RAM. Marketing posts that say “24 GB runs Qwen 3.6 27B” assume Chrome is closed.
| Model | Size | Role |
|---|---|---|
qwen3.5:9b | 6.6 GB | Daily driver. Best small 2026 model for extraction + JSON. |
qwen3.5:4b | 3.4 GB | Light mode / visible list-card scoring. |
qwen3.5:27b / 35b / Gemma 4 26B | 16–24 GB | Do not run while browsing. Will swap and heat the Air. |
Thinking mode is off. Context is capped at 8k. Ollama unloads after 5 minutes idle.
chrome.storage.localjfa in the extension origin (not cookies, not sync, not a server)new → seen, later → should apply)chmod +x ~/job-focus-assist/scripts/setup-ollama.sh
~/job-focus-assist/scripts/setup-ollama.sh
Or by hand:
brew install ollama
launchctl setenv OLLAMA_ORIGINS "chrome-extension://*"
launchctl setenv OLLAMA_KEEP_ALIVE "5m"
launchctl setenv OLLAMA_NUM_CTX "8192"
open -a Ollama
ollama pull qwen3.5:9b
ollama pull qwen3.5:4b
Restart Chrome after setting OLLAMA_ORIGINS so the extension can reach 127.0.0.1:11434.
chrome://extensions → enable Developer mode~/job-focus-assist (the folder that now contains manifest.json)Open extension/demo/sample-job.html and click Analyze this tab.
Open extension/demo/sample-microsoft.html — the visit is saved as Seen with Eightfold ids 1970393556957799 / 200047330. The #submitted hash is a confirmation page and logs Applied.
Open extension/demo/sample-meesho.html for the Lever flow (Meesho SDE II Data): job → #apply (Continue) → #submitted (Applied). The apply and thanks URLs collapse to the same posting id.
Open extension/demo/sample-keka.html for Keka Hire (Scry AI Java Developer): visit → Seen, #submitted → Applied.
If you want the on-page chip on file:// pages, enable Allow access to file URLs on the extension’s details page.
/apply is Continue. “Application submitted!” is Applied.A daily reminder (default 20:00) fires for Should apply and Continue with score ≥ 65. Glanced-at Seen rows do not nag.
Seeded from your resume: IIT (ISM) Dhanbad CSE 8.80, Amazon SDE intern (Hyderabad), Qure.ai AI intern (Bengaluru), InferMesh, fiber scheduler, io_uring server.
<all_urls> crawl permission. Content scripts are host-allowlisted.extension/ Chrome MV3
background/ Tracer, Ollama (suggestions only), reminders
content/ Chip, extractors, Microsoft page hook
lib/ IndexedDB, pipeline, resume alternatives
popup/ On/Off + health
sidepanel/ Tracker + history
options/ Profile + model
demo/ Offline sample postings
scripts/ Icon generator + Ollama setup
node scripts/test-match.mjs
4 commits
JavaScript
85.8%
HTML
9.2%
CSS
3.4%
Python
1.1%