원클릭으로
track
View and update your job application pipeline; log statuses and add notes across all active roles
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
View and update your job application pipeline; log statuses and add notes across all active roles
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Fill an ATS form via browser automation, upload PDFs, answer safe required fields, then hand off for sensitive, consent, attestation, legal, and Submit controls (unless yolo mode is authorised — see the yolo submission section below)
Scaffold a role config by fetching and analysing a job posting, detecting the ATS platform, and pre-filling roles/<role_id>.json
Build ATS-safe CV and cover letter PDFs tailored to a specific role using reportlab Platypus
Build profile.json from your CV or LinkedIn PDF by extracting work history, generating 3 CV variants, and writing per-job bullets automatically
Discover role leads, verify open roles on official posts, and rank verified matches with heuristic sponsorship and relocation confidence
| name | track |
| description | View and update your job application pipeline; log statuses and add notes across all active roles |
Track and update job application status across all active roles.
User says: /track, track my application, update status, mark as applied, what's my pipeline, show my applications, application status
In Codex, invoke this skill with $track, the skills/plugin selector, or natural language. Slash-command examples are Claude Code aliases, not Codex built-ins.
/track : show full pipeline
/track <role_id> : show detail for one role
/track <role_id> applied : update status
/track <role_id> "note text" : add a note
Valid statuses: draft → applied → screen → interview → offer / rejected / withdrawn
Resolve <career_agent_root> as the installed package or plugin root that contains src/tracker.py. If running from a repo checkout and src/tracker.py exists in the current directory, the current directory is <career_agent_root>.
Do not assume the user's working directory is the package root. The script path comes from <career_agent_root>, while tracker.json and roles/ are read and written in the user's current workspace.
python3 "<career_agent_root>/src/tracker.py" --list
Output groups applications by status with icons. Show this after every /apply handoff.
Applied entries with no update for 7 or more days are annotated inline:
📤 APPLIED (3)
stripe_backend Stripe — Backend Engineer applied 2026-06-10 ⚠ ghost risk (21d)
acme_sre Acme — SRE applied 2026-06-18
The ⚠ ghost risk (Nd) suffix shows the number of days since the last update. With a median rejection turnaround of 1 day, entries silent for 7+ days are very likely already decided but not yet logged.
Action: mark ghost-risk entries as rejected with a note explaining the silence:
python3 "<career_agent_root>/src/tracker.py" --update stripe_backend --status rejected
python3 "<career_agent_root>/src/tracker.py" --note stripe_backend "No response after 21d — marking rejected"
python3 "<career_agent_root>/src/tracker.py" --list --ghost
Shows only applied entries that meet the ghost-risk threshold (>= 7 days without update). Useful for pipeline cleanup: run periodically to surface stale applications and close them out.
python3 "<career_agent_root>/src/tracker.py" --add <role_id>
Run this automatically at the end of /new-role: every new role config should be tracked from the start as draft.
python3 "<career_agent_root>/src/tracker.py" --update <role_id> --status <status>
Run --update <role_id> --status applied automatically after the user confirms they clicked Submit.
When marking a role as withdrawn or rejected, always set --close-reason to enable sourcing-lag vs. silent-rejection analysis:
python3 "<career_agent_root>/src/tracker.py" --update <role_id> --status withdrawn --close-reason company_closed
python3 "<career_agent_root>/src/tracker.py" --update <role_id> --status rejected --close-reason explicit_reject
Close reason decision guide:
| Value | When to use |
|---|---|
company_closed | Job listing disappeared / role was taken down before or after applying |
user_withdrew | Candidate actively chose to withdraw (accepted another offer, changed mind) |
ghost | No response after >30 days of silence post-application or post-interview |
position_filled | Company confirmed the position was filled by someone else |
explicit_reject | Received an explicit rejection email or notification from the company |
python3 "<career_agent_root>/src/tracker.py" --note <role_id> "Recruiter called: technical screen Thursday 3pm"
| Event | Action |
|---|---|
/new-role completes | --add <role_id> (status: draft) |
/generate-cv completes | no change |
User confirms Submit after /apply handoff | --update <role_id> --status applied |
| User reports outcome | `--update <role_id> --status <screen |
Stored in the current workspace. Gitignored in repo checkouts: your application history stays local.
Format:
[
{
"role_id": "stripe_backend",
"company": "Stripe",
"title": "Senior Backend Engineer",
"status": "interview",
"added": "2026-06-10",
"applied": "2026-06-11",
"last_update": "2026-06-13",
"close_reason": null,
"notes": [
{"date": "2026-06-13", "text": "Technical screen scheduled for June 17"}
]
}
]
close_reason is null for active entries and set to one of company_closed, user_withdrew, ghost, position_filled, or explicit_reject when marking an entry withdrawn or rejected.