job-search
Skill4 starsChanged 7 months agoMITView on GitHub
Automatically browse and search for job postings on Handshake and LinkedIn. Use this skill whenever the user asks to find new jobs, search for positions, browse job boards, or says things like "search Handshake", "search LinkedIn", "find internships", or any request to discover new job opportunities. Also trigger when the user finishes a batch of applications and wants to find more positions. This skill handles the full search→screen→rank pipeline.
We split this skill into the rules it gives an agent
19 rules. 0 are common, 14 are distinctive, and 5 are very specific to this project.
0
Common
Most of the 25 edited versions we read keep these.
14
Distinctive
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 13
Run the self-check skill first: Read the user's config, profile, resume, and working folder to ensure you have up-to-date information about …
- Very specific: line 17
Read config.search.platforms to determine which platforms are enabled.
- Distinctive: line 26
Use filters to narrow results
- Very specific: line 28
Search Queries: Use config.search.target_roles — rotate through them.
- Distinctive: line 48
Check for "Next" button or page numbers
- Distinctive: line 50
Stop after 3-5 pages unless the user asks for more
- Distinctive: line 57
Add filter: Date Posted → Past Week
- Very specific: line 58
Add filter: Experience Level → config.search.job_type
- Very specific: line 59
Add filter: Location → config.location.preferred_cities
- Distinctive: line 74
When either limit is reached, report the count and stop:
- Distinctive: line 92
Collect: all scored results into a ranked list
- Distinctive: line 96
After searching, present results as a ranked table:
- Distinctive: line 124
When the user approves the APPLY list:
- Distinctive: line 128
If any application hits a blocker (file upload, CAPTCHA, unusual form), flag it and move to the next
- Very specific: line 132
Default to config.search.freshness_days (typically 7 days or fewer)
- Distinctive: line 133
If user says "find more", run a new search with different keywords or expanded location
- Distinctive: line 134
Keep track of which companies/positions have already been searched to avoid showing duplicates
- Distinctive: line 138
Before presenting a job to the user, check:
- Distinctive: line 143
If duplicate, silently skip it.
“Common” is measured: kept by at least 6 in 10 of the 25 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Job Search
Automatically browse job boards to find postings that match the user's profile. This skill handles navigation, search queries, result extraction, and feeds each result into the job-screener for evaluation.
Before Starting Any Search
Run the self-check skill first. Read the user's config, profile, resume, and working folder to ensure you have up-to-date information about skills, projects, and application history. This prevents duplicate applications and ensures search queries reflect the current profile.
Search Platforms
Read config.search.platforms to determine which platforms are enabled.
Handshake (if config.search.platforms.handshake: true)
Navigate to app.joinhandshake.com. User should already be logged in via their university.
Navigation:
- Open Handshake in a Chrome tab (use
tabs_create_mcp+navigate) - Go to Job Search:
https://app.joinhandshake.com/explore - Use filters to narrow results
Search Queries: Use config.search.target_roles — rotate through them.
Filters to Apply:
- Job Type:
config.search.job_type(default: Internship) - Posted: Last
config.search.freshness_daysdays - Location:
config.location.preferred_cities - Work Authorization: Based on
config.visa.work_permit_type
Extracting Job Details:
For each result, use get_page_text or read_page to extract:
- Company name
- Position title
- Location + remote/hybrid/onsite
- Pay rate (if listed)
- Posted date
- Key requirements from JD
- Visa/authorization requirements
Pagination:
- Handshake shows ~25 results per page
- Check for "Next" button or page numbers
- Process all results on current page before moving to next
- Stop after 3-5 pages unless the user asks for more
LinkedIn (if config.search.platforms.linkedin: true)
LinkedIn job search at linkedin.com/jobs/.
Search Queries: Same config.search.target_roles list.
- Add filter: Date Posted → Past Week
- Add filter: Experience Level →
config.search.job_type - Add filter: Location →
config.location.preferred_cities
Rate Limiting Warning: LinkedIn has aggressive bot detection. Take screenshots between actions and don't rapid-fire clicks. If you encounter a CAPTCHA or "unusual activity" warning, stop immediately and tell the user. Never attempt to bypass these systems.
Indeed / Glassdoor (if enabled in config)
These platforms can also be searched using similar patterns. Navigate to their job search pages, apply the same filters, and extract JDs. Note that Indeed and Glassdoor may have different page structures — take screenshots to verify form elements before interacting.
Run Limits (Token Usage Control)
Read config.search.max_jobs_per_run and config.search.max_apply_per_run before starting.
- max_jobs_per_run (default 10): Stop searching and scoring after this many jobs have been fully evaluated. Quick-filtered jobs (obviously irrelevant) do NOT count toward this limit.
- max_apply_per_run (default 3): In batch application mode, stop after submitting this many applications. The full cover-letter debate + form-filling pipeline is token-intensive — this prevents runaway usage.
When either limit is reached, report the count and stop:
Reached search limit: [N] jobs scored this run.
Remaining results can be searched in the next session.The user can override by saying "keep going" or "find more".
Search→Screen Pipeline
For each job found:
- Extract the JD text (use
get_page_text) - Quick-filter — immediately skip if:
- Title contains: "Graphic Design", "Mechanical", "Civil", "Chemical", "Nursing", "Accounting" (obviously irrelevant)
- Requires: "US Citizen only", "Security Clearance", "Permanent Resident only"
- School-specific: "Only open to [specific school] students" (unless it's BU)
- Score using the job-screener rubric (inline, don't need to invoke separate skill)
- Collect all scored results into a ranked list
Output Format
After searching, present results as a ranked table:
## Handshake Search Results — [Date]
| # | Company | Position | Score | Decision | Notes |
|---|---------|----------|-------|----------|-------|
| 1 | [name] | [title] | 9.1 | APPLY | Strong match, CPT ok |
| 2 | [name] | [title] | 8.7 | APPLY | Good fit, NYC onsite |
| 3 | [name] | [title] | 7.8 | ASK | Borderline — [reason] |
| 4 | [name] | [title] | 6.2 | SKIP | [reason] |
...
### Ready to Apply (≥8.5):
1. [Company] — [Position] (Score: X.X)
2. [Company] — [Position] (Score: X.X)
### Borderline (7.5-8.4) — Need the user's Decision:
1. [Company] — [Position] (Score: X.X) — [why borderline]
### Skipped (<7.5):
[count] positions skipped. Top reason: [most common skip reason]Batch Application Mode
Respect config.search.max_apply_per_run (default 3). Each full application (CL debate + form fill) is token-heavy. Stop after hitting the limit and report remaining positions for the next session.
When the user approves the APPLY list:
- Process each position sequentially (up to max_apply_per_run)
- For each: check cover letter requirement → write CL if needed → fill application
- Track progress and report after each submission
- If any application hits a blocker (file upload, CAPTCHA, unusual form), flag it and move to the next
Search Frequency
- Default to
config.search.freshness_days(typically 7 days or fewer) - If user says "find more", run a new search with different keywords or expanded location
- Keep track of which companies/positions have already been searched to avoid showing duplicates
Duplicate Detection
Before presenting a job to the user, check:
- Has this exact position been scored before in this session?
- Does the company + title match anything in the Job Tracker spreadsheet in
config.files.tracker_dir? - Has the user already applied (check cover letter PDFs in
config.files.cover_letter_dir)?
If duplicate, silently skip it.
Other versions28 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 28
- proficientlyjobs/proficiently-claude-skills★ 389same name
- neonwatty/job-apply-plugin★ 132same name
- thesun4sky/jobstack★ 50same name
- squerne/open-career-skills★ 26same name
- muggl3mind/career-manager★ 24same name
- ua-job-search/job-search-skill★ 9same name
- Gianni03/gianni-skills★ 7same name
- gagangulyani/job-search-skill★ 4same name
- theYahia/hh-mcp★ 4same name
- vortex178/trawlnet★ 4same name
18 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
Used alongsideProjects with it also use interview-prep, company-research and 1 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
AnthropicSkillinterview-prep
Create structured interview plans with competency-based questions and scorecards. Trigger with "interview plan for", "interview questions for", "how should we interview", "scorecard for", or when the user is preparing to interview candidates.
Also in 8 projects that use this
claude-office-skillsSkillcompany-research
Conduct comprehensive company research and due diligence. Analyze business model, competitive landscape, management, and market position.
Also in 3 projects that use this
claude-office-skillsSkillresume-tailor
>
Also in 3 projects that use this
In this repository5 other files it gives its agents.
- application-fillerSkill
- application-trackerSkill
- cover-letter-writerSkill
- job-screenerSkill
- self-checkSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

