diff --git a/.agents/skills/career-ops/SKILL.md b/.agents/skills/career-ops/SKILL.md index e2e5ea6b2c..92891f5b60 100644 --- a/.agents/skills/career-ops/SKILL.md +++ b/.agents/skills/career-ops/SKILL.md @@ -2,13 +2,13 @@ name: career-ops description: >- AI job search command center -- evaluate offers, generate CVs, scan portals, - track applications. Use when the user pastes a job URL or JD, asks to scan + track applications. Use when the user asks to evaluate a job, scan portals, generate a CV/PDF, track applications, prepare for interviews, draft outreach/emails, or run any career-ops mode. arguments: mode user_invocable: true user-invocable: true -argument-hint: "[scan | discover | deep | pdf | text | latex | latex-tex | cover | email | add | expand | eu-swe | oferta | ofertas | apply | batch | tracker | agent-inbox | pipeline | contacto | training | project | interview-prep | interview | interview/plan | interview/practice | interview/debrief | interview-redflag | patterns | offer-prep | titles | upskill | followup | reply-watch | outcome | update]" +argument-hint: "[auto-pipeline | scan | discover | deep | pdf | text | latex | latex-tex | cover | email | add | expand | eu-swe | oferta | ofertas | apply | batch | tracker | agent-inbox | pipeline | contacto | training | project | interview-prep | interview | interview/plan | interview/practice | interview/debrief | interview-redflag | patterns | offer-prep | titles | upskill | followup | reply-watch | outcome | update]" license: MIT --- @@ -23,7 +23,7 @@ Before reading any repo-relative path, derive `PROJECT_ROOT` from this loaded `S ## 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 Cursor, this skill lives at `.cursor/skills/career-ops/` and is auto-discovered; ask for a mode by name, including `auto-pipeline` for the full workflow. - Interactive Codex sessions use `codex` in the repo root. Slash commands are not guaranteed in Codex, so ask Codex to run the same mode by name if `/career-ops` is 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. @@ -45,7 +45,8 @@ Determine the mode from `$mode`: | Input | Mode | |-------|------| | (empty / no args) | `discovery` -- Show command menu | -| JD text or URL (no sub-command) | **`auto-pipeline`** | +| `auto-pipeline` or an explicit full-pipeline request | `auto-pipeline` | +| JD text or URL (no sub-command) | Honor the requested task or established user preference; ask the intended operation if neither is available | | `oferta` | `oferta` | | `ofertas` | `ofertas` | | `contacto` | `contacto` | @@ -85,7 +86,7 @@ Determine the mode from `$mode`: | `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`. +**Auto-pipeline intent:** Execute `auto-pipeline` only when the user requests the full workflow or an established user preference covers this input. A JD, URL, or matching keyword alone does not authorize report, PDF, or tracker creation. Honor narrower requests such as summarizing a posting, evaluating fit, or preparing for an interview. If an input has no requested operation or applicable preference, ask which operation to run before loading a mode or creating artifacts; do not ask again when the intent is already clear. If `$mode` is not a sub-command AND doesn't look like a JD, show discovery. @@ -113,7 +114,7 @@ If your CLI supports `/career-ops`, show this menu. In Codex, surface the same o Concrete equivalents for Codex prompt-driven sessions: ```text -/career-ops {JD} ↔ "Evaluate this JD with career-ops auto-pipeline: {JD or URL}" +/career-ops auto-pipeline {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." @@ -127,7 +128,7 @@ Show this menu: career-ops -- Command Center Available commands: - /career-ops {JD} → AUTO-PIPELINE: evaluate + report + PDF + tracker (paste text or URL) + /career-ops auto-pipeline {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 @@ -165,7 +166,7 @@ Available commands: /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. +For the full workflow, request auto-pipeline with a JD or URL. ``` --- diff --git a/AGENTS.md b/AGENTS.md index de0d466e0a..827b3da24d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -313,7 +313,8 @@ Two separate axes: | If the user... | Mode | |----------------|------| -| Pastes JD or URL | auto-pipeline (evaluate + report + PDF + tracker) | +| Requests the full pipeline for a JD or URL | auto-pipeline (evaluate + report + PDF + tracker) | +| Pastes JD or URL | Honor the requested task or an established user preference; if intent is missing, ask which operation to run before creating artifacts | | Asks to evaluate offer | `oferta` | | Asks to compare offers | `ofertas` | | Wants LinkedIn outreach | `contacto` — identifies hiring manager, recruiter, or team peers via web search; drafts a message tailored to the contact type (recruiter / hiring manager / peer / interviewer), within LinkedIn's connection-request character limit for the account's tier (200 free, 300 Premium/Sales Navigator) | diff --git a/README.ar.md b/README.ar.md index 8619415e93..bd631f3b28 100644 --- a/README.ar.md +++ b/README.ar.md @@ -167,7 +167,7 @@ npm run gemini:eval -- "نص تفاصيل الوظيفة هنا" ```text /career-ops ← لعرض كافة الأوامر المتاحة وتفاصيلها -/career-ops {رابط الوظيفة} ← تشغيل المسار التلقائي بالكامل (تقييم + PDF + تسجيل) +/career-ops auto-pipeline {رابط الوظيفة} ← تشغيل المسار التلقائي بالكامل (تقييم + PDF + تسجيل) /career-ops scan ← مسح بوابات التوظيف بحثًا عن فرص جديدة /career-ops pdf ← توليد سيرة ذاتية محسنة ومتوافقة مع ATS /career-ops batch ← تقييم مجموعة وظائف دفعة واحدة بالتوازي diff --git a/README.cn.md b/README.cn.md index 354afb7f84..e49f46cc01 100644 --- a/README.cn.md +++ b/README.cn.md @@ -185,7 +185,7 @@ career-ops 是一个单一斜杠命令,带有多种模式: ``` /career-ops → 显示所有可用命令 -/career-ops {粘贴职位描述} → 完整自动管道(评估 + PDF + 追踪) +/career-ops auto-pipeline {粘贴职位描述} → 完整自动管道(评估 + PDF + 追踪) /career-ops scan → 扫描平台上的新职位 /career-ops pdf → 生成 ATS 优化简历 /career-ops batch → 批量评估多个职位 diff --git a/README.da.md b/README.da.md index b305ed7254..c574fa49c7 100644 --- a/README.da.md +++ b/README.da.md @@ -136,7 +136,7 @@ career-ops er én slash-kommando med flere tilstande: ```text /career-ops → Vis alle tilgængelige kommandoer -/career-ops {indsæt stilling} → Fuld auto-pipeline (vurdering + PDF + tracker) +/career-ops auto-pipeline {indsæt stilling} → Fuld auto-pipeline (vurdering + PDF + tracker) /career-ops scan → Skan portaler for nye stillinger /career-ops pdf → Generér ATS-optimeret CV /career-ops batch → Batch-vurdering af flere stillinger diff --git a/README.de.md b/README.de.md index bebf9c67c0..e6408794fd 100644 --- a/README.de.md +++ b/README.de.md @@ -169,7 +169,7 @@ career-ops verwendet einen gemeinsamen Command-Router. In CLIs mit Slash-Command ```text /career-ops → alle verfügbaren Befehle anzeigen -/career-ops {JD einfügen} → vollständige Auto-Pipeline (Bewertung + PDF + Tracker) +/career-ops auto-pipeline {JD einfügen} → vollständige Auto-Pipeline (Bewertung + PDF + Tracker) /career-ops scan → Portale nach neuen Angeboten scannen /career-ops pdf → ATS-optimierten Lebenslauf generieren /career-ops cover → Anschreiben-Generator (JD einfügen oder /career-ops cover {slug}) diff --git a/README.es.md b/README.es.md index f65e1271df..3d7641cf17 100644 --- a/README.es.md +++ b/README.es.md @@ -160,7 +160,7 @@ career-ops es un único slash command con multiples modos: ``` /career-ops → Mostrar todos los comandos -/career-ops {pega un JD} → Pipeline completo (evaluar + PDF + tracker) +/career-ops auto-pipeline {pega un JD} → Pipeline completo (evaluar + PDF + tracker) /career-ops scan → Escanear portales /career-ops pdf → Generar CV ATS-optimizado /career-ops batch → Evaluar ofertas en batch diff --git a/README.fr.md b/README.fr.md index 4af5cf95c9..d0523bb77d 100644 --- a/README.fr.md +++ b/README.fr.md @@ -189,7 +189,7 @@ career-ops est accessible via une commande slash unique avec plusieurs modes : ``` /career-ops → Afficher toutes les commandes disponibles -/career-ops {coller JD} → Pipeline automatique complet (évaluation + PDF + tracker) +/career-ops auto-pipeline {coller JD} → Pipeline automatique complet (évaluation + PDF + tracker) /career-ops scan → Scanner les portails pour de nouvelles offres /career-ops pdf → Générer un CV optimisé pour les ATS /career-ops batch → Évaluer plusieurs offres en lot diff --git a/README.hi.md b/README.hi.md index 818efa39f7..b1a461d705 100644 --- a/README.hi.md +++ b/README.hi.md @@ -293,7 +293,7 @@ career-ops एक shared command router use करता है। CLIs मे ``` /career-ops → सभी available commands दिखाएं -/career-ops {JD paste करें} → Full auto-pipeline (evaluate + PDF + tracker) +/career-ops auto-pipeline {JD paste करें} → Full auto-pipeline (evaluate + PDF + tracker) /career-ops scan → नए offers के लिए portals scan करें /career-ops pdf → ATS-optimized CV generate करें /career-ops cover → Cover letter generator (JD paste करें या /career-ops cover {slug}) @@ -307,7 +307,7 @@ career-ops एक shared command router use करता है। CLIs मे /career-ops project → Portfolio project evaluate करें ``` -या बस job URL या description directly paste करें -- career-ops auto-detect करेगा और full pipeline run करेगा। +पूरी प्रक्रिया चलाने के लिए job URL या description के साथ `auto-pipeline` माँगें। केवल posting paste करने पर career-ops आपके अनुरोध या पहले से बताई गई preference के अनुसार काम करेगा; दोनों अस्पष्ट हों तो artifacts बनाने से पहले पूछेगा कि आप कौन-सा काम चाहते हैं। Codex में, slash commands guaranteed नहीं हैं। Same mode names को एक prompt में use करें, या उन्हें `codex exec` से call करें। diff --git a/README.ja.md b/README.ja.md index 200b1a7a44..8d7b383979 100644 --- a/README.ja.md +++ b/README.ja.md @@ -141,7 +141,7 @@ career-opsは複数のモードを持つ単一のスラッシュコマンドで ``` /career-ops → 利用可能なすべてのコマンドを表示 -/career-ops {求人票を貼る} → 完全自動パイプライン(評価 + PDF + トラッカー) +/career-ops auto-pipeline {求人票を貼る} → 完全自動パイプライン(評価 + PDF + トラッカー) /career-ops scan → ポータルをスキャンして新しい求人を探す /career-ops pdf → ATS最適化CVを生成 /career-ops batch → 複数オファーをバッチ評価 diff --git a/README.ko-KR.md b/README.ko-KR.md index eb6611d5b7..0d50229c77 100644 --- a/README.ko-KR.md +++ b/README.ko-KR.md @@ -141,7 +141,7 @@ career-ops는 다양한 모드를 가진 하나의 슬래시 커맨드입니다: ``` /career-ops → 사용 가능한 모든 명령어 표시 -/career-ops {JD 붙여넣기} → 전체 자동 파이프라인 (평가 + PDF + 트래커) +/career-ops auto-pipeline {JD 붙여넣기} → 전체 자동 파이프라인 (평가 + PDF + 트래커) /career-ops scan → 포털에서 새 공고 스캔 /career-ops pdf → ATS 최적화 이력서 생성 /career-ops batch → 여러 공고 일괄 평가 diff --git a/README.md b/README.md index 64476a8372..30bee8ea5c 100644 --- a/README.md +++ b/README.md @@ -192,7 +192,7 @@ claude # or codex / opencode / qwen / agy / grok # "Update my profile with this CV I'm pasting" # 6. Start using -# Paste a job URL or JD text to trigger auto-pipeline +# Request auto-pipeline with a job URL or JD text # If your CLI supports slash commands, use /career-ops (or its CLI-specific alias) # In Codex, ask for the same mode in plain language, e.g.: # "Run the career-ops scan mode" @@ -319,7 +319,7 @@ career-ops uses a shared command router. In CLIs that register slash commands, i ``` /career-ops → Show all available commands -/career-ops {paste a JD} → Full auto-pipeline (evaluate + PDF + tracker) +/career-ops auto-pipeline {paste a JD} → Full auto-pipeline (evaluate + PDF + tracker) /career-ops scan → Scan portals for new offers /career-ops pdf → Generate ATS-optimized CV /career-ops cover → Cover letter generator (paste JD or /career-ops cover {slug}) @@ -335,7 +335,7 @@ career-ops uses a shared command router. In CLIs that register slash commands, i /career-ops project → Evaluate a portfolio project ``` -Or just paste a job URL or description directly -- career-ops auto-detects it and runs the full pipeline. +Request `auto-pipeline` with a job URL or description to run the full workflow. A pasted posting follows your requested task or an established preference; if neither is clear, career-ops asks which operation you want before creating artifacts. In Codex, slash commands are not guaranteed. Use the same mode names in a prompt instead, or call them from `codex exec`. diff --git a/README.pl.md b/README.pl.md index 7f6209cd74..7b003c1c0e 100644 --- a/README.pl.md +++ b/README.pl.md @@ -136,7 +136,7 @@ career-ops to jedna komenda slash z wieloma trybami: ```text /career-ops → Pokaż wszystkie dostępne komendy -/career-ops {wklej ofertę} → Pełny auto-pipeline (ocena + PDF + tracker) +/career-ops auto-pipeline {wklej ofertę} → Pełny auto-pipeline (ocena + PDF + tracker) /career-ops scan → Skanuj portale w poszukiwaniu nowych ofert /career-ops pdf → Generuj CV zoptymalizowane pod ATS /career-ops batch → Wsadowa ocena wielu ofert diff --git a/README.pt-BR.md b/README.pt-BR.md index ba58136661..e9a6e1b145 100644 --- a/README.pt-BR.md +++ b/README.pt-BR.md @@ -141,7 +141,7 @@ career-ops é um único comando slash com múltiplos modos: ``` /career-ops → Mostrar todos os comandos disponíveis -/career-ops {cole um JD} → Auto-pipeline completo (avaliar + PDF + tracker) +/career-ops auto-pipeline {cole um JD} → Auto-pipeline completo (avaliar + PDF + tracker) /career-ops scan → Escanear portais por novas vagas /career-ops pdf → Gerar CV otimizado para ATS /career-ops batch → Avaliar múltiplas vagas em lote diff --git a/README.ru.md b/README.ru.md index 36b67f5f9b..29abd56b5e 100644 --- a/README.ru.md +++ b/README.ru.md @@ -133,7 +133,7 @@ career-ops — одна slash-команда с множеством режим ``` /career-ops → Показать все доступные команды -/career-ops {вставь описание JD} → Полный авто-пайплайн (оценка + PDF + трекер) +/career-ops auto-pipeline {вставь описание JD} → Полный авто-пайплайн (оценка + PDF + трекер) /career-ops scan → Сканирование порталов /career-ops pdf → Генерация ATS-резюме /career-ops batch → Пакетная оценка вакансий diff --git a/README.ta.md b/README.ta.md index c8b339472a..fb64fa9d69 100644 --- a/README.ta.md +++ b/README.ta.md @@ -286,7 +286,7 @@ career-ops, அனைத்து CLI-களுக்கும் பொது ```text /career-ops → கிடைக்கக்கூடிய அனைத்து கட்டளைகளையும் காண்பி -/career-ops {paste a JD} → முழு Auto-Pipeline (மதிப்பீடு + PDF + Tracker) +/career-ops auto-pipeline {paste a JD} → முழு Auto-Pipeline (மதிப்பீடு + PDF + Tracker) /career-ops scan → புதிய வேலை வாய்ப்புகளை Scan செய் /career-ops pdf → ATS-optimized CV உருவாக்கு /career-ops cover → Cover Letter உருவாக்கு (JD அல்லது /career-ops cover {slug}) diff --git a/README.tr.md b/README.tr.md index 0ff0b85778..ffbf49519e 100644 --- a/README.tr.md +++ b/README.tr.md @@ -287,7 +287,7 @@ career-ops paylaşılan bir komut yönlendiricisi kullanır. Slash komutlarını ``` /career-ops → Tüm kullanılabilir komutları göster -/career-ops {bir iş ilanı yapıştırın} → Tam otomatik hat (değerlendirme + PDF + tracker) +/career-ops auto-pipeline {bir iş ilanı yapıştırın} → Tam otomatik hat (değerlendirme + PDF + tracker) /career-ops scan → Yeni ilanlar için portalları tara /career-ops pdf → ATS uyumlu CV üret /career-ops cover → Ön yazı üretici (iş ilanı yapıştırın veya /career-ops cover {slug}) diff --git a/README.ua.md b/README.ua.md index 9862304a07..17063910c5 100644 --- a/README.ua.md +++ b/README.ua.md @@ -144,7 +144,7 @@ career-ops — це одна слеш-команда з кількома реж ```text /career-ops → Показати всі доступні команди -/career-ops {вставити JD} → Повний авто-конвеєр (оцінка + PDF + трекер) +/career-ops auto-pipeline {вставити JD} → Повний авто-конвеєр (оцінка + PDF + трекер) /career-ops scan → Сканувати портали на нові вакансії /career-ops pdf → Згенерувати ATS-оптимізоване резюме /career-ops batch → Пакетна оцінка кількох вакансій diff --git a/README.zh-TW.md b/README.zh-TW.md index f32953b9ea..59ddd40fb6 100644 --- a/README.zh-TW.md +++ b/README.zh-TW.md @@ -255,7 +255,7 @@ career-ops 是一個具有多種模式的單一斜線指令: ``` /career-ops → 顯示所有可用指令 -/career-ops {貼上職缺描述} → 完整自動管道(評估 + PDF + 追蹤) +/career-ops auto-pipeline {貼上職缺描述} → 完整自動管道(評估 + PDF + 追蹤) /career-ops scan → 掃描平台尋找新職缺 /career-ops pdf → 生成 ATS 最佳化履歷 /career-ops batch → 批次評估多份職缺 diff --git a/modes/auto-pipeline.md b/modes/auto-pipeline.md index 3d63a5f6f8..ce00faf10b 100644 --- a/modes/auto-pipeline.md +++ b/modes/auto-pipeline.md @@ -1,6 +1,8 @@ # Mode: auto-pipeline — Full Automatic Pipeline -When the user pastes a JD (text or URL) without an explicit sub-command, execute the ENTIRE pipeline in sequence: +When the user requests `auto-pipeline`, explicitly asks for the full workflow, or has an established preference covering this JD or URL, execute the pipeline in sequence. A pasted JD or URL alone does not select this mode; honor any narrower requested task, and ask for the intended operation only when it is missing. Full-pipeline intent covers the report, PDF, and tracker steps below; it does not authorize application submission or sending messages. + +For an authorized full-pipeline request: ## Step 0 — Extract JD diff --git a/modes/interview-prep.md b/modes/interview-prep.md index 5864b51f64..401f739e6c 100644 --- a/modes/interview-prep.md +++ b/modes/interview-prep.md @@ -43,7 +43,7 @@ The inputs above are report-first, but a common path skips evaluation entirely: **Trigger — both conditions required:** -1. The user **explicitly asks to prep** and provides a JD URL (e.g. "prep me for this", "interview prep: ", `/career-ops interview-prep `). A pasted URL alone is NOT enough — per AGENTS.md, a bare URL routes to `auto-pipeline`, not here. +1. The user **explicitly asks to prep** and provides a JD URL (e.g. "prep me for this", "interview prep: ", `/career-ops interview-prep `). A pasted URL alone is NOT enough — per AGENTS.md, a bare URL without a requested task or established preference needs an intent clarification before selecting a mode. 2. **No matching report exists** in `reports/` for that company+role. If a report DOES exist, ignore the URL fetch and use the report — the report stays authoritative. **Fetch ladder** — same as `modes/oferta.md` and the AGENTS.md Offer Verification rule; JD fetching follows the same ladder: diff --git a/test-all.mjs b/test-all.mjs index ad0585d6e1..6e19e05226 100755 --- a/test-all.mjs +++ b/test-all.mjs @@ -6307,7 +6307,8 @@ if ( } const criticalRoutingContracts = [ - ['paste-a-JD auto-pipeline', /Pastes JD or URL\s*\|\s*auto-pipeline/], + ['explicit full-pipeline request', /Requests the full pipeline for a JD or URL\s*\|\s*auto-pipeline/], + ['bare posting intent', /Pastes JD or URL\s*\|\s*Honor the requested task or an established user preference/], ['PDF mode', /generate CV\/PDF\s*\|\s*`pdf`/i], ['language modes_dir override', /language\.modes_dir:\s*modes\/(?:\{lang\}|de)/], ['doctor --json onboarding', /node doctor\.mjs --json/], @@ -17153,7 +17154,7 @@ console.log('\n59c. The exported script budget matches the one run() enforces'); // ── 61. INTERVIEW-PREP URL ENTRY (#1816) ──────────────────────── // Prompt-level slice: prep for a role that was never evaluated. Pins the -// disambiguation rule (bare URL still routes to auto-pipeline), the +// disambiguation rule (bare URL requires task intent), the // report-stays-authoritative rule, the oferta fetch ladder, and the // read-only-on-the-pipeline scope guard. @@ -17172,11 +17173,11 @@ try { if ( prepFlat.includes('If a report DOES exist, ignore the URL fetch and use the report — the report stays authoritative') && - prepFlat.includes('a bare URL routes to `auto-pipeline`, not here') + prepFlat.includes('a bare URL without a requested task or established preference needs an intent clarification before selecting a mode') ) { - pass('interview-prep URL entry: report stays authoritative, bare URL still routes to auto-pipeline'); + pass('interview-prep URL entry: report stays authoritative, bare URL requires task intent'); } else { - fail('interview-prep URL entry missing the report-stays-authoritative rule or the auto-pipeline disambiguation rule'); + fail('interview-prep URL entry missing the report-stays-authoritative rule or the task-intent disambiguation rule'); } if (