agentleFS
AstorgatoAstorgato/asistente-cv-linkedin/.claude/skills/importar-cvs/SKILL.md

importar-cvs

Skill0 starsChanged 2 months agoMITView on GitHub

Lee los CVs que la persona dejó en curriculums/ (y el PDF de su LinkedIn, si lo agregó), extrae cada afirmación con su procedencia hacia datos/hechos.yaml y marca las contradicciones entre versiones para resolverlas con ella. Úsalo la primera vez, o cada vez que llegue un CV nuevo.

The file

Files
SKILL.md

Importar CVs a la fuente de verdad

El objetivo no es escribir un CV nuevo: es construir datos/hechos.yaml, la única fuente de verdad. Los CVs que la persona subió son material de origen: se leen, no se corrigen ni se borran.

0. Preparar

  • Si no existe datos/hechos.yaml: python scripts/iniciar.py.
  • Lista lo que hay en curriculums/ (incluidas subcarpetas).
  • DOCX, TXT y MD: python scripts/extraer.py y lee los .txt que deja en salidas/texto/. Fíjate en la línea [ENCABEZADO / PIE DE PÁGINA]: contacto ahí es un problema de formato que hay que avisar.
  • PDF: léelo directo con Read (con pages si tiene más de 10 páginas). Si sale vacío o como imagen, es un escaneo: avisa que un ATS tampoco lo va a poder leer.
  • Si hay PDF del perfil de LinkedIn o de sus aptitudes, es una fuente más (linkedin-pdf). Las aptitudes van además a datos/linkedin-aptitudes.yaml.
  • Si hechos.yaml ya tiene datos (segunda pasada), no lo rehagas: registra la fuente nueva y compárala contra lo que ya está.

1. Un código por fuente

Registra cada documento en meta.fuentes:

meta:
  fuentes:
    cv-2023: {archivo: "CV 2023.pdf", fecha: 2023-11}
    cv-ia: {archivo: "CV mejorado.pdf", fecha: 2026-03, nota: "reescrito con un chatbot"}

Pregunta la fecha aproximada de cada CV si no se deduce, y si alguno fue reescrito con IA o por otra persona: esas versiones son las que más inflan. La fecha sirve para ordenar, no para decidir quién tiene razón.

2. Extraer sin mejorar

  • Copia cada afirmación tal como está. No mejores la redacción, no agregues cifras, no completes logros. Reformular viene después, y solo si la persona quiere.
  • Cada entrada lleva fuentes: [...] con todos los códigos donde aparece, y estado: por_confirmar. Nada entra como confirmado sin que la persona lo diga: que tres CVs coincidan no lo prueba, porque los CVs se copian entre sí.
  • La misma afirmación en varios CVs con distinta redacción es una entrada con varias fuentes. Si difieren en sustancia (una cifra, un alcance, una tecnología), es conflicto.
  • Habilidades: cobertura = en cuántos CVs aparece. Si solo está en LinkedIn o en el temario de un curso, cobertura: 0.
  • Fechas como AAAA-MM. Cargo vigente: fin: actualidad. Si no se sabe, null: el CV lo va a omitir, y eso es lo correcto.
  • Educación: registra titulo_profesional: true|false. Si no está claro, pregúntalo: grado vs título es de las confusiones más caras.

Formato de cada sección: docs/esquema-hechos.md. Ejemplo completo: ejemplo/hechos.yaml.

3. Detectar contradicciones

Compara campo por campo entre fuentes. Lo típico:

QuéEjemplo
Fechas distintas para el mismo cargoagosto en un CV, septiembre en otro
El mismo logro con distinto peso técnico"dashboard en Power BI" vs "microservicios de visualización"
Una cifra que cambia"~40 sucursales" vs "más de 60"
Grado presentado como título"Licenciada en Ciencias de la Ingeniería" vs "Ingeniera Civil Industrial"
Formación presentada como certificaciónun bootcamp listado como "certificado"
Nivel de idioma distinto"B1" vs "inglés avanzado"
El mismo trabajo contado dos vecescomo experiencia y otra vez como proyecto

Cada contradicción es una entrada con estado: conflicto, un texto neutro y los valores de cada fuente:

- texto: Mantuve el reporte semanal de ventas de las sucursales.
  estado: conflicto
  valores: {cv-2025: "~40 sucursales", cv-ia: "más de 60 sucursales"}
  fuentes: [cv-2025, cv-ia]

No elijas tú. Y ausencia no es contradicción: un cargo que falta en un CV puede ser una omisión deliberada (un empleo de soporte fuera de un CV técnico). Pregunta; si fue deliberado, se registra como politica_de_uso, no como conflicto.

4. Resolver con la persona

  • De a un bloque: identidad → experiencia → educación → certificaciones → habilidades → idiomas. No dispares 20 preguntas juntas.
  • Usa AskUserQuestion cuando los valores en conflicto son acotados.
  • Al resolver: estado: confirmado, agrega usuario a fuentes, resuelto: AAAA-MM-DD y una nota corta del porqué.
  • La versión perdedora no se borra. Queda como entrada aparte con estado: descartado y motivo, para que ninguna reescritura futura la reintroduzca. Si era una forma de nombrar algo (un grado, una certificación, un logro inflado), va además a redacciones_prohibidas.
  • Por cada término técnico avanzado, pregunta: ¿lo puedes defender en una entrevista técnica? Lo que no, va a no_defendibles (en minúsculas y sin tildes). Los CVs reescritos con IA suelen agregar patrones que suenan bien y que la persona no puede sostener.
  • Por cada cifra: ¿de dónde sale? Sin respaldo, se propone redactar sin la cifra y la versión con cifra queda descartado.
  • Proyectos con datasets de tutorial (Iris, Titanic, MNIST): sugiere descartarlos si hay proyectos propios. No distinguen a nadie.
  • Si la persona no sabe algo, déjalo por_confirmar y sigue. Un perfil a medias sirve; un interrogatorio abandonado, no.
  • Escribe a disco a medida que avanzas, no al final.

5. Cerrar

  1. python scripts/validar.py tiene que terminar sin errores. Los avisos, revísalos con la persona.
  2. Audita cada CV viejo contra los hechos ya resueltos: python scripts/validar.py --cv curriculums/<archivo>. Marca lo que no se puede trazar, lo que repite algo descartado, las redacciones prohibidas y los problemas de formato. Sirve para saber qué versiones hay que dejar de enviar. Es heurístico: revisa cada marca antes de afirmarla.
  3. Resume: cuántas afirmaciones se cargaron, cuántas quedaron confirmadas y cuántas por confirmar, qué conflictos siguen abiertos y qué CVs viejos tienen errores.
  4. Siguiente paso: /perfilar (si no se ha hecho) o /cv.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.