CommunityRedacción y edicióngithub.com

atokim4/cover-letter-lint

Escribe o revisa una carta de presentación, propuesta u oferta freelance para que suene natural y solo incluya afirmaciones verificables. Se activa cuando el usuario pide una carta para plataformas como Upwork, Fiverr, PeoplePerHour, Freelancer.com o bolsas de trabajo, solicita revisar o mejorar una, o pregunta si suena a IA. Incluye un linter en Node que detecta frases hechas de IA, guiones largos, placeholders, contactos fuera de plataforma, el rango de 50–90 palabras, la pregunta de cierre y afirmaciones sin respaldo.

¿Qué es cover-letter-lint?

Esta skill permite generar o corregir cartas de presentación freelance de forma que suenen humanas, naturales y creíbles, evitando los patrones típicos de inteligencia artificial que los clientes detectan al instante. Es compatible con Claude Code y otros agentes que usen el mismo sistema de skills; se instala como skill estándar y usa un script Node (sin dependencias externas) que analiza el texto contra una lista extensa de reglas: frases plantilla, guiones largos, placeholders, ofertas de contacto fuera de la plataforma, afirmaciones no respaldadas por el usuario y más. El flujo de trabajo típico incluye localizar un archivo de hechos (`facts.md` o similar) que contiene la información real del usuario (habilidades, proyectos, enlaces de portafolio), escribir la carta siguiendo una estructura probada (saludo personalizado, detalle concreto del cliente, una prueba real, plan con horas y precio, y una pregunta clave), y luego ejecutar el linter repetidamente hasta que no queden errores. Todo el proceso está diseñado para que el usuario mantenga el control final: nunca se envía la carta automáticamente, y las afirmaciones solo provienen de sus datos reales.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/atokim4/cover-letter-lint/tree/HEAD/skills/cover-letter-lint

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

Linter de cartas de presentación

Objetivo: una carta de presentación de 50–90 palabras que un cliente ocupado lea hasta el final y responda, con cada afirmación respaldada por el archivo de hechos del usuario.

El linter es scripts/lint-cover.mjs en la carpeta de esta skill (Node 20+, sin dependencias). Llámalo con su ruta completa: node ${CLAUDE_SKILL_DIR}/scripts/lint-cover.mjs en Claude Code (también para instalación como plugin). Otros agentes no completan esa variable, así que usa la carpeta, por ejemplo: node .claude/skills/cover-letter-lint/scripts/lint-cover.mjs para una instalación en el proyecto o node ~/.claude/skills/cover-letter-lint/scripts/lint-cover.mjs para una instalación global.

1. Encontrar el archivo de hechos

Busca facts.md, me/facts.md o un .cover-lint.json con una ruta "facts" en el proyecto actual.

  • Encontrado: léelo. Las afirmaciones solo vienen de ahí.
  • No encontrado: ofrece crear facts.md a partir de templates/facts.md en la carpeta de esta skill, y complétalo con los datos del usuario (habilidades, roles, historial, enlaces de prueba, cosas que nunca decir). No inventes nada. Si el usuario lo rechaza, ejecuta el linter sin --facts e indica que las afirmaciones no se verificaron.

2. Escribir (omitir si el usuario ya trajo su borrador)

Guarda la oferta de trabajo en un archivo si el usuario la pegó (por ejemplo, job.md). Luego escribe, en oraciones simples sin viñetas ni encabezados:

  1. Un saludo en el estilo del cliente, luego un detalle concreto de SU oferta (el error, el stack, la fecha límite) y qué lo causa probablemente o cómo lo abordarías. Nunca repitas la oferta.
  2. Una línea de prueba del archivo de hechos que realmente coincida (un trabajo similar, un rol, un enlace de demostración). Un proyecto personal se llama proyecto personal. Sin coincidencia honesta: omite la prueba.
  3. El plan en una o dos oraciones, con horas y precio si el usuario te dio tarifas.
  4. Una pregunta, aquella cuya respuesta cambie el alcance o el precio.
  5. El nombre de pila del usuario en su propia línea.

Refleja la oferta: tres líneas informales reciben tres líneas informales, otro idioma recibe ese idioma.

3. Revisar y corregir

node ${CLAUDE_SKILL_DIR}/scripts/lint-cover.mjs --facts facts.md --job job.md proposal.md

(- lee de la entrada estándar; --mode message para respuestas de cliente, que no tienen rango de palabras; --json para salida en formato máquina). Corrige cada error y vuelve a ejecutar hasta que termine con código 0. Advertencias: corrígelas a menos que haya una razón, y explica la razón. Para unlisted-skill, elimina la afirmación o pregunta al usuario si desea agregar la habilidad al archivo de hechos. Nunca edites el archivo de hechos para que una afirmación pase sin que el usuario diga que es cierta.

ReglaNivelQué detecta
ai-phraseerror~75 frases plantilla: "Espero que este mensaje te encuentre bien", "sin fisuras", "Estoy emocionado de", "la clave es"…
not-x-but-yerrorContrastes del estilo "Esto no es solo X, sino Y"
dasherrorGuiones largos y guiones usados como tales
placeholdererror[Tu Nombre], {{nombre}}, <cliente>, TODO, lorem ipsum
off-platformerrorCorreos electrónicos, números de teléfono, "escríbeme por WhatsApp", pago fuera del marketplace
unbacked-claimerrorEnlaces y "N años" que no están en el archivo de hechos
never-sayerrorFrases listadas bajo "Nunca decir" en el archivo de hechos
word-counterror / avisoMás de 90 palabras (error), menos de 50 (aviso) en modo carta
unlisted-skillavisoUn framework o servicio que nombra la carta y que no está ni en el archivo de hechos ni en la oferta
questionavisoSin pregunta, o más de una
list, greeting, exclamation, emoji, long-sentence, i-startavisoListas, "Estimado Sr.", "!!", emojis, oraciones de 35+ palabras, demasiadas oraciones que empiezan con "Yo"

Los ajustes por proyecto van en .cover-lint.json (todas las claves opcionales): {"facts": "facts.md", "maxWords": 90, "minWords": 50, "extraPhrases": [], "allowPhrases": [], "disable": []}.

4. Entregar

Muestra la carta y la última línea del linter. Indica el precio y la pregunta que elegiste para que el usuario pueda cambiarlos. Luego revísala una vez más contra el archivo de hechos tú mismo: el linter verifica enlaces, años y nombres de tecnologías, no cada oración. El usuario la envía; nunca envíes nada por él.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills relacionados