mirror of
https://github.com/MadsLorentzen/ai-job-search.git
synced 2026-09-17 08:36:25 +00:00
442 lines
27 KiB
Markdown
442 lines
27 KiB
Markdown
# /setup - Profile Onboarding
|
|
|
|
You are running the onboarding setup for the AI Job Search framework. Your goal is to collect the user's professional information and populate all profile files so the `/apply` workflow works out of the box.
|
|
|
|
There are three paths into setup. Step 0 picks the right one; all three converge on Step 3 (file generation) and Step 4 (confirmation).
|
|
|
|
---
|
|
|
|
## Step 0: Welcome & Choose Path
|
|
|
|
If `$ARGUMENTS` contains `--section <name>`, skip directly to that section in Path C for an update-only flow. Do not run the path-selection prompt below.
|
|
|
|
Otherwise, first check where this working copy would publish to — **before anything is
|
|
written, not after** (the Step 4 privacy note fires only once every file is already on
|
|
disk, which is too late to inform the decision). Run `git remote get-url origin`; if the
|
|
command fails (no remote, or not a git checkout), skip this check silently. If there is
|
|
a GitHub `origin`, check it with `gh repo view <owner/repo> --json visibility,isFork`
|
|
when `gh` is available. If the origin is a **public fork** of the template — or its
|
|
visibility cannot be determined — warn now and wait:
|
|
|
|
> **Heads-up before we start:** your `origin` points at `<owner/repo>`, which is a
|
|
> public GitHub fork. This setup writes your personal data (name, contact details,
|
|
> employment history, salary expectations) into **tracked** files, and anything you
|
|
> commit *and push* to that fork is visible to anyone. Two safe options: keep your
|
|
> profile commits local and never push them, or push to a **private** repository
|
|
> instead — SETUP.md section 8 has the two-minute private-remote recipe. Want to
|
|
> continue with the setup?
|
|
|
|
Wait for the user's confirmation before showing the path prompt. A private origin, no
|
|
origin, or a non-fork remote needs no warning — continue silently.
|
|
|
|
Then, before greeting the user, scan the `documents/` folder. Use Glob with `documents/**/*` and count files per subfolder (`cv/`, `linkedin/`, `diplomas/`, `references/`, `projects/`, `applications/`).
|
|
|
|
Then welcome the user with a single message that lists three paths. The wording changes based on what was found.
|
|
|
|
**If `documents/` has files** in one or more subfolders, lead with Path A:
|
|
|
|
> **Welcome to the AI Job Search setup!**
|
|
>
|
|
> I'll help you build your professional profile so Claude can evaluate job postings, tailor CVs, write cover letters, and prepare you for interviews.
|
|
>
|
|
> I see files in your `documents/` folder: [list per subfolder, e.g. "2 in cv/, 1 in linkedin/, 3 in references/"]. Three ways to start:
|
|
>
|
|
> **Path A: Read my documents folder** (recommended for what you have) - I'll read everything in `documents/`, cross-reference for consistency, and build your profile from real source materials. Idempotent and safe to re-run as you add more documents.
|
|
>
|
|
> **Path B: Single CV import** - Paste or @-mention a single CV/resume here. I'll extract it and ask follow-up questions for what's missing.
|
|
>
|
|
> **Path C: Interview mode** - I'll walk you through structured questions section by section.
|
|
>
|
|
> Which would you like?
|
|
|
|
**If `documents/` is empty or missing**, surface Path A as a "do this if you have materials" option:
|
|
|
|
> **Welcome to the AI Job Search setup!**
|
|
>
|
|
> I'll help you build your professional profile so Claude can evaluate job postings, tailor CVs, write cover letters, and prepare you for interviews.
|
|
>
|
|
> Three ways to start:
|
|
>
|
|
> **Path A: Documents folder** (best signal if you have several materials) - Drop your CV / LinkedIn export / diplomas / reference letters / project summaries in the `documents/` folder, then say "go". I'll read everything and build your profile from it. See `documents/README.md` for the folder layout.
|
|
>
|
|
> **Path B: Single CV import** - Paste or @-mention a single CV/resume here. I'll extract it and ask follow-up questions for what's missing.
|
|
>
|
|
> **Path C: Interview mode** - I'll walk you through structured questions section by section. Good if you're starting from scratch.
|
|
>
|
|
> Which would you like?
|
|
|
|
Wait for the user's choice. If they pick A but the folder is still empty, tell them what to add (point at `documents/README.md`) and stop.
|
|
|
|
---
|
|
|
|
## Path A: Documents Folder
|
|
|
|
Reads structured documents in `documents/`, cross-references them for consistency, and merges extracted data into the seven profile skill files. Read-before-write and idempotent: changes already present will not be proposed again.
|
|
|
|
Follow these steps **exactly in order**.
|
|
|
|
### Step A1: Inventory
|
|
|
|
Use Glob with `documents/**/*` to scan the full tree. Print:
|
|
|
|
```
|
|
## Documents Found
|
|
|
|
**cv/**: [list files, or "(empty)"]
|
|
**linkedin/**: [list files, or "(empty)"]
|
|
**diplomas/**: [list files, or "(empty)"]
|
|
**references/**: [list files, or "(empty)"]
|
|
**projects/**: [list files, or "(empty)"]
|
|
**applications/**: [list subfolders with their files, or "(empty)"]
|
|
|
|
I will read these and cross-reference before proposing any changes.
|
|
```
|
|
|
|
If every subfolder is empty, stop and tell the user to populate the folder. Point at `documents/README.md` for the layout.
|
|
|
|
### Step A2: Read Existing Skill Files
|
|
|
|
Read these in parallel before extracting anything. You must know what is already there to make the merge intelligent.
|
|
|
|
- `.claude/skills/job-application-assistant/01-candidate-profile.md`
|
|
- `.claude/skills/job-application-assistant/02-behavioral-profile.md`
|
|
- `.claude/skills/job-application-assistant/03-writing-style.md`
|
|
- `.claude/skills/job-application-assistant/04-job-evaluation.md`
|
|
- `.claude/skills/job-application-assistant/05-cv-templates.md`
|
|
- `.claude/skills/job-application-assistant/06-cover-letter-templates.md`
|
|
- `.claude/skills/job-application-assistant/07-interview-prep.md`
|
|
|
|
Hold this content in context throughout Path A. Do not re-read.
|
|
|
|
### Step A3: Parse Documents
|
|
|
|
Read each document found in Step A1. Process subfolders in this order: `cv/`, `linkedin/`, `diplomas/`, `references/`, `projects/`, `applications/`.
|
|
|
|
**`cv/` documents:** name, contact (email, phone, LinkedIn, GitHub), education (degree, institution, dates, thesis), work experience (title, company, dates, location, bullets), skills, languages (with any stated proficiency), publications, awards, profile/summary.
|
|
|
|
**`linkedin/` documents:** About/summary section (full text, used for behavioral inference), work experience, education, skills and endorsements, **Languages section** (language name + self-rated proficiency level, e.g. "Spanish - Native or bilingual proficiency" - a high-confidence structured source, feeds the Language Gate in `04-job-evaluation.md`), certifications, volunteer work, publications, recommendations received (full text). If multiple LinkedIn exports are present, use the most recently modified file.
|
|
|
|
**`diplomas/` documents:** official degree title and level, institution name (official spelling), graduation date, grade or distinction or GPA if visible.
|
|
|
|
**`references/` documents:** referee name, title, organization; full text of the letter (extract specific quotes); competency language used.
|
|
|
|
**`projects/` documents:** project name, summary/description, problem domain, tech stack (languages, frameworks, tools), key technical challenges and architectural decisions, measurable outcomes/metrics (e.g. users, performance, stars, impact).
|
|
|
|
**`applications/<company>_<role>/` subfolders:**
|
|
- `job_posting.md`: role title, company, required skills, experience level, sector, role type
|
|
- `cover_letter.tex`: opening structure, body structure, bullet style, closing, recurring phrases
|
|
- `cv_draft.tex`: profile statement, section ordering, framing for this role type
|
|
- `outcome.md`: status (in_progress/hired/offer_declined/rejected/no_response/interview_only), interview stages, notes. Skip `in_progress` applications for calibration — they have no final signal yet.
|
|
|
|
After reading, proceed to Step A4 without intermediate output. The user sees a complete picture in Step A6.
|
|
|
|
### Step A4: Cross-Reference Check
|
|
|
|
Before mapping anything to skill files, check for inconsistencies:
|
|
|
|
- Date mismatches between CV / LinkedIn / diploma
|
|
- Title mismatches across documents for the same role
|
|
- Education mismatches (degree name, graduation date)
|
|
- Employer name variations
|
|
|
|
If inconsistencies are found, present them as a numbered list and wait for the user to resolve each one before continuing:
|
|
|
|
```
|
|
## Cross-Reference Issues Found
|
|
|
|
These need to be resolved before I continue. For each one, tell me which version is correct.
|
|
|
|
1. **Role title mismatch - [COMPANY]:**
|
|
CV says: "[TITLE_A]"
|
|
LinkedIn says: "[TITLE_B]"
|
|
Which is correct?
|
|
|
|
2. ...
|
|
```
|
|
|
|
If no inconsistencies, state "No cross-reference issues found." and continue.
|
|
|
|
### Step A5: Build Change Sets
|
|
|
|
For each skill file, compare extracted document content against the current file content from Step A2. Build two buckets.
|
|
|
|
**Additive changes:** entirely new content not in the skill file in any form. Examples: a certification not in `01-candidate-profile.md`, a new independent project not in `01-candidate-profile.md`, a new endorsement skill, a referee not yet listed, a new behavioral quote from a reference letter, a new award.
|
|
|
|
**Conflicting changes:** content that touches something already in a skill file but disagrees. Examples: a different date range for an existing job, a different job title for the same role, a different graduation date than what is recorded.
|
|
|
|
**Inference rules** (apply when populating from inferred sources):
|
|
|
|
- **`01-candidate-profile.md` (`## Independent Projects`):** Source is `projects/` documents. Extract structured project entries formatted as `- **[PROJECT_NAME]**: [DESCRIPTION with tech stack and measurable outcome]`. Ground all claims in the document text.
|
|
- **`02-behavioral-profile.md`:** Source is LinkedIn About + recommendation letters. Extract recurring themes, adjectives, phrases about how the candidate works. Add only to "Strongest Behavioral Traits", "How [Candidate] Works Best", or "Management Style Preferences" sections. Do not overwrite existing scored assessments. Always label inferred additions: *[Inferred from LinkedIn About / Reference letter - review before relying on this]*
|
|
- **`03-writing-style.md`:** Source is `cover_letter.tex` files. Extract recurring patterns. Add as observations under "## Patterns Observed in Past Applications". Do not modify existing rules. Only add if 2+ cover letters show a genuine pattern.
|
|
- **`04-job-evaluation.md`:** Source is `job_posting.md` + `outcome.md` pairs. If an application reached interview or offer: note role type and sector as a confirmed strong-fit signal. If 2+ applications repeat a no-response or rejection pattern: note it. Add findings under "## Calibration from Past Applications". Do not modify the existing scoring framework.
|
|
- **`05-cv-templates.md`:** Source is `cv_draft.tex` files. Extract any profile statement that does not already appear in templates. Label with: *[Used for: <company>_<role>]*. **Ground before extracting:** archived drafts are tailored outputs, not source documents - verify every factual claim in an extracted statement (titles, employers, metrics, technologies) against `01-candidate-profile.md` and drop or correct any claim the profile does not support, keeping only the framing. A tailored draft that drifted must never become a template future applications start from.
|
|
- **`06-cover-letter-templates.md`:** Source is `cover_letter.tex` files. Extract opening patterns, bullet structures, closing formulations. Add only what is structurally distinct from existing templates.
|
|
- **`07-interview-prep.md`:** Source is CV bullets, LinkedIn descriptions, reference letter quotes. Identify achievements not yet covered by an existing STAR example. Do NOT draft full STAR examples. Add stubs under "## STAR Candidates (Complete Manually)":
|
|
|
|
```markdown
|
|
### [Achievement title]
|
|
**Source:** [CV / LinkedIn / Reference letter - role/company]
|
|
**What happened:** [one sentence]
|
|
**Why it matters:** [interview question types this could answer]
|
|
**S/T/A/R stub:**
|
|
- Situation:
|
|
- Task:
|
|
- Action:
|
|
- Result:
|
|
```
|
|
|
|
### Step A6: Present and Confirm Changes
|
|
|
|
Present the full change set before writing anything.
|
|
|
|
**Additive changes** (single grouped list, organized by target file):
|
|
|
|
```
|
|
## Proposed Additive Changes
|
|
|
|
### 01-candidate-profile.md
|
|
- [ ] New certification: [title], [issuer], [date] - extracted from LinkedIn
|
|
- [ ] New independent project: [PROJECT_NAME] - [description, tech stack, key outcome]
|
|
- [ ] New reference: [name, title, company]
|
|
Quote: "[relevant quote]"
|
|
|
|
### 02-behavioral-profile.md
|
|
- [ ] New behavioral observation [labeled as inference]: "[phrase]"
|
|
|
|
[and so on per file]
|
|
```
|
|
|
|
Then ask:
|
|
|
|
> **Apply all additive changes?** These add new content without touching anything already in the files.
|
|
> Reply **yes** to apply all, or list the numbers you want to skip.
|
|
|
|
Wait for the response. Apply only the confirmed items.
|
|
|
|
**Conflicting changes** (one at a time):
|
|
|
|
```
|
|
## Conflict 1 of [N]: Job title - [COMPANY]
|
|
|
|
**Current in 01-candidate-profile.md:**
|
|
[TITLE_A] - [COMPANY] ([START]-[END])
|
|
|
|
**Proposed (from LinkedIn export):**
|
|
[TITLE_B] - [COMPANY] ([START]-[END])
|
|
|
|
Options:
|
|
[keep] Keep the existing text
|
|
[replace] Replace with the version from the document
|
|
[manual] I'll edit this myself - skip for now
|
|
```
|
|
|
|
Wait for the user's choice on each conflict. If no conflicts, state "No conflicting changes found." and skip this section.
|
|
|
|
### Step A7: Write Confirmed Changes and Fill Gaps
|
|
|
|
Apply the confirmed changes with the Edit tool. Make targeted edits only. Do not rewrite entire files. State which changes were applied per file. If a file has no confirmed changes, state "No changes made to [filename]."
|
|
|
|
Documents cover skills, experience, education, references, and behavioral signal. They do not cover everything `/apply` and `/scrape` need. After the writes, ask follow-up questions for gaps:
|
|
|
|
- Career goals and target role types
|
|
- What excites the user in their next role
|
|
- Deal-breakers and must-haves
|
|
- Languages you work in professionally, with proficiency levels (only if not already extracted from `cv/` or `linkedin/` above) - this feeds the Language Gate in `04-job-evaluation.md`, so ask directly rather than skipping it
|
|
- Salary expectations / baseline (optional)
|
|
- Commute or location constraints (if not visible from CV)
|
|
- Job search configuration (use the questions from Path C Section 9 below)
|
|
|
|
Then proceed to Step 3 to populate the non-skill files (`CLAUDE.md`, `cv/main_example.tex`, `.claude/skills/job-scraper/search-queries.md`). Step 3 will detect that the seven skill files are already populated and skip those substeps.
|
|
|
|
---
|
|
|
|
## Path B: Single CV Import
|
|
|
|
If the user provides a single CV/resume:
|
|
|
|
1. Read the document thoroughly.
|
|
2. Extract all structured information: name, contact, education, experience, skills, languages, publications, awards.
|
|
3. Present a summary of what was extracted.
|
|
4. Ask follow-up questions for gaps (behavioral profile, career goals, deal-breakers, languages and proficiency levels if not already extracted, salary expectations, references).
|
|
5. Proceed to Step 3 (file generation).
|
|
|
|
---
|
|
|
|
## Path C: Interview Mode
|
|
|
|
Walk through each section conversationally. Ask questions naturally, not as a form. Let the user answer in their own words and you'll structure the data.
|
|
|
|
### Section 1: Identity & Contact
|
|
Ask about:
|
|
- Full name
|
|
- Location (city, country)
|
|
- Phone, email, LinkedIn, GitHub
|
|
- What languages they work in professionally, and roughly what level in each (native, fluent, conversational, a CEFR letter like B2 - whatever's natural for them to describe, doesn't need to be precise). Worth explaining why: a posting requiring a language they don't list at all gets auto-excluded later by the Language Gate, while one asking for a higher level in a language they do list gets flagged for their own judgment instead of silently passed or rejected - so it's worth being honest here rather than optimistic.
|
|
- Current employment status
|
|
- Family/commute constraints (if any)
|
|
|
|
### Section 2: Education
|
|
For each degree:
|
|
- Level (PhD, MSc, BSc, etc.), field, institution, years
|
|
- Thesis topic (if applicable)
|
|
- Key coursework or topics
|
|
|
|
Also ask about certifications (online courses, professional certs).
|
|
|
|
### Section 3: Professional Experience
|
|
For each role (most recent first):
|
|
- Job title, company, dates, location
|
|
- Key responsibilities (3-5 bullets)
|
|
- Key achievements or projects
|
|
- Technologies/tools used
|
|
|
|
Also ask about independent projects, freelance work, or side projects.
|
|
|
|
### Section 4: Technical Skills
|
|
- Programming languages + proficiency level
|
|
- ML/AI frameworks and tools
|
|
- Domain expertise
|
|
- Software tools and platforms
|
|
- Any other technical skills
|
|
|
|
### Section 5: Publications & Awards (optional)
|
|
- Peer-reviewed papers, conference presentations
|
|
- Hackathons, competitions, awards
|
|
- Skip if not applicable
|
|
|
|
### Section 6: Behavioral Profile (optional)
|
|
If they have a formal assessment (PI, DISC, Myers-Briggs, StrengthsFinder):
|
|
- Ask them to describe or share the results
|
|
|
|
If not, ask behavioral questions:
|
|
- "What work environments do you thrive in?"
|
|
- "What drains your energy at work?"
|
|
- "How do you prefer to work in teams?"
|
|
- "How do you make decisions, quickly or deliberately?"
|
|
- "What's your communication style?"
|
|
- Synthesize answers into a behavioral profile
|
|
|
|
### Section 7: Career Goals & Preferences
|
|
- Target roles and industries
|
|
- What excites you in work
|
|
- Deal-breakers and must-haves
|
|
- Salary expectations/baseline (optional)
|
|
- What environments to avoid
|
|
- Commute/location constraints
|
|
|
|
### Section 8: References (optional)
|
|
For each reference:
|
|
- Name, title, company, email, phone
|
|
- Relationship to the user
|
|
|
|
### Section 9: Job Search Configuration
|
|
This section generates the search queries that power `/scrape`. Use the information from Sections 1, 4, and 7 to build targeted queries.
|
|
|
|
Ask about:
|
|
- **Role titles to search for:** Job titles for the same underlying work vary a lot across companies and markets - a "Data Scientist" role at one employer may be called "Insights Analyst" or "Data Consultant" at another. Ask about the function first: "What kind of work do you actually want to be doing day-to-day?" Then translate that into concrete search terms: "Given that, what job titles should I search for? For example: Data Scientist, ML Engineer, Geophysicist." Collect 3-8 specific titles, but keep the underlying function in mind - it feeds the category naming in `search-queries.md` and the Experience Match dimension in `04-job-evaluation.md`.
|
|
- **Key skills as search terms:** "Which of your skills are most likely to appear in job postings?" Pick 3-5 that are distinctive and searchable.
|
|
- **Target companies (optional):** "Are there specific companies you'd like to monitor for openings?"
|
|
- **Geographic scope:** "Which cities or regions should I search in? How far are you willing to commute?" Use this to define the location filter tiers (ideal, acceptable, borderline, too far).
|
|
- **Job portals:** "The framework ships country-agnostic search CLIs (`linkedin-search`, `freehire-search`, enabled by default) plus Danish portal demos (Jobindex, Jobbank, Jobdanmark, Jobnet) that ship **disabled**. `/scrape` auto-discovers whatever portal skills are installed under `.agents/skills/` and skips any with `enabled: false`. Which portals fit your market?" **Then act on the answer:** if the user's market is Denmark (or they ask for the Danish boards), edit each of the four Danish `SKILL.md` files and set `enabled: true` in the frontmatter; otherwise leave them disabled and say so - they cost nothing while disabled and can be enabled later by flipping the flag. If the user needs a local board that is not shipped, guide them to `/add-portal` (market-specific skills live in their fork). WebSearch/`site:` queries remain the fallback for portals without a CLI skill.
|
|
- **CV language:** "Should your CVs be written in English (the default, accepted in most markets), or in your market's language?" Record the answer as a `CV language: <language>` line in CLAUDE.md's Identity section. Cover letters always match each posting's language automatically; this setting governs the CV only. If the user is unsure, keep English and note they can re-run `/setup --section search` to change it.
|
|
|
|
**Important:** Also suggest role types the user may not have considered, based on their skill profile. For example:
|
|
- If they have strong Python + domain expertise: "Have you considered roles like 'Technical Consultant' or 'Solutions Engineer' in your domain?"
|
|
- If they have ML + a specific industry: "Companies in adjacent industries also hire for these skills. Should I include searches for [adjacent sector]?"
|
|
- If they have project management experience alongside technical skills: "Would you also want to search for 'Technical Project Manager' or 'Team Lead' roles?"
|
|
|
|
This proactive suggestion step helps users discover career paths they might not have considered.
|
|
|
|
---
|
|
|
|
## Step 3: Generate Profile Files
|
|
|
|
Once data collection is complete, generate or finish populating the following files. **For Path A**, the seven skill files are already populated by Step A7; check each before writing and skip if its content is no longer placeholder text.
|
|
|
|
### 1. Update `CLAUDE.md`
|
|
Replace all `[PLACEHOLDER]` tokens with the user's actual information. Keep the structure, workflow, and verification checklist intact.
|
|
|
|
### 2. Populate `01-candidate-profile.md` *(Path B and C; skip if Path A populated it)*
|
|
Write the full candidate profile with structured sections: Identity (including Languages, with levels), Education, Professional Experience, Independent Projects, Technical Skills, Publications, Awards, References.
|
|
|
|
### 3. Populate `02-behavioral-profile.md` *(Path B and C; skip if Path A populated it)*
|
|
Write the behavioral profile based on assessment results or synthesized answers.
|
|
|
|
### 4. Update `04-job-evaluation.md` *(Path B and C; skip if Path A populated it)*
|
|
Replace skill match areas with the user's actual skills:
|
|
- Strong match areas: [their primary skills]
|
|
- Moderate match areas: [their secondary skills]
|
|
- Weak match areas: [skills they lack]
|
|
|
|
Update career goals and motivation filters with their actual preferences.
|
|
|
|
### 5. Update `05-cv-templates.md` *(Path B and C; skip if Path A populated it)*
|
|
Add role-specific profile statement templates based on their background, and personalise the contact block inside the file's LaTeX template: replace `[FIRST_NAME]`, `[LAST_NAME]`, `[YOUR_ADDRESS]`, `[YOUR_PHONE]`, `[YOUR_EMAIL]`, `[YOUR_LINKEDIN_URL]` and `[YOUR_GITHUB_URL]` (and `[YOUR_NAME]` in the PDF title) with their actual details. Check this block whichever path ran - Path A extracts profile statements from documents, not the contact block. `/apply` builds every tailored CV from this template, so a placeholder left here reaches a compiled document.
|
|
|
|
### 6. Update `06-cover-letter-templates.md` *(all paths - Path A does not fill this block)*
|
|
Personalise the contact line and the signature inside the file's LaTeX template: replace `[YOUR_NAME]`, `[YOUR_EMAIL]`, `[YOUR_PHONE]` and `[YOUR_LINKEDIN_URL]` in the `\namesection{}` line, and `[YOUR_NAME]` in `\signature{}`. Path A merges only structural patterns (openings, bullets, closings) into this file, never the contact block. `/apply` compiles every cover letter from this template.
|
|
|
|
### 7. Update `07-interview-prep.md` *(Path B and C; skip if Path A populated it)*
|
|
Create STAR examples from their actual experience (at least 3-4 examples). Path A leaves STAR stubs under "## STAR Candidates (Complete Manually)" rather than full examples; if any stubs are present, mention them in Step 4 so the user knows to flesh them out.
|
|
|
|
### 8. Update `cv/main_example.tex`
|
|
Replace placeholder personal data with their actual name, contact info, and add their education and most recent experience entries.
|
|
|
|
### 9. Generate `.claude/skills/job-scraper/search-queries.md`
|
|
Replace all placeholder tokens in the search queries file with the user's actual information from Section 9 (or the equivalent follow-up questions in Path A's Step A7):
|
|
- Replace `[YOUR_PRIMARY_ROLE_TYPE]`, `[YOUR_PRIMARY_JOB_TITLE]`, etc. with actual role titles
|
|
- Replace `[YOUR_KEY_SKILL]`, `[YOUR_DOMAIN_KEYWORD_1]`, etc. with actual skills and domain terms
|
|
- Replace `[YOUR_CITY]`, `[YOUR_COUNTRY]`, `[YOUR_REGION]` with actual location
|
|
- Fill in the location filter tiers (ideal, acceptable, borderline, too far) based on commute constraints
|
|
- Organize queries into priority categories matching the user's career direction:
|
|
- Priority 1: Their strongest/most desired role direction
|
|
- Priority 2: Their domain expertise
|
|
- Priority 3: Adjacent roles they could pivot into
|
|
- Priority 4: Broader roles (wider net)
|
|
|
|
---
|
|
|
|
## Step 4: Confirm & Next Steps
|
|
|
|
Present a summary:
|
|
|
|
> **Setup complete!** Here's what was generated:
|
|
>
|
|
> - `CLAUDE.md` - Your full candidate profile
|
|
> - `.claude/skills/job-application-assistant/01-candidate-profile.md` - Structured profile
|
|
> - `.claude/skills/job-application-assistant/02-behavioral-profile.md` - Behavioral assessment
|
|
> - `.claude/skills/job-application-assistant/04-job-evaluation.md` - Personalized evaluation framework
|
|
> - `.claude/skills/job-application-assistant/05-cv-templates.md` - CV templates with your profile statements and contact block
|
|
> - `.claude/skills/job-application-assistant/06-cover-letter-templates.md` - Cover letter templates with your contact line and signature
|
|
> - `.claude/skills/job-application-assistant/07-interview-prep.md` - STAR examples from your experience
|
|
> - `cv/main_example.tex` - Your LaTeX CV template
|
|
> - `.claude/skills/job-scraper/search-queries.md` - Job search queries for `/scrape`
|
|
>
|
|
> **Privacy note:** the files above now contain your personal data and are *tracked by git*.
|
|
> A GitHub fork of the template is always public (forks of public repos cannot be made
|
|
> private), so do not push these commits to a fork. Keep them local, or push to a private
|
|
> repository instead - see SETUP.md section 8 for the private-remote setup.
|
|
>
|
|
> **Try it out:**
|
|
> - Run `/scrape` to search for matching jobs right now
|
|
> - Run `/apply` with a job posting URL to see the full application workflow
|
|
> - Run `/setup --section search` later to update your search queries as your priorities evolve
|
|
|
|
If Path A left any STAR stubs in `07-interview-prep.md`, also note:
|
|
|
|
> Path A flagged [N] STAR candidate stubs in `07-interview-prep.md` that need your situation/task/action/result details before you use them in interviews.
|
|
|
|
---
|
|
|
|
## Design Principles
|
|
|
|
- Three onboarding paths converge on the same skill files. Step 0 picks the right path based on what's in `documents/`. Steps 3 and 4 are shared.
|
|
- Path A is read-before-write and idempotent. Re-running it as documents are added does not duplicate or overwrite existing content; conflicts are surfaced for explicit resolution.
|
|
- Path A labels inferred behavioral or style additions so the user can review them critically before relying on them.
|
|
- Each section in Path C is a natural conversation, not a form. The user can skip optional sections.
|
|
- Synthesize answers into structured formats (the user does not need to know markdown or LaTeX).
|
|
- Can be re-run with `--section <name>` to update specific sections (e.g., `/setup --section search` to reconfigure job search queries without re-doing the full profile).
|
|
- Section 9 (search) in Path C, and the equivalent follow-up questions in Path A, proactively suggest role types the user may not have considered.
|
|
- At the end, suggest running `/scrape` and `/apply` with a test job posting.
|