init
Release Please / release-please (push) Failing after 4m2s
Web CI / web typecheck + build (push) Successful in 3m39s
CodeQL Analysis / Analyze (javascript-typescript) (push) Failing after 1h1m49s
CodeQL Analysis / Analyze (go) (push) Failing after 1h1m49s

This commit is contained in:
redlineo committed 2026-07-13 10:14:00 +03:00
commit d295c7f139
1527 files changed
+270726

No files matched your search

+111
View File
@@ -0,0 +1,111 @@
# career-ops -- Modos em Português BR (`modes/pt/`)
Esta pasta contém as traduções em português brasileiro dos principais modos do career-ops para candidatos que buscam vagas no mercado brasileiro ou em empresas que operam em português.
## Quando usar estes modos?
Use `modes/pt/` se pelo menos uma das condições abaixo for verdadeira:
- Você se candidata principalmente a **vagas em português** (Gupy, Greenhouse BR, LinkedIn BR, Vagas.com.br, Catho, InfoJobs)
- Sua **língua do currículo** é português ou você alterna entre PT-BR e EN conforme a vaga
- Você precisa de respostas e cartas de apresentação em **português tech natural**, não traduzido por máquina
- Você precisa lidar com **especificidades do mercado brasileiro**: CLT vs PJ, 13º salário, FGTS, PLR, vale-refeição, plano de saúde, aviso prévio, período de experiência
Se a maioria das suas vagas é em inglês, fique com os modos padrão em `modes/`. Os modos em inglês funcionam automaticamente quando Claude detecta uma vaga em português — mas não conhecem as particularidades do mercado brasileiro no mesmo nível de detalhe.
## Como ativar?
O career-ops não tem um "switch de idioma" como flag de código. Em vez disso, existem dois caminhos:
### Caminho 1 -- Por sessão, via comando
Diga ao Claude no início da sessão:
> "Use os modos em português de `modes/pt/`."
ou
> "Avaliar e candidaturas em português -- use `modes/pt/_shared.md` e `modes/pt/oferta.md`."
Claude vai ler os arquivos desta pasta em vez de `modes/`.
### Caminho 2 -- Permanente, via perfil
Adicione em `config/profile.yml` uma preferência de idioma:
```yaml
language:
primary: pt-br
modes_dir: modes/pt
```
Lembre o Claude na primeira sessão de respeitar esse campo ("Olha no `profile.yml`, eu configurei `language.modes_dir`"). A partir daí, Claude usa automaticamente os modos em português.
> Nota: O campo `language.modes_dir` é uma convenção, não um schema rígido. Se os mantenedores quiserem estruturar diferente, o campo pode ser renomeado a qualquer momento.
## O que foi traduzido?
Esta primeira iteração cobre os quatro modos com maior impacto:
| Arquivo | Traduzido de | Finalidade |
|---------|-------------|------------|
| `_shared.md` | `modes/_shared.md` (EN) | Contexto compartilhado, arquétipos, regras globais, especificidades do mercado BR |
| `oferta.md` | `modes/oferta.md` (ES) | Avaliação completa de uma vaga (Blocos A-F) |
| `aplicar.md` | `modes/apply.md` (EN) | Assistente ao vivo para formulários de candidatura |
| `pipeline.md` | `modes/pipeline.md` (ES) | Inbox de URLs / Second Brain para vagas acumuladas |
Os demais modos (`scan`, `batch`, `pdf`, `tracker`, `auto-pipeline`, `deep`, `contacto`, `ofertas`, `project`, `training`) não estão neste PR de propósito. Eles continuam funcionando via os originais em EN/ES, pois seu conteúdo é majoritariamente tooling, caminhos e comandos de configuração — que devem ser independentes de idioma.
Se a comunidade adotar os modos em português, mais modos serão traduzidos em PRs futuros.
## O que continua em inglês?
Propositalmente não traduzido, porque é vocabulário padrão de tech:
- `cv.md`, `pipeline`, `tracker`, `report`, `score`, `archetype`, `proof point`
- Nomes de tools (`Playwright`, `WebSearch`, `WebFetch`, `Read`, `Write`, `Edit`, `Bash`)
- Valores de status no tracker (`Evaluated`, `Applied`, `Interview`, `Offer`, `Rejected`)
- Code snippets, caminhos de arquivo, comandos
Os modos usam português tech brasileiro, como se fala em times de engenharia reais em São Paulo, Florianópolis ou Belo Horizonte: texto corrido em português, termos técnicos em inglês onde são de uso comum. Nada de traduzir "pipeline" para "tubulação" ou "cv.md" para "curriculo.md".
## Vocabulário de Referência
Se você for adaptar ou expandir os modos, siga este vocabulário para manter a consistência de tom:
| Inglês | Português BR (nesta codebase) |
|--------|-------------------------------|
| Job posting | Vaga / Descrição da vaga |
| Application | Candidatura |
| Cover letter | Carta de apresentação |
| Resume / CV | Currículo |
| Salary | Salário / Remuneração |
| Compensation | Remuneração |
| Skills | Habilidades / Competências |
| Interview | Entrevista |
| Hiring manager | Gestor da vaga / Hiring manager |
| Recruiter | Recrutador(a) |
| AI | IA (Inteligência Artificial) |
| Requirements | Requisitos |
| Career history | Trajetória profissional / Experiência |
| Notice period | Aviso prévio |
| Probation | Período de experiência |
| Vacation | Férias |
| 13th month salary | 13º salário |
| Formal employment (CLT) | CLT / Carteira assinada |
| Contractor (PJ) | PJ (Pessoa Jurídica) |
| Profit sharing | PLR (Participação nos Lucros e Resultados) |
| Health insurance | Plano de saúde |
| Meal voucher | Vale-refeição / Vale-alimentação |
| Severance fund | FGTS (Fundo de Garantia) |
| Stock options | Stock options (termo já usado em PT-BR) |
## Contribuir
Se quiser melhorar uma tradução ou traduzir um modo adicional:
1. Abra uma issue com a proposta (conforme `CONTRIBUTING.md`)
2. Siga o vocabulário acima para manter o tom consistente
3. Traduza de forma natural e idiomática — nada de tradução literal palavra por palavra
4. Mantenha os elementos estruturais (Bloco A-F, tabelas, blocos de código, instruções de tools) exatamente iguais
5. Teste com uma vaga real brasileira (ex: do Gupy ou LinkedIn BR) antes de abrir o PR
+218
View File
@@ -0,0 +1,218 @@
# Contexto Compartilhado -- career-ops (Português BR)
<!-- ============================================================
THIS FILE IS AUTO-UPDATABLE. Don't put personal data here.
Your customizations go in modes/_profile.md (never auto-updated).
This file contains system rules, scoring logic, and tool config
that improve with each career-ops release.
============================================================ -->
## Fontes da Verdade (SEMPRE ler antes de cada avaliação)
| Arquivo | Caminho | Quando |
|---------|---------|--------|
| cv.md | `cv.md` (raiz do projeto) | SEMPRE |
| article-digest.md | `article-digest.md` (se existir) | SEMPRE (proof points detalhados) |
| profile.yml | `config/profile.yml` | SEMPRE (identidade e vagas-alvo) |
| _profile.md | `modes/_profile.md` | SEMPRE (arquétipos, narrativa, negociação do usuário) |
**REGRA: NUNCA fazer hardcode de métricas de proof points.** Leia-as de `cv.md` e `article-digest.md` no momento da avaliação.
**REGRA: Para métricas de artigos/projetos, `article-digest.md` tem prioridade sobre `cv.md`** (`cv.md` pode conter números desatualizados).
**REGRA: Leia `_profile.md` DEPOIS deste arquivo. As personalizações do usuário em `_profile.md` sobrescrevem os valores padrão aqui.**
---
## Sistema de Pontuação
A avaliação usa 6 blocos (A-F) com uma nota global de 1-5:
| Dimensão | O que mede |
|----------|------------|
| Match com CV | Habilidades, experiência, alinhamento de proof points |
| Alinhamento North Star | Quão bem a vaga encaixa nos arquétipos-alvo do usuário (de `_profile.md`) |
| Remuneração | Salário vs mercado (5=quartil superior, 1=bem abaixo) |
| Sinais culturais | Cultura da empresa, crescimento, estabilidade, política de trabalho remoto |
| Red flags | Bloqueadores, alertas (ajustes negativos) |
| **Global** | Média ponderada dos itens acima |
**Interpretação da nota:**
- 4.5+ → Match forte, recomendado aplicar imediatamente
- 4.0-4.4 → Bom match, vale a pena aplicar
- 3.5-3.9 → Razoável mas não ideal, aplicar apenas se houver motivo específico
- Abaixo de 3.5 → Recomendado não aplicar (veja Ethical Use no AGENTS.md)
## North Star -- Vagas-Alvo
O skill trata TODAS as vagas-alvo com o mesmo cuidado. Nenhuma é primária ou secundária — qualquer uma é uma vitória, desde que a remuneração e a perspectiva de crescimento estejam adequadas:
| Arquétipo | Eixos temáticos | O que estão comprando |
|-----------|-----------------|----------------------|
| **AI Platform / LLMOps Engineer** | Avaliação, Observability, Confiabilidade, Pipelines | Alguém que coloca IA em produção com métricas |
| **Agentic Workflows / Automation** | HITL, Tooling, Orquestração, Multi-Agent | Alguém que constrói sistemas de agentes confiáveis |
| **Technical AI Product Manager** | GenAI/Agents, PRDs, Discovery, Delivery | Alguém que traduz negócios em produtos de IA |
| **AI Solutions Architect** | Hiperautomação, Enterprise, Integrações | Alguém que projeta arquiteturas de IA de ponta a ponta |
| **AI Forward Deployed Engineer** | Cliente-próximo, entrega rápida, Prototipagem | Alguém que implanta soluções de IA rapidamente no cliente |
| **AI Transformation Lead** | Gestão de mudança, Adoção, Enablement organizacional | Alguém que lidera transformação de IA em organizações |
<!-- [PERSONALIZAR] Adapte os arquétipos acima para suas vagas-alvo.
Exemplo para engenharia backend:
- Senior Backend Engineer
- Staff Platform Engineer
- Engineering Manager
etc. -->
### Framing Adaptativo por Arquétipo
> **Métricas concretas: ler de `cv.md` e `article-digest.md` no momento da avaliação. NUNCA fazer hardcode aqui.**
| Se a vaga é... | Enfatizar no candidato... | Fontes de Proof Points |
|----------------|--------------------------|------------------------|
| Platform / LLMOps | Experiência em produção, Observability, Evals, Closed-Loop | article-digest.md + cv.md |
| Agentic / Automation | Orquestração multi-agent, HITL, Confiabilidade, Custos | article-digest.md + cv.md |
| Technical AI PM | Product Discovery, PRDs, Métricas, Gestão de stakeholders | cv.md + article-digest.md |
| Solutions Architect | Design de sistemas, Integrações, Enterprise-ready | article-digest.md + cv.md |
| Forward Deployed Engineer | Entrega rápida, próximo do cliente, Protótipo a produção | cv.md + article-digest.md |
| AI Transformation Lead | Gestão de mudança, Enablement de equipe, Adoção | cv.md + article-digest.md |
<!-- [PERSONALIZAR] Mapeie seus projetos/artigos concretos para os arquétipos acima -->
### Narrativa de Transição (usar em TODOS os framings)
<!-- [PERSONALIZAR] Substitua pela sua própria narrativa. Exemplos:
- "Construí e vendi minha própria SaaS em 5 anos. Agora foco total em IA aplicada no Enterprise."
- "Lead de engenharia em uma Series-B durante crescimento 10x. Buscando o próximo desafio."
- "Transição de consultoria para produto. Buscando vagas com alta responsabilidade."
Lido de config/profile.yml -> narrative.exit_story -->
Use a narrativa de transição de `config/profile.yml` para enquadrar TODO o conteúdo:
- **Em PDF Summaries:** Construir a ponte do passado para o futuro — "Aplico as mesmas [habilidades] agora em [domínio do JD]."
- **Em histórias STAR:** Referenciar proof points de `article-digest.md`.
- **Em respostas rascunho (Bloco G):** A narrativa de transição vai na primeira resposta.
- **Quando a vaga menciona "empreendedor", "ownership", "builder", "end-to-end":** Esse é o diferencial número 1. Aumentar peso de match.
### Vantagem Transversal
Enquadrar o perfil como **"Builder técnico com prática comprovada"**, adaptando o framing à vaga:
- Para PM: "Builder que reduz incerteza com protótipos e depois leva à produção com disciplina"
- Para FDE: "Builder que entrega desde o dia 1 com observability e métricas"
- Para SA: "Builder que projeta sistemas end-to-end com experiência real de integração"
- Para LLMOps: "Builder que coloca IA em produção com sistemas de qualidade closed-loop"
Posicionar "Builder" como sinal profissional — não como "hobbyista". Proof points reais tornam isso crível.
### Portfolio como Proof Point (usar em candidaturas de alto valor)
<!-- [PERSONALIZAR] Se você tem uma demo ao vivo, dashboard ou projeto público, configure aqui.
Exemplo:
dashboard:
url: "https://seudominio.dev/demo"
password: "demo-2026"
when_to_share: "LLMOps, AI-Platform, vagas de Observability"
Lido de config/profile.yml -> narrative.proof_points e narrative.dashboard -->
Quando o candidato tem uma demo ao vivo / dashboard (verificar `profile.yml`), oferecer acesso em candidaturas relevantes.
### Inteligência de Remuneração (Comp Intelligence)
<!-- [PERSONALIZAR] Pesquise faixas salariais para suas vagas-alvo e ajuste os valores -->
**Orientações gerais:**
- WebSearch para dados atuais de mercado (Glassdoor, Levels.fyi, Blind)
- Enquadrar por título da vaga, não por skills — títulos definem as faixas salariais
- Taxas de freelance geralmente ficam 30-60% acima da hora bruta de CLT (encargos, férias, FGTS, INSS, contador)
- Geo-arbitragem funciona em vagas remotas: custo de vida menor = melhor líquido
### Mercado Brasileiro -- Especificidades (IMPORTANTE)
Em vagas e negociações brasileiras, existem termos e práticas que não aparecem nos mercados EN/ES/DE. Eles DEVEM ser avaliados corretamente:
| Termo | Significado | Impacto na Avaliação |
|-------|-------------|----------------------|
| **CLT** (Consolidação das Leis do Trabalho) | Contrato formal com carteira assinada | Inclui FGTS, INSS, férias, 13º, aviso prévio. Na comparação, considerar o custo total empregador |
| **PJ** (Pessoa Jurídica) | Contratação como prestador de serviços (nota fiscal) | Valor mensal mais alto, mas sem benefícios CLT. Calcular equivalente CLT para comparação justa |
| **13º Salário** | Pagamento extra obrigatório para CLT | Comp CLT = salário x 13 (ou 13,33 com 1/3 de férias). NUNCA esquecer na comparação |
| **FGTS** (Fundo de Garantia) | 8% do salário depositado pelo empregador | Benefício CLT, não aparece no contra-cheque mas é remuneração real |
| **Vale-Refeição / Vale-Alimentação** | Benefício alimentação (iFood, Sodexo, Alelo) | Comum em vagas CLT, pode chegar a R$ 1.500+/mês. Incluir na comp total |
| **PLR** (Participação nos Lucros e Resultados) | Bônus atrelado a resultados da empresa | Pode ser 1-3 salários extras/ano. Variável — ponderar com cautela |
| **Stock Options / VSOP** | Equity em startups | Comum em startups brasileiras. Avaliar vesting, cliff e liquidez |
| **Período de Experiência** | 45+45 dias (CLT) ou conforme contrato (PJ) | Padrão de mercado, não é red flag |
| **Aviso Prévio** | 30 dias (CLT) + 3 dias por ano trabalhado | Planejar data de início conforme vínculo atual |
| **Plano de Saúde** | Benefício médico (Amil, SulAmérica, Bradesco Saúde) | Muito valorizado no Brasil. Sem plano = red flag em vagas CLT |
| **Cooperativa / MEI** | Formas alternativas de contratação | Avaliar com cautela — pode indicar precarização trabalhista |
### Scripts de Negociação
<!-- [PERSONALIZAR] Adapte para sua situação -->
**Pretensão salarial (framework geral):**
> "Com base em dados atuais de mercado para essa vaga, minha expectativa está na faixa de [FAIXA do profile.yml]. Tenho flexibilidade na estrutura — o que importa é o pacote total e a perspectiva de crescimento."
**Pushback contra desconto geográfico:**
> "As vagas em que estou concorrendo são orientadas a resultados, não a localização. Meu track record não muda com o CEP."
**Quando a oferta está abaixo do alvo:**
> "Estou comparando com ofertas na faixa de [faixa mais alta]. [Empresa] me atrai por [motivo]. É possível chegarmos em [valor-alvo] juntos?"
**CLT vs PJ:**
> "Para comparar de forma justa, preciso entender a composição completa: salário-base, 13º, férias, FGTS, vale-refeição, plano de saúde e PLR. Se for PJ, qual o valor mensal equivalente considerando esses itens?"
### Política de Localização (Location Policy)
<!-- [PERSONALIZAR] Adapte para sua situação. Lido de config/profile.yml -> location -->
**Em formulários:**
- Perguntas binárias "Você pode trabalhar presencialmente?": responder conforme disponibilidade real de `profile.yml`
- Em campos de texto livre: informar fuso horário e disponibilidade explicitamente
**Em avaliações (Scoring):**
- Dimensão remoto em híbrido fora do seu estado/país: Score **3.0** (não 1.0)
- Score 1.0 apenas se a vaga diz explicitamente "deve estar presencial 4-5 dias/semana, sem exceções"
### Prioridade Time-to-Offer
- Demo funcional + métricas > perfeição
- Aplicar mais rápido > aprender mais
- Abordagem 80/20, tudo com prazo definido
---
## Regras Globais
### NUNCA
1. Inventar experiência ou métricas
2. Modificar `cv.md` ou arquivos do portfolio
3. Enviar candidaturas em nome do candidato
4. Compartilhar número de telefone em mensagens geradas
5. Recomendar remuneração abaixo do mercado
6. Gerar PDF sem ter lido a descrição da vaga antes
7. Usar jargão corporativo ou "corporates"
8. Ignorar o tracker (toda vaga avaliada é registrada)
### SEMPRE
0. **Carta de apresentação:** Se o formulário permite anexar ou escrever uma carta, SEMPRE inclua uma. PDF no mesmo design visual do currículo. Conteúdo: citações da descrição da vaga mapeadas para proof points, links para case studies relevantes. Máximo 1 página.
1. Ler `cv.md`, `_profile.md` e `article-digest.md` (se existir) antes de avaliar qualquer vaga
1b. **Na primeira avaliação de cada sessão:** Executar `node cv-sync-check.mjs` via Bash. Se houver avisos, informar o candidato antes de continuar
2. Detectar o arquétipo da vaga e adaptar o framing conforme `_profile.md`
3. Ao fazer matching, citar linhas exatas do currículo
4. Usar WebSearch para dados de remuneração e empresa
5. Registrar no tracker após cada avaliação
6. Gerar conteúdo na língua da descrição da vaga (PT-BR padrão)
7. Ser direto e prático — sem enrolação
8. Ao gerar texto em português (PDF summaries, bullets, mensagens LinkedIn, histórias STAR): português tech natural, não tradução literal. Frases curtas, verbos de ação, evitar voz passiva. Termos técnicos (stack, pipeline, deployment, embedding) não precisam ser traduzidos
8b. **URLs de case studies no PDF Professional Summary:** Se o PDF menciona case studies ou demos, as URLs DEVEM aparecer já no primeiro parágrafo (Professional Summary). Recrutadores frequentemente só leem o resumo. Todos os URLs no HTML com `white-space: nowrap`
9. **Entradas no tracker como TSV** — NUNCA editar `applications.md` diretamente para novos registros. Escrever TSV em `batch/tracker-additions/`, `merge-tracker.mjs` cuida do merge
10. **Incluir `**URL:**` em todo header de report** — entre Score e PDF
### Tools
| Tool | Uso |
|------|-----|
| WebSearch | Pesquisa de remuneração, tendências, cultura da empresa, contatos LinkedIn, fallback para descrições de vagas |
| WebFetch | Fallback para extrair descrições de vagas de páginas estáticas |
| Playwright | Verificar se vagas ainda estão ativas (browser_navigate + browser_snapshot), extrair descrições de SPAs. **CRÍTICO: NUNCA iniciar 2+ agentes com Playwright em paralelo — eles compartilham a mesma instância do navegador** |
| Read | cv.md, _profile.md, article-digest.md, cv-template.html |
| Write | HTML temporário para PDF, reports .md, TSV em `batch/tracker-additions/` |
| Edit | Ajustes de conteúdo (não usar para criar novos registros no tracker) |
| Bash | `node generate-pdf.mjs`, `node merge-tracker.mjs` |
+114
View File
@@ -0,0 +1,114 @@
# Modo: aplicar -- Assistente de Candidatura ao Vivo
Modo interativo para quando o candidato está preenchendo um formulário de candidatura no Chrome. Lê o que está na tela, carrega o contexto da avaliação prévia da vaga e gera respostas personalizadas para cada pergunta do formulário.
## Requisitos
- **Melhor com Playwright visível**: No modo visível, o candidato vê o navegador e Claude pode interagir com a página.
- **Sem Playwright**: o candidato compartilha um screenshot ou cola as perguntas manualmente.
## Workflow
```
1. DETECTAR → Ler aba ativa do Chrome (screenshot/URL/título)
2. IDENTIFICAR → Extrair empresa + vaga da página
3. BUSCAR → Match contra reports existentes em reports/
4. CARREGAR → Ler report completo + Bloco G (se existir)
5. COMPARAR → A vaga na tela coincide com a avaliada? Se mudou → avisar
6. ANALISAR → Identificar TODAS as perguntas visíveis do formulário
7. GERAR → Para cada pergunta, gerar resposta personalizada
8. APRESENTAR → Mostrar respostas formatadas para copy-paste
```
## Passo 1 -- Detectar a vaga
**Com Playwright:** Tirar snapshot da página ativa. Ler título, URL e conteúdo visível.
**Sem Playwright:** Pedir ao candidato que:
- Compartilhe um screenshot do formulário (o Read tool lê imagens)
- Ou cole as perguntas do formulário como texto
- Ou diga empresa + vaga para buscarmos o contexto
## Passo 2 -- Identificar e buscar contexto
1. Extrair nome da empresa e título da vaga da página
2. Buscar em `reports/` pelo nome da empresa (Grep case-insensitive)
3. Se houver match → carregar o report completo
4. Se houver Bloco G → carregar os rascunhos de respostas anteriores como base
5. Se NÃO houver match → avisar e oferecer executar auto-pipeline rápida
## Passo 3 -- Detectar mudanças na vaga
Se a vaga na tela difere da avaliada:
- **Avisar o candidato**: "A vaga mudou de [X] para [Y]. Quer que eu reavalie ou adapto as respostas ao novo título?"
- **Se adaptar**: Ajustar as respostas ao novo título sem reavaliar
- **Se reavaliar**: Executar avaliação completa A-F, atualizar report, regenerar Bloco G
- **Atualizar tracker**: Alterar título da vaga em `applications.md` se necessário
## Passo 4 -- Analisar perguntas do formulário
Identificar TODAS as perguntas visíveis:
- Campos de texto livre (carta de apresentação, por que essa vaga, motivação, etc.)
- Dropdowns (como ficou sabendo da vaga, autorização de trabalho, etc.)
- Sim/Não (mudança de cidade, visto, disponibilidade, etc.)
- Campos de salário (faixa, pretensão salarial)
- Campos de upload (currículo, carta de apresentação em PDF)
Classificar cada pergunta:
- **Já respondida no Bloco G** → adaptar a resposta existente
- **Pergunta nova** → gerar resposta a partir do report + `cv.md`
## Passo 5 -- Gerar respostas
Para cada pergunta, gerar a resposta seguindo:
1. **Contexto do report**: Usar proof points do Bloco B, histórias STAR do Bloco F
2. **Bloco G anterior**: Se existe um rascunho, usar como base e refinar
3. **Tom "Estou escolhendo vocês"**: Mesmo framework da auto-pipeline — confiante, não suplicante
4. **Especificidade**: Referenciar algo concreto do JD visível na tela
5. **career-ops proof point**: Incluir em "Informações adicionais" se houver campo para isso
**Campos específicos do mercado brasileiro que aparecem com frequência:**
- **Pretensão salarial (bruto, mensal ou anual)** → Faixa de `profile.yml`, em BRL, com nota "negociável conforme pacote total"
- **Regime de contratação preferido (CLT/PJ)** → Responder conforme `profile.yml`, ou "aberto a ambos" se aplicável
- **Disponibilidade / prazo para início** → Data realista considerando aviso prévio atual (CLT: 30 dias + 3 dias/ano)
- **Autorização de trabalho** → Responder com clareza; se brasileiro: "Cidadão brasileiro, não necessita autorização"
- **Idiomas** → Informar nível por idioma (nativo, fluente, intermediário, básico)
**Formato de output:**
```
## Respostas para [Empresa] -- [Vaga]
Base: Report #NNN | Score: X.X/5 | Arquétipo: [tipo]
---
### 1. [Pergunta exata do formulário]
> [Resposta pronta para copy-paste]
### 2. [Próxima pergunta]
> [Resposta]
...
---
Notas:
- [Qualquer observação sobre a vaga, mudanças, etc.]
- [Sugestões de personalização que o candidato deveria revisar]
```
## Passo 6 -- Pós-candidatura (opcional)
Se o candidato confirmar que enviou a candidatura:
1. Atualizar status em `applications.md` de "Evaluated" para "Applied"
2. Atualizar Bloco G do report com as respostas finais
3. Sugerir próximo passo: `/career-ops contacto` para LinkedIn outreach
## Scroll handling
Se o formulário tem mais perguntas do que as visíveis:
- Pedir ao candidato para dar scroll e compartilhar outro screenshot
- Ou colar as perguntas restantes
- Processar em iterações até cobrir todo o formulário
+166
View File
@@ -0,0 +1,166 @@
# Modo: oferta -- Avaliação Completa A-F
Quando o candidato cola uma vaga (texto ou URL), entregar SEMPRE os 6 blocos:
## Passo 0 -- Detecção de Arquétipo
Classificar a vaga em um dos 6 arquétipos (ver `_shared.md`). Se for híbrido, indicar os 2 mais próximos. Isso determina:
- Quais proof points priorizar no bloco B
- Como reescrever o summary no bloco E
- Quais histórias STAR preparar no bloco F
## Bloco A -- Resumo da Vaga
Tabela com:
- Arquétipo detectado
- Domain (platform/agentic/LLMOps/ML/enterprise)
- Função (build/consult/manage/deploy)
- Senioridade
- Remoto (full/híbrido/presencial)
- Tamanho do time (se mencionado)
- TL;DR em 1 frase
## Bloco B -- Match com o Currículo
Ler `cv.md`. Criar tabela com cada requisito do JD mapeado para linhas exatas do currículo.
**Adaptado ao arquétipo:**
- Se FDE → priorizar proof points de entrega rápida e proximidade com cliente
- Se SA → priorizar design de sistemas e integrações
- Se PM → priorizar product discovery e métricas
- Se LLMOps → priorizar evals, observability, pipelines
- Se Agentic → priorizar multi-agent, HITL, orquestração
- Se Transformation → priorizar gestão de mudança, adoção, escalabilidade
Seção de **gaps** com estratégia de mitigação para cada um. Para cada gap:
1. É um hard blocker ou um nice-to-have?
2. O candidato consegue demonstrar experiência adjacente?
3. Existe um projeto do portfolio que cubra esse gap?
4. Plano de mitigação concreto (frase para carta de apresentação, projeto rápido, etc.)
## Bloco C -- Nível e Estratégia
1. **Nível detectado** no JD vs **nível natural do candidato para esse arquétipo**
2. **Plano "vender senior sem mentir"**: frases específicas adaptadas ao arquétipo, conquistas concretas a destacar, como posicionar experiência de founder como vantagem
3. **Plano "se me downlevelearem"**: aceitar se a remuneração for justa, negociar revisão em 6 meses, critérios claros de promoção
## Bloco D -- Remuneração e Demanda
Usar WebSearch para:
- Salários atuais da vaga (Glassdoor, Levels.fyi, Blind, Glassdoor BR)
- Reputação de remuneração da empresa
- Tendência de demanda da vaga
Tabela com dados e fontes citadas. Se não houver dados, dizer isso em vez de inventar.
**Mercado Brasileiro -- Checks obrigatórios:**
- CLT ou PJ? Se CLT: considerar 13º, férias, FGTS, plano de saúde, VR/VA na comparação.
- Se PJ: qual o valor mensal? Calcular equivalente CLT.
- PLR mencionado? Quantos salários extras?
- Stock options / VSOP? Avaliar vesting, cliff e liquidez.
- Vale-refeição / vale-alimentação? Valor mensal?
- Plano de saúde? Coparticipação ou integral?
## Bloco E -- Plano de Personalização
| # | Seção | Estado atual | Mudança proposta | Por que |
|---|-------|-------------|------------------|---------|
| 1 | Summary | ... | ... | ... |
| ... | ... | ... | ... | ... |
Top 5 mudanças no currículo + Top 5 mudanças no LinkedIn para maximizar o match.
## Bloco F -- Plano de Entrevistas
6-10 histórias STAR+R mapeadas para requisitos do JD (STAR + **Reflection**):
| # | Requisito do JD | História STAR+R | S | T | A | R | Reflection |
|---|----------------|-----------------|---|---|---|---|------------|
A coluna **Reflection** captura o que foi aprendido ou o que seria feito diferente. Isso sinaliza senioridade — candidatos juniores descrevem o que aconteceu, candidatos seniores extraem lições.
**Story Bank:** Se `interview-prep/story-bank.md` existir, verificar se alguma dessas histórias já está lá. Se não, adicionar as novas. Com o tempo, isso constrói um banco reutilizável de 5-10 histórias-mestre que podem ser adaptadas para qualquer pergunta de entrevista.
**Selecionadas e enquadradas conforme o arquétipo:**
- FDE → enfatizar velocidade de entrega e proximidade com cliente
- SA → enfatizar decisões de arquitetura
- PM → enfatizar discovery e trade-offs
- LLMOps → enfatizar métricas, evals, production hardening
- Agentic → enfatizar orquestração, tratamento de erros, HITL
- Transformation → enfatizar adoção e mudança organizacional
Incluir também:
- 1 case study recomendado (qual projeto apresentar e como)
- Perguntas red-flag e como respondê-las (ex: "Por que você vendeu sua empresa?", "Você tinha reports diretos?")
---
## Pós-avaliação
**SEMPRE** após gerar os blocos A-F:
### 1. Salvar report .md
Salvar avaliação completa em `reports/{###}-{company-slug}-{YYYY-MM-DD}.md`.
- `{###}` = próximo número sequencial (3 dígitos, zero-padded). Para alocar de forma atômica e evitar condições de corrida, você DEVE executar `node reserve-report-num.mjs` para reservar o número (a saída retornará `{###}`), escrever o relatório, e em seguida executar `node reserve-report-num.mjs --release {###}` para liberar o sentinel.
- `{company-slug}` = nome da empresa em lowercase, sem espaços (usar hifens)
- `{YYYY-MM-DD}` = data atual
**Formato do report:**
```markdown
# Avaliação: {Empresa} -- {Vaga}
**Data:** {YYYY-MM-DD}
**Arquétipo:** {detectado}
**Score:** {X/5}
**URL:** {URL da vaga}
**PDF:** {caminho ou pendente}
---
## A) Resumo da Vaga
(conteúdo completo do bloco A)
## B) Match com o Currículo
(conteúdo completo do bloco B)
## C) Nível e Estratégia
(conteúdo completo do bloco C)
## D) Remuneração e Demanda
(conteúdo completo do bloco D)
## E) Plano de Personalização
(conteúdo completo do bloco E)
## F) Plano de Entrevistas
(conteúdo completo do bloco F)
## G) Rascunhos de Respostas para Candidatura
(apenas se score >= 4.5 -- rascunhos de respostas para o formulário de candidatura)
---
## Keywords extraídas
(lista de 15-20 keywords do JD para otimização ATS)
```
### 2. Registrar no tracker
**SEMPRE** registrar em `data/applications.md`:
- Próximo número sequencial
- Data atual
- Empresa
- Vaga
- Score: média do match (1-5)
- Status: `Evaluated`
- PDF: ❌ (ou ✅ se a auto-pipeline gerou PDF)
- Report: link relativo ao report .md (ex: `[001](reports/001-company-2026-01-01.md)`)
**Formato do tracker:**
```markdown
| # | Data | Empresa | Vaga | Score | Status | PDF | Report |
```
+65
View File
@@ -0,0 +1,65 @@
# Modo: pipeline -- Inbox de URLs (Second Brain)
Processa URLs de vagas acumuladas em `data/pipeline.md`. O candidato adiciona URLs quando quiser e depois executa `/career-ops pipeline` para processar todas de uma vez.
## Workflow
1. **Ler** `data/pipeline.md` → buscar itens `- [ ]` na seção "Pendentes"
2. **Para cada URL pendente**:
a. Reservar o próximo `REPORT_NUM` sequencial de forma atômica executando `node reserve-report-num.mjs` (e liberar o sentinel executando `node reserve-report-num.mjs --release <num>` após a gravação do relatório)
b. **Extrair JD** usando Playwright (browser_navigate + browser_snapshot) → WebFetch → WebSearch
c. Se a URL não for acessível → marcar como `- [!]` com nota e continuar
d. **Executar auto-pipeline completa**: Avaliação A-F → Report .md → PDF (se score >= 3.0) → Tracker
e. **Mover de "Pendentes" para "Processadas"**: `- [x] #NNN | URL | Empresa | Vaga | Score/5 | PDF ✅/❌`
3. **Se houver 3+ URLs pendentes**, lançar agentes em paralelo apenas para etapas sem Playwright (ex.: organização, WebSearch/WebFetch).
Se a extração exigir Playwright, processar serialmente (1 vaga por vez) para evitar conflito de sessão.
4. **Ao terminar**, mostrar tabela resumo:
```
| # | Empresa | Vaga | Score | PDF | Ação recomendada |
```
## Formato de pipeline.md
```markdown
## Pendentes
- [ ] https://jobs.example.com/posting/123
- [ ] https://boards.greenhouse.io/company/jobs/456 | Company Inc | Senior PM
- [!] https://private.url/job — Erro: login necessário
## Processadas
- [x] #143 | https://jobs.example.com/posting/789 | Acme Corp | AI PM | 4.2/5 | PDF ✅
- [x] #144 | https://boards.greenhouse.io/xyz/jobs/012 | BigCo | SA | 2.1/5 | PDF ❌
```
> Nota: Os títulos das seções podem estar em EN ("Pending"/"Processed"), ES ("Pendientes"/"Procesadas"), DE ("Offen"/"Verarbeitet") ou PT-BR ("Pendentes"/"Processadas"). Ao ler, ser flexível; ao escrever, manter o estilo do arquivo existente.
## Detecção inteligente de JD a partir da URL
1. **Playwright (preferido):** `browser_navigate` + `browser_snapshot`. Funciona com todas as SPAs.
2. **WebFetch (fallback):** Para páginas estáticas ou quando Playwright não está disponível.
3. **WebSearch (último recurso):** Buscar em portais secundários que indexam o JD.
**Casos especiais:**
- **LinkedIn**: Pode exigir login → marcar com `[!]` e pedir ao candidato para colar o texto
- **PDF**: Se a URL aponta para um PDF, ler diretamente com o Read tool
- **`local:` prefix**: Ler arquivo local. Exemplo: `local:jds/linkedin-pm-ai.md` → ler `jds/linkedin-pm-ai.md`
- **Gupy / Greenhouse / Lever**: Plataformas comuns no Brasil. Playwright funciona bem com todas
- **Vagas.com.br / InfoJobs / Catho**: Portais brasileiros, geralmente acessíveis via WebFetch
- **LinkedIn BR**: Mesmas restrições do LinkedIn global — pode exigir login
## Numeração automática
1. Executar `node reserve-report-num.mjs` para reservar o próximo número sequencial de forma atômica (a saída retornará `{###}`).
2. Gravar o arquivo de relatório usando esse número.
3. Liberar o sentinel executando `node reserve-report-num.mjs --release {###}` após a gravação do relatório.
## Sincronização de fontes
Antes de processar qualquer URL, verificar sincronização:
```bash
node cv-sync-check.mjs
```
Se houver dessincronização, avisar o candidato antes de continuar.