job-screener
Skill4 starsChanged 7 months agoMITView on GitHub
Evaluate job postings against a personalized scoring rubric before applying. Use this skill whenever the user pastes a job description, shares a job link, or asks about whether a position is worth applying to. Also trigger when batch-searching for jobs on any job board — every position must be scored before any application work begins. Trigger phrases include: "worth applying", "should I apply", "evaluate this job", "score this posting", or any time a JD is pasted into the conversation.
We split this skill into the rules it gives an agent
7 rules. About 0 are common, 3 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 13
If this is the first job-application skill invoked in this session, run the self-check skill first to load the user's config, profile, …
- Very specific: line 17
All matching data comes from
config.yml: Read the following fields: - Very specific: line 58
Primary Strength Rule: Read config.primary_strength and config.primary_strength_evidence.
- Very specific: line 88
All weights come from config.rubric.*.
- Distinctive: line 108
ATS Rate-Limiting Warning: When batch-scoring many positions on a job board, be mindful of rate limits.
- Distinctive: line 124
If the decision is APPLY, immediately proceed to check if the application allows a cover letter upload (if so, trigger the …
- Very specific: line 128
When searching Handshake or any job board, score ALL results first before applying to any.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Job Screener
You are the job application gatekeeper. Every job posting must pass through this rubric before any application work (cover letter writing, form filling) begins. This saves time and ensures every application is high-quality and realistic.
Pre-Flight
If this is the first job-application skill invoked in this session, run the self-check skill first to load the user's config, profile, resume, and application history. This ensures the skill stack used for matching is current and avoids duplicate applications.
User Profile (for matching)
All matching data comes from config.yml. Read the following fields:
personal.*— name, email, contact infoeducation.*— school, degree, discipline, dateswork.*— current role, title, years of experienceskills.strong— core skills to match against JD requirementsskills.not_in_stack— skills to auto-deduct when JD requires themprojects— key projects with details (for Experience Match)visa.*— authorization status, sponsorship needslocation.*— current city, preferred cities, relocation willingnessdomain_expertise— strongest domain areasprimary_strength+primary_strength_evidence— the user's #1 differentiator; weight this heavily when JDs emphasize it
Also read the user's auto-memory profile (user_background.md) for additional project details and context not captured in config.
Scoring Dimensions
Weights are loaded from config.rubric.*. The defaults below apply if config values are missing.
1. Freshness (Weight: config.rubric.freshness_weight, default 20%)
How recently was the job posted? Stale listings waste time.
| Score | Criteria |
| 10 | Posted 1-2 days ago |
| 8 | Posted 3-5 days ago |
| 5 | Posted 1-2 weeks ago, still marked open |
| 0 | Posted 2+ weeks ago, or date cannot be confirmed |
2. Skill Match (Weight: config.rubric.skill_match_weight, default 35%)
Compare every requirement in the JD against the user's config.skills.strong list. This is the heaviest-weighted dimension because mismatched skills waste time. Cross-reference config.skills.not_in_stack — if the JD's core requirements are on that list, auto-deduct.
| Score | Criteria |
| 10 | 80%+ of JD-required skills directly match user's stack |
| 7 | 60-80% match, and the gaps are learnable in days (e.g., a new BI tool, a specific cloud service) |
| 5 | 50-60% match |
| <5 | Core requirements don't match (e.g., requires skills on the not_in_stack list, or requires a degree the user doesn't have) |
Primary Strength Rule: Read config.primary_strength and config.primary_strength_evidence. When a JD emphasizes the user's primary strength, weight this heavily in the Skill Match score. The evidence field provides concrete examples to justify the higher score.
3. Experience Match (Weight: config.rubric.experience_match_weight, default 20%)
How well do the user's config.projects and config.domain_expertise map to what the JD describes as day-to-day work?
| Score | Criteria |
| 10 | User's projects are directly relevant to the JD's described work |
| 7 | Related but requires some stretch to connect |
| 5 | Indirectly related |
| <5 | Completely different domain (e.g., mechanical engineering, graphic design, wet lab research) |
4. Visa/Work Authorization Friendliness (Weight: config.rubric.visa_weight, default 25%)
This dimension has a special kill rule: if config.visa.kill_on_no_sponsorship is true and the score is 0, the entire position is auto-rejected regardless of how well the other dimensions score. If the user doesn't need sponsorship (config.visa.needs_sponsorship: false), default this dimension to 10 and skip the evaluation.
| Score | Criteria |
| 10 | Explicitly accepts CPT/OPT, or large company with well-known sponsorship history |
| 7 | No visa mention at all (neutral — most positions) |
| 3 | Vague wording leaning restrictive (e.g., "must be authorized to work" without specifying CPT/OPT) |
| 0 | Any of: "no visa sponsorship", "US citizens only", "security clearance required", "permanent residents only", "SUNY students only", or similar hard restrictions |
Formula
Total = Freshness × freshness_weight + SkillMatch × skill_match_weight + ExperienceMatch × experience_match_weight + Visa × visa_weightAll weights come from config.rubric.*. They must sum to 1.0.
Decision Rules
Apply these in order (thresholds from config.rubric.apply_threshold and config.rubric.ask_threshold):
- Visa = 0 AND config.visa.kill_on_no_sponsorship → BLACKLIST — Don't even finish scoring. Inform the user and move on.
- Total >= apply_threshold (default 8.5) → APPLY — Proceed directly to cover letter writing and application filling.
- Total between ask_threshold and apply_threshold (default 7.5–8.4) → ASK — Present the full score breakdown and let the user decide. Flag what's borderline and why.
- Total < ask_threshold (default 7.5) → SKIP — Show the score, give a one-line reason, and move on.
Also check for hard disqualifiers
Beyond the rubric score, flag any of these as deal-breakers:
- "Only open to [specific school] students" — check against
config.education.school - Requires a specific degree the user doesn't have (compare against
config.education.discipline) - Location requires relocation with no relocation support, and pay is too low to justify it
- Explicitly undergraduate-only when user is a graduate student (flag but let user decide)
ATS Rate-Limiting Warning: When batch-scoring many positions on a job board, be mindful of rate limits. Take pauses between page loads. If you encounter a CAPTCHA or "unusual activity" warning, stop immediately and inform the user.
Output Format
Present the evaluation concisely:
**[Company] — [Position Title]**
- Freshness: X/10 — [one-line reason]
- Skill Match: X/10 — [one-line reason]
- Experience Match: X/10 — [one-line reason]
- Visa: X/10 — [one-line reason]
- **Total: X.XX → [APPLY / ASK / SKIP / BLACKLIST]**
- Hard disqualifiers: [any flags, or "None"]If the decision is APPLY, immediately proceed to check if the application allows a cover letter upload (if so, trigger the cover-letter-writer skill). After application is submitted, trigger the application-tracker skill to log it.
Batch Search Mode
When searching Handshake or any job board, score ALL results first before applying to any. Present a ranked table of positions sorted by total score. Only proceed with applications for positions scoring >= config.rubric.apply_threshold.
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- myowinthein/agent-compass★ 0same name
- myowinthein/claude-compass★ 0same name
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.
In this repository5 other files it gives its agents.
- application-fillerSkill
- application-trackerSkill
- cover-letter-writerSkill
- job-searchSkill
- 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.

