Meu treinador de corrida é um repositório Git e um agente Claude
Termino o treino, meu relógio sincroniza e três minutos depois a análise está escrita no meu repositório, a semana foi reajustada e meu treinador deixou um comentário embaixo da atividade no Strava. Nenhum app desenvolvido, nenhum servidor escrito, nenhuma fatura de API por token: uma assinatura Claude, o AgentsRoom e arquivos Markdown. Aqui está a montagem completa, reprodutível.
Termino meu treino. Meu relógio sincroniza sozinho com o Strava, como sempre. Vou tomar banho.
Quando saio, três coisas aconteceram sem eu tocar em nada. A análise do treino está escrita no meu repositório de treinamento. A semana foi reajustada, com o motivo da mudança anotado ao lado. E embaixo da atividade no Strava tem um comentário do meu treinador, dizendo quanto valeu o treino e o que isso muda para a sexta.
Esse treinador não é um aplicativo que eu desenvolvi. É um repositório Git de arquivos Markdown, uma assinatura Claude e o AgentsRoom segurando tudo junto. Nenhum servidor escrito, nenhuma fatura por token, mais ou menos um fim de semana de montagem.
Tudo está publicado como modelo: github.com/AgentsRoomDev/running-performance-coach. Você pode cloná-lo e torná-lo seu preenchendo os espaços deixados em branco. Este artigo explica como ele funciona, peça por peça, partindo do princípio de que você já ouviu a palavra "API" mas nunca escreveu um webhook.
Para situar: corro há muito tempo, 2h47 na maratona, 1h13:59 na meia, 33:45 nos 10 km. O objetivo do ciclo atual é voltar a baixar de 34 minutos nos 10 km. Isso importa para o que vem: um treinador genérico que me reexplica o que é um treino de limiar não me serve de nada, e esse é exatamente o problema que essa montagem resolve.
O que acontece entre o fim do meu treino e o comentário
A cadeia completa tem seis etapas:
- Meu relógio envia a atividade para o Strava. Essa parte já acontece para todo mundo.
- A cada 15 minutos, um pequeno script Python pergunta ao Strava se tem novidade.
- Quando encontra um treino novo, ele fabrica uma ficha de treino em Markdown no meu repositório: voltas, parciais, volume, frequência cardíaca. Só dados medidos.
- Ele também reescreve o título e a descrição da atividade no Strava, para o meu feed parar de exibir "Corrida à tarde".
- Depois envia uma mensagem assinada para o AgentsRoom, que abre um agente Claude com o treino já na mão.
- Esse agente faz o trabalho de treinador: lê, compara, escreve a análise, ajusta a semana, faz commit, faz push, comenta no Strava e me manda o relatório longo por e-mail.
As cinco primeiras etapas são encanamento. A sexta é o assunto deste artigo.
O diário de treino é um repositório Git, não um banco de dados
Essa é a decisão que muda tudo, e é também a que mais surpreende as pessoas.
Um treino = um arquivo, journal/2026/2026-09-03.md. Uma semana = um arquivo, plan/weeks/2026-W36.md. Uma mudança de plano = um commit, com o motivo na mensagem. Não tem banco de dados, nem esquema, nem migração, nem interface.
Três consequências, em ordem de importância:
O treinador consegue reler a própria história. Ele sabe o que prescreveu três semanas atrás e pode verificar se funcionou. Um chatbot para quem você conta seu treino recomeça do zero a cada conversa. Um agente que tem um repositório tem memória, e essa memória é legível por um humano.
Leio meu plano no celular, pelo app do GitHub. O README.md do repositório não é uma página de apresentação: é o meu painel. O contrato escrito no CLAUDE.md é explícito quanto a isso, nenhum planejamento está terminado enquanto o README não o refletir. O resultado: não tenho nenhuma interface para manter e, mesmo assim, tenho uma tela que me diz o que faço hoje.
Nada é irreversível. Tudo o que o agente escreve é um commit. Posso ler, contestar, reverter. Isso é muito diferente de um aplicativo que decide sozinho no canto dele.
Etapa 1: o Strava acorda um pequeno script
O Strava expõe uma API: um jeito, para um programa, de pedir "me dá as atividades recentes desse atleta". O script strava_sync.py faz exatamente isso, e transforma a resposta numa ficha de treino.
A parte interessante não é a chamada de rede, é a reconstrução. Um relógio registra voltas brutas. O script tem que descobrir qual treino era aquele:
Lap 1 : 4.40 km in 26'07 (5:56/km) ← aquecimento
Lap 2 : 1.00 km in 3'41 (3:41/km) ← repetição 1
Lap 3 : 0.20 km in 1'59 (9:55/km) ← recuperação
... → "5 x 1000m r' 2'"
Ele testa todos os cortes do tipo "as k voltas mais rápidas são as repetições" e fica com o melhor que se sustenta. Parece trivial e não é: um agrupamento ingênuo por velocidade cai na armadilha assim que um aquecimento é mais rápido que uma recuperação.
Sobretudo, o formato do treino é reconstruído a partir do relógio, nunca a partir do plano. É tentador fazer o contrário (o plano diz 5 x 1000m, então é só escrever isso) e é exatamente o erro: toda a graça está em detectar os dias em que fiz outra coisa. Quando os dois divergem, é essa divergência que é a informação, e o treinador a enxerga:
Previsto 3 x 8' → corrido em contínuo
Dois avisos antes de você começar.
A API do Strava exige uma assinatura de desenvolvedor paga desde junho de 2026. Sem ela, cada chamada responde 403 Application Status Inactive. A alternativa existe e está prevista no modelo: exportar um arquivo TCX do seu relógio e passá-lo para o import_tcx.py. Tudo que vem depois da importação funciona igualzinho.
As cotas são generosas, mas reais. Na minha aplicação, 300 requisições a cada 15 minutos e 3.000 por dia em leitura. O script consome uma por passagem em regime estável, ou seja 96 por dia. Estamos bem longe do teto, mas é o tipo de coisa que se verifica antes, não depois.

Etapa 2: o script acorda o agente, com uma assinatura
É aqui que a coisa fica interessante.
Um webhook é o contrário de uma pergunta. Em vez de perguntar a cada cinco minutos se tem novidade, você entrega um endereço web a um programa, e é ele que manda uma mensagem quando o evento acontece. Você não paga nada enquanto nada acontece.
O AgentsRoom expõe exatamente isso: um gatilho webhook. Você cria um gatilho no aplicativo, ele devolve uma URL e um segredo. Quem enviar uma mensagem JSON para essa URL abre um agente, com o prompt que você escreveu e o conteúdo da mensagem já injetado dentro.

A mensagem que meu script envia é deliberadamente minúscula:
{
"type": "created",
"title": "03/09 · 5 x 1000m r' 2'",
"body": "Treino de 03/09/2026 importado do Strava.\n\nTreino de qualidade: 5 x 1000m r' 2'\nSplits: 3'41 - 3'40 - 3'38 - 3'40 - 3'35\n\nVolume total: 12.51 km em 1h07'42 (5:25/km), D+ 56 m\nTreino previsto: RP10-5x1000\n\nFicha de treino: journal/2026/2026-09-03.md\nFicha de semana: plan/weeks/2026-W36.md"
}
Repare no que não está ali: o texto do plano. O webhook transporta o código do treino previsto e o caminho das fichas, nunca o conteúdo delas. Um agente que tem o repositório vai lê-las sozinho; um agente que não tem não tem nada que ver com as minhas instruções internas. É a mesma regra das descrições publicadas no Strava.
A assinatura, e a armadilha que vem junto
Uma URL pública que abre um agente não pode ficar aberta para o primeiro que a encontrar. Então o gatilho é assinado: o script calcula uma impressão digital da mensagem com o segredo compartilhado (um HMAC-SHA256, se o termo diz alguma coisa para você) e a envia no cabeçalho X-AgentsRoom-Signature. O servidor recalcula a mesma impressão do lado dele; se não bater, ele recusa.
Sem assinatura, a resposta é seca:
{"error":"REJECTED","message":"Signature missing."}
E aqui vem a armadilha, que me custou uma noite. A assinatura cobre os bytes exatos que saem pela rede, não o objeto na memória. Se você assina um arquivo do jeito que ele está no disco e depois deixa outra camada reserializar o objeto (um espaço a mais, uma ordem de chaves diferente, um acento escapado de outro jeito), você obtém uma assinatura perfeitamente válida para uma mensagem que o servidor nunca vai receber. A recusa é impossível de depurar: tudo parece correto dos dois lados.
A correção cabe numa frase: serializa e assina no mesmo lugar. No modelo, é a função post_json que faz as duas coisas, e nada mais tem o direito de tocar no corpo da mensagem.
Etapa 3: três camadas dizem ao treinador quem ele é, como as coisas funcionam aqui e o que fazer agora
Um agente que treina não é um prompt gigante. São três textos separados, e a separação importa.
Camada 1, a persona: quem ele é
Um prompt de sistema anexado ao agente no AgentsRoom. Ele carrega a filosofia de treinamento, e é deliberadamente genérico em relação ao esporte: treinaria qualquer um.
Seu trabalho não é simplesmente gerar planos de treino. Você treina o atleta de forma contínua, analisando o treinamento dele, entendendo a forma atual, adaptando os treinos que vêm. […] Fale como um treinador experiente, não como um chatbot motivacional.
Ele também diz o que não faz: não julgar um treino apenas pelo fato de o ritmo alvo ter sido mantido, ser explícito sobre a incerteza de uma previsão de tempo, e não validar um objetivo só porque o atleta quer. Essa última linha é a que torna o treinador útil.
Você não precisa escrevê-la: essa persona está publicada no catálogo de agentes do AgentsRoom com o nome Treinador de Performance em Corrida. Um clique instala, pronta para uso.
Camada 2, CLAUDE.md: como as coisas funcionam aqui
Este é o contrato, lido no início de cada sessão. Ele contém a estrutura de arquivos, as regras que a mantêm coerente, os princípios de treinamento que limitam qualquer proposta e, acima de tudo, o ritual: a sequência exata a executar quando um treino é reportado.
Um trecho, porque mostra o nível de precisão:
Ordem de sacrifício quando a semana descarrila: primeiro os minutos a mais nos rodagens, depois o trabalho de força, depois o comprimento do longão, depois um treino de qualidade. Nunca a semana inteira.
É aí que o treinador deixa de ser um chatbot. Ele não improvisa um procedimento a cada vez, ele segue o que escrevi de uma vez por todas. Se você for ler só um arquivo do repositório modelo, leia esse.
Camada 3, o prompt do gatilho: o que fazer agora
É a mensagem entregue ao agente quando um treino aterrissa. Ele recebe a atividade por variáveis de template: {{event.title}}, {{event.body}}, {{event.url}}. Assim o agente começa com o treino já na mão, em vez de ir atrás dele.

Aqui está o esqueleto dele, do jeito que está no gatilho:
Novo treino importado do Strava.
**{{event.title}}** · atividade {{event.id}}
{{event.url}}
{{event.body}}
---
Você está no repositório `training-plan`. Leia `CLAUDE.md` primeiro: ele é a lei.
Você escreve na minha língua e fala comigo diretamente o tempo todo (§3).
O ritual do §6 se aplica, mas a **etapa 1 dele já está feita**:
`strava_publish.py` criou a ficha de treino e fez o commit. Você retoma na
etapa 2 e vai até o fim. Três entregas, nesta ordem: **a análise no
repositório**, **o comentário embaixo da atividade no Strava**, **o e-mail**.
⚠️ **Você está rodando sem supervisão: ninguém vai ler uma pergunta.** Nunca
peça arbitragem: você decide, você age, e diz no seu relatório o que resolveu
e por quê.
## 1 · Analisar e ajustar o plano (ritual §6, etapas 2 a 6)
1. `git pull --rebase` antes de tudo: a ficha pode vir do servidor.
2. Leia, nesta ordem: a ficha de hoje, a ficha da semana,
`athlete/zones-and-paces.md`, e **as 3 últimas fichas de treino**:
um treino nunca é julgado sozinho.
3. Escreva a seção `## Analysis`: **o veredito primeiro**, depois os sinais
que o sustentam, depois o que isso muda.
⛔ Se `## Analysis` já estiver preenchida, não a reescreva.
4. Atualize a ficha da semana e registre **toda** mudança de plano sob
`## Adjustments`, com o motivo.
5. **Regenere o `README.md`**: é a tela que eu leio no celular.
6. Commit e push, caminhos explícitos, ⛔ nunca `git add -A`.
## 2 · Kudos e comentário no Strava
⛔ Um comentário no Strava é PÚBLICO: nada de frequência cardíaca alvo,
nada de dorzinha, nenhuma arbitragem interna, nenhum tempo previsto.
## 3 · O relatório completo por e-mail
A linha que mais trabalha é a do meio: "ninguém vai ler uma pergunta". Um agente que roda sem ninguém na frente da tela e que pede uma arbitragem não está cometendo um erro, ele simplesmente para, e você descobre no dia seguinte.
Qual modelo, e por que um milhão de tokens não é frescura
| Configuração | Valor |
|---|---|
| Modelo | Claude Opus, contexto 1M |
| Esforço de raciocínio | Alto |
| Modo de permissão | Autônomo |
| Acesso ao navegador | Ativado |

O contexto longo não é enfeite. Para julgar um treino direito, o treinador lê a ficha do dia, a ficha da semana, a tabela de ritmos de referência e os três treinos anteriores. Um treino nunca é julgado sozinho: a carga acumulada, o encadeamento dos dias e os pontos de atenção em curso mudam o veredito completamente. Três repetições a 3:38 no dia seguinte a um longão de duas horas não contam a mesma história que os mesmos 3:38 depois de um dia de descanso.
O modo autônomo não é descuido, é uma consequência: uma execução sem ninguém na frente da tela não tem ninguém para aprovar um git push. E o acesso ao navegador é o que permite ao agente ir comentar no Strava e mandar o e-mail, duas coisas que aqui não têm uma API conveniente.
O que é automatizado, e o que deliberadamente não é
Essa é a decisão de design com a qual estou mais satisfeito, e é fácil não perceber.
O trabalho de importação registra e publica, ele nunca julga.
| O que o script faz | O que ele não faz |
|---|---|
| Buscar as atividades novas | Preencher a seção Analysis |
| Criar a ficha de treino | Mexer na ficha da semana |
| Escrever título e descrição no Strava | Mexer nos ritmos de referência |
| Commitar as fichas que criou | Dar qualquer opinião |
Um script que começasse a julgar produziria veredictos sem contexto, com uma lógica congelada em código que ninguém relê. Julgar exige segurar junto a carga da semana, a forma do momento e o que foi dito da última vez: isso é trabalho de treinador, e quem faz é o agente, com a pasta inteira na frente dele.
O benefício prático é imediato: quando o agente não rodou (máquina desligada, API fora do ar), a ficha existe mesmo assim. Nada é perdido, só falta o comentário, e basta reenviar o evento.
Outra escolha vai no mesmo sentido: o script não guarda nenhum arquivo de estado para saber o que já tratou. É a descrição no Strava que faz fé. Vazia, ele escreve; carregando a assinatura dele, ele passa direto; não vazia e sem assinatura, foi você que escreveu e ele não mexe. Um arquivo de estado local não poderia dizer nada sobre o que outra máquina fez; assim, duas máquinas podem rodar em paralelo sem pisar uma na outra.
Mais duas regras de separação, gravadas no repositório e que não devem ser contornadas:
- a descrição publicada no Strava nunca copia o texto do plano: minha ficha de semana contém frequências cardíacas alvo e arbitragens que não têm nada que fazer numa atividade pública;
- uma descrição escrita à mão nunca é sobrescrita.
O comentário que aterrissa embaixo da atividade
A graça não é a autocongratulação. É que o veredito do treinador seja legível do meu celular, embaixo da atividade, sem abrir o repositório, e que fique ali, grudado no treino, para sempre.
Por isso o comentário é deliberadamente estreito: um emoji de veredito, o número que o sustenta e o que isso muda para o próximo treino. Uns 250 caracteres.
✅ Cinco repetições a 3'39 de média para um alvo de 3'38-3'44, e o cardíaco plano no bloco inteiro. A tabela de ritmos se sustenta. Sexta continua em rodagem: você gastou a margem da semana.
A versão longa, a que tem as frequências cardíacas, o ponto de atenção que sinalizei e a arbitragem sobre o volume da semana que vem, vai para o repositório e para o e-mail. Dois canais, dois públicos, e é o prompt que segura a fronteira.
Três coisas que só quebram em produção
Cada uma dessas linhas existe porque alguma coisa quebrou sem ela. Elas são mais instrutivas que o resto do artigo.
1. Fixar o navegador. Tenho duas extensões Claude conectadas no Chrome. Nada garante qual delas o agente pega, e só uma carrega a sessão do Strava. O resultado: uma execução em cada duas, o agente terminava no navegador errado, deslogado, incapaz de comentar qualquer coisa. Selecionar o navegador por identificador de dispositivo não é preservado de uma sessão para outra: logo, isso tem que estar no prompt, com a proibição explícita de ir perguntar ao usuário qual escolher. Rodando sem supervisão, uma pergunta é um bloqueio.
2. O campo de comentário do Strava não tem maxlength. Nada, no navegador, impede escrever longo demais: é o servidor que recusa no envio. Um agente que redige um belo parágrafo de 600 caracteres digita tudo, clica em "Publicar" e leva uma falha que não entende. Então o prompt precisa impor a brevidade antes da redação, e prever o caso: se o envio falhar, encurta e republica, nunca corta em dois comentários.
3. Um comentário de treinador por atividade. Quando você reenvia um evento para testar (o que se faz muito no começo), sem essa regra o agente empilha comentários numa atividade já tratada. Por isso o prompt manda ele ler a aba "Comentários" antes de escrever, e passar a vez se já estiver lá. Mesma lógica do lado do repositório: se a seção ## Analysis já estiver preenchida, ela não é reescrita.
Quanto isso custa
| Peça | Onde | Custo |
|---|---|---|
| O agente treinador | Minha máquina, pelo AgentsRoom | minha assinatura Claude |
| A consulta a cada 15 min | Uma máquina Linux pequena ligada | ~5 €/mês, ou zero num Raspberry Pi |
| O diário | Um repositório Git privado | grátis |
| A API do Strava | Strava Developer Program | ver os preços do Strava |
Não existe chave de API cobrada por token nessa montagem. É o ponto que acho mais subestimado: a mesma coisa construída sobre uma API cobrada por uso teria um contador girando a cada treino, e provavelmente eu não teria mantido.
Monte isso neste fim de semana
As etapas, em ordem. Conte com uma noite se você já tem uma conta no Strava e uma assinatura Claude.
1. Clonar o modelo e torná-lo seu.
git clone https://github.com/AgentsRoomDev/running-performance-coach.git my-coach
cd my-coach
rm -rf .git && git init
Deixe sua cópia privada. Um diário de treino contém dados de saúde: frequência cardíaca, sono, lesões. O modelo é público, sua cópia não deveria ser.
Depois preencha, nesta ordem: athlete/profile.md (quem você é como corredor), athlete/records.md (seus recordes), athlete/constraints.md (os horários que você tem de verdade), athlete/zones-and-paces.md (seus ritmos de referência), plan/objective.md (a prova e o objetivo), e depois CLAUDE.md, onde você substitui cada espaço {{...}}.
Por fim, abra o repositório com seu agente Claude e diga: "leia CLAUDE.md e athlete/, depois monte a primeira semana para mim."
2. Conectar o Strava.
cp .env.example .env && chmod 600 .env
python3 scripts/strava_oauth.py # um clique no navegador, uma única vez
python3 scripts/strava_sync.py --dry-run
O --dry-run mostra o que seria escrito sem escrever nada. É a hora de verificar se a reconstrução dos treinos te agrada.
3. Criar o gatilho no AgentsRoom. Em Triggers, New trigger:
| Campo | Valor |
|---|---|
| Tipo | Webhook, origem generic |
| Prompt | o conteúdo de docs/trigger-prompt.md |
| Papel / persona | docs/coach-persona.md |
| Modo de permissão | Autônomo |
| Acesso ao navegador | Ativado |
O AgentsRoom fabrica uma URL e um segredo de assinatura. Coloque os dois no seu .env:
WEBHOOK_URL=https://agentsroom.dev/api/triggers/t_xxxxxxxxxxxx
WEBHOOK_SECRET=whsec_xxxxxxxxxxxxxxxxxxxxxxxx
4. Testar antes de confiar.
python3 scripts/webhook_replay.py scripts/examples/webhook-session.json --dry-run
python3 scripts/webhook_replay.py scripts/examples/webhook-session.json
Isso reenvia um treino para o gatilho sem esperar a sua próxima corrida e sem mexer no estado do trabalho automático. Você deve ver ✅ HTTP 202, e uma aba de agente deve abrir no AgentsRoom.
5. Fazer rodar a cada 15 minutos.
bash scripts/systemd/install.sh # num servidor Linux
Uma unidade oneshot mais um timer: nenhum processo residente, e uma passagem perdida enquanto a máquina estava desligada é recuperada na próxima inicialização.
Se você não tem uma máquina ligada o tempo todo, pule essa etapa: rode o strava_sync.py na mão quando der vontade, ou simplesmente conte seu treino para o agente numa conversa. O ritual do CLAUDE.md funciona igualzinho. Você perde a automação, não o treinador.
O que eu tiro disso, para além da corrida
Nada nessa montagem é específico da corrida. O que ela mostra é um padrão reutilizável para praticamente qualquer domínio onde você acumula dados pessoais e gostaria de ter uma opinião competente sobre eles.
Três peças, e é só. Um repositório Git de arquivos Markdown como memória legível pela máquina e por você. Um evento que acorda um agente em vez de um agente que consulta em loop e queima tokens à toa. Três camadas de configuração que separam com clareza quem é o agente, como ele trabalha na sua casa e o que ele deve fazer neste instante.
Troque "treino de corrida" por "extrato bancário", "sessão de código", "medição de glicemia" ou "nota de leitura": a mecânica não muda.
Perguntas frequentes
Preciso saber programar para montar um treinador de corrida com IA?
Você precisa saber rodar um comando no terminal e editar um arquivo de texto. O repositório modelo está pronto para clonar, os scripts Python não usam nada além da biblioteca padrão (nenhum pip install), e a parte de treinamento se configura escrevendo prosa comum em arquivos Markdown. O trabalho de verdade não é técnico: é descrever com honestidade quem você é como corredor e o que está buscando.
Quanto custa por mês?
O agente roda na assinatura Claude que você já tem (Pro ou Max): não existe chave de API cobrada por token. Além disso, talvez você queira uma máquina pequena ligada o tempo todo para consultar o Strava a cada 15 minutos, cerca de 5 euros por mês num VPS, ou zero num Raspberry Pi. O repositório Git privado é gratuito. Resta a API do Strava, que exige uma assinatura de desenvolvedor paga desde junho de 2026.
Por que um repositório Git em vez de um banco de dados?
Porque o histórico fica legível, pelo treinador e por você. Cada treino é um arquivo Markdown, cada mudança de plano é um commit com o motivo. O agente consegue reler o que prescreveu três semanas atrás e verificar se funcionou, e você lê seu plano no celular pelo app do GitHub, sem escrever uma linha de interface.
O que é um webhook, em palavras simples?
Um webhook é um serviço que liga para você em vez de você ligar para ele. Em vez de perguntar a cada cinco minutos se tem novidade, você entrega um endereço web a um programa, e é ele que manda uma mensagem quando o evento acontece. Aqui, o script que importa o treino manda essa mensagem para o AgentsRoom, que abre um agente Claude no mesmo segundo. É também o que torna a montagem econômica: um agente que consulta em loop queima tokens a cada volta, um gatilho webhook não custa nada enquanto nada acontece.
Isso funciona para outro esporte além da corrida?
Sim. A importação reconstrói as voltas do relógio, e o ciclismo e a natação também registram voltas. O que muda são os arquivos de estratégia e o catálogo de treinos, que são texto que você reescreve. A mecânica (importação, webhook, agente, repositório) não se mexe.
O agente pode errar e destruir meu plano?
Ele pode errar, mas não pode destruir grande coisa: tudo o que escreve é um commit Git que você pode ler, contestar e reverter. O arquivo CLAUDE.md proíbe explicitamente que ele reescreva o histórico, invente dados que você não forneceu, mude o plano sem registrar o motivo e dê conselho médico. Uma dor suspeita, e ele te manda para um profissional.
O repositório modelo está aqui: AgentsRoomDev/running-performance-coach. Clone, preencha seus ritmos, e você tem seu treinador. Se quiser ver a peça que acorda o agente, ela está descrita na página de gatilhos webhook, e o AgentsRoom se baixa aqui.
Baixar AgentsRoom
Rode todos os seus agentes de IA, em todos os seus projetos, de uma única janela.
App complementar: acompanhe seus agentes em qualquer lugar
Use Claude, Codex, Antigravity CLI ou outro provedor de IA.
Envie bugs e pedidos direto para o seu backlog público.
Uma visão do AgentsRoom em ação.
Continue lendo
O AgentsRoom agora suporta Ollama: rode modelos locais ao lado da nuvem
O Ollama agora é um provedor no AgentsRoom. Rode modelos open source locais como Llama, Qwen, Gemma e DeepSeek ao lado dos agentes na nuvem, com um controle local ou nuvem por agente, alternável no meio da conversa.
Leia o artigoO Claude Code mantém um login por vez. Veja como rodar vários.
Um guia prático para rodar uma conta de trabalho e uma conta pessoal na mesma máquina: a variável de ambiente que decide qual login está ativo, por que a abordagem pelo shell quebra assim que você passa de dois terminais, e como fixar uma conta por projeto.
Leia o artigoO Antigravity CLI guarda um único login do Google por máquina. Veja o que funciona no lugar.
Por que você não consegue alternar duas assinaturas Google AI Pro no Antigravity CLI, onde ele realmente guarda o seu login, o que os trocadores de conta fazem de verdade com o chaveiro do sistema, por que um plano familiar não dobra a sua cota, e a única abordagem que roda várias contas em paralelo de verdade.
Leia o artigo