Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
152 changes: 152 additions & 0 deletions .claude/skills/kambo-social/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
---
name: kambo-social
description: Gera o post do dia do Kambo e publica no Threads usando o Chrome nativo do Claude Code (--chrome). Determina o dia do ciclo de 30 dias, extrai o texto do arquivo correspondente e controla o browser para abrir threads.net e publicar.
triggers:
- social
- publicar post
- postar hoje
- threads
- divulgar kambo
- post do dia
- publica hoje
---

# Kambo Social — Publicação Diária no Threads

Usa o Chrome integrado ao Claude Code para publicar o post do dia no Threads.

## Passo 1 — Determinar o dia do ciclo

Leia o arquivo de controle:

```
Read: social-media/.start-date
```

- **Não existe** → crie-o com a data de hoje (`YYYY-MM-DD`) e use `dia = 1`.
- **Existe** → calcule: `dia = ((hoje - start_date).days % 30) + 1`

Informe: `📅 Hoje é o dia N/30 do ciclo (início: DATA)`

Verifique também se já houve publicação hoje em `social-media/post-log.jsonl`.
Se a última entrada tiver o timestamp de hoje, pergunte ao usuário se quer publicar novamente antes de continuar.

## Passo 2 — Carregar e exibir o post

Leia o mapa centralizado de posts:

```
Read: social-media/posts-map.json
```

Este arquivo contém `{ "1": "caminho/relativo.md", ..., "30": "..." }`.
Use a chave correspondente ao dia calculado no Passo 1 para obter o caminho do arquivo.

Leia o arquivo em `social-media/posts/<caminho>`. Extraia o conteúdo do **primeiro bloco de código** (entre o primeiro par de ` ``` `). Esse é o texto pronto para publicar.

Exiba para o usuário:
```
📝 Post do dia N:
──────────────────────────────────────
[TEXTO EXTRAÍDO]
──────────────────────────────────────
📊 X caracteres (Threads suporta até 500)
```

Se tiver mais de 500 caracteres, avise e trunce em 497 + `...`.

## Passo 3 — Publicar no Threads via Chrome

Use as ferramentas de browser nativas do Claude Code.

### 3a. Abrir o Threads

Navegue para `https://www.threads.net` e aguarde o carregamento.

Tire um screenshot para ver o estado atual da página.

### 3b. Verificar login

Se a URL contiver `/login` ou `/signup`, ou a página mostrar formulário de login, **pare** e informe:

```
❌ Chrome não está logado no Threads.
Faça login manualmente em threads.net e rode /kambo-social novamente.
```

### 3c. Abrir o composer de novo post

Procure e clique no elemento de criação de post. Ordem de tentativa:

1. Link ou botão com `href="/compose"`
2. Elemento com `aria-label` contendo "New thread" ou "Novo thread"
3. Ícone de lápis / compose na barra de navegação
4. Qualquer botão proeminente com texto "New", "Novo", "Post" ou "Thread"

Se nenhum funcionar com clique, navegue diretamente para `https://www.threads.net/compose`.

Tire screenshot após abrir o composer para confirmar.

### 3d. Inserir o texto

Localize o campo de entrada (contenteditable ou textarea). Clique nele para focar.

Injete o texto preservando emojis e quebras de linha com JavaScript:

```javascript
const field =
document.querySelector('[contenteditable="true"]') ||
document.querySelector('div[role="textbox"]') ||
document.querySelector('textarea');
if (field) {
field.focus();
document.execCommand('insertText', false, `TEXTO_DO_POST`);
}
```

Tire screenshot para confirmar que o texto apareceu corretamente no campo.

### 3e. Publicar

Localize e clique no botão de publicação:

- Texto "Post", "Publicar", "Post thread" ou "Publicar thread"
- `aria-label` "Post" ou "Publicar"
- Botão primário/destacado visível no composer

Aguarde 2–3 segundos e tire um screenshot final para confirmar que o post foi publicado (o composer deve fechar ou mostrar confirmação).

## Passo 4 — Registrar no log

Acrescente uma linha ao `social-media/post-log.jsonl`:

```json
{"timestamp": "YYYY-MM-DDTHH:MM:SS", "day": N, "file": "CAMINHO_RELATIVO", "chars": N, "status": "published"}
```

## Passo 5 — Resumo final

```
✅ Publicado no Threads!
📅 Dia N/30 | DATA HORA
📝 social-media/posts/...
📊 N caracteres

Próximo post: amanhã, dia N+1 → [tema do próximo dia]
```

---

## Comportamento para dia específico

Se o operador disser `"publica o dia 5"` ou `"post do dia 12"`, use esse número diretamente sem calcular pelo ciclo.

## Requisito

Este skill requer que o Claude Code seja iniciado com suporte ao Chrome:

```
claude --chrome
```

As ferramentas de browser ficam disponíveis automaticamente nesse modo.
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,9 @@ htmlcov/
reports/
.reports/
tmp/
social-media/.start-date
social-media/.env
social-media/post-log.jsonl
social-media/debug-screenshot*.png
social-media/post-confirma-*.png
typescript
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ When the user's request matches an available skill, invoke it via the Skill tool
| Code review, check quality, review kambo | `/kambo-review` |
| Confidence check, should I report, impact analysis, question findings | `/kambo-confidence` |
| One-liner, recipe, KingOfBugBounty, OFJAAAH, certstream, technique catalog | `/kambo-kingrecon` |
| Post social, publicar Threads, post do dia, divulgar kambo | `/kambo-social` |

## Self-Improvement Loop

Expand Down
45 changes: 45 additions & 0 deletions social-media/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# =============================================================================
# Kambo Social Media Poster — Configuração
# Copie este arquivo para .env e preencha os valores
# =============================================================================

# ─────────────────────────────────────────────────
# THREADS (Meta) — Modo API
# Obtenha em: https://developers.facebook.com/docs/threads
# ─────────────────────────────────────────────────
THREADS_USER_ID=your_threads_user_id_here
THREADS_ACCESS_TOKEN=your_long_lived_access_token_here

# ─────────────────────────────────────────────────
# Modo de publicação
# "api" → usa a API oficial do Threads (requer token acima)
# "browser" → usa Chrome via Playwright (usa sua sessão já logada)
# ─────────────────────────────────────────────────
POSTER_MODE=browser

# ─────────────────────────────────────────────────
# Chrome — Modo browser
# Caminho para o perfil do Chrome que já está logado no Threads
# Windows: C:\Users\SEU_USUARIO\AppData\Local\Google\Chrome\User Data
# macOS: /Users/seu_usuario/Library/Application Support/Google/Chrome
# Linux: /home/seu_usuario/.config/google-chrome
# ─────────────────────────────────────────────────
CHROME_PROFILE_DIR=

# Qual perfil do Chrome usar (normalmente "Default")
CHROME_PROFILE_NAME=Default

# Abrir Chrome visível (True) ou em segundo plano (False)
# Recomendado: True na primeira vez para confirmar o login
CHROME_HEADLESS=False

# ─────────────────────────────────────────────────
# Data de início do ciclo (formato YYYY-MM-DD)
# Deixe em branco para usar a data da primeira execução
# ─────────────────────────────────────────────────
KAMBO_START_DATE=

# ─────────────────────────────────────────────────
# Link do repositório (aparece em todos os posts)
# ─────────────────────────────────────────────────
REPO_URL=https://github.com/ktfth/kambo
Loading
Loading