edusquads-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/edusquads/SKILL.md +212 -0
- package/CLAUDE.md +40 -0
- package/README.md +92 -0
- package/_edusquads/evidencias/EVIDENCIA-MODELO.md +33 -0
- package/_edusquads/memoria/USUARIO-ATIVO.md +42 -0
- package/_edusquads/runs/RUN-MODELO.md +50 -0
- package/_edusquads/runs/RUNS-INDEX.md +25 -0
- package/base/catalogo-dos-160-agentes.md +175 -0
- package/base/comandos/edusquads-comandos.md +46 -0
- package/base/matriz-mestre-dos-16-squads.md +1147 -0
- package/base/matriz-mestre-dos-especialistas.md +579 -0
- package/base/modelos/modelo-de-agente.md +62 -0
- package/base/modelos/modelo-de-skill.md +55 -0
- package/base/paridade-opensquad.md +49 -0
- package/base/playbooks/investigacao/COMO-EXECUTAR.md +51 -0
- package/base/playbooks/investigacao/ESTRUTURACAO.md +28 -0
- package/base/playbooks/investigacao/PLAYBOOK-GERAL.md +34 -0
- package/base/playbooks/investigacao/instagram.md +23 -0
- package/base/playbooks/investigacao/linkedin.md +23 -0
- package/base/playbooks/investigacao/x-twitter.md +23 -0
- package/base/playbooks/investigacao/youtube.md +23 -0
- package/base/protocolo-memoria-usuario.md +50 -0
- package/base/protocolo-playwright-edusquads.md +48 -0
- package/base/scripts/edusquads_concluir_investigacao.py +356 -0
- package/base/scripts/edusquads_estruturar_coleta.py +237 -0
- package/base/scripts/edusquads_investigar.py +279 -0
- package/base/visao-geral.md +46 -0
- package/bin/edusquads.js +146 -0
- package/carrosseis.md +988 -0
- package/especialistas/branding/marty-neumeier.md +39 -0
- package/especialistas/copy/joanna-wiebe.md +41 -0
- package/especialistas/copy/russell-brunson.md +41 -0
- package/especialistas/mensagem/donald-miller.md +41 -0
- package/especialistas/posicionamento/april-dunford.md +39 -0
- package/especialistas/trafego-pago/pedro-sobral.md +41 -0
- package/package.json +31 -0
- package/pesquisa/web/april-dunford.md +37 -0
- package/pesquisa/web/claude-code-comandos.md +30 -0
- package/pesquisa/web/donald-miller.md +29 -0
- package/pesquisa/web/joanna-wiebe.md +29 -0
- package/pesquisa/web/marty-neumeier.md +37 -0
- package/pesquisa/web/opensquad.md +23 -0
- package/pesquisa/web/pedro-sobral.md +29 -0
- package/pesquisa/web/pendentes/biblioteca-pendente.md +20 -0
- package/pesquisa/web/russell-brunson.md +30 -0
- package/squads/01-estrategia/agentes/arquiteto-de-diferencial.md +62 -0
- package/squads/01-estrategia/agentes/auditor-de-coerencia-estrategica.md +62 -0
- package/squads/01-estrategia/agentes/especialista-em-posicionamento.md +61 -0
- package/squads/01-estrategia/agentes/estrategista-de-categoria.md +60 -0
- package/squads/01-estrategia/agentes/estrategista-de-mercado.md +61 -0
- package/squads/01-estrategia/agentes/planejador-de-tese.md +60 -0
- package/squads/01-estrategia/agentes/priorizador-estrategico.md +61 -0
- package/squads/01-estrategia/agentes/revisor-estrategico.md +65 -0
- package/squads/01-estrategia/agentes/sintetizador-estrategico.md +62 -0
- package/squads/01-estrategia/agentes/tradutor-estrategico-para-squads.md +62 -0
- package/squads/01-estrategia/squad.md +70 -0
- package/squads/02-pesquisa/agentes/analista-de-concorrencia.md +62 -0
- package/squads/02-pesquisa/agentes/analista-de-tendencias.md +60 -0
- package/squads/02-pesquisa/agentes/auditor-de-suficiencia-de-pesquisa.md +61 -0
- package/squads/02-pesquisa/agentes/bibliotecario-de-evidencias.md +62 -0
- package/squads/02-pesquisa/agentes/curador-de-fontes.md +61 -0
- package/squads/02-pesquisa/agentes/minerador-de-reviews.md +60 -0
- package/squads/02-pesquisa/agentes/organizador-de-insights.md +61 -0
- package/squads/02-pesquisa/agentes/pesquisador-de-mercado.md +61 -0
- package/squads/02-pesquisa/agentes/pesquisador-de-voz-do-cliente.md +63 -0
- package/squads/02-pesquisa/agentes/revisor-de-pesquisa.md +61 -0
- package/squads/02-pesquisa/squad.md +68 -0
- package/squads/03-copy/agentes/copywriter-de-anuncios.md +65 -0
- package/squads/03-copy/agentes/copywriter-de-email.md +65 -0
- package/squads/03-copy/agentes/copywriter-de-landing-page.md +66 -0
- package/squads/03-copy/agentes/critico-de-conversao.md +65 -0
- package/squads/03-copy/agentes/editor-de-copy-de-conversao.md +63 -0
- package/squads/03-copy/agentes/especialista-em-cta.md +65 -0
- package/squads/03-copy/agentes/especialista-em-headlines.md +63 -0
- package/squads/03-copy/agentes/pesquisador-de-mensagem.md +63 -0
- package/squads/03-copy/agentes/revisor-chefe-de-copy.md +65 -0
- package/squads/03-copy/agentes/roteirista-de-funil.md +63 -0
- package/squads/03-copy/skills/estruturar-hook-story-offer.md +61 -0
- package/squads/03-copy/squad.md +73 -0
- package/squads/04-conteudo/agentes/curador-de-temas.md +60 -0
- package/squads/04-conteudo/agentes/especialista-em-reaproveitamento.md +60 -0
- package/squads/04-conteudo/agentes/estrategista-de-conteudo.md +61 -0
- package/squads/04-conteudo/agentes/organizador-de-calendario.md +61 -0
- package/squads/04-conteudo/agentes/otimizador-editorial.md +62 -0
- package/squads/04-conteudo/agentes/planejador-editorial.md +61 -0
- package/squads/04-conteudo/agentes/redator-de-conteudo-seo.md +61 -0
- package/squads/04-conteudo/agentes/redator-social.md +61 -0
- package/squads/04-conteudo/agentes/revisor-de-conteudo.md +63 -0
- package/squads/04-conteudo/agentes/roteirista-de-conteudo.md +61 -0
- package/squads/04-conteudo/squad.md +70 -0
- package/squads/05-design/agentes/auditor-de-coerencia-visual.md +60 -0
- package/squads/05-design/agentes/designer-de-apresentacoes.md +62 -0
- package/squads/05-design/agentes/designer-de-criativos.md +90 -0
- package/squads/05-design/agentes/designer-de-landing-page.md +62 -0
- package/squads/05-design/agentes/designer-visual.md +72 -0
- package/squads/05-design/agentes/diretor-de-arte.md +71 -0
- package/squads/05-design/agentes/especialista-em-sistemas-visuais.md +60 -0
- package/squads/05-design/agentes/revisor-de-design.md +75 -0
- package/squads/05-design/agentes/revisor-de-hierarquia-visual.md +60 -0
- package/squads/05-design/agentes/tradutor-de-marca-para-design.md +62 -0
- package/squads/05-design/squad.md +67 -0
- package/squads/06-branding/agentes/arquiteto-de-diferenciacao.md +62 -0
- package/squads/06-branding/agentes/auditor-de-coerencia-de-marca.md +62 -0
- package/squads/06-branding/agentes/designer-de-narrativa-de-marca.md +62 -0
- package/squads/06-branding/agentes/estrategista-de-marca.md +62 -0
- package/squads/06-branding/agentes/guardiao-de-consistencia.md +62 -0
- package/squads/06-branding/agentes/guardiao-de-tom.md +62 -0
- package/squads/06-branding/agentes/planejador-de-identidade.md +60 -0
- package/squads/06-branding/agentes/revisor-de-distincao.md +60 -0
- package/squads/06-branding/agentes/revisor-de-marca.md +64 -0
- package/squads/06-branding/agentes/unificador-de-linguagem.md +60 -0
- package/squads/06-branding/squad.md +67 -0
- package/squads/07-ux-experiencia/agentes/analista-de-friccao.md +62 -0
- package/squads/07-ux-experiencia/agentes/arquiteto-de-informacao.md +60 -0
- package/squads/07-ux-experiencia/agentes/critico-de-jornada.md +62 -0
- package/squads/07-ux-experiencia/agentes/especialista-em-microcopy.md +63 -0
- package/squads/07-ux-experiencia/agentes/otimizador-de-formularios.md +62 -0
- package/squads/07-ux-experiencia/agentes/planejador-de-onboarding.md +62 -0
- package/squads/07-ux-experiencia/agentes/revisor-de-clareza-de-interface.md +60 -0
- package/squads/07-ux-experiencia/agentes/revisor-de-fluxo.md +60 -0
- package/squads/07-ux-experiencia/agentes/revisor-de-ux.md +62 -0
- package/squads/07-ux-experiencia/agentes/ux-writer.md +62 -0
- package/squads/07-ux-experiencia/squad.md +68 -0
- package/squads/08-growth/agentes/analista-de-alavancas.md +63 -0
- package/squads/08-growth/agentes/analista-de-gargalos.md +63 -0
- package/squads/08-growth/agentes/especialista-em-conversao.md +65 -0
- package/squads/08-growth/agentes/estrategista-de-growth.md +65 -0
- package/squads/08-growth/agentes/integrador-de-funil.md +64 -0
- package/squads/08-growth/agentes/leitor-de-performance-de-crescimento.md +63 -0
- package/squads/08-growth/agentes/planejador-de-testes.md +63 -0
- package/squads/08-growth/agentes/priorizador-de-experimentos.md +63 -0
- package/squads/08-growth/agentes/revisor-de-growth.md +64 -0
- package/squads/08-growth/agentes/revisor-de-hipoteses.md +64 -0
- package/squads/08-growth/squad.md +69 -0
- package/squads/09-seo/agentes/analista-de-intencao-de-busca.md +60 -0
- package/squads/09-seo/agentes/auditor-de-seo.md +60 -0
- package/squads/09-seo/agentes/criador-de-brief-seo.md +61 -0
- package/squads/09-seo/agentes/estrategista-de-seo.md +61 -0
- package/squads/09-seo/agentes/organizador-de-arquitetura-tematica.md +61 -0
- package/squads/09-seo/agentes/pesquisador-de-palavras-chave.md +60 -0
- package/squads/09-seo/agentes/planejador-de-clusters.md +61 -0
- package/squads/09-seo/agentes/planejador-de-links-internos.md +60 -0
- package/squads/09-seo/agentes/revisor-de-seo.md +61 -0
- package/squads/09-seo/agentes/revisor-de-serp-fit.md +60 -0
- package/squads/09-seo/squad.md +67 -0
- package/squads/10-comercial/agentes/arquiteto-de-narrativa-comercial.md +65 -0
- package/squads/10-comercial/agentes/copywriter-de-follow-up-comercial.md +63 -0
- package/squads/10-comercial/agentes/criador-de-soundbites-comerciais.md +62 -0
- package/squads/10-comercial/agentes/estrategista-comercial.md +65 -0
- package/squads/10-comercial/agentes/estruturador-de-proposta.md +63 -0
- package/squads/10-comercial/agentes/organizador-de-materiais-comerciais.md +62 -0
- package/squads/10-comercial/agentes/redator-de-pitch.md +63 -0
- package/squads/10-comercial/agentes/revisor-comercial.md +65 -0
- package/squads/10-comercial/agentes/revisor-de-objecoes.md +63 -0
- package/squads/10-comercial/agentes/tradutor-de-posicionamento-para-vendas.md +62 -0
- package/squads/10-comercial/squad.md +70 -0
- package/squads/11-oferta-monetizacao/agentes/analista-de-logica-de-monetizacao.md +60 -0
- package/squads/11-oferta-monetizacao/agentes/arquiteto-de-oferta.md +62 -0
- package/squads/11-oferta-monetizacao/agentes/designer-de-bonus.md +60 -0
- package/squads/11-oferta-monetizacao/agentes/especialista-em-garantia.md +61 -0
- package/squads/11-oferta-monetizacao/agentes/estrategista-de-monetizacao.md +62 -0
- package/squads/11-oferta-monetizacao/agentes/estruturador-de-pacotes.md +61 -0
- package/squads/11-oferta-monetizacao/agentes/planejador-de-escada-de-valor.md +61 -0
- package/squads/11-oferta-monetizacao/agentes/planejador-de-progressao.md +60 -0
- package/squads/11-oferta-monetizacao/agentes/revisor-de-oferta.md +61 -0
- package/squads/11-oferta-monetizacao/agentes/revisor-de-stack-de-valor.md +60 -0
- package/squads/11-oferta-monetizacao/squad.md +69 -0
- package/squads/12-operacoes/agentes/arquiteto-de-operacoes.md +61 -0
- package/squads/12-operacoes/agentes/auditor-de-processo.md +60 -0
- package/squads/12-operacoes/agentes/criador-de-checklist.md +60 -0
- package/squads/12-operacoes/agentes/documentador-operacional.md +62 -0
- package/squads/12-operacoes/agentes/estruturador-de-passagens-entre-squads.md +61 -0
- package/squads/12-operacoes/agentes/mapeador-de-fluxos.md +60 -0
- package/squads/12-operacoes/agentes/organizador-de-playbooks.md +60 -0
- package/squads/12-operacoes/agentes/redator-de-sop.md +61 -0
- package/squads/12-operacoes/agentes/revisor-operacional.md +64 -0
- package/squads/12-operacoes/agentes/verificador-de-governanca.md +61 -0
- package/squads/12-operacoes/squad.md +64 -0
- package/squads/13-qualidade/agentes/auditor-de-consistencia.md +62 -0
- package/squads/13-qualidade/agentes/auditor-de-friccao.md +62 -0
- package/squads/13-qualidade/agentes/critico-de-conversao.md +65 -0
- package/squads/13-qualidade/agentes/guardiao-de-aprovacao-final.md +62 -0
- package/squads/13-qualidade/agentes/identificador-de-risco-de-entrega.md +62 -0
- package/squads/13-qualidade/agentes/lider-de-qualidade.md +62 -0
- package/squads/13-qualidade/agentes/revisor-de-clareza.md +61 -0
- package/squads/13-qualidade/agentes/revisor-de-coerencia-de-mensagem.md +62 -0
- package/squads/13-qualidade/agentes/revisor-de-prontidao.md +62 -0
- package/squads/13-qualidade/agentes/verificador-de-logica.md +60 -0
- package/squads/13-qualidade/squad.md +63 -0
- package/squads/14-automacao-sistemas/agentes/arquiteto-de-sistema.md +61 -0
- package/squads/14-automacao-sistemas/agentes/auditor-de-coerencia-sistemica.md +62 -0
- package/squads/14-automacao-sistemas/agentes/curador-de-matrizes.md +60 -0
- package/squads/14-automacao-sistemas/agentes/designer-de-orquestracao.md +61 -0
- package/squads/14-automacao-sistemas/agentes/estruturador-de-skills.md +61 -0
- package/squads/14-automacao-sistemas/agentes/gestor-de-estado.md +61 -0
- package/squads/14-automacao-sistemas/agentes/guardiao-da-estrutura-do-framework.md +62 -0
- package/squads/14-automacao-sistemas/agentes/integrador-de-fluxos.md +61 -0
- package/squads/14-automacao-sistemas/agentes/planejador-de-automacao.md +61 -0
- package/squads/14-automacao-sistemas/agentes/revisor-de-sistema.md +62 -0
- package/squads/14-automacao-sistemas/squad.md +66 -0
- package/squads/15-executivo-pmo/agentes/coordenador-de-pmo.md +61 -0
- package/squads/15-executivo-pmo/agentes/definidor-de-escopo.md +62 -0
- package/squads/15-executivo-pmo/agentes/estrategista-executivo.md +62 -0
- package/squads/15-executivo-pmo/agentes/guardiao-de-escopo.md +61 -0
- package/squads/15-executivo-pmo/agentes/organizador-de-ativacao-de-squads.md +61 -0
- package/squads/15-executivo-pmo/agentes/planejador-de-prioridades.md +61 -0
- package/squads/15-executivo-pmo/agentes/registrador-de-decisoes.md +61 -0
- package/squads/15-executivo-pmo/agentes/revisor-de-dependencias.md +60 -0
- package/squads/15-executivo-pmo/agentes/revisor-executivo.md +63 -0
- package/squads/15-executivo-pmo/agentes/sequenciador-de-execucao.md +60 -0
- package/squads/15-executivo-pmo/squad.md +66 -0
- package/squads/16-trafego-pago/agentes/analista-de-metricas-e-otimizacao.md +62 -0
- package/squads/16-trafego-pago/agentes/analista-de-publicos.md +61 -0
- package/squads/16-trafego-pago/agentes/auditor-de-contas-e-campanhas.md +60 -0
- package/squads/16-trafego-pago/agentes/escalador-de-campanhas.md +61 -0
- package/squads/16-trafego-pago/agentes/especialista-em-criativos-de-performance.md +61 -0
- package/squads/16-trafego-pago/agentes/especialista-em-estrutura-de-funil-pago.md +63 -0
- package/squads/16-trafego-pago/agentes/estrategista-de-trafego-pago.md +67 -0
- package/squads/16-trafego-pago/agentes/gestor-de-remarketing.md +63 -0
- package/squads/16-trafego-pago/agentes/planejador-de-campanhas.md +61 -0
- package/squads/16-trafego-pago/agentes/revisor-de-performance.md +62 -0
- package/squads/16-trafego-pago/skills/calcular-faixa-de-investimento.md +61 -0
- package/squads/16-trafego-pago/squad.md +73 -0
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Automação Fase 3 do /edusquads investigar.
|
|
4
|
+
|
|
5
|
+
Escopo desta versão:
|
|
6
|
+
- Gera run_id incremental por data
|
|
7
|
+
- Seleciona playbook por plataforma
|
|
8
|
+
- Cria arquivo de evidência automaticamente
|
|
9
|
+
- Atualiza RUNS-INDEX.md
|
|
10
|
+
- Cria/atualiza arquivo de run com trilha da investigação
|
|
11
|
+
|
|
12
|
+
Observação:
|
|
13
|
+
A navegação web efetiva continua sendo executada pelo runtime do agente
|
|
14
|
+
(browser tools/Playwright da stack). Este script automatiza a camada
|
|
15
|
+
operacional de artefatos e rastreabilidade.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
import argparse
|
|
21
|
+
import datetime as dt
|
|
22
|
+
import re
|
|
23
|
+
from pathlib import Path
|
|
24
|
+
|
|
25
|
+
ROOT = Path(__file__).resolve().parents[2]
|
|
26
|
+
RUNS_DIR = ROOT / "_edusquads" / "runs"
|
|
27
|
+
EVID_DIR = ROOT / "_edusquads" / "evidencias"
|
|
28
|
+
PLAYBOOK_DIR = ROOT / "base" / "playbooks" / "investigacao"
|
|
29
|
+
RUNS_INDEX = RUNS_DIR / "RUNS-INDEX.md"
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def rel(path: Path) -> str:
|
|
33
|
+
return path.relative_to(ROOT).as_posix()
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def detect_platform(target: str, platform_arg: str | None) -> str:
|
|
37
|
+
if platform_arg:
|
|
38
|
+
p = platform_arg.lower().strip()
|
|
39
|
+
aliases = {
|
|
40
|
+
"instagram": "instagram",
|
|
41
|
+
"insta": "instagram",
|
|
42
|
+
"youtube": "youtube",
|
|
43
|
+
"yt": "youtube",
|
|
44
|
+
"linkedin": "linkedin",
|
|
45
|
+
"x": "x-twitter",
|
|
46
|
+
"twitter": "x-twitter",
|
|
47
|
+
"x-twitter": "x-twitter",
|
|
48
|
+
}
|
|
49
|
+
if p in aliases:
|
|
50
|
+
return aliases[p]
|
|
51
|
+
|
|
52
|
+
t = target.lower()
|
|
53
|
+
if "instagram.com" in t:
|
|
54
|
+
return "instagram"
|
|
55
|
+
if "youtube.com" in t or "youtu.be" in t:
|
|
56
|
+
return "youtube"
|
|
57
|
+
if "linkedin.com" in t:
|
|
58
|
+
return "linkedin"
|
|
59
|
+
if "x.com" in t or "twitter.com" in t:
|
|
60
|
+
return "x-twitter"
|
|
61
|
+
return "instagram"
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def next_run_id(today: dt.date) -> str:
|
|
65
|
+
prefix = f"RUN-{today.isoformat()}-"
|
|
66
|
+
max_n = 0
|
|
67
|
+
for p in RUNS_DIR.glob(f"{prefix}*.md"):
|
|
68
|
+
m = re.match(rf"{re.escape(prefix)}(\d{{3}})\.md$", p.name)
|
|
69
|
+
if m:
|
|
70
|
+
max_n = max(max_n, int(m.group(1)))
|
|
71
|
+
return f"{prefix}{max_n + 1:03d}"
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def ensure_dirs() -> None:
|
|
75
|
+
RUNS_DIR.mkdir(parents=True, exist_ok=True)
|
|
76
|
+
EVID_DIR.mkdir(parents=True, exist_ok=True)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def append_runs_index(run_id: str, command: str, objective: str, squads: str, status: str, run_file: str) -> None:
|
|
80
|
+
if not RUNS_INDEX.exists():
|
|
81
|
+
RUNS_INDEX.write_text(
|
|
82
|
+
"# Runs do EduSquads\n\n"
|
|
83
|
+
"Registro cronológico das execuções do sistema `/edusquads`.\n\n"
|
|
84
|
+
"## Tabela de controle\n"
|
|
85
|
+
"| run_id | data | comando | objetivo | squads acionados | status | arquivo |\n"
|
|
86
|
+
"|---|---|---|---|---|---|---|\n",
|
|
87
|
+
encoding="utf-8",
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
content = RUNS_INDEX.read_text(encoding="utf-8")
|
|
91
|
+
date_txt = dt.date.today().isoformat()
|
|
92
|
+
row = f"| {run_id} | {date_txt} | `{command}` | {objective} | {squads} | {status} | `{run_file}` |\n"
|
|
93
|
+
|
|
94
|
+
if row in content:
|
|
95
|
+
return
|
|
96
|
+
|
|
97
|
+
lines = content.splitlines(keepends=True)
|
|
98
|
+
insert_at = len(lines)
|
|
99
|
+
for i, line in enumerate(lines):
|
|
100
|
+
if line.startswith("## Regras de registro"):
|
|
101
|
+
insert_at = i
|
|
102
|
+
break
|
|
103
|
+
|
|
104
|
+
# remove linha em branco imediatamente antes de "## Regras de registro"
|
|
105
|
+
if insert_at > 0 and lines[insert_at - 1].strip() == "":
|
|
106
|
+
del lines[insert_at - 1]
|
|
107
|
+
insert_at -= 1
|
|
108
|
+
|
|
109
|
+
lines.insert(insert_at, row)
|
|
110
|
+
RUNS_INDEX.write_text("".join(lines), encoding="utf-8")
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def create_evidence(run_id: str, platform: str, target: str, objective: str, depth: str, consent: bool) -> Path:
|
|
114
|
+
ev_path = EVID_DIR / f"EVIDENCIA-{run_id}-{platform}.md"
|
|
115
|
+
now = dt.datetime.now().strftime("%Y-%m-%d %H:%M")
|
|
116
|
+
|
|
117
|
+
content = f"""# EVIDENCIA-{run_id}-{platform}
|
|
118
|
+
|
|
119
|
+
## Metadados
|
|
120
|
+
- id_evidencia: EVIDENCIA-{run_id}-{platform}
|
|
121
|
+
- data: {now}
|
|
122
|
+
- run_id: {run_id}
|
|
123
|
+
- comando: /edusquads investigar
|
|
124
|
+
|
|
125
|
+
## Objetivo da investigação
|
|
126
|
+
- {objective}
|
|
127
|
+
|
|
128
|
+
## Entrada usada
|
|
129
|
+
- url/perfil/query: {target}
|
|
130
|
+
- plataforma detectada: {platform}
|
|
131
|
+
- profundidade: {depth}
|
|
132
|
+
|
|
133
|
+
## Playbook aplicado
|
|
134
|
+
- `base/playbooks/investigacao/{platform}.md`
|
|
135
|
+
|
|
136
|
+
## Links visitados
|
|
137
|
+
- {target}
|
|
138
|
+
|
|
139
|
+
## Síntese interpretativa
|
|
140
|
+
- (preencher após investigação de navegação)
|
|
141
|
+
|
|
142
|
+
## Extrações úteis para squads
|
|
143
|
+
- Squad de Estratégia:
|
|
144
|
+
- Squad de Conteúdo:
|
|
145
|
+
- Squad de Copy:
|
|
146
|
+
- Squad de Design:
|
|
147
|
+
|
|
148
|
+
## Limites da evidência
|
|
149
|
+
- Execução inicial automatizada de artefatos; síntese depende da investigação web concluída.
|
|
150
|
+
|
|
151
|
+
## Segurança
|
|
152
|
+
- sessão persistida: {'sim' if consent else 'não'}
|
|
153
|
+
- consentimento explícito registrado: {'sim' if consent else 'não'}
|
|
154
|
+
- dados sensíveis removidos: sim
|
|
155
|
+
"""
|
|
156
|
+
ev_path.write_text(content, encoding="utf-8")
|
|
157
|
+
return ev_path
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def create_run(run_id: str, target: str, objective: str, platform: str, evidence_path: Path) -> Path:
|
|
161
|
+
run_path = RUNS_DIR / f"{run_id}.md"
|
|
162
|
+
date_txt = dt.date.today().isoformat()
|
|
163
|
+
content = f"""# {run_id}
|
|
164
|
+
|
|
165
|
+
## Metadados
|
|
166
|
+
- run_id: {run_id}
|
|
167
|
+
- data: {date_txt}
|
|
168
|
+
- comando: `/edusquads investigar`
|
|
169
|
+
- solicitacao_original: investigação automatizada para {target}
|
|
170
|
+
- status: em-andamento
|
|
171
|
+
|
|
172
|
+
## Contexto aplicado
|
|
173
|
+
- memória do usuário lida: sim
|
|
174
|
+
- arquivos de referência usados:
|
|
175
|
+
- `base/protocolo-playwright-edusquads.md`
|
|
176
|
+
- `base/playbooks/investigacao/{platform}.md`
|
|
177
|
+
|
|
178
|
+
## Plano executado
|
|
179
|
+
1. Detectar plataforma e selecionar playbook.
|
|
180
|
+
2. Criar artefato de evidência com metadados.
|
|
181
|
+
3. Registrar run no índice de execuções.
|
|
182
|
+
4. Executar investigação web e preencher síntese.
|
|
183
|
+
|
|
184
|
+
## Squads e agentes acionados
|
|
185
|
+
- squads:
|
|
186
|
+
- 14-automacao-sistemas
|
|
187
|
+
- 13-qualidade
|
|
188
|
+
- agentes-chave:
|
|
189
|
+
- estruturador-de-skills
|
|
190
|
+
- lider-de-qualidade
|
|
191
|
+
|
|
192
|
+
## Entregas geradas
|
|
193
|
+
- `{rel(evidence_path)}`
|
|
194
|
+
|
|
195
|
+
## Checkpoints
|
|
196
|
+
### Checkpoint de estratégia
|
|
197
|
+
- resultado: aprovado
|
|
198
|
+
- observações: objetivo definido e playbook selecionado.
|
|
199
|
+
|
|
200
|
+
### Checkpoint de produção
|
|
201
|
+
- resultado: em-andamento
|
|
202
|
+
- observações: investigação web pendente de execução completa.
|
|
203
|
+
|
|
204
|
+
### Checkpoint de qualidade
|
|
205
|
+
- resultado: pendente
|
|
206
|
+
- observações: validação final após preenchimento da síntese.
|
|
207
|
+
|
|
208
|
+
## Decisões registradas
|
|
209
|
+
- plataforma detectada automaticamente: {platform}
|
|
210
|
+
|
|
211
|
+
## Pendências / próximos passos
|
|
212
|
+
- executar navegação e preencher síntese interpretativa da evidência.
|
|
213
|
+
- atualizar status para concluído ao finalizar a investigação.
|
|
214
|
+
|
|
215
|
+
## Evidências
|
|
216
|
+
- arquivos alterados:
|
|
217
|
+
- `{rel(evidence_path)}`
|
|
218
|
+
- validações realizadas:
|
|
219
|
+
- geração automática de run_id
|
|
220
|
+
- seleção automática de playbook
|
|
221
|
+
"""
|
|
222
|
+
run_path.write_text(content, encoding="utf-8")
|
|
223
|
+
return run_path
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
def main() -> int:
|
|
227
|
+
parser = argparse.ArgumentParser(description="Fase 3: automação de investigação /edusquads")
|
|
228
|
+
parser.add_argument("target", help="URL/perfil alvo da investigação")
|
|
229
|
+
parser.add_argument("--objetivo", required=True, help="Objetivo de negócio da investigação")
|
|
230
|
+
parser.add_argument("--plataforma", help="instagram|youtube|linkedin|x-twitter")
|
|
231
|
+
parser.add_argument("--profundidade", default="rápida", choices=["rápida", "profunda"], help="Nível de profundidade")
|
|
232
|
+
parser.add_argument("--consentimento-sessao", action="store_true", help="Marcar que houve consentimento explícito para persistir sessão")
|
|
233
|
+
args = parser.parse_args()
|
|
234
|
+
|
|
235
|
+
ensure_dirs()
|
|
236
|
+
today = dt.date.today()
|
|
237
|
+
|
|
238
|
+
run_id = next_run_id(today)
|
|
239
|
+
platform = detect_platform(args.target, args.plataforma)
|
|
240
|
+
|
|
241
|
+
playbook = PLAYBOOK_DIR / f"{platform}.md"
|
|
242
|
+
if not playbook.exists():
|
|
243
|
+
raise SystemExit(f"Playbook não encontrado: {playbook}")
|
|
244
|
+
|
|
245
|
+
ev_path = create_evidence(
|
|
246
|
+
run_id=run_id,
|
|
247
|
+
platform=platform,
|
|
248
|
+
target=args.target,
|
|
249
|
+
objective=args.objetivo,
|
|
250
|
+
depth=args.profundidade,
|
|
251
|
+
consent=args.consentimento_sessao,
|
|
252
|
+
)
|
|
253
|
+
|
|
254
|
+
run_path = create_run(
|
|
255
|
+
run_id=run_id,
|
|
256
|
+
target=args.target,
|
|
257
|
+
objective=args.objetivo,
|
|
258
|
+
platform=platform,
|
|
259
|
+
evidence_path=ev_path,
|
|
260
|
+
)
|
|
261
|
+
|
|
262
|
+
append_runs_index(
|
|
263
|
+
run_id=run_id,
|
|
264
|
+
command="/edusquads investigar",
|
|
265
|
+
objective=args.objetivo,
|
|
266
|
+
squads="14-Automação/Sistema, 13-Qualidade",
|
|
267
|
+
status="em-andamento",
|
|
268
|
+
run_file=f"_edusquads/runs/{run_path.name}",
|
|
269
|
+
)
|
|
270
|
+
|
|
271
|
+
print(f"run_id={run_id}")
|
|
272
|
+
print(f"platform={platform}")
|
|
273
|
+
print(f"run_file={run_path.as_posix()}")
|
|
274
|
+
print(f"evidence_file={ev_path.as_posix()}")
|
|
275
|
+
return 0
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
if __name__ == "__main__":
|
|
279
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Visão Geral
|
|
2
|
+
|
|
3
|
+
## O que é o EduSquads
|
|
4
|
+
EduSquads é um sistema para Claude Code que transforma conhecimento de mercado em operação estruturada.
|
|
5
|
+
|
|
6
|
+
Ele combina:
|
|
7
|
+
- squads
|
|
8
|
+
- agentes
|
|
9
|
+
- skills
|
|
10
|
+
- fundamentos
|
|
11
|
+
- fluxos
|
|
12
|
+
- revisão
|
|
13
|
+
- comando de ativação
|
|
14
|
+
|
|
15
|
+
## Tese principal
|
|
16
|
+
Agentes genéricos tendem a produzir entregas genéricas.
|
|
17
|
+
Agentes com fundamento, escopo e critério produzem entregas mais consistentes.
|
|
18
|
+
|
|
19
|
+
## Princípios do sistema
|
|
20
|
+
1. Um agente = uma função principal.
|
|
21
|
+
2. Uma skill = um método reutilizável.
|
|
22
|
+
3. Um squad = uma unidade operacional.
|
|
23
|
+
4. Todo output importante passa por revisão.
|
|
24
|
+
5. Todo fundamento deve ser rastreável a fontes públicas.
|
|
25
|
+
6. Toda doutrina do agente deve ser interpretada, não copiada.
|
|
26
|
+
|
|
27
|
+
## Estrutura macro
|
|
28
|
+
- Base
|
|
29
|
+
- Biblioteca de especialistas
|
|
30
|
+
- Squads
|
|
31
|
+
- Skills
|
|
32
|
+
- Fluxos
|
|
33
|
+
- Comando `/edusquads`
|
|
34
|
+
|
|
35
|
+
## Objetivo do comando `/edusquads`
|
|
36
|
+
Ao ser invocado, Claude deve:
|
|
37
|
+
1. entender a operação pedida
|
|
38
|
+
2. mapear quais squads entram
|
|
39
|
+
3. selecionar fundamentos adequados
|
|
40
|
+
4. propor ou montar agentes/skills relevantes
|
|
41
|
+
5. estruturar entregas com critérios de qualidade
|
|
42
|
+
|
|
43
|
+
## Escala planejada
|
|
44
|
+
- 16 squads
|
|
45
|
+
- até 160 agentes, se mantido o padrão de 10 agentes por squad
|
|
46
|
+
- biblioteca crescente de especialistas por especialidade
|
package/bin/edusquads.js
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const path = require("path");
|
|
5
|
+
|
|
6
|
+
const args = process.argv.slice(2);
|
|
7
|
+
const command = args.find((a) => !a.startsWith("-")) || "install";
|
|
8
|
+
const force = args.includes("--force");
|
|
9
|
+
const dryRun = args.includes("--dry-run");
|
|
10
|
+
const targetArgIndex = args.findIndex((a) => a === "--target");
|
|
11
|
+
const targetDir =
|
|
12
|
+
targetArgIndex >= 0 && args[targetArgIndex + 1]
|
|
13
|
+
? path.resolve(args[targetArgIndex + 1])
|
|
14
|
+
: process.cwd();
|
|
15
|
+
|
|
16
|
+
const PACKAGE_ROOT = path.resolve(__dirname, "..");
|
|
17
|
+
|
|
18
|
+
const INSTALL_ITEMS = [
|
|
19
|
+
{ src: ".claude/skills/edusquads", dest: ".claude/skills/edusquads" },
|
|
20
|
+
{ src: "base", dest: "base" },
|
|
21
|
+
{ src: "especialistas", dest: "especialistas" },
|
|
22
|
+
{ src: "pesquisa", dest: "pesquisa" },
|
|
23
|
+
{ src: "squads", dest: "squads" },
|
|
24
|
+
{ src: "_edusquads/memoria/USUARIO-ATIVO.md", dest: "_edusquads/memoria/USUARIO-ATIVO.md" },
|
|
25
|
+
{ src: "_edusquads/runs/RUN-MODELO.md", dest: "_edusquads/runs/RUN-MODELO.md" },
|
|
26
|
+
{ src: "_edusquads/runs/RUNS-INDEX.md", dest: "_edusquads/runs/RUNS-INDEX.md" },
|
|
27
|
+
{ src: "_edusquads/evidencias/EVIDENCIA-MODELO.md", dest: "_edusquads/evidencias/EVIDENCIA-MODELO.md" },
|
|
28
|
+
{ src: "carrosseis.md", dest: "carrosseis.md" }
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
function help() {
|
|
32
|
+
console.log(`\nEduSquads CLI\n\nUso:\n npx edusquads-cli install [--target <dir>] [--force] [--dry-run]\n npx edusquads-cli --help\n\nOpções:\n --target <dir> Diretório do projeto de destino (default: diretório atual)\n --force Sobrescreve arquivos existentes\n --dry-run Simula instalação sem gravar arquivos\n`);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function ensureDir(p) {
|
|
36
|
+
if (dryRun) return;
|
|
37
|
+
fs.mkdirSync(p, { recursive: true });
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function copyFile(src, dest) {
|
|
41
|
+
const exists = fs.existsSync(dest);
|
|
42
|
+
if (exists && !force) return "skipped";
|
|
43
|
+
ensureDir(path.dirname(dest));
|
|
44
|
+
if (!dryRun) fs.copyFileSync(src, dest);
|
|
45
|
+
return exists ? "overwritten" : "created";
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function copyDir(src, dest, report) {
|
|
49
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
50
|
+
ensureDir(dest);
|
|
51
|
+
for (const entry of entries) {
|
|
52
|
+
const srcPath = path.join(src, entry.name);
|
|
53
|
+
const destPath = path.join(dest, entry.name);
|
|
54
|
+
if (entry.isDirectory()) {
|
|
55
|
+
copyDir(srcPath, destPath, report);
|
|
56
|
+
} else {
|
|
57
|
+
const status = copyFile(srcPath, destPath);
|
|
58
|
+
report[status] = (report[status] || 0) + 1;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function patchGitignore(target) {
|
|
64
|
+
const gitignorePath = path.join(target, ".gitignore");
|
|
65
|
+
const required = [
|
|
66
|
+
"_edusquads/browser_profile/",
|
|
67
|
+
"_edusquads/evidencias/"
|
|
68
|
+
];
|
|
69
|
+
|
|
70
|
+
let current = "";
|
|
71
|
+
if (fs.existsSync(gitignorePath)) {
|
|
72
|
+
current = fs.readFileSync(gitignorePath, "utf-8");
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
let changed = false;
|
|
76
|
+
for (const line of required) {
|
|
77
|
+
if (!current.includes(line)) {
|
|
78
|
+
current += (current.endsWith("\n") || current.length === 0 ? "" : "\n") + line + "\n";
|
|
79
|
+
changed = true;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (changed && !dryRun) fs.writeFileSync(gitignorePath, current, "utf-8");
|
|
84
|
+
return changed;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function writeInstallMarker(target) {
|
|
88
|
+
const markerPath = path.join(target, "_edusquads", "INSTALLATION.json");
|
|
89
|
+
const payload = {
|
|
90
|
+
installedAt: new Date().toISOString(),
|
|
91
|
+
package: "edusquads-cli",
|
|
92
|
+
version: "0.1.0"
|
|
93
|
+
};
|
|
94
|
+
ensureDir(path.dirname(markerPath));
|
|
95
|
+
if (!dryRun) fs.writeFileSync(markerPath, JSON.stringify(payload, null, 2), "utf-8");
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function install() {
|
|
99
|
+
if (!fs.existsSync(targetDir)) {
|
|
100
|
+
console.error(`Diretório alvo não existe: ${targetDir}`);
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const report = { created: 0, overwritten: 0, skipped: 0 };
|
|
105
|
+
|
|
106
|
+
for (const item of INSTALL_ITEMS) {
|
|
107
|
+
const src = path.join(PACKAGE_ROOT, item.src);
|
|
108
|
+
const dest = path.join(targetDir, item.dest);
|
|
109
|
+
|
|
110
|
+
if (!fs.existsSync(src)) {
|
|
111
|
+
console.error(`Origem não encontrada no pacote: ${item.src}`);
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const stat = fs.statSync(src);
|
|
116
|
+
if (stat.isDirectory()) {
|
|
117
|
+
copyDir(src, dest, report);
|
|
118
|
+
} else {
|
|
119
|
+
const status = copyFile(src, dest);
|
|
120
|
+
report[status] = (report[status] || 0) + 1;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const gitignoreChanged = patchGitignore(targetDir);
|
|
125
|
+
writeInstallMarker(targetDir);
|
|
126
|
+
|
|
127
|
+
console.log(`\nEduSquads ${dryRun ? "(simulação) " : ""}instalado em: ${targetDir}`);
|
|
128
|
+
console.log(`Arquivos criados: ${report.created}`);
|
|
129
|
+
console.log(`Arquivos sobrescritos: ${report.overwritten}`);
|
|
130
|
+
console.log(`Arquivos ignorados (já existiam): ${report.skipped}`);
|
|
131
|
+
console.log(`.gitignore atualizado: ${gitignoreChanged ? "sim" : "não"}`);
|
|
132
|
+
console.log(`\nNo Claude Code, abra este projeto e use: /edusquads\n`);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
136
|
+
help();
|
|
137
|
+
process.exit(0);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (!["install", "init"].includes(command)) {
|
|
141
|
+
console.error(`Comando inválido: ${command}`);
|
|
142
|
+
help();
|
|
143
|
+
process.exit(1);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
install();
|