Upskill — Skill Gap Analysis & Learning Plan
Compares your tracked job postings against your profile, surfaces skill gaps, and generates a prioritized learning plan with real, web-searched study resources.
Skill uses only Read/Write/Glob/Grep/WebFetch/WebSearch, writes confined to upskill/ reports; data flow (tracker, seen_jobs., candidate profile) fully disclosed; Rule 8 treats stored gaps as data not instructions and forbids fetching embedded URLs, showing clear injection-awareness. Deductions: no user confirmation before writing reports, unscoped WebFetch/WebSearch calls, and sensitive profile data handling not restated within this skill.
Instructions are self-consistent with detailed abnormal-path handling: dedupe rules, missing gaps field (skip + count, never back-fill), blank fit_rating fallback, dead-link skip — all consistently specified with explainable failure behavior. Deductions: no tests or reproducible artifacts covering this skill's key paths (CI covers LaTeX/CLIs, not upskill), and the weighting/scoring logic is executed ad hoc by the LLM so determinism cannot be confirmed statically.
Two modes (aggregate/targeted) with clear inputs/outputs, explicit trigger phrases, mode boundaries (targeted ignores state files), and well-documented interplay with /rank and /outcome. Deductions: English/Claude Code only; WebSearch/WebFetch depend on services unreachable or restricted from mainland-China networks, so the core resource-search function may be unusable there; non-fit ranges undeclared.
Well-layered docs (overview → steps → rules → report template), concrete examples, a rules section capturing known pitfalls; repo has MIT license, CI lint, and a framework_version guard. Deductions: the skill file itself carries no version number or changelog reference; fictional example resources could be misread as recommendations; maintenance responsibility only inferable at repo level.
Outputs (prioritized heatmap, resource-backed learning plan, study order) are well specified and offer real marginal value over manual research. Deductions: static review cannot verify search quality or time-estimate usability; WebSearch result quality is uncontrolled and the final plan still requires user vetting of resources.
Skill rules are internally auditable; README/SECURITY.md supply a threat model and repo evidence includes real CI workflows. Deductions: no tests or third-party execution evidence for upskill itself; README's outcome claims (69 applications, 20 interviews) relate to the framework broadly and are not independently corroborated.
- This is a static source-only review; nothing was executed, and conclusions rest on source reading alone.
- The skill depends on WebSearch/WebFetch for study resources; these may be unreachable from mainland-China networks, potentially disabling the core function.
- Reports are written to upskill/ automatically without a confirmation step — review generated files for overwrites and content.
- Resource links and time estimates come from live web searches at run time and must be independently verified before use.
- The skill reads personal data (candidate profile); verify gitignore and privacy boundaries on those files.
What does this skill do, and when should you use it?
Upskill is a Claude Code skill inside the ai-job-search framework (MadsLorentzen/ai-job-search, MIT-licensed). It reads the jobs you have tracked plus your candidate profile, computes hard-skill gaps, then synthesizes less obvious gaps in domain knowledge, soft skills, tooling, and credentials into a single priority heatmap. It then web-searches 2-3 current study resources per critical gap, writes tailored study directions, time estimates, and a suggested study order, and saves a Markdown report. It is one of nine skills in the collection; its scope is strictly gap analysis and learning planning — not CV generation or applications.
Offers two modes: /upskill (aggregate) reads job_search_tracker.csv and job_scraper/seen_jobs. (ranked entries with rank_score >= 45 only), dedupes, and builds a fit-weighted skill frequency map; /upskill <URL> (targeted) fetches a single posting with WebFetch and analyzes it alone. It reads .claude/skills/job-application-assistant/01-candidate-profile.md to subtract skills you already have. Pass 1 is a hard-skill diff; Pass 2 uses LLM synthesis to tag domain/soft/tooling/credential gaps. Results merge into a priority heatmap (Critical/High/Medium/Low, with provenance). WebSearch then finds current, well-rated resources for Critical and High gaps — each with 2-3 links, a study direction stating what to skip, and an hours-to-proficiency estimate — grouped by theme and ordered by a dependency-aware study sequence. The full report is written to upskill/report-YYYY-MM-DD.md, with a since-last-report diff when a previous report exists.
- Mid-search: after several applications, identify which skill gaps keep recurring and what to learn first.
- Targeted check: you spot one attractive posting and want a fast gap list with time-to-competence estimates.
- Career switchers: build a dependency-ordered self-study roadmap into an adjacent field.
- Progress reviews: diff against a previous report to see which gaps you have closed and which are new.
- Resource curation: get vetted-from-search course recommendations instead of hand-picking them.
What are this skill's strengths and limitations?
- Gap scoring is data-driven: fit-weighted per job, and recorded gaps from /rank are preferred over inferred ones.
- Resources come from live web searches with the current year baked into queries; fabricating courses or URLs is explicitly forbidden.
- Study directions are tailored to your background (e.g. skip the containers chapter if you already know Docker).
- Defensive design: stored gap text is treated as untrusted data — instructions and links inside it are never followed or fetched.
- Reports are saved to disk and diffed across runs, so progress is trackable.
- Tightly coupled to the framework: aggregate mode needs the tracker CSV, seen_jobs., and a populated candidate profile; standalone value is limited.
- Without recorded gaps, aggregate mode falls back to inferring skills from job titles/sectors, which is less accurate.
- Resource quality depends entirely on search results and is not guaranteed to stay current.
- Claude Code-specific: frontmatter uses extensions like allowed-tools; porting to other agent platforms requires edits.
How do you install this skill?
The skill is not standalone; it ships with the ai-job-search framework: gh repo fork MadsLorentzen/ai-job-search --clone, then run /setup inside Claude Code to build your candidate profile. The skill lives at .claude/skills/upskill/SKILL.md. Standalone installation into other projects is not documented.
How do you use this skill?
In a Claude Code session: for aggregate mode run /upskill (requires data in job_search_tracker.csv and seen_jobs. from /rank or tracked applications); for targeted mode run /upskill <posting URL>. The heatmap prints to the terminal first, then resources are searched and the plan is saved to upskill/.
How does this skill compare with similar options?
Within ai-job-search, /rank scores and shortlists jobs before you apply, while /upskill aggregates your personal skill gaps across jobs for learning planning. No third-party competitors are named in the source.