Mejorando Perfiles de Autor
Esta habilidad completa los campos faltantes del perfil de autor (biografía, avatar, sitio web, redes sociales) mediante investigación web.
Resumen del Flujo de Trabajo
Fase 1: Identificación del Autor
└─ Encontrar y validar el archivo del autor
Fase 2: Investigación en Paralelo (solo campos faltantes)
├─ Agente WebSearch 1: biografía/antecedentes
├─ Agente WebSearch 2: URL del avatar
└─ Agente WebSearch 3: sitio web + redes sociales
Fase 3: Revisión del Usuario (PUNTO DE CONTROL OBLIGATORIO)
└─ Presentar hallazgos, esperar aprobación
Fase 4: Guardar Autor Mejorado
└─ Actualizar campos del frontmatter
Fase 5: Control de Calidad
└─ Ejecutar pnpm lint:fix && pnpm typecheck
Fase 1: Identificación del Autor
1.1 Encontrar el Archivo del Autor
Acepta un slug, nombre o nombre parcial del autor como argumento:
- Intentar coincidencia exacta del slug primero: Verificar si existe
content/authors/{slug}.md(convertir espacios a guiones, minúsculas) - Si no hay coincidencia exacta: Usar Grep para buscar el nombre en los archivos de autor:
Patrón Grep: "name:.*{término de búsqueda}" con glob: "content/authors/*.md"
Resultados:
- Una coincidencia → continuar con ese archivo
- Múltiples coincidencias → listar opciones para que el usuario elija
- Sin coincidencias → listar autores disponibles
1.2 Identificar Campos Faltantes
Leer el archivo del autor y verificar qué campos faltan o están vacíos:
Campos obligatorios (siempre presentes):
nameslug
Campos opcionales a mejorar:
bio- Antecedentes profesionales y experienciaavatar- URL de la foto de perfilwebsite- URL del sitio web personalsocials.twitter- Cuenta de Twitter/Xsocials.github- Nombre de usuario de GitHubsocials.linkedin- Nombre de usuario de LinkedInsocials.youtube- Canal de YouTube
Un campo está "faltante" si:
- No existe en el frontmatter
- Existe pero está vacío (
""onull)
Si todos los campos ya están completos, informar al usuario y ofrecer actualizar campos específicos.
Fase 2: Investigación en Paralelo
Lanzar hasta 3 agentes WebSearch en paralelo según los campos que falten:
**Agente 1 - Biografía/Antecedentes:**
Herramienta Task con subagent_type: "general-purpose"
prompt: "Usa WebSearch para encontrar información de antecedentes profesionales de [Nombre del Autor].
Consulta: '[Nombre del Autor]' biografía antecedentes experiencia
Extrae: Cargo, empresa, áreas de especialización, proyectos notables.
Devuelve: Una biografía profesional de 1-2 oraciones."
**Agente 2 - URL del Avatar:**
Herramienta Task con subagent_type: "general-purpose"
prompt: "Usa WebSearch para encontrar una URL de foto de perfil para [Nombre del Autor].
Consulta: '[Nombre del Autor]' site:github.com OR site:twitter.com
Extrae: Nombre de usuario de GitHub o Twitter para construir la URL del avatar.
Devuelve: URL del avatar (preferir formato GitHub: https://github.com/{usuario}.png)"
**Agente 3 - Sitio Web y Redes Sociales:**
Herramienta Task con subagent_type: "general-purpose"
prompt: "Usa WebSearch para encontrar perfiles de redes sociales de [Nombre del Autor].
Consulta: '[Nombre del Autor]' twitter github linkedin youtube
Extrae: Sitio web personal, cuenta de Twitter, nombre de usuario de GitHub, perfil de LinkedIn, canal de YouTube.
Devuelve: Lista de perfiles encontrados con URLs/nombres de usuario."
Solo lanzar agentes para campos faltantes. Si la biografía ya existe, saltar el Agente 1.
Recolectar todos los resultados mediante TaskOutput (bloqueante).
Fase 3: Revisión del Usuario (PUNTO DE CONTROL OBLIGATORIO)
Este es un paso de aprobación obligatorio. Presentar los cambios propuestos antes de guardar.
3.1 Presentar Cambios
Mostrar las actualizaciones propuestas como una tabla comparativa:
## Actualizaciones Propuestas para [Nombre del Autor]
| Campo | Actual | Propuesto |
|-------|--------|-----------|
| bio | (vacío) | "Fundador de X, creador de Y..." |
| avatar | (vacío) | "https://github.com/usuario.png" |
| website | (vacío) | "https://ejemplo.com" |
| socials.twitter | (vacío) | "usuario" |
| socials.github | (vacío) | "usuario" |
| socials.linkedin | (vacío) | "usuario" |
| socials.youtube | (vacío) | (no encontrado) |
3.2 Solicitar Aprobación
Usar la herramienta AskUserQuestion:
question: "¿Guardar estos cambios en el perfil del autor?"
header: "Revisión"
multiSelect: false
options:
- label: "Guardar"
description: "Actualizar el archivo del autor con estos valores"
- label: "Editar"
description: "Indícame qué cambiar"
- label: "Cancelar"
description: "No modificar el archivo"
3.3 Manejar la Respuesta
- Guardar: Continuar a la Fase 4
- Editar: Aplicar los comentarios del usuario, mostrar vista previa actualizada
- Cancelar: Salir sin realizar cambios
NO proceder a la Fase 4 sin la aprobación explícita del usuario.
Fase 4: Guardar Autor Mejorado
4.1 Actualizar Frontmatter
Usar la herramienta Edit para actualizar solo los campos aprobados:
Antes:
---
name: "Juan Pérez"
slug: "juan-perez"
bio: ""
avatar: ""
website: ""
socials:
twitter: ""
github: ""
linkedin: ""
youtube: ""
---
Después:
---
name: "Juan Pérez"
slug: "juan-perez"
bio: "Ingeniero de software especializado en sistemas distribuidos..."
avatar: "https://github.com/juanperez.png"
website: "https://juanperez.dev"
socials:
twitter: "juanperez"
github: "juanperez"
linkedin: "juanperez"
youtube: ""
---
4.2 Conservar Valores Existentes
Crítico: Nunca sobrescribir valores no vacíos existentes a menos que se solicite explícitamente:
- Mantener
nameyslugexistentes sin cambios - Solo actualizar campos que estaban vacíos/faltantes
- Preservar cualquier campo personalizado adicional
4.3 Confirmación
Informar al usuario:
Actualizado: content/authors/{slug}.md
- bio: añadido
- avatar: añadido
- website: añadido
- socials.twitter: añadido
- socials.github: añadido
Fase 5: Control de Calidad
Ejecutar linter y verificación de tipos para detectar problemas:
pnpm lint:fix && pnpm typecheck
Si se encuentran errores, corregirlos antes de completar la tarea.
Recuperación de Errores
| Error | Recuperación |
|---|---|
| Autor no encontrado | Listar autores disponibles en content/authors/ |
| Sin campos faltantes | Informar al usuario, ofrecer actualizar campos específicos |
| WebSearch falla | Intentar patrones de consulta alternativos |
| El usuario rechaza cambios | Permitir edición o cancelación |
| No se pudo encontrar información | Marcar campo como "(no encontrado)", continuar con los demás |
Lista de Verificación de Calidad
Antes de guardar, verificar:
- El archivo del autor existe en
content/authors/ - Solo se están actualizando campos vacíos/faltantes
- La biografía tiene 1-2 oraciones, tono profesional
- La URL del avatar es válida (preferir formato GitHub)
- Los identificadores de redes sociales son solo nombres de usuario (sin URLs)
- Se conservan los valores no vacíos existentes
- El usuario aprobó explícitamente los cambios