Initial release: AI-powered job application framework

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
AI Job Search
2026-03-23 08:34:06 +01:00
committed by Mads Lorentzen
co-authored by Claude Opus 4.6
commit c66d599d75
73 changed files with 6539 additions and 0 deletions
+191
View File
@@ -0,0 +1,191 @@
# /apply - Drafter-Reviewer Job Application Workflow
You are orchestrating a two-agent job application workflow. The job posting is provided below as `$ARGUMENTS` (either a URL or pasted text).
Follow these steps **exactly in order**. Do not skip steps.
---
## Step 0: Parse Input
- If `$ARGUMENTS` looks like a URL, use `WebFetch` to retrieve the job posting content.
- If it is pasted text, use it directly.
- Extract: **company name**, **role title**, **department** (if mentioned), **location**, and **language** of the posting (Danish or English).
- Store these for use throughout the workflow.
---
## Step 1: DRAFTER - Evaluate Fit
Read the evaluation framework:
- `.claude/skills/job-application-assistant/04-job-evaluation.md`
- `.claude/skills/job-application-assistant/01-candidate-profile.md`
Using the framework from `04-job-evaluation.md`, evaluate the job posting against the candidate's profile. If the salary lookup tool is configured, run:
```bash
python salary_lookup.py "<Company Name>" --json
```
If the posting specifies a city, add `--city "<City>"` to narrow results. Parse the JSON output and include the salary benchmark in the evaluation. If the tool is not configured or returns an error, skip the salary benchmark.
Present the evaluation to the user with:
1. **Skills match** - which required/preferred skills match vs. gaps
2. **Experience match** - how work history maps to the role
3. **Behavioral/culture match** - how behavioral profile fits the role/company culture
4. **Salary benchmark** - salary index for the company (if available)
5. **Overall fit score** and recommendation (strong fit / moderate fit / weak fit)
After presenting the evaluation, ask the user:
> "Should I proceed with drafting the CV and cover letter for this role?"
**If the user says no, stop here.** If yes, continue to Step 2.
---
## Step 2: DRAFTER - Draft CV + Cover Letter
Read the following reference files:
- `.claude/skills/job-application-assistant/01-candidate-profile.md`
- `.claude/skills/job-application-assistant/03-writing-style.md`
- `.claude/skills/job-application-assistant/05-cv-templates.md`
- `.claude/skills/job-application-assistant/06-cover-letter-templates.md`
Also read the most recent existing CV and cover letter files for structural reference:
- Read any existing `cv/main_*.tex` file as a LaTeX template reference
- Read any existing `cover_letters/cover_*.tex` or `cover_letters/Cover_*.tex` file as a template reference
### CV (`cv/main_<company>.tex`)
- Always in **English**
- Follow the moderncv/banking format from `05-cv-templates.md`
- Tailor the profile statement and experience bullets to the specific role
- Reframe skills and achievements to match job requirements
- Keep to 2 pages
### Cover Letter (`cover_letters/cover_<company>_<role>.tex`)
- **Match the language of the job posting** (Danish posting -> Danish cover letter, English posting -> English cover letter)
- Follow the structure from `06-cover-letter-templates.md`
- Use the `cover.cls` template
- Tailor the opening paragraph to the specific role and company
- Address to a named person if available in the posting, otherwise "Dear Hiring Manager" (or equivalent in posting language)
- Keep to approximately one page
- Any mention of agentic coding or AI tooling must reference **Claude Code** by name
Write both files to disk.
---
## Step 3: REVIEWER - Research & Critique
Use the **Agent tool** to spawn a `general-purpose` reviewer agent with the following prompt:
```
You are a hiring manager proxy reviewing a job application. Your job is to make the application as targeted and compelling as possible.
## Your Tasks
### 1. Research the Company
Use WebSearch and WebFetch to research:
- The company's website, mission, and recent news
- The specific department or team (if mentioned in the posting)
- Any recent projects, press releases, or strategic initiatives relevant to the role
- Company culture and values
### 2. Read All Reference Materials
Read these files to understand the candidate and quality standards:
- `.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`
### 3. Read the Drafts
Read the drafted CV and cover letter:
- `cv/main_<COMPANY>.tex`
- `cover_letters/cover_<COMPANY>_<ROLE>.tex`
### 4. Read the Job Posting
<JOB_POSTING>
<INSERT_JOB_POSTING_TEXT_HERE>
</JOB_POSTING>
### 5. Produce Feedback
Return a structured critique with **specific, actionable suggestions** in these categories:
**a) Missed keywords/requirements**
- List any requirements or keywords from the posting that are not addressed in the CV or cover letter
- For each, suggest where and how to add them (with specific text suggestions)
**b) Company/department-specific angles**
- Based on your research, suggest specific angles to add
- Suggest how to connect experience to the company's strategic priorities
**c) Action-oriented reframing**
- Identify passive or generic statements and suggest action-oriented rewrites
**d) Tone and style issues**
- Check against the writing style guide (03-writing-style.md)
- Flag any issues with tone, formality, or voice
**e) Verification checklist**
Run this checklist and report pass/fail for each:
- [ ] All claims match actual profile - no fabricated skills, experience, or achievements
- [ ] Job titles, dates, company names, and locations are correct
- [ ] Contact details are correct
- [ ] Profile statement is tailored to the specific role
- [ ] Key job requirements are addressed
- [ ] No LaTeX syntax errors (balanced braces, correct commands)
- [ ] No spelling or grammar errors
- [ ] Agentic coding / AI tooling references mention Claude Code by name
- [ ] Cover letter addressed correctly
- [ ] Cover letter fits approximately one page
- [ ] CV follows 2-page moderncv/banking format
**CRITICAL RULE:** All suggestions must be grounded in actual profile data. Do NOT suggest fabricating skills, experience, or achievements. If a requirement is a gap, say so honestly and suggest how to frame adjacent experience instead.
Return your full feedback as a single structured message.
```
**Important:** Before spawning the agent, replace `<COMPANY>`, `<ROLE>`, and `<INSERT_JOB_POSTING_TEXT_HERE>` with the actual values from Steps 0-2.
---
## Step 4: DRAFTER - Revise Based on Feedback
Once the reviewer agent returns its feedback:
1. Read the reviewer's suggestions carefully
2. Read both draft files again
3. Incorporate the suggestions that improve the application:
- Add missed keywords where they fit naturally
- Add company-specific angles from the reviewer's research
- Reframe passive statements to be more action-oriented
- Fix any tone/style issues
- Fix any verification checklist failures
4. Update both files **in place** (edit, don't recreate)
5. Do NOT incorporate suggestions that would fabricate skills or experience
---
## Step 5: Present Final Output
After revision, present to the user:
### Verification Checklist
Re-run the full verification checklist from CLAUDE.md and report pass/fail for each item.
### Key Tailoring Decisions
Summarize 3-5 key decisions made to tailor the application:
- What was emphasized and why
- What company-specific angles were incorporated
- What the reviewer suggested that was most impactful
- Any gaps that were acknowledged or reframed
### Files Created
List the files written:
- `cv/main_<company>.tex`
- `cover_letters/cover_<company>_<role>.tex`
Tell the user: "Both files are ready for your review. Open them to check the final output before compiling."
+198
View File
@@ -0,0 +1,198 @@
# /setup - Profile Onboarding Interview
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.
---
## Step 0: Welcome & Choose Path
Welcome the user and explain what this setup does. Then offer two paths:
> **Welcome to the AI Job Search setup!**
>
> I'll help you set up your professional profile so Claude can evaluate job postings, tailor CVs, write cover letters, and prepare you for interviews.
>
> **Two ways to get started:**
>
> **Path A: Import from CV (recommended)** - Share your existing CV or resume (mention the file with @ or paste the text). I'll extract your information automatically and ask follow-up questions for anything missing.
>
> **Path B: Interview mode** - I'll walk you through structured questions section by section. Great if you're starting from scratch.
>
> Which do you prefer?
If the user specifies `$ARGUMENTS` containing `--section <name>`, skip to that section only for updating.
---
## Path A: Document Import
If the user provides a CV/resume:
1. Read the document thoroughly
2. Extract all structured information: name, contact, education, experience, skills, publications, awards
3. Present a summary of what was extracted
4. Ask follow-up questions for gaps (behavioral profile, career goals, deal-breakers, salary expectations, references)
5. Proceed to file generation (Step 3)
---
## Path B: 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
- Languages spoken (with proficiency levels)
- 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:** "What job titles should I search for? For example: Data Scientist, ML Engineer, Geophysicist." Collect 3-8 specific titles.
- **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 includes tools for Danish job portals (Jobindex, Jobbank, Jobdanmark, Jobnet). Are these the right ones for you, or do you use other sites?" Note: if the user is outside Denmark, acknowledge that the built-in CLI tools are Denmark-specific and suggest they can add their own portal integrations or rely on LinkedIn/Google site-searches.
**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 all information is collected (via either path), generate the following files:
### 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`
Write the full candidate profile with structured sections: Identity, Education, Professional Experience, Independent Projects, Technical Skills, Publications, Awards, References.
### 3. Populate `02-behavioral-profile.md`
Write the behavioral profile based on assessment results or synthesized answers.
### 4. Update `04-job-evaluation.md`
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`
Add role-specific profile statement templates based on their background.
### 6. Update `07-interview-prep.md`
Create STAR examples from their actual experience (at least 3-4 examples).
### 7. Update `cv/main_example.tex`
Replace placeholder personal data with their actual name, contact info, and add their education and most recent experience entries.
### 8. 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:
- 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
> - `.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`
>
> **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
---
## Design Principles
- Each section is a natural conversation, not a form
- The user can skip optional sections
- Synthesize answers into structured formats (the user doesn't 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) proactively suggests role types the user may not have considered
- At the end, suggest running `/scrape` and `/apply` with a test job posting