Job Tracker
Keeps two plain-text project files in sync with the user's real-world job search:
- List_of_targets -- one company name per line. The watch list.
- Applied_list -- one line per application, format
Company - Job Title or
Company - Job Title (rejected) or Company - Job Title (interview). No tag
means "applied, no outcome yet."
All the actual matching/formatting logic lives in scripts/update_tracker.py
so results are deterministic -- don't hand-edit the files yourself, always
go through the script.
Step 1: Work out what the user is telling you
From the user's message, extract:
| Field |
Required? |
Notes |
company |
always |
Use their capitalization/naming as given. |
title |
only if they mention a role |
If they gave only a company name, leave this out entirely -- see "Company-only mode" below. |
status |
only if implied |
Map their language to exactly rejected or interview. "Got rejected", "didn't move forward", "rejected" -> rejected. "Got an interview", "phone screen scheduled", "moving to interview" -> interview. If they just say "I applied to X for Y" with no outcome yet, leave status unset -- do not guess. |
If the user's message is genuinely ambiguous about which company or role they
mean (e.g., they've applied to the same company for multiple roles and it's
unclear which one just got the update), ask a single clarifying question
before running the script rather than guessing.
Step 2: Locate the source files
These are normally Claude Project knowledge files mounted read-only, e.g.
/mnt/project/List_of_targets and /mnt/project/Applied_list. Locate them
(check the project files list / uploaded files for the current conversation).
If you can't find them, ask the user to point you to them or paste their
current contents.
Step 3: Run the script
python3 scripts/update_tracker.py \
--targets "/mnt/project/List_of_targets" \
--applied "/mnt/project/Applied_list" \
--out-dir "/home/claude/tracker_update" \
--company "Skydio" \
--title "Autonomy Engineer" \
--status interview
- Company-only mode: omit
--title entirely (and therefore --status).
The script will only touch List_of_targets and leave Applied_list
completely alone.
- Applied with no outcome yet: give
--company and --title, omit
--status.
- Rejected / interview: give all three flags.
- The script never edits the input files in place -- it always writes fresh
copies to
--out-dir. This is safe to run even though the source files
under /mnt/project/ are typically read-only.
- The script already handles: not creating a duplicate target-list entry,
not creating a duplicate Applied_list line for the same company + title
(it updates the status on the existing line instead), and matching
"Company (suffix)" style target entries like "Dracoe (HQ)".
Step 4: Report back and hand off the files
- Read the script's printed summary and relay it to the user in plain
language -- what got added, what got updated, what was already there.
- Use your file-presentation tool to surface the two updated files from
--out-dir.
- Always remind the user of this: Project knowledge files are read-only
copies. These updated files need to replace the old ones in their Project
(delete the old
List_of_targets / Applied_list from Project knowledge,
upload the new ones) for the change to actually persist -- running this
skill does not silently update the Project on its own.
Edge cases
- Company not found, only a company name given: append it to
List_of_targets, say so plainly, don't touch Applied_list.
- Company + title already exists in Applied_list with a different or no
status: the script updates that line's status in place rather than
adding a second line for the same role. Point this out in your summary
(e.g. "moved Skydio - Autonomy Engineer from no tag to (interview)").
- User gives a status word that isn't "rejected" or "interview" (e.g.
"ghosted", "withdrew", "offer"): ask them whether it should map to one of
the two supported tags, or be left untagged, rather than inventing a new
tag style the rest of the file doesn't use.
- Multiple roles at the same company in one message: run the script
once per role.
1---2name: job-tracker3description: Updates the user's job-search tracking files -- "List_of_targets" (companies being watched) and "Applied_list" (company - job title, tagged rejected/interview when applicable) -- whenever the user reports applying to a role, getting rejected, landing an interview, or just wants a company added to their watch list. Trigger this any time the user says things like "I applied to X for Y", "add X to my applied list", "mark X as rejected/interview", "I got an interview with X", "I got rejected from X", or gives just a bare company name to add/check. Handles correct "Company - Job Title (status)" formatting, avoids duplicate entries by updating status in place, and appends new companies to the target list automatically when they're missing.4---56# Job Tracker78Keeps two plain-text project files in sync with the user's real-world job search:910- **List_of_targets** -- one company name per line. The watch list.11- **Applied_list** -- one line per application, format `Company - Job Title` or12 `Company - Job Title (rejected)` or `Company - Job Title (interview)`. No tag13 means "applied, no outcome yet."1415All the actual matching/formatting logic lives in `scripts/update_tracker.py`16so results are deterministic -- don't hand-edit the files yourself, always17go through the script.1819## Step 1: Work out what the user is telling you2021From the user's message, extract:2223| Field | Required? | Notes |24|---|---|---|25| `company` | always | Use their capitalization/naming as given. |26| `title` | only if they mention a role | If they gave **only a company name**, leave this out entirely -- see "Company-only mode" below. |27| `status` | only if implied | Map their language to exactly `rejected` or `interview`. "Got rejected", "didn't move forward", "rejected" -> `rejected`. "Got an interview", "phone screen scheduled", "moving to interview" -> `interview`. If they just say "I applied to X for Y" with no outcome yet, leave status unset -- do not guess. |2829If the user's message is genuinely ambiguous about which company or role they30mean (e.g., they've applied to the same company for multiple roles and it's31unclear which one just got the update), ask a single clarifying question32before running the script rather than guessing.3334## Step 2: Locate the source files3536These are normally Claude Project knowledge files mounted read-only, e.g.37`/mnt/project/List_of_targets` and `/mnt/project/Applied_list`. Locate them38(check the project files list / uploaded files for the current conversation).39If you can't find them, ask the user to point you to them or paste their40current contents.4142## Step 3: Run the script4344```bash45python3 scripts/update_tracker.py \46 --targets "/mnt/project/List_of_targets" \47 --applied "/mnt/project/Applied_list" \48 --out-dir "/home/claude/tracker_update" \49 --company "Skydio" \50 --title "Autonomy Engineer" \51 --status interview52```5354- **Company-only mode**: omit `--title` entirely (and therefore `--status`).55 The script will only touch `List_of_targets` and leave `Applied_list`56 completely alone.57- **Applied with no outcome yet**: give `--company` and `--title`, omit58 `--status`.59- **Rejected / interview**: give all three flags.60- The script never edits the input files in place -- it always writes fresh61 copies to `--out-dir`. This is safe to run even though the source files62 under `/mnt/project/` are typically read-only.63- The script already handles: not creating a duplicate target-list entry,64 not creating a duplicate Applied_list line for the same company + title65 (it updates the status on the existing line instead), and matching66 "Company (suffix)" style target entries like "Dracoe (HQ)".6768## Step 4: Report back and hand off the files69701. Read the script's printed summary and relay it to the user in plain71 language -- what got added, what got updated, what was already there.722. Use your file-presentation tool to surface the two updated files from73 `--out-dir`.743. **Always remind the user of this**: Project knowledge files are read-only75 copies. These updated files need to replace the old ones in their Project76 (delete the old `List_of_targets` / `Applied_list` from Project knowledge,77 upload the new ones) for the change to actually persist -- running this78 skill does not silently update the Project on its own.7980## Edge cases8182- **Company not found, only a company name given**: append it to83 `List_of_targets`, say so plainly, don't touch `Applied_list`.84- **Company + title already exists in Applied_list with a different or no85 status**: the script updates that line's status in place rather than86 adding a second line for the same role. Point this out in your summary87 (e.g. "moved Skydio - Autonomy Engineer from no tag to (interview)").88- **User gives a status word that isn't "rejected" or "interview"** (e.g.89 "ghosted", "withdrew", "offer"): ask them whether it should map to one of90 the two supported tags, or be left untagged, rather than inventing a new91 tag style the rest of the file doesn't use.92- **Multiple roles at the same company in one message**: run the script93 once per role.