[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M74YESFCVSEG3C0AB8QXVJBR":3,"skill-same:01M74YESFCVSEG3C0AB8QXVJBR":56},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":28,"commitSha":29,"skillDirectory":30,"forksCount":31,"repositoryHtmlUrl":32,"repositoryHomepageUrl":6,"ownerHtmlUrl":33,"ownerBlogUrl":34,"ownerDescription":35,"updatedAt":36,"install":37,"resources":49},"01M74YESFCVSEG3C0AB8QXVJBR","score-fit",null,"Score how well the user's master profile fits a specific job — an ATS-style match percentage with matched\u002Fmissing keywords, strengths, gaps, and a clear apply-or-skip recommendation. Optionally writes a structured sidecar that tailor-resume consumes.","jain777\u002Fjobclaw-skills","jain777","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F57412580?v=4","01M74YCRYXSRMZFKERV6JS8M5D","Jeevesh Jain","01M74YCRZK4C3NNAEDWG5W8YMP",7,"MIT","https:\u002F\u002Fgithub.com\u002Fjain777\u002Fjobclaw-skills\u002Fblob\u002Fmain\u002Fskills\u002Fscore-fit\u002FSKILL.md",[],[],"2026-11-11 17:31:23",false,"---\nname: score-fit\ndescription: >\n  Score how well the user's master profile fits a specific job — an ATS-style match\n  percentage with matched\u002Fmissing keywords, strengths, gaps, and a clear apply-or-skip\n  recommendation. Optionally writes a structured sidecar that tailor-resume consumes.\nwhen_to_use: >\n  Use to evaluate a single job (or a few) against the user's profile before they spend\n  effort applying — typically on the top results from find-jobs, or any job description\n  the user pastes.\nuser-invocable: true\nallowed-tools: Read, Write\n---\n\n# score-fit\n\nJudge a job against the user's profile the way a good recruiter + ATS would, and give a decision — not just a number.\n\n## Inputs\n1. The profile: read `profile\u002Fmaster-profile.md`.\n   - **Missing** → offer a degraded one-shot mode: score against a resume\u002Fprofile snippet the user\n     pastes now, and set `profile_missing: true` in the sidecar. Suggest `\u002Fbuild-profile` for next time.\n   - **Stale** → if fields the score depends on are marked `[VERIFY]`, warn in the output and set\n     `profile_stale: true`. Never credit `[VERIFY]` facts toward must-haves.\n2. The job: a pasted description, a URL to fetch, or an entry from `jobs\u002Ffound-\u003Cdate>.json`.\n   **Known-info gate (RULES §6):** if no job is given inline, read `jobs\u002Fcurrent.json` (the job under\n   work) and use its `jd_text`\u002F`url` — do not re-ask for the JD if it's already captured. After\n   resolving the job, **write\u002Frefresh `jobs\u002Fcurrent.json`** (`{company, role, url, job_id, jd_text,\n   region, source, captured_at}`) so `tailor-resume` \u002F `write-cover-letter` \u002F `answer-application-questions`\n   reuse it without asking again. Only ask the user for a job if none is supplied and `current.json` is absent.\n\n## Method (think like an ATS, then like a hiring manager)\n\n0. **Apply work-authorization logic first.** Determine the **job's** country and resolve the\n   applicant's `work_auth` per [`..\u002F..\u002Fknowledge\u002Fwork-authorization.md`](..\u002F..\u002Fknowledge\u002Fwork-authorization.md)\n   — it uses the **job's** region pack, not the applicant's, and returns one of\n   `NON-ISSUE \u002F MINOR-NOTE \u002F MAJOR-FILTER \u002F DISQUALIFIER`. Record it as `work_auth_verdict`.\n   (E.g. India applicant + India job → NON-ISSUE: do not raise or penalize; weight notice-period\u002FCTC\n   fit instead. The same applicant + a US \"no sponsorship\" job → MAJOR-FILTER.)\n\n1. **Extract the job's requirements**: hard requirements (must-haves), preferred (nice-to-haves),\n   key skills\u002Fkeywords, seniority, domain, location\u002Fremote, comp if stated.\n   - **AI\u002FML roles:** if the role is AI\u002FML, detect its **archetype** per\n     [`..\u002F..\u002Fknowledge\u002Fai-roles.md`](..\u002F..\u002Fknowledge\u002Fai-roles.md) (AI Platform\u002FLLMOps · Agentic ·\n     Technical AI PM · Solutions Architect · Forward-Deployed · Transformation). Weight the `domain`\n     and `must_haves` sub-scores toward that archetype's proof points, note it in `strengths`\u002F`gaps`,\n     and **record `archetype` in the sidecar**. Distinguish genuine AI roles from \"AI\" used only as a\n     buzzword (title filter in ai-roles.md).\n\n2. **Grade each requirement** as **met \u002F partial \u002F missing**, citing profile evidence:\n   - **met** — clear evidence in the resume; **partial** — adjacent\u002Ftransferable experience, or only\n     part of a compound requirement is shown; **missing** — no evidence. Don't credit skills not shown.\n   - **Match semantically, not literally** (the shared engine — [`..\u002F..\u002Fknowledge\u002Frelevance.md`](..\u002F..\u002Fknowledge\u002Frelevance.md)):\n     credit a skill demonstrated under a *different name* (a \"Visual AI agent\" shows computer vision;\n     \"ran paid campaigns\" shows performance marketing; \"RAG\" ≈ retrieval-augmented). Literal keyword\n     absence is **not** the same as missing evidence. But never credit `[VERIFY]` facts — not even as transferable.\n   - **\"X OR Y\" requirements** — satisfied if the profile has *either*. Never penalize for lacking the\n     other half of an OR.\n   - **Ambiguous \u002F underspecified JDs** — score conservatively, note the ambiguity in `gaps`, and don't\n     inflate must-haves. Lower confidence rather than guessing high.\n   - Mark `is_dealbreaker: true` for must-haves whose absence alone should drive a Skip.\n\n3. **Keyword coverage**: list keywords present in the profile (`matched_keywords`) vs. missing ones an\n   ATS would screen on (`missing_keywords`). Keep `missing_keywords` to terms the resume could\n   *honestly* incorporate — this list feeds `tailor-resume`.\n\n4. **Score 0–100** using this weighting (adjust slightly per role) — these are the `subscores`:\n   - Must-have requirements met — 45\n   - Seniority & scope match — 20\n   - Domain\u002Findustry relevance — 15\n   - Keyword\u002Fskills coverage — 15\n   - Location \u002F remote \u002F work-auth fit — 5\n\n   Then subtract itemized **penalties** for hard-constraint violations (onsite when remote-only;\n   sponsorship not offered when needed per §0; comp clearly below `min_base_salary`). The final\n   `score` = sum(subscores) + sum(penalties), clamped to 0–100. (Subscores still sum to 100 — the\n   factor weights mirror [`..\u002F..\u002Fknowledge\u002Frelevance.md`](..\u002F..\u002Fknowledge\u002Frelevance.md), so this\n   `score` stays directionally consistent with find-jobs `fit_rank`.)\n\n5. **Goal alignment (directional — not a subscore).** Read `context.career_goal` to judge whether\n   this role *advances the candidate's stated direction*; set `goal_alignment` ∈ `strong|neutral|weak`.\n   It **breaks ties \u002F nudges the `recommendation`** (e.g. a borderline 70 that strongly serves the goal\n   → \"apply\"; one that pulls away → \"apply_if_tailored\"). It is **never a numeric subscore** (preserves\n   the 100-point sum) and is **never quoted, paraphrased, or echoed** into any output (RULES.md §2) —\n   it directs the verdict, it does not appear in it.\n\n## Output\n\n### Human-readable (always)\n- **Score: NN\u002F100** + one-line verdict.\n- **Recommendation: Apply \u002F Apply if tailored \u002F Skip** — with the single biggest reason.\n- **Strengths** (3–5 bullets) — citing profile evidence.\n- **Gaps \u002F risks** (3–5 bullets) — missing must-haves or weak areas; note dealbreakers vs. addressable.\n- **Missing keywords** — comma list the resume should incorporate (feeds `tailor-resume`).\n- If recommending Apply, suggest `\u002Ftailor-resume` for this job.\n\n### Structured sidecar (gated)\nWhen the job has an `id` (from `jobs\u002Ffound-\u003Cdate>.json`) **or** score-fit runs inside a pipeline,\nalso write `scores\u002F\u003Cjob-id>.score.json` per [reference\u002Fscore-schema.md](reference\u002Fscore-schema.md)\n(`subscores` must sum to the pre-penalty total). For one-off pasted JDs, skip the file unless asked.\n\nBe honest — a low score is more useful than a flattering one. No emoji.\n\n## Next steps\nApply \u002F Apply-if-tailored → `\u002Ftailor-resume` for this job (or `\u002Fapply-to-job` to assemble the whole package). Skip → move to the next job.\n","# score-fit\n\nJudge a job against the user's profile the way a good recruiter + ATS would, and give a decision — not just a number.\n\n## Inputs\n1. The profile: read `profile\u002Fmaster-profile.md`.\n   - **Missing** → offer a degraded one-shot mode: score against a resume\u002Fprofile snippet the user\n     pastes now, and set `profile_missing: true` in the sidecar. Suggest `\u002Fbuild-profile` for next time.\n   - **Stale** → if fields the score depends on are marked `[VERIFY]`, warn in the output and set\n     `profile_stale: true`. Never credit `[VERIFY]` facts toward must-haves.\n2. The job: a pasted description, a URL to fetch, or an entry from `jobs\u002Ffound-\u003Cdate>.json`.\n   **Known-info gate (RULES §6):** if no job is given inline, read `jobs\u002Fcurrent.json` (the job under\n   work) and use its `jd_text`\u002F`url` — do not re-ask for the JD if it's already captured. After\n   resolving the job, **write\u002Frefresh `jobs\u002Fcurrent.json`** (`{company, role, url, job_id, jd_text,\n   region, source, captured_at}`) so `tailor-resume` \u002F `write-cover-letter` \u002F `answer-application-questions`\n   reuse it without asking again. Only ask the user for a job if none is supplied and `current.json` is absent.\n\n## Method (think like an ATS, then like a hiring manager)\n\n0. **Apply work-authorization logic first.** Determine the **job's** country and resolve the\n   applicant's `work_auth` per [`..\u002F..\u002Fknowledge\u002Fwork-authorization.md`](..\u002F..\u002Fknowledge\u002Fwork-authorization.md)\n   — it uses the **job's** region pack, not the applicant's, and returns one of\n   `NON-ISSUE \u002F MINOR-NOTE \u002F MAJOR-FILTER \u002F DISQUALIFIER`. Record it as `work_auth_verdict`.\n   (E.g. India applicant + India job → NON-ISSUE: do not raise or penalize; weight notice-period\u002FCTC\n   fit instead. The same applicant + a US \"no sponsorship\" job → MAJOR-FILTER.)\n\n1. **Extract the job's requirements**: hard requirements (must-haves), preferred (nice-to-haves),\n   key skills\u002Fkeywords, seniority, domain, location\u002Fremote, comp if stated.\n   - **AI\u002FML roles:** if the role is AI\u002FML, detect its **archetype** per\n     [`..\u002F..\u002Fknowledge\u002Fai-roles.md`](..\u002F..\u002Fknowledge\u002Fai-roles.md) (AI Platform\u002FLLMOps · Agentic ·\n     Technical AI PM · Solutions Architect · Forward-Deployed · Transformation). Weight the `domain`\n     and `must_haves` sub-scores toward that archetype's proof points, note it in `strengths`\u002F`gaps`,\n     and **record `archetype` in the sidecar**. Distinguish genuine AI roles from \"AI\" used only as a\n     buzzword (title filter in ai-roles.md).\n\n2. **Grade each requirement** as **met \u002F partial \u002F missing**, citing profile evidence:\n   - **met** — clear evidence in the resume; **partial** — adjacent\u002Ftransferable experience, or only\n     part of a compound requirement is shown; **missing** — no evidence. Don't credit skills not shown.\n   - **Match semantically, not literally** (the shared engine — [`..\u002F..\u002Fknowledge\u002Frelevance.md`](..\u002F..\u002Fknowledge\u002Frelevance.md)):\n     credit a skill demonstrated under a *different name* (a \"Visual AI agent\" shows computer vision;\n     \"ran paid campaigns\" shows performance marketing; \"RAG\" ≈ retrieval-augmented). Literal keyword\n     absence is **not** the same as missing evidence. But never credit `[VERIFY]` facts — not even as transferable.\n   - **\"X OR Y\" requirements** — satisfied if the profile has *either*. Never penalize for lacking the\n     other half of an OR.\n   - **Ambiguous \u002F underspecified JDs** — score conservatively, note the ambiguity in `gaps`, and don't\n     inflate must-haves. Lower confidence rather than guessing high.\n   - Mark `is_dealbreaker: true` for must-haves whose absence alone should drive a Skip.\n\n3. **Keyword coverage**: list keywords present in the profile (`matched_keywords`) vs. missing ones an\n   ATS would screen on (`missing_keywords`). Keep `missing_keywords` to terms the resume could\n   *honestly* incorporate — this list feeds `tailor-resume`.\n\n4. **Score 0–100** using this weighting (adjust slightly per role) — these are the `subscores`:\n   - Must-have requirements met — 45\n   - Seniority & scope match — 20\n   - Domain\u002Findustry relevance — 15\n   - Keyword\u002Fskills coverage — 15\n   - Location \u002F remote \u002F work-auth fit — 5\n\n   Then subtract itemized **penalties** for hard-constraint violations (onsite when remote-only;\n   sponsorship not offered when needed per §0; comp clearly below `min_base_salary`). The final\n   `score` = sum(subscores) + sum(penalties), clamped to 0–100. (Subscores still sum to 100 — the\n   factor weights mirror [`..\u002F..\u002Fknowledge\u002Frelevance.md`](..\u002F..\u002Fknowledge\u002Frelevance.md), so this\n   `score` stays directionally consistent with find-jobs `fit_rank`.)\n\n5. **Goal alignment (directional — not a subscore).** Read `context.career_goal` to judge whether\n   this role *advances the candidate's stated direction*; set `goal_alignment` ∈ `strong|neutral|weak`.\n   It **breaks ties \u002F nudges the `recommendation`** (e.g. a borderline 70 that strongly serves the goal\n   → \"apply\"; one that pulls away → \"apply_if_tailored\"). It is **never a numeric subscore** (preserves\n   the 100-point sum) and is **never quoted, paraphrased, or echoed** into any output (RULES.md §2) —\n   it directs the verdict, it does not appear in it.\n\n## Output\n\n### Human-readable (always)\n- **Score: NN\u002F100** + one-line verdict.\n- **Recommendation: Apply \u002F Apply if tailored \u002F Skip** — with the single biggest reason.\n- **Strengths** (3–5 bullets) — citing profile evidence.\n- **Gaps \u002F risks** (3–5 bullets) — missing must-haves or weak areas; note dealbreakers vs. addressable.\n- **Missing keywords** — comma list the resume should incorporate (feeds `tailor-resume`).\n- If recommending Apply, suggest `\u002Ftailor-resume` for this job.\n\n### Structured sidecar (gated)\nWhen the job has an `id` (from `jobs\u002Ffound-\u003Cdate>.json`) **or** score-fit runs inside a pipeline,\nalso write `scores\u002F\u003Cjob-id>.score.json` per [reference\u002Fscore-schema.md](reference\u002Fscore-schema.md)\n(`subscores` must sum to the pre-penalty total). For one-off pasted JDs, skip the file unless asked.\n\nBe honest — a low score is more useful than a flattering one. No emoji.\n\n## Next steps\nApply \u002F Apply-if-tailored → `\u002Ftailor-resume` for this job (or `\u002Fapply-to-job` to assemble the whole package). Skip → move to the next job.\n",{"name":5,"description":24,"when_to_use":25,"allowed-tools":26,"user-invocable":27},"Score how well the user's master profile fits a specific job — an ATS-style match percentage with matched\u002Fmissing keywords, strengths, gaps, and a clear apply-or-skip recommendation. Optionally writes a structured sidecar that tailor-resume consumes.\n","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.\n","Read, Write",true,"main","68211e04d37044c49c3a91f3a29ce9647fada95f","skills\u002Fscore-fit",1,"https:\u002F\u002Fgithub.com\u002Fjain777\u002Fjobclaw-skills","https:\u002F\u002Fgithub.com\u002Fjain777","https:\u002F\u002Fjeevesh.me\u002F","Product Manager | Builder | Claude Coder","2026-06-09 13:47:19",{"source":8,"skillName":5,"commands":38,"prompt":48,"zipAvailable":27},[39,42,45],{"tool":40,"command":41},"npx","npx skills add jain777\u002Fjobclaw-skills --skill score-fit",{"tool":43,"command":44},"bunx","bunx skills add jain777\u002Fjobclaw-skills --skill score-fit",{"tool":46,"command":47},"pnpm","pnpm dlx skills add jain777\u002Fjobclaw-skills --skill score-fit","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjain777\u002Fjobclaw-skills\u002Fblob\u002Fmain\u002Fskills\u002Fscore-fit\u002FSKILL.md",[50],{"path":51,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":54,"sourceHtmlUrl":55},"reference\u002Fscore-schema.md","REFERENCE","参考文档",3631,"https:\u002F\u002Fgithub.com\u002Fjain777\u002Fjobclaw-skills\u002Fblob\u002Fmain\u002Fskills\u002Fscore-fit\u002Freference\u002Fscore-schema.md",[57,64,71,78,85,92],{"skillNo":58,"name":59,"nameZh":6,"description":60,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":61,"categories":62,"keywords":63,"publishedAt":19},"01M74YF759275CXY2ZWZBA1PD0","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.","https:\u002F\u002Fgithub.com\u002Fjain777\u002Fjobclaw-skills\u002Fblob\u002Fmain\u002Fskills\u002Fwrite-outreach\u002FSKILL.md",[],[],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":68,"categories":69,"keywords":70,"publishedAt":19},"01M74YF3WPDQ9D2PJ00XWH29EA","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 \u002Frender-resume --kind cover-letter (rendercv).","https:\u002F\u002Fgithub.com\u002Fjain777\u002Fjobclaw-skills\u002Fblob\u002Fmain\u002Fskills\u002Fwrite-cover-letter\u002FSKILL.md",[],[],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":77,"publishedAt":19},"01M74YF106JXZQ3DMDMVR722YH","triage-inbox","Classify a recruiting email (or a batch) into one of the 10 canonical email classes, extract structured fields (company \u002F role \u002F dates \u002F links \u002F asks \u002F deadline \u002F sentiment), and suggest the next action. Writes inbox\u002Ftriage-\u003CYYYY-MM-DD>.json — consumed by infer-status and draft-reply.","https:\u002F\u002Fgithub.com\u002Fjain777\u002Fjobclaw-skills\u002Fblob\u002Fmain\u002Fskills\u002Ftriage-inbox\u002FSKILL.md",[],[],{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":84,"publishedAt":19},"01M74YEX348VFDH9FG9C00WKG3","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.","https:\u002F\u002Fgithub.com\u002Fjain777\u002Fjobclaw-skills\u002Fblob\u002Fmain\u002Fskills\u002Ftailor-resume\u002FSKILL.md",[],[],{"skillNo":86,"name":87,"nameZh":6,"description":88,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":91,"publishedAt":19},"01M74YEP224H6Z9Q2K16YZ47K8","review-render","Visually QA a rendered resume PDF and auto-fix layout\u002Fcontent 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.","https:\u002F\u002Fgithub.com\u002Fjain777\u002Fjobclaw-skills\u002Fblob\u002Fmain\u002Fskills\u002Freview-render\u002FSKILL.md",[],[],{"skillNo":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":19},"01M74YEHQPVC64D5BS57BY2EYB","research-company","Build a structured company × role brief — compensation, day-to-day, career growth, recent news, community sentiment (Reddit \u002F Blind \u002F Glassdoor), red flags, and a \"fit for this user\" view. Heavy reasoning — runs forked. Writes companies\u002F\u003Cslug>.{md,json} sidecars consumed by prep-interview and coach-negotiation.","https:\u002F\u002Fgithub.com\u002Fjain777\u002Fjobclaw-skills\u002Fblob\u002Fmain\u002Fskills\u002Fresearch-company\u002FSKILL.md",[],[]]