mirror of
https://github.com/MadsLorentzen/ai-job-search.git
synced 2026-09-17 00:26:26 +00:00
feat: add /setup_docs, /reset, /expand commands and /upskill skill
Adds four contributions from @Michael-Bach: - /setup_docs - document-driven profile population from a documents/ folder (CV, LinkedIn export, diplomas, references, past applications). Idempotent merge with explicit additive vs. conflicting buckets and per-conflict prompts. - /reset - typed-RESET confirmation gate for clearing profile data and/or documents folder contents. - /expand - additive competency enrichment from documents and public URLs already in the profile (GitHub repos, portfolio sites), with web-searched syllabus lookups for named courses and certifications. - /upskill - skill-gap analysis vs tracked jobs (or single URL), produces a prioritized heatmap and learning plan with year-tagged WebSearch queries. Also adds the documents/ folder convention with README and gitignore entries for personal output files. Closes #6
This commit is contained in:
@@ -0,0 +1,216 @@
|
||||
# /expand - Competency Expansion from Documents and Online Presence
|
||||
|
||||
You are enriching the candidate profile by discovering competencies hidden in documents and public online presence. This command is additive only — it never modifies existing profile content, only extends it.
|
||||
|
||||
Follow these steps **exactly in order**. Do not skip steps.
|
||||
|
||||
---
|
||||
|
||||
## Step 0: Read Existing Profile Files
|
||||
|
||||
Read these two files in parallel before doing anything else. You must know what is already there so you do not propose duplicates.
|
||||
|
||||
- `.claude/skills/job-application-assistant/01-candidate-profile.md`
|
||||
- `.claude/skills/job-application-assistant/02-behavioral-profile.md`
|
||||
|
||||
Hold this content in context throughout the command. Do not re-read these files later.
|
||||
|
||||
---
|
||||
|
||||
## Step 1: Discovery — Scan All Sources
|
||||
|
||||
Scan every available source for "experience items" — anything that implies skill, knowledge, or competency. Process sources in this order.
|
||||
|
||||
### 1a. documents/cv/
|
||||
Read all files in `documents/cv/`. Extract:
|
||||
- Every course or module listed (including university coursework and online courses)
|
||||
- Every certification mentioned, with issuer and date
|
||||
- Every job responsibility bullet point (tools, methods, outcomes)
|
||||
- Every independent project or side project
|
||||
- Every volunteer or extracurricular role
|
||||
|
||||
### 1b. documents/linkedin/
|
||||
Read all files in `documents/linkedin/`. Extract:
|
||||
- Courses and certifications in the "Licenses & Certifications" section
|
||||
- Skills and endorsements list
|
||||
- Volunteer experiences
|
||||
- Projects section
|
||||
- Any platform-specific items not already found in the CV
|
||||
|
||||
### 1c. documents/diplomas/
|
||||
Read all files in `documents/diplomas/`. Extract:
|
||||
- All course/module names listed on transcripts
|
||||
- Thesis title and subject area
|
||||
- Any specialisation or track name
|
||||
|
||||
### 1d. documents/references/
|
||||
Read all files in `documents/references/`. Extract:
|
||||
- Competency language used by the referee (what skills or qualities they mention)
|
||||
- Any specific projects, tools, or methods named
|
||||
|
||||
### 1e. GitHub Profile
|
||||
Look up the GitHub username from `01-candidate-profile.md`. If a GitHub URL or username is present:
|
||||
|
||||
1. Use WebFetch or WebSearch to retrieve the public profile and pinned repositories
|
||||
2. For each repository found:
|
||||
- Fetch the repository README
|
||||
- Note: name, description, primary language(s), topics/tags, any frameworks or libraries mentioned in the README
|
||||
3. Also retrieve the full repository list if available (to catch unpinned repos)
|
||||
|
||||
If no GitHub username or URL is found in the profile, skip this source and note it was skipped.
|
||||
|
||||
### 1f. Other URLs in Profile
|
||||
Check `01-candidate-profile.md` for any other URLs (portfolio site, personal website, Kaggle, Google Scholar, ResearchGate, publication links). For each:
|
||||
- Fetch the page
|
||||
- Extract any tools, methods, datasets, awards, or skills mentioned
|
||||
|
||||
---
|
||||
|
||||
## Step 2: Web Enrichment
|
||||
|
||||
For each experience item discovered in Step 1, search the web to extract the competencies it implies. Apply both approaches below — do not choose one over the other.
|
||||
|
||||
### Approach A: Direct lookup (explicit tools and frameworks)
|
||||
If the item names a specific tool, framework, library, method, or platform, search for it directly:
|
||||
- `"[Course name] [Provider] syllabus learning outcomes"`
|
||||
- `"[Certification name] skills covered exam guide"`
|
||||
- `"[Tool/framework name] skills what you learn"`
|
||||
|
||||
Fetch the most relevant page and extract the competency list.
|
||||
|
||||
### Approach B: Inferred competencies (from description and context)
|
||||
For each item, regardless of whether Approach A found anything, also reason from the description:
|
||||
- What problem domain does this item address?
|
||||
- What methods, skills, or knowledge does someone need to do this work?
|
||||
- What is the standard toolchain for this kind of work?
|
||||
|
||||
Combine both approaches into a single competency list for each item.
|
||||
|
||||
### Prioritise web lookup for:
|
||||
- Named online courses (Coursera, edX, Udemy, LinkedIn Learning, DataCamp, fast.ai, etc.)
|
||||
- Named certifications (AWS, GCP, Azure, Databricks, Tableau, etc.)
|
||||
- University courses with a standard syllabus
|
||||
- GitHub repositories with a README that names specific technologies
|
||||
|
||||
### Infer (without web lookup) for:
|
||||
- Generic job responsibility bullets with no named tool
|
||||
- Vague project descriptions
|
||||
- Reference letter language (already phrased as competency — just record it)
|
||||
|
||||
---
|
||||
|
||||
## Step 3: Build Competency Map
|
||||
|
||||
After enriching all items, build a deduplicated competency map. Group findings into these categories:
|
||||
|
||||
**Technical Skills — Primary** (core languages, frameworks, methods you use regularly)
|
||||
**Technical Skills — Secondary** (tools you have used but are not primary)
|
||||
**Domain Knowledge** (subject matter expertise: geophysics, ML, NLP, etc.)
|
||||
**Methods and Practices** (agile, version control, reproducibility, testing, etc.)
|
||||
**Soft / Behavioral** (leadership, communication, collaboration signals from references and project descriptions)
|
||||
|
||||
For each competency, record:
|
||||
- The competency name
|
||||
- The source item it came from (e.g. "Coursera — Deep Learning Specialisation", "GitHub — repo-name", "Reference letter — Jens Jensen")
|
||||
- Whether it came from direct lookup (A), inference (B), or both
|
||||
|
||||
Remove anything already present in `01-candidate-profile.md` or `02-behavioral-profile.md`.
|
||||
|
||||
---
|
||||
|
||||
## Step 4: Present Grouped Summary
|
||||
|
||||
Present all new competencies for the user's review before writing anything. Format:
|
||||
|
||||
```
|
||||
## /expand found [N] new competency signals across [M] sources
|
||||
|
||||
**COURSES & CERTIFICATIONS**
|
||||
Source: [Course/cert name — Provider]
|
||||
+ [Competency 1]
|
||||
+ [Competency 2]
|
||||
...
|
||||
|
||||
**GITHUB — [repo-name]**
|
||||
Source: README + inferred from tech stack
|
||||
+ [Competency 1]
|
||||
+ [Competency 2]
|
||||
...
|
||||
|
||||
**JOB RESPONSIBILITIES — [Company, Role]**
|
||||
Source: CV bullets + direct tool lookup
|
||||
+ [Competency 1]
|
||||
...
|
||||
|
||||
**BEHAVIORAL SIGNALS**
|
||||
Source: [Reference letter — Name / LinkedIn About / Project leadership]
|
||||
+ [Signal 1]
|
||||
...
|
||||
|
||||
[more sections as needed]
|
||||
```
|
||||
|
||||
Then ask:
|
||||
|
||||
> **How would you like to proceed?**
|
||||
>
|
||||
> - **`all`** — Add everything above to your profile
|
||||
> - **`review`** — I'll walk you through each source group one at a time
|
||||
> - **`skip`** — Cancel without writing anything
|
||||
>
|
||||
> Or list specific groups to skip (e.g. "skip GitHub, add everything else").
|
||||
|
||||
Wait for the user's response before writing anything.
|
||||
|
||||
---
|
||||
|
||||
## Step 5: Write Confirmed Additions
|
||||
|
||||
Apply only the confirmed items. Use the Edit tool to add to the relevant sections of each file — do not rewrite entire files.
|
||||
|
||||
### Additions to `01-candidate-profile.md`
|
||||
- Technical skills (primary and secondary) → append to the Technical Skills section
|
||||
- Domain knowledge → append to the Domain Knowledge or Technical Skills section (match the existing structure)
|
||||
- Methods and practices → append appropriately
|
||||
|
||||
For each addition, add a brief source annotation in a comment or parenthetical: *(Coursera — Deep Learning Specialisation)*, *(GitHub — project-name)*, etc. This makes future `/expand` runs idempotent.
|
||||
|
||||
### Additions to `02-behavioral-profile.md`
|
||||
- Soft/behavioral signals → append to the "Strongest Behavioral Traits" or "How I Work Best" section (match existing structure)
|
||||
- Always label inferred behavioral additions: *[Inferred from reference letter — Name / review before relying on this]*
|
||||
|
||||
---
|
||||
|
||||
## Step 6: Summary Report
|
||||
|
||||
After writing, present:
|
||||
|
||||
```
|
||||
## /expand Complete
|
||||
|
||||
### Added to 01-candidate-profile.md
|
||||
[List each competency added, with source]
|
||||
|
||||
### Added to 02-behavioral-profile.md
|
||||
[List each behavioral signal added, with source]
|
||||
|
||||
### Sources processed
|
||||
[List each source scanned and how many competencies it yielded]
|
||||
|
||||
### Sources skipped
|
||||
[List any sources that were missing, empty, or yielded nothing new — with brief reason]
|
||||
|
||||
### Needs manual review
|
||||
[Any items that were ambiguous, partially readable, or where web lookup returned no clear syllabus]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Design Principles
|
||||
|
||||
- **Additive only.** This command never modifies existing profile content. It only appends.
|
||||
- **Source-traceable.** Every addition records where it came from, so future runs are idempotent and the user can verify or remove individual items later.
|
||||
- **Both approaches, always.** Web lookup and inference are applied together — not as alternatives. A named course gets its official syllabus AND a reasoned competency list.
|
||||
- **User confirms before writing.** The full competency map is shown and confirmed before a single file is touched.
|
||||
- **Behavioral signals are labeled.** Anything inferred from tone, language, or indirect signals is marked as inferred so it is reviewed critically.
|
||||
- **GitHub is fully scanned.** All public repositories are checked, not just pinned ones — unpinned repos often contain significant competency signals.
|
||||
Reference in New Issue
Block a user