Communitygithub.com

dr-robert-li/cowork-wordpress-expert

Gera o SETUP.md com configuração de plugins e orientação de substituição de conteúdo ordenados por prioridade, e atualiza o build.json com metadados específicos para NL.

O que é cowork-wordpress-expert?

Esta skill é projetada para automatizar a criação do guia de configuração pós-importação de sites WordPress e a atualização de metadados no arquivo build.json. Ela é executada após a geração de conteúdo do site e antes da etapa de empacotamento zip. A principal funcionalidade é gerar o arquivo `SETUP.md`, que contém uma lista de tarefas ordenadas por prioridade (Crítico, Importante, Opcional) com instruções detalhadas para configurar plugins, substituir conteúdos de exemplo (como endereços, telefones e imagens) e ajustar menus de navegação. A skill utiliza inteligência artificial (Claude) para criar instruções passo a passo específicas para cada plugin instalado, com base no prompt em linguagem natural (NL_PROMPT) que descreve o site. Além disso, ela atualiza o arquivo `build.json` com informações do tema, plugins, conteúdo criado e o prompt original, adicionando metadados NL. Suporta plataformas como Claude Code e utiliza variáveis de ambiente definidas em etapas anteriores do build (como build-theme e build-content).

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/dr-robert-li/cowork-wordpress-expert/tree/HEAD/skills/build-setup

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

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ávelFonteDescrição
BUILD_DIRbuild-scaffoldCaminho absoluto para o diretório de trabalho do build
NL_PROMPTCOMMAND.md Seção 1Descrição original do site em linguagem natural
THEME_SLUGbuild-themeSlug do tema instalado
THEME_NAMEbuild-themeNome legível do tema
THEME_VERSIONbuild-themeString da versão do tema instalado
THEME_INSTALLEDbuild-themeBooleano — verdadeiro se o tema foi instalado com sucesso
INSTALLED_PLUGINSbuild-contentArray de slug:nome:versão para plugins instalados com sucesso
FAILED_PLUGINSbuild-contentArray de slugs que falharam ao instalar ou ativar
PAGES_CREATEDbuild-contentContagem inteira de páginas criadas
POSTS_CREATEDbuild-contentContagem inteira de posts criados
MENU_ASSIGNEDbuild-contentBooleano — verdadeiro se o menu de navegação foi atribuído a uma localização do tema
MENU_LOCATIONbuild-contentNome 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_PROMPT para 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]

Individual skills in this repo

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

Habilidades Relacionadas