Calendário de conteúdo, 4 semanas (LinkedIn + X)
Status: rascunho. Nada foi publicado. O Gustavo publica tudo no perfil dele (gate).
Gerado em 22/10/2026 pelo Hermes. Horário: manhã BRT (08:00–09:00 = começo do dia nos EUA), LinkedIn e X no mesmo dia.
Regras aplicadas: inglês, 1ª pessoa, sem link no corpo, sem hashtag, sem travessão longo, sem emoji (só → nas listas), 1 pergunta no fim, todo número tem arquivo de origem. Checagem automática: checar_textos.py (tamanho dos tweets, travessão, links, hashtags, lista de palavras proibidas da career/voice-dna.md).
Pilares: Dado (mercado de vagas BR-remote, os 4 posts do teste v2 re-datados) · Experimento IA (rodado de verdade, scripts em experimentos/) · Agentes (setup real do Hermes). Cada semana = 1 Dado (ter) + 1 IA/Agentes (qui).
| # | Data | Pilar | Gancho | Imagem | Status |
|---|---|---|---|---|---|
| 1 | ter 27/10 | Dado | 688 “LATAM remote” jobs, 42 real | ../linkedin-v2/img/post2-funnel.png | pronto |
| 2 | qui 29/10 | Experimento IA | ”Random” number: 7, 19 of 20 times | img/w1-nondet.png | pronto |
| 3 | ter 03/11 | Dado | Salary floor by stack (carrossel) | ../linkedin-v2/img/post1-carousel.pdf | pronto |
| 4 | qui 05/11 | Agentes | 39 scheduled jobs; what waits for my click | img/w2-agent-gates.png | pronto (Gustavo confere a lista) |
| 5 | ter 10/11 | Dado | 35 of 131 “LATAM” roles exclude Brazil | img/post4-not-brazil-v2.png | pronto |
| 6 | qui 12/11 | Experimento IA | Strict JSON schema: valid shape, most wrong answers | img/w3-json-schema.png | pronto |
| 7 | ter 17/11 | Dado | Median 46 days open, 11% close in a week | ../linkedin-v2/img/post3-open-time.png | precisa rodar (refresh n=19) |
| 8 | qui 19/11 | Agentes / IA | LLM judge: stable and wrong | img/w4-judge.png | pronto |
Medição: o baseline de 19/10 (../linkedin-v2-baseline.md: 605 seguidores, 0 impressões/28d, 0 recrutador qualificado) continua valendo porque nada foi publicado. Com o dia 0 em 27/10, o dia 14 vira 10/11 e o dia 28 24/11 (mesmo método de recontagem).
Semana 1
1 · ter 27/10 · Dado · funil
- Gancho: 688 “LATAM remote” engineering jobs in 14 days. 42 were real.
- Imagem:
../linkedin-v2/img/post2-funnel.png(LinkedIn e X) - Fonte:
../../teste-a/data/sample.json(gerado 18/10, janela 14 dias): funnel latam_engenharia=688, publicadas=42; company_kinds consultoria=245, br=124, staffing=84. “The rest” = 646 − 453 = 193 (3 empresas “latam”, 96 sem link direto, 5 mortas/sem confirmação, 83 qualidade, 6 duplicadas). 646/688 = 93,9% → “94%”. - Mudanças vs v2: “last 14 days” virou “14 days to Oct 18” (o post sai 9 dias depois da janela); tirei “it’s not you. It’s the boards.” (padrão de negação proibido na voice-dna).
- Status: pronto. Se rodar
../../teste-a/build.shantes, trocar números e a data da janela.
688 engineering jobs were posted as "LATAM remote" in the 14 days to Oct 18.
I checked each one on the company's own careers page. 42 were what they claimed: a foreign company, hiring directly, still open, actually remote.
Where the other 646 went:
→ 245 were consultancies or aggregators reposting someone else's role
→ 124 were Brazilian companies
→ 84 were staffing / nearshore agencies
→ the rest had no direct apply link, had closed, were duplicates or failed a quality check
That's 94% of the list gone before I wrote a single application. If your search feels like noise, the boards are a big part of why.
One 14-day window and my own filters, so read the exact split as a snapshot.
What's the worst "remote" posting you've applied to?
X (thread, 3)
[1/3] 688 engineering jobs were posted as "LATAM remote" in the 14 days to Oct 18. I checked each one on the company's own careers page. 42 were real: foreign company, hiring directly, still open, actually remote.
---
[2/3] Where the other 646 went:
→ 245 consultancies or aggregators reposting
→ 124 Brazilian companies
→ 84 staffing / nearshore agencies
→ the rest: no direct apply link, closed, duplicate or failed a quality check
---
[3/3] 94% of the list gone before writing a single application. One 14-day window, my own filters. What's the worst "remote" posting you've applied to?
2 · qui 29/10 · Experimento IA · não-determinismo
- Gancho: I asked an LLM for a random number 20 times. It said 7 nineteen times.
- Imagem:
img/w1-nondet.png - Fonte:
experimentos/nondet-resultados.md(+nondet.py,nondet2.py), rodado 22/10, gpt-4o-mini, custo < US$0,01. - Status: pronto.
I asked gpt-4o-mini to "pick a random number between 1 and 10" 20 times.
It said 7 nineteen times. The other answer was 4.
So I looked at the probabilities behind the first token: '7' 98.3%, '4' 1.6%, '6' 0.1%. The model gives you its single most likely answer, almost every time. That's about as random as a loaded die.
Then the opposite test. Temperature 0 is supposed to make outputs repeatable, and for short answers it did: 20 out of 20 identical, for the number and for a coffee shop name.
But a 120-word story at temperature 0, 20 runs, gave me 18 different texts. They match word for word for a while, then one token flips (at character 59 in one run, 210 in another) and the rest of the story goes somewhere else.
What I took from it for the agents I build:
→ an LLM is a bad source of randomness, so use a real random function
→ temperature 0 on long text can still change between runs. If a step has to be repeatable, cache the output or check it with code.
Small test: one model, 20 runs per prompt, total cost under 1 cent.
Have you hit this in production?
X (thread, 3)
[1/3] I asked gpt-4o-mini to "pick a random number between 1 and 10" 20 times. It said 7 nineteen times. First-token probabilities: '7' 98.3%, '4' 1.6%, '6' 0.1%.
---
[2/3] Temperature 0 made short answers repeatable (20/20 identical). A 120-word story at temperature 0, 20 runs: 18 different texts. They match word for word, then one token flips and the rest diverges.
---
[3/3] Takeaway: use a real random function for randomness, and cache or code-check any LLM step that must be repeatable. One model, 20 runs per prompt, under 1 cent. Have you hit this in production?
Semana 2
3 · ter 03/11 · Dado · salário por stack (carrossel)
- Gancho: What foreign companies hiring in Brazil pay, by stack.
- Imagem: LinkedIn: documento
../linkedin-v2/img/post1-carousel.pdf(Start a post → ”+” → Add a document; título: “What foreign companies hiring in Brazil pay, by stack”). X:../linkedin-v2/img/post1-carousel-2.png. - Fonte:
../../teste-a/data/dado_semana.json(gerado 19/10): salario.n_com_faixa=145, pct_com_faixa=3, vagas_total=5156; mediana_min_por_stack IA/ML 150000 (n=6), Back-end 140000 (15), Dados 128000 (7), Plataforma 105000 (12), Full-stack 86600 (12), Front-end 60000 (5). Rechecado em 22/10: igual à checagem de 19/10. - Nota: Full-stack é 86,6k; texto e slide dizem “$86k” (o gerador trunca). Deixei igual ao slide para não divergir.
- Status: pronto.
I've been tracking every remote engineering role from foreign companies that say they hire in Brazil or LATAM.
145 of them published a USD salary range. The median floor by stack:
AI/ML $150k · Back-end $140k · Data $128k · Platform $105k · Full-stack $86k · Front-end $60k
Two things I didn't expect:
→ Only 3% of the 5,156 roles I tracked publish a range at all.
→ Back-end floors beat full-stack by a wide margin.
Small samples on some stacks (n in the slides), so read it as a direction. I wouldn't negotiate off the exact numbers.
Which stack should I break down next?
X (1 tweet + imagem)
Median salary floor, remote engineering roles at foreign companies hiring in Brazil/LATAM (145 roles with a published USD range):
AI/ML $150k · Back-end $140k · Data $128k · Platform $105k · Full-stack $86k · Front-end $60k
Only 3% publish a range. Small n. Which stack next?
4 · qui 05/11 · Agentes · o que espera o meu clique
- Gancho: An AI agent runs 39 scheduled jobs for me. The ones that touch money or people wait for my click.
- Imagem:
img/w2-agent-gates.png - Fonte:
~/.hermes/cron/jobs.jsonlido em 22/10: 49 jobs definidos, 39 ligados (voice-notes-scan*/5 min,jobsearch-digest-daily11:00 UTC = 08:00 BRT,actual-ingest-daily,agent-backup-nightly,auto-self-heal30 min,auto-watchdog,auto-weekly-report);~/projects/mapa/N2.md(digest até 7 vagas; impostos: “PIX para aprovar no accounting… + botões”; backup “GitHub + Google Drive criptografado”; Actual = app de orçamento);~/projects/mapa/LINGUA.md(Gate = “dinheiro, contas, posts, mensagens a pessoas”). - Status: pronto. Recontar os jobs ligados na véspera (o número muda: há one-offs ligados). Gustavo confere se quer expor o setup.
An AI agent runs 39 scheduled jobs for me. I counted them on Oct 22.
Most of them run alone:
→ voice notes from my phone land in my Notion inbox every 5 minutes
→ a job digest with up to 7 roles arrives at 08:00 BRT
→ bank data goes into my budget app once a day
→ an encrypted backup runs every night
A few things always stop and wait for me: paying taxes (it prepares the PIX payment, I press approve), anything public, any message to a person, and creating accounts.
This post included. The agent drafted it, and I'm the one who hits publish.
The rule I settled on: if a step can lose money or speak for me, it gets a gate. Everything else runs on its own.
And a good chunk of the 39 jobs exist only to watch the others: a watchdog, a self-heal check every 30 minutes, a nightly backup, a weekly report.
Where do you draw the line for what your agents can do without asking?
X (thread, 3)
[1/3] An AI agent runs 39 scheduled jobs for me. Voice notes to Notion every 5 min, a job digest at 08:00, bank data into my budget app, an encrypted backup every night.
---
[2/3] A few things always wait for my click: paying taxes (it prepares the PIX, I approve), anything public, messages to people, creating accounts. This thread included.
---
[3/3] My rule: if a step can lose money or speak for me, it gets a gate. Where do you draw that line for your agents?
Semana 3
5 · ter 10/11 · Dado · “LATAM” que não aceita Brasil
- Gancho: 35 of 131 open “LATAM remote” roles I checked don’t accept Brazil.
- Imagem:
img/post4-not-brazil-v2.png(=../linkedin-v2/img/post4-not-brazil.pngcom o travessão da legenda trocado por ponto; mesmos números) - Fonte:
../../teste-a/data/sample.json(18/10): quality_removed nao_aceita_br=35 de funnel vivas_confirmadas=131; scorecard brasil_literal_pct=55 de n=42. - Mudanças vs v2: + linha de caveat com a data da janela.
- Status: pronto. Casa com o post 6 (mesmo campo “aceita Brasil”, visto pelo lado do LLM).
35 of 131 open "LATAM remote" roles I checked don't accept Brazil.
The job board says LATAM. The application form on the company's site lists the countries, and Brazil isn't there.
Of the 42 roles that passed every check, only 55% write "Brazil" explicitly. The rest say LATAM, Americas, or worldwide.
Cheap habit that saves hours: open the company's application form and check the country dropdown before you write a single line of a cover letter.
One 14-day window (to Oct 18), so the exact share will move. The habit still holds.
Have you been burned by this one?
X (1 tweet + imagem)
35 of 131 open "LATAM remote" roles I checked don't accept Brazil. The board says LATAM; the company's own application form doesn't list Brazil.
Habit: check the country dropdown before writing a cover letter.
Have you been burned by this one?
6 · qui 12/11 · Experimento IA · JSON estruturado
- Gancho: Strict JSON schema gave me 100% valid output. It also gave me the most wrong answers.
- Imagem:
img/w3-json-schema.png - Fonte:
experimentos/json-resultados.md(+corpus.py,json_extract.py,json_extract2.py,json_extract_raw.json,json_extract2_raw.json), rodado 22/10, gpt-4o-mini, 300 chamadas, ~US$0,056. - Status: pronto.
Strict JSON schema gave me 100% valid output. It also gave me the most wrong answers.
The test: 20 real job postings from my job pipeline, one extraction prompt, 7 fields. One field asks "can someone living in Brazil be hired? yes / no / unclear". gpt-4o-mini, 3 ways of asking:
→ plain prompt, "reply with JSON only"
→ json_object mode
→ strict json_schema mode
Format first. Plain prompt: 0 of 60 replies parsed as-is, because every one came wrapped in ```json fences. Strip the fence and all 60 parse. json_object: 60 of 60 valid JSON, but 1 used a value outside my allowed list. Strict schema: right shape every time.
Then the content. 4 of the postings clearly exclude Brazil (Europe only, EU countries + Canada, San Francisco, "Remote United States"). I ran each one 13 times per mode and counted wrong "yes" answers:
→ plain: 2 of 52
→ json_object: 2 of 52
→ strict schema: 16 of 52
"Remote United States" got "yes" in 8 of 10 strict-schema runs in the follow-up batch.
I don't know why yet. My guess is that forcing the format changes which answer wins, but I haven't tested that.
My takeaway: a schema guarantees shape. The values still need their own check, in code, against the source text.
Caveats: 1 model, 1 prompt, small sample. The whole experiment cost about 6 cents.
Do you validate the values in your structured outputs, or only the shape?
X (thread, 4)
[1/4] Strict JSON schema gave me 100% valid output and the most wrong answers. Test: 20 real job postings, gpt-4o-mini, 7 fields incl. "can someone in Brazil be hired? yes/no/unclear", 3 ways of asking for JSON.
---
[2/4] Format: "reply with JSON only" parsed as-is in 0 of 60 replies (all wrapped in ```json). json_object: valid JSON, 1 value outside my enum. Strict schema: right shape every time.
---
[3/4] Content, on 4 postings that exclude Brazil, 13 runs each. Wrong "yes": plain 2/52, json_object 2/52, strict schema 16/52. "Remote United States" got "yes" in 8 of 10 strict runs.
---
[4/4] A schema guarantees shape. Values still need a check against the source. 1 model, 1 prompt, small sample, ~6 cents. Do you validate values or only shape?
Semana 4
7 · ter 17/11 · Dado · tempo aberta
- Gancho: How long does a remote role that accepts Brazil stay open? Median 46 days, but 11% close within a week.
- Imagem:
../linkedin-v2/img/post3-open-time.png(regerar compython3 ../linkedin-v2/gerar_imagens.pydepois do refresh) - Fonte:
../../teste-a/data/dado_semana.json(19/10): tempo_aberta_ats n=19, mediana_dias 45,7, p25 15, p75 88,8, pct_fecha_em_7d 11, pct_fecha_em_14d 21. “Most stay open for over a month”: mediana 45,7 > 30, então mais da metade das fechadas ficou > 30 dias. Viés: só mede vagas que já fecharam. - Mudanças vs v2: + pergunta no fim (o v2 não tinha).
- Status: precisa rodar
../../teste-a/dado_semana.shna véspera; n=19 é pequeno e deve ter crescido até 17/11. Trocar 46 / 21% / 11% / 19 pelos números novos e regerar a imagem.
How long does a remote role that accepts Brazil stay open?
Median: 46 days, measured on the company's own ATS (Greenhouse, Lever, Ashby), where "gone from the board" really means closed.
But 21% close within 14 days, and 11% within a week.
So the playbook I'm using: apply in the first week for the roles you really want, and don't panic about the rest. Most stay open for over a month.
Early data (19 closed roles so far), I'll update as the sample grows.
How fast do you usually apply after a role goes up?
X (1 tweet + imagem)
How long does a remote role that accepts Brazil stay open? Median 46 days on the company's own ATS. But 21% close within 14 days and 11% within a week.
So: apply in week 1 for the roles you really want.
Early data, 19 closed roles. How fast do you apply?
8 · qui 19/11 · Agentes / IA · LLM como juiz
- Gancho: My job digest only shows me roles an LLM scores 4.0+. Same job, same prompt, 20 scores: stable, and sometimes stably wrong.
- Imagem:
img/w4-judge.png - Fonte:
experimentos/judge-resultados.md(+judge.py,judge_why.py,judge_raw.json,judge_why_raw.json), rodado 22/10, gpt-4o-mini, 206 chamadas, ~US$0,027. Corte 4.0 do digest:~/projects/jobsearch/jobsearch/calibrate.py(“Aplicar” se nota ≥ 4.0). O digest usa outro modelo (Sonnet + ranker); o post diz isso. - Status: pronto. Gustavo confirma se topa dizer “the best match for me on paper” sobre a vaga da Double (não cito o nome da empresa).
My job digest only shows me a role if an LLM scores it 4.0 or higher. So I tested how much a score like that can be trusted.
10 real postings from my pipeline. One prompt with my profile (senior full-stack, TypeScript/Node/Python, AI agents, living in Brazil, remote, US$100k+). Each posting scored 10 times at temperature 0 and 10 times at temperature 1.0. I used gpt-4o-mini as a cheap stand-in; the digest itself runs on a different model.
At temperature 1.0, 2 of the 10 postings landed on both sides of 4.0 depending on the run. One went from 3.5 to 4.3 on identical input.
At temperature 0 the scores were stable. Two of them were stable and wrong:
→ a Europe-only role scored 4.0 or more in 20 of 20 runs
→ a Brazil-based senior full-stack role (Node, TypeScript, shipping with coding agents), the best match for me on paper, scored 1.0 to 1.5 in 20 of 20 runs
Then I asked for the score plus one sentence of reason. For the Brazil-based role, 3 times out of 3, the model said the job "is only for candidates based in Brazil, while the candidate is seeking a fully remote role from a foreign company." It read "Brazil-based" as the opposite of what I want.
What I'm taking from it:
→ ask for the reason with the score, because the reason is where the bug shows up
→ run the judge on a sample several times before trusting a threshold
→ a stable score can still be wrong, so read a few by hand
10 postings, 1 cheap model, 1 untuned prompt. A better prompt would probably fix that case. The whole test cost about 3 cents.
How do you check an LLM judge before you let it filter things for you?
X (thread, 4)
[1/4] My job digest only shows me roles an LLM scores 4.0+. So I scored 10 real postings 20 times each (10 at temp 0, 10 at temp 1.0) with gpt-4o-mini, a cheap stand-in for the model the digest uses.
---
[2/4] Temp 1.0: 2 of 10 postings land on both sides of 4.0 depending on the run. One went from 3.5 to 4.3 on identical input.
---
[3/4] Temp 0: stable, and sometimes stable and wrong. Europe-only role: 4.0+ in 20/20. Brazil-based senior full-stack role, my best match on paper: 1.0 to 1.5 in 20/20.
---
[4/4] A one-line reason exposed it: the model read "Brazil-based" as the opposite of "foreign company". Lesson: ask for the reason with the score. How do you check an LLM judge?
Reserva (entram no lugar de um post de agentes ou numa 5ª semana; Gustavo decide)
9 · reserva · Ensaio · o preço da inteligência
- Gancho: No Claude model has ever gotten cheaper after launch. Intelligence still gets ~13x cheaper per year.
- Imagem: a gerar (gráfico: preço por nível fixo de desempenho, escala log)
- Fonte: tabela de preços da Anthropic (platform.claude.com/docs/en/about-claude/pricing, lida 22/10/2026); Epoch AI “The plunging price of thought” (13x/ano desde 2023; 75x no 1º ano, 4,7x dois anos depois); a16z “LLMflation” (GPT-3 US
60/MTok em 2021 → US0,06 três anos depois). Conversa no Telegram 22/10. - Status: texto pronto, imagem a gerar.
The model I use every day, Claude Opus 5.5, will not get cheaper. No Claude model ever has after launch.
I checked Anthropic's price list. Opus 4.5, 4.6, 4.7, 4.8 and 5 all cost $5 / $25 per million tokens. Opus 4 stayed at $15 / $75 until it was retired.
Prices drop with the next model, not with time. Opus 5.5 launched at $4 / $20 because it is cheaper to serve.
Zoom out, though, and the trend is wild. Epoch AI measured the cost of reaching a fixed level of performance: it fell about 13x per year since 2023. GPT-3 level answers cost $60 per million tokens in 2021 and about $0.06 three years later.
Training is a sunk cost. What sets the price is serving each token: better chips, smaller distilled models, competition.
If the decline slows to just 3x a year, today's top model gets tens of thousands of times cheaper within a decade.
So I build on one assumption: intelligence trends toward free. What stays scarce:
→ your own data and sources
→ checking that the output is right
→ distribution and trust
Caveat: under 5 years of data, and the frontier model of each year will stay expensive.
What part of your work matters more when the model is nearly free?
X (thread, 3)
[1/3] No Claude model has ever gotten cheaper after launch. Opus 4.5 through 5: $5/$25 per million tokens. Opus 4 stayed at $15/$75 until retirement. Prices drop with the next model, not with time.
---
[2/3] Zoom out: Epoch AI measured the cost of a fixed level of performance falling about 13x per year since 2023. GPT-3 level answers: $60 per million tokens in 2021, about $0.06 three years later.
---
[3/3] Even at 3x a year, today's top model is tens of thousands of times cheaper in a decade. I build as if intelligence is nearly free. What stays scarce: your own data, verification, distribution. Which one are you building?
10 · reserva · Experimento IA · colapso de ideias
- Gancho: Asked an LLM for 20 business ideas, three times. The third list repeated 17 of 20.
- Imagem: a gerar (barras: sem fonte 1ª/2ª/3ª lista vs ancorado em página)
- Fonte:
experimentos/colapso-ideias-resultados.md(+colapso_ideias.py,colapso_listas.py, raw json), rodado 22/10, gpt-4o-mini, 44 chamadas, ~US$0,005. - Status: texto pronto, imagem a gerar.
I asked an LLM for 20 business ideas. Then I asked again. And again.
Inside each list, no repeats. Looks diverse.
Across lists: the second one repeated 9 of the first 20. The third repeated 17 of 20. SEO consulting, chatbots, online courses, a recipe blog, every time.
Asking for one idea per call was worse. The same idea (a mentoring app for junior devs) came back 6 times in 20.
Then I gave the model something to read first: one real web page per call, from the sources my idea pipeline already collects (businesses for sale, customer complaints, small companies that work abroad).
20 calls, 20 different ideas, all specific: appeals for traffic fines, food safety manuals for small kitchens, payroll for household employees, house watching for empty beach homes.
Temperature doesn't fix this. The model has a small default repertoire, and variety comes from what you feed it.
So my pipeline has a new rule: every idea starts from a page. And I track a collapse rate, the share of new ideas that look like old ones.
Small test: gpt-4o-mini, 44 calls, half a cent. Similarity measured with embeddings on the idea names, checked by eye.
Where do your ideas come from?
X (thread, 3)
[1/3] Asked an LLM for 20 business ideas, 3 times. No repeats inside a list. Across lists: the 2nd repeated 9 of 20, the 3rd repeated 17 of 20. SEO, chatbots, online courses. Every time.
---
[2/3] Then one real web page per call as input (complaints, businesses for sale). 20 calls, 20 distinct and specific ideas: traffic fine appeals, food safety manuals, household payroll.
---
[3/3] Temperature doesn't fix it. Variety comes from what you feed the model. Now every idea in my pipeline starts from a page, and I track how many new ideas repeat old ones. 44 calls, half a cent. Where do your ideas come from?
Custo dos experimentos
experimentos/cost_log.jsonl: 506 chamadas gpt-4o-mini, US0,0822 (JSON 300 chamadas US0,0557; juiz 206 chamadas US0,0265) + não-determinismo (< US0,01, rodado antes). Total < US0,10 de US0,50.
Pendências para o Gustavo
- X: a
canais-distribuicao-v2.md§4 diz “X: não” (custo de US$0,20 por post com link via API). Aqui é post manual, sem link, então o custo some, mas a decisão de abrir o canal é sua. Qual conta do X? (não achei nos arquivos) - Os 4 posts de dado nunca saíram? Assumi que não (baseline: 0 impressões; teste pausado 21/10). Se o post 1 ou 2 saiu em 20/10 ou 22/10, trocar por outro dado.
- Post 4 (agentes): ok expor o setup (impostos, banco, backup) publicamente?
- Experimentos em 1ª pessoa: quem rodou foi o Hermes, no seu setup e com sua chave. Os textos dizem “I tested”; se preferir, “my agent ran”.
- Post 7: rodar
dado_semana.shna véspera (n=19).