LinkedIn Job Search
MadsLorentzen/ai-job-search
Searches LinkedIn's public job listings for any location or remote work and fetches the full description of a posting, with no login or API key.
Search LinkedIn, Hacker News, and Twitter/X for jobs with connections, hiring manager insights, and preference-based scoring.
$ npx skills add neonwatty/job-apply-plugin --skill job-search -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install neonwatty/job-apply-plugin job-search --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/neonwatty/job-apply-plugin.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/job-search .claude/skills/job-search && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "job-search" agent skill from https://github.com/neonwatty/job-apply-plugin/tree/main/skills/job-search into .claude/skills/job-search/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "job-search", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/neonwatty/job-apply-plugin/tree/main/skills/job-searchType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add neonwatty/job-apply-plugin --skill job-search -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install neonwatty/job-apply-plugin job-search --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/neonwatty/job-apply-plugin.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/job-search .agents/skills/job-search && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "job-search" agent skill from https://github.com/neonwatty/job-apply-plugin/tree/main/skills/job-search into .agents/skills/job-search/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "job-search", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add neonwatty/job-apply-plugin --skill job-search -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install neonwatty/job-apply-plugin job-search --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/neonwatty/job-apply-plugin.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/job-search .cursor/skills/job-search && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "job-search" agent skill from https://github.com/neonwatty/job-apply-plugin/tree/main/skills/job-search into .cursor/skills/job-search/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "job-search", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/neonwatty/job-apply-plugin.git --path skills/job-search--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add neonwatty/job-apply-plugin --skill job-search -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install neonwatty/job-apply-plugin job-search --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/neonwatty/job-apply-plugin.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/job-search .gemini/skills/job-search && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "job-search" agent skill from https://github.com/neonwatty/job-apply-plugin/tree/main/skills/job-search into .gemini/skills/job-search/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "job-search", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install neonwatty/job-apply-plugin job-searchInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add neonwatty/job-apply-plugin --skill job-search -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/neonwatty/job-apply-plugin.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/job-search .github/skills/job-search && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "job-search" agent skill from https://github.com/neonwatty/job-apply-plugin/tree/main/skills/job-search into .github/skills/job-search/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "job-search", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add neonwatty/job-apply-plugin --skill job-search -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install neonwatty/job-apply-plugin job-search --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/neonwatty/job-apply-plugin.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/job-search .opencode/skills/job-search && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "job-search" agent skill from https://github.com/neonwatty/job-apply-plugin/tree/main/skills/job-search into .opencode/skills/job-search/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "job-search", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
job-searchSearch LinkedIn, Hacker News, and Twitter/X for jobs with connections, hiring manager insights, and preference-based scoring.
Job Search is an agent skill from neonwatty/job-apply-plugin. Search LinkedIn, Hacker News, and Twitter/X for jobs with connections, hiring manager insights, and preference-based scoring. Use when the user wants to find jobs, search for positions, or explore job opportunities.
Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Business, Finance & HR, covering Job search and resumes. It works with LinkedIn and X (Twitter). The repository describes itself as: AI-powered job application assistant for Claude Code and Codex - fills LinkedIn, Greenhouse, Ashby, and Workday applications. The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 370204c. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadWriteBashWebSearchWebFetchmcp__claude-in-chrome__*From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
curlsfpython3From the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
linkedin.comhacker-news.firebaseio.comnews.ycombinator.comx.comcoolstartup.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Job Search loads about 3.5k tokens when it runs. Until then it costs about 57 tokens; SKILL.md has 1,325 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Read, Write, Bash, WebSearch, WebFetch, mcp__claude-in-chrome__*Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from neonwatty/job-apply-plugin at commit 370204c, republished under its MIT licence (© neonwatty). 1,325 words, ~3,451 tokens.
.claude/skills/job-search/SKILL.md (or your agent's skills folder).A Codex and Claude Code skill for searching jobs across LinkedIn, Hacker News Who's Hiring, and Twitter/X. Scores and ranks results against your saved preferences, highlights network advantages, and saves structured output.
Follow the bundled answer-memory skill ($job-apply:answer-memory in Codex; /job-apply:answer-memory in Claude Code). Resolve <plugin-root> as that skill directs, run python3 "<plugin-root>/scripts/job-apply-store.py" init, load preferences with preferences-get, and load location or other profile facts with profile-get. Never read or write persistent Job Apply files directly.
If no preferences found, say:
No search preferences found. Invoke the bundled
job-preferencesskill first to set your target titles, salary range, and filters.
Then STOP. Do not prompt the user to set preferences inline.
If preferences exist, load them:
{
"targetTitles": ["Staff AI Engineer", "Principal ML Engineer"],
"minBaseSalary": "$250K",
"remotePreference": "remote only",
"excludePatterns": ["junior", "associate", "intern", "entry level"],
"defaultTimeRange": "last week"
}The user may pass overrides when invoking the skill:
last week, 2 weeks, month — overrides defaultTimeRangelinkedin, hn, twitter, or any combination — limits which sources to query (default: all three)targetTitlesDisplay the active search config before proceeding:
Search config:
- Titles: Staff AI Engineer, Principal ML Engineer
- Salary floor: $250K
- Remote: Remote only
- Exclude: junior, associate, intern, entry level
- Time range: last week
- Sources: LinkedIn, HN, Twitter
https://www.linkedin.com/jobs/Base URL: https://www.linkedin.com/jobs/search/
| Parameter | Purpose | Values |
|---|---|---|
keywords | Search terms | URL-encoded from targetTitles |
location | Geographic area | From profile location |
f_WT | Work type | 1 (on-site), 2 (hybrid), 3 (remote) |
f_TPR | Time posted | r604800 (week), r1209600 (2 weeks), r2592000 (month) |
f_E | Experience level | 4 (mid-senior), 5 (director), 6 (executive) |
f_JIYN | In your network | true |
sortBy | Sort order | DD (date) |
Map remotePreference:
f_WT=3f_WT=2,3f_WT=2,3f_WTMap time range:
f_TPR=r604800f_TPR=r1209600f_TPR=r2592000For each job card:
LinkedIn uses infinite scroll:
"Ask HN: Who is hiring?" site:news.ycombinator.com {current_month} {current_year}https://news.ycombinator.com/item?id=XXXXXXXX → XXXXXXXX)If no thread found for the current month, try the previous month. If still nothing, skip HN and report it.
curl -s "https://hacker-news.firebaseio.com/v0/item/{THREAD_ID}.json"kids array — these are top-level comment IDs (job postings)curl -s "https://hacker-news.firebaseio.com/v0/item/{COMMENT_ID}.json"HN Who's Hiring comments typically follow this format in the text field:
Company Name | Role Title | Location | Remote | Salary Range
Description text...
Apply: URLFor each comment:
$XXXk-$XXXk, $XXX,XXX)Skip comments that:
targetTitles (fuzzy match — "AI Engineer" matches "Staff AI Engineer")excludePatternsremotePreference (if "remote only", skip non-remote postings)minBaseSalary (if salary is listed)https://x.com/searchConstruct a Twitter advanced search query:
("hiring" OR "open role" OR "we're hiring" OR "join our team") ("AI engineer" OR "ML engineer" OR "{title1}" OR "{title2}") ("remote") since:YYYY-MM-DD -is:replyMap time range to since: date:
Apply the same filtering as HN — title match, exclude patterns, remote, salary if mentioned.
If Twitter is inaccessible, rate-limited, or not logged in — skip entirely and continue. Report which sources succeeded and failed at the end.
For LinkedIn results that passed initial filtering, extract additional network signals:
This data feeds into the scoring in Phase 4.
Score every result on a 0-100 normalized scale.
| Category | Points | Applies to |
|---|---|---|
| Title match (exact vs partial) | 0-20 | All sources |
| Salary meets/exceeds floor | 0-10 | All sources |
| Remote preference match | 0-10 | All sources |
| Recency (newer = higher) | 0-5 | All sources |
| Low competition (<50 applicants) | 0-5 | All sources |
| Hiring manager listed | 20 | LinkedIn only |
| 1st-degree connections | 15 | LinkedIn only |
| 2nd-degree or alumni connections | 10 | LinkedIn only |
| Easy Apply available | 5 | LinkedIn only |
| Salary explicitly listed | 10 | HN only |
| Application URL provided | 10 | HN only |
| High engagement (50+ likes) | 10 | Twitter only |
Max possible per source: LinkedIn 100, HN 80, Twitter 70.
Normalize all scores to 0-100:
raw_scoreraw_score * (100 / 80)raw_score * (100 / 70)Round to nearest integer. Sort all results by normalized score descending.
============================================================
Multi-Source Job Search Results
============================================================
Titles: Staff AI Engineer, Principal ML Engineer
Filters: Remote only | Last week | Salary >= $250K
Sources: LinkedIn (12), HN (8), Twitter (5)
Total: 25 results | Showing top 25 by score
============================================================
Score | Source | Title | Company | Salary | Location | Signals
----- | -------- | ---------------------------- | ------------- | -------- | --------------- | --------------------------
92 | LinkedIn | Staff AI Engineer | Acme Corp | $280K | Remote | Hiring mgr, 2 connections
87 | LinkedIn | Principal ML Engineer | TechStart | $300K | SF (Remote OK) | 5 connections, Easy Apply
81 | HN | AI Engineer (Staff) | CoolStartup | $250-300K| Remote | Salary listed, Apply URL
76 | Twitter | Head of AI | DataCo | — | Remote | 120 likes
...
============================================================
Summary
- 4 with hiring managers | 8 with connections
- 3 sources queried | 0 failed
- Saved to: ~/.claude-job-searches/search-2026-02-28T14-30-00.md
============================================================Save full details to ~/.claude-job-searches/search-{timestamp}.md:
# Job Search Results — 2026-02-28
## Search Parameters
- Titles: Staff AI Engineer, Principal ML Engineer
- Salary floor: $250K
- Remote: Remote only
- Time range: Last week
- Sources: LinkedIn, HN, Twitter
## Results (ranked by score)
### 1. Staff AI Engineer — Acme Corp (Score: 92)
- **Source**: LinkedIn
- **Location**: Remote
- **Salary**: $280K
- **Posted**: 2 days ago | 45 applicants
- **Hiring Manager**: Jane Smith (Engineering Manager) — linkedin.com/in/janesmith
- **Connections**: 2 (John Doe, Sarah Lee)
- **Apply**: Easy Apply
- **URL**: https://linkedin.com/jobs/view/123456
### 2. AI Engineer (Staff) — CoolStartup (Score: 81)
- **Source**: Hacker News
- **Location**: Remote
- **Salary**: $250-300K
- **Description**: Building next-gen AI infrastructure...
- **Apply**: https://coolstartup.com/careers/ai-engineer
...Create the ~/.claude-job-searches/ directory if it doesn't exist.
If any results scored 70+, ask the user:
{N} jobs scored 70+. Would you like me to add them to your application queue at
~/Desktop/jobs/application_queue.md?
If confirmed, append to application_queue.md under a new "## Tier 3 — Auto-Discovered" section:
## Tier 3 — Auto-Discovered
| Score | Source | Role | Company | URL | Status |
|-------|--------|------|---------|-----|--------|
| 92 | LinkedIn | Staff AI Engineer | Acme Corp | [link](https://...) | New |
| 81 | HN | AI Engineer (Staff) | CoolStartup | [link](https://...) | New |Never modify application_queue.md without explicit user confirmation.
https://hacker-news.firebaseio.com/v0/ endpoints.Standard search (all sources):
User: $job-apply:job-search (Codex) or /job-apply:job-search (Claude Code)
Agent: [Loads preferences, searches LinkedIn + HN + Twitter, displays ranked results]With time range override:
User: Invoke job-search with "2 weeks"
Agent: [Uses 2-week time range instead of default]Single source:
User: Invoke job-search with "hn"
Agent: [Searches only Hacker News Who's Hiring]Multiple source filter:
User: Invoke job-search with "linkedin hn"
Agent: [Searches LinkedIn and HN, skips Twitter]With extra keywords:
User: Invoke job-search with "agentic systems"
Agent: [Adds "agentic systems" to title-based keywords]© neonwatty, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/job-search of neonwatty/job-apply-plugin.
Open the folder on GitHubat commit 370204c
Job Search next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Job Search this skillneonwatty/job-apply-plugin | 119 | — | ~3.5k | Automated safety check: Notes | MIT | |
| LinkedIn Job SearchMadsLorentzen/ai-job-search | 45k | — | ~1.2k | Automated safety check: Pass | MIT | |
| Job Application Managerreactive-resume/reactive-resume | 44k | — | ~13k | Automated safety check: Pass | MIT | |
| Job Posting ScraperMadsLorentzen/ai-job-search | 45k | — | ~5.7k | Automated safety check: Pass | MIT | |
| Linkedin Job Search Skillyanliudesign/offer-toolkit-skill | 520 | — | ~1k | Automated safety check: Pass | MIT | |
| Job Huntrebecha1227-a11y/CareerForge | 323 | — | ~2k | Automated safety check: Warn | None |
MadsLorentzen/ai-job-search
Searches LinkedIn's public job listings for any location or remote work and fetches the full description of a posting, with no login or API key.
reactive-resume/reactive-resume
Runs the job-search pipeline. An agent skill from reactive-resume/reactive-resume.
MadsLorentzen/ai-job-search
Finds new job postings that match your profile through installed portal-search CLIs, dedupes against past runs and your application tracker, and rates each one's fit.
yanliudesign/offer-toolkit-skill
LinkedIn 岗位发现与匹配排序。根据用户给的一份种子 JD 和简历,提取目标岗位画像,自动生成多组 LinkedIn Jobs 搜索,采集、去重并按证据给岗位分层,最终输出可直接投递的 shortlist。用户说‘帮我找工作’、‘在 LinkedIn 搜适合我的岗位’、‘找相似职位’、‘根据简历推荐岗位’、‘job search’、‘find jobs like…
rebecha1227-a11y/CareerForge
AI 岗位猎手。基于用户简历,自动在各大招聘平台搜索匹配岗位,输出带匹配度评估的岗位列表. An agent skill from rebecha1227-a11y/CareerForge.
browser-act/skills
Search LinkedIn job listings and extract full job details. An agent skill from browser-act/skills.
neonwatty/job-apply-plugin
Storage contract for the Job Apply plugin: manages the local applicant profile, reusable answers, application history and resumable sessions through a bundled helper script.
neonwatty/job-apply-plugin
Fills out job applications on LinkedIn Easy Apply, Greenhouse, Ashby, Lever, Rippling and Workday from your stored profile, using visible browser automation.
neonwatty/job-apply-plugin
Saves your target titles, minimum salary, remote preference and exclusion filters once, so the other Job Apply skills reuse them for every search.
Works with
Categories
Search LinkedIn, Hacker News, and Twitter/X for jobs with connections, hiring manager insights, and preference-based scoring. Job Search is an agent skill from neonwatty/job-apply-plugin. Search LinkedIn, Hacker News, and Twitter/X for jobs with connections, hiring manager insights, and preference-based scoring.
Job Search fits situations like: the user wants to find jobs; search for positions; explore job opportunities.
Run `npx skills add neonwatty/job-apply-plugin --skill job-search -a claude-code`. Or copy the skill folder (skills/job-search in neonwatty/job-apply-plugin) into .claude/skills/job-search in your project. Claude Code loads it when a task matches its description.
Run `npx skills add neonwatty/job-apply-plugin --skill job-search -a codex`. Or copy the skill folder (skills/job-search in neonwatty/job-apply-plugin) into .agents/skills/job-search in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add neonwatty/job-apply-plugin --skill job-search -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/job-search, .gemini/skills/job-search, .github/skills/job-search and .opencode/skills/job-search in your project.
Going by SKILL.md and its folder, Job Search needs the command-line tools its instructions call (curl, sf and python3). Our summary lists: Python 3. Its frontmatter pre-approves these tools: Read, Write, Bash, WebSearch, WebFetch, mcp__claude-in-chrome__*.
SKILL.md names 5 domains. In commands or code: linkedin.com, hacker-news.firebaseio.com, news.ycombinator.com, x.com and coolstartup.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Job Search is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Job Search: LinkedIn Job Search (MadsLorentzen/ai-job-search, 45k stars), Job Application Manager (reactive-resume/reactive-resume, 44k stars), Job Posting Scraper (MadsLorentzen/ai-job-search, 45k stars) and Linkedin Job Search Skill (yanliudesign/offer-toolkit-skill, 520 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
neonwatty (a GitHub user) maintains it in neonwatty/job-apply-plugin, which has 119 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 9, 2026.
Source: neonwatty/job-apply-plugin on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.