Genera un CV en PDF adaptado a una JD concreta: career-ops construye el CV como HTML a partir de una plantilla tipográfica limpia y Playwright lo imprime a PDF. El resultado es estructuralmente simple (sin tablas, sin columnas, sin gráficos), exactamente lo que los parsers ATS procesan de forma fiable.
Qué hace
El modo pdf lee tu cv.md maestro y el contexto de la JD, y ejecuta el paso de adaptación (reescribe bullets, reordena secciones, integra keywords prioritarias) antes de exportar a PDF vía Playwright con una plantilla CSS que respeta las convenciones de los parsers ATS. El resultado está listo para subir.
Cuándo usarlo
Usa pdf cuando ya has evaluado la oferta y has decidido aplicar, y solo quieres el PDF adaptado sin volver a ejecutar el paso de evaluación.
Cómo es una ejecución
Apuntas el modo a una oferta que ya has evaluado y produce un único PDF adaptado y listo para ATS — sin re-evaluación. Extrae 15-20 keywords de la JD, elige el tamaño de papel según la ubicación de la empresa, reescribe tu resumen y reordena los bullets en torno al puesto, y después renderiza el HTML a PDF e informa de la cobertura de keywords.
/career-ops pdf acme
# detected JD language: en · paper: letter (US) · 18 keywords extracted
node generate-pdf.mjs output/cv-jane-doe-acme.html \
output/cv-jane-doe-acme-2026-05-18.pdf --format=letter --report=008
PDF: output/cv-jane-doe-acme-2026-05-18.pdf
Pages: 2 · Keyword coverage: 16/18 (89%)El layout se mantiene a una sola columna, con cabeceras de sección estándar y texto seleccionable — la estructura que los parsers ATS leen sin problemas — y las keywords se entretejen en logros reales, nunca se inventan.
La cobertura de keywords se mide contra la sección de keywords del informe de evaluación de la oferta. Si el informe no tiene ninguna, career-ops puntúa en su lugar las habilidades que encuentra en la JD archivada en el informe y te indica qué fuente usó. Un informe sin sección de keywords es un defecto que hay que corregir en el informe, no algo que se dé por bueno.
Cuándo recurrir a él
Recurre a pdf cuando has decidido aplicar y solo quieres el CV adaptado, saltándote el paso de evaluación. Algunos comportamientos que conviene conocer:
- El tamaño de papel sigue automáticamente la ubicación de la empresa:
letterpara puestos en EE. UU. y Canadá,a4en el resto del mundo. - La inyección de keywords se basa en la verdad. El modo reformula experiencia real con el vocabulario exacto de la JD, pero nunca añade una habilidad que no tienes.
- Para DACH y buena parte de la Europa continental puedes optar por incluir foto configurando
candidate.photoenconfig/profile.yml; déjalo vacío y el CV se renderiza píxel a píxel idéntico pero sin ella, que es la opción por defecto más segura para EE. UU., Reino Unido y mercados ATS-first.
Posibles problemas
Requiere Playwright instalado en local. El script de build puede fallar en instalaciones Linux mínimas sin fuentes del sistema. Ejecuta npm run doctor para diagnosticar.
La generación del PDF se detiene si los puestos de tu experiencia laboral no van del más reciente al más antiguo, y el error cita las fechas del puesto que empieza después que el de encima. Vuelve a ponerlos en orden cronológico inverso y repite: un CV se adapta con el resumen y los bullets, no moviendo puestos. Si de verdad quieres otro orden, pasa --allow-nonchronological a generate-pdf.mjs y se genera con un aviso. Con --batch, solo falla el CV desordenado; el resto se genera igual.
generate-pdf.mjs registra cada PDF que escribe en data/pdf-index.tsv, y career-ops lee ese archivo para encontrar el CV de un informe. Cada fila lleva un kind con valor cv o cover, y un informe conserva una fila de cada tipo. Al regenerar un PDF solo se sustituye la fila de su propio tipo.
Sin --kind, el tipo sale del nombre del archivo de salida. Un nombre que empieza por cv- es un CV, y uno que empieza por cover- o termina en -cover es una carta de presentación. Cualquier otro nombre se registra como CV.
El modo cover registra sus cartas como cover, se llamen como se llamen. La regla del nombre solo importa cuando ejecutas generate-pdf.mjs tú mismo. Una carta generada como acme-letter.pdf con --report=008 sustituye la fila del CV del informe 008, y quien busque ese CV recibe la carta. Pasa --kind=cover cuando el nombre del archivo no diga qué es:
node generate-pdf.mjs output/acme-letter.html output/acme-letter.pdf \
--report=008 --kind=cover--kind acepta cv o cover, y cualquier otro valor, incluido uno vacío, detiene la ejecución antes de generar nada. --batch lo rechaza; pon "kind" en la entrada correspondiente del archivo del lote. data/pdf-index.tsv es de generate-pdf.mjs, y su línea de cabecera indica que no se edita a mano.
Relacionado
interview-prep
career-ops interview-prep genera un documento de inteligencia de entrevista específico para cada empresa y puesto, segmentado según quién está en la sala — recruiter, hiring manager, técnica entre pares o panel — con preguntas probables, puntos de conversación e historias STAR extraídas de tu propio perfil.
training
¿Deberías hacer ese curso de sistemas de ML de 4.000 $? ¿La especialización de Coursera? ¿La cara certificación de AWS? El modo training puntúa una inversión en formación contra la dirección profesional que has declarado y saca a la luz el retorno real en tiempo y dinero.