Communitygithub.com

Olexan-art/page-text-to-prompts

Divide el texto de una página web en bloques (hero, beneficios, cómo funciona, testimonios, precios, FAQ, CTA y otros) y escribe 1 prompt reutilizable por bloque. Cada prompt escribe el mismo tipo de texto para un producto diferente e incluye un ejemplo verificado. Solo texto; el diseño se ignora. Úsalo cuando el usuario dé una URL y pida desglosar o realizar ingeniería inversa del texto de una landing page, crear prompts por sección, escribir un bloque similar para su sitio o ver cómo está escrita la página de un competidor.

¿Qué es page-text-to-prompts?

Esta habilidad para agentes de IA (como Claude Code, Cursor, Codex u otros) permite analizar el texto de cualquier página web pública y descomponerlo en bloques semánticos (hero, beneficios, cómo funciona, testimonios, precios, FAQ, CTA, etc.). A partir de cada bloque, el agente genera un prompt reutilizable y un ejemplo verificado para que el usuario pueda crear contenido similar para su propio producto. Funciona exclusivamente con texto: no procesa imágenes, diseños ni requiere inicio de sesión. Es útil para ingeniería inversa de copywriting, análisis de competidores o generación de borradores de landing pages. Utiliza scripts Node.js (requiere Node 22) y no necesita API keys, siguiendo reglas estrictas como evitar plagio, nombres de marca y contenido en ruso.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Olexan-art/page-text-to-prompts/tree/HEAD/skills/page-text-to-prompts

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Versión 1.008.

Page text to prompts

Propósito

Los scripts leen 1 página web y dividen su texto en bloques candidatos. Escribes un breve archivo de juicio; la compilación lo convierte en un prompt y un ejemplo medido por bloque. Solo texto: 1 página pública, escritorio, sin inicio de sesión, sin evitar captchas, sin texto en imágenes.

Requisitos

  • Node 22 o posterior. Sin instalación, sin API key. Ejecuta los scripts en dist/ desde la carpeta de esta habilidad.
  • Acceso a red desde el shell.

Reglas

  • R1. No le preguntes nada al usuario primero. Una URL es suficiente.
  • R2. Palabras propias. Ninguna línea que escribas puede repetir 6 palabras consecutivas de la página, ignorando mayúsculas, minúsculas y puntuación (overlap). Esto cubre cada campo y cada ejemplo.
  • R3. No menciones la marca del sitio: nombre de dominio, og:site_name (brand). No uses ningún nombre de la página.
  • R4. Escribe analysis.md y cada archivo de entrada con la herramienta de escritura de archivos, nunca con un heredoc del shell. Si la herramienta se niega (algunos entornos rechazan archivos .md de un subagente), escribe el archivo con otro nombre y cópialo con cp.
  • R5. Nunca rehagas el trabajo de los scripts manualmente. No cuentes palabras ni caracteres. No escribas prompts.
  • R6. Nunca inventes hechos. Nunca escribas texto en ruso. Los scripts no llaman a ningún modelo.

Procedimiento

Todas las rutas a continuación pueden apuntar a cualquier lugar con permisos de escritura; work/ es el valor predeterminado, no una regla.

  1. Leer (script). node dist/read.mjs <url> --out work/page.json
    • Opciones: --no-render (solo HTML fuente), --lang <code> (idioma del borrador).
    • Resultado: en work/, brief.md (léelo), analysis.md (el borrador, 1 encabezado por candidato con un tipo sugerido) y page.json (para la compilación; no lo abras). Si analysis.md existe, el borrador va a analysis.draft.md.
    • brief.md tiene 1 línea por elemento: tipo, recuento de palabras, estado (js_only, collapsed, not_in_a11y, o ninguno para ok), texto, agrupado por candidato bNN. [g3#2] es la tarjeta 2 del grupo g3.
    • Tiempo: 5 a 30 segundos. El renderizado se detiene después de 45 segundos y la lectura continúa desde el HTML.
    • En caso de fallo: REFUSED <code> (código de salida 2): detente e informa al usuario (ver Códigos de rechazo). Si los scripts no pueden ejecutarse (sin Node 22, sin shell, sin red), informa al usuario en 1 línea y ofrece la ruta de página guardada.
  2. Rellenar work/analysis.md (juicio). Consulta la siguiente sección. Escribe en inglés, o en el idioma que el usuario pidió, con su código en language:.
  3. Compilar (script). node dist/build.mjs work/page.json work/analysis.md --html work/report.html --md work/page-prompts.md --json work/page-prompts.json
    • Resultado: los 3 archivos y checks: 5 of 5 passed. Los ejemplos fuera de su rango son solo advertencias.
    • En caso de fallo: REFUSED enumera cada problema con su verificación: overlap (R2), brand (R3), volume (sin rango de palabras), variables (variable {name} no declarada), blocks (candidato faltante, desconocido o usado dos veces), schema (campo faltante o valor no permitido), o una línea que no se puede leer. Corrige solo las líneas listadas y ejecuta la compilación de nuevo.

analysis.md

Toma los recuentos de palabras de brief.md y escribe rangos alrededor de ellos. Omite los rangos de caracteres.

language: en
example_product: una aplicación ficticia de reservas para pequeños estudios de pilates
page_type: landing SaaS
audience: propietarios de pequeños estudios que toman reservas por chat
awareness: comparing_solutions
tone: profesional, cálido; formalidad 2; you
promise: {product} le da a {audience} {main_benefit} sin {pain}.
logic: resultado y primer paso primero, luego prueba, los pasos antes de los precios
threads:
- la promesa de no más llamadas telefónicas se repite en el hero, los pasos y el cierre

## p01 hero | Hero | b01
role: decir en cinco segundos qué cambia para el lector, y ofrecer el primer paso
- eyebrow | 3-5 | el cambio principal para el lector | No más llamadas de reserva
- h1 "Headline" | 7-11 | el resultado para {audience}, sin el nombre del producto | Los clientes reservan un reformer, y tú te quedas con la clase
- button | 2-4 | verbo + objeto, la acción {cta_action} | Configurar reservas
- risk_line | 5-8 | {risk_remover} | Gratis para empezar, cancela en cualquier momento
techniques:
- Mantén el nombre de {product} fuera del titular; aparece por primera vez en el subtitular.
tone: profesional, cálido; you
avoid: "innovador"; una pregunta como titular

## p07 pricing | Pricing | b07
role: ayudar al lector a elegir un plan y ver que el precio se ajusta al tamaño del estudio
- h2 | 4-8 | el precio vinculado al tamaño del lector | Paga por el tamaño que eres
- 3 x plan "Plan":
  - h3 | 1-3 | el tamaño del estudio | Sala única
  - price | 1-3 | {plan_n} | [precio] / mes
  - items 3 | 2-6 | lo que está incluido, lo más importante primero | Reservas autogestionadas / Recordatorios para clientes / Pago con tarjeta
techniques:
- Nombra los planes según el tamaño del estudio, no según niveles como básico o profesional.

Valores permitidos (la compilación rechaza otros):

  • awareness: unaware, problem_aware, comparing_solutions, product_aware, ready_to_buy.
  • Tipo de bloque: hero, social_proof_logos, problem, solution, features, benefits, how_it_works, use_cases, testimonials, case_study, stats, comparison, pricing, faq, guarantee, about, team, cta, lead_form, newsletter, other. other necesita una línea reason:.
  • formality: 1 dígito, de 1 a 5 (el informe muestra "N of 5"; no se rechaza).
  • language: un código ISO; uk genera prompts en ucraniano, cualquier otro código prompts en inglés.
  • page_type: texto libre.
  • Variables: product, category, audience, language, pain, pain_n, main_benefit, benefit_n, feature_n, step_n, use_case_n, alternative, objection_n, cta_action; hechos risk_remover, outcome_number, customer_count, customer_n, testimonial_n, plan_n, guarantee, deadline. Declara una nueva bajo vars: como - name: lo que va, con [fact] para un hecho.

Obligatorio: language, example_product, page_type, audience, awareness, promise, logic; por bloque un tipo, un nombre, role, 1 o más elementos, 1 o más técnicas.

Formatos de línea:

  • Elemento: code "Label" | words | must | example. must se convierte en esa línea del prompt.
  • Grupo: N x code "Label": con hijos indentados; el ejemplo es 1 tarjeta. Los grupos no se anidan.
  • Lista: items N; separa los elementos de ejemplo con /.
  • Unir candidatos: | b03 b04 en el encabezado. Eliminar uno: drop: b10 <reason> cerca de la parte superior.

Reglas que se incumplen con más frecuencia:

  • 1 bloque, 1 trabajo. Omite el texto decorativo (etiquetas de widgets, contadores).
  • Cada candidato va exactamente en 1 bloque o se elimina. Un candidato no se puede dividir.
  • Un candidato muy grande (por ejemplo, un artículo de 1400 palabras con muchas subsecciones) sigue siendo 1 bloque: escribe sus subsecciones repetidas como 1 grupo, por ejemplo 5 x section "Section": con h3 y text. Usa el tipo más cercano, o other.
  • Las técnicas son instrucciones, no etiquetas: no "usa PAS" sino "menciona el problema en 1 oración, su costo en la segunda, {product} en la tercera". Solo lo que hace el texto.
  • El ejemplo es el bloque para 1 producto ficticio. Cerca del rango es suficiente.

Verificación

  • Cada candidato está en 1 bloque o eliminado.
  • La compilación final no imprimió ningún REFUSED.
  • work/report.html existe.

Mostrar el informe

  • Si el usuario o quien lo llamó dijo que no publique ni abra nada, detente cuando exista report.html y proporciona su ruta.
  • De lo contrario, publica report.html si esta sesión puede publicar HTML; si no, proporciona su ruta absoluta.
  • El informe se abre en inglés con un interruptor EN / UK; #lang=uk lo abre en ucraniano.

Resumen del chat

  • El número de bloques, el esqueleto, 1 o 2 técnicas útiles.
  • Notas de visibilidad que importan: solo texto después de JavaScript, respuestas FAQ plegadas.
  • No pegues cada prompt. Si el usuario preguntó por 1 bloque, muestra su prompt y ejemplo.
  • Di una vez: los bloques y la redacción son tu interpretación; las capas, los recuentos y las comprobaciones son de los scripts.

Códigos de rechazo

Ruta de página guardada: node dist/read.mjs --file saved.html --url <address> --out work/page.json.

CódigoDile al usuario
invalid_url, blocked_scheme, blocked_host, blocked_addressNo es una dirección web pública.
unreachable, http_error, blockedEl sitio no respondió o rechazó lectores automatizados (blocked: HTTP 401, 403 o 429). Ofrece la ruta de página guardada.
challengeUn captcha o verificación de bot. No lo superes; ofrece la ruta de página guardada.
not_html, too_large, emptyNo es una página web legible, o no tiene texto (probablemente imágenes).
refused_ru_domain, refused_ru_hosting, refused_ru_audience, refused_language_ruNo analizado: una página en ruso, o un sitio en una zona de dominio de Rusia, alojado en Rusia o con una versión en ruso. Decisión del editor.

Referencias

ArchivoLéelo cuando
references/block-types.mdNo estés seguro de un tipo de bloque.
references/variables.mdNecesites una {variable} o añadir una.
references/analysis-schema.mdNecesites el formato completo o la forma JSON.

Skills relacionados