How the `/expand` Command Enriches a Candidate Profile from Public Sources

The /expand command automatically augments a candidate's profile by scanning internal documents and public online sources—GitHub, LinkedIn, portfolio sites, and more—to extract technical skills, domain knowledge, and behavioral signals using both direct web lookups and AI-driven inference.

The /expand command in the MadsLorentzen/ai-job-search repository is a specialized competency-enrichment tool designed to surface hidden capabilities from scattered sources. As implemented in this open-source job-search automation framework, it transforms raw experience data into structured, searchable skill entries that power downstream job matching and application generation.

How /expand Discovers and Processes Experience Items

The enrichment process follows a fixed discovery order defined in .claude/commands/expand.md. The command scans multiple source directories and public URLs, applying two complementary analysis approaches to each item it finds.

Internal Document Sources

  • documents/cv/ — Courses, certifications, job-responsibility bullets, projects, volunteer work
  • documents/linkedin/ — Licenses, skills, projects, endorsements
  • documents/diplomas/ — Transcript courses, thesis titles, specializations
  • documents/references/ — Competency language used by referees

Public Online Sources

  • GitHub profile — Discovered from the username or URL in the CV; reads pinned and unpinned repository READMEs to capture repository name, description, primary languages, topics, and mentioned frameworks
  • Other URLs — Portfolio sites, Kaggle profiles, Google Scholar pages, and similar public pages are fetched and parsed for tools, datasets, awards, or skill mentions

The Two-Step Web Enrichment Methodology

For every discovered experience item, /expand applies both direct and inferred analysis to maximize competency coverage.

Approach A: Direct Lookup

The command searches explicit documentation using targeted queries like "[Course name] syllabus" or "[Certification] exam topics". The most relevant page is fetched and its competency list is extracted directly.

Approach B: Inferred Competencies

Independently, the system reasons about the problem domain, required methods, and standard toolchains based on the item's description—regardless of whether official documentation was found.

Results from both approaches are merged, with source attribution preserved.

Building and Reviewing the Competency Map

Extracted competencies are organized into five deduplicated categories:

  1. Technical Skills (Primary & Secondary)
  2. Domain Knowledge
  3. Methods & Practices
  4. Soft / Behavioral signals

Each entry records the competence name, its source (e.g., "GitHub — ai-search-tool"), and whether it came from direct lookup, inference, or both. Duplicates already present in .claude/skills/job-application-assistant/01-candidate-profile.md or .claude/skills/job-application-assistant/02-behavioral-profile.md are automatically removed.

Example Console Output


# Run the expand command after completing /setup

$ ai-job-search /expand

## /expand found 12 new competency signals across 4 sources

**COURSES & CERTIFICATIONS**
Source: Coursera — Deep Learning Specialisation
  + Neural network fundamentals
  + Convolutional neural networks
  + Sequence models

**GITHUB — ai-search-tool**
Source: README + inferred from tech stack
  + Python 3.10
  + FastAPI
  + Elasticsearch
  + Unit testing with pytest

**JOB RESPONSIBILITIES — Acme Corp, Data Engineer**
Source: CV bullets + direct tool lookup
  + ETL pipeline design (Airflow)
  + Data modelling (Snowflake)

**BEHAVIORAL SIGNALS**
Source: Reference letter — Dr. Jane Smith
  + Strong collaboration
  + Proactive problem-solving

> How would you like to proceed?
> - `all` — Add everything above to your profile
> - `review` — Walk through each source group
> - `skip` — Cancel without writing anything

Writing Confirmed Additions Back to Profile Files

Confirmed items are appended only to the appropriate profile file:

Each addition includes source annotations (e.g., *(GitHub — my-project)*), making subsequent /expand runs idempotent—already-recorded competencies are skipped on future executions.

After writing, a final report lists:

  • All added competencies
  • Sources processed
  • Any skipped sources

Key Files Supporting Profile Enrichment from Public Sources

File Purpose
.claude/commands/expand.md Full command specification and workflow documentation
.claude/skills/job-application-assistant/01-candidate-profile.md Stores technical skills, domain knowledge, methods
.claude/skills/job-application-assistant/02-behavioral-profile.md Stores soft-skill and behavioral signals
documents/ Source materials (CV, LinkedIn exports, diplomas, references)

Summary

  • /expand enriches candidate profiles by systematically scanning internal documents and public web sources in a fixed discovery order
  • GitHub profiles are automatically parsed from CV references, extracting languages, topics, and frameworks from repository READMEs
  • Dual enrichment approach combines direct documentation lookup with AI inference for maximum competency coverage
  • Five-category structure organizes technical skills, domain knowledge, methods, and behavioral signals with full source attribution
  • Idempotent writes with user-controlled review (all | review | skip) ensure profile quality and prevent duplication

Frequently Asked Questions

What public sources does /expand actually fetch from?

According to the ai-job-search source code in .claude/commands/expand.md, /expand fetches from any URL found in the candidate's CV or profile files. This explicitly includes GitHub profiles (parsed for repository data), portfolio sites, Kaggle, Google Scholar, and other professional URLs. The GitHub integration is automatic when a username or URL is detected—it reads both pinned and unpinned repository READMEs.

How does /expand avoid adding duplicate competencies?

The command maintains idempotency by checking existing entries in 01-candidate-profile.md and 02-behavioral-profile.md before writing. Each competency is stored with its source annotation, and duplicates are filtered during the deduplication step. This design allows candidates to run /expand repeatedly as their experience grows without manual cleanup.

Can I review what /expand finds before it writes to my profile?

Yes—the command presents a formatted summary of all discovered competencies grouped by source type (courses, GitHub, job responsibilities, behavioral signals). You can choose all to accept everything, review to walk through each source group individually, or skip to cancel without any changes. This three-option prompt ensures full human oversight of profile modifications.

What happens if a course or certification has no public syllabus?

/expand uses Approach B—inferred competencies as a fallback. Even without direct documentation, it reasons about the problem domain, required methods, and standard toolchains based on the item's description. This ensures competencies are captured from internal documents and niche experiences even when public sources are sparse.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →