O agente que perdeu o fio reencontra o protocolo: bus boot <nome> e skill por motor. Medido em uso real: depois de compactar o contexto, o agente Kimi trocou o bus watch por npm run dev e anunciou “watch armado”. Agora bus boot <nome> reimprime o texto de boot exato daquele agente (nome, sala, comando do watch com o escopo, como responder e rearmar) — a mesma função que gera o arquivo de agente e o texto do adopt. A skill claude-bus ganhou no topo o bloco “Qual motor sou eu (leia só o seu)” com 3 a 6 linhas executáveis para claude, kimi-code, grok e pi, e o bloco “Perdi o fio”; a prosa histórica desceu para o fim. Medido que o Kimi Code 0.41 não lê ~\.claude\skills: o instalador passa a copiar a skill também para ~\.agents\skills.
Hooks do Kimi (opt-in): rearme forçado do watch. Medido no CLI real (0.41.0): no evento Stop, exit 2 + stderr faz o Kimi continuar o turno seguindo o stderr. bus install-kimi-hooks escreve três [[hooks]] no config.toml do Kimi (entre marcadores, com backup, idempotente, hooks de terceiros intocados byte a byte; --remove desfaz, --dryrun mostra). Se o agente for encerrar o turno com o watcher morto, o hook devolve a instrução de rearme com o comando exato e o Kimi rearma antes de parar; após compactação ou retomada, reinjeta o bus boot. Fail-open total: qualquer erro sai 0 e vai para o log — sessão do Kimi fora do bus não vê nada (custo medido ~1 s). bus doctor informa se está instalado.
Semeadura da TUI do Kimi honra o modelo. Com o default_model do Kimi num provider que não funciona em modo -p (opencode-go/*, bug do cliente Kimi documentado pelo OpenCode), a sala inteira não subia. Agora --model, o modelo salvo no time (bus up) e a chave kimi-code_args chegam à semeadura — o --model explícito vence o do config (medido: o último -m ganha) — e a falha traz a dica do que fazer.
Duas suites novas (skillmotor, kimihook) e casos novos em kimitui e deliver, cada uma provada contra a v1.7.1 antes de aprovada; seis medições no CLI real do Kimi documentadas com a saída crua. 46 suítes, inteira verde.
v1.7.1
Novidade
Kimi Code ganha TUI de verdade — pelo mesmo caminho do Grok, sem adaptador. Até aqui ele só rodava headless, com uma aba espelho de só leitura: o operador nunca via a conversa ao vivo. Medido que o Kimi acorda sozinho quando uma tarefa em background chega ao estado terminal — a mesma lógica da ferramenta Monitor do Claude Code, só que o gatilho é o fim da tarefa, não cada linha. bus open --agent kimi-code --tui agora abre a janela de verdade: o agente arma bus watch --once em background, recebe a notificação, responde e rearma sozinho. bus adopt também passa a aceitar o motor.
Agente em loop não enche mais a inbox de outro em silêncio. A única guarda contra flood era o limite de rodadas por thread — cobria ping-pong na mesma conversa, mas um agente que abria thread nova a cada envio, ou repetia a mesma mensagem, passava direto: a inbox do destino crescia sem limite e quem mandava nunca via erro. Agora bus send recusa (na hora, com o motivo na tela) uma rajada acima do teto por remetente+destino numa janela, e uma repetição idêntica numa janela curta. Configurável por três chaves no config.json (send_burst_max, send_burst_window_s, send_repeat_window_s), cada uma desligada com 0. Avisos do sistema (--from bus) ficam isentos.
Correção de produção: bus watch --scope estava sendo recusado desde a v1.7.0. A validação de flags por comando nunca soube da flag --scope no watch — o watcher que o Monitor, o adopt e o --tui armam para qualquer motor (Claude, Grok, Kimi Code) morria na largada, sem aviso. Corrigido e travado com processo real (não mais só simulado).
Duas suites novas (kimitui, antiflood), cada uma provada contra a v1.7.0 antes de aprovada — a suite inteira segue verde.
1.352 verificações automatizadas em 44 suítes (+125), inteira verde. Round-trip real com o Kimi: abriu a janela, recebeu a tarefa pelo bus, respondeu na thread e rearmou sozinho.
v1.7.0
Novidade
A fila não congela mais em silêncio. A marca de uma entrega que morreu no meio era identificada só pelo pid: um pid reciclado pelo Windows parecia um processo vivo e a fila daquele agente ficava travada indefinidamente, sem erro e sem linha de log. Agora cada marca carrega identidade real do processo (pid + carimbo de abertura) e o bus doctor aponta marca com pid morto ou carimbo incompatível na primeira varredura. E se o carteiro morrer mesmo assim? A varredura seguinte re-entrega a mensagem — com aviso no log e no output do agente, no lugar da duplicata ou da entrega que nunca acontece.
Mensagem ilegível não prende mais a quem veio depois. Uma mensagem com JSON truncado no topo da fila congelava tudo atrás dela: a boa ficava presa para sempre e ninguém avisava. Ela agora vai para quarentena com registro em disco, o log diz o que houve, e a fila segue andando.
A sua sala se levanta sozinha quando o monitor cai.bus install-supervisor cria uma tarefa agendada que roda bus supervise no logon e em intervalos: monitor morto ou travado é reerguido sem intervenção, com o motivo logado (SUPERVISE-RESTART). Não deixa de funcionar com a sessão bloqueada (Win+L) — e o doctor acusa supervisão instalada que não dispara ou entra em ciclo de reinício.
O doctor virou portão. Nenhum problema passa despercebido: exit code 0 só quando tudo está de pé. Ele também ganhou a checagem que fecha a rede: agente que trabalha sem pedir aprovação — danger no time, e os motores pi e kimi-code, que não têm como não pedir — em pasta sem .git é acusado com o motivo na hora: autônomo sem git é autônomo sem desfazer.
O cmd /c foi aposentado. As entregas agora vão pela chamada nativa de todos os quatros motores — era a única diferença entre eles. Fim do corte de 8.191 caracteres na linha de comando e das aspas estragadas; o teto de tempo por entrega (deliver_timeout_s) passou a valer de verdade para os quatro motores. Testes de correção são provados honestos por violação: cada um reprova a versão antiga antes de aprovar a nova, medido contra a v1.6.0.
Fila que descongela sozinha, com teste que mata o carteiro no meio. A suíte filacongelada derruba um deliver em pleno voo (processo, não timeout) e confirma que a próxima varredura re-entrega com aviso, sem duplicata e sem intervenção manual.
1.227 verificações automatizadas em 42 suítes, inteira verde.
Antes de subir: pare TODAS as salas. A marca de entrega mudou de formato (pid + carimbo) e a troca de versão não assume marcas antigas — não há takeover. Roteiro: bus down (todas as salas), atualizar, bus start. Se algo ficou preso vindo da v1.6.0, o doctor aponta que a marca é órfã e o bus sweep limpa antes da fila andar.
v1.6.0
Novidade
Kimi Code entra como quarto motor — e traz junto qualquer modelo que você quiser. Ele importa um catálogo público com 190 provedores e mais de 6.700 modelos: GPT, Gemini, Qwen, DeepSeek, K3, até modelo rodando na sua própria máquina. Até agora cada motor era preso a uma família de modelo; com ele, escolher o modelo de um agente é uma linha no config.json ("kimi-code_args": "-m deepseek/deepseek-chat"), sem tocar em código. Validado com o CLI real: leu o arquivo do projeto, respondeu pelo bus, retomou a conversa no turno seguinte e se recuperou sozinho quando a sessão morreu.
Adote uma sessão que já está aberta, sem perder o histórico. O novo bus adopt transforma uma sessão que já está trabalhando há horas em agente do time — antes a única opção era abrir uma sessão nova, do zero. Ele prepara o agente e devolve o texto para você colar lá dentro; a própria sessão se registra. Motor que não tem como receber mensagem por dentro é recusado na hora, com o motivo, em vez de virar um agente que aparece na lista e nunca recebe nada.
Rodar os testes não derruba mais os seus agentes de verdade. Este era um bug sério e silencioso: o bus identificava um vigia de agente só pelo nome, sem olhar de qual sala ou pasta ele era. Como todo vigia que nasce encerra os antigos do mesmo agente, um dev subindo em qualquer lugar da máquina matava o dev de todas as outras salas. Consequência no uso normal: dois times com um agente de mesmo nome se derrubavam mutuamente a cada renovação. Agora cada vigia carrega a identidade da sala, e só encosta no que é dele.
O limite de tempo de uma entrega saiu do lugar errado. Ele vivia numa variável de ambiente que só valia dentro do processo do carteiro — quem ajustava no próprio terminal não mudava nada e não recebia aviso. Agora é deliver_timeout_s no config.json, ao lado dos outros ajustes.
939 testes automatizados (+195), com a suíte inteira verde.
v1.5.2
Fix
O motor que você escolheu para um agente não se perde mais. Ao montar o time, escrever revisor=pi não fazia nada: o assistente só reconhecia o apelido curto (rev), descartava a escolha em silêncio e o time subia inteiro no Claude. Agora vale o nome, o papel, o papel escrito por extenso (revisor, orquestrador, desenvolvedor) ou só o começo dele — e todos=pi aplica no time inteiro.
O assistente mostra os agentes antes de perguntar. A lista (orq (orquestrador), dev (dev), rev (code-review)) aparece na tela, e cada motor aplicado é confirmado na hora (revisor -> rev: pi). Nome que não existe no time vira aviso com a lista certa, em vez de sumir calado.
Papel escrito por extenso deixa de quebrar o agente na hora de abrir. No modelo personalizado e no bus add, digitar revisor gravava um papel sem persona correspondente e a falha só aparecia depois, ao abrir o agente. Agora vira code-review na hora.
744 testes automatizados (+40).
v1.5.1
Fix
Um nome errado não apaga mais o seu bus. Nome de agente passa a ser validado em todos os comandos (letras, dígitos, - e _). Antes, um bus remove .. --purge digitado por engano — ou por um agente mal orientado — apagava a pasta inteira do bus, com registro, filas e histórico de todos os agentes.
Agente não fica surdo por causa de uma mensagem quebrada. Um arquivo de mensagem ilegível (leitura pela metade, corrompido, travado pelo antivírus) derrubava o ouvinte em silêncio: o agente parava de receber e ninguém era avisado. Agora o ouvinte pula o arquivo, registra o motivo e, se ele continuar ilegível, move para a pasta de falhas e segue trabalhando. Toda mensagem também passa a ser gravada de forma atômica — nunca aparece pela metade.
Mensagem para agente desligado espera na fila. Depois de um bus down, mensagens enviadas ao agente tentavam retomar uma sessão vazia — falhavam sem aviso ou caíam em qualquer sessão. Agora ficam guardadas até o bus up, e o bus send avisa na hora que o destino está offline.
704 testes automatizados (+95).
v1.5.0
Novidade
O agente pi trabalha na tela, como qualquer outro. Ele passa a receber as mensagens do time dentro da própria conversa — você vê o raciocínio, a tarefa chegando e a resposta saindo. Escolha na hora de montar o time: aba de acompanhamento ou conversa de verdade.
Você vê o que cada agente fez, mesmo quem não tem janela. Toda entrega passa a ficar registrada: a mensagem que chegou, o que o motor respondeu e quanto tempo levou. Um comando acompanha isso ao vivo, e a aba de acompanhamento abre junto com o agente. Vale para todos os motores — antes essa saída se perdia.
O assistente pergunta como abrir o agente pi. A escolha fica salva no time, então reabrir o time repete o que você decidiu.
Tarefa entregue e respondida deixa de aparecer como pendente. Um agente que responde durante a própria execução fechava a cobrança antes dela existir, e a dívida ficava aberta para sempre.
Fila parada não fica mais em silêncio. Quando uma entrega já está em curso, o registro passa a dizer há quanto tempo — antes o comando saía calado e a fila do agente podia congelar sem deixar rastro.
Agente sem janela deixa de parecer quebrado no painel. Ele aparecia como "parado" e "desconhecido"; agora o painel diz que é sob demanda, que é o normal dele.
Opção de um comando não vale mais em outro. Uma opção nova de um comando passou a ser aceita em silêncio por outro, onde não fazia sentido — e ali significava um processo rodando para sempre.
609 testes automatizados.
v1.4.0
Novidade
Terceiro motor no time: o pi. Um agente pode rodar no pi e conversar normalmente com os agentes Claude e Grok — recebe tarefa, executa no projeto e responde na mesma conversa. Ele entra como dev ou revisor, com a personalidade do papel aplicada em cada tarefa.
Um comando só para colocar o pi no time. Diferente do Grok, o pi não precisa de registro manual: o bus cuida da identidade da conversa dele.
Resposta com o remetente certo. Um agente sem janela respondia como se fosse você, e a cobrança da tarefa nunca fechava.
Reabrir o time não apaga mais a memória do agente pi. Cada reabertura começava uma conversa nova; agora ela continua de onde parou.
Fila do agente não trava mais depois da resposta. O pi seguia vivo depois de terminar a tarefa e bloqueava a entrega seguinte.
Suíte de regressão completa verde, incluindo o contrato do novo motor.
v1.3.4
Correção
Agente morto não passa mais por saudável. Quando a sessão de um agente morria mas seu ouvinte continuava no ar, o painel mostrava tudo verde — e o time podia passar horas engolindo tarefa no vazio. Agora o estado do ouvinte e o da sessão são mostrados separados, e o diagnóstico avisa quando a sessão morreu.
O time volta mesmo depois de uma sessão cair. Reabrir pulava o agente dizendo "já está no ar", olhando para o ouvinte em vez da sessão. Com a sessão comprovadamente morta, ele reabre.
Nenhum ouvinte fica invisível. Um ouvinte podia existir sem ser reconhecido por nenhum agente: sobrevivia ao comando de parar, aparecia como órfão falso e tinha seu registro apagado como se estivesse morto — abrindo espaço para dois ouvintes disputarem as mesmas mensagens. Era exatamente assim que mensagens sumiam.
Registro de ouvinte vivo nunca é apagado. Na dúvida, preserva: registro velho custa uma troca perdida; registro vivo apagado custa mensagem comida no vazio.
Opção escrita errado agora dá erro. Qualquer --opcao desconhecida passava em silêncio, e o comando subia torto sem ninguém perceber.
489 testes automatizados.
v1.3.3
Correção
A chave do provedor fica num lugar só. Ao abrir um agente em outro modelo, um arquivo temporário do sistema guardava a chave em texto puro — e sobrevivia à sessão, legível por qualquer programa seu. Agora a janela lê o arquivo de perfil na hora de subir, e o temporário não carrega mais nada sensível. Se você já abriu agentes em outro modelo, troque a chave desse provedor — as cópias antigas ficaram no disco.
Diagnóstico não mostra mais segredo. A pré-visualização de abertura mascara chaves, tokens e senhas. Terminal vira log e print: o que passa por ali tem que ser considerado exposto.
Seu modelo alternativo funciona em qualquer time. Fora do time padrão, o perfil do provedor não era encontrado e o agente não abria. A chave é sua, não do time — um perfil serve todos. Vale igual para as personas que você mesmo criou.
Limpeza dos temporários. Os arquivos de abertura se acumulavam para sempre; a limpeza agora recolhe os antigos.
431 testes automatizados.
v1.3.2
Correção
Escolher outro modelo na hora de montar o time. O campo de motor agora aceita rodar o Claude apontando para outro provedor — e lista os perfis que você tem salvos antes de perguntar. Antes só aceitava os motores puros: quem quisesse outro modelo levava um "motor desconhecido" e tinha que editar o arquivo do time na mão.
Perfil errado é recusado na hora. Se você indicar um perfil que não existe, o assistente diz quais existem e onde criar — em vez de abrir o agente calado no modelo errado.
Cada agente novo escolhe onde abrir. Ao acrescentar um agente a um time já rodando, dá para dizer se ele entra como aba, ao lado dos outros, ou em espaço separado. O padrão já vem do que o time usa: enter e ele entra junto.
Idade e tempo corretos fora do fuso UTC. Em máquinas fora do horário de Londres, todas as contas de tempo erravam pela diferença do fuso: agente vivo aparecia travado, tarefa aberta agora mostrava horas de espera, mensagem ainda válida era descartada como velha e os lembretes automáticos disparavam cedo. Uma máquina em Brasília via tudo com três horas a mais.
Falha ao abrir não passa mais por sucesso. Quando um agente não conseguia abrir, o time anunciava "aberto" do mesmo jeito — e as mensagens sumiam sem ninguém entender. Agora a falha aparece com o motivo, e o time avisa que subiu incompleto.
398 testes automatizados. Os de tempo rodam em qualquer fuso.
v1.3.1
Novidade
O time abre junto, no mesmo espaço. Antes cada agente ganhava um espaço próprio e o time ficava espalhado. Agora eles abrem lado a lado no espaço do projeto — em abas ou com a tela dividida, do jeito que você preferir. O assistente pergunta e guarda a escolha no time.
Você decide quem trabalha sozinho. O assistente pergunta se a autonomia vale só para quem executa, para o time inteiro, ou para ninguém. Fica salvo: nas próximas aberturas o time volta do mesmo jeito.
Confira antes de abrir. O assistente agora mostra um resumo — sala, pasta, onde abre e cada agente com sua função e autonomia — e pede confirmação. Errou uma resposta? Cancela ali, sem ter aberto nada.
Nada de silêncio ambíguo. Ao abrir, cada agente diz explicitamente se está autônomo ou se pede aprovação, com cor. Antes a informação só aparecia quando era positiva, e a ausência passava despercebida.
Parar o time certo. Pedir para parar informando o nome agora age naquele time — antes o nome era ignorado em silêncio e o comando mexia em outro lugar. Nome desconhecido dá erro em vez de parar o time errado.
Fim dos processos fantasmas. Processos de bastidor que perdiam o registro ficavam rodando invisíveis, sem aparecer em lugar nenhum. Agora são identificáveis, o encerramento os alcança, o diagnóstico os denuncia e um comando de limpeza resolve.
317 testes automatizados.
v1.3.0
Novidade
Montar o time virou uma conversa. Em vez de digitar quatro ou cinco comandos com parâmetros que ninguém decora, um assistente pergunta o essencial — nome do time, pasta do projeto, quantos agentes — e abre tudo. Ele aplica sozinho a configuração certa para cada papel.
Da segunda vez, um comando só. O time montado fica salvo. Voltou a trabalhar no projeto? Um comando reabre a sala e todos os agentes de onde pararam. Rodar duas vezes não duplica nada: quem já está no ar é preservado.
Times do seu jeito. Modelos prontos (só um agente, dupla, ou time completo com revisor) ou totalmente personalizado — você define cada agente: nome, função, motor e se trabalha sozinho. Dá para ter um qa, um arquiteto, o que o projeto pedir.
Mexer no time depois. Precisa de mais um agente no meio do trabalho? Um comando pergunta quatro coisas, guarda no time e já abre. Para dispensar de vez, some do time também — não volta na próxima abertura.
Fechar o dia. Um comando encerra a sala inteira do time e fecha as abas correspondentes, sem deixar nada rodando por engano.
282 testes automatizados, incluindo o assistente testado com respostas roteirizadas.
v1.2.1
Novidade
Tirar um agente do time.bus remove <agente> faz a saída limpa: encerra o ouvinte, arquiva a fila dele, cancela as tarefas que ele devia e avisa quem estava cobrando — assim ninguém fica esperando resposta que não vem. O histórico é preservado (use --purge para apagar também).
Motivo: fechar a janela nunca removeu o agente. Ele continuava no time apontando para uma sessão morta, mensagens novas se acumulavam para ele e suas tarefas ficavam paradas para sempre na lista de pendências.
Tutorial ganhou a seção Presets de agente: os três presets prontos (orquestrador, dev, revisor), todos os parâmetros do comando de abertura explicados, combinações de preset com motor e como criar um preset próprio.
v1.2.0
Novidade
Agentes Grok no mesmo time. O bus deixou de ser exclusivo do Claude Code: --agent grok abre um agente rodando no Grok, na mesma rede, conversando com os agentes Claude. As diferenças entre os dois CLIs (persona, modo autônomo, entrada de prompt) são traduzidas automaticamente. Times mistos Claude + Grok + outros modelos funcionam lado a lado.
Fim das mensagens perdidas. Cada agente passa a ter um único ouvinte ativo. Antes, versões antigas do ouvinte se acumulavam em segundo plano e engoliam tarefas em silêncio — em produção chegaram a 116 no mesmo agente, e uma tarefa tinha ~1% de chance de ser vista.
Salas. Times isolados na mesma máquina com --ns <sala>: cada sala tem registro, filas e carteiro próprios, então dois times podem usar o mesmo nome de agente sem se cruzar. bus rooms lista todas.
Nenhuma tarefa some. Toda tarefa entregue vira uma pendência até a resposta chegar: bus pending mostra o que está devendo e há quanto tempo; bus nudge cobra quem não respondeu.
bus doctor. Diagnóstico em um comando: ouvintes duplicados ou travados, monitor parado, conversas bloqueadas — cada item com a correção ao lado.
Parar e retomar salas.bus stop arquiva a fila e encerra os ouvintes; bus start sobe limpo (ou --resume-pending para retomar de onde parou). Mensagens antigas expiram em vez de executarem fora de hora.
Aviso quando uma conversa é interrompida. O limite de rodadas agora avisa quem enviou, em vez de reter a mensagem em silêncio — bus blocked mostra o que foi retido e como liberar.
189 testes automatizados cobrindo o núcleo, entrega, salas, pendências, ciclo de vida e o adapter de motores.
v1.1.0
Novidade
Integração com o herdr: rodando por dentro do multiplexer, cada bus open abre o agente como uma aba do herdr — todo o time lado a lado numa tela só, com status ao vivo. Detecta sozinho; --herdr força, --no-herdr volta pra janela separada.
Múltiplos modelos de IA por time ficou mais simples: perfis de provider em ~\.claude-bus\profiles\ deixam cada agente rodar num modelo diferente (Claude, Kimi, DeepSeek…) via --env, sem afetar as outras janelas.
bus open agora aceita --model e --danger (modo autônomo sem prompts de permissão) direto na abertura.
--dryrun mostra exatamente como a janela vai abrir (modelo, persona, ambiente) antes de disparar.
v1.0.1
Fix
Identidade estável do agente: bus open agora grava CLAUDE_BUS_NAME no ambiente da janela — o nome do agente sobrevive a restart/resume da sessão.
Corrigido bug em que respostas apareciam como remetente user e falhavam na entrega (DELIVER-FAIL) após a sessão ser retomada.
bus register sem --name herda o nome do ambiente automaticamente.
v1.0.0
Lançamento
Núcleo do bus: bus send, bus register, bus inbox, bus read, bus done, bus agents, bus status.
Monitor de entrega em segundo plano (bus start / bus stop) — acorda a sessão destino sozinho, sem gastar tokens.
bus open: abre terminal novo com agente que se registra e arma o watch sozinho.
Personas por papel com --role (orquestrador, dev, code-review) e papéis customizados.
Perfis de provider com --env (ex.: rodar um worker com outro modelo) e --clean pra janela nascer com Claude original.
Workers headless criados sob demanda ao enviar pra agente novo com --cwd.
Guard-rails: limite de rodadas por thread (anti-loop) com bus unblock pra liberar.
Suíte com 60+ testes automatizados cobrindo núcleo, entrega, monitor e registro.