job-tracker · git:20261001.74cc868 · 2026-10-01 · sha256 d2ff89ee3547582f
job-tracker git:20261001.74cc868A
Immutable. This exact content never changes and is served at /api/v1/blob/d2ff89ee3547582f.
--- name: job-tracker description: "Track job applications, manage follow-ups, and generate progress reports. Use when adding applications, updating status, checking pipeline, or finding stale applications needing follow-up." --- # Job Application Tracker Manage the job hunt pipeline. All data in `data/applications.csv`. ## Commands Parse user input to determine which command to run: ### `add [company] [role]` Add new application. Default: status=researching, priority=2. Override with `-p 1|2|3`. ### `update [company] [status]` Change status. Valid: `researching` → `applied` → `interviewing` → `offer` | `rejected` | `declined` Auto-updates `last_contact` to today. ### `list` Show active applications grouped by priority (excludes offer/rejected/declined). ### `followup` Show applications needing follow-up (7+ days since last contact). ### `report` Weekly pipeline summary: counts, activity, what needs attention. ### `notes [company] [text]` Add timestamped note to application. ### `contact [company] [name] [email]` Add or update contact info. ### `priority [company] [1|2|3]` Change priority level. ### `archive` Show all applications including closed ones. ## After Any Mutation After any command that changes `data/applications.csv` (`add`, `update`, `notes`, `contact`, `priority`), regenerate the dashboard automatically: ``` uv run job-search/scripts/ops/generate_dashboard.py ``` Do not ask the user; this keeps the dashboard in sync with the tracker. ## Implementation Use `scripts/tracker_commands.py` for all CSV operations. Import and call functions directly — don't rewrite CSV logic. ## CSV Schema | Column | Description | |---|---| | company | Company name | | role | Job title | | job_url | Link to posting | | status | Current status | | date_added | When first added (YYYY-MM-DD) | | date_applied | When formal application submitted (YYYY-MM-DD) | | last_contact | Last communication date | | contact_name | Hiring manager/recruiter | | contact_email | Contact email | | priority | 1=high, 2=standard, 3=backlog | | notes | Timestamped notes | ## Rules - **NEVER edit `applications.csv` directly.** Always use `scripts/tracker_commands.py` functions (`add_application`, `update_status`, `add_note`, `add_contact`). Direct CSV edits bypass Todoist sync and validation. - After any tracker modification, sync to Todoist using `scripts/todoist_sync.py` (skipped automatically if `integrations.todoist_enabled: false` in `config.yaml`). - Read CSV before any operation - Write CSV after any modification - Preserve all existing data - Use ISO date format (YYYY-MM-DD) ## Integration - **company-research** → company dossier (culture, signals, fit) that feeds tracking decisions before applying - **cv-tailor** → prepares materials before applying ## Reference Files - `data/applications.csv` — Main data store - `scripts/tracker_commands.py` — Python implementation - `scripts/add_to_tracker.py` — Batch add from target companies - `references/example-output.md` — Output format examples ## Error Handling - If company is not found on update operations, return explicit "not found" and suggest `list`. - If priority/status is invalid, reject write and return allowed values. - If CSV is malformed, stop write operations and require repair before proceeding. ## After Completion After tracker operations, suggest the next logical action: - After `followup` shows stale applications: "Want me to draft follow-up text for these?" (compose using `job-search/templates/follow-up-email.md`, user copies to their email client) - After `add`: no suggestion needed (user just added it) - After `list` or `report`: if any applications need follow-up, mention it