home / skills / theaayushstha1 / job-applier-agent / apply-job

apply-job skill

/skills/apply-job

This skill automates job applications with AI-tailored resumes and cover letters, plus recruiter outreach to maximize response rates.

npx playbooks add skill theaayushstha1/job-applier-agent --skill apply-job

Review the files below or copy the command above to add this skill to your agents.

Files (4)
SKILL.md
9.3 KB
---
name: apply-job
description: Automated job applications with AI-powered resume tailoring, cover letters, and recruiter outreach via email and LinkedIn.
license: MIT
metadata:
  author: theaayushstha1
  version: "3.1.0"
allowed-tools:
  - Read
  - Write
  - Edit
  - Glob
  - Grep
  - WebFetch
  - WebSearch
  - Bash
  - mcp__playwright__browser_navigate
  - mcp__playwright__browser_snapshot
  - mcp__playwright__browser_click
  - mcp__playwright__browser_type
  - mcp__playwright__browser_fill_form
  - mcp__playwright__browser_file_upload
  - mcp__playwright__browser_take_screenshot
  - mcp__playwright__browser_wait_for
  - mcp__playwright__browser_evaluate
  - mcp__playwright__browser_console_messages
  - mcp__playwright__browser_run_code
  - mcp__playwright__browser_press_key
---

# Job Application Agent

Automated job application system with multi-channel recruiter outreach.

## Quick Start

```bash
/apply-job <url>              # Apply to specific job
/apply-job search <query>     # Search and batch apply
/apply-job outreach <url>     # Recruiter outreach only
/apply-job status             # View statistics
/apply-job score <url>        # Score job fit only
```

## Setup Required

Before first use, ensure these files exist:

| File | Purpose |
|------|---------|
| `$APPLIER_HOME/data/profile.json` | Your personal info (from template) |
| `$APPLIER_HOME/data/applications.json` | Application tracking |
| `$APPLIER_HOME/resume/master_resume.md` | Your complete resume |
| `$APPLIER_HOME/resume/formatting_rules.md` | **CRITICAL** - Exact resume formatting specs |
| `$APPLIER_HOME/resume/create_resume.py` | Master Python script for DOCX generation |
| `$APPLIER_HOME/templates/cover_letter.md` | Cover letter template |
| `$APPLIER_HOME/templates/cold_email.md` | Cold email template |

**$APPLIER_HOME** = `~/job-applier-agent` (cross-platform)

See [SETUP.md](SETUP.md) for installation instructions.

---

## Core Principles

### AUTO-PROCEED Mode
- **DO NOT** ask for confirmation at routine steps
- **JUST DO IT** - proceed through entire workflow automatically
- **ONLY STOP** for: login walls, CAPTCHA, critical errors, fit score < 5.0

### ⚠️ Outreach Order (CRITICAL)
```
1. Find recruiters on LinkedIn (names, titles, URLs)
2. Discover email addresses (WebSearch company email pattern)
3. Send cold emails via Gmail FIRST
4. THEN send LinkedIn connection requests
5. Track everything in applications.json
```
**Email = PRIMARY (higher response rate). LinkedIn = SECONDARY.**

---

## Workflow: Apply to Job URL

### Step 1: Extract Job Description
```
1. Navigate to job URL with Playwright
2. Capture page snapshot
3. Extract: title, company, location, requirements
4. Identify key skills/technologies
```

### Step 2: Score Job Fit (0-10 each)
- **Technical Fit**: Skills match percentage
- **Level Match**: Appropriate for experience level
- **Location**: Remote/local/relocation
- **Mission**: Company alignment

Score >= 5.0 → AUTO-PROCEED | Score < 5.0 → Notify user

### Step 3: Tailor Resume

**CRITICAL:** Follow [formatting_rules.md](../../resume/formatting_rules.md) exactly!

```
1. Read $APPLIER_HOME/resume/master_resume.md
2. Copy master Python script (create_resume.py)
3. Analyze JD for:
   - Required technologies
   - Nice-to-have technologies
   - Scale/performance language
   - Domain keywords (AI, data, etc.)
4. Modify CONTENT ONLY in the copied script:
   - Reword bullets to match JD language
   - Bold technologies that match JD exactly
   - Reorder skills (JD technologies first)
   - Reorder projects (most relevant first)
   - Add power words matching JD focus
5. NEVER modify functions, margins, font sizes, or spacing
6. Save tailored script to $APPLIER_HOME/applications/<Company>/
7. Generate DOCX with: python create_<company>_resume.py
```

**Tailoring Rules:**
- NEVER add skills you don't have
- NEVER fabricate metrics or achievements
- DO reword bullets using JD terminology
- DO bold exact technologies from JD
- DO reorder sections for relevance
- DO add scale/performance words if JD mentions them

**Power Words by JD Focus:**
| JD Focus | Use These Words |
|----------|-----------------|
| Scale | "high-traffic", "thousands of requests", "production system" |
| Performance | "sub-second", "reduced latency", "optimized" |
| Data | "data pipelines", "real-time", "event processing" |
| AI | "AI-powered", "LLMs", "ML models" |

### Step 4: Generate Cover Letter
```
1. Read $APPLIER_HOME/templates/cover_letter.md
2. Research company (WebFetch)
3. Personalize for role + company
4. Keep to 250-350 words
5. Save to $APPLIER_HOME/applications/<Company>/
```

### Step 5: Auto-Fill Application
Use Playwright to fill forms based on platform:
- LinkedIn Easy Apply
- Company career pages (Greenhouse, Lever, Workday, ADP, etc.)
- Upload resume, add cover letter if field exists

### Step 6: Track & Screenshot
```
1. Take confirmation screenshot
2. Update $APPLIER_HOME/data/applications.json
3. Update stats
```

### Step 7: Recruiter Outreach

See [WORKFLOWS.md](WORKFLOWS.md) for detailed outreach steps.

**Summary:**
1. Search LinkedIn for company recruiters (3+ people)
2. Discover emails via WebSearch (company email pattern)
3. Send cold emails via Gmail (use template)
4. Send LinkedIn connections (after emails)
5. Track all outreach in applications.json

---

## Email Discovery

### Common Patterns (try in order)
```
Startups:      [email protected]
Mid-size:      [email protected], [email protected]
Enterprise:    [email protected], [email protected]
```

### Discovery Method
```
1. WebSearch: "[Company] email format site:rocketreach.co"
2. WebSearch: "[Name] [Company] email"
3. Apply pattern to recruiter names
```

---

## Profile Configuration

All personal data comes from `$APPLIER_HOME/data/profile.json`:

```json
{
  "personal": {
    "name": "Your Name",
    "email": "[email protected]",
    "phone": "123-456-7890",
    "location": "City, State"
  },
  "links": {
    "website": "https://yoursite.com",
    "linkedin": "linkedin.com/in/you",
    "github": "github.com/you"
  },
  "education": {
    "school": "University Name",
    "degree": "BS Computer Science",
    "gpa": "3.9",
    "graduation": "May 2026"
  },
  "headline": "Your professional headline",
  "top_skills": ["Python", "React", "AWS"],
  "flagship_project": {
    "name": "Project Name",
    "description": "Brief description",
    "users": "100+"
  },
  "work_auth": true,
  "willing_to_relocate": true,
  "location_preference": ["Remote", "NYC", "SF"]
}
```

See [profile-template.json](profile-template.json) for full template.

---

## Application Tracking

`$APPLIER_HOME/data/applications.json` schema:

```json
{
  "applications": [{
    "id": "company-date-001",
    "company": "Company Name",
    "role": "Job Title",
    "url": "https://...",
    "platform": "linkedin|greenhouse|workday|adp",
    "applied_date": "2026-01-27",
    "status": "applied|interviewed|rejected|offer",
    "fit_score": 7.5,
    "cover_letter": true,
    "outreach": [{
      "name": "Recruiter Name",
      "title": "Technical Recruiter",
      "email": "[email protected]",
      "linkedin": "linkedin.com/in/...",
      "email_sent": true,
      "connection_sent": true,
      "date": "2026-01-27"
    }]
  }],
  "stats": {
    "total": 0,
    "applied": 0,
    "interviewed": 0,
    "emailsSent": 0,
    "connectionsSent": 0
  }
}
```

---

## Cold Email Template

```
Subject: Referral Request - [Role] Application | [School] [Major] Senior

Hi [First Name],

I just applied for the [Role] position at [Company] and wanted to reach out.

I'm a [Major] senior at [School] ([GPA] GPA) graduating [Graduation].
[Flagship project description with metrics].

[1-2 sentences about why THIS company excites you]

Would appreciate if you could review my application or put in a referral.

Thanks!
[Name]
[Website]
[Phone]
```

**Rules**: Under 150 words. Personalize company line. Include contact info.

---

## Error Handling

| Error | Action |
|-------|--------|
| Login required | Notify user, wait for "continue" |
| CAPTCHA | Notify user, wait |
| Rate limit | Wait 60s, retry once, skip if still blocked |
| Email failed | Log, continue with LinkedIn |
| Form field missing | Screenshot, ask user |

---

## Reference Files

| File | Content |
|------|---------|
| [WORKFLOWS.md](WORKFLOWS.md) | Detailed step-by-step workflows |
| [SETUP.md](SETUP.md) | Installation & configuration |
| [profile-template.json](profile-template.json) | Profile data template |
| [formatting_rules.md](../../resume/formatting_rules.md) | **CRITICAL** - Exact DOCX formatting specs |

---

## Path Variables

| Variable | Default | Description |
|----------|---------|-------------|
| `$APPLIER_HOME` | `~/job-applier-agent` | Base directory |
| `$APPLICATIONS_DIR` | `$APPLIER_HOME/applications` | Per-company files |

**Cross-platform**: Use `~/` which expands to home directory on all OS.

---

## Best Practices

1. **Email FIRST, LinkedIn SECOND** - Always send emails before connections
2. **AUTO-PROCEED** - Don't ask, just do (except critical errors)
3. **Track everything** - Update applications.json after every action
4. **Personalize** - Reference specific company details in outreach
5. **Screenshot** - Capture confirmation for records
6. **Be honest** - Never fabricate skills or metrics

---

**Line Count**: ~280 (under 500 ✓)
**Cross-Platform**: Yes (uses ~/ paths) ✓
**User-Agnostic**: Yes (data in profile.json) ✓

Overview

This skill automates applying to jobs by tailoring resumes, generating cover letters, and performing multi-channel recruiter outreach via email and LinkedIn. It runs end-to-end workflows that score fit, auto-fill applications, and track every submission and outreach attempt. It is designed for high-volume, personalized applications while preserving strict honesty and formatting rules.

How this skill works

The agent scrapes the job posting, extracts requirements and keywords, and computes a fit score. For suitable roles it programmatically tailors a DOCX resume (content-only edits), generates a 250–350 word cover letter, and submits applications using headless browser automation. After applying it finds recruiters, discovers emails, sends cold emails first, then LinkedIn requests, and logs screenshots and metadata to an applications database.

When to use it

  • Apply to a single job URL with a tailored resume and cover letter
  • Batch-apply to many jobs from a search query
  • Conduct recruiter outreach after submitting an application
  • Score job fit before committing effort to an application
  • Automate repetitive form filling on LinkedIn and common ATS platforms

Best practices

  • Keep your profile.json accurate and complete before running the agent
  • Never alter resume formatting rules; change content only when tailoring
  • Do not fabricate skills, metrics, or accomplishments
  • Send cold emails before LinkedIn connection requests for higher response rate
  • Track every action and save confirmation screenshots in applications.json
  • Monitor for login walls, CAPTCHA, or rate limits and intervene when prompted

Example use cases

  • Apply automatically to 100+ roles matching a search query while preserving personalization
  • Tailor and generate a DOCX resume for a specific company using JD language and power words
  • Send prioritized outreach: discover recruiters, infer emails, send concise cold email, then follow up with LinkedIn requests
  • Score a job posting to decide whether to auto-proceed or skip low-fit roles
  • Maintain a searchable history of applications, outreach status, and statistics for weekly review

FAQ

How does the fit score affect automation?

A fit score below the configured threshold halts AUTO-PROCEED and notifies you; scores at or above the threshold continue through the full automated workflow.

Can it change resume formatting or add skills I don’t have?

No. The tool enforces exact formatting rules and prohibits fabricating skills or metrics; tailoring is limited to rewording, reordering, and bolding technologies you actually have.

What happens if email delivery fails?

Failures are logged and the workflow continues with LinkedIn outreach; the agent retries common recoverable errors according to configured retry rules.