CommunityRedacción y edicióngithub.com

lonelydoctor/ats-resume-builder

Constructor de currículums ATS local y exportador para JSON de ResumeIR.

¿Qué es ats-resume-builder?

Esta habilidad (skill) permite crear, optimizar y gestionar currículums profesionales optimizados para Sistemas de Seguimiento de Candidatos (ATS) de forma totalmente local, sin depender de servicios externos. Es ideal para profesionales que buscan destacar en procesos de selección automatizados, asegurando que su currículum pase los filtros iniciales. Soporta múltiples plataformas de agentes de IA como Claude Code, Cursor y Codex, y se basa en scripts de Python (pdfplumber, python-docx, reportlab) para parsear archivos y exportar a DOCX, PDF o HTML. El flujo de trabajo incluye la recolección de datos mínima, la generación de un formato JSON estandarizado (ResumeIR), un diagnóstico detallado con puntuación y lista de problemas, y una evaluación de aceptabilidad para la postulación. Además, ofrece control de versiones para comparar y revertir cambios, y exporta archivos listos para enviar.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add lonelydoctor/ats-resume-builder

Installed? Explore more Redacción y edición skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Skill de Generación/Optimización de Currículum ATS

Objetivo de la Tarea

  • Este Skill se utiliza para: ayudar a los usuarios a crear, optimizar y gestionar currículums profesionales compatibles con ATS
  • Capacidades incluidas: generación de currículum, optimización de currículum, verificación de aceptabilidad para postulación, gestión de versiones, exportación de archivos
  • Condiciones de activación: el usuario necesita crear un nuevo currículum, optimizar uno existente, comparar o exportar currículums

Preparación Previa

  • Dependencias: este Skill utiliza bibliotecas de Python puramente locales para el procesamiento de archivos y la exportación (sin dependencias de servicios externos/red)
    pdfplumber>=0.10.0   # Analizar currículums en PDF
    python-docx>=1.1.0   # Generar DOCX
    reportlab>=4.0.0     # Generar PDF (con fuente CJK incorporada, solo pip; si falta, retrocede automáticamente a HTML)
    
  • Preparación del directorio: crear un directorio de gestión de versiones en el directorio de trabajo actual
    mkdir -p .resume-versions
    

Principios Fundamentales

Reglas Estrictas

  1. Nunca inventar experiencia/datos del usuario: el contenido faltante se reemplaza con 【Marcador de posición】 y se genera una "Lista Mínima de Complementos"
  2. Compatibilidad ATS: por defecto, una sola columna, sin tablas, sin cuadros de texto, sin iconos; usar títulos de sección estándar
  3. Aceptabilidad para postulación: el informe de diagnóstico debe verificar, desde la perspectiva del primer filtro de RH, si el título coincide, si los años/ubicación/datos de contacto/autorización laboral/fecha de inicio son claros, y si hay información tabú del mercado objetivo como foto, edad, estado civil, hijos, afiliación política, salario esperado, etc.
  4. Salida completa: se debe generar simultáneamente el JSON de ResumeIR, el informe de diagnóstico, la conclusión de aceptabilidad para postulación, el texto del currículum reescrito; los archivos de exportación se generan según sea necesario mediante scripts locales (ver "Exportación de Archivos")
  5. Minimizar el costo de entrada del usuario: priorizar el soporte para "pegar texto/subir archivo", solo preguntar por campos críticos faltantes

Estructura de Salida

Todas las operaciones deben generar las siguientes tres partes (los archivos de exportación se generan según sea necesario):

  1. JSON de ResumeIR: nombres de campos fijos, conforme al Esquema ResumeIR.v1
  2. Informe de diagnóstico: lista de problemas + gravedad + sugerencias, conforme a la Especificación del Informe de Diagnóstico
  3. Conclusión de aceptabilidad para postulación: application_acceptability, respondiendo "¿Se puede postular ahora? / ¿Dónde se quedará atascado en el primer filtro de RH? / ¿Qué completar primero?"
  4. Texto del currículum reescrito: vista previa en texto plano
  5. (Opcional) Archivos de exportación: cuando el usuario necesite DOCX/PDF, llamar a scripts/render_resume.py para generarlos localmente

Pasos de la Operación

Selección de Modo

Seleccionar el modo según la necesidad del usuario:

  • Modo 1: Generar currículum (desde cero): ayudar al usuario a crear un currículum desde cero
  • Modo 2: Optimizar currículum (currículum existente): optimizar basándose en el currículum existente del usuario

Todos los modos admiten entrada opcional:

  • JD (el usuario pega el texto original)
  • Puesto objetivo: target_title / target_level (China: P6/P7, Senior/Experto/Director; roles tecnológicos en EE. UU.: Senior/Staff, L5/L6, SDE II, etc.)
  • Idioma: zh-CN / en-US
  • Industria: Internet/AI/Datos/Desarrollo/Operaciones/Ventas/Funciones, etc.
  • Plantilla: template_id (por defecto cn_ats_a4_v1)

Modo 1: Generar currículum (desde cero)

Paso 1: Recopilación de información

Con la menor cantidad de preguntas posible, ayudar al usuario a recopilar la siguiente información:

  • Información básica: nombre, teléfono, correo electrónico, ciudad
  • Puesto objetivo: target_title, target_level, target_industry
  • Últimas 2-3 experiencias laborales: cada una incluye empresa, puesto, fecha de inicio y fin, 3 puntos clave de logros
  • Formación académica: institución, título, especialidad, fecha de graduación
  • Habilidades: habilidades principales (primary) y secundarias (secondary)

Paso 2: Generar ResumeIR

Convertir la información recopilada al formato ResumeIR (campos completos en Esquema ResumeIR.v1), los campos faltantes se rellenan con 【Marcador de posición】. Ejemplo de estructura mínima:

{
  "meta": {"version": "1.0", "language": "zh-CN", "locale": "zh-CN"},
  "basics": {"name": "Zhang San", "phone": "【Marcador de posición】", "email": "【Marcador de posición】", "target_title": "Product Manager"},
  "summary": "",
  "skills": {"primary": ["Análisis de requisitos", "Análisis de datos"], "secondary": []},
  "work": [{"company": "Empresa X", "title": "Product Manager", "start": "2021-06", "end": "present",
            "bullets": ["Lideré…, lo que resultó en un incremento del 20%"]}],
  "projects": [],
  "education": [{"school": "【Marcador de posición】", "degree": "Licenciatura", "start": "", "end": ""}]
}

Paso 3: Generar la primera versión del currículum

  • Generar JSON de ResumeIR
  • Generar vista previa en texto plano (ordenado según la secuencia estándar)
  • Generar informe de diagnóstico (verificar principalmente la integridad)
  • Generar conclusión de aceptabilidad para postulación: ready / needs_fix / do_not_submit, y enumerar hasta 3 problemas que detendrían el primer filtro de RH
  • Generar lista mínima de complementos (máximo 8 preguntas)

Paso 4: Guardar versión

Guardar automáticamente como la primera versión: version_name = "{target_title}-{date}-{lang}"

Modo 2: Optimizar currículum (currículum existente)

Paso 1: Analizar currículum

  • Si el usuario sube un archivo (PDF/DOCX/TXT): llamar a scripts/parse_resume.py para extraer el texto
  • Si el usuario pega texto: usar directamente el contenido del texto

Paso 2: Confirmación mostrando al usuario

Mostrar al usuario los siguientes campos clave para confirmar la precisión del análisis:

  • Nombre
  • Empresa más reciente
  • Puesto más reciente
  • Estimación de años de experiencia

Paso 3: Recopilar JD (opcional)

Preguntar al usuario si tiene un JD objetivo, si es así, que lo pegue

Paso 4: Generar ResumeIR e informe de diagnóstico

  • Extraer información del texto del currículum, generar ResumeIR (los faltantes se rellenan con 【Marcador de posición】)
  • Generar informe de diagnóstico (puntuación 0-100, lista de problemas + gravedad + sugerencias)
  • Generar conclusión de aceptabilidad para postulación: coincidencia de título, legibilidad en la primera página, datos de contacto, ubicación/fecha de inicio/autorización laboral, información tabú del mercado, si la evidencia del puesto satisface el primer filtro de RH
  • Generar ResumeIR reescrito
  • Generar vista previa en texto plano (cuando el usuario necesite el archivo, llamar a render_resume.py para exportar)

Paso 5: Guardar versión

Guardar automáticamente como la primera versión: version_name = "{target_title}-{date}-{lang}"

Especificaciones para la Reescritura del Currículum

Redacción de bullets de experiencia laboral

Cada bullet debe cumplir con la siguiente estructura:

Verbo de acción + Tarea + Método/Herramienta + Resultado (métrica)

Ejemplos:

  • ❌ Incorrecto: Responsable del análisis de datos y la generación de informes
  • ✅ Correcto: Utilicé Python y SQL para analizar datos de comportamiento de usuarios, optimicé funciones del producto mediante pruebas A/B, lo que resultó en un aumento del 20% en usuarios activos diarios

Requisitos de cuantificación

  • Siempre que sea posible, usar números concretos, porcentajes, montos, etc., como indicadores cuantificables
  • Cuando no sea posible cuantificar, usar el marcador de posición 【métrica】 e indicarlo en la lista de complementos

Cobertura de palabras clave del JD (si hay JD)

  • Realizar cobertura de palabras clave para las habilidades principales (≤12)
  • Reflejarlas de forma natural en los bullets, evitando el relleno forzado

Gestión de Versiones

Guardar una versión

Usar el script para guardar el ResumeIR actual:

python3 scripts/version_manager.py save --version-name "Product Manager-2024-01-15-es" --resume-ir "resume_ir.json"

Renombrar una versión

python3 scripts/version_manager.py rename --old-name "v1" --new-name "Product Manager-2024-01-15-es"

Comparar versiones

python3 scripts/version_manager.py compare --version1 "v1" --version2 "v2"

Revertir a una versión

python3 scripts/version_manager.py rollback --version-name "v1"

Exportación de Archivos

Exportación local (Python puro, sin servicios externos/red)

Cuando el usuario solicite la exportación, guardar el ResumeIR actual como JSON y luego llamar al script:

python3 scripts/render_resume.py --resume-ir "resume_ir.json" --output-formats "docx,pdf" --output-dir ./out

La exportación utiliza una escalera de degradación, asegurando que se pueda generar un archivo utilizable en cualquier entorno:

  • DOCX: generado con python-docx, una sola columna, títulos estándar, sin tablas/cuadros de texto, compatible con ATS (formato recomendado para postulación)
  • PDF: generado directamente con reportlab + fuente CJK incorporada (solo pip, sin necesidad de fuentes/bibliotecas del sistema); si reportlab no está instalado, genera automáticamente un HTML optimizado para impresión e indica "Abrir en el navegador y usar Ctrl+P para guardar como PDF"
  • El script no depende de ningún servicio remoto, se puede ejecutar localmente después de clonar

Estilos disponibles

  • cn_ats_a4_v1 (chino, predeterminado) / en_ats_a4_v1 (inglés); el idioma real lo determina meta.language en ResumeIR
  • Ver: python3 scripts/render_resume.py --list-templates
  • Para generar currículums bilingües o en inglés, consultar references/en-resume-conventions.md (banco de verbos de acción, prohibir foto/edad/estado civil, priorizar 1 página, fechas en inglés MMM YYYY, priorizar cuantificación)
  • Para roles tecnológicos en EE. UU. (SWE/PM/DS): se puede hacer referencia directa a los tres ejemplos renderizables en assets/examples/: en-US-software-engineer.json, en-US-product-manager.json, en-US-data-scientist.json (incluyen LinkedIn/GitHub, niveles de puesto en EE. UU., métricas tecnológicas estadounidenses como p99/QPS/SLA); cuando meta.language=en-US, la capa de renderizado aplica automáticamente títulos de sección en inglés y convierte las fechas ISO YYYY-MM a MMM YYYY

Índice de Recursos

Scripts Necesarios

  • scripts/parse_resume.py: Script de análisis de currículums, compatible con PDF/DOCX/TXT/MD
    • Parámetros: argumento posicional <ruta_archivo> (también compatible con --input-file <ruta>)
    • Salida: JSON {"text": "...", "format": "pdf|docx|txt", "pages": N, "success": true}; en caso de fallo, devuelve {"error": "...", "exit_code": N}
  • scripts/version_manager.py : Script de gestión de versiones
    • Parámetros: save/rename/compare/rollback + parámetros correspondientes
    • Salida: resultado de la operación de la versión
  • scripts/render_resume.py: Script de exportación local (DOCX/PDF/HTML, sin servicios externos)
    • Parámetros: --resume-ir <archivo JSON>, --output-formats docx,pdf,html, --output-dir, --file-name
    • Salida: archivo DOCX / PDF (o HTML como respaldo)

Referencias del Dominio

Ejemplos de Flujo de Conversación

Escenario 1: Generar currículum desde cero

Usuario: Ayúdame a crear un currículum
Agente: Claro, déjame ayudarte a crear tu currículum. Por favor, dime:
       1. ¿Cuál es tu puesto objetivo?
       2. ¿Cuál es tu situación laboral actual (empresa/puesto/años de experiencia)?
       ...

[Recopilación de información]

Agente: Se ha generado la primera versión del currículum. A continuación, mi análisis:
       [Informe de diagnóstico]

       Lista mínima de complementos (8 preguntas):
       1. Por favor, proporciona tus datos de contacto específicos (teléfono/correo)
       2. En tu primera experiencia laboral, ¿cuál es el valor de 【métrica】 que mencionaste?
       ...

Escenario 2: Optimizar currículum existente

Usuario: Ayúdame a optimizar este currículum [sube archivo]
Agente: [Analizando currículum] He extraído la siguiente información de tu currículum, por favor confírmala:
       Nombre: Zhang San
       Empresa más reciente: Empresa Tecnológica X
       Puesto más reciente: Product Manager
       Años de experiencia: 3-5 años

       ¿Tienes un JD objetivo? Si es así, pégalo.

[Si hay JD]

Agente: Optimización completada. El informe de diagnóstico es el siguiente:
       Puntuación total: 72/100

       Lista de problemas:
       [P0] La sección de experiencia laboral carece de indicadores cuantificables (grave)
             Sugerencia: cada bullet debe incluir números o porcentajes concretos
             Ejemplo de reescritura: "Responsable de la iteración del producto" → "Lideré 5 iteraciones del producto, lo que resultó en un aumento del 15% en la retención de usuarios"

       ...

       Lista de carencias (requisitos del JD que faltan en el currículum):
       1. Habilidad en SQL (el JD lo requiere explícitamente)
            Pregunta de complemento mínima: ¿Tienes experiencia usando SQL? ¿En qué contexto?

       [Generar currículum reescrito]

Escenario 3: Exportar archivo

Usuario: Exporta este currículum
Agente: Generando archivos DOCX y PDF... [llamando a render_resume.py]
       Archivos generados:
       - Zhang San-Product Manager-2024-01-15.docx
       - Zhang San-Product Manager-2024-01-15.pdf

Escenario 4: Comparar versiones

Usuario: Compara v1 y v2
Agente: [Llamando a version_manager.py compare]
       Diferencias principales:
       1. Experiencia laboral - Empresa Tecnológica X (2019-2022)
          v1: Responsable del diseño de productos y análisis de requisitos
          v2: Lideré 8 iteraciones del producto, optimizando mediante datos, lo que resultó en un aumento del 25% en la satisfacción del usuario

       2. Habilidades - primary
          v1: ["Diseño de productos", "Análisis de requisitos", "Gestión de proyectos"]
          v2: ["Diseño de productos", "Análisis de requisitos", "Gestión de proyectos", "Análisis de datos", "SQL", "Pruebas A/B"]

       Sugerencia: El contenido de la versión v2 es más completo, se recomienda usar la versión v2 para postularse.

Escenario 5: Revertir a una versión

Usuario: Revierte a v1
Agente: [Llamando a version_manager.py rollback]
       Se ha revertido a la versión v1 (Product Manager-2024-01-10-es)

Consideraciones

Plan de Contingencia para Fallos

  • Fallo en el análisis del currículum: solicitar al usuario que pegue texto plano; o que pegue por secciones ("educación/experiencia/proyecto")
  • Información faltante: usar 【Marcador de posición】 + lista mínima de complementos (≤8 preguntas)
  • JD demasiado largo: extraer solo las secciones de responsabilidades del puesto y requisitos, ignorar el resto
  • Contenido generado demasiado genérico: forzar que cada bullet incluya "resultado/impacto"; de lo contrario, marcarlo como problema P1 y dar un ejemplo de reescritura

Compatibilidad ATS (la restricción aplica al currículum "generado/exportado"; al analizar archivos subidos por el usuario, se puede leer normalmente el contenido de las tablas)

  • Usar títulos de sección estándar (Experiencia laboral, Educación, Habilidades, etc.)
  • Evitar el uso de tablas, cuadros de texto, iconos, imágenes
  • Diseño de una sola columna por defecto
  • Usar fuentes estándar (como Arial, Calibri)
  • Evitar el uso de caracteres especiales y elementos decorativos

Garantía de Calidad

  • Todos los bullets deben comenzar con un verbo de acción (como "Lideré", "Diseñé", "Implementé", "Optimicé", etc.)
  • Asegurar que cada bullet tenga un resultado o impacto claro
  • Evitar palabras debilitantes como "Responsable de", "Participé en"
  • Priorizar la voz activa, evitar la voz pasiva

Ejemplos de Uso

Ejemplo 1: Generar currículum desde cero (bilingüe)

  • Descripción de la función: ayudar al usuario a crear un currículum bilingüe (chino e inglés) desde cero
  • Modo de ejecución: diálogo con el agente + guardar versión con script
  • Parámetros clave: language=zh-CN/en-US, target_title, target_level
  • Pasos:
    1. Recopilar información básica y experiencia
    2. Generar ResumeIR en chino
    3. Generar ResumeIR en inglés (traducción automática)
    4. Guardar como dos versiones (versión en chino y versión en inglés)

Ejemplo 2: Optimizar currículum basado en JD

  • Descripción de la función: optimizar el contenido del currículum para un JD específico
  • Modo de ejecución: análisis del agente + script de análisis
  • Parámetros clave: texto del JD, archivo del currículum original
  • Pasos:
    1. Analizar el currículum original
    2. Analizar los requisitos del JD
    3. Comparar para identificar carencias
    4. Reescribir el currículum para cubrir las palabras clave del JD
    5. Generar comparación y sugerencias de optimización

Ejemplo 3: Gestión de múltiples versiones

  • Descripción de la función: crear múltiples versiones del currículum, comparar y seleccionar la mejor
  • Modo de ejecución: gestión de versiones con scripts
  • Parámetros clave: version_name, resume_ir
  • Pasos:
    1. Guardar la versión v1
    2. Modificar y guardar la versión v2
    3. Comparar v1 y v2
    4. Revertir a la mejor versión
    5. Exportar la versión final

Skills relacionados