# How /expand Enriches Your Profile by Scanning GitHub, Kaggle, and Course Syllabi

> Automatically enrich your candidate profile. Our /expand command scans GitHub, Kaggle, and syllabi to surface hidden skills, saving you time and boosting your job search.

- Repository: [Mads Lorentzen/ai-job-search](https://github.com/MadsLorentzen/ai-job-search)
- Tags: how-to-guide
- Published: 2026-07-14

---

**The `/expand` command automatically discovers and adds skills to your candidate profile by parsing public URLs like GitHub repositories, Kaggle notebooks, and course syllabi to surface implicit competencies not explicitly declared in your `.claude/skills` files.**

The `ai-job-search` repository by MadsLorentzen provides a suite of tools to streamline job applications through AI-assisted profile management. The `/expand` command serves as a competency-enrichment engine that scans your linked public resources to identify hidden skills. This functionality ensures your profile reflects the full breadth of your technical capabilities by extracting evidence from real-world artifacts.

## How the /expand Workflow Works

### Gathering Public URLs from the Source List

During the initial `/setup` phase, you attach a list of public URLs to your profile. These URLs are stored in the profile's **source list**, which acts as the foundation for enrichment. Sources typically include GitHub repositories, portfolio websites, Kaggle notebooks, and Google Scholar pages.

### Fetching and Parsing Content

When you invoke `/expand`, the system iterates through the source list and fetches each URL. It extracts textual content from README files, notebook cells, project descriptions, and publication abstracts. According to the source code in [`/.claude/commands/expand.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main//.claude/commands/expand.md), this parsing phase prepares raw text for skill detection.

### Detecting Skill Signals

A lightweight NLP pipeline scans the extracted content for skill-related phrases. The system identifies mentions of technologies like "TensorFlow", methodologies like "data-augmentation", and specialized techniques like "SQL query optimization". The [`tools/lint_skills.py`](https://github.com/MadsLorentzen/ai-job-search/blob/main/tools/lint_skills.py) utility normalizes and validates these discovered skill strings to ensure consistency.

### Course Syllabi Lookup

For every named course or certification in your profile, `/expand` queries publicly available syllabi from university course pages or platforms like Coursera and Open Learn. This process pulls official learning objectives to map formal education to specific competencies.

### Adding Competencies with Source Annotations

Each new skill is appended to the profile with strict source attribution. Annotations follow the format `*(GitHub — my-nlp-project)*` or `*(Coursera — Deep Learning Specialisation)*`, as documented in [`/.claude/skills/job-application-assistant/01-candidate-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main//.claude/skills/job-application-assistant/01-candidate-profile.md). This idempotent approach ensures repeated runs only add truly new signals without duplication.

## Implementation and Usage Examples

The `/expand` command can be invoked via the CLI after completing the setup process:

```bash

# After /setup has linked your public profiles:

> /expand
Scanning 4 sources …
GitHub repo "ai‑job‑search": detected Python, LaTeX, Pandas, LLM prompting
Kaggle notebook "salary‑prediction": detected feature‑engineering, XGBoost
Course “Deep Learning Specialisation”: added TensorFlow, CNN, RNN
✅ /expand found 23 new competency signals across 5 sources

```

You can also use the functionality programmatically within a Claude skill:

```python

# Programmatic usage (inside a Claude skill)

from .commands import expand

profile = load_profile()
new_skills = expand.run(profile)   # returns list of (skill, source) tuples

profile.add_skills(new_skills)
save_profile(profile)

```

## Key Files and Their Roles

Several components work together to power the enrichment process:

- **[`/.claude/commands/expand.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main//.claude/commands/expand.md)** – Contains the full command documentation, including the output format and source-annotation guidelines. Line 126 specifically handles the summary report generation, printing results like "Found **23** new competency signals across **5** sources".

- **[`README.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/README.md)** – Line 141 describes the purpose of `/expand` and the public sources it scans.

- **[`/.claude/skills/job-application-assistant/01-candidate-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main//.claude/skills/job-application-assistant/01-candidate-profile.md)** – Stores the extracted competencies in the candidate profile structure with proper source attribution.

- **`documents/`** – Serves as a repository for career source materials that `/expand` can read, including PDFs and syllabi.

- **[`tools/lint_skills.py`](https://github.com/MadsLorentzen/ai-job-search/blob/main/tools/lint_skills.py)** – Validates and normalizes discovered skill strings before they are added to the profile.

## Summary

- **`/expand`** automates skill discovery by scanning GitHub, Kaggle, and course syllabi linked during `/setup`.
- The command uses a lightweight NLP pipeline to detect skill signals from textual content in public repositories and notebooks.
- Course syllabi lookups map formal education to specific competencies by querying official learning objectives.
- Source annotations like `*(GitHub — repo-name)*` ensure idempotency and traceability for every added skill.
- The system reports results such as "Found **23** new competency signals across **5** sources" to provide transparency on enrichment activities.

## Frequently Asked Questions

### What types of URLs can /expand analyze?

The command supports any public URL containing skill-relevant text, including GitHub repositories, Kaggle notebooks, portfolio websites, Google Scholar pages, and course syllabi hosted on university pages or learning platforms like Coursera and Open Learn.

### How does /expand prevent duplicate skills from being added?

Each skill is annotated with its source origin using formats like `*(GitHub — project-name)*` or `*(Coursera — Course Title)*`. This annotation system makes the enrichment idempotent, meaning subsequent runs only add skills that haven't been previously recorded in [`/.claude/skills/job-application-assistant/01-candidate-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main//.claude/skills/job-application-assistant/01-candidate-profile.md).

### Can I use /expand programmatically instead of via CLI?

Yes. You can import the `expand` module and call `expand.run(profile)`, which returns a list of `(skill, source)` tuples that you can programmatically add to your profile using standard profile management methods.

### Where are the extracted competencies stored in the repository?

All extracted skills are stored in [`/.claude/skills/job-application-assistant/01-candidate-profile.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main//.claude/skills/job-application-assistant/01-candidate-profile.md), following the annotation standards defined in the command documentation at [`/.claude/commands/expand.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main//.claude/commands/expand.md).