Build Setup Skill
Gera o SETUP.md — guia de configuração e substituição de conteúdo pós-importação do usuário — e atualiza o build.json com metadados específicos de NL. Esta skill é executada após build-content e antes do empacotamento zip.
Variáveis de entrada (definidas por build-theme e build-content):
| Variável | Fonte | Descrição |
|---|---|---|
BUILD_DIR | build-scaffold | Caminho absoluto para o diretório de trabalho do build |
NL_PROMPT | COMMAND.md Seção 1 | Descrição original do site em linguagem natural |
THEME_SLUG | build-theme | Slug do tema instalado |
THEME_NAME | build-theme | Nome legível do tema |
THEME_VERSION | build-theme | String da versão do tema instalado |
THEME_INSTALLED | build-theme | Booleano — verdadeiro se o tema foi instalado com sucesso |
INSTALLED_PLUGINS | build-content | Array de slug:nome:versão para plugins instalados com sucesso |
FAILED_PLUGINS | build-content | Array de slugs que falharam ao instalar ou ativar |
PAGES_CREATED | build-content | Contagem inteira de páginas criadas |
POSTS_CREATED | build-content | Contagem inteira de posts criados |
MENU_ASSIGNED | build-content | Booleano — verdadeiro se o menu de navegação foi atribuído a uma localização do tema |
MENU_LOCATION | build-content | Nome da localização do tema usada (ou string vazia se não atribuído) |
Seção 1: Geração do SETUP.md
Escreva $BUILD_DIR/SETUP.md usando todo o contexto disponível — plugins instalados, tema, contagem de páginas e prompt NL — para produzir um guia de configuração ordenado por prioridade que o usuário possa seguir imediatamente após importar o site no Local WP.
echo "[Build] Gerando SETUP.md..."
# ── Construir a seção O que está instalado ────────────────────────────────────────
SETUP_FILE="$BUILD_DIR/SETUP.md"
# Começar a escrever o SETUP.md
cat > "$SETUP_FILE" << 'SETUP_HEADER'
# Guia de Configuração
Este guia orienta você na configuração do seu novo site WordPress após importá-lo
no Local WP. Os itens são ordenados por prioridade — complete os passos Críticos
primeiro, depois trabalhe nos Importantes e Opcionais no seu próprio ritmo.
---
## O que está instalado
SETUP_HEADER
# Entrada do tema
echo "- **Tema:** ${THEME_NAME} (v${THEME_VERSION})" >> "$SETUP_FILE"
echo "" >> "$SETUP_FILE"
# Lista de plugins
if [ ${#INSTALLED_PLUGINS[@]} -gt 0 ]; then
echo "- **Plugins:**" >> "$SETUP_FILE"
for plugin_entry in "${INSTALLED_PLUGINS[@]}"; do
# Formato: slug:nome:versão
PLUGIN_SLUG=$(echo "$plugin_entry" | cut -d: -f1)
PLUGIN_NAME=$(echo "$plugin_entry" | cut -d: -f2)
PLUGIN_VER=$(echo "$plugin_entry" | cut -d: -f3)
# Claude gera uma descrição de uma linha para cada plugin com base no slug e nome do plugin
PLUGIN_PURPOSE="<descrição de uma linha do que ${PLUGIN_NAME} faz — gerada por Claude a partir do conhecimento do plugin>"
echo " - **${PLUGIN_NAME}** (v${PLUGIN_VER}) — ${PLUGIN_PURPOSE}" >> "$SETUP_FILE"
done
echo "" >> "$SETUP_FILE"
fi
# Plugins com falha (se houver)
if [ ${#FAILED_PLUGINS[@]} -gt 0 ]; then
echo "- **Plugins que falharam ao instalar:**" >> "$SETUP_FILE"
for slug in "${FAILED_PLUGINS[@]}"; do
echo " - ${slug} — a instalação foi tentada, mas falhou durante o build" >> "$SETUP_FILE"
done
echo "" >> "$SETUP_FILE"
fi
Em seguida, escreva a lista de ações ordenadas por prioridade. Esta é uma tarefa de julgamento de IA — Claude gera as instruções passo a passo reais para cada plugin com base no conhecimento de Claude sobre o fluxo de trabalho de configuração desse plugin, usando o contexto do prompt NL para determinar o que é mais importante para este site específico.
# ── Construir a seção O que fazer a seguir ────────────────────────────────────────
cat >> "$SETUP_FILE" << 'SETUP_NEXT'
---
## O que fazer a seguir (Ordem de Prioridade)
SETUP_NEXT
# ── Itens CRÍTICOS ────────────────────────────────────────────────────────────
echo "### Crítico" >> "$SETUP_FILE"
echo "" >> "$SETUP_FILE"
STEP_NUM=1
# Para cada plugin instalado que requer configuração, Claude gera
# instruções passo a passo com caminhos completos de navegação do administrador WordPress.
# Exemplo de padrão para WPForms Lite:
#
# echo "${STEP_NUM}. **Configurar WPForms — criar seu formulário de contato**" >> "$SETUP_FILE"
# cat >> "$SETUP_FILE" << 'EOF'
# Vá para: **WPForms > Adicionar Novo**
# Passos:
# 1. Clique em "Selecionar um Modelo" e escolha **Formulário de Contato Simples**
# 2. Clique em "Usar Modelo" — o construtor de formulários abre
# 3. (Opcional) Adicione ou remova campos arrastando do painel esquerdo
# 4. Clique em **Salvar** no canto superior direito
# 5. Vá para **Páginas > Contato > Editar**
# 6. Adicione um novo bloco, pesquise por "WPForms" e selecione o bloco WPForms
# 7. Escolha seu formulário recém-criado no menu suspenso
# 8. Clique em **Atualizar** para salvar a página
# EOF
# STEP_NUM=$((STEP_NUM + 1))
# Claude gera blocos equivalentes para cada plugin em INSTALLED_PLUGINS
# que requer configuração do usuário. Plugins que funcionam sem configuração (por exemplo,
# um plugin de cache que ativa silenciosamente) podem ser documentados em Importante
# ou omitidos se nenhuma ação for necessária.
# ── Substituição de informações de placeholder da página de contato (sempre Crítico) ────────────────────
echo "${STEP_NUM}. **Substituir informações de placeholder da página de Contato**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'CONTACT_STEP'
Vá para: **Páginas > Contato > Editar**
Substitua o seguinte conteúdo de placeholder pelos seus dados reais:
- O nome da empresa fictício no título da página
- O endereço fictício (ex.: "Rua Exemplo, 123, Cidade Exemplo")
- O número de telefone fictício
- O endereço de e-mail fictício
- Quaisquer horários de funcionamento ou detalhes de localização fictícios
CONTACT_STEP
STEP_NUM=$((STEP_NUM + 1))
# ── Itens IMPORTANTES ───────────────────────────────────────────────────────────
echo "" >> "$SETUP_FILE"
echo "### Importante" >> "$SETUP_FILE"
echo "" >> "$SETUP_FILE"
# Substituição de conteúdo da página Sobre
echo "${STEP_NUM}. **Atualizar conteúdo da página Sobre**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'ABOUT_STEP'
Vá para: **Páginas > Sobre > Editar**
Substitua o seguinte conteúdo de placeholder:
- O nome da empresa/pessoa fictício e a biografia
- Quaisquer descrições de membros da equipe fictícios
- A foto de perfil ou imagem de destaque placeholder (faça upload da sua própria através do bloco Mídia)
- Quaisquer credenciais, histórico ou história de origem fictícios
ABOUT_STEP
STEP_NUM=$((STEP_NUM + 1))
# Substituição de conteúdo da página inicial
echo "${STEP_NUM}. **Atualizar conteúdo do hero e introdução da página inicial**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'HOME_STEP'
Vá para: **Páginas > Início > Editar**
Substitua o seguinte conteúdo de placeholder:
- O título e subtítulo do hero (torne-os específicos para seu negócio ou oferta)
- A imagem de fundo ou destaque do hero (faça upload via bloco Capa/Imagem)
- O parágrafo introdutório descrevendo o que você faz
- Quaisquer rótulos e links de botões de call-to-action
HOME_STEP
STEP_NUM=$((STEP_NUM + 1))
# Páginas adicionais baseadas no tipo de site — Claude gera orientação específica para cada página
# para cada página em PAGES_CREATED além de Início, Sobre, Contato. Exemplos:
#
# Página de portfólio:
# echo "${STEP_NUM}. **Adicionar seu trabalho real à página de Portfólio**" >> "$SETUP_FILE"
# ...
# STEP_NUM=$((STEP_NUM + 1))
#
# Página de serviços:
# echo "${STEP_NUM}. **Atualizar página de Serviços com suas ofertas reais**" >> "$SETUP_FILE"
# ...
# STEP_NUM=$((STEP_NUM + 1))
#
# Claude usa o contexto NL_PROMPT para determinar quais páginas adicionais existem
# e qual conteúdo de placeholder elas contêm, então escreve orientações direcionadas.
# Qualquer configuração adicional de plugin que se enquadre em Importante (não Crítico)
# Claude adiciona passos aqui para plugins que precisam de configuração, mas não quebram o site
# se deixados sem configurar (ex.: configuração de plugin SEO, configurações de galeria)
# ── Itens OPCIONAIS ────────────────────────────────────────────────────────────
echo "" >> "$SETUP_FILE"
echo "### Opcional" >> "$SETUP_FILE"
echo "" >> "$SETUP_FILE"
# Substituição de posts de exemplo
echo "${STEP_NUM}. **Adicionar seus próprios posts de blog para substituir o conteúdo de exemplo**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'POSTS_STEP'
Os posts de exemplo demonstram como seu tema renderiza o conteúdo do blog. Eles usam
tópicos realistas, mas fictícios, relacionados ao assunto do seu site.
Vá para: **Posts > Todos os Posts** para editar os exemplos existentes ou adicionar novos.
Você pode excluir os posts de exemplo depois de publicar seu próprio conteúdo.
POSTS_STEP
STEP_NUM=$((STEP_NUM + 1))
# Substituição de imagens placeholder
echo "${STEP_NUM}. **Substituir imagens placeholder por suas próprias fotos**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'IMAGES_STEP'
Imagens placeholder de cor sólida foram geradas durante o build para mostrar
a intenção do layout. Substitua-as por suas próprias imagens:
Vá para: **Mídia > Adicionar Novo** para fazer upload de suas fotos
Em seguida, edite cada página/post e troque os blocos de imagem placeholder pelos seus uploads.
IMAGES_STEP
STEP_NUM=$((STEP_NUM + 1))
# Atribuição de menu se não atribuído automaticamente (caso extremo de tema de bloco FSE)
if [ "$MENU_ASSIGNED" = "false" ] || [ "$MENU_ASSIGNED" = "" ]; then
echo "${STEP_NUM}. **Atribuir menu de navegação no Editor do Site**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'MENU_STEP'
Seu menu de navegação foi criado durante o build, mas não pôde ser atribuído
a uma localização do tema automaticamente (isso é esperado para temas de bloco).
Vá para: **Aparência > Editor > Navegação**
Selecione "Menu Primário" e coloque-o em sua área de navegação do cabeçalho.
MENU_STEP
STEP_NUM=$((STEP_NUM + 1))
fi
# Finalizar SETUP.md
echo "---" >> "$SETUP_FILE"
echo "" >> "$SETUP_FILE"
echo "*Gerado pelo WordPress Expert Plugin — Sistema de Build CoWork*" >> "$SETUP_FILE"
SETUP_ITEM_COUNT=$((STEP_NUM - 1))
echo "[Build] SETUP.md gerado (${SETUP_ITEM_COUNT} itens de configuração)"
Notas de implementação para Claude:
- Instruções de plugin são uma tarefa de julgamento de IA. Para cada plugin em
INSTALLED_PLUGINS, Claude gera instruções detalhadas, passo a passo, usando seu conhecimento do fluxo de trabalho de configuração desse plugin. As instruções devem incluir caminhos completos de navegação do administrador WP (ex.: "Vá para WPForms > Adicionar Novo > Selecionar modelo de formulário de contato > Salvar > Copiar shortcode > Editar página de contato > Adicionar bloco de shortcode"). - Contexto determina prioridade. Claude lê
NL_PROMPTpara determinar quais itens de configuração são Críticos vs Importantes. Para um site de portfólio de fotografia, substituir imagens do portfólio é Crítico. Para um restaurante, configurar um plugin de reservas é Crítico. - Cobertura página por página. Cada página criada por build-content recebe uma entrada dedicada com orientação específica sobre qual conteúdo de placeholder ela contém.
- Sem instruções genéricas. Toda orientação é específica para o plugin e tipo de site — não conselhos genéricos como "configure seus plugins".
Seção 2: Atualização de Metadados NL no build.json
Leia o build.json existente (criado por build-scaffold Seção 6) e adicione campos específicos de NL. Usa o mesmo padrão de análise JSON Python3 estabelecido na Seção 4 do build-mcp.
echo "[Build] Atualizando build.json com metadados NL..."
BUILD_JSON="$BUILD_DIR/build.json"
# Construir arrays para serialização JSON
INSTALLED_JSON=""
for plugin_entry in "${INSTALLED_PLUGINS[@]}"; do
PLUGIN_SLUG=$(echo "$plugin_entry" | cut -d: -f1)
PLUGIN_NAME=$(echo "$plugin_entry" | cut -d: -f2)
PLUGIN_VER=$(echo "$plugin_entry" | cut -d: -f3)
if [ -n "$INSTALLED_JSON" ]; then
INSTALLED_JSON="${INSTALLED_JSON},"
fi
INSTALLED_JSON="${INSTALLED_JSON}{\"slug\":\"${PLUGIN_SLUG}\",\"name\":\"${PLUGIN_NAME}\",\"version\":\"${PLUGIN_VER}\",\"installed\":true}"
done
FAILED_JSON=""
for slug in "${FAILED_PLUGINS[@]}"; do
if [ -n "$FAILED_JSON" ]; then
FAILED_JSON="${FAILED_JSON},"
fi
FAILED_JSON="${FAILED_JSON}\"${slug}\""
done
# Escrever script Python em arquivo temporário (mesmo padrão do gerador de imagem build-content)
NL_META_SCRIPT="/tmp/update_build_json_$$.py"
cat > "$NL_META_SCRIPT" << PYEOF
import json, sys
build_file = sys.argv[1]
nl_prompt = sys.argv[2]
theme_slug = sys.argv[3]
theme_name = sys.argv[4]
theme_version = sys.argv[5]
theme_installed = sys.argv[6] == 'true'
pages_created = int(sys.argv[7])
posts_created = int(sys.argv[8])
menu_assigned = sys.argv[9] == 'true'
installed_json = sys.argv[10]
failed_json = sys.argv[11]
with open(build_file) as f:
data = json.load(f)
data['mode'] = 'nl'
data['nl_prompt'] = nl_prompt
data['theme'] = {
'slug': theme_slug,
'name': theme_name,
'version': theme_version,
'installed': theme_installed
}
data['plugins'] = json.loads('[' + installed_json + ']') if installed_json else []
data['content'] = {
'pages_created': pages_created,
'posts_created': posts_created,
'menu_assigned': menu_assigned
}
if failed_json:
data['failed_plugins'] = json.loads('[' + failed_json + ']')
with open(build_file, 'w') as f:
json.dump(data, f, indent=2)
print('[Build] build.json atualizado com metadados NL')
PYEOF
python3 "$NL_META_SCRIPT" \
"$BUILD_JSON" \
"$NL_PROMPT" \
"$THEME_SLUG" \
"$THEME_NAME" \
"$THEME_VERSION" \
"${THEME_INSTALLED:-true}" \
"$PAGES_CREATED" \
"$POSTS_CREATED" \
"${MENU_ASSIGNED:-false}" \
"$INSTALLED_JSON" \
"$FAILED_JSON"
# Limpar script temporário
rm -f "$NL_META_SCRIPT"
build.json após atualização de metadados NL:
{
"build_id": "nl-photography-portfolio-20260220-143022",
"mode": "nl",
"nl_prompt": "um site de portfólio para um fotógrafo freelance",
"wp_version": "6.7",
"php_version": "8.2",
"site_url": "http://localhost",
"site_title": "um site de portfólio para um fotógrafo freelance",
"created_at": "2026-02-20T14:30:22Z",
"theme": {
"slug": "blocksy",
"name": "Blocksy",
"version": "2.0.50",
"installed": true
},
"plugins": [
{ "slug": "envira-gallery-lite", "name": "Envira Gallery Lite", "version": "1.9.0", "installed": true },
{ "slug": "wpforms-lite", "name": "WPForms Lite", "version": "1.9.0", "installed": true }
],
"content": {
"pages_created": 4,
"posts_created": 3,
"menu_assigned": false
},
"failed_plugins": [],
"mcp_adapter": {
"included": true,
"activated": true,
"version": "0.4.1"
}
}
Seção 3: Extensão do Resumo do Build
Anexar
…
[truncado para tradução]