agentleFS
xiding-codexiding-code/job-application-skills/application-filler/SKILL.md

application-filler

Skill4 starsChanged 7 months agoMITView on GitHub

Automatically fill out job application forms using browser automation (Chrome MCP and/or computer-use). Use this skill whenever the user needs to submit a job application, after the job-screener returns APPLY and the cover letter is ready (if applicable). Handles Greenhouse, Lever, Workday, and other common ATS platforms. Trigger on: "fill out application", "submit application", "apply to this job", or after completing the cover-letter-writer workflow for an APPLY-scored position.

We split this skill into the rules it gives an agent

9 rules. About 0 are common, 9 are distinctive, and 0 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈9

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    If this is the first job-application skill invoked in this session, run the self-check skill first.

    line 13
  2. Distinctive:

    Important: Never hardcode personal information.

    line 57
  3. Distinctive:

    When an application form has file upload fields (resume, cover letter, portfolio, transcript, etc.):

    line 61
  4. Distinctive:

    If no matching registered file exists, tell the user: "This form asks for a [type] but I don't have one registered.

    line 69
  5. Distinctive:

    Wait for dropdown options to appear

    line 83
  6. Distinctive:

    Do NOT retry with different path formats — it's a platform limitation

    line 88
  7. Distinctive:

    Check if profile data is pre-populated before overwriting

    line 122
  8. Distinctive:

    After the user submits, trigger the application-tracker skill to automatically:

    line 163
  9. Distinctive:

    Verify cover letter PDF is saved

    line 166

≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Application Filler

This skill automates filling out job application forms. It handles common ATS platforms (Greenhouse, Lever, Workday, Handshake-embedded) using Chrome MCP tools and computer-use when needed.

Pre-Flight

If this is the first job-application skill invoked in this session, run the self-check skill first. The filler needs the correct resume filename and latest personal data. Self-check also reveals which companies have already been applied to — avoiding duplicate submissions.

Application Data

All personal data comes from config.yml. Map config fields to form fields:

First Name:         config.personal.first_name
Last Name:          config.personal.last_name
Preferred Name:     config.personal.preferred_name
Email:              config.personal.email
Phone:              config.personal.phone
Country:            config.personal.country

# Education
School:             config.education.school
Degree:             config.education.degree
Discipline:         config.education.discipline
Start Date Year:    config.education.start_year
End Date Year:      config.education.end_year

# Work
Current Company:    config.work.current_company
Current Title:      config.work.current_title
Years of Experience: config.work.years_of_experience

# Common Dropdown Answers
Authorized to work: config.visa.authorized_to_work → Yes/No
Require sponsorship: config.visa.needs_sponsorship → Yes/No
Gender:             config.form_defaults.gender
Race/Ethnicity:     config.form_defaults.race_ethnicity
Veteran status:     config.form_defaults.veteran_status
First gen college:  config.form_defaults.first_gen_college (if "Ask me" → prompt user)
How heard:          config.form_defaults.how_heard
Spoken languages:   config.form_defaults.spoken_languages
Written languages:  config.form_defaults.written_languages
Privacy consent:    Yes (always)
Location pref:      Based on JD location (default to the job's city)

# Files (on user's computer)
Resume:             config.files.resume
Cover Letter:       config.files.cover_letter_dir/[Company]_CoverLetter_[LastName].pdf

Important: Never hardcode personal information. If a config field is missing, ask the user rather than guessing.

File Uploads

When an application form has file upload fields (resume, cover letter, portfolio, transcript, etc.):

  1. Resume → use config.files.resume
  2. Cover Letter → use config.files.cover_letter_dir/[Company]_CoverLetter_[LastName].pdf
  3. Other uploads (portfolio, transcript, writing sample, etc.) → check config.registered_files for matching types:
    • Form asks for "portfolio" → look for type: "portfolio" in registered_files
    • Form asks for "transcript" → look for type: "transcript"
    • Form asks for "writing sample" → look for type: "writing"
    • If no matching registered file exists, tell the user: "This form asks for a [type] but I don't have one registered. Do you have a file to upload?"

This way, users who registered extra files in their config will have them auto-filled. Users who didn't will be prompted.

Platform-Specific Instructions

Greenhouse (job-boards.greenhouse.io)

Greenhouse is the most common ATS the user encounters. Key behaviors:

Combobox dropdowns require click→type→select: Greenhouse uses React combobox components. The form_input tool alone does NOT persist selections — the value appears in the field but isn't actually selected in the React state. You must:

  1. Click on the combobox field (use left_click on the ref)
  2. Type the desired value to filter the dropdown
  3. Wait for dropdown options to appear
  4. Click the matching dropdown option to select it

File uploads may fail via Chrome extension: The Chrome MCP file_upload tool returns "Not allowed" (-32000) on some Greenhouse forms due to CSP or extension restrictions. If this happens:

  • Do NOT retry with different path formats — it's a platform limitation
  • Fill all other fields first
  • Tell the user to manually upload resume and cover letter
  • Provide the exact file paths on his Mac for easy access

Form field order (typical Greenhouse):

  1. Personal info (name, email, phone, country)
  2. Resume upload
  3. Cover letter upload
  4. Education (school, degree, discipline, end date)
  5. LinkedIn / Website (skip unless the user has them)
  6. Work info (current company, experience, title)
  7. Custom questions (location preference, source, visa, etc.)
  8. Certifications (skip unless relevant)
  9. Privacy consent
  10. Submit

Lever (jobs.lever.co)

Similar to Greenhouse but simpler forms. form_input usually works directly for dropdowns. File uploads may also fail — same workaround applies.

Workday (myworkdayjobs.com)

Workday forms are more complex with multi-page flows:

  • Each section may be a separate page — click "Next" or "Save and Continue"
  • Dropdown fields often need a slight delay after typing before options appear
  • Some fields have auto-complete that requires selecting from suggestions
  • "How did you hear about us" is usually a required field

Handshake-Embedded Applications

Some applications are completed directly within Handshake:

  • Usually simpler forms
  • May auto-fill from Handshake profile
  • Check if profile data is pre-populated before overwriting

Workflow

Before filling any form:

  1. Verify the job-screener score is >= config.rubric.apply_threshold or user has explicitly approved
  2. Check if cover letter upload is available — if yes and config.cover_letter.must_write is true, ensure cover letter has been written and passed debate review
  3. Take a screenshot of the full form to understand all fields before starting

While filling:

  1. Fill fields top-to-bottom
  2. For each dropdown/combobox, use the click→type→select pattern
  3. Take screenshots periodically to verify selections persisted
  4. Skip optional fields unless the user has relevant data (LinkedIn, Website)
  5. For questions about race/gender/veteran status, use "Prefer not to say" or "Decline to self-identify" unless the user specifies otherwise

After filling:

  1. Scroll through the entire form to verify all fields
  2. List any fields that couldn't be filled (especially file uploads)
  3. Tell the user exactly what they need to do manually:
    • File uploads with exact paths from config.files.*
    • Any questions requiring their personal input
  4. Do NOT click Submit — user reviews and submits manually

ATS Anti-Bot Warning: Some ATS platforms (especially Workday) have bot detection. If you encounter CAPTCHAs, "unusual activity" warnings, or rate-limit errors, stop immediately and inform the user. Never attempt to bypass bot detection systems.

Known Issues and Workarounds

IssuePlatformWorkaround
file_upload returns "Not allowed"Greenhousethe user uploads manually; provide file paths
Combobox value doesn't persistGreenhouseUse click→type→select, not form_input alone
Dropdown shows "No options"AnyTry alternative terms (e.g., "Mandarin" instead of "Chinese")
Form resets after page navigationWorkdayFill all fields on current page before clicking Next
reCAPTCHA blocks submissionAnythe user must solve manually

Post-Submission Tracking

After the user submits, trigger the application-tracker skill to automatically:

  1. Append a row to the Job Tracker spreadsheet
  2. Save a JD snapshot markdown file
  3. Verify cover letter PDF is saved
  4. Report the updated application count to the user

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.