Job Application Skill
Fill out and submit job applications across LinkedIn, Indeed, Glassdoor, and ZipRecruiter.
General Approach
For every application:
- •Navigate to the job posting URL
- •Read the full job description
- •Verify the job is still a good match (check requirements vs USER.md)
- •Click the apply button
- •Fill in all form fields using data from USER.md
- •Upload resume from
/home/ubuntu/job-apply/data/resume.pdf - •Generate a cover letter if required (follow SOUL.md rules)
- •Review the application before submitting
- •Submit
- •Take a screenshot of the confirmation page
- •Call
log_applicationwith the result
Platform-Specific Instructions
LinkedIn Easy Apply
- •On the job page, click the "Easy Apply" button
- •LinkedIn shows a multi-step modal form:
- •Step 1 - Contact info: Verify name, email, phone (pre-filled from LinkedIn profile). Correct if needed.
- •Step 2 - Resume: Click "Upload resume" and select
/home/ubuntu/job-apply/data/resume.pdf. Remove any previously attached resume if it's not the current one. - •Step 3 - Additional questions: These vary by job. Common fields:
- •Years of experience: Use value from USER.md
- •Work authorization: Use value from USER.md
- •Sponsorship required: Use value from USER.md
- •Willing to relocate: Based on USER.md location preferences
- •Salary expectations: Use USER.md salary range (pick the midpoint if a single number is required)
- •Start date: "Immediately" or "2 weeks notice" (use USER.md notes)
- •Cover letter: Generate one if the field is present
- •Step 4 - Review: Verify all fields, then click "Submit application"
- •Wait for confirmation message ("Your application was sent")
- •Take screenshot
- •Log with status "applied", platform "linkedin"
LinkedIn Standard Apply (External)
- •Click "Apply" (non-Easy Apply) — this opens the company's external careers page
- •Wait for the external page to load fully
- •Look for the application form. Common patterns:
- •Greenhouse:
/jobs/[id]forms - •Lever:
jobs.lever.co/[company]/[id] - •Workday:
[company].wd5.myworkdayjobs.com - •Custom ATS or company website
- •Greenhouse:
- •Fill in standard fields:
- •First name, Last name
- •Email, Phone
- •Resume upload (find file input, upload PDF)
- •LinkedIn URL
- •Portfolio/GitHub URL
- •Cover letter (generate if required)
- •Work authorization questions
- •Demographic questions (skip or select "Decline to answer" / "Prefer not to say")
- •Submit and screenshot
- •Log result
Indeed
- •On the job page, click "Apply now" or "Apply on company site"
- •If "Apply now" (Indeed's application):
- •Indeed shows a multi-step form:
- •Contact info: Verify/fill name, email, phone
- •Resume: Upload PDF or confirm Indeed resume
- •Questions: Answer job-specific questions using USER.md
- •Review & Submit
- •Indeed shows a multi-step form:
- •If "Apply on company site":
- •Follow the external site flow (similar to LinkedIn Standard Apply)
- •Screenshot confirmation
- •Log with platform "indeed"
Glassdoor
- •On the job page, click "Apply" or "Easy Apply"
- •If Glassdoor Easy Apply:
- •Fill contact info
- •Upload resume
- •Answer additional questions
- •Submit
- •If external redirect:
- •Follow external site flow
- •Screenshot and log with platform "glassdoor"
ZipRecruiter
- •On the job page, click "Apply" or look for "1-Click Apply"
- •If 1-Click Apply:
- •Confirm your ZipRecruiter profile details
- •Click submit
- •If standard apply:
- •Fill in the form fields
- •Upload resume
- •Submit
- •Screenshot and log with platform "ziprecruiter"
Form Field Mapping
Map these common form fields to USER.md values:
| Form Field | USER.md Source |
|---|---|
| First Name / Last Name | Name (split on space) |
| Phone | Phone |
| City / Location | Location |
| LinkedIn URL | |
| GitHub / Portfolio | GitHub, Portfolio |
| Years of Experience | Years of Experience |
| Current Job Title | Derive from target roles |
| Desired Salary | Salary Range (midpoint or range) |
| Work Authorization | Work Authorization > Status |
| Sponsorship | Work Authorization > Sponsorship Required |
| Skills | Skills section |
| Education | Education section |
Handling Dropdowns
- •For dropdown menus, click to open, then look for the matching option
- •If no exact match, pick the closest option
- •For experience level dropdowns: map years to typical labels:
- •0-2 years → "Entry level" or "Junior"
- •3-5 years → "Mid-level" or "Associate"
- •6-9 years → "Senior"
- •10+ years → "Lead" or "Principal"
Resume Upload
- •The resume file is at
/home/ubuntu/job-apply/data/resume.pdf - •Look for file input elements (
<input type="file">) - •If there's a drag-and-drop zone, try clicking it to trigger the file dialog
- •If upload fails, try finding alternative upload methods on the page
Cover Letter Generation
When a cover letter is required:
- •Read the full job description
- •Generate a tailored cover letter following SOUL.md guidelines
- •Paste it into the cover letter field
- •Save the generated text in the
log_applicationcall (cover_letter field)
Post-Submission
After each application:
- •Take a screenshot: save to
/home/ubuntu/screenshots/[platform]-[company]-[timestamp].png - •Call
log_applicationwith:- •
platform: linkedin | indeed | glassdoor | ziprecruiter - •
company: Company name - •
title: Job title - •
url: Job posting URL - •
status: applied | failed | skipped - •
notes: Any relevant notes (why it failed/was skipped) - •
screenshotPath: Path to the screenshot
- •
- •Wait 30+ seconds before the next application (SOUL.md rate limiting)
Error Recovery
- •Page won't load: Wait 30 seconds, try once more, then skip
- •Form validation error: Read the error message, try to fix, retry once
- •CAPTCHA appears: Invoke the
captcha-solveskill - •"Already applied" message: Log as "skipped" with note "already applied on platform"
- •Application limit reached: Stop and notify user via WhatsApp