--- name: career-ops description: AI job search command center — evaluate offers, generate CVs, scan portals, track applications. Adapted from Claude Code to Hermes Agent. user_invocable: true args: mode --- # career-ops — Router (Hermes Edition) Adapted from Claude Code's career-ops system to work with Hermes Agent's tooling. ## Mode Routing When invoked (via `/skill career-ops` or as preloaded skill), determine the mode from user input: | 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` | | `pdf` | `pdf` | | `training` | `training` | | `project` | `project` | | `tracker` | `tracker` | | `pipeline` | `pipeline` | | `apply` | `apply` | | `scan` | `scan` | | `batch` | `batch` | **Auto-pipeline detection:** If input 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`. ## Discovery Mode (no arguments) Show this menu: ``` career-ops — Command Center (Hermes Edition) Available commands: career-ops {JD or URL} → 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 pdf → Generate ATS-optimized CV PDF career-ops training → Evaluate training/certification courses career-ops project → Evaluate portfolio project ideas career-ops apply → Live application form assistant career-ops tracker → View application tracker career-ops scan → Scan configured company portals for new listings career-ops batch → Batch process multiple URLs ``` ## Execution Rules 1. **Read profile first:** Always load `config/profile.yml` for candidate identity. 2. **Read CV:** Always read `cv.md` (project root or HERMES_HOME/career-ops/) for experience data. 3. **JD extraction:** For URLs, use `browser_navigate` + `browser_snapshot` (SPAs) → `web_extract` (static) → `web_search` (fallback). 4. **Reports go to:** `reports/{###}-{company-slug}-{YYYY-MM-DD}.md` 5. **Tracker is at:** `data/applications.md` 6. **Pipeline inbox is at:** `data/pipeline.md` ## Sources of Truth | File | Path | Purpose | |------|------|---------| | SKILL.md | This file | Router | | modes/ | `modes/*.md` | Individual mode definitions | | profile.yml | `config/profile.yml` | Candidate identity and targets | | cv.md | project root or skill dir | CV in markdown | | states.yml | `templates/states.yml` | Canonical application states | | portals.yml | project root | Portal scanner config | ## Scan Mode Implementation Details When processing `career-ops scan`: 1. **Load config:** Read `portals.yml` for tracked companies + search queries 2. **WebSearch sweep:** Run 20+ queries across site:jobs.ashbyhq.com, site:job-boards.greenhouse.io, site:jobs.lever.co, and general ML role queries 3. **Filter results:** Match against candidate's profile (roles, tech stack, location constraints) — skip PM/sales/junior roles 4. **Rank tiers:** A-tier (strong match), B-tier (potential), Skip (wrong fit) **CRITICAL ASHBY PATTERN:** - Individual Ashby job URLs from web_search results (jobs.ashbyhq.com/{company}/{uuid}) are FREQUENTLY stale/dead with 404 errors - ALWAYS navigate to the company page first: `jobs.ashbyhq.com/{slug}` (found in portals.yml `careers_url`) - Use `browser_navigate` + `browser_snapshot(full=true)` — web_extract returns near-empty on Ashby (JS-rendered SPA) - From company page, use snapshot to find current open roles with their fresh URLs, then click into each for JD