@fabioforest/openclaw 3.6.0 → 3.7.1
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/README.md +7 -3
- package/package.json +1 -1
- package/templates/.agent/skills/ai-provider-setup/SKILL.md +244 -0
- package/templates/.agent/skills/smoke-tester/SKILL.md +160 -0
- package/templates/.agent/skills/vpn-networking/SKILL.md +200 -0
- package/templates/.agent/skills/vps-cloud-infra/SKILL.md +140 -0
package/README.md
CHANGED
|
@@ -371,7 +371,7 @@ Verifica conectividade, proxy, versões e integridade do ambiente.
|
|
|
371
371
|
|
|
372
372
|
---
|
|
373
373
|
|
|
374
|
-
## 🧠 Skills Disponíveis (
|
|
374
|
+
## 🧠 Skills Disponíveis (25)
|
|
375
375
|
|
|
376
376
|
### Core — Infraestrutura do AI OS
|
|
377
377
|
|
|
@@ -392,15 +392,19 @@ Verifica conectividade, proxy, versões e integridade do ambiente.
|
|
|
392
392
|
|-------|-----------|-------------|
|
|
393
393
|
| `code-quality` | SOLID, DRY, KISS, Clean Code | Para revisar e melhorar qualidade de código |
|
|
394
394
|
| `legacy-cleanup` | Refatoração segura de legado | Para remover dead code, deps obsoletas |
|
|
395
|
-
| `test-engineer` | Testes
|
|
395
|
+
| `test-engineer` | Testes unit/integração/E2E | Para criar e melhorar suite de testes |
|
|
396
|
+
| `smoke-tester` | Validação pós-alteração | Para testar automaticamente após qualquer mudança |
|
|
396
397
|
| `security-scanner` | SAST, DAST, OWASP Top 10 | Para auditoria de segurança e vulnerabilidades |
|
|
397
398
|
|
|
398
|
-
### DevOps
|
|
399
|
+
### DevOps, MLOps & Infra
|
|
399
400
|
|
|
400
401
|
| Skill | O que faz | Quando usar |
|
|
401
402
|
|-------|-----------|-------------|
|
|
402
403
|
| `devops-toolkit` | Docker, CI/CD, K8s, Terraform | Para automação de infra e deploy |
|
|
403
404
|
| `mlops-pipeline` | Treinamento, serving, RAG, drift | Para pipelines de ML em produção |
|
|
405
|
+
| `vps-cloud-infra` | 9 provedores VPS/Cloud, hardening | Para provisionar e gerenciar servidores |
|
|
406
|
+
| `vpn-networking` | 7 soluções VPN, troubleshooting | Para redes privadas seguras |
|
|
407
|
+
| `ai-provider-setup` | 10+ provedores de IA, API keys | Para adicionar novos modelos/provedores |
|
|
404
408
|
|
|
405
409
|
### Produtividade — Automação e Web
|
|
406
410
|
|
package/package.json
CHANGED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ai-provider-setup
|
|
3
|
+
description: Guia passo a passo para adicionar e configurar provedores de IA (Gemini, OpenAI, Claude, Groq, Mistral, Ollama, etc.) com obtenção de API keys, configuração e teste.
|
|
4
|
+
triggers:
|
|
5
|
+
- adicionar ia
|
|
6
|
+
- novo modelo
|
|
7
|
+
- api key
|
|
8
|
+
- token ia
|
|
9
|
+
- configurar modelo
|
|
10
|
+
- gemini
|
|
11
|
+
- openai
|
|
12
|
+
- claude
|
|
13
|
+
- groq
|
|
14
|
+
- mistral
|
|
15
|
+
- ollama
|
|
16
|
+
- huggingface
|
|
17
|
+
- cohere
|
|
18
|
+
- deepseek
|
|
19
|
+
- qwen
|
|
20
|
+
- provedor
|
|
21
|
+
- provider
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# AI Provider Setup
|
|
25
|
+
|
|
26
|
+
## Objetivo
|
|
27
|
+
Guiar o usuário passo a passo para adicionar novos provedores e modelos de IA, incluindo obtenção de API keys, configuração no projeto e validação de funcionamento.
|
|
28
|
+
|
|
29
|
+
## Provedores Suportados — Guia Completo
|
|
30
|
+
|
|
31
|
+
### 🟢 Google Gemini (Recomendado — Free Tier Generoso)
|
|
32
|
+
|
|
33
|
+
**Modelos disponíveis:** Gemini 2.5 Pro, Gemini 2.5 Flash, Gemini 2.5 Flash-Lite
|
|
34
|
+
|
|
35
|
+
**Como obter a API Key:**
|
|
36
|
+
1. Acesse [Google AI Studio](https://aistudio.google.com/apikey)
|
|
37
|
+
2. Faça login com sua conta Google
|
|
38
|
+
3. Clique em "Create API Key"
|
|
39
|
+
4. Selecione o projeto GCP (ou crie um novo)
|
|
40
|
+
5. Copie a chave gerada
|
|
41
|
+
|
|
42
|
+
**Limites do Free Tier:**
|
|
43
|
+
- Gemini Flash: 15 RPM, 1.500 RPD, 1M TPM
|
|
44
|
+
- Gemini Pro: 5 RPM, 25 RPD, 1M TPM
|
|
45
|
+
- **Atenção**: dados do free tier podem ser usados para treinamento. Para opt-out, use o plano pago
|
|
46
|
+
|
|
47
|
+
**Configuração:**
|
|
48
|
+
```json
|
|
49
|
+
{
|
|
50
|
+
"env": { "vars": { "GOOGLE_API_KEY": "AIza..." } },
|
|
51
|
+
"agents": {
|
|
52
|
+
"defaults": {
|
|
53
|
+
"model": { "primary": "gemini/gemini-2.5-flash" }
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
### 🟡 OpenAI (GPT-5, GPT-5 mini, Codex)
|
|
62
|
+
|
|
63
|
+
**Modelos disponíveis:** GPT-5.2, GPT-5.1-codex, GPT-5 mini, o3, o4-mini
|
|
64
|
+
|
|
65
|
+
**Como obter a API Key:**
|
|
66
|
+
1. Acesse [OpenAI Platform](https://platform.openai.com/api-keys)
|
|
67
|
+
2. Faça login ou crie conta
|
|
68
|
+
3. Clique em "Create new secret key"
|
|
69
|
+
4. Dê um nome descritivo (ex: "openclaw-vps")
|
|
70
|
+
5. Copie a chave (só aparece 1 vez!)
|
|
71
|
+
|
|
72
|
+
**Importante:** Requer cartão de crédito para uso (PAYG — Pay As You Go)
|
|
73
|
+
|
|
74
|
+
**Configuração:**
|
|
75
|
+
```json
|
|
76
|
+
{
|
|
77
|
+
"env": { "vars": { "OPENAI_API_KEY": "sk-proj-..." } },
|
|
78
|
+
"agents": {
|
|
79
|
+
"defaults": {
|
|
80
|
+
"model": { "primary": "openai/gpt-5.2" }
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
### 🟣 Anthropic Claude (Claude Opus 4.5, Sonnet 4)
|
|
89
|
+
|
|
90
|
+
**Modelos disponíveis:** Claude Opus 4.5, Claude Sonnet 4, Claude Haiku
|
|
91
|
+
|
|
92
|
+
**Como obter a API Key:**
|
|
93
|
+
1. Acesse [Anthropic Console](https://console.anthropic.com/settings/keys)
|
|
94
|
+
2. Crie uma conta (email + verificação)
|
|
95
|
+
3. Adicione créditos (mínimo US$ 5)
|
|
96
|
+
4. Clique em "Create Key"
|
|
97
|
+
5. Copie a chave
|
|
98
|
+
|
|
99
|
+
**Configuração:**
|
|
100
|
+
```json
|
|
101
|
+
{
|
|
102
|
+
"env": { "vars": { "ANTHROPIC_API_KEY": "sk-ant-..." } },
|
|
103
|
+
"agents": {
|
|
104
|
+
"defaults": {
|
|
105
|
+
"model": { "primary": "anthropic/claude-sonnet-4" }
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
### 🟠 Groq (Free, Ultra-Rápido)
|
|
114
|
+
|
|
115
|
+
**Modelos disponíveis:** Llama 3.3 70B, Mixtral 8x7B, Gemma 2 9B
|
|
116
|
+
|
|
117
|
+
**Como obter a API Key:**
|
|
118
|
+
1. Acesse [GroqCloud Console](https://console.groq.com/keys)
|
|
119
|
+
2. Faça login com Google ou GitHub
|
|
120
|
+
3. Clique em "Create API Key"
|
|
121
|
+
4. Copie a chave
|
|
122
|
+
|
|
123
|
+
**Limites do Free Tier (sem cartão):**
|
|
124
|
+
- 30 RPM, 14.400 RPD, 6.000 TPM (varia por modelo)
|
|
125
|
+
- Sem armazenamento de dados (política de privacidade forte)
|
|
126
|
+
|
|
127
|
+
**Configuração:**
|
|
128
|
+
```json
|
|
129
|
+
{
|
|
130
|
+
"env": { "vars": { "GROQ_API_KEY": "gsk_..." } },
|
|
131
|
+
"agents": {
|
|
132
|
+
"defaults": {
|
|
133
|
+
"model": { "primary": "groq/llama-3.3-70b-versatile" }
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
### 🔵 Mistral AI
|
|
142
|
+
|
|
143
|
+
**Modelos disponíveis:** Mistral Large, Mistral Medium, Codestral, Pixtral
|
|
144
|
+
|
|
145
|
+
**Como obter a API Key:**
|
|
146
|
+
1. Acesse [Mistral Console](https://console.mistral.ai/api-keys)
|
|
147
|
+
2. Crie conta (requer verificação por telefone no plano free)
|
|
148
|
+
3. Clique em "Create new key"
|
|
149
|
+
4. Copie a chave
|
|
150
|
+
|
|
151
|
+
**Free Tier (Experiment):** Limites conservadores, dados podem ser usados para treinamento (opt-out disponível)
|
|
152
|
+
|
|
153
|
+
**Configuração:**
|
|
154
|
+
```json
|
|
155
|
+
{
|
|
156
|
+
"env": { "vars": { "MISTRAL_API_KEY": "..." } },
|
|
157
|
+
"agents": {
|
|
158
|
+
"defaults": {
|
|
159
|
+
"model": { "primary": "mistral/mistral-large-latest" }
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
### 🟤 Ollama (Local, Gratuito, Privado)
|
|
168
|
+
|
|
169
|
+
**Modelos disponíveis:** Qwen 2.5 Coder, Llama 3.3, DeepSeek Coder V2, Phi-3, Mistral, Gemma
|
|
170
|
+
|
|
171
|
+
**Como instalar:**
|
|
172
|
+
```bash
|
|
173
|
+
# macOS / Linux
|
|
174
|
+
curl -fsSL https://ollama.com/install.sh | sh
|
|
175
|
+
|
|
176
|
+
# Baixar modelo
|
|
177
|
+
ollama pull qwen2.5-coder:7b
|
|
178
|
+
|
|
179
|
+
# Verificar se está rodando
|
|
180
|
+
ollama list
|
|
181
|
+
curl http://localhost:11434/api/tags
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**Vantagens:** 100% local, sem custos, total privacidade, sem rate limits
|
|
185
|
+
**Desvantagens:** Requer GPU/RAM, modelos menores que APIs cloud
|
|
186
|
+
|
|
187
|
+
**Configuração (com OpenClaw):**
|
|
188
|
+
```json
|
|
189
|
+
{
|
|
190
|
+
"agents": {
|
|
191
|
+
"defaults": {
|
|
192
|
+
"model": { "primary": "ollama/qwen2.5-coder:7b" }
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
### 🟢 Cohere
|
|
201
|
+
|
|
202
|
+
**Como obter:** [Cohere Dashboard](https://dashboard.cohere.com/api-keys) → Trial: 1.000 calls/mês
|
|
203
|
+
|
|
204
|
+
### 🔵 DeepSeek
|
|
205
|
+
|
|
206
|
+
**Como obter:** [DeepSeek Platform](https://platform.deepseek.com/api_keys) → Créditos iniciais gratuitos
|
|
207
|
+
|
|
208
|
+
### 🟡 HuggingFace Inference
|
|
209
|
+
|
|
210
|
+
**Como obter:** [HuggingFace Settings](https://huggingface.co/settings/tokens) → Free tier com créditos
|
|
211
|
+
|
|
212
|
+
### 🟠 OpenRouter (Multi-provedor)
|
|
213
|
+
|
|
214
|
+
**Como obter:** [OpenRouter Keys](https://openrouter.ai/keys) → 50 req/dia free, acesso a 100+ modelos
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## Fluxo de adição de novo provedor
|
|
219
|
+
|
|
220
|
+
1. **Escolher provedor** com base em: custo, qualidade, privacidade, velocidade
|
|
221
|
+
2. **Obter API Key** seguindo o passo a passo acima
|
|
222
|
+
3. **Configurar** no `openclaw.json` (env.vars + agents.defaults.model)
|
|
223
|
+
4. **Testar** com um request simples (smoke-tester)
|
|
224
|
+
5. **Definir fallbacks** (chain de modelos por perfil)
|
|
225
|
+
6. **Documentar** custos estimados e limites
|
|
226
|
+
|
|
227
|
+
## Comparativo rápido
|
|
228
|
+
|
|
229
|
+
| Provedor | Free | Privacidade | Velocidade | Qualidade | Melhor para |
|
|
230
|
+
|---------|------|------------|-----------|----------|------------|
|
|
231
|
+
| Gemini | ✅ Generoso | ⚠️ Treina (free) | ⚡ Rápido | ⭐⭐⭐⭐ | Uso geral, coding |
|
|
232
|
+
| Groq | ✅ Sem cartão | ✅ Não armazena | ⚡⚡⚡ Ultra | ⭐⭐⭐ | Volume alto, rascunhos |
|
|
233
|
+
| Ollama | ✅ Totalmente | ✅ 100% local | ⚡ (com GPU) | ⭐⭐⭐ | Privacidade total |
|
|
234
|
+
| OpenAI | ❌ Pago | ✅ Não treina | ⚡⚡ Rápido | ⭐⭐⭐⭐⭐ | Máxima qualidade |
|
|
235
|
+
| Claude | ❌ Pago | ✅ 30 dias | ⚡⚡ Rápido | ⭐⭐⭐⭐⭐ | Raciocínio, ética |
|
|
236
|
+
| Mistral | ⚠️ Limitado | ⚠️ Opt-out | ⚡⚡ Rápido | ⭐⭐⭐⭐ | Coding, EU compliance |
|
|
237
|
+
| OpenRouter | ⚠️ 50/dia | ✅ Não armazena | Varia | Varia | Multi-modelo |
|
|
238
|
+
|
|
239
|
+
## Regras de segurança
|
|
240
|
+
- ✅ Armazenar API keys em variáveis de ambiente ou secret manager
|
|
241
|
+
- ✅ Testar com request simples antes de usar em produção
|
|
242
|
+
- ✅ Documentar custos e limites de cada provedor
|
|
243
|
+
- ❌ Nunca commitar API keys no Git
|
|
244
|
+
- ❌ Nunca logar API keys em texto puro nos audit logs
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: smoke-tester
|
|
3
|
+
description: Validação automática pós-alteração. Testa se mudanças funcionam como esperado usando testes automatizados, browser testing (quando disponível) ou verificações programáticas.
|
|
4
|
+
triggers:
|
|
5
|
+
- testar alteração
|
|
6
|
+
- verificar se funciona
|
|
7
|
+
- smoke test
|
|
8
|
+
- validar
|
|
9
|
+
- testar se funciona
|
|
10
|
+
- funciona?
|
|
11
|
+
- está funcionando
|
|
12
|
+
- conferir
|
|
13
|
+
- healthcheck pós-deploy
|
|
14
|
+
- verificação
|
|
15
|
+
- pós-alteração
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Smoke Tester (Validação Pós-Alteração)
|
|
19
|
+
|
|
20
|
+
## Objetivo
|
|
21
|
+
Após **qualquer alteração** no projeto (novo agente, config, deploy, código), executar automaticamente uma bateria de testes para confirmar que tudo funciona como esperado.
|
|
22
|
+
|
|
23
|
+
> **Princípio**: Nenhuma alteração é considerada completa sem validação. O agente DEVE testar após aplicar.
|
|
24
|
+
|
|
25
|
+
## Contexto necessário
|
|
26
|
+
- O que foi alterado (config, código, agente, infra)
|
|
27
|
+
- Ambiente (local, Docker, VPS, IDE)
|
|
28
|
+
- Ferramentas disponíveis (browser tool, terminal, API)
|
|
29
|
+
|
|
30
|
+
## Fluxo automático pós-alteração
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
ALTERAÇÃO → DETECTAR TIPO → ESCOLHER TESTE → EXECUTAR → REPORTAR
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 1. Detectar tipo de alteração
|
|
37
|
+
|
|
38
|
+
| Tipo | Exemplos | Teste adequado |
|
|
39
|
+
|------|----------|---------------|
|
|
40
|
+
| Config de agente | Novo agente, modelo, fallback | Health ping + resposta de teste |
|
|
41
|
+
| Config de gateway | Porta, bind, auth, CORS | Curl/HTTP request + status check |
|
|
42
|
+
| Config de canal | Telegram, Discord, Slack | Enviar mensagem de teste + verificar status |
|
|
43
|
+
| Código (backend) | API, lógica, módulo | Unit tests + integration tests |
|
|
44
|
+
| Código (frontend) | UI, componente, página | Browser testing (screenshot + assertions) |
|
|
45
|
+
| Infraestrutura | Docker, VPN, firewall | Connectivity check + healthcheck |
|
|
46
|
+
| Dependências | npm install, pip install | Build + test suite |
|
|
47
|
+
|
|
48
|
+
### 2. Métodos de teste por ambiente
|
|
49
|
+
|
|
50
|
+
#### Terminal/CLI (sempre disponível)
|
|
51
|
+
```bash
|
|
52
|
+
# Verificar se processo está rodando
|
|
53
|
+
docker ps | grep <container>
|
|
54
|
+
systemctl status <service>
|
|
55
|
+
|
|
56
|
+
# Testar endpoint HTTP
|
|
57
|
+
curl -s -o /dev/null -w "%{http_code}" http://localhost:PORT/health
|
|
58
|
+
|
|
59
|
+
# Verificar conectividade
|
|
60
|
+
ping -c 1 <host>
|
|
61
|
+
ssh -o ConnectTimeout=5 <host> echo "OK"
|
|
62
|
+
|
|
63
|
+
# Rodar suite de testes
|
|
64
|
+
npm test
|
|
65
|
+
pytest
|
|
66
|
+
go test ./...
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
#### Browser Testing (Antigravity, Cursor com browser tool)
|
|
70
|
+
Quando o agente tem acesso ao browser tool:
|
|
71
|
+
```
|
|
72
|
+
1. Abrir URL alvo no navegador
|
|
73
|
+
2. Verificar se a página carrega (screenshot)
|
|
74
|
+
3. Verificar elementos esperados na DOM
|
|
75
|
+
4. Clicar em elementos interativos
|
|
76
|
+
5. Verificar console do navegador (sem erros)
|
|
77
|
+
6. Capturar screenshot final como prova
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**Cenários de browser testing:**
|
|
81
|
+
- Dashboard do OpenClaw: verificar se carrega, dropdown de agentes presente
|
|
82
|
+
- Site/App: verificar homepage, navegação, formulários
|
|
83
|
+
- Página de login: testar fluxo completo
|
|
84
|
+
- API docs: verificar se Swagger/OpenAPI renderiza
|
|
85
|
+
|
|
86
|
+
#### API Testing (programático)
|
|
87
|
+
```bash
|
|
88
|
+
# Testar agente do OpenClaw
|
|
89
|
+
curl -X POST http://localhost:18789/api/chat \
|
|
90
|
+
-H "Authorization: Bearer <token>" \
|
|
91
|
+
-d '{"message": "ping"}' \
|
|
92
|
+
| jq '.response'
|
|
93
|
+
|
|
94
|
+
# Verificar status de agentes
|
|
95
|
+
curl http://localhost:18789/api/status --json | jq '.agents'
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### 3. Checklists por tipo de alteração
|
|
99
|
+
|
|
100
|
+
#### Novo Agente Adicionado
|
|
101
|
+
- [ ] Config válida no `openclaw.json` (id, model, workspace)
|
|
102
|
+
- [ ] Reiniciar gateway/container
|
|
103
|
+
- [ ] Verificar que o agente aparece no status (`/api/status`)
|
|
104
|
+
- [ ] Enviar mensagem de teste e confirmar resposta
|
|
105
|
+
- [ ] Se tem browser: verificar dropdown no dashboard
|
|
106
|
+
- [ ] Verificar logs do container (sem erros)
|
|
107
|
+
|
|
108
|
+
#### Novo Modelo/Provedor de IA
|
|
109
|
+
- [ ] API Key configurada (env var ou config)
|
|
110
|
+
- [ ] Modelo acessível (fazer request de teste)
|
|
111
|
+
- [ ] Fallback funcionando (simular falha do primário)
|
|
112
|
+
- [ ] Rate limits conhecidos e documentados
|
|
113
|
+
- [ ] Custo estimado por request documentado
|
|
114
|
+
|
|
115
|
+
#### Configuração Multi-Agente
|
|
116
|
+
- [ ] Cada agente tem workspace separado
|
|
117
|
+
- [ ] Cada agente responde individualmente
|
|
118
|
+
- [ ] Sessões não se misturam entre agentes
|
|
119
|
+
- [ ] Fallback de modelo funciona para cada agente
|
|
120
|
+
- [ ] Dashboard mostra todos os agentes no dropdown
|
|
121
|
+
|
|
122
|
+
#### Alteração de VPN/Rede
|
|
123
|
+
- [ ] Pingar IP da VPN (`ping 10.66.0.X`)
|
|
124
|
+
- [ ] SSH via VPN funciona
|
|
125
|
+
- [ ] Portas esperadas acessíveis (curl healthcheck)
|
|
126
|
+
- [ ] Firewall não bloqueia tráfego esperado
|
|
127
|
+
- [ ] DNS resolve corretamente
|
|
128
|
+
|
|
129
|
+
#### Alteração de Código
|
|
130
|
+
- [ ] Build passa sem erros
|
|
131
|
+
- [ ] Testes unitários passam
|
|
132
|
+
- [ ] Testes de integração passam (se existirem)
|
|
133
|
+
- [ ] Sem erros no console do navegador (se frontend)
|
|
134
|
+
- [ ] Screenshot de referência comparado (se UI)
|
|
135
|
+
|
|
136
|
+
### 4. Relatório de validação
|
|
137
|
+
|
|
138
|
+
Após cada teste, gerar relatório em `.agent/audit/`:
|
|
139
|
+
|
|
140
|
+
```markdown
|
|
141
|
+
# Validação Pós-Alteração
|
|
142
|
+
- **Data**: 2026-02-19T11:24:00
|
|
143
|
+
- **Alteração**: Adicionado agente "browser" com modelo Gemini 3 Flash
|
|
144
|
+
- **Testes executados**: 5
|
|
145
|
+
- **Resultados**:
|
|
146
|
+
- ✅ Config válida
|
|
147
|
+
- ✅ Gateway reiniciado
|
|
148
|
+
- ✅ Agente aparece no status
|
|
149
|
+
- ✅ Resposta de teste recebida
|
|
150
|
+
- ⚠️ Dropdown no dashboard: não verificado (sem browser tool)
|
|
151
|
+
- **Status**: PASS (4/5 OK, 1 não aplicável)
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Regras
|
|
155
|
+
- ✅ SEMPRE testar após qualquer alteração. Sem exceção
|
|
156
|
+
- ✅ Se o browser tool está disponível, USAR para verificação visual
|
|
157
|
+
- ✅ Capturar screenshots como prova de validação
|
|
158
|
+
- ✅ Se um teste falha, reportar imediatamente e propor correção
|
|
159
|
+
- ❌ Nunca considerar uma alteração "pronta" sem pelo menos 1 teste de verificação
|
|
160
|
+
- ❌ Nunca pular validação em produção
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vpn-networking
|
|
3
|
+
description: Setup e gerenciamento de VPNs (WireGuard, Tailscale, OpenVPN, Cloudflare Tunnel, ZeroTier, Headscale) e networking seguro entre VPS, Mac, Docker e cloud.
|
|
4
|
+
triggers:
|
|
5
|
+
- vpn
|
|
6
|
+
- wireguard
|
|
7
|
+
- tailscale
|
|
8
|
+
- openvpn
|
|
9
|
+
- cloudflare tunnel
|
|
10
|
+
- zerotier
|
|
11
|
+
- headscale
|
|
12
|
+
- rede
|
|
13
|
+
- network
|
|
14
|
+
- tunel
|
|
15
|
+
- tunnel
|
|
16
|
+
- peer
|
|
17
|
+
- mesh
|
|
18
|
+
- overlay
|
|
19
|
+
- site-to-site
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# VPN & Networking
|
|
23
|
+
|
|
24
|
+
## Objetivo
|
|
25
|
+
Configurar redes privadas seguras entre VPS, dispositivos locais e containers, usando a solução de VPN mais adequada para cada cenário.
|
|
26
|
+
|
|
27
|
+
## Soluções VPN — Comparativo
|
|
28
|
+
|
|
29
|
+
| VPN | Tipo | Setup | Performance | Self-hosted | Free | Melhor para |
|
|
30
|
+
|-----|------|-------|------------|------------|------|------------|
|
|
31
|
+
| **WireGuard** | Kernel VPN | Médio | ⚡⚡⚡ Excelente | ✅ Total | ✅ | Site-to-site, alta performance |
|
|
32
|
+
| **Tailscale** | Mesh overlay | ⚡ Fácil | ⚡⚡ Boa | ⚠️ Parcial | ✅ (3 users) | Zero-config, multi-device |
|
|
33
|
+
| **Headscale** | Mesh overlay | Médio | ⚡⚡ Boa | ✅ Total | ✅ | Tailscale self-hosted |
|
|
34
|
+
| **OpenVPN** | TLS VPN | Complexo | ⚡ OK | ✅ Total | ✅ | Legacy, compatibilidade |
|
|
35
|
+
| **Cloudflare Tunnel** | Reverse tunnel | ⚡ Fácil | ⚡⚡ Boa | ❌ Cloudflare | ✅ | Expor serviços sem IP público |
|
|
36
|
+
| **ZeroTier** | Mesh overlay | ⚡ Fácil | ⚡⚡ Boa | ✅ Total | ✅ (25 devices) | IoT, redes grandes |
|
|
37
|
+
| **Nebula** | Mesh overlay | Médio | ⚡⚡⚡ Excelente | ✅ Total | ✅ | Escala enterprise (Slack) |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## WireGuard — Setup Completo
|
|
42
|
+
|
|
43
|
+
### Cenário: VPS → Mac (ponto a ponto)
|
|
44
|
+
|
|
45
|
+
**No servidor (VPS):**
|
|
46
|
+
```bash
|
|
47
|
+
# Instalar
|
|
48
|
+
apt install wireguard
|
|
49
|
+
|
|
50
|
+
# Gerar chaves
|
|
51
|
+
wg genkey | tee /etc/wireguard/private.key | wg pubkey > /etc/wireguard/public.key
|
|
52
|
+
chmod 600 /etc/wireguard/private.key
|
|
53
|
+
|
|
54
|
+
# Configurar /etc/wireguard/wg0.conf
|
|
55
|
+
[Interface]
|
|
56
|
+
PrivateKey = <CHAVE_PRIVADA_VPS>
|
|
57
|
+
Address = 10.66.0.1/24
|
|
58
|
+
ListenPort = 51820
|
|
59
|
+
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
|
60
|
+
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
|
|
61
|
+
|
|
62
|
+
[Peer]
|
|
63
|
+
PublicKey = <CHAVE_PUBLICA_MAC>
|
|
64
|
+
AllowedIPs = 10.66.0.2/32
|
|
65
|
+
|
|
66
|
+
# Ativar
|
|
67
|
+
wg-quick up wg0
|
|
68
|
+
systemctl enable wg-quick@wg0
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**No Mac (peer):**
|
|
72
|
+
```bash
|
|
73
|
+
# Instalar via Homebrew ou App Store
|
|
74
|
+
brew install wireguard-tools
|
|
75
|
+
|
|
76
|
+
# Configurar /etc/wireguard/wg0.conf
|
|
77
|
+
[Interface]
|
|
78
|
+
PrivateKey = <CHAVE_PRIVADA_MAC>
|
|
79
|
+
Address = 10.66.0.2/24
|
|
80
|
+
|
|
81
|
+
[Peer]
|
|
82
|
+
PublicKey = <CHAVE_PUBLICA_VPS>
|
|
83
|
+
Endpoint = <IP_PUBLICO_VPS>:51820
|
|
84
|
+
AllowedIPs = 10.66.0.0/24
|
|
85
|
+
PersistentKeepalive = 25
|
|
86
|
+
|
|
87
|
+
# Conectar
|
|
88
|
+
wg-quick up wg0
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Dashboard (WGDashboard — Docker)
|
|
92
|
+
```yaml
|
|
93
|
+
# docker-compose.yml
|
|
94
|
+
services:
|
|
95
|
+
wgdashboard:
|
|
96
|
+
image: donaldzou/wgdashboard:latest
|
|
97
|
+
cap_add: [NET_ADMIN, SYS_MODULE]
|
|
98
|
+
ports:
|
|
99
|
+
- "10086:10086"
|
|
100
|
+
- "51820:51820/udp"
|
|
101
|
+
volumes:
|
|
102
|
+
- ./wg-data:/etc/wireguard
|
|
103
|
+
sysctls:
|
|
104
|
+
net.ipv4.ip_forward: 1
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Tailscale — Zero-Config
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# VPS
|
|
113
|
+
curl -fsSL https://tailscale.com/install.sh | sh
|
|
114
|
+
tailscale up --ssh
|
|
115
|
+
|
|
116
|
+
# Mac
|
|
117
|
+
brew install tailscale
|
|
118
|
+
tailscale up
|
|
119
|
+
|
|
120
|
+
# Verificar rede
|
|
121
|
+
tailscale status
|
|
122
|
+
# Dispositivos se encontram automaticamente (MagicDNS)
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**Vantagens:** Zero-config, NAT traversal automático, MagicDNS, SSH integrado, ACLs
|
|
126
|
+
**Limitações:** Depende de coord server (Tailscale Inc.), free até 3 users
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Headscale — Tailscale Self-Hosted
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# No servidor (control plane)
|
|
134
|
+
wget https://github.com/juanfont/headscale/releases/latest/download/headscale_linux_amd64
|
|
135
|
+
chmod +x headscale_linux_amd64
|
|
136
|
+
mv headscale_linux_amd64 /usr/local/bin/headscale
|
|
137
|
+
|
|
138
|
+
# Configurar /etc/headscale/config.yaml
|
|
139
|
+
# Registrar namespace e nodes
|
|
140
|
+
headscale namespaces create minha-rede
|
|
141
|
+
headscale nodes register --namespace minha-rede --key <node-key>
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Cloudflare Tunnel — Sem IP Público
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# Instalar cloudflared
|
|
150
|
+
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg
|
|
151
|
+
apt install cloudflared
|
|
152
|
+
|
|
153
|
+
# Autenticar
|
|
154
|
+
cloudflared tunnel login
|
|
155
|
+
|
|
156
|
+
# Criar túnel
|
|
157
|
+
cloudflared tunnel create meu-tunel
|
|
158
|
+
cloudflared tunnel route dns meu-tunel app.meudominio.com
|
|
159
|
+
|
|
160
|
+
# Configurar ~/.cloudflared/config.yml
|
|
161
|
+
tunnel: <TUNNEL_ID>
|
|
162
|
+
ingress:
|
|
163
|
+
- hostname: app.meudominio.com
|
|
164
|
+
service: http://localhost:3000
|
|
165
|
+
- service: http_status:404
|
|
166
|
+
|
|
167
|
+
# Rodar
|
|
168
|
+
cloudflared tunnel run meu-tunel
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Cenários comuns e recomendação
|
|
174
|
+
|
|
175
|
+
| Cenário | VPN recomendada | Motivo |
|
|
176
|
+
|---------|----------------|--------|
|
|
177
|
+
| VPS pessoal + Mac | WireGuard | Performance, controle total |
|
|
178
|
+
| Múltiplos dispositivos pessoais | Tailscale | Zero-config, fácil |
|
|
179
|
+
| Empresa/Team | Headscale ou Tailscale Pro | ACLs, controle |
|
|
180
|
+
| Expor serviço sem IP fixo | Cloudflare Tunnel | Sem porta aberta |
|
|
181
|
+
| IoT / muitos devices | ZeroTier | Escalável, simples |
|
|
182
|
+
| Legacy / compatibilidade | OpenVPN | Suporte universal |
|
|
183
|
+
| Alta performance + escala | Nebula | Kernel-level, mesh |
|
|
184
|
+
|
|
185
|
+
## Troubleshooting comum
|
|
186
|
+
|
|
187
|
+
| Problema | Diagnóstico | Solução |
|
|
188
|
+
|---------|------------|---------|
|
|
189
|
+
| Peer não conecta | `wg show` (handshake?) | Verificar endpoint, firewall, chaves |
|
|
190
|
+
| Tráfego não passa | `ping 10.66.0.X` falha | Verificar AllowedIPs, ip_forward |
|
|
191
|
+
| DNS não resolve | `dig @10.66.0.1` | Configurar DNS no wg0.conf |
|
|
192
|
+
| Conexão cai | Sem keepalive | Adicionar `PersistentKeepalive = 25` |
|
|
193
|
+
| Performance ruim | `iperf3` entre peers | Verificar MTU (1420 para WG) |
|
|
194
|
+
|
|
195
|
+
## Regras de segurança
|
|
196
|
+
- ✅ Chaves WireGuard devem ter permissão 600
|
|
197
|
+
- ✅ Firewall deve permitir apenas porta da VPN publicamente
|
|
198
|
+
- ✅ SSH deve ser acessível SOMENTE via VPN quando possível
|
|
199
|
+
- ❌ Nunca compartilhar chaves privadas entre peers
|
|
200
|
+
- ❌ Nunca usar AllowedIPs = 0.0.0.0/0 sem entender as implicações
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vps-cloud-infra
|
|
3
|
+
description: Setup, gerenciamento e hardening de VPS e cloud servers. Suporte a Contabo, Hetzner, DigitalOcean, Linode, Oracle Cloud, AWS Lightsail, Vultr e mais.
|
|
4
|
+
triggers:
|
|
5
|
+
- vps
|
|
6
|
+
- servidor
|
|
7
|
+
- server
|
|
8
|
+
- contabo
|
|
9
|
+
- hetzner
|
|
10
|
+
- digitalocean
|
|
11
|
+
- linode
|
|
12
|
+
- oracle cloud
|
|
13
|
+
- aws
|
|
14
|
+
- lightsail
|
|
15
|
+
- vultr
|
|
16
|
+
- cloud
|
|
17
|
+
- ubuntu server
|
|
18
|
+
- debian
|
|
19
|
+
- centos
|
|
20
|
+
- ssh
|
|
21
|
+
- firewall
|
|
22
|
+
- ufw
|
|
23
|
+
- iptables
|
|
24
|
+
- hardening
|
|
25
|
+
- provisionamento
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
# VPS & Cloud Infrastructure
|
|
29
|
+
|
|
30
|
+
## Objetivo
|
|
31
|
+
Provisionar, configurar, proteger e gerenciar servidores VPS/Cloud de qualquer provedor, seguindo boas práticas de segurança e automação.
|
|
32
|
+
|
|
33
|
+
## Provedores suportados — Comparativo
|
|
34
|
+
|
|
35
|
+
| Provedor | Preço mín/mês | vCPU | RAM | Disco | Rede | Free tier | Melhor para |
|
|
36
|
+
|---------|--------------|------|-----|-------|------|---------|------------|
|
|
37
|
+
| **Contabo** | €4.99 | 4 | 6GB | 100GB SSD | 32TB | ❌ | Custo/benefício, storage |
|
|
38
|
+
| **Hetzner** | €3.79 | 2 | 2GB | 20GB | 20TB | ❌ | EU, performance, ARM |
|
|
39
|
+
| **DigitalOcean** | $6 | 1 | 1GB | 25GB | 1TB | $200 (60d) | Simplicidade, Apps |
|
|
40
|
+
| **Linode/Akamai** | $5 | 1 | 1GB | 25GB | 1TB | $100 (60d) | Comunidade, docs |
|
|
41
|
+
| **Vultr** | $2.50 | 1 | 512MB | 10GB | 500GB | $250 (30d) | Ultra-barato |
|
|
42
|
+
| **Oracle Cloud** | Free | 4 ARM | 24GB | 200GB | 10TB | ✅ Always Free | GPU grátis (ARM Ampere) |
|
|
43
|
+
| **AWS Lightsail** | $3.50 | 1 | 512MB | 20GB | 1TB | $0 (3mo) | Ecossistema AWS |
|
|
44
|
+
| **GCP Compute** | $6.11 | 1 | 0.6GB | 10GB | Egress $ | ✅ e2-micro | Integração Google |
|
|
45
|
+
| **Azure B1s** | Free | 1 | 1GB | 64GB | 15GB | ✅ 12 meses | Enterprise, .NET |
|
|
46
|
+
|
|
47
|
+
## Setup inicial de VPS — Checklist universal
|
|
48
|
+
|
|
49
|
+
### Passo 1: Acesso inicial
|
|
50
|
+
```bash
|
|
51
|
+
# Conectar via SSH (primeiro acesso, geralmente root)
|
|
52
|
+
ssh root@<IP_DO_SERVIDOR>
|
|
53
|
+
|
|
54
|
+
# Se exigir senha, trocar por chave imediatamente
|
|
55
|
+
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@<IP>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Passo 2: Criar usuário admin (nunca usar root no dia a dia)
|
|
59
|
+
```bash
|
|
60
|
+
adduser fabio
|
|
61
|
+
usermod -aG sudo fabio
|
|
62
|
+
mkdir -p /home/fabio/.ssh
|
|
63
|
+
cp /root/.ssh/authorized_keys /home/fabio/.ssh/
|
|
64
|
+
chown -R fabio:fabio /home/fabio/.ssh
|
|
65
|
+
chmod 700 /home/fabio/.ssh
|
|
66
|
+
chmod 600 /home/fabio/.ssh/authorized_keys
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Passo 3: Hardening SSH
|
|
70
|
+
```bash
|
|
71
|
+
# /etc/ssh/sshd_config
|
|
72
|
+
PermitRootLogin no
|
|
73
|
+
PasswordAuthentication no
|
|
74
|
+
PubkeyAuthentication yes
|
|
75
|
+
MaxAuthTries 3
|
|
76
|
+
ClientAliveInterval 300
|
|
77
|
+
ClientAliveCountMax 2
|
|
78
|
+
|
|
79
|
+
# Reiniciar SSH
|
|
80
|
+
systemctl restart sshd
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Passo 4: Firewall
|
|
84
|
+
```bash
|
|
85
|
+
# UFW (Ubuntu/Debian)
|
|
86
|
+
ufw default deny incoming
|
|
87
|
+
ufw default allow outgoing
|
|
88
|
+
ufw allow ssh
|
|
89
|
+
ufw allow 80/tcp
|
|
90
|
+
ufw allow 443/tcp
|
|
91
|
+
ufw enable
|
|
92
|
+
|
|
93
|
+
# Para VPN: adicionar porta WireGuard
|
|
94
|
+
ufw allow 51820/udp
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Passo 5: Atualizações automáticas
|
|
98
|
+
```bash
|
|
99
|
+
apt install unattended-upgrades
|
|
100
|
+
dpkg-reconfigure -plow unattended-upgrades
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Passo 6: Docker (se necessário)
|
|
104
|
+
```bash
|
|
105
|
+
curl -fsSL https://get.docker.com | sh
|
|
106
|
+
usermod -aG docker fabio
|
|
107
|
+
# Relogar para aplicar grupo
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Passo 7: Monitoramento básico
|
|
111
|
+
```bash
|
|
112
|
+
# Instalar ferramentas essenciais
|
|
113
|
+
apt install htop iotop ncdu fail2ban
|
|
114
|
+
|
|
115
|
+
# Fail2ban (proteção contra brute force)
|
|
116
|
+
systemctl enable fail2ban
|
|
117
|
+
systemctl start fail2ban
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Hardening avançado
|
|
121
|
+
|
|
122
|
+
| Item | Comando/Config | Prioridade |
|
|
123
|
+
|------|---------------|-----------|
|
|
124
|
+
| SSH key-only | `PasswordAuthentication no` | 🔴 Crítico |
|
|
125
|
+
| Disable root login | `PermitRootLogin no` | 🔴 Crítico |
|
|
126
|
+
| Fail2ban | `apt install fail2ban` | 🟠 Alta |
|
|
127
|
+
| UFW firewall | `ufw enable` | 🟠 Alta |
|
|
128
|
+
| Unattended upgrades | `dpkg-reconfigure unattended-upgrades` | 🟡 Média |
|
|
129
|
+
| SSH port diferente | `Port 2222` em sshd_config | 🟡 Média |
|
|
130
|
+
| 2FA SSH | `libpam-google-authenticator` | 🟢 Opcional |
|
|
131
|
+
| Audit logging | `auditd` + regras | 🟢 Opcional |
|
|
132
|
+
| CrowdSec | Alternativa moderna ao fail2ban | 🟢 Opcional |
|
|
133
|
+
|
|
134
|
+
## Regras de segurança
|
|
135
|
+
- ✅ Nunca usar root para tarefas do dia a dia
|
|
136
|
+
- ✅ SSH somente por chave (nunca senha)
|
|
137
|
+
- ✅ Firewall ativo com regras mínimas
|
|
138
|
+
- ✅ Backups regulares (ponto de restauração antes de mudanças)
|
|
139
|
+
- ❌ Nunca expor portas desnecessárias sem firewall
|
|
140
|
+
- ❌ Nunca armazenar chaves SSH privadas no servidor
|