Lint de propuestas freelance
Objetivo: una oferta corta que el cliente lea hasta el final y responda, en cualquier plataforma donde esté el trabajo, 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, sin red). Es el mismo archivo que en la skill cover-letter-lint de este repositorio, incluido aquí para que esta skill se instale de forma independiente. Ejecútalo con su ruta completa: node ${CLAUDE_SKILL_DIR}/scripts/lint-cover.mjs en Claude Code, o la carpeta de la skill en otros agentes, por ejemplo node .claude/skills/freelance-proposal-lint/scripts/lint-cover.mjs.
1. Hechos primero
Busca facts.md, me/facts.md o un archivo .cover-lint.json con una ruta "facts". Las afirmaciones solo provienen de ahí. Si no se encuentra: ofrece completar templates/facts.md de la carpeta de esta skill con el usuario (habilidades, roles, historial exactamente como aparece en su perfil, enlaces de prueba, frases que nunca debe usar). No inventes nada de eso. Si el usuario se niega, ejecuta el linter sin --facts e indica que las afirmaciones no fueron verificadas.
2. Adapta el formato al sitio
Pregunta qué plataforma si el usuario no lo dijo. Luego:
- Upwork: una carta de presentación de 50-90 palabras más las respuestas a las preguntas de selección. Responde cada pregunta de selección directamente, en el orden en que se hacen.
- Freelancer.com, PeoplePerHour, Guru: las ofertas se comparan una al lado de la otra con un precio y un tiempo de entrega. Pon el enfoque concreto en la primera línea y asegúrate de que el precio y los días en el texto coincidan con los números que el usuario ingresa en el formulario de oferta.
- Oferta personalizada o brief de Fiverr: el comprador eligió una categoría, así que abre con su entregable exacto, luego lo que incluye la oferta y cuántas revisiones.
- Contra o consulta directa: trátalo como un primer mensaje; ejecuta el linter con
--mode message.
Refleja al cliente: tres líneas casuales reciben tres líneas casuales de vuelta, otro idioma recibe ese idioma.
3. Escribe
Oraciones sencillas, sin viñetas ni encabezados:
- Un saludo al estilo del cliente, luego un detalle concreto de SU publicación y qué lo causa probablemente o cómo lo abordarías. Nunca repitas la publicación.
- Una línea de prueba del archivo de hechos que realmente coincida. Un proyecto personal se llama proyecto personal. Si no hay una coincidencia honesta, omite la prueba.
- El plan en una o dos oraciones, con horas y un precio si el usuario dio una tarifa.
- Una pregunta, aquella cuya respuesta cambie el alcance o el precio.
- El nombre de pila del usuario en su propia línea.
4. Lint y corrección
node ${CLAUDE_SKILL_DIR}/scripts/lint-cover.mjs --facts facts.md --job job.md bid.md
- lee de stdin, --mode message elimina el rango de palabras para respuestas, --json da salida en formato máquina. Corrige cada error y vuelve a ejecutar hasta que salga con código 0. También corrige las advertencias a menos que haya una razón, y explica la razón.
Lo que falla en una oferta (errores): frases de plantilla ("Espero que este mensaje te encuentre bien", "perfecto", "Estoy emocionado de"), contrastes "no solo X, sino Y", guiones largos, placeholders como [Tu Nombre], correos electrónicos, números de teléfono o "escríbeme a WhatsApp" (la mayoría de las plataformas prohíben mover el contacto fuera del sitio antes de un contrato), enlaces y "N años" que el archivo de hechos no respalde, frases bajo "Nunca digas", y más de 90 palabras en modo cover. Las advertencias cubren nombres técnicos que no están ni en los hechos ni en la publicación, una pregunta faltante o una segunda pregunta, listas, "Estimado Señor", "!!", emojis y oraciones muy largas. Los ajustes por proyecto van en .cover-lint.json:
{"facts": "facts.md", "maxWords": 90, "minWords": 50, "extraPhrases": [], "allowPhrases": [], "disable": []}.
Nunca edites el archivo de hechos para hacer que una afirmación pase sin que el usuario diga que es cierta.
5. Entrégalo
Muestra la oferta, el precio y el tiempo de entrega que indica, y la última línea del linter. Luego léela una vez más contra el archivo de hechos tú mismo: el linter verifica enlaces, años y nombres técnicos, no cada oración. El usuario la envía; nunca envíes nada por ellos.