Upskill
Analyses tracked jobs against the candidate's current profile to find skill gaps, then produces a gap heatmap and a learning plan with concrete, searched study resources and a study order.
Configuration
- Candidate profile:
$JOB_SEARCH_HOME/profile.md - Tracked jobs:
tracker_pathfrom$JOB_SEARCH_HOME/integrations.yaml - Reports are written under
$JOB_SEARCH_HOME/upskill/
Invocation
/upskill— aggregate mode: all rows in the tracker file/upskill <URL>— targeted mode: one posting, fetched from the URL
Step 1 — Detect mode
No argument → aggregate. A URL → targeted; keep the URL for Step 2.
In targeted mode, derive a report slug from role and company, e.g.
<company-slug>-<role-slug>.
Step 2 — Load data
Aggregate
- Read the tracker file. Columns:
date, company, sector, role, role_type, channel, status, contact_person, fit_rating, notes, cv_file, cover_letter_file, source - Note
role,company,fit_ratingper row.fit_ratingis 0–100; use it to weight gaps, since a low rating means the role exposed more gaps. - Read
$JOB_SEARCH_HOME/profile.mdfor current skills. - Look in
$JOB_SEARCH_HOME/upskill/for the most recentreport-YYYY-MM-DD.md; if one exists, load it for the Step 8 diff.
Targeted
- WebFetch the posting.
- Extract title, company, required skills, preferred skills, responsibilities, domain context.
- Read
$JOB_SEARCH_HOME/profile.md. - No tracker data is used.
Step 3 — Pass 1: hard skill diff
Aggregate. You do not have full postings, so infer likely requirements from role,
sector and notes. If source has a live URL you may fetch it; skip dead or missing ones.
Build a skill frequency map, then weight by fit: each job contributes
(100 - fit_rating) / 100 per occurrence. Final score is the sum of
fit_weight × occurrence across jobs.
Targeted. Take explicit required and preferred skills. Equal weight. Required before preferred, alphabetical within each group.
Diff against profile. Remove anything already present in profile.md, generously — if the
profile mentions a skill in any form, it is not a gap. What remains is the hard skill gap list:
ranked by score in aggregate mode, required-before-preferred then alphabetical in targeted
mode.
Step 4 — Pass 2: synthesis
Reason about gaps the diff would miss:
- Domain knowledge — unfamiliar industry or problem space
- Soft skills — ways of working, communication, leadership the profile does not address
- Tooling and process — frameworks, cloud services, methodologies appearing across jobs
- Credentials — a certification several postings list as preferred
Tag each [domain], [soft], [tooling] or [credential]. Do not repeat Pass 1 gaps.
Step 5 — Gap heatmap
Combine both passes into one prioritised table:
- Critical — high weighted hard skills, or a domain gap across most jobs
- High — moderate hard skills, or consistent soft/tooling gaps
- Medium — lower-frequency hard skills, or gaps in fewer roles
- Low — one-off mentions
| Priority | Skill / Area | Type | Gap Source |
|---|---|---|---|
| Critical | Kubernetes | Hard | 4/5 jobs, score 3.2 |
| High | Security domain knowledge | Domain | LLM synthesis |
| Medium | AWS (advanced) | Hard | 2/5 jobs, score 1.1 |
| Low | … | … | … |
Print this table before continuing, so the user can see what you are working from.
In targeted mode, prioritise from the posting's own language: required → Critical/High, preferred → Medium, inferred → Medium/Low.
Step 6 — Learning plan
Cover every Critical and High gap, plus Medium if fewer than five gaps exist in total.
For each gap:
- WebSearch for current, well-reviewed resources. Include the current year in the query so
results are not stale. Example shape:
"best <skill> course <year> site:reddit.com OR coursera.org" - Pick 2–3 resources. Prefer hands-on labs over lecture-only; official documentation for tooling gaps; books for domain gaps. Give name, URL, and one line on why it fits.
- Write a study direction tailored to what the candidate already knows. Say what to skip and where to start.
- Estimate time to working proficiency (
~20h). Err high.
Group under theme headings rather than alphabetising: Cloud & Infrastructure, MLOps, Domain Knowledge, Security, Soft Skills & Ways of Working, Certifications.
### Cloud & Infrastructure
**Kubernetes** `[Hard]` — ~20h
- [Resource](url) — hands-on labs, practical rather than theoretical
- [Official docs](url) — reference once the basics are in place
Study direction: container basics are already covered — start at Pod scheduling, then
Services and Deployments. Get manifests and `kubectl` fluent before touching Helm.
Step 7 — Suggested study order
- Dependencies first — if B needs A, place A first and note the dependency
- Critical before High before Medium within a tier
- Quick wins early — a fast Medium gap can go first for momentum
- Domain knowledge last — study it alongside a real project
| # | Topic | Type | Est. Time | Note |
|---|---|---|---|---|
| 1 | Kubernetes | Hard | ~20h | Required before step 3 |
| 2 | CI/CD pipelines | Tooling | ~10h | |
| 3 | Security domain knowledge | Domain | ~15h | Alongside a real project |
Total estimated time: ~45h
Step 8 — Write and save the report
Order: header and mode → since last report (aggregate only) → gap heatmap → learning plan → suggested study order.
- Aggregate:
$JOB_SEARCH_HOME/upskill/report-YYYY-MM-DD.md - Targeted:
$JOB_SEARCH_HOME/upskill/report-YYYY-MM-DD-<company-slug>-<role-slug>.md— lowercase, spaces to hyphens, strip special characters
Diff section, aggregate only: gaps closed are skills from the previous heatmap now present in the profile; new gaps are current heatmap entries absent from the previous report. Omit the whole section when no previous report exists.
Confirm the saved path to the user.
Rules
- Never fabricate resources. Only cite what WebSearch actually returned.
- Search with the current year in every resource query.
- Targeted mode ignores the tracker file entirely.
- Be generous with profile matching. A skill mentioned in any form is not a gap.
- Print the heatmap before the learning plan.
- No study resources for Low gaps unless asked.
- Always save the report, even if the terminal output looked sufficient.
- Slug company names from the posting. Do not invent or guess one.