From job-apply
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.
How this skill is triggered — by the user, by Claude, or both
Slash command
/job-apply:job-searchThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
A 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.
A 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 /job-apply:answer-memory: run python3 "${CLAUDE_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. Run
/job-apply:job-preferencesfirst 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
tabs_context_mcptabs_create_mcphttps://www.linkedin.com/jobs/read_page to check for profile menu. If not logged in, say: "Please log into LinkedIn in this browser tab, then let me know when you're ready." and wait.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:
read_page to read job cards from results listcomputer with left_clickfind with query "connections work here" or "connections at"find with query "Meet the hiring team" or "hiring manager"LinkedIn uses infinite scroll:
computer with action "scroll", scroll_direction "down"read_page to see newly loaded cardsWebSearch to search for: "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: URL
For 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/searchread_page to check for profile avatar or compose button. If not logged in, skip Twitter entirely and continue with other sources. Report: "Skipped Twitter — not logged in."Construct 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:reply
Map 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
Claude: [Loads preferences, searches LinkedIn + HN + Twitter, displays ranked results]
With time range override:
User: /job-apply:job-search 2 weeks
Claude: [Uses 2-week time range instead of default]
Single source:
User: /job-apply:job-search hn
Claude: [Searches only Hacker News Who's Hiring]
Multiple source filter:
User: /job-apply:job-search linkedin hn
Claude: [Searches LinkedIn and HN, skips Twitter]
With extra keywords:
User: /job-apply:job-search agentic systems
Claude: [Adds "agentic systems" to title-based keywords]
npx claudepluginhub hussainronaque/job-apply-plugin --plugin job-applyCreates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.