Um agente de IA no Telegram para caça a vagas de emprego — busca em múltiplas plataformas, gera currículos adaptados em PDF e escreve cartas de apresentação. Construído sobre o Nanobot.
Telegram → Nanobot Gateway → Agent Loop → job_scraper
→ resume_generator (Jinja2 + Playwright → PDF)
→ cover_letter (texto ou PDF)
→ web_search / web_fetch
- Docker + Compose
- Uma chave de API de um provedor de IA (veja o script
setup-model.sh) - Um token de bot do Telegram (criado via @BotFather)
- Um currículo preenchido em
RESUME.md
git clone <seu-repositorio>
cd job-hunter-agent
cp .env.example .envEdite .env com suas chaves:
# Escolha UM provedor (veja setup-model.sh para mais opções)
DEEPSEEK_API_KEY=sk-sua-chave-aqui
# ou GROQ_API_KEY=gsk_sua-chave-aqui
# ou GEMINI_API_KEY=sua-chave-aqui
TELEGRAM_TOKEN=1234567890:ABCdefGHIjklmNOPqrstUVwxyz
TELEGRAM_ALLOW_FROM=*Use o script interativo para escolher e configurar o provedor:
chmod +x setup-model.sh
./setup-model.shOpções disponíveis:
- Groq — grátis, sem cartão de crédito (Llama 3.3 70B)
- Google Gemini — grátis, sem cartão de crédito (Gemini 2.5 Flash)
- DeepSeek — pago por uso, ~$0.14/M tokens (DeepSeek V4 Flash)
Edite RESUME.md com suas informações profissionais completas — esta é a fonte da verdade do agente.
Opcional: edite workspace/USER.md com suas preferências.
Edite JOBS_PLATFORMS.md para ativar/desativar plataformas. Suportadas atualmente:
| Plataforma | Chave | Tipo |
|---|---|---|
| Indeed (global) | indeed |
RSS |
| Indeed Brasil | indeed_br |
RSS |
| Remote OK | remoteok |
API JSON |
| Programathor | programathor |
HTML scraping |
| GeekHunter | geekhunter |
HTML scraping |
- Abra o Telegram e procure por @BotFather
- Envie o comando
/newbot - Escolha um nome (ex: "Meu Job Hunter")
- Escolha um username único terminando em
bot(ex:MeuJobHunterBot) - O @BotFather vai responder com um token. Copie este token — será seu
TELEGRAM_TOKEN
Opção A — Pelo @userinfobot:
- Pesquise por @userinfobot no Telegram
- Envie
/start - O bot responderá com seu ID numérico
Opção B — Pelo próprio Job Hunter Agent:
- Deixe o
TELEGRAM_ALLOW_FROMcomo*temporariamente - Suba o bot com
docker compose up -d - Envie qualquer mensagem para o bot no Telegram
- Veja nos logs:
docker compose logs job-hunter | grep "from"
TELEGRAM_TOKEN=1234567890:ABCdefGHIjklmNOPqrstUVwxyz
TELEGRAM_ALLOW_FROM=123456789 # seu user ID numéricodocker compose build
docker compose up -dO bot está no ar no Telegram. Envie qualquer mensagem para começar.
docker compose run --rm job-hunter-cli agent -m "Busque vagas de React developer"Converse com o bot no Telegram: "Busque vagas de desenvolvedor Python remoto"
O agente vai:
- Pesquisar em todas as plataformas configuradas
- Pontuar cada vaga contra suas habilidades (RESUME.md)
- Mostrar resultados ordenados por fit (🟢 ≥70% / 🟡 40-69% / 🔴 <40%)
"Gere um currículo para a vaga de Senior Software Engineer na TechCorp"
O agente vai:
- Ler a descrição da vaga
- Selecionar suas experiências mais relevantes
- Reordenar habilidades para os requisitos
- Gerar um PDF com HTML+Tailwind via Playwright
"Escreva uma carta de apresentação para a vaga de Full Stack Developer"
O agente retorna texto formatado (pronto para copiar) ou PDF formal.
O projeto inclui 3 tools Nanobot em job_hunter_tools/:
job_scraper— busca no Indeed (RSS), RemoteOK (API JSON), Programathor e GeekHunter (HTML)resume_generator— renderiza template Jinja2 com Tailwind CSS, exporta para PDF via Playwright/Chromiumcover_letter— gera cartas de apresentação personalizadas em texto ou PDF
Para adicionar uma nova tool:
- Crie uma classe extendendo
nanobot.agent.tools.base.Tool - Registre em
pyproject.tomlsob[project.entry-points."nanobot.tools"] - Reconstrua a imagem Docker
Os templates estão em templates/ usando Jinja2 + Tailwind CSS (carregado via CDN):
| Arquivo | Finalidade |
|---|---|
resume.pt-br.html |
Template de currículo — Português |
resume.en.html |
Template de currículo — Inglês |
email.pt-br.html |
Carta de apresentação — Português |
email.en.html |
Carta de apresentação — Inglês |
├── config.json Configuração do gateway Nanobot
├── docker-compose.yml Serviços: gateway + CLI
├── Dockerfile Python 3.12 + nanobot + Playwright
├── pyproject.toml Pacote Python com entry points
├── setup-model.sh Script interativo de configuração do modelo
│
├── job_hunter_tools/ Tools Nanobot customizadas (Python)
│ ├── job_scraper.py
│ ├── resume_generator.py
│ └── cover_letter.py
│
├── templates/ Templates HTML Jinja2
├── skills/job-hunter/SKILL.md Skill Nanobot (persona + workflow do agente)
├── RESUME.md Seu currículo (fonte da verdade)
├── JOBS_PLATFORMS.md Configuração das plataformas de vaga
│
├── workspace_files/ Montado como read-only no container
│ ├── AGENTS.md Instruções do agente
│ └── SOUL.md Personalidade do agente
│
├── workspace/ Dados de execução (persistidos)
│ ├── output/ PDFs gerados
│ ├── memory/MEMORY.md Memória do agente
│ ├── USER.md Preferências do usuário
│ └── HEARTBEAT.md Tarefas periódicas
│
└── sample/ Arquivos de exemplo
└── RESUME.example.md
| Variável | Obrigatório | Descrição |
|---|---|---|
DEEPSEEK_API_KEY |
Não* | Chave da API DeepSeek |
GROQ_API_KEY |
Não* | Chave da API Groq (grátis) |
GEMINI_API_KEY |
Não* | Chave da API Google Gemini (grátis) |
TELEGRAM_TOKEN |
Sim | Token do bot Telegram |
TELEGRAM_ALLOW_FROM |
Não | Restringir a user IDs (separados por vírgula) ou * |
*Configure um provedor de IA. Use setup-model.sh para configurar automaticamente.
# Construir
docker compose build
# Rodar gateway (Telegram)
docker compose up -d
# Modo CLI
docker compose run --rm job-hunter-cli agent -m "seu comando"
# Ver logs
docker compose logs -f
# Parar
docker compose down- Adicione um handler em
job_hunter_tools/job_scraper.py(dicionárioPLATFORM_HANDLERS) - Adicione a plataforma em
JOBS_PLATFORMS.md - Reconstrua:
docker compose build
MIT