Keywords: lm studio plugin, job search ai, application tracker, resume matcher, cover letter generator, local ai job tracker, no cloud, private job search, work permit checker
A comprehensive job search assistant plugin that runs directly inside LM Studio. Search listings, track applications, analyse job descriptions, verify companies, generate cover letters, and navigate international work permits β all from a single chat session.
cd job-search-plugin npm install npm run build # compile TypeScript β JS lms push # push to LM Studio
For live development (auto-recompile on save):
npm run dev
Open Settings β Plugins β job-search in LM Studio to configure:
| Setting | Default | Description |
|---|---|---|
| Data Path | ~/job-search-data | Directory where applications.json is stored |
| Resume File Path | (blank) | Path to your resume (plain text or Markdown). Used by match_resume_to_job and generate_cover_letter |
| Max Search Results | 8 | Results returned per search query (3β20) |
| Preferred Job Location | India | Default location for searches when none is specified |
| Home Country | India | Used to detect international roles automatically |
| Citizenship | Indian | Used by check_work_permit to determine visa eligibility |
search_jobsSearch for job listings across 7 channels via the channel parameter.
channel | What it searches |
|---|---|
boards (default) | Indian job boards: Naukri, Foundit, Instahyre, IIMJobs, LinkedIn India, Wellfound, Shine. International when location is overseas |
company | Company culture, reviews, recent news, funding, team size, and tech stack |
hidden | Unadvertised opportunities: LinkedIn/Twitter hiring posts, direct career pages, HN Who's Hiring, referral signals |
remote | Remote-friendly boards: Remotive, Remote OK, and global boards |
funded | Recently funded startups (seed β Series C) that are actively hiring |
government | Government and public-sector listings |
academic | Universities, research labs, national labs, and academic institutions |
fetch_job_pageFetch and parse a job posting page from a URL. Strips HTML and returns clean text. Use after search_jobs to get the full job description before saving it.
scan_portalsSearch ATS-hosted job listings and AI-company portals.
All applications are stored in a local applications.json file in your configured data directory.
manage_applicationCreate, update, retrieve, delete applications, and log interview rounds β all in one tool.
list_applicationsList all tracked applications with pipeline stats. Supports filtering by:
status β saved / applied / interview / offer / rejected / withdrawn / allsearch β keyword in company or role nameinternationalOnly β show only cross-border applicationsworkPermitStatus β filter by visa/permit statusapplication_insightsTiming, follow-up, and analytics in one tool.
Urgency reference:
| Days since posted | Urgency | Callback rate |
|---|---|---|
| 0β2 days | CRITICAL | 2β3Γ higher |
| 3β7 days | HIGH | 1.5β2Γ |
| 8β14 days | MEDIUM | ~1Γ |
| 15β30 days | LOW | 0.3β0.6Γ |
| 30+ days | STALE | ~0Γ |
salaryTotal compensation calculator and market rate lookup in one tool.
export_applicationsExport your pipeline to disk.
analyze_job_descriptionAnalyse a raw job description and extract:
match_resume_to_jobCompare your resume against a job description. Returns:
Reads your resume from the configured Resume File Path or accepts inline text.
verify_company_legitimacyScore a company's legitimacy (0β100) before applying. Checks:
Returns a LIKELY LEGITIMATE / UNCERTAIN / SUSPICIOUS / HIGH RISK verdict with red flags, green flags, and a verification checklist.
read_resumeRead and parse a resume file (PDF, TXT, or Markdown). If no path is provided, reads from the configured Resume File Path in plugin settings. Use this first when the user shares a resume path before searching or analysing fit.
generate_cover_letterGenerate a tailored cover letter (under 350 words) with a hook opening, specific company interest, 2β3 achievements with numbers, and a confident close. Reads resume from configured path or inline text.
generate_resume_bulletsGenerate achievement-oriented resume bullet points using the "Accomplished X by doing Y, resulting in Z" format. Accepts rough notes and tailors bullets to a target role.
prepare_interview_questionsGenerate role-specific interview questions with answer frameworks for: phone screen, technical, behavioural, system design, or final rounds.
Track professional contacts independent of specific applications β for building referral pipelines, warming up connections, and managing follow-ups.
manage_networkFull network contact management in one tool.
manage_saved_searchSave, run, list, and delete job search queries.
manage_contactsAdd, remove, or list contacts tied to a specific tracked application (recruiters, hiring managers, referrals). For standalone network contacts not tied to an application, use manage_network.
job_settingsPlugin configuration helpers.
check_work_permitFull work permit and visa guide for Indian citizens (or your configured citizenship) for 9 major destination countries.
| Country | Difficulty | Primary Visa | Sponsorship |
|---|---|---|---|
| USA | Very Hard | H-1B (annual lottery) | Required |
| UK | Moderate | Skilled Worker Visa | Required |
| Canada | Moderate | Express Entry / Global Talent Stream | Optional |
| Australia | Moderate | TSS 482 / Skilled Independent 189 | Depends |
| Germany | Moderate | EU Blue Card / Chancenkarte | Required |
| Singapore | Easy | Employment Pass (EP) | Required |
| UAE | Easy | Employment Visa / Green Visa | Required |
| Netherlands | Easy | Highly Skilled Migrant (HSM) | Required |
| Japan | Hard | Engineer Visa / HSP | Required |
Returns visa types, salary thresholds, processing times, eligibility conditions, restrictions, and an action plan. Also runs a live web search for recent policy changes. Optionally saves permit status back to an application record.
daily_briefingMorning check-in: runs follow-ups, stale detection, saved searches, and pipeline stats in one call. Returns a combined briefing with action items.
compare_jobsSide-by-side comparison of 2β5 tracked applications. Compares salary, location, status, fit indicators, legitimacy score, contacts, and interview progress.
batch_update_applicationsBulk-update multiple applications at once. Useful for withdrawing stale applications, marking multiple as rejected, or appending notes to a group.
All data is stored locally in a single JSON file:
Each application stores: company, role, location, country, isInternational, status, dates, job description, contacts, salary, total comp, work permit status, and follow-up date.
MIT
false |
| Global toggle β when off, international searches are blocked to keep results focused |
Parameters:
query β Role, skills, or keywords
channel β boards | company | hidden | remote | funded | government | academic (default: boards)
location β e.g. "Bangalore", "Remote India", "USA" (blank = use setting)
includeInternationalβ Override international toggle for this search
jobType β any | full_time | part_time | contract | internship | remote
max β Max results (overrides plugin setting)
strategy β all | hiring_posts | career_pages | referral_network | hn_whoishiring | wellfound | yc_startups | reddit | product_hunt | regional | tech_contract | dev_community
source β all | remotive | remoteok | boards (for remote channel)
stage β seed | series_a | series_b | series_c | any (for funded channel)
sector β Industry/sector filter (e.g. "AI research", "fintech")
country β india | usa | uk | australia | eu | canada | all
region β global | india | usa | uk | europe | us | eu | remote
field β Subject area filter (for academic channel)
Parameters:
mode β single | all
single: search one specific portal
all: scan across Greenhouse, Ashby, Lever, Workable, and curated AI company boards
portal β Portal name or URL (for mode: single)
query β Role or keyword filter
Parameters:
action β add | update | get | delete | add_interview
applicationId β Required for update | get | delete | add_interview
For add / update:
company, role, url, location, status, jobDescription, notes, salary, nextStep
postedDate, followUpDate, totalComp, workPermitStatus, workPermitNotes
For add_interview:
round β Round name (e.g. "Phone Screen", "Technical Round 1")
date β YYYY-MM-DD, defaults to today
interviewerName β Name of the interviewer
interviewerRole β Title of the interviewer
questions β Key questions asked
feedback β Your notes on how it went
outcome β passed | failed | pending | unknown
Parameters:
mode β urgency | followups | stale | stats | rejections
urgency: Calculate apply urgency from posting date. Accepts natural language ("3 days ago") or YYYY-MM-DD.
postedDate β When the job was posted
applicationId β Optionally save postedDate + followUpDate back to the record
followups: Show applications with a follow-up action due within N days.
daysAhead β Days to look ahead (default: 7)
stale: Find applications with no activity in N days.
staleDays β Days before flagging (default: 14)
includeStatuses β Which statuses to check (default: applied, interview)
stats: Full pipeline dashboard β counts per status, conversion rates, average days per stage.
rejections: Analyse patterns across rejected applications (requires β₯3 rejections).
Parameters:
mode β calc | market
calc: Calculate true total comp beyond base salary.
baseSalary β Annual base
bonus β Annual bonus % of base
equityValue β Total equity/RSU value
vestingYears β Vest period (default: 4)
signingBonus β One-time signing bonus
benefitsValue β Annual benefits value
remoteStipend β Annual remote work stipend
currentComp β Current TC to compare against
market: Look up current market salary data.
role β Job title (e.g. "Senior Software Engineer")
location β Market to look up (e.g. "Bangalore", "San Francisco")
yearsOfExperience β 0 to skip
currency β e.g. INR, USD β blank to infer from location
Parameters:
format β report | csv
report: Full Markdown pipeline report with stats and per-application details
csv: All fields including status, salary, total comp, contacts, interview rounds, work permit status, legitimacy score
outputPath β Custom file path (optional β defaults to data directory)
Parameters:
action β add | update | list | log | delete | referrers
add / update:
id β Required for update
name, company, role, email, linkedIn
relationship β cold | warm | strong | referrer
source β How you met (e.g. "LinkedIn", "conference")
targetCompanies β Companies they could refer you to
tags β e.g. ["engineering", "hiring-manager"]
list:
relationship β Filter by strength
company β Filter by company
tag β Filter by tag
search β Keyword search
overdueOnly β Show only contacts with overdue follow-ups
log: Log an interaction with a contact.
id β Contact ID
summary β What happened, next steps
upgradeRelationship β Bump relationship level (default: false)
followUpInDays β Set reminder N days from now
linkApplicationId β Link to an application
delete:
id β Contact ID
referrers: Find contacts who could refer you to a company.
company β Company name to search for
Parameters:
action β save | run | list | delete
save:
name β Label (e.g. "Backend Engineer Bangalore")
query β Role, skills, or keywords
location β Location filter
jobType β any | full_time | part_time | contract | internship | remote
includeInternationalβ Whether to include international boards
run:
id β Search ID to run (blank = run all)
delete:
id β Search ID to delete
Parameters:
applicationId β Application ID
action β add | remove | list
name, role, email, linkedIn, notes
Parameters:
action β location | toggle_intl
enable β For toggle_intl: true=enable, false=disable (optional β omit to show current)
location: Detect current location via IP-based geolocation (no API key required).
Returns city, region, country, coordinates, and suggested search location.
Note: uses public IP β VPNs affect accuracy.
toggle_intl: Show current international search settings and how to change them.
To change globally: set "Open to International Roles" in plugin settings.
To override per-search: pass includeInternational: true/false on search_jobs.
Parameters:
staleDays β Days before flagging an application stale (default: 14)
followUpDays β Show follow-ups due within N days (default: 7)
Parameters:
applicationIds β Array of 2β5 application IDs
Parameters:
applicationIds β Array of application IDs
status β New status for all (optional)
rejectionReason β Reason to set on all (optional)
notes β Notes to append on all (optional)
~/job-search-data/
applications.json β all tracked applications
report-YYYY-MM-DD.md β exported reports (optional)
# 1. Find roles in Bangalore
search_jobs(query="Senior Backend Engineer", location="Bangalore")
# 2. Find remote-friendly roles
search_jobs(query="Senior Backend Engineer", channel="remote")
# 3. Find recently funded startups hiring in AI
search_jobs(query="ML Engineer", channel="funded", sector="AI research")
# 4. Read the full JD
fetch_job_page("https://...")
# 5. Analyse it
analyze_job_description("<paste JD>")
# 6. Check your fit
match_resume_to_job("<JD>", resumeText="<your resume>")
# 7. Save it
manage_application(action="add", company="Razorpay", role="Senior SDE-2", location="Bangalore")
# 8. Check urgency (posted 2 days ago)
application_insights(mode="urgency", postedDate="2 days ago", applicationId="...")
# 9. Write cover letter
generate_cover_letter(company="Razorpay", role="Senior SDE-2", jobDescription="...")
# 10. For a USA role β check visa situation
check_work_permit(destinationCountry="USA", role="Senior Backend Engineer")
# 11. See everything due for follow-up
application_insights(mode="followups", daysAhead=7)
# 12. Morning briefing
daily_briefing()
# 13. Export pipeline report
export_applications(format="report")