mirror of
https://github.com/MadsLorentzen/ai-job-search.git
synced 2026-09-17 08:36:25 +00:00
/apply wrote a CV and a cover letter to disk and then wrote nothing to job_search_tracker.csv, so a drafted and submitted application was invisible to /gmail-sync, /html-report, /notion-sync, /interview, /upskill aggregate mode, and to /rank's dedup exclusion. The safety net that would have caught it - /gmail-sync - refuses to create missing rows, so the failure it exists to catch is the one that disables it. Nothing detected the loss afterwards. Step 6b appends a drafted row carrying the two document paths, the fit rating and the posting URL, reusing /outcome's exact header so the two commands cannot diverge. It runs immediately after "Files Created" and before the optional application-form offer, which ends the turn on a question - anything placed after that offer would be skipped whenever the user never answers, reproducing the bug. Re-running /apply updates the row rather than duplicating it, and never moves a row that already reached applied or beyond back to drafted. The step is mirrored into job-application-assistant, which defers to it rather than restating it, because /scrape Step 5 routes straight into the skill; /scrape Step 6 now defers to the same step instead of adding a row of its own. seen_jobs.json is deliberately left alone: drafting is not applying, and that file's vocabulary has no value for either. /rank builds its exclusion set from company+role in the tracker regardless of status. drafted is introduced into the status vocabulary, and every reader that meant "submitted" is updated to say so. These readers define their open set by exclusion from the final statuses, so a new non-final value would otherwise have joined all of them silently: /outcome's follow-up branch would have drafted a chase email to an employer who never received an application, /gmail-sync would have searched for mail about it and then flagged it as stale, /notion-sync would have published an "Applied on" date for it, and /html-report would have counted it in the headline application total. /outcome Step 4 also overwrites the draft date with the submission date when a row leaves drafted, so the date column keeps meaning "applied on". The wider vocabulary reconciliation - underscore versus space, the separate archive enum - stays a separate concern.
4.1 KiB
4.1 KiB
name, description, allowed-tools, framework_version
| name | description | allowed-tools | framework_version |
|---|---|---|---|
| job-application-assistant | Assists with job applications: evaluating job postings, tailoring CVs, writing cover letters, and preparing for interviews. Triggers on keywords like: job posting, job application, CV, cover letter, resume, interview prep, job fit, career, application, apply, ansøgning, stilling | Read, Glob, Grep, WebFetch, WebSearch, Bash, Edit, Write, AskUserQuestion | 1.3.0 |
Job Application Assistant
Workflow
When the user provides a job posting (URL or text), follow this workflow:
Step 1: Research & Evaluate Fit
- Fetch the job posting content (use WebFetch for URLs). A 403 is not a dead end - follow the escalation order in
09-web-research.mdbefore concluding a page is unavailable, and prefer the employer's own careers posting over an aggregator listing - Analyze the posting for required competencies, keywords, and priorities
- Research the company (website, LinkedIn, mission, recent news), per
09-web-research.md - Score the posting against the candidate's profile using the framework in
04-job-evaluation.md - Present the evaluation table and verdict
- Suggest whether the candidate should call the employer before applying (see
04-job-evaluation.mdfor guidance) - Ask the user if they want to proceed with an application
Step 2: Tailor CV
- Read the most relevant existing CV variant from
cv/as a starting point - Follow the guidelines in
05-cv-templates.md - Create
cv/main_<company>_<role>.texwith tailored content - Adjust: profile statement, skills section, experience bullet emphasis, section order
Step 3: Write Cover Letter
- Follow the writing style rules in
03-writing-style.md(critical: no em-dashes, no cliches) - Follow the template structure in
06-cover-letter-templates.md - Create
cover_letters/cover_<company>_<role>.tex - Ensure the letter connects specific experience to the role requirements
Step 3b: Record the Application
- Run this once both documents exist. A CV or cover letter drafted alone is not yet an application.
- Follow
/applyStep 6b (.claude/commands/apply.md) exactly: same header, same match-then-update rule, samedraftedrow, same prohibition on touchingjob_scraper/seen_jobs.json. It is stated there once so the two paths cannot drift. Two of its values are named in/apply's own terms:cv_file/cover_letter_fileare the paths written in Steps 2 and 3 here, andsourceis the posting URL from Step 1. - This step exists here because
/scrapeStep 5 routes straight into this skill. Without it, that path writes two documents and records nothing.
Step 4: Interview Preparation
- Follow the framework in
07-interview-prep.md - Prepare STAR-format answers for likely questions
- Identify role-specific talking points
- Draft questions the candidate should ask the interviewer
Reference Files
| File | Purpose |
|---|---|
01-candidate-profile.md |
Education, experience, skills, publications, awards |
02-behavioral-profile.md |
Behavioral assessment, strengths, ideal environments |
03-writing-style.md |
Tone, structure, do's and don'ts |
04-job-evaluation.md |
Scoring framework for job fit |
05-cv-templates.md |
LaTeX CV structure and tailoring rules |
06-cover-letter-templates.md |
LaTeX cover letter structure and tailoring rules |
07-interview-prep.md |
STAR examples, tough questions, roleplay guidelines |
08-application-forms.md |
Portal free-text fields: self-introduction, project entries, character-limited pitches |
09-web-research.md |
Fetching postings and company pages: trust boundary, the WebFetch 403 fallback, escalation order, claim verification |
Quick Commands
The user may also ask for individual steps without the full workflow:
- "Evaluate this job posting" - Step 1 only
- "Write a CV for [company]" - Step 2 only
- "Write a cover letter for [role] at [company]" - Step 3 only
- "Help me prepare for an interview at [company]" - Step 4 only
- "What jobs should I look for?" - Career strategy discussion using profile + evaluation framework