Skill generator com lobby WebSocket auto-spawn. Grave um fluxo
clicando na página, edite no wizard, baixe um .skill (zip plug-and-play).
Qualquer agente de código (Claude Code, Cursor, Codex, etc.) pode rodar a
skill com node run.js — a primeira chamada acorda a lobby local
automaticamente; chamadas seguintes são instantâneas.
Status: v1.0 — refatoração para arquitetura "skill generator" feita. Veja
AGENTS.mdse você for um agente LLM trabalhando no repo, eREFACTOR_REPORT.mdpara o que mudou nesta versão.
┌────────────────────────────────────────────────┐
│ Lobby (Node :7878) │
│ HTTP + WS no mesmo listener │
│ ─ POST /run ← skill cliente │
│ ─ POST /skills/zip ← wizard (extensão) │
│ ─ GET /health ← bootstrap │
└─────────────┬───────────────────┬──────────────┘
│ WS (full duplex) │ HTTP
┌──────────▼─────────┐ ┌─────▼─────────────┐
│ Chrome extension │ │ Skill clients │
│ (offscreen + bg) │ │ (run.js) │
└────────────────────┘ └───────────────────┘
- A lobby é um processo Node mínimo. Auto-spawn detached na primeira
chamada de qualquer skill (via
lobby-bootstrap.jsno zip). - A extensão mantém um WebSocket aberto com a lobby (offscreen document, MV3-safe) e executa fluxos com synthetic events / CDP.
- Cada skill é um zip
.skillplug-and-play comrun.js,flow.json,SKILL.md,lobby-bootstrap.js,meta.json,package.json,INSTALL.md— semnpm install.
Multiplexação por runId: várias skills podem rodar concorrentemente
porque cada flow:run/flow:result carrega o mesmo runId.
- Node.js 20+ (use o
.nvmrc:nvm use) - pnpm 11+ (
corepack enable && corepack prepare pnpm@11.0.9 --activate) - Chrome 116+ (precisa de
chrome.offscreen)
git clone <este-repo> agent-ask-anywhere
cd agent-ask-anywhere
pnpm installAbra dois terminais:
# terminal 1 — lobby (HTTP + WebSocket no :7878)
pnpm dev:lobby# terminal 2 — extensão (WXT em modo dev)
pnpm dev:extensionCarregue a extensão no Chrome:
chrome://extensions/→ ative Developer mode- Load unpacked → aponte para
packages/extension/.output/chrome-mv3/ - Quando o popup mostrar "Connected to lobby :7878", está pronto.
- Clique no ícone da extensão → ● Start recording
- Faça o fluxo na página (clicks, typing, navegação são gravados)
- ■ Stop recording — um draft é salvo em
~/.local/share/agent-ask-anywhere/skills/draft-<timestamp>/
- Abra Options → Skill wizard (link no popup)
- Selecione o draft. O wizard sugere slots automaticamente para cada
type-step com valor literal — você pode renomeá-los, alterar tipo (string/choice/dynamic), marcar/desmarcar required, ou adicionar/remover. - Edite nome (kebab-case), descrição,
SKILL.mdbody. - Generate .skill (download) — emite um zip plug-and-play. Save draft salva no fs sem baixar.
Distribua o zip; descompacte; execute:
node my-skill/run.js '{"recipient":"joao","message":"hello"}'Na primeira chamada o lobby-bootstrap.js checa :7878/health. Se a
lobby não estiver de pé, ele tenta spawnar via AAA_LOBBY_BIN ou
~/.local/bin/aaa-lobby. Veja INSTALL.md no zip para detalhes.
| Var | Default | Uso |
|---|---|---|
AAA_LOBBY_HOST |
127.0.0.1 |
Host da lobby |
AAA_LOBBY_PORT |
7878 |
Porta única (HTTP+WS) |
AAA_SKILLS_ROOT |
~/.local/share/agent-ask-anywhere/skills |
Onde drafts/skills moram |
AAA_LOBBY_LOCK |
~/.local/share/agent-ask-anywhere/lobby.lock |
Lock-file para spawn race |
AAA_LOBBY_BIN |
— | Caminho absoluto para o binário da lobby (skills usam) |
AAA_RUN_TIMEOUT_MS |
300000 |
Timeout por run (5min) |
LOG_LEVEL |
info |
pino |
| Problema | Causa provável | O que fazer |
|---|---|---|
| Popup "Disconnected" | Lobby não rodando | pnpm dev:lobby (ou skill auto-spawna na 1ª chamada) |
run.js exit 3 |
Lobby binário não encontrado | Defina AAA_LOBBY_BIN ou copie a lobby pra ~/.local/bin/aaa-lobby |
run.js exit 4 com 503 |
Lobby up mas extensão desconectada | Recarregue a extensão; cheque popup |
Lock-file órfão depois de kill -9 |
SIGKILL não roda exit-handler | Próxima skill detecta via process.kill(pid,0) e remove |
| Captcha bloqueando | Heurística pausou o fluxo | Resolva manualmente, replay retoma (timeout 5min) |
pnpm install
pnpm dev:lobby # roda a lobby (HTTP+WS :7878)
pnpm dev:extension # WXT dev mode
pnpm typecheck # tsc --noEmit em todos os packages
pnpm lint # biome check
pnpm test # node:test em shared/lobby
pnpm build # build de tudoMIT — use, modifique, redistribua. Apenas mantenha o aviso de copyright.
