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.
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 |
. Always use to confirm if unsure.
job-trackerlist_sheetsClassify 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 |