career-ops -- Router
SkillAI & modelscareer-ops is a skill that turns an AI agent into a job-search assistant. It runs many modes: evaluating a pasted job description or URL, generating CVs and cover letters as PDF or LaTeX, scanning portals for matches, tracking application status, and running interview practice. You trigger it by pasting a job posting or asking for a mode by name, and it reads and writes files in its own project folder to keep records.
Then ask your AI: use the career-ops -- Router skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Have the career-ops checkout available with its AGENTS.md and modes folder present.
What your AI can do with it
- Evaluate a pasted job description or URL
- Generate CVs and cover letters as PDF or LaTeX
- Scan portals for job matches
- Track application status
- Run interview practice and prep
- Draft outreach and emails
Getting started
- Have the career-ops checkout available with its AGENTS.md and modes folder present.
- Add or configure the skill so your agent can discover it.
- Paste a job posting or URL, or ask for a mode by name to trigger it.
- Let the skill read and write files in its project folder to keep records.
What this skill tells your AI
The instructions your AI receives, as published by santifer/career-ops in .grok/skills/career-ops/SKILL.md and read by Ahel’s review.
career-ops is a multi-CLI job-search command center. The routing below is shared across supported agent CLIs even when the invocation surface differs.
Project Root Resolution
Before reading any repo-relative path, derive PROJECT_ROOT from this loaded SKILL.md: start at the skill file's directory and walk upward until the nearest directory containing both AGENTS.md and modes/. Resolve every path in this router (modes/, config/, data/, scripts, templates, and output paths) against PROJECT_ROOT, never against the process's current working directory. This is required even when the checkout itself is nested (for example Development\\career-ops) or the command starts from a subdirectory. If those two sentinels cannot be found, stop and locate the career-ops checkout before reading or writing files.
Invocation Notes
- CLIs with slash-command registration can expose this router as
/career-ops. - In Cursor, this skill lives at
.cursor/skills/career-ops/and is auto-discovered; ask for a mode by name, or paste a JD/URL to trigger auto-pipeline. - In Pi, this skill is auto-discovered from
.agents/skills/career-ops/and exposed as/skill:career-ops;AGENTS.mdloads from the repo root as project context, so there is no wrapper file. Headless Pi workers usepi -p "prompt". Project skill discovery follows Pi's per-folder trust decision:/trustapplies to future Pi processes, so restartpibefore invoking/skill:career-ops(-atrusts a single run and needs no restart). - Interactive Codex sessions use
codexin the repo root. Slash commands are not guaranteed in Codex, so ask Codex to run the same mode by name if/career-opsis unavailable. - Headless Codex workers use
codex exec "prompt". - The routing semantics below stay the same regardless of whether the entrypoint is a slash command or a natural-language prompt.
Codex prompt examples that map to the same router semantics:
Evaluate this JD with career-ops auto-pipeline: https://company.com/jobs/123
Run the career-ops scan mode and summarize new matches.
Run the career-ops pipeline mode for data/pipeline.md.
Run the career-ops pdf mode for the latest evaluated role.
Run the career-ops tracker mode and summarize the current statuses.
Mode Routing
Determine the mode from $mode:
| Input | Mode |
|---|---|
| (empty / no args) | discovery -- Show command menu |
| JD text or URL (no sub-command) | auto-pipeline |
oferta | oferta |
ofertas | ofertas |
contacto | contacto |
deep | deep |
interview-prep | interview-prep |
interview | interview |
master-profile | master-profile |
eu-swe | regional/eu-swe |
interview/plan | interview/plan |
interview/practice | interview/practice |
interview/debrief | interview/debrief |
pdf | pdf |
text | text |
latex | latex |
latex-tex | latex-tex |
email | email |
add | add |
expand | expand |
training | training |
project | project |
tracker | tracker |
agent-inbox | agent-inbox |
inbox | agent-inbox |
pipeline | pipeline |
apply | apply |
scan | scan |
discover | discover |
batch | batch |
patterns | patterns |
offer-prep | offer-prep |
titles | titles |
upskill | upskill |
followup | followup |
reply-watch | reply-watch |
outcome | outcome |
interview-redflag | interview-redflag |
update | update |
cover | cover |
Auto-pipeline detection: If $mode is not a known sub-command AND contains JD text (keywords: "responsibilities", "requirements", "qualifications", "about the role", "we're looking for", company name + role) or a URL to a JD, execute auto-pipeline.
If $mode is not a sub-command AND doesn't look like a JD, show discovery.
Output Language Directive
Before executing any mode, read config/profile.yml if it exists and resolve:
language.output→ ISO language code for human-facing output. Default:en.language.modes_dir→ optional market-mode directory. This controls market vocabulary and local evaluation rules only. It may be a single string (one declared market, the historical default) or a list of declared candidate markets for a candidate genuinely running parallel campaigns in more than one market at once (#3793), e.g.modes_dir: [modes/de, modes/zh]. When a list is given, the FIRST entry is primary and supplies the evaluation-mode file (Block A-F rules can only run from one market's file at a time); EVERY declared market's_shared.mdis loaded into context.modesitself is a valid declared candidate for markets without a localized directory; when first it suppliesmodes/oferta.md, and its baselinemodes/_shared.mdis loaded once. Per posting, judge which declared market actually applies from the JD's own MARKET signals (hiring-entity jurisdiction, currency, benefits/legal vocabulary) — never from the JD's language alone. If genuinely ambiguous, an interactive session asks and stops before persistence; an unattended worker uses the primary market and records that fallback in the report header or Block G.
Inject this directive after loading the mode instructions and before producing any user-visible content:
Write all human-facing output in
{language.output}regardless of the language of these instructions or of the job description. This includes reports, tracker notes, PDFs, cover letters, outreach, interview prep, form answers, and summaries. Iflanguage.modes_dirsupplies market-specific vocabulary (one market, or several declared at once), keep the market logic but explain terms in{language.output}when needed.
language.output is authoritative for prose. modes_dir is market context; it must not force the prose language.
Discovery Mode (no arguments)
If your CLI supports /career-ops, show this menu. In Codex, surface the same options in plain text and map the requested mode the same way.
Concrete equivalents for Codex prompt-driven sessions:
/career-ops {JD} ↔ "Evaluate this JD with career-ops auto-pipeline: {JD or URL}"
/career-ops scan ↔ "Run the career-ops scan mode and summarize new matches."
/career-ops pipeline ↔ "Run the career-ops pipeline mode for data/pipeline.md."
/career-ops pdf ↔ "Run the career-ops pdf mode for the latest evaluated role."
/career-ops email ↔ "Run the career-ops email mode for the latest evaluated role."
/career-ops tracker ↔ "Run the career-ops tracker mode and summarize the current statuses."
Show this menu:
career-ops -- Command Center
Available commands:
/career-ops {JD} → AUTO-PIPELINE: evaluate + report + PDF + tracker (paste text or URL)
/career-ops pipeline → Process pending URLs from inbox (data/pipeline.md)
/career-ops oferta → Evaluation only A-F (no auto PDF)
/career-ops ofertas → Compare and rank multiple offers
/career-ops contacto → LinkedIn power move: find contacts + draft message
/career-ops deep → Deep research prompt about company
/career-ops interview-prep → Generate company-specific interview prep doc
/career-ops interview → Interactive profile/CV onboarding interview
/career-ops master-profile → Import, review, and validate your Master Career Profile
/career-ops eu-swe → Calibrate a European SWE application before CV/apply/interview
/career-ops interview/plan → Time-blocked prep plan for an upcoming interview
/career-ops interview/practice → Practice interview, one question at a time with feedback
/career-ops interview/debrief → Post-interview debrief: close gaps, predict next round
/career-ops pdf → PDF only, ATS-optimized CV
/career-ops text → Tailored markdown CV (mirrors cv.md, no PDF)
/career-ops latex → Export CV as LaTeX/Overleaf .tex
/career-ops latex-tex → Tailor your own resume.tex in place (opt-in; cv.md stays default)
/career-ops cover → Cover letter: standalone JD paste or /career-ops cover {slug}
/career-ops email → Formal application email draft (draft-only; never sends, submits, or clicks)
/career-ops add → Add a project/paper/role to your CV (fetch + preview + confirm)
/career-ops expand → Auto-discover and add missing competencies from profile links
/career-ops training → Evaluate course/cert against North Star
/career-ops project → Evaluate portfolio project idea
/career-ops tracker → Application status overview
/career-ops agent-inbox → Queue/drain requests for the next session (data/agent-inbox.md)
/career-ops apply → Live application assistant (reads form + generates answers)
/career-ops scan → Scan portals and discover new offers
/career-ops discover → Resolve a company list to scannable ATS boards + append to portals.yml (zero-token)
/career-ops batch → Batch processing with parallel workers
/career-ops patterns → Analyze rejection patterns and improve targeting
/career-ops offer-prep → Read a received offer/contract with the candidate: clause walk + lawyer questions (not legal advice)
/career-ops titles → Suggest adjacent job titles from your CV to broaden the search
/career-ops upskill → Aggregate skill-gap analysis from your evaluated reports
/career-ops followup → Follow-up cadence tracker: flag overdue, generate drafts
/career-ops outcome → Record application outcome & archive artifacts
/career-ops update → Update career-ops system files with diff preview + compat check
Inbox: add URLs to data/pipeline.md → /career-ops pipeline
Or paste a JD directly to run the full pipeline.
Context Loading by Mode
After determining the mode, load the necessary files before executing:
If modes/_custom.md exists, read it after modes/_profile.md and before the selected mode file. It contains user house rules and procedural preferences. It may override workflow/style defaults, but it never adds factual claims about the candidate.
Resolve language.modes_dir before applying the path shorthand below. With no setting, use modes. With a scalar directory, preserve the existing behavior: use that directory's _shared.md and localized mode file when it provides one. With a list, load every declared directory's _shared.md exactly once (including the baseline modes/_shared.md when modes appears), but use only the FIRST entry's evaluation-mode file for Blocks A-F; later entries contribute context, never a competing evaluation file. User-layer _profile.md and _custom.md remain under modes/.
Modes that require _shared.md + their mode file
Read the resolved shared context (default modes/_shared.md) + modes/_profile.md (if exists) + modes/_custom.md (if exists) + the resolved selected mode file (default modes/{mode}.md). For an A-F evaluation, that selected file is the primary directory's evaluation mode; do not also load an evaluation file from a secondary directory.
Applies to: auto-pipeline, oferta, ofertas, pdf, text, contacto, apply, pipeline, scan, batch
Standalone modes with profile and custom context
Read modes/_profile.md (if exists) + modes/_custom.md (if exists) + modes/{mode}.md
Applies to: tracker, agent-inbox, deep, interview-prep, interview, master-profile, regional/eu-swe, interview/plan, interview/practice, interview/debrief, latex, latex-tex, training, project, patterns, titles, upskill, followup, reply-watch, outcome, cover, email, add, offer-prep, discover
Modes delegated to subagent
For scan, apply (with Playwright), and pipeline (3+ URLs): launch as a worker/subagent with the resolved shared context + _profile.md (if exists) + _custom.md (if exists) + the resolved selected mode file injected into the worker prompt. If your CLI exposes an Agent(...) primitive, the call looks like this:
Agent(
subagent_type="general-purpose",
prompt="[output language directive]\n\n[content of modes/_shared.md, or resolved shared context: every declared _shared.md once]\n\n[content of modes/_profile.md if exists]\n\n[content of modes/_custom.md if exists]\n\n[content of modes/{mode}.md, or resolved selected mode file; primary evaluation file for Blocks A-F]\n\n[invocation-specific data]",
description="career-ops {mode}"
)
Execute the instructions from the loaded mode file.
Signals
- GitHub stars
- 74k
- Forks
- 14k
- Last commit
- Oct 2026
- Hacker News mentions
- 2
Questions
- What is career ops claude skill?
- It is a skill that turns an agent into a job-search assistant. It evaluates job posts, generates CVs and cover letters, scans portals, tracks applications, and runs interview practice, keeping records in its own project folder.
- How do I trigger it?
- Paste a job posting or URL, or ask for a mode by name. Modes include scan, pdf, latex, cover, tracker, and interview-prep.
- Where does it keep my records?
- It reads and writes files in its own project folder, resolved from the skill file location rather than the current working directory.
- Can it generate a CV as a PDF?
- Yes. It can generate CVs and cover letters as PDF or LaTeX.
- Does it track applications?
- Yes. It can track application status and keep records in its project folder.
Advanced
- Item type
- skill
- Key
career-ops-santifer- Source
- github.com/santifer/career-ops
github.com/santifer/career-ops
Related picks
Skill · sickn33
The pick for Pythonpython-design-patterns
Skill · wshobson
The pick for Pythonlinkedin-profile-optimizer
Skill · davila7
The pick for LinkedInlinkedin-writer-vault
Skill · naveedharri
The pick for LinkedInlatex-drawing-guide
Skill · brycewang-stanford
The pick for LaTeXlatex-math-formatter
Skill · a5c-ai
The pick for LaTeX