Resumen en una frase: Si ya usas Claude Code para programar, ¿por qué no aprovecharlo también para conseguir trabajo? Career-Ops convierte una CLI de programación con IA en un “comandante” de búsqueda laboral: pega una URL de JD, evalúa y genera automáticamente CVs optimizados para ATS, y además hace seguimiento del progreso. El propio autor la usó para filtrar 740+ ofertas, generar 100+ CVs a medida y, al final, aterrizar como Head of Applied AI.
Descripción del proyecto
Career-Ops (alias: careerops) es un pipeline de búsqueda laboral impulsado por IA, con GitHub: santifer/career-ops y licencia MIT. Su enfoque central es:
Convertir cualquier CLI de programación con IA en un centro de mando completo para la búsqueda de empleo.
No es “otra herramienta para que la IA te modifique el CV”, ni un robot para enviar solicitudes masivamente. La filosofía de Career-Ops es hacer reducción: de cientos de ofertas, te ayuda a filtrar las pocas que realmente valen la pena; lo hace con puntuación A-F, +6 dimensiones de evaluación, optimización ATS en PDF y seguimiento 100% automatizado.
Capacidades principales (15 slash commands):
| Escenario | Comando | Descripción |
|---|---|---|
| Pegar una URL de JD | /career-ops | Pipeline automático (evaluación + informe + PDF + tracker) |
| Evaluación individual | /career-ops evaluate | Puntuación A-F + análisis en 6 dimensiones |
| Comparar varias | /career-ops compare | Ordenar varias ofertas |
| Escanear vacantes | /career-ops scan | 45+ empresas preconfiguradas, ejecuta APIs de Ashby/Greenhouse/Lever |
| Evaluación en lote | /career-ops batch | Ejecuta workers claude -p en paralelo |
| Generar PDF | /career-ops pdf | CV optimizado para ATS (fuentes Space Grotesk + DM Sans) |
| Exportar a LaTeX | /career-ops latex | .tex compatible con Overleaf |
| Seguimiento de envíos | /career-ops tracker | Vista general del estado |
| Completar formularios | /career-ops apply | Ayuda con formularios (asistida por IA, sin pulsar Submit) |
| Investigación profunda | /career-ops deep | Investigación sobre la empresa |
| Preparación para entrevistas | /career-ops interview | Historias STAR+R específicas de la empresa |
| Contacto en LinkedIn | /career-ops contact | Encontrar gente + redactar mensaje |
| Modo “patterns” | /career-ops patterns | Análisis de patrones de rechazo, optimiza la estrategia |
| Ritmo de seguimiento | /career-ops followup | Calendario de follow-ups |
| Evaluación de cursos/proyectos | /career-ops training / project | Ruta de mejora personal |
CLI de programación con IA compatibles: Claude Code / OpenCode / Gemini CLI / Codex / Qwen / GitHub Copilot / Kimi — mientras sigan open agent skill standard, sirve.
Soporte multilingüe: por defecto inglés; además hay alemán (modes/de/) / francés (modes/fr/) / japonés (modes/ja/) / turco (modes/tr/) / chino simplificado (README.cn.md) / chino tradicional (README.zh-TW.md).
Resultados: el autor santifer la usó para evaluar 740+ ofertas, generar 100+ CVs personalizados y finalmente conseguir una oferta como Head of Applied AI.
Dificultad / Duración / Qué ganas
- Dificultad: ⭐⭐ (media; necesitas saber usar una CLI de programación con IA como Claude Code)
- Duración: 30–60 minutos para el onboarding inicial (incluye preparación de cv.md + configuración de perfil)
- Beneficios:
- Poner en marcha un pipeline real y utilizable de búsqueda de empleo con IA
- Entender el diseño de arquitectura de Agent “User Layer vs System Layer”
- Aprender a afinar la búsqueda con puntuación A-F + historias STAR+R
- Ver cómo se monta un proyecto open source de nivel producción que apareció en WIRED / Business Insider
- Llevar en el bolsillo 15 slash commands y usarlos todos los días durante la búsqueda
Perfil de destinatarios
- Desarrolladores que están buscando trabajo / cambiando de empleo / mirando oportunidades
- Ya son usuarios de Claude Code / OpenCode / Gemini CLI
- Quieren pasar de “aplicar masivamente” a “aplicar de forma precisa” y no desperdiciar tiempo en ofertas basura
- Quieren entender cómo es un proyecto de AI Agent “de producción” con +7k Star
TIP
Lo más caro en la etapa de búsqueda es el token. El modo batch de Career-Ops evaluando 10+ ofertas es una delicia, pero correr 100 ofertas con los API oficiales de Claude / Anthropic cuesta; en una noche puede ser $20–40, y al mes es normal que llegue a cuatro cifras en costos de token.
Mi forma de conectarlo (comparto, no recomiendo): uso Defapi con protocolo compatible con Anthropic; cambias una línea en Base URL y listo:
# Supón que usas Claude Code; cambia en ~/.claude/settings.json o en env
ANTHROPIC_BASE_URL=https://api.defapi.org
ANTHROPIC_API_KEY=sk-xxxxx # lo obtienes en el panel de defapi.org
Los modelos de Defapi son compatibles, en general, con las tres familias de protocolos más comunes — v1/chat/completions (OpenAI) / v1/messages (Anthropic) / v1beta/models (Gemini) — sin cambios de código en el lado del Agent; prompts de evaluación, historias STAR, y el schema del tracker siguen igual. El modelo es el mismo; lo que cambia es el costo de compra, y en la búsqueda mensual el token bill se ve directamente a la mitad de forma real. Más adelante, en la FAQ Q5, se amplía.
Dependencias y entorno
Requisitos mínimos:
| Proyecto | Requiere |
|---|---|
| Node.js | 20+ |
| CLI de programación con IA | al menos instalar una (Claude Code / OpenCode / Gemini CLI / Codex / Qwen / Copilot) |
| Playwright | navegador Chromium (necesario para generar PDFs) |
| Sistema operativo | macOS / Linux / Windows (se recomienda WSL) |
Opcional / mejoras:
| Proyecto | Uso |
|---|---|
| Go 1.21+ | correr TUI Dashboard |
| API Key de Google AI Studio | ejecutar el script independiente gemini-eval.mjs (cuota gratis) |
| Navegador Chromium | verificar si las ofertas siguen activas (Playwright instala automáticamente) |
| Varias LLM API Key | con que uses el protocolo de Claude / OpenAI / Anthropic, basta |
TIP
No hace falta suscribirte a Claude Max. Career-Ops es un sistema “impulsado por el protocolo LLM”: puedes conectarlo con cualquier API compatible con
v1/messagesov1/chat/completions(la forma concreta se ve en el TIP después del apartado “Perfil de destinatarios”).
Árbol completo de la estructura del proyecto
career-ops/
├── AGENTS.md # Instrucciones generales del Agent (entre CLIs)
├── CLAUDE.md # Solo para Claude Code (import AGENTS.md)
├── GEMINI.md # Solo para Gemini CLI
├── cv.md # Tu CV (lo creas tú; archivo clave)
├── article-digest.md # Tu prueba de highlights (opcional)
├── config/
│ └── profile.example.yml # Plantilla de tu perfil
├── modes/ # 15 modos de skill
│ ├── _shared.md # Contexto compartido en la capa system
│ ├── _profile.template.md # Personalización en capa user (coloca tu arquetipo)
│ ├── oferta.md # Evaluación de una oferta individual
│ ├── pdf.md # Generación de PDF
│ ├── scan.md # Escaneo de vacantes
│ ├── batch.md # Procesamiento en lote
│ ├── auto-pipeline.md # URL → evaluación + PDF + tracker
│ ├── de/ # Modo en alemán
│ ├── fr/ # Modo en francés
│ ├── ja/ # Modo en japonés
│ └── tr/ # Modo en turco
├── templates/
│ ├── cv-template.html # Plantilla de CV optimizado para ATS
│ ├── cv-template.tex # Plantilla LaTeX
│ ├── portals.example.yml # 45+ empresas preconfiguradas
│ └── states.yml # Diccionario de estados para solicitudes
├── data/ # Datos de envíos (gitignored)
│ ├── applications.md # Tabla principal de seguimiento
│ ├── pipeline.md # Bandeja de URL pendientes
│ ├── scan-history.tsv # Deduplicación de escaneos
│ └── follow-ups.md # Historial de follow-ups
├── reports/ # Informes de evaluación (gitignored)
├── output/ # PDFs generados (gitignored)
├── jds/ # Texto de JD almacenado aquí (opcional)
├── interview-prep/ # Preparación de entrevistas
│ ├── story-bank.md # Historias STAR+R acumuladas
│ └── {company}-{role}.md # Información específica de la empresa
├── batch/
│ ├── batch-prompt.md # prompt para workers
│ ├── batch-runner.sh # script de orquestación
│ └── tracker-additions/ # adiciones pendientes para fusionar en el tracker principal
├── dashboard/ # Go TUI (Bubble Tea)
│ ├── main.go
│ └── internal/
├── fonts/ # Space Grotesk + DM Sans
├── providers/ # Configuración del proveedor LLM
├── docs/ # Documentación multilingüe + cobertura mediática
├── examples/ # CV / informes / highlights de ejemplo
└── *.mjs # Scripts para escaneo / validación / fusión / health checks
Como usuario, solo necesitas tocar estos 4 archivos: cv.md / config/profile.yml / modes/_profile.md / portals.yml. Eso es User Layer; las actualizaciones del sistema no los modifican. El resto se encarga de gestionarlo el Agent.
Pasos paso a paso
Paso 1: Clonar + instalar
git clone https://github.com/santifer/career-ops.git
cd career-ops
npm install
npx playwright install chromium # necesario para generar PDFs
WARNING
No te saltes
npx playwright install chromium. Luego,/career-ops pdfusa renderizado con Playwright; si falta Chromium, aparecerá el error “browser not found”.
Paso 2: Comprobación de salud
npm run doctor
Verificará la versión de Node.js, Playwright, archivos clave y permisos de directorios. Si falla, el “doctor” te indicará qué falta; lo corriges y vuelves a ejecutarlo.
Paso 3: Crear tu cv.md
Este es el origen de todo el pipeline: sin él, el Agent no puede evaluar ofertas.
En la raíz del proyecto, crea cv.md:
# Tu Nombre
**Email:** [email protected]
**Ubicación:** Berlin, Alemania (CET)
**LinkedIn:** linkedin.com/in/you
**GitHub:** github.com/you
## Summary
Senior backend engineer con 6 años construyendo sistemas distribuidos...
(Objetivo: 2–3 párrafos; escribe “qué haces” y “las una o dos cosas en las que eres más fuerte”)
## Experience
### Staff Engineer — Company A (2023 - Present)
- Lideré la migración de X a Y, reduciendo Z en un 40%
- (si es posible, incluye números; esta parte la usará el Agent para hacer match con el JD)
### Senior Engineer — Company B (2020 - 2023)
- ...
## Education
...
## Skills
Backend: Go, Python, PostgreSQL, Kafka
AI/ML: PyTorch, LangChain, RAG
...
TIP
¿No quieres escribirlo tú? Tras arrancar Claude Code, dile: “pego mi CV anterior” / “aquí está mi URL de LinkedIn” / “te lo cuento en voz alta y ayúdame a redactarlo”. El Agent lo convertirá a
cv.md. Hay tres rutas de onboarding; en el README se incluyen prompts.
Paso 4: Configurar config/profile.yml
cp config/profile.example.yml config/profile.yml
Abre config/profile.yml y rellena:
personal:
name: "Tu Nombre"
email: "[email protected]"
location: "Berlin, Alemania"
timezone: "CET"
targeting:
roles:
- "Senior Backend Engineer"
- "Staff Engineer"
- "AI Platform Engineer"
comp_target:
base_min: 130000
base_target: 160000
currency: "EUR"
remote_preference: "remote-first"
deal_breakers:
- "no on-call"
- "no Java"
- "no < 20 person startups"
# Si quieres usar los modos en chino / alemán / francés / japonés / turco, añade esta línea
# language:
# modes_dir: modes/de
WARNING
No edites a mano
modes/_shared.md. Las actualizaciones del sistema lo sobrescribirán. Tu arquetipo personal / estrategia de negociación / objetivos salariales deben ir, siempre, enmodes/_profile.mdoconfig/profile.yml. Esta es la regla de Data Contract que el README recalca varias veces.
Paso 5: Configurar portals.yml
cp templates/portals.example.yml portals.yml
Por defecto incluye 45+ empresas + 19 consultas de búsqueda que cubren:
# AI Labs
- anthropic
- openai
- mistral
- cohere
# Voice AI
- elevenlabs
- vapi
- deepgram
# AI Platforms
- retool
- airtable
- vercel
- temporal
Si quieres añadir tus propias empresas objetivo, basta con agregarlas en portals.yml. La cobertura del job board incluye Ashby / Greenhouse / Lever / Wellfound / Workable / RemoteFront.
Paso 6: Haz que el Agent te ayude a “Onboard”
# Elige una CLI de IA que tengas instalada
claude # Claude Code
# o
gemini # Gemini CLI
# o
opencode # OpenCode
# o
codex # Codex
En la CLI, di:
Configura career-ops. Lo acabo de clonar; ya tengo `cv.md` y `config/profile.yml` rellenados.
Revisa si mi onboarding está completo y si falta algo.
El Agent ejecutará una verificación de arranque:
- ¿
cv.mdestá? ✅ - ¿
config/profile.ymles real (no.example)? ✅ - ¿
modes/_profile.mdfue copiado desde_profile.template.md? ⚠️ - ¿
portals.ymles real (no.example)? ✅
Si cualquiera falla (❌), entra en modo guía y te pedirá que completes lo que falte, en una conversación 1 a 1.
TIP
En la primera ejecución, el Agent te preguntará activamente: “¿Cuál es un logro profesional del que te sientes más orgulloso? ¿Tienes algún deal-breaker? ¿Cuál es tu superpoder?”. Dedícale 5 minutos para responder con seriedad: esa parte acabará en
modes/_profile.md, y la precisión de las puntuaciones en evaluaciones posteriores dependerá de ello. Piensa que la primera semana es como onboardear a un reclutador nuevo; la segunda semana, ya entenderá mejor tu perfil que la mayoría de recruiters humanos.
Paso 7: Primera evaluación
Pega una URL de JD al Agent:
/career-ops https://jobs.anthropic.com/staff-software-engineer-applied-ai
El Agent ejecutará un pipeline totalmente automático:
- Detección de arquetipo — clasifica como LLMOps / Agentic / PM / SA / FDE / Transformation
- Evaluación A-F — 6 dimensiones (Role summary / CV match / Level strategy / Comp research / Personalization / Interview prep)
- Generar informe — escribe en
reports/001-anthropic-2026-06-09.md - Generar PDF — ejecuta renderizado con Playwright para un CV ATS y lo saca en
output/001-anthropic-cv.pdf - Escribir en el tracker — añade una línea a
data/applications.md - Actualizar integridad del pipeline — corre
node verify-pipeline.mjspara comprobar
Deberías ver, después de 30–60 segundos, aparecer el informe de evaluación completo y el PDF del CV ATS.
WARNING
La primera puntuación no será precisa. El sistema todavía no te conoce, así que puede darte una puntuación demasiado alta o demasiado baja. No te preocupes: tras correr 3–5 evaluaciones y, según los resultados, decirle al Agent “este score está alto, porque XX” / “no mencioné que tengo experiencia con XX” — el Agent incorporará lo aprendido en
modes/_profile.md. Cuanto más lo uses, más preciso será.
Paso 8: Primera exploración (scan)
/career-ops scan
O equivalente:
node scan.mjs # cero token, captura solo vía API
node scan.mjs --verify # API + segunda verificación con Playwright; filtra vacantes caducadas
Con 45+ empresas preconfiguradas y 19 consultas de búsqueda, normalmente salen 200–500 vacantes nuevas en una ronda; van directo a la bandeja data/pipeline.md. Luego, con workers claude -p en paralelo, correr evaluaciones es pan comido: que en una noche se procesen 100+ ofertas no es un sueño.
Paso 9: Correr el TUI Dashboard (opcional)
Si quieres ver el progreso con UI en terminal:
cd dashboard
go build -o career-dashboard .
./career-dashboard --path ..
6 tabs de filtrado, 4 modos de ordenación, vista agrupada/plana, previsualización lazy-loaded; al seleccionar se cambia el estado. Tema Catppuccin Mocha: se ve muy bien.
Paso 10: Actualizar el sistema (importante!)
Career-Ops itera rápido; cada pocas semanas hay un nuevo modo o una nueva configuración de empresas.
# En la raíz del proyecto, haz que el Agent te lo revise
claude # dile “checkea si career-ops tiene una versión nueva”
El Agent correrá automáticamente node update-system.mjs check; la salida JSON se ve así:
{"status": "update-available", "local": "1.3.0", "remote": "1.4.0", "changelog": "..."}
Te dirá “v1.3.0 → v1.4.0 disponible; tus datos (CV / profile / tracker / reports) no se tocan; ¿quieres actualizar?”. Para actualizar:
node update-system.mjs apply # actualizar
node update-system.mjs rollback # si no te gusta, volver atrás
Solución de problemas frecuentes
Q1: No encuentro cv.md / El Agent se queda en onboarding
El motivo más común es que cv.md no está en la raíz del proyecto:
# confirma que está en la raíz
ls -la cv.md
# deberías ver -rw-r--r-- cv.md
# si no está, créalo (en la raíz)
cd career-ops
touch cv.md
# luego rellena el contenido
Q2: Fallo al generar el PDF, “browser not found”
Playwright no está instalado o no tiene Chromium:
npx playwright install chromium
# si la red en tu país va lenta, puedes añadir espejo
PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright npx playwright install chromium
Q3: Puntuaciones infladas o demasiado bajas
Es lo normal durante la primera semana. Solución:
- Ejecuta 3–5 evaluaciones más y cada vez responde al Agent: “no estoy de acuerdo con esta puntuación porque XX”
- El Agent añadirá lo aprendido a
modes/_profile.md - Mira sobre todo si en
modes/_profile.mdse completó: tu mínimo salarial / preferencia remota / enfoque de rol / caso inverso
Importante: el contenido personalizado va en
modes/_profile.mdoconfig/profile.yml. No editesmodes/_shared.md: este último se sobrescribe con las actualizaciones del sistema.
Q4: WebSearch / WebFetch: ¿verifica que una oferta esté bien?
No. La regla interna de Career-Ops es verificar con Playwright que la oferta aún esté activa:
# usa el slash command; internamente corre Playwright
/career-ops verify --url <JD_URL>
En el modo batch (
claude -p) Playwright no está disponible; se marcará como**Verification:** unconfirmed (batch mode), y deberás revisarlo a mano.
Q5: El consumo de tokens en evaluación masiva (batch) explota
Corriendo 100+ evaluaciones de ofertas, en una noche el token bill puede pasar fácilmente $20. Hay tres arreglos:
- Reducir la cantidad de batch — corre de 10 a 20 en cada ejecución; no barrer 100+
- Fallback con modelos locales — tareas estructuradas como
ofertas(comparación) /tracker/pdfpuedes pasarlas a modelos locales pequeños - Conectar un API “semi-precio” de Defapi — protocolo 100% compatible; usan el mismo modelo que el oficial, pero con la factura mensual reducida a la mitad (configuración concreta en el TIP del apartado “Perfil de destinatarios”)
Q6: Cambiar a modo alemán / francés / japonés / turco
# 1. Edita config/profile.yml
language:
modes_dir: modes/de # o fr / ja / tr
O simplemente dile al Agent: “ejecuta el modo en alemán”. El Agent cambiará a la lógica de evaluación en modes/de/ (con vocabulario local como 13. Monatsgehalt, Probezeit, AGG, Tarifvertrag en mercado DACH).
WARNING
Después de cambiar a
modes/de/, también se evaluarán en alemán las ofertas en inglés. A menos que solo postules a ofertas en alemán, mantén el modo inglés por defecto y cambia manualmente solo cuando postules a ofertas en alemán.
Q7: Datos “sucios” con formato en campos de estado (como **Applied**)
Los estados del tracker se añadieron en negrita manualmente. Solución:
node normalize-statuses.mjs # normalizar estados
node dedup-tracker.mjs # eliminar duplicados
node verify-pipeline.mjs # health check
Luego ajusta templates/states.yml para usar estados canónicos.
Lecturas extra / Direcciones avanzadas
- User Layer vs System Layer: este es el diseño de ingeniería más interesante en Career-Ops —
modes/_profile.md(user) nunca lo sobreescribemodes/_shared.md(system). Todo lo personalizado que metes en onboarding no se pierde aunque corras 100 actualizaciones del sistema. Se recomienda leerDATA_CONTRACT.mdpara ver el panorama completo - Cambiar el arquetipo: dile al Agent “change the archetypes to data engineering roles”; lo cambia en
modes/_profile.mden lugar demodes/_shared.md - Cambio multilingüe: al postular a vacantes en alemán/francés/japonés/turco, cambia a
modes/{de,fr,ja,tr}/; la lógica de evaluación se localiza automáticamente (CDI / 賞与 /通勤手当 y otros términos locales) - TUI Dashboard avanzado: dashboard está escrito con Go + Bubble Tea + Lipgloss; paleta Catppuccin Mocha. El código fuente está en
dashboard/internal/; para añadir filtros u ordenamientos personalizados, solo cambia eso. - Banco de historias STAR+R:
interview-prep/story-bank.mdacumula tus historias “Situation + Task + Action + Result + Reflection” a través de evaluaciones; tras 3–5 evaluaciones tendrás 5–10 historias que te servirán para casi cualquier pregunta conductual. - Fork de un portafolio complementario: el portfolio del autor también es open source — santifer/cv-santiago, con un chatbot con IA + panel LLMOps + case studies. Haz un fork y cámbialo a tu propia versión.
Repositorio de GitHub: santifer/career-ops. La documentación multilingüe está en README.{cn,es,ja,ko-KR,pt-BR,ru,ua,zh-TW}.md. La filosofía de diseño en DATA_CONTRACT.md. Cobertura en medios en docs/press/. Roadmap en ROADMAP.md (si no lo encuentras en el proyecto, pregunta al Agent “show me your roadmap”).