career-ops
career-ops -- Router
career-ops is a multi-CLI AI job search agent. 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/. 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. Then derive DATA_ROOT, where the user's own files live, with the precedence path-resolver.mjs uses: CAREER_OPS_ROOT or CAREER_OPS_DATA_DIR if either is set; otherwise the path written in PROJECT_ROOT/.career-ops-data if that file exists and is not empty; otherwise PROJECT_ROOT itself. A relative value in either place resolves against PROJECT_ROOT. Run from PROJECT_ROOT, node -e "import('./path-resolver.mjs').then(m => console.log(m.getCareerOpsRoot()))" prints the same directory. With no override the two roots are one directory.
Resolve every path in this router against one of these two roots, never against the process's current working directory. User Layer paths resolve against DATA_ROOT. They include cv.md, article-digest.md, portals.yml, config/ (except the shipped *.example.* files), data/, reports/, output/, interview-prep/, modes/_profile.md, modes/_custom.md, modes/_brief.md, batch/tracker-additions/, and every other User Layer path in DATA_CONTRACT.md. Everything else (the other modes/ files, scripts, templates, the config/*.example.* files) resolves against PROJECT_ROOT.
Invocation Notes
- CLIs with slash-command registration can expose this router as
/career-ops. - In Cursor, this skill lives at
.agents/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.