Resumo em uma frase: Você já escreve código com o Claude Code; por que não usá-lo, de forma natural, para conseguir emprego? O Career-Ops transforma a CLI de programação por IA em um comandante de contratação — basta colar a URL de uma JD, e ele avalia automaticamente, gera um CV otimizado para ATS e acompanha o progresso. O próprio autor usou isso para filtrar 740+ ofertas, gerar 100+ CVs personalizados e, no fim, conquistar a vaga de Head of Applied AI.
Visão geral do projeto
Career-Ops (também conhecido como careerops) é um pipeline de candidatura guiado por IA, GitHub: santifer/career-ops, protocolo MIT. Seu foco principal é:
Transformar qualquer CLI de programação por IA em um completo command center de candidatura.
Ele não é mais uma ferramenta de "IA para melhorar o currículo" nem um robô de envio em massa. A filosofia de design do Career-Ops é fazer subtração: dentre centenas de ofertas, te ajuda a separar as poucas que realmente valem a pena aplicar, usando uma pontuação A-F + 6 dimensões de avaliação + otimização ATS em PDF + acompanhamento 100% automático.
Recursos principais (15 slash commands):
| Cenário | Comando | Descrição |
|---|---|---|
| Colar URL da JD | /career-ops | Pipeline automático (avaliação + relatório + PDF + tracker) |
| Avaliar uma única vaga | /career-ops evaluate | Pontuação A-F + análise por 6 dimensões |
| Comparar várias vagas | /career-ops compare | Ordena múltiplas ofertas |
| Escanear vagas | /career-ops scan | 45+ empresas pré-configuradas, rodando APIs de Ashby/Greenhouse/Lever |
| Avaliação em lote | /career-ops batch | Rodar workers em paralelo claude -p |
| Gerar PDF | /career-ops pdf | CV otimizado para ATS (fontes Space Grotesk + DM Sans) |
| Exportar em LaTeX | /career-ops latex | .tex amigável para o Overleaf |
| Rastrear candidatura | /career-ops tracker | Visão geral do status |
| Preencher formulários | /career-ops apply | Preenchimento assistido por IA (sem clicar em Submit) |
| Pesquisa aprofundada | /career-ops deep | Pesquisa sobre a empresa |
| Preparação para entrevista | /career-ops interview | Histórias STAR+R específicas da empresa |
| Contato via LinkedIn | /career-ops contact | Encontrar pessoas + rascunhar mensagem |
| Modo de análise (patterns) | /career-ops patterns | Análise de padrões de rejeição e otimização de estratégia |
| Ritmo de follow-up | /career-ops followup | Cronograma de follow-up |
| Avaliar curso/projeto | /career-ops training / project | Trajetória de melhoria pessoal |
CLIs de programação por IA suportadas: Claude Code / OpenCode / Gemini CLI / Codex / Qwen / GitHub Copilot / Kimi — desde que estejam alinhadas com open agent skill standard.
Suporte a vários idiomas: padrão em inglês; também há alemão (modes/de/) / francês (modes/fr/) / japonês (modes/ja/) / turco (modes/tr/) / chinês simplificado (README.cn.md) / chinês tradicional (README.zh-TW.md).
Resultados: o autor santifer usou isso para avaliar 740+ ofertas, gerar 100+ CVs personalizados e, por fim, recebeu a oferta de Head of Applied AI.
Dificuldade / Duração / Ganhos
- Dificuldade: ⭐⭐ (média, é preciso saber usar uma CLI de programação por IA como o Claude Code)
- Duração: 30–60 minutos no primeiro onboarding (inclui preparação de cv.md + configuração do profile)
- Ganhos:
- Rodar um pipeline real e utilizável de candidatura com IA
- Entender o design de arquitetura do Agent: "User Layer vs System Layer"
- Aprender a usar pontuação A-F + histórias STAR+R para uma candidatura mais certeira
- Ver como um projeto open-source que foi reportado pela WIRED / Business Insider se estrutura
- Aproveitar e guardar no bolso 15 slash commands — usar todo dia durante a busca
Perfil do público-alvo
- Desenvolvedores procurando emprego / mudando de emprego / de olho em oportunidades
- Já usuários de Claude Code / OpenCode / Gemini CLI
- Quer sair de "candidatar em massa" e ir para "candidatar com precisão", sem desperdiçar tempo em ofertas ruins
- Quer saber como é um projeto de AI Agent nível produção com 7k+ estrelas
TIP
O que mais custa na fase de candidaturas são os tokens. O Career-Ops no batch mode rodando avaliação de 10+ ofertas é uma delícia, mas ao rodar 100 ofertas com o Claude/Anthropic via API oficial, em uma noite a conta pode ser $20-40; ao longo de um mês, custos na casa dos dígitos de milhares são totalmente normais.
Como eu faço (compartilhamento, não recomendação): conecto Defapi, que usa um protocolo compatível com a Anthropic; basta alterar o Base URL em uma linha:
# Supondo que você use o Claude Code, altere em ~/.claude/settings.json ou via env
ANTHROPIC_BASE_URL=https://api.defapi.org
ANTHROPIC_API_KEY=sk-xxxxx # pegue no painel do defapi.org
Quase todos os modelos da Defapi são compatíveis com as três famílias de protocolos principais — v1/chat/completions (OpenAI) / v1/messages (Anthropic) / v1beta/models (Gemini) — sem necessidade de mudança de código no lado do agent: prompts de avaliação / histórias STAR / schema do tracker continuam como antes. O modelo ainda é o mesmo; só o custo de compra é menor — na fase de candidaturas, cortar a conta de tokens pela metade de verdade é algo palpável. O FAQ Q5 aprofunda isso depois.
Dependências principais e ambiente
Configuração mínima:
| Item | Requisito |
|---|---|
| Node.js | 20+ |
| CLI de programação por IA | ter pelo menos uma instalada (Claude Code / OpenCode / Gemini CLI / Codex / Qwen / Copilot) |
| Playwright | navegador Chromium (necessário para gerar PDF) |
| Sistema operacional | macOS / Linux / Windows (WSL recomendado) |
Opcional / aprimoramentos:
| Item | Uso |
|---|---|
| Go 1.21+ | rodar TUI Dashboard |
| Google AI Studio API Key | rodar o script independente gemini-eval.mjs (quota grátis) |
| Navegador Chromium | verificar se as ofertas ainda estão ativas (Playwright instala automaticamente) |
| Chaves de várias LLM APIs | basta usar um protocolo compatível (Claude / OpenAI / Anthropic) |
TIP
Nem precisa assinar o Claude Max. O Career-Ops é um sistema "guiado por protocolo de LLM"; você consegue conectar qualquer API compatível com v1/messages ou v1/chat/completions (veja o TIP acima, na seção "público-alvo").
Árvore completa da estrutura do projeto
career-ops/
├── AGENTS.md # Instruções gerais do Agent (entre CLIs)
├── CLAUDE.md # Exclusivo para Claude Code (import AGENTS.md)
├── GEMINI.md # Exclusivo para Gemini CLI
├── cv.md # Seu CV (criado por você, arquivo-chave)
├── article-digest.md # Suas evidências de destaques (opcional)
├── config/
│ └── profile.example.yml # Seu modelo de perfil (persona)
├── modes/ # 15 modos de skill
│ ├── _shared.md # Contexto compartilhado da camada do sistema
│ ├── _profile.template.md # Personalização na camada do usuário (coloque sua archetype)
│ ├── oferta.md # Avaliação de uma única oferta
│ ├── pdf.md # Geração de PDF
│ ├── scan.md # Varredura de vagas
│ ├── batch.md # Processamento em lote
│ ├── auto-pipeline.md # URL → avaliação + PDF + tracker
│ ├── de/ # Modo em alemão
│ ├── fr/ # Modo em francês
│ ├── ja/ # Modo em japonês
│ └── tr/ # Modo em turco
├── templates/
│ ├── cv-template.html # Template de CV otimizado para ATS
│ ├── cv-template.tex # Template LaTeX
│ ├── portals.example.yml # Empresas pré-configuradas (45+)
│ └── states.yml # Dicionário de estados de candidatura
├── data/ # Dados de candidatura (gitignored)
│ ├── applications.md # Tabela principal de acompanhamento
│ ├── pipeline.md # Caixa de entrada de URLs a processar
│ ├── scan-history.tsv # Deduplicação de scans
│ └── follow-ups.md # Histórico de follow-ups
├── reports/ # Relatórios de avaliação (gitignored)
├── output/ # PDFs gerados (gitignored)
├── jds/ # Texte de JD armazenadas aqui (opcional)
├── interview-prep/ # Preparação para entrevistas
│ ├── story-bank.md # Histórias STAR+R acumuladas
│ └── {company}-{role}.md # Inteligência específica da empresa
├── batch/
│ ├── batch-prompt.md # prompt para workers
│ ├── batch-runner.sh # script de orquestração
│ └── tracker-additions/ # adições para mesclar na tabela principal de acompanhamento
├── dashboard/ # Go TUI (Bubble Tea)
│ ├── main.go
│ └── internal/
├── fonts/ # Space Grotesk + DM Sans
├── providers/ # Configuração do provedor de LLM
├── docs/ # Documentação multilíngue + cobertura da mídia
├── examples/ # Exemplos de CV / relatórios / destaques
└── *.mjs # Scripts de scan / validação / merge / health check
Como usuário, você só precisa mexer em quatro arquivos: cv.md / config/profile.yml / modes/_profile.md / portals.yml — isso é o User Layer; atualizações do sistema não mexem nele. Todo o resto fica a cargo do Agent.
Passo a passo
Passo 1: Clone + Instale
git clone https://github.com/santifer/career-ops.git
cd career-ops
npm install
npx playwright install chromium # Necessário para gerar PDF
WARNING
Não pule npx playwright install chromium. Mais tarde, o /career-ops pdf usa renderização via Playwright; sem Chromium você recebe erro "browser not found".
Passo 2: Checagem de saúde
npm run doctor
Isso valida a versão do Node.js, o Playwright, arquivos essenciais e permissões de diretório. Se falhar, o "médico" vai te dizer o que está faltando; corrija e rode de novo.
Passo 3: Crie seu cv.md
Esse é o ponto de partida de todo o pipeline — sem ele o Agent não consegue avaliar ofertas.
Crie cv.md na raiz do projeto:
# Seu Nome
**Email:** [email protected]
**Localização:** Berlin, Alemanha (CET)
**LinkedIn:** linkedin.com/in/you
**GitHub:** github.com/you
## Summary
Engenheiro sênior de backend com 6 anos construindo sistemas distribuídos...
(Objetivo: 2-3 parágrafos, escreva "o que você faz + as 1-2 coisas em que você é mais forte")
## Experience
### Staff Engineer — Empresa A (2023 - Present)
- Liderou a migração de X para Y, reduzindo Z em 40%
- (Tente incluir números; esta parte será usada pelo Agent para casar com a JD)
### Senior Engineer — Empresa B (2020 - 2023)
- ...
## Education
...
## Skills
Backend: Go, Python, PostgreSQL, Kafka
AI/ML: PyTorch, LangChain, RAG
...
TIP
Não quer escrever sozinho? Depois de iniciar o Claude Code, diga algo como "vou colar meu CV antigo" / "aqui está minha URL do LinkedIn" / "descreva tudo e você escreve pra mim"; o Agent transforma isso em cv.md. Os três caminhos de onboarding estão com prompts no README.
Passo 4: Configure config/profile.yml
cp config/profile.example.yml config/profile.yml
Abra config/profile.yml e preencha:
personal:
name: "Seu Nome"
email: "[email protected]"
location: "Berlim, Alemanha"
timezone: "CET"
targeting:
roles:
- "Senior Backend Engineer"
- "Staff Engineer"
- "AI Platform Engineer"
comp_target:
base_min: 130000
base_target: 160000
currency: "EUR"
remote_preference: "remote-first"
deal_breakers:
- "no on-call"
- "no Java"
- "no < 20 person startups"
# Se quiser usar modos em chinês / alemão / francês / japonês / turco, adicione esta linha
# language:
# modes_dir: modes/de
WARNING
Não edite manualmente modes/_shared.md. Atualizações do sistema vão sobrescrevê-lo. Persona pessoal / argumentos de negociação / objetivos de salário: tudo isso deve ir em modes/_profile.md ou config/profile.yml. Esta é a regra de Data Contract que o README ressalta várias vezes.
Passo 5: Configure portals.yml
cp templates/portals.example.yml portals.yml
Por padrão vem com 45+ empresas + 19 buscas (queries), cobrindo:
# AI Labs
- anthropic
- openai
- mistral
- cohere
# Voice AI
- elevenlabs
- vapi
- deepgram
# AI Platforms
- retool
- airtable
- vercel
- temporal
Para adicionar empresas que você quer perseguir, basta colocá-las em portals.yml. A cobertura do job board inclui Ashby / Greenhouse / Lever / Wellfound / Workable / RemoteFront.
Passo 6: Peça ao Agent para te "Onboard"
# Selecione uma CLI de IA que você instalou
claude # Claude Code
# ou
gemini # Gemini CLI
# ou
opencode # OpenCode
# ou
codex # Codex
No CLI, diga:
Configure o career-ops para mim. Eu acabei de clonar, e cv.md e config/profile.yml já estão preenchidos.
Por favor, verifique se meu onboarding está completo e o que ainda falta.
O Agent vai rodar uma checagem de inicialização:
cv.mdexiste? ✅config/profile.ymlé o arquivo real (não.example)? ✅modes/_profile.mdfoi copiado a partir de_profile.template.md? ⚠️portals.ymlé o arquivo real (não.example)? ✅
Qualquer ❌ cai no modo de orientação, e ele te pede, de forma 1-para-1, o que completar.
TIP
Na primeira execução, o Agent vai perguntar proativamente: "Qual é uma conquista profissional de que você mais se orgulha? Quais são seus deal-breakers? Qual é seu superpoder?" — responda com seriedade por 5 minutos a mais; isso entra em modes/_profile.md e toda a precisão da pontuação nas próximas avaliações depende disso. É como fazer onboarding de um novo recrutador na primeira semana; na segunda, ele te entende melhor do que a maioria dos recruiters humanos.
Passo 7: Primeira avaliação
Cole uma URL de JD para o Agent:
/career-ops https://jobs.anthropic.com/staff-software-engineer-applied-ai
O Agent roda um pipeline 100% automático:
- Detecção de Archetype — classifica em LLMOps / Agentic / PM / SA / FDE / Transformation
- Avaliação A-F — 6 dimensões (Role summary / CV match / Level strategy / Comp research / Personalization / Interview prep)
- Geração de relatório — grava em
reports/001-anthropic-2026-06-09.md - Geração de PDF — roda renderização via Playwright para um CV otimizado para ATS, e salva em
output/001-anthropic-cv.pdf - Escrita no tracker — adiciona uma linha em
data/applications.md - Atualização de integridade do pipeline — roda
node verify-pipeline.mjspara checar
Você deve ver, após 30-60 segundos, um relatório completo + um PDF de CV otimizado para ATS.
WARNING
A primeira pontuação da avaliação não vai ficar perfeita. O sistema ainda não te conhece, então pode dar nota alta demais ou baixa demais. Sem pressa: rode 3-5 avaliações e, com base nos resultados, diga ao Agent "essa nota está alta demais porque XX" / "eu não mencionei que tenho experiência em XX" — o Agent vai incorporar o que aprendeu em modes/_profile.md; quanto mais usar, mais preciso fica.
Passo 8: Primeira varredura
/career-ops scan
Ou equivalente:
node scan.mjs # zero token, apenas captura via API
node scan.mjs --verify # API + validação via Playwright, filtrando vagas expiradas
Após uma rodada com 45+ empresas pré-configuradas e 19 queries de busca, normalmente surgem 200-500 vagas novas — elas entram direto na caixa de entrada data/pipeline.md. Depois, com workers claude -p rodando em paralelo, processar 100+ ofertas em uma noite não é sonho.
Passo 9: Rodar o TUI Dashboard (opcional)
Se você quiser ver o progresso pela interface do terminal:
cd dashboard
go build -o career-dashboard .
./career-dashboard --path ..
São 6 tabs de filtros, 4 modos de ordenação, visão agrupada/flat, pré-visualização lazy-loaded e ao selecionar muda o status. Tema Catppuccin Mocha, bem bonito.
Passo 10: Atualizar o sistema (importante!)
O Career-Ops evolui rápido; a cada poucas semanas, surgem novos modes e novas configurações de empresas.
# Na raiz do projeto, peça ao Agent para checar
claude # diga a ele "verifique se há uma nova versão do career-ops"
O Agent roda automaticamente node update-system.mjs check; a saída JSON fica mais ou menos assim:
{"status": "update-available", "local": "1.3.0", "remote": "1.4.0", "changelog": "..."}
Ele vai te dizer: "Da versão v1.3.0 para v1.4.0 está disponível, seus dados (CV / profile / tracker / reports) não serão tocados; quer atualizar?". Para atualizar:
node update-system.mjs apply # atualiza
node update-system.mjs rollback # se não gostar, volta atrás
Solução de problemas (FAQ)
Q1: Não encontro cv.md / Agent travou no onboarding
A causa mais comum é: cv.md não está na raiz do projeto.
# confirme que está na raiz
ls -la cv.md
# você deve ver algo como -rw-r--r-- cv.md
# se não existir, crie (na raiz)
cd career-ops
touch cv.md
# e então preencha o conteúdo
Q2: Falha na geração do PDF, "browser not found"
O Playwright não está instalado ou não tem Chromium instalado:
npx playwright install chromium
# Se sua rede no Brasil/China estiver lenta, você pode usar um mirror
PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright npx playwright install chromium
Q3: Pontuação de avaliação inflada / defasada
Isso acontece na primeira semana. Ajuste:
- Rode 3-5 avaliações a mais; em cada uma, dê feedback ao Agent "não concordo com essa nota porque XX"
- O Agent escreve o que aprendeu em
modes/_profile.md - Foque em checar se
modes/_profile.mdfoi preenchido corretamente: seu piso salarial, preferência por remoto, posicionamento de função e casos reversos (contraindicações)
Importante: conteúdo personalizado vai em
modes/_profile.mdouconfig/profile.yml. Não editemodes/_shared.md— ele será sobrescrito pelas atualizações do sistema.
Q4: Verificação por WebSearch/WebFetch funciona mesmo?
Não. A regra interna do Career-Ops é obrigatoriamente validar se a oferta ainda está ativa usando Playwright:
# use o slash command; internamente roda Playwright
/career-ops verify --url <JD_URL>
No modo batch (
claude -p), o Playwright não está disponível; ele vai marcar**Verification:** unconfirmed (batch mode). Você precisa revisar manualmente.
Q5: Explodiu o consumo de tokens no lote
Ao avaliar 100+ ofertas, é fácil passar $20 na conta numa noite. Há três correções possíveis:
- Reduzir a quantidade de batch — rode 10-20 por vez; não varra 100+ de uma vez
- Fallback com modelo local — tarefas estruturadas como
ofertas(comparação) /tracker/pdfpodem trocar por um modelo local menor - Conectar Defapi com API com desconto — protocolo 100% compatível; segue o mesmo modelo da opção oficial, e a conta mensal é cortada pela metade (configuração específica no TIP depois do parágrafo "público-alvo")
Q6: Quer trocar para os modos em alemão / francês / japonês / turco
# 1. Edite config/profile.yml
language:
modes_dir: modes/de # ou fr / ja / tr
Ou diga diretamente ao Agent: "rode usando o modo em alemão"; ele vai alternar para a lógica de avaliação em modes/de/ (com termos localizados do mercado DACH, como 13. Monatsgehalt / Probezeit / AGG / Tarifvertrag).
WARNING
Depois de trocar para modes/de/, você vai rodar avaliação em alemão também para vagas em inglês. A menos que você só aplique em vagas alemãs, mantenha o modo padrão em inglês e troque manualmente apenas quando for se candidatar a vagas em alemão.
Q7: Campos de status com dados "sujos" formatados como **Applied**
O status no tracker foi colocado em negrito manualmente. Correção:
node normalize-statuses.mjs # normaliza estados
node dedup-tracker.mjs # remove duplicados
node verify-pipeline.mjs # health check
Depois, ajuste templates/states.yml para usar estados canônicos.
Leitura complementar / caminhos avançados
- User Layer vs System Layer: este é o design de engenharia mais interessante do Career-Ops —
modes/_profile.md(usuário) nunca é sobrescrito pormodes/_shared.md(sistema). Todo o seu conteúdo de onboarding personalizado continua intacto mesmo após 100 updates do sistema. Recomendado lerDATA_CONTRACT.mdpara ver a visão geral completa - Mudar archetype: diga ao Agent "change the archetypes to data engineering roles"; ele vai ajustar
modes/_profile.mdem vez demodes/_shared.md - Troca de idioma: ao aplicar para vagas em alemão/francês/japonês/turco, troque para
modes/{de,fr,ja,tr}/; a lógica de avaliação é automaticamente localizada (CDI / 賞与 / abono de transporte — termos locais) - TUI Dashboard avançado: o dashboard foi escrito em Go + Bubble Tea + Lipgloss, com paleta Catppuccin Mocha. Código-fonte em
dashboard/internal/; para adicionar filtros/ordenação customizados, é só alterar - Banco de histórias STAR+R:
interview-prep/story-bank.mdacumula suas histórias "Situation + Task + Action + Result + Reflection" entre avaliações; depois de 3-5 avaliações, você terá 5-10 histórias para lidar com qualquer pergunta comportamental em entrevistas - Fork do portfólio complementar: o portfolio do autor também é open-source — santifer/cv-santiago, com um chatbot de IA + painel LLMOps + estudos de caso; faça um fork e adapte para o seu
Repositório GitHub: santifer/career-ops. Documentação multilíngue em README.{cn,es,ja,ko-KR,pt-BR,ru,ua,zh-TW}.md. A filosofia de design em DATA_CONTRACT.md. Cobertura da mídia em docs/press/. Roadmap em ROADMAP.md (se não encontrar no projeto, pergunte ao Agent "show me your roadmap").