CommunityRedacción y edicióngithub.com

atokim4/freelance-proposal-lint (lint de propuestas freelance)

Escribe o revisa una propuesta freelance, oferta o primer mensaje para cualquier plataforma (Upwork, Fiverr, Freelancer.com, PeoplePerHour, Contra, Guru) para que suene a humano, mantenga el contacto en la plataforma y solo afirme lo que el usuario pueda respaldar.

¿Qué es freelance-proposal-lint (lint de propuestas freelance)?

Esta skill de agente AI está diseñada para freelancers que necesitan redactar o revisar propuestas, ofertas o primeros mensajes en plataformas como Upwork, Fiverr, Freelancer.com, PeoplePerHour, Contra y Guru. Su objetivo principal es garantizar que la propuesta suene natural y humana, evitando frases genéricas de IA, y que solo incluya afirmaciones respaldadas por un archivo de hechos del usuario (facts.md). Incluye un linter Node.js sin dependencias externas que verifica el cumplimiento de reglas específicas: detecta frases de plantilla, guiones largos, placeholders, correos electrónicos, números de teléfono, enlaces, palabras clave no respaldadas, y controla la longitud del texto. También permite personalizar la configuración mediante un archivo `.cover-lint.json`. La skill se activa cuando el usuario pide escribir o acortar una propuesta, o pregunta si su texto suena a IA. Se integra con agentes como Claude Code, Cursor y Codex, ejecutando el linter con Node 20+ desde la ruta completa del directorio de skills.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/atokim4/cover-letter-lint/tree/HEAD/skills/freelance-proposal-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

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:

  1. 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.
  2. 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.
  3. El plan en una o dos oraciones, con horas y un precio si el usuario dio una tarifa.
  4. Una pregunta, aquella cuya respuesta cambie el alcance o el precio.
  5. 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.

Individual skills in this repo

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

Skills relacionados