Versão 1.008.
Texto da página em prompts
Propósito
Os scripts leem 1 página web e dividem seu texto em blocos candidatos. Você escreve um arquivo de julgamento curto; a build o transforma em um prompt e um exemplo medido por bloco. Apenas texto: 1 página pública, desktop, sem login, sem bypass de captcha, sem texto em imagens.
Requisitos
- Node 22 ou superior. Sem instalação, sem chave de API. Execute os scripts em
dist/a partir da pasta desta skill. - Acesso à rede a partir do shell.
Regras
- R1. Não pergunte nada ao usuário primeiro. Uma URL é suficiente.
- R2. Palavras próprias. Nenhuma linha que você escrever pode repetir 6 palavras consecutivas da página, ignorando maiúsculas/minúsculas e pontuação (
overlap). Isso cobre todos os campos e todos os exemplos. - R3. Não mencione a marca do site: nome de domínio,
og:site_name(brand). Não use nenhum nome da página. - R4. Escreva
analysis.mde todo arquivo de entrada com a ferramenta de escrita de arquivos, nunca com heredoc do shell. Se a ferramenta recusar (alguns harnesses recusam arquivos.mdde um subagente), escreva o arquivo com outro nome e copie comcp. - R5. Nunca refaça o trabalho dos scripts manualmente. Não conte palavras ou caracteres. Não escreva prompts.
- R6. Nunca invente fatos. Nunca escreva texto em russo. Os scripts não chamam nenhum modelo.
Procedimento
Todo caminho abaixo pode apontar para qualquer lugar gravável; work/ é o padrão, não uma regra.
- Leitura (script).
node dist/read.mjs <url> --out work/page.json- Opções:
--no-render(apenas HTML fonte),--lang <código>(idioma do rascunho). - Resultado: em
work/,brief.md(leia isto),analysis.md(o rascunho, 1 cabeçalho por candidato com um tipo sugerido) epage.json(para a build; não abra). Seanalysis.mdexistir, o rascunho vai paraanalysis.draft.md. brief.mdtem 1 linha por elemento: tipo, contagem de palavras, status (js_only,collapsed,not_in_a11y, ou nenhum paraok), texto, agrupado por candidatobNN.[g3#2]é o cartão 2 do grupog3.- Tempo: 5 a 30 segundos. A renderização para após 45 segundos e a leitura continua a partir do HTML.
- Em caso de falha:
REFUSED <código>(código de saída 2): pare e informe o usuário (veja Códigos de recusa). Se os scripts não puderem ser executados (sem Node 22, sem shell, sem rede), informe o usuário em 1 linha e ofereça a rota de página salva.
- Opções:
- Preencher
work/analysis.md(julgamento). Veja a próxima seção. Escreva em inglês, ou no idioma solicitado pelo usuário, com seu código emlanguage:. - Build (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: os 3 arquivos e
checks: 5 of 5 passed. Exemplos fora do intervalo são apenas avisos. - Em caso de falha:
REFUSEDlista cada problema com sua verificação:overlap(R2),brand(R3),volume(sem intervalo de palavras),variables(variável{nome}não declarada),blocks(candidato ausente, desconhecido ou usado duas vezes),schema(campo ausente ou valor não permitido), ou uma linha que não pode ser lida. Corrija apenas as linhas listadas e execute a build novamente.
- Resultado: os 3 arquivos e
analysis.md
Pegue as contagens de palavras do brief.md e escreva intervalos ao redor delas. Deixe de fora os intervalos de caracteres.
language: pt
example_product: um aplicativo fictício de reservas para pequenos estúdios de pilates
page_type: landing de SaaS
audience: proprietários de pequenos estúdios que fazem reservas por chat
awareness: comparando_solucoes
tone: profissional, acolhedor; formalidade 2; você
promise: {product} dá a {audience} {main_benefit} sem {pain}.
logic: resultado e primeiro passo primeiro, depois prova, os passos antes dos preços
threads:
- a promessa de não ter mais chamadas aparece no hero, nos passos e no chamado final
## p01 hero | Hero | b01
role: dizer em cinco segundos o que muda para o leitor, e oferecer o primeiro passo
- eyebrow | 3-5 | a principal mudança para o leitor | Sem mais chamadas de reserva
- h1 "Título principal" | 7-11 | o resultado para {audience}, sem o nome do produto | Clientes reservam um reformer, e você fica com a aula
- button | 2-4 | verbo + objeto, a ação {cta_action} | Configurar reservas
- risk_line | 5-8 | {risk_remover} | Gratuito para começar, cancele a qualquer momento
techniques:
- Manter o nome de {product} fora do título principal; ele aparece primeiro no subtítulo.
tone: profissional, acolhedor; você
avoid: "inovador"; uma pergunta como título principal
## p07 precos | Preços | b07
role: ajudar o leitor a escolher um plano e ver que o preço cabe no tamanho do estúdio
- h2 | 4-8 | o preço vinculado ao tamanho do leitor | Pague pelo tamanho que você é
- 3 x plano "Plano":
- h3 | 1-3 | o tamanho do estúdio | Sala única
- price | 1-3 | {plan_n} | [preço] / mês
- items 3 | 2-6 | o que está incluído, mais importante primeiro | Reservas por autoatendimento / Lembretes para clientes / Checkout no cartão
techniques:
- Nomeie os planos de acordo com o tamanho do estúdio, não por níveis como básico ou profissional.
Valores permitidos (a build recusa outros):
awareness:unaware,problem_aware,comparing_solutions,product_aware,ready_to_buy.- Tipo de bloco:
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.otherprecisa de uma linhareason:. formality: 1 dígito, de 1 a 5 (o relatório mostra "N of 5"; não é recusado).language: um código ISO;ptgera prompts em português, qualquer outro código gera prompts em inglês.page_type: texto livre.- Variáveis:
product,category,audience,language,pain,pain_n,main_benefit,benefit_n,feature_n,step_n,use_case_n,alternative,objection_n,cta_action; fatosrisk_remover,outcome_number,customer_count,customer_n,testimonial_n,plan_n,guarantee,deadline. Declare uma nova emvars:como- name: o que entra, com[fact]para um fato.
Obrigatório: language, example_product, page_type, audience, awareness, promise, logic; por bloco um tipo, um nome, role, 1 ou mais elementos, 1 ou mais técnicas.
Formatos de linha:
- Elemento:
código "Rótulo" | palavras | deve | exemplo.mustse torna aquela linha do prompt. - Grupo:
N x código "Rótulo":com filhos indentados; o exemplo é 1 cartão. Grupos não aninham. - Lista:
items N; separe itens de exemplo com/. - Juntar candidatos:
| b03 b04no cabeçalho. Descartar um:drop: b10 <motivo>perto do topo.
Regras mais frequentemente quebradas:
- 1 bloco, 1 trabalho. Deixe de fora texto decorativo (rótulos de widgets, contadores).
- Cada candidato vai em exatamente 1 bloco ou é descartado. Um candidato não pode ser dividido.
- Um candidato muito grande (por exemplo, um artigo de 1.400 palavras com muitas subseções) permanece 1 bloco: escreva suas subseções repetidas como 1 grupo, por exemplo
5 x seção "Seção":comh3etexto. Use o tipo mais próximo, ouother. - Técnicas são instruções, não rótulos: não "usa PAS" mas "nomeie o problema em 1 frase, seu custo na segunda, {product} na terceira". Apenas o que o texto faz.
- O exemplo é o bloco para 1 produto fictício. Próximo ao intervalo é suficiente.
Verificação
- Cada candidato está em 1 bloco ou foi descartado.
- A build final não imprimiu
REFUSED. -
work/report.htmlexiste.
Mostrar o relatório
- Se o usuário ou quem chamou disse para não publicar ou abrir nada, pare quando
report.htmlexistir e forneça seu caminho. - Caso contrário, publique
report.htmlse esta sessão puder publicar HTML; se não, forneça seu caminho absoluto. - O relatório abre em inglês com um seletor EN / PT;
#lang=ptabre em português.
Resumo do chat
- O número de blocos, o esqueleto, 1 ou 2 técnicas úteis.
- Notas de visibilidade que importam: texto apenas após JavaScript, respostas de FAQ dobradas.
- Não cole todos os prompts. Se o usuário perguntou sobre 1 bloco, mostre seu prompt e exemplo.
- Diga uma vez: os blocos e a redação são sua leitura; as camadas, contagens e verificações são dos scripts.
Códigos de recusa
Rota de página salva: node dist/read.mjs --file saved.html --url <endereço> --out work/page.json.
| Código | Informe o usuário |
|---|---|
invalid_url, blocked_scheme, blocked_host, blocked_address | Não é um endereço web público. |
unreachable, http_error, blocked | O site não respondeu ou recusou leitores automatizados (blocked: HTTP 401, 403 ou 429). Ofereça a rota de página salva. |
challenge | Um captcha ou verificação de bot. Não passe por ele; ofereça a rota de página salva. |
not_html, too_large, empty | Não é uma página web legível, ou não tem texto (provavelmente imagens). |
refused_ru_domain, refused_ru_hosting, refused_ru_audience, refused_language_ru | Não analisado: uma página em russo, ou um site no domínio da Rússia, hospedado na Rússia ou com uma versão em russo. Decisão do editor. |
Referências
| Arquivo | Leia quando |
|---|---|
references/block-types.md | Você não tem certeza de um tipo de bloco. |
references/variables.md | Você precisa de uma {variável} ou adicionar uma. |
references/analysis-schema.md | Você precisa do formato completo ou do formulário JSON. |