skills/job-apply/SKILL.md
Fill job applications using Chrome DevTools MCP — triggers Simplify extension first, then intelligently fills remaining fields from resume and project data.
npx skillsauth add khetansarvesh/ai_skills_repo job-applyInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Automate job application filling using Chrome DevTools MCP tools. Uses the Simplify browser extension for initial auto-fill, then intelligently fills remaining fields from the user's resume and project descriptions.
Notion (fetch via python3 scripts/notion/page_reader.py resume) — personal info, education, experience, skills (shared, at repo root)Notion (fetch via python3 scripts/notion/page_reader.py projects) — project descriptions and reusable answer snippets (shared, at repo root)NOTION_TOKEN environment variable set — for querying evaluated jobs and updating statusRun the query script to get all "Evaluated" jobs from Notion:
python3 scripts/notion/db_applications.py query --status "Evaluated"
Parse the JSON output — get list of {page_id, company, role, url, score}.
Filter: only process jobs that have a URL (skip rows with url: null).
Show the user the list and ask for confirmation:
Found N evaluated jobs to apply to:
1. Cohere — Applied AI Engineer (4.4) — https://...
2. Together AI — Research Engineer (3.8) — https://...
...
Proceed with all N?
Read profile files to have all user data available:
Notion (fetch via python3 scripts/notion/page_reader.py resume) for structured data (name, email, education, experience, skills)Notion (fetch via python3 scripts/notion/page_reader.py projects) for project summaries and reusable answer snippetspython3 scripts/notion/page_reader.py roma # ROMA recursive deep search agent
python3 scripts/notion/page_reader.py sera # SERA semantic embedding agent
python3 scripts/notion/page_reader.py mroma # m-ROMA multimodal extension
python3 scripts/notion/page_reader.py deep-research # Multi-agent deep research at Strategy
python3 scripts/notion/page_reader.py txt2sql # Text2SQL agent at Piramal
Requires NOTION_TOKEN env var set.If profile files are empty/incomplete, warn the user and ask them to fill in the data first.
Load evaluation context (if available):
Each row in the Notion database is a page. The evaluation report is stored as the page body content. Fetch it using the existing script with the page_id directly:
# The page_id comes from db_applications.py query output
python3 scripts/notion/page_reader.py {page_id}
If the page body has content, extract:
When evaluation context is available, use these enhanced framing rules for open-ended answers:
If no evaluation exists, proceed with profile data only — the skill works fine without it.
For each job, sequentially:
ALWAYS open each job in a NEW TAB — use mcp__chrome-devtools__new_page (NEVER navigate in existing tab).
Simplify adds a floating button overlay to job application pages. Find and click it:
Take a screenshot to locate the Simplify button
[class*="simplify"], [id*="simplify"], button with Simplify textClick the Simplify button:
Use mcp__chrome-devtools__click with the Simplify button's location
Wait for Simplify to populate fields:
Use mcp__chrome-devtools__wait_for with timeout of 5000ms for form fields to be filled
If Simplify button is not found, skip to Step 3c (manual fill all fields)
If Simplify opens a modal/popup, interact with it to confirm auto-fill
After Simplify runs (or if skipped):
Take a screenshot of the full form
Scroll down and take additional screenshots if the form is long
Use mcp__chrome-devtools__press_key with "PageDown" then screenshot again
Repeat until you've seen the entire form
Identify unfilled fields by analyzing the screenshots:
For each unfilled field, match it to profile data and fill:
Text Inputs (name, email, phone, LinkedIn, etc.)
Use mcp__chrome-devtools__click on the field first
Use mcp__chrome-devtools__fill with the value from resume.md
Dropdowns (work authorization, degree type, etc.)
Use mcp__chrome-devtools__click to open the dropdown
Use mcp__chrome-devtools__take_screenshot to see options
Use mcp__chrome-devtools__click on the correct option
Textareas (cover letter, "why this role", project descriptions)
Use mcp__chrome-devtools__click on the textarea
Use mcp__chrome-devtools__fill with content adapted from projects.md
For open-ended questions, follow these strict rules:
python3 scripts/notion/page_reader.py {project}) when composing answersFile Uploads (resume PDF, cover letter)
Use mcp__chrome-devtools__upload_file with the path from resume.md "Resume PDF Path" field
Checkboxes / Radio Buttons
Use mcp__chrome-devtools__click on the appropriate option
Field Matching Guide
| Form Label Pattern | Profile Source | | ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | | First Name, Last Name, Full Name | resume.md > Personal Information > Full Name | | Email, E-mail | resume.md > Personal Information > Email | | Phone, Mobile, Telephone | resume.md > Personal Information > Phone | | LinkedIn, LinkedIn URL | resume.md > Personal Information > LinkedIn | | GitHub, Portfolio, Website | resume.md > Personal Information > GitHub/Portfolio | | City, Location, Address | resume.md > Personal Information > Location | | University, School, College | resume.md > Education > University | | Degree, Education Level | resume.md > Education > Degree | | Major, Field of Study | resume.md > Education > Major | | GPA | resume.md > Education > GPA | | Graduation Date, Grad Year | resume.md > Education > Graduation Date | | Current Company, Employer | resume.md > Work Experience > Experience 1 > Company | | Current Title, Job Title | resume.md > Work Experience > Experience 1 > Title | | Years of Experience | resume.md > Additional Information > Years of Experience | | Work Authorization, Legally authorized | resume.md > Work Authorization | | Visa Sponsorship, Require sponsorship | resume.md > Work Authorization > Visa sponsorship required | | Salary, Compensation, Pay | Flag for user -- do not auto-fill unless specified in resume.md | | Start Date, Available from | resume.md > Additional Information > Earliest Start Date | | How did you hear about us, Referral | resume.md > Additional Information > How did you hear about us | | Gender, Race, Ethnicity, Veteran, Disability | resume.md > Additional Information (EEO fields -- use values if provided, otherwise select "Decline to self-identify") | | Resume, CV (file upload) | resume.md > Resume PDF Path | | Cover Letter (file upload) | resume.md > Cover Letter PDF Path | | Tell us about yourself, Why interested, Describe a project | projects.md > select most relevant snippet and adapt |
Greenhouse
Lever
Workday
Ashby
Generic ATS / Custom Forms
Take a screenshot of the completed form for reference.
Update the row to "Almost Applied":
python3 scripts/notion/db_applications.py update-status --page-id "{page_id}" --status "Almost Applied"
Do NOT wait for user to submit — move on immediately to the next job.
After all jobs processed, summarize:
Applied to N jobs. All forms filled and open in separate tabs.
Review each tab and click Submit when ready.
Tabs open:
1. Cohere — Applied AI Engineer → Status: Almost Applied
2. Together AI — Research Engineer → Status: Almost Applied
...
Use mcp__chrome-devtools__click on the field (triple-click to select all)
Use mcp__chrome-devtools__fill with the correct value
| Issue | Solution |
| ----------------------------- | --------------------------------------------------------------------------- |
| Simplify button not found | Skip Simplify, fill all fields manually from profile data |
| Chrome DevTools not connected | Ask user to ensure Chrome is open and MCP server is running |
| Field won't accept input | Try clicking the field first, then use type_text instead of fill |
| Dropdown options not visible | Take screenshot after clicking, use press_key with arrow keys to navigate |
| Form has iframes | Use evaluate_script to check for iframes, switch context if needed |
| File upload fails | Verify the PDF path in resume.md is correct and file exists |
documentation
Translate visa application documents (images) to English and create a bilingual PDF with original and translation
development
A comprehensive verification system for Claude Code sessions.
development
Use this skill when writing new features, fixing bugs, or refactoring code. Enforces test-driven development with 80%+ coverage including unit, integration, and E2E tests.
tools
SwiftUI architecture patterns, state management with @Observable, view composition, navigation, performance optimization, and modern iOS/macOS UI best practices.