GDD (Giggly-Dazzling-Duckling)

Fazenda de navegadores controlada por IA — execute N instâncias isoladas do Chromium com 36 ferramentas MCP para emulação de dispositivos, capturas de tela, simulação de rede/geolocalização e diagnósticos. Multiplataforma: GUI no Windows + modo com interface/sem interface no Linux/macOS.

Documentação

GDD

GDD — Giggly-Dazzling-Duckling

Fazenda de navegadores controlada por IA na sua máquina
Simule vários usuários reais em 22 tipos de dispositivos — teste seu site como se fosse o dia do lançamento.

Release Platforms MCP MCP Registry License

Claude Code Cursor


Como Funciona

Você: Abra 3 iPhones e um desktop, navegue até myapp.com, teste o formulário de cadastro em todos os dispositivos

Claude Code cria 4 navegadores com emulação de dispositivos, navega cada um até o seu app, preenche o formulário, tira screenshots e verifica o console em busca de erros — tudo em paralelo.

gdd_add_players(3, device="iPhone 15 Pro")    → players [1, 2, 3]
gdd_add_players(1, device="Desktop 1080p")    → player  [4]
gdd_navigate(1, "https://myapp.com")          → all 4 browsers open your app
gdd_tap(1, "#signup-btn")                     → taps signup on iPhone
gdd_screenshot(1)                             → captures the result
gdd_get_console(1, level="error")             → checks for JS errors

O GDD executa N instâncias isoladas de Chromium, cada uma com seu próprio perfil, cookies, emulação de dispositivo, geolocalização e condições de rede. Ele expõe 39 ferramentas MCP via HTTP em localhost:9700.

GDD Video Wall — 3 devices testing simultaneously


Instalação

O GDD vem em duas versões. O Server é headless — é apenas o backend MCP, roda em qualquer lugar (inclusive em máquinas sem display) e é tudo que você precisa para automação pura com IA. O app desktop adiciona uma GUI: uma grade ao vivo de miniaturas de navegadores nas quais você pode clicar para assumir uma sessão manualmente. O Server roda na porta 9700 e o app desktop na 9800 — então você pode executar os dois lado a lado.

Server (headless) — o backend MCP:

PlataformaDownloadExecutar
LinuxGDD-Server-Linux.tar.gzchmod +x GDD.Headless && ./GDD.Headless
macOS ARMGDD-Server-macOS-ARM.tar.gzbash Scripts/setup-macos.sh && ./GDD.Headless
macOS IntelGDD-Server-macOS-Intel.tar.gzbash Scripts/setup-macos.sh && ./GDD.Headless
WindowsGDD-Server-Windows.zip.\GDD.Headless.exe
Dockerghcr.io/cap-of-tea/gdddocker run -p 9700:9700 ghcr.io/cap-of-tea/gdd
Claude DesktopWin / Mac ARM / Mac Intel (.mcpb)Abra o arquivo .mcpb — instala como extensão de desktop

App desktop (GUI) — uma grade ao vivo de miniaturas de navegadores nas quais você pode clicar:

PlataformaDownloadExecutar
WindowsGDD-Desktop-Windows.zipExtraia e execute GDD.exe (WebView2 necessário)
LinuxGDD-Desktop-Linux.tar.gzbash Scripts/install-deps.sh && ./GDD.Desktop
macOS ARMGDD-Desktop-macOS-ARM.tar.gzbash Scripts/setup-macos.sh && ./GDD.Desktop
macOS IntelGDD-Desktop-macOS-Intel.tar.gzbash Scripts/setup-macos.sh && ./GDD.Desktop

O app Windows usa WebView2; o app Linux/macOS (construído com Avalonia) controla janelas reais de Chromium posicionadas fora da tela. Binário autossuficiente, ~70 MB. Nenhuma instalação do .NET é necessária. O Chromium é baixado automaticamente no primeiro início.

Comando único (Linux):

curl -sL https://github.com/Cap-of-tea/GDD/releases/latest/download/GDD-Server-Linux.tar.gz | tar xz && chmod +x GDD.Headless && ./GDD.Headless
Docker
# Run (headless, port 9700)
docker run -p 9700:9700 ghcr.io/cap-of-tea/gdd

# Or build locally
docker build -t gdd .
docker run -p 9700:9700 gdd

A imagem Docker roda em modo headless com todas as dependências do Chromium pré-instaladas.

Por padrão, os navegadores iniciam em modo headed (janelas visíveis). Adicione --headless para CI/CD. Outras flags: --stealth e --stealth-max para mascaramento anti-bot, --update para auto-atualização, --version e --help. A seção Configuração abaixo lista todas as flags e variáveis de ambiente.


Conecte-se ao Seu Cliente de IA

Adicione ao .mcp.json e reinicie o seu cliente de IA:

{
  "mcpServers": {
    "gdd": {
      "url": "http://localhost:9700/mcp"
    }
  }
}

Pronto. Inicie o GDD e peça ao Claude ou ao Cursor para testar o seu app.

Usuários do Claude Desktop: Baixe o arquivo .mcpb em Releases e abra-o — o GDD instala como uma extensão de desktop com um clique. Nenhuma configuração manual é necessária.

Locais dos arquivos de configuração
ClienteConfig do projetoConfig global
Claude Code<project>/.mcp.json~/.claude/.mcp.json
Cursor<project>/.cursor/mcp.json~/.cursor/mcp.json
VS Code / Windsurf / Antigravity<project>/.vscode/mcp.jsonIDE settings.json

As configurações global e do projeto são mescladas — os servidores de ambas ficam disponíveis simultaneamente. As alterações são aplicadas apenas ao reiniciar a sessão do cliente de IA.

IDEs baseadas em VS Code (Windsurf, Antigravity, Copilot)

IDEs baseadas em VS Code usam um formato de configuração diferente do Claude Code / Cursor.

Config do projeto.vscode/mcp.json:

{
  "servers": {
    "gdd": {
      "type": "http",
      "url": "http://localhost:9700/mcp"
    }
  }
}

Config global — abra via Cmd+Shift+P → "Open User Settings (JSON)":

{
  "mcp": {
    "servers": {
      "gdd": {
        "type": "http",
        "url": "http://localhost:9700/mcp"
      }
    }
  }
}

Localização do settings.json global: macOS — ~/Library/Application Support/<IDE>/User/settings.json, Linux — ~/.config/<IDE>/User/settings.json, Windows — %APPDATA%/<IDE>/User/settings.json. Substitua <IDE> pelo nome do seu editor (Code, Windsurf, Antigravity, etc.).

Alternativa com stdio-proxy (.vscode/mcp.json):

{
  "servers": {
    "gdd": {
      "type": "stdio",
      "command": "bash",
      "args": ["/absolute/path/to/Scripts/mcp-proxy.sh"]
    }
  }
}
Permissões (Claude Code)

Por padrão, o Claude Code pede confirmação a cada chamada de ferramenta MCP. Para permitir as ferramentas do GDD sem avisos, adicione ao ~/.claude/settings.json:

{
  "permissions": {
    "allow": [
      "mcp__gdd__*"
    ]
  }
}

Este único curinga cobre todas as 39 ferramentas do GDD. Reinicie o Claude Code após editar.

Início automático via proxy stdio (alternativa)

Scripts proxy iniciam o GDD automaticamente quando o seu cliente de IA se conecta:

Windows:

{
  "mcpServers": {
    "gdd": {
      "command": "powershell",
      "args": ["-ExecutionPolicy", "Bypass", "-File", "C:/path/to/Scripts/mcp-proxy.ps1"]
    }
  }
}

Linux / macOS:

{
  "mcpServers": {
    "gdd": {
      "command": "bash",
      "args": ["/path/to/Scripts/mcp-proxy.sh"]
    }
  }
}

Adicione "--headless" ao array args para CI/CD.

Dica: No primeiro início, o GDD baixa o Chromium (~80 MB). Se o seu cliente de IA der timeout, execute o GDD manualmente primeiro e depois reconecte.

Início automático como serviço (macOS / Linux)

macOS (launchd):

bash Scripts/install-launchd.sh            # headed (default)
bash Scripts/install-launchd.sh --headless  # for CI/CD

Gerenciar: launchctl list | grep gdd / bash Scripts/install-launchd.sh --uninstall

Linux (systemd):

mkdir -p ~/.config/systemd/user
cat > ~/.config/systemd/user/gdd.service << 'EOF'
[Unit]
Description=GDD Multi-Browser Testing Server
[Service]
ExecStart=/path/to/GDD.Headless
WorkingDirectory=/path/to/gdd-directory
Restart=on-failure
[Install]
WantedBy=default.target
EOF

systemctl --user daemon-reload
systemctl --user enable --now gdd
HTTP direto (sem cliente de IA)
curl -X POST http://localhost:9700/mcp -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"gdd_add_players","arguments":{"count":1}}}'

O GDD usa JSON-RPC 2.0 padrão — funciona com curl, Python, Node.js ou qualquer cliente HTTP.


Recursos

  • Multi-dispositivo — Execute N instâncias isoladas de Chromium com 22 presets de dispositivos (celulares, tablets, desktops)
  • Nativo para IA — 39 ferramentas MCP para Claude Code, Cursor ou qualquer cliente compatível com MCP
  • Multiplataforma — GUI nativa com um mural de vídeo ao vivo no Windows, Linux e macOS, além de um servidor headless para CI/CD
  • Interação completa — Navegue, toque, digite, pressione teclas e atalhos, arraste, deslize, role, passe o mouse, lide com diálogos e tire screenshots
  • Teclado real — Digitar envia pressionamentos de tecla genuínos e confiáveis (a cadeia completa keydown→input), então máscaras de entrada, autocompletar e maxlength se comportam exatamente como para um usuário real, e editores rich-text (contenteditable) funcionam; gdd_press lida com teclas únicas e atalhos como Enter, Tab, Escape e Ctrl+A
  • Layouts de teclado físicos — Os pressionamentos de tecla carregam o code/keyCode real do teclado da localidade emulada: o russo ЙЦУКЕН coloca «а» no KeyF físico, o francês AZERTY e o alemão QWERTZ remapeiam suas teclas, acentos de tecla morta e símbolos AltGr funcionam. O layout segue gdd_set_language automaticamente (US, RU, DE, FR)
  • Entrada semelhante à humanahumanize=true conduz um caminho contínuo do cursor (Bézier cúbico com easing e micro-variação) que é mantido entre cliques, hovers e arrastos; toques enviam uma única entrada apropriada ao dispositivo (toque ou mouse), nunca ambas
  • Furtividade anti-bot--stealth opcional mascara as marcas usuais de automação (navigator.webdriver, etc.); --stealth-max adiciona evasões de headless/datacenter (client hints de user-agent coerentes, um fornecedor WebGL plausível, métricas de dispositivo realistas) — em um container headless, isso reduziu pela metade a pontuação de headless do CreepJS
  • Suporte a proxy — Roteie cada navegador por um proxy upstream com GDD_PROXY (com autenticação opcional)
  • Reescrita de cabeçalhosgdd_set_headers pode remover X-Frame-Options/CSP frame-ancestors para carregar um site em um iframe, ou adicionar/substituir cabeçalhos de resposta
  • Emulação de dispositivo — Tamanho de tela, DPR, toque, user-agent, geolocalização, fuso horário, idioma
  • Controle de rede — Simule 4G, Fast 3G, Slow 3G ou offline por navegador
  • Diagnósticos — Erros de console, tráfego de rede, métricas de desempenho, notificações push
  • Sinalizador de erros — Toda resposta de ferramenta avisa sobre erros de JS em todos os navegadores automaticamente
  • Pronto para Docker — Imagem oficial no GHCR (ghcr.io/cap-of-tea/gdd), listada no MCP Registry
  • Auto-atualização — Verificação de versão integrada e atualização com um comando

Ferramentas MCP (39)

Gerenciamento de Players

FerramentaDescrição
gdd_add_playersAdiciona N instâncias de navegador com preset de dispositivo opcional
gdd_remove_playerRemove uma instância de navegador pelo ID do player
gdd_list_windowsLista todos os navegadores ativos com o estado atual

Navegação

FerramentaDescrição
gdd_navigateNavega para uma URL
gdd_waitAguarda um seletor CSS aparecer (com timeout)
gdd_reloadRecarrega a página (hard=true ignora o cache)
gdd_backNavega para trás
gdd_forwardNavega para frente

Interação

FerramentaDescrição
gdd_tapToca em um elemento por seletor CSS ou coordenadas; envia uma única entrada apropriada ao dispositivo (toque em dispositivos de toque, mouse em desktop), nunca ambas. humanize=true adiciona um caminho contínuo de cursor semelhante ao humano
gdd_swipeGesto de deslizar (cima/baixo/esquerda/direita)
gdd_dragArrasta um elemento para (x, y) ou sobre outro elemento via eventos reais de ponteiro (aciona dnd-kit e drag-and-drop HTML5)
gdd_scrollRola a página ou um elemento
gdd_typeDigita texto com pressionamentos de tecla reais e confiáveis (CDP dispatchKeyEvent — máscaras, autocompletar e maxlength se comportam como para um usuário real; funciona em contenteditable). Os códigos de tecla físicos seguem o layout emulado (US/RU/DE/FR); humanize=true adiciona variação por tecla; paste=true insere de uma vez
gdd_pressPressiona uma tecla única ou atalho (Enter, Tab, Escape, setas, F1–F12 ou um caractere) com modificadores opcionais (Control/Alt/Shift/Meta); teclas de caracteres seguem o layout emulado
gdd_hoverPassa o mouse sobre um elemento. humanize=true adiciona um caminho contínuo de cursor semelhante ao humano
gdd_selectSeleciona uma opção no dropdown <select>
gdd_dialogLida com diálogos JS alert/confirm/prompt

Leitura e Screenshots

FerramentaDescrição
gdd_readLê o conteúdo de texto de um elemento
gdd_read_allLê o texto de todos os elementos correspondentes
gdd_screenshotCaptura screenshot JPEG na resolução de pixels CSS

Emulação

FerramentaDescrição
gdd_set_deviceDefine preset de dispositivo (22 dispositivos: celulares, tablets, desktops)
gdd_set_viewportDefine dimensões personalizadas de viewport
gdd_set_locationDefine geolocalização, fuso horário e localidade
gdd_set_networkDefine condições de rede (4G, 3G, offline)
gdd_set_languageDefine o idioma do navegador
gdd_set_headersReescreve cabeçalhos de resposta — remove X-Frame-Options/CSP para permitir framing

Estado e Diagnósticos

FerramentaDescrição
gdd_get_stateEstado do navegador: URL, título, dispositivo, status de autenticação
gdd_get_consoleSaída do console e exceções não capturadas
gdd_get_networkRequisições de rede com tempo e status
gdd_get_notificationsNotificações push recebidas
gdd_get_performanceMétricas de desempenho (heap JS, nós do DOM, FPS)
gdd_clear_logsLimpar logs do console e/ou de rede

Autenticação e Execução

FerramentaDescrição
gdd_quick_authRegistrar e fazer login automaticamente com credenciais geradas
gdd_execute_jsExecutar JavaScript e retornar o resultado

Armazenamento do Navegador

FerramentaDescrição
gdd_storageLer/gravar/limpar localStorage/sessionStorage
gdd_cookiesLer ou limpar cookies do navegador

Ajuda e Atualizações

FerramentaDescrição
gdd_get_manualManual completo do GDD para autoaprendizado de IA
gdd_check_updateVerificar se há versões mais recentes
gdd_updateBaixar e instalar atualização (reinicia o GDD)

Predefinições de Dispositivo (22)

Smartphones (11)

DispositivoResoluçãoEscalaToque
iPhone SE375 x 6672.0xSim
iPhone 14390 x 8443.0xSim
iPhone 15 Pro393 x 8523.0xSim
iPhone 15 Pro Max430 x 9323.0xSim
iPhone 16 Pro402 x 8743.0xSim
iPhone 16 Pro Max440 x 9563.0xSim
Pixel 9412 x 9152.625xSim
Pixel 9 Pro412 x 9152.625xSim
Galaxy S24360 x 7803.0xSim
Galaxy S24 Ultra412 x 9153.0xSim
OnePlus 12412 x 9153.5xSim

Tablets (6)

DispositivoResoluçãoEscala
iPad Mini744 x 11332.0x
iPad Air820 x 11802.0x
iPad Pro 11"834 x 11942.0x
iPad Pro 13"1024 x 13662.0x
Galaxy Tab S9800 x 12802.0x
Pixel Tablet800 x 12802.0x

Desktops (5)

DispositivoResoluçãoEscala
Laptop HD1366 x 7681.0x
Laptop HiDPI1440 x 9002.0x
Desktop 1080p1920 x 10801.0x
Desktop 1440p2560 x 14401.0x
Desktop 4K3840 x 21602.0x

Arquitetura

Client (AI agent / curl / script)
         │ POST /mcp (JSON-RPC 2.0)
         ▼
    McpServer (:9700)
    Streamable HTTP + SSE
         │
         ▼
    McpToolRegistry (39 tools)
    Player · Navigation · Interaction · Read
    Emulation · Auth · State · Diagnostics
         │
         ▼
    IPlayerManager
    MainViewModel (WPF) / DesktopPlayerManager (Avalonia) / HeadlessPlayerManager
         │
         ▼
    IBrowserEngine Instances
    WebView2 (Win GUI)  |  Playwright (Desktop GUI + headed/headless server)
    Each: own profile, CDP session, emulation

Edições

O GDD é distribuído como três aplicativos sobre um núcleo compartilhado. As duas GUIs diferem apenas no toolkit de desktop (WebView2 no Windows, Avalonia no Linux/macOS); todas as três expõem as mesmas 39 ferramentas MCP.

GUI WindowsGUI DesktopServidor
BinárioGDD.exeGDD.DesktopGDD.Headless (adicione --headless para sem janelas)
EngineWebView2Playwright (com janela)Playwright (com/sem janela)
UIParede de vídeo WPFParede de vídeo Avalonianenhum — apenas API HTTP
Porta MCP970098009700
PlataformasWindowsLinux, macOSWindows, Linux, macOS

Pilha de Tecnologias

CamadaTecnologia
Runtime.NET 8.0 (autocontido)
UI (Windows)WPF + CommunityToolkit.Mvvm
UI (Linux/macOS)Avalonia + CommunityToolkit.Mvvm
Navegador (GUI Windows)Microsoft WebView2
Navegador (GUI Desktop + Servidor)Microsoft Playwright
ProtocoloMCP (Model Context Protocol)
Controle do NavegadorChrome DevTools Protocol (CDP)
LoggingSerilog
Estrutura do Projeto
BrowserXn.sln
├── src/
│   ├── GDD.Core/              ← Shared library (net8.0)
│   │   ├── Abstractions/      ← IBrowserEngine, IPlayerManager, ...
│   │   ├── Mcp/               ← MCP server, tools, protocol
│   │   ├── Models/            ← Device, Location, Network presets
│   │   ├── Services/          ← CDP, Emulation, Monitoring services
│   │   └── Collections/       ← RingBuffer
│   ├── BrowserXn/             ← Windows GUI (WPF + WebView2)
│   │   ├── Engines/           ← WebView2ControlAdapter
│   │   ├── ViewModels/        ← MVVM (MainViewModel : IPlayerManager)
│   │   ├── Views/             ← XAML + VideoWallPanel
│   │   └── ...
│   ├── GDD.Desktop/           ← Linux/macOS GUI (Avalonia + Playwright)
│   │   ├── Engines/           ← PlaywrightHeadedEngine (headed, parked off-screen)
│   │   ├── ViewModels/        ← MainViewModel (DesktopPlayerManager)
│   │   ├── Views/             ← AXAML + VideoWallPanel
│   │   └── Scripts/           ← mcp-proxy.sh, setup-macos.sh, install-deps.sh
│   └── GDD.Headless/          ← Cross-platform server (Playwright)
│       ├── Engines/           ← PlaywrightEngine
│       ├── Platform/          ← HeadlessPlayerManager
│       └── Scripts/           ← mcp-proxy.sh, mcp-proxy.ps1
└── .github/workflows/         ← CI/CD (8 build targets + auto-release)

Configuração

appsettings.json ao lado do executável:

{
  "GDD": {
    "FrontendUrl": "about:blank",
    "BackendUrl": "http://localhost:8080/api/v1",
    "BotToken": "",
    "McpPort": 9700,
    "DataFolderRoot": "",
    "Stealth": false
  }
}
ChaveDescriçãoPadrão
FrontendUrlURL padrão para novos navegadoresabout:blank
BackendUrlAPI de backend para serviço de autenticaçãohttp://localhost:8080/api/v1
BotTokenToken do bot do Telegram (para testes de TG)
McpPortPorta do servidor MCP (fallback automático +1..+9)9700
DataFolderRootRaiz de armazenamento de perfis do navegador%LOCALAPPDATA%\GDD\Profiles (Win), ~/.local/share/GDD/Profiles (Linux/macOS)
HeadedJanelas visíveis do navegadortrue (substituir com --headless)
StealthMáscara anti-bot opcional — inicia o Chromium com AutomationControlled desabilitado e oculta as indicações usuais de automação (navigator.webdriver, etc.). Apenas engines Playwright (GDD.Desktop, Servidor GDD)false

Flags de linha de comando

FlagDescrição
--headedJanelas visíveis do navegador (padrão)
--headlessSem UI — para CI/CD
--stealthHabilitar máscara anti-bot (mesmo que GDD_STEALTH=true)
--stealth-maxStealth completo — dados de UA com client-hints, spoofing de WebGL/dispositivo/fuso horário; implica --stealth (mesmo que GDD_STEALTH_MAX=true)
--updateVerificar se há uma versão mais recente e instalá-la se disponível
--versionImprimir a versão e sair
--helpMostrar uso e sair

Variáveis de ambiente

Úteis para Docker e CI, onde um arquivo appsettings.json é inconveniente:

VariávelDescrição
GDD_STEALTHtrue/1 para habilitar máscara anti-bot (mesmo que --stealth)
GDD_STEALTH_MAXtrue/1 para stealth completo (mesmo que --stealth-max)
GDD_PROXYProxy upstream para cada navegador, ex.: http://host:3128 ou socks5://host:1080 (Servidor / engines Playwright)
GDD_PROXY_USER / GDD_PROXY_PASSCredenciais para um proxy autenticado
GDD_CHROME_CHANNELIniciar uma compilação do Chrome instalada (ex.: chrome, chrome-beta) em vez do Chromium incluído
GDD_TRACEtrue/1 para logging de trace detalhado
Compilando a partir do Código Fonte

Requer .NET 8 SDK.

# Windows GUI (requires Windows 10/11 + WebView2)
dotnet publish src/BrowserXn/BrowserXn.csproj -c Release -p:PublishSingleFile=true -o ./publish/win-gui

# Cross-platform headless
dotnet publish src/GDD.Headless/GDD.Headless.csproj -c Release -r linux-x64 --self-contained -o ./publish/linux-x64
dotnet publish src/GDD.Headless/GDD.Headless.csproj -c Release -r osx-arm64 --self-contained -o ./publish/osx-arm64
dotnet publish src/GDD.Headless/GDD.Headless.csproj -c Release -r win-x64 --self-contained -o ./publish/win-x64

O Chromium é instalado automaticamente na primeira execução.


Documentação

Privacidade

Política de Privacidade

O GDD roda inteiramente na sua máquina local. Sem telemetria, sem análises, sem coleta de dados.

  • Nenhum dado sai da sua máquina — todos os perfis de navegador, capturas de tela, logs e cookies permanecem no armazenamento local
  • Perfis de navegador — armazenados em %LOCALAPPDATA%\GDD\Profiles (Windows) ou ~/.local/share/GDD/Profiles (Linux/macOS)
  • Sem serviços de terceiros — o GDD não entra em contato com nenhuma API externa, exceto o GitHub Releases para verificações de atualização opcionais
  • Verificações de atualizaçãogdd_check_update faz uma única solicitação somente leitura a api.github.com. Para desativar, não chame a ferramenta ou defina CheckForUpdates: false em appsettings.json
  • Servidor MCP — escuta apenas em localhost (porta padrão 9700), nunca exposto à rede

Contato: 2vsmirnov@gmail.com


Licença

imVS©, livre para uso pessoal.

Código-fonte disponível — Não comercial. Livre para uso pessoal, educacional e pesquisa. Uso comercial requer licença paga. Veja LICENSE para termos completos.

Licenciamento comercial: 2vsmirnov@gmail.com