AGENT SKILL

score-fit

Score how well the user's master profile fits a specific job — an ATS-style match percentage with matched/missing keywords, strengths, gaps, and a clear apply-or-skip recommendation. Optionally writes a structured sidecar that tailor-resume consumes.

License 许可
MIT
最近更新
2026-06-09
Stars
★ 7
Forks
1

01 前言 Front Matter

name
score-fit
description
Score how well the user's master profile fits a specific job — an ATS-style match percentage with matched/missing keywords, strengths, gaps, and a clear apply-or-skip recommendation. Optionally writes a structured sidecar that tailor-resume consumes.
when_to_use
Use to evaluate a single job (or a few) against the user's profile before they spend effort applying — typically on the top results from find-jobs, or any job description the user pastes.
allowed-tools
Read, Write
user-invocable
true

02 资源文件 1

03 SKILL.md 正文

score-fit

Judge a job against the user's profile the way a good recruiter + ATS would, and give a decision — not just a number.

Inputs

  1. The profile: read profile/master-profile.md.
    • Missing → offer a degraded one-shot mode: score against a resume/profile snippet the user pastes now, and set profile_missing: true in the sidecar. Suggest /build-profile for next time.
    • Stale → if fields the score depends on are marked [VERIFY], warn in the output and set profile_stale: true. Never credit [VERIFY] facts toward must-haves.
  2. The job: a pasted description, a URL to fetch, or an entry from jobs/found-<date>.json. Known-info gate (RULES §6): if no job is given inline, read jobs/current.json (the job under work) and use its jd_text/url — do not re-ask for the JD if it's already captured. After resolving the job, write/refresh jobs/current.json ({company, role, url, job_id, jd_text, region, source, captured_at}) so tailor-resume / write-cover-letter / answer-application-questions reuse it without asking again. Only ask the user for a job if none is supplied and current.json is absent.

Method (think like an ATS, then like a hiring manager)

  1. Apply work-authorization logic first. Determine the job's country and resolve the applicant's work_auth per ../../knowledge/work-authorization.md — it uses the job's region pack, not the applicant's, and returns one of NON-ISSUE / MINOR-NOTE / MAJOR-FILTER / DISQUALIFIER. Record it as work_auth_verdict. (E.g. India applicant + India job → NON-ISSUE: do not raise or penalize; weight notice-period/CTC fit instead. The same applicant + a US "no sponsorship" job → MAJOR-FILTER.)

  2. Extract the job's requirements: hard requirements (must-haves), preferred (nice-to-haves), key skills/keywords, seniority, domain, location/remote, comp if stated.

    • AI/ML roles: if the role is AI/ML, detect its archetype per ../../knowledge/ai-roles.md (AI Platform/LLMOps · Agentic · Technical AI PM · Solutions Architect · Forward-Deployed · Transformation). Weight the domain and must_haves sub-scores toward that archetype's proof points, note it in strengths/gaps, and record archetype in the sidecar. Distinguish genuine AI roles from "AI" used only as a buzzword (title filter in ai-roles.md).
  3. Grade each requirement as met / partial / missing, citing profile evidence:

    • met — clear evidence in the resume; partial — adjacent/transferable experience, or only part of a compound requirement is shown; missing — no evidence. Don't credit skills not shown.
    • Match semantically, not literally (the shared engine — ../../knowledge/relevance.md): credit a skill demonstrated under a different name (a "Visual AI agent" shows computer vision; "ran paid campaigns" shows performance marketing; "RAG" ≈ retrieval-augmented). Literal keyword absence is not the same as missing evidence. But never credit [VERIFY] facts — not even as transferable.
    • "X OR Y" requirements — satisfied if the profile has either. Never penalize for lacking the other half of an OR.
    • Ambiguous / underspecified JDs — score conservatively, note the ambiguity in gaps, and don't inflate must-haves. Lower confidence rather than guessing high.
    • Mark is_dealbreaker: true for must-haves whose absence alone should drive a Skip.
  4. Keyword coverage: list keywords present in the profile (matched_keywords) vs. missing ones an ATS would screen on (missing_keywords). Keep missing_keywords to terms the resume could honestly incorporate — this list feeds tailor-resume.

  5. Score 0–100 using this weighting (adjust slightly per role) — these are the subscores:

    • Must-have requirements met — 45
    • Seniority & scope match — 20
    • Domain/industry relevance — 15
    • Keyword/skills coverage — 15
    • Location / remote / work-auth fit — 5

    Then subtract itemized penalties for hard-constraint violations (onsite when remote-only; sponsorship not offered when needed per §0; comp clearly below min_base_salary). The final score = sum(subscores) + sum(penalties), clamped to 0–100. (Subscores still sum to 100 — the factor weights mirror ../../knowledge/relevance.md, so this score stays directionally consistent with find-jobs fit_rank.)

  6. Goal alignment (directional — not a subscore). Read context.career_goal to judge whether this role advances the candidate's stated direction; set goal_alignment ∈ strong|neutral|weak. It breaks ties / nudges the recommendation (e.g. a borderline 70 that strongly serves the goal → "apply"; one that pulls away → "apply_if_tailored"). It is never a numeric subscore (preserves the 100-point sum) and is never quoted, paraphrased, or echoed into any output (RULES.md §2) — it directs the verdict, it does not appear in it.

Output

Human-readable (always)

  • Score: NN/100 + one-line verdict.
  • Recommendation: Apply / Apply if tailored / Skip — with the single biggest reason.
  • Strengths (3–5 bullets) — citing profile evidence.
  • Gaps / risks (3–5 bullets) — missing must-haves or weak areas; note dealbreakers vs. addressable.
  • Missing keywords — comma list the resume should incorporate (feeds tailor-resume).
  • If recommending Apply, suggest /tailor-resume for this job.

Structured sidecar (gated)

When the job has an id (from jobs/found-<date>.json) or score-fit runs inside a pipeline, also write scores/<job-id>.score.json per reference/score-schema.md (subscores must sum to the pre-penalty total). For one-off pasted JDs, skip the file unless asked.

Be honest — a low score is more useful than a flattering one. No emoji.

Next steps

Apply / Apply-if-tailored → /tailor-resume for this job (or /apply-to-job to assemble the whole package). Skip → move to the next job.

04 同仓库更多 Skills

jain777
jain777/jobclaw-skills

write-outreach

Write a short, profile-grounded cold outreach message to a recruiter, hiring manager, or potential referrer — LinkedIn DM or email — with one clear CTA and no flattery.

★ 7
jain777
jain777/jobclaw-skills

write-cover-letter

Produce a job-specific, profile-grounded cover letter in markdown — ≤ 350 words, ≤ 1 page, three paragraphs (hook → two quantified proofs → fit close). Reuses keywords from a prior tailor-resume sidecar when present. Writes a JSON sidecar reserved for a future /render-resume --kind cover-letter (rendercv).

★ 7
jain777
jain777/jobclaw-skills

triage-inbox

Classify a recruiting email (or a batch) into one of the 10 canonical email classes, extract structured fields (company / role / dates / links / asks / deadline / sentiment), and suggest the next action. Writes inbox/triage-<YYYY-MM-DD>.json — consumed by infer-status and draft-reply.

★ 7
jain777
jain777/jobclaw-skills

tailor-resume

Produce a job-specific, ATS-optimized resume from the user's master profile and a target job — reordering, reframing, and surfacing the most relevant real experience and keywords. Enforces a content rubric (bullet shape, length, parallel grammar, metric coverage), then renders a polished PDF by default (via render-resume) and visually QAs it. Never fabricates.

★ 7
jain777
jain777/jobclaw-skills

review-render

Visually QA a rendered resume PDF and auto-fix layout/content defects in a bounded loop: render → screenshot → deterministic gate → vision rubric → apply one fix → re-render, until it passes or hits a pass cap. Catches widows, under-fill, overflow, orphaned headers, and imbalance that text-only logic can't see.

★ 7
jain777
jain777/jobclaw-skills

research-company

Build a structured company × role brief — compensation, day-to-day, career growth, recent news, community sentiment (Reddit / Blind / Glassdoor), red flags, and a "fit for this user" view. Heavy reasoning — runs forked. Writes companies/<slug>.{md,json} sidecars consumed by prep-interview and coach-negotiation.

★ 7