AgentSkillsCN

apply-job

为求职申请生成量身定制的简历和求职信。当用户说/申请、要求写求职信、想申请某个职位、需要求职帮助,或提供职位URL时使用。按照瑞士正式风格规则,统筹职位分析、公司研究和文档生成。

SKILL.md
--- frontmatter
name: apply-job
description: Generate tailored CV and cover letter for job applications. Use when user says /apply, asks to write a cover letter, wants to apply to a job posting, needs help with job applications, or provides a job URL. Orchestrates job analysis, company research, and document generation following Swiss formal style rules.
degree-of-freedom: low
allowed-tools: Read, Write, Edit, mcp__mcp-server-firecrawl__*

@.claude/skills/apply-job/references/job-types.md

Apply Job Skill

Generate tailored, human-like cover letters and CV recommendations for job applications.


How This Skill Works

This skill uses lazy loading to minimize context usage. Context files are loaded only when needed.

Workflow:

  1. Analyze job & classify → 2. Clarify with user → 3. Research company → 4. Generate content → 5. Validate quality → 6. Create output

Context Loading Points:

  • Startup: job-types.md only (~800 tokens)
  • After classification: profile-essential.md (~2,000 tokens)
  • After clarification: writing-rules.md (~1,500 tokens)
  • If Swiss company: swiss-market-rules.md (~600 tokens)

Skill Interface

Invocation: /apply [job-url-or-description]

Inputs:

  • Job URL (scraped via Firecrawl MCP)
  • OR pasted job description
  • User responses to clarification questions

Outputs (Generated by Claude - ALL MANDATORY):

  • job-description.md - Scraped job posting
  • cover-letter.md - Tailored cover letter
  • cover-letter.html - HTML version
  • cover-letter.pdf - MANDATORY PDF (max 2 pages, print-ready)
  • cv-{variant}.html - MANDATORY Copy of CV variant
  • cv-{variant}.pdf - MANDATORY CV PDF (max 2 pages)
  • application-email.md - Application email draft

Step 1: Analyze Job & Classify

Get the job description:

  • If URL provided: Scrape with Firecrawl MCP
  • If pasted: Parse key requirements

Classify job type by scanning for keywords (see job-types.md for details):

TypeKeywordsCV Variant
A: Digital Healthhealth, medical, wearable, clinicalcv-simon-yang-digital-health.html
B: AI/MLAI, ML, data science, analyticscv-simon-yang-ai-product.html
C: GenAI/DevToolsGenAI, LLM, developer, automationcv-simon-yang-genai-tools.html
D: ESG/ClimateESG, climate, risk, sustainabilitycv-simon-yang-reprisk.html

Gate 1 Check:

  • Job type classified with confidence >70%
  • CV variant selected
  • ≥3 matching keywords identified

After Gate 1 passes, load: references/profile-essential.md


Step 2: Clarify with User

Ask these questions before generating:

  1. "I've classified this as [Type X]. Is that correct?"
  2. "What 2-3 aspects of this role interest you most?"
  3. "Any specific achievement you want to emphasize?"
  4. "Company tone: startup casual, corporate formal, or Swiss formal?"
  5. "Any gaps or concerns to address proactively?"

Wait for user responses before proceeding.

After clarification, load: references/writing-rules.md


Step 3: Research Company

Use Firecrawl MCP to scrape:

  • Company website (About, Products, Team pages)
  • Recent news (search: "{company} funding 2024 2025")

Extract:

  • What they build (products, services)
  • Who they serve (customers, users)
  • Recent news (funding, launches)
  • Cultural signals

Gate 2 Check:

  • Company name verified (exactly as in JD)
  • Role title captured (exactly as in JD)
  • 3+ company-specific details extracted

If Swiss company detected, load: references/swiss-market-rules.md


Step 4: Generate Content

Cover Letter

Structure (3-4 paragraphs, no headers):

Opening (50-70 words):

  • Company-specific hook (NOT "I am writing to apply")
  • Why this company interests you
  • Your positioning

Body (200-280 words):

  • 2-3 evidence paragraphs
  • Each: Claim → Evidence → Result
  • Include 2+ quantified achievements
  • Include 3+ company-specific details

Closing (50-70 words):

  • Confident (no "grateful")
  • "I look forward to discussing..."

Total: 350-450 words

Style Rules (Non-Negotiable)

  • NO em-dashes (use periods, commas instead)
  • NO subjunctive ("would", "could", "might")
  • Active voice 90%+
  • Sentences: 10-20 words average
  • Tone: Swiss formal, professional, neutral

Vocabulary

Never use: "passionate about", "excited to apply", "unique opportunity", "I would be grateful", "thrilled", "humbled"

Prefer: "I built", "I led", "resulting in", "measured by", "I look forward to"

For full rules, see references/writing-rules.md.


Step 5: Validate (Gate 3)

Self-check before presenting:

Content Checks

  • Word count: 350-450
  • Company-specific details: ≥3 (list them)
  • Quantified achievements: ≥2 (list them)
  • Company name triple-verified against JD
  • Role title exact match to JD

Style Checks

  • No blacklisted phrases
  • No em-dashes (search for: —)
  • No subjunctive mood (would, could, might, should)
  • Active voice ≥90%
  • Confident closing (not "grateful")

Metrics Verification

For each numeric claim:

  1. Extract all metrics (patterns: X%, Xx, CHF X, X+)
  2. Cross-reference against Metrics Bank in profile-essential.md
  3. Mark VERIFIED or UNVERIFIED

If validation fails: Self-correct (max 2 iterations), then present with warning.

Quality Report (Collapsed)

Present to user:

code
Quality: PASSED ✓ (12/12 checks)
Word count: 412 | Company-specific: Yes | Metrics verified

[Show details]

Step 6: Create Output (Gate 4)

Create application folder with ALL files:

code
docs/applications/{company}/
├── job-description.md
├── cover-letter.md
├── cover-letter.html
├── cover-letter.pdf         ← MANDATORY
├── cv-{variant}.html        ← MANDATORY (copy from variants/)
├── cv-{variant}.pdf         ← MANDATORY
└── application-email.md

PDF Generation (MANDATORY - DO NOT SKIP)

Cover Letter PDF:

javascript
// Use Puppeteer to generate PDF
await page.pdf({
    path: 'cover-letter.pdf',
    format: 'A4',
    printBackground: true,
    margin: { top: 0, right: 0, bottom: 0, left: 0 }
});

CV Copy + PDF:

  1. Copy CV variant from docs/profile/variants/cv-simon-yang-{variant}.html
  2. Generate PDF with same Puppeteer settings
  3. Both files go in application folder

Visual Verification (MANDATORY)

Take screenshot of cover-letter.html and verify:

  • Fits on 1-2 pages max
  • Professional formatting
  • No broken layouts
  • Print-ready appearance

Gate 4 Check:

  • All placeholders replaced (no {{COMPANY}}, etc.)
  • HTML renders correctly
  • cover-letter.pdf generated (max 2 pages)
  • CV variant copied to folder (HTML + PDF)
  • Screenshot taken to verify print quality
  • File structure complete (7 files minimum)

Cover letter HTML: Use template from docs/applications/_templates/cover-letter-template.html

Application email: Brief, Swiss formal, reference role and materials.


Metrics Bank (Quick Reference)

Use 2-3 metrics per cover letter. Full details in profile-essential.md.

MetricValueUse For
D30 Retention37% vs 8%Product, analytics
Retention Lift125%Data-driven decisions
Detection Rate3xMedical, preventive
Series ACHF 11.5MExecutive, fundraising
Team Growth1 to 8Leadership
Solo Apps5 productionTechnical, GenAI

Reference Files

FileWhen LoadedTokens
references/job-types.mdStartup (@ import)~800
references/profile-essential.mdAfter classification~2,000
references/writing-rules.mdAfter clarification~1,500
references/swiss-market-rules.mdIf Swiss company~600
references/quality-rules.mdDuring validation~800

For full context loading order, see workflows/context-loading.md.


Example Invocation

code
User: /apply https://jobs.example.com/product-manager-ai

Claude: I'll analyze this job description.

[Scrapes JD]

I've classified this as **Type B: AI/ML Product Management**. Is that correct?

[Loads profile-essential.md]

What 2-3 aspects of this role interest you most?
Any specific achievement you want to emphasize?
Company tone: startup casual, corporate formal, or Swiss formal?
Any gaps to address?

[User responds]
[Loads writing-rules.md]

[Researches company, generates cover letter]

Here's your tailored cover letter:

[Cover letter text]

Quality: PASSED ✓ (12/12 checks)
Word count: 412 | Company-specific: Yes | Metrics verified

I recommend using **cv-simon-yang-ai-product.html** for this application.

Shall I create the application folder and save the files?

Success Criteria

  1. Efficient context - Startup load <1,000 tokens
  2. Correct classification - Job type matches JD keywords
  3. Company research - Extracts 3+ specific details
  4. Quality output - Passes all 12 validation checks
  5. Human-like writing - No AI tells, reads naturally
  6. Complete deliverables - ALL 7 files created:
    • job-description.md
    • cover-letter.md
    • cover-letter.html
    • cover-letter.pdf (MANDATORY)
    • cv-{variant}.html (MANDATORY)
    • cv-{variant}.pdf (MANDATORY)
    • application-email.md
  7. Visual verification - Screenshot confirms print-ready quality