aerion/skills/job-tracker/SKILL.md
This skill should be used when the user runs /check-apps or asks to check job applications, scan Gmail for application updates, update the job tracker, sync application status, check for interview invitations, look for rejection emails, or ask about the status of their applications. It provides email classification rules, entity extraction logic, stage progression constraints, and sheet update constraints for the aerion job application tracking workflow.
npx skillsauth add luqmannurhakimbazman/ashford job-trackerInstall 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.
Track job application status by scanning Gmail and updating the Google Sheets "Job Tracker" in the hojicha Drive folder.
The Job Tracker sheet has these columns (in order):
| Column | Type | Values | |--------|------|--------| | A: Company | Text | Company name | | B: Role | Text | Role/position title | | C: Stage | Dropdown | Applied, Phone Screen, Online Assessment, Behavioral Interview, Onsite Interview, Rejected, Ghosted, Offered | | D: Last Contact Date | Date | YYYY-MM-DD format | | E: Notes | Text | Append-only summary notes |
Sheet tab name: job-tracker. Always use list_sheets to confirm if unsure.
Classify each email into a Stage using signals from the subject line, body, and sender. Refer to references/email-patterns.md for the full pattern catalog.
Stage mapping priority: If an email matches multiple stages, use the most advanced stage. For example, an email mentioning both "application received" and "online assessment link" maps to Online Assessment.
Stages have a natural forward order:
Applied → Phone Screen → Online Assessment → Behavioral Interview → Onsite Interview → Offered
(Rejected/Ghosted can override any stage — they are terminal states)
Rules:
For each email, extract:
Use the fallback order in references/email-patterns.md for entity extraction when company/role are not obvious.
Match emails to existing sheet rows by Company + Role (case-insensitive, fuzzy). Examples:
When in doubt, flag as ambiguous. If you are not confident that a company or role name refers to an existing row, do not silently create a duplicate — present it as ambiguous and let the user confirm the match or create a new row.
If no match is found and the email indicates a new application, create a new row with Stage = Applied.
YYYY-MM-DD: <summary>2026-02-26: Received OA link via CodeSignalAfter scanning, present results to the user in this format:
| Company | Role | Old Stage | New Stage | Note |
|---------|------|-----------|-----------|------|
| Citadel | Quant Researcher | Applied | Online Assessment | Received OA link |
| Company | Role | Note |
|---------|------|------|
| Jane Street | SWE Intern | Application confirmation email |
- Email from [email protected] (subject: "Quick question") — cannot determine role. Skip or provide details?
If no relevant emails found, say so.
After presenting: Ask the user to confirm before writing any changes to the sheet.
add_rows to append dataThe add_rows tool inserts blank rows at the TOP of the sheet by default (when start_row is omitted), which shifts all existing data down and corrupts pre-calculated cell ranges. Instead:
update_cells targeting the first empty row. If the last data row is row 32, write to range A33:E33.update_cells with the exact cell range (e.g., C5 to update a stage).add_rows is banned unless the sheet grid physically has no empty rows left. If you must use it, you MUST set start_row to the last row index so rows are added at the bottom, never the top.Immediately before ANY write operation, re-read the full sheet with get_sheet_data. This fresh snapshot is your baseline — do not rely on earlier reads (data may have changed).
Important: Tell the user not to edit the sheet until writes are complete. There is a short window between reading the snapshot and writing where manual edits could be overwritten.
Calculate all target cell ranges from this snapshot. For appends, find the last occupied row and target the next row.
After appending new rows, re-read the sheet and verify:
If any mismatch is detected:
update_cells calls that would restore the original data from the cached snapshotTool name prefixes vary by environment. On local Claude Code they use mcp__plugin_aerion_gmail__ and mcp__plugin_aerion_google-sheets__. On Cowork they may use different prefixes (e.g., connector names or UUIDs). Look up available tools by function name, not prefix.
| Action | Function name to look for |
|--------|--------------------------|
| Search emails | gmail_search_messages or Search Gmail Emails |
| Read email | gmail_read_message or Read Gmail Email |
| Read email thread | gmail_read_thread or Read Gmail Thread |
| List spreadsheets | list_spreadsheets |
| List sheet tabs | list_sheets |
| Read sheet data | get_sheet_data |
| Update cells | update_cells |
| Add rows | add_rows |
development
This skill should be used when the user wants a technical interview preparation roadmap, coding interview study plan, or DSA practice plan tailored to a specific company and role. Trigger phrases include "technical interview roadmap", "coding interview prep for", "DSA roadmap for", "DSA study plan", "leetcode prep for", "what problems should I practice for", "interview study plan", "prep me for the technical rounds", "technical prep for", "what should I study for", "coding prep plan", "roadmap from this JD", "prep me for this role [URL]", or providing a JD URL with a request for technical interview preparation.
development
This skill should be used when the user asks to "write a blog post", "draft a blog post", "create a technical blog", "write a deep dive", "write an explainer", "blog about", "write a tutorial post", "turn this into a blog post", or wants to create technical content for a personal blog or static site. Default platform is Jekyll (Gundersen-style) with KaTeX math, BibTeX citations via jekyll-scholar, and custom figure HTML. Covers deep dives, explainers, tutorials, and project showcases on ML, statistics, computer science, finance, math, and quantitative topics. Generates Markdown with SEO frontmatter, code examples, and diagram suggestions.
development
This skill should be used when the user has already run resume-analyzer and wants to generate the tailored resume.tex. Trigger phrases include "generate resume", "write the resume", "create resume.tex", "tailor the resume now", "build the resume from notes", or when the user asks to proceed after a resume analysis session. It reads the notes.md produced by resume-analyzer and generates a tailored LaTeX resume.
development
This skill should be used when the user wants to analyze a job description against their resume, extract keywords, identify gaps, or prepare tailoring notes. Trigger phrases include "analyze JD", "analyze this job description", "extract keywords from JD", "gap analysis for", "what does this role need", "compare my resume to this JD", "tailor resume", "optimize resume for JD", "build resume for", "target job description", "customize resume for", "resume for this role", "refactor resume", "update resume for", "match resume to JD", or when a user pastes a job description alongside their resume. It produces a notes.md analysis file that resume-tailor uses to generate the final resume.