Skip to content
Read in English

Versão

v1.2.22

O que foi entregue, em números

181
PRs integrados
346,971
Linhas adicionadas
108,957
Linhas de código
Código
108,957
Testes
119,838
Docs
118,176
Soma · código + testes + docs
346,971

de 181 integrados

  • bug 55 30%
  • feature 59 33%
  • polish 0 0%
  • docs 49 27%
  • groundwork 10 6%
  • unclassified 8 4%

desde v1.2.21 · tag em

A carta

A carta do fundador, na íntegra

Read in English →

Oi,

A v1.2.22 acaba com o FlowForge reportando "não sei dizer" como veredito — um job que nunca começou lia como build quebrado (#5763), um worker esperando o próprio compile lia como worker esperando você (#5667), um fix pronto esperando uma revisão que ninguém começou (#5840, #5671, #5847). Cada um desses custava dias inteiros. Também fechado: o processo morto que manteve um lease de autofire refém por quatro dias na accire (#5950). E, quando um worker fica quieto agora, o flowforge daemon serve percebe sozinho, a cada dez minutos, em todo repositório registrado: ele cutuca o worker uma vez, retransmite um veredito que ninguém repassou, e escala até você, pelo nome, o que ele não vai gastar dinheiro decidindo sozinho (#6104). Esta versão carrega 181 pull requests desde a v1.2.21 (com tag em 2026-08-24) — 44 delas chegaram num único dia, 11 de setembro, no meu próprio fuso horário (UTC−4).

O que mais me orgulha é o Plans ready to fire (planos prontos para disparar) (#5991–#6000). Duas semanas atrás eu não conseguia achar meus próprios planos — "a gente fez vários planos nas últimas duas semanas, e eu não lembro da metade, e pior: não sei onde eles estão, nem como achar." Todo plano ratificado agora cai numa prateleira como um sprint datado, atual ou atrasado, nunca no chute.

O Gantt é um instrumento de planejamento agora (ADR-0130): duração, esforço e tempo decorrido são três campos, o caminho crítico é calculado em vez de estimado no olho, e o percentual concluído é contado nas horas que o seu timer já registra — veja abaixo os treze tickets por trás dele, e o próprio ajuste de velocidade da War Room. Se algo aqui quebrou para você, ou algo aqui melhorou sua semana, responda e me conte. Eu leio cada uma.

Um abraço, Alex

Plans ready to fire

A camada de iniciativas do War Room com seus sprints datados — a camada em que a prateleira Plans ready to fire se fixa

Todo plano terminado costumava sumir assim que terminava. Um estudo rodava, o design era ratificado, os tickets eram emitidos — e depois não havia onde procurar. No meu próprio repositório, duas semanas depois, eu disse em voz alta o que a maioria de vocês provavelmente já sentiu: "a gente fez vários planos nas últimas duas semanas, e eu não lembro da metade, e pior: não sei onde eles estão, nem como achar." Onze planos terminados estavam guardados em onze pastas de documentação com sete semanas de intervalo entre eles, e nenhuma tela dizia quais estavam prontos para construir, quais já tinham começado, e quais tinham sido planejados contra uma base de código de oito versões atrás (#5991, #5992).

Agora existe uma prateleira. "Plans ready to fire" é uma iniciativa que existe uma única vez por projeto — criada para você, encontrada de novo em vez de duplicada — e todo plano ratificado cai nela como um sprint datado no instante em que vira plano. Duas portas colocam o plano lá, e as duas são passos que você já dá:

flowforge feature emit --live
flowforge doc ratify <doc> --land

flowforge plans land <doc> faz o mesmo para um documento ratificado antes, e recusa quando não existe ratificação — a prateleira não é um jeito de contornar o wall (#5994, #5995).

A prateleira também nunca chuta se um plano ainda vale a pena disparar. Todo sprint carrega o commit, a tag de release e a lane contra a qual foi planejado, e toda leitura o avalia contra a lane de hoje: ● current, ◐ behind (planejado contra uma release mais antiga, com a distância nomeada em commits e releases desde então), ou ○ unknown quando o commit planejado já não está mais nessa lane (#5993). Rode flowforge plans a qualquer momento, flowforge plans --all para incluir planos que já saíram da prateleira, ou pergunte à ACE o que está pronto para disparar — ela responde a partir da mesma prateleira, nunca de um grep nas pastas de documentação (#5996, #5997, #6000). O flowforge doctor ganhou uma linha plans-shelf que diz se a própria prateleira está presente, fechada ou duplicada (#5999).

Terminou um plano antes desta versão existir? flowforge plans backfill encontra os milestones em formato de sprint que são anteriores à prateleira e carimba cada um a partir do próprio histórico, dry-run por padrão, --apply para gravar. E tirar um plano da prateleira é exatamente o movimento que eu descrevi em voz alta uma vez: "eu posso mover esse sprint depois para uma iniciativa de verdade como a 1.2.22, ou transformá-lo num épico dentro de um sprint/milestone." As duas coisas são a tecla E num sprint da prateleira, ou flowforge plans fold pela linha de comando (#5998).

Rádio e o espectro K.I.T.T.

A tela de rádio com o espectro K.I.T.T. varrendo a partir do centro

Aperte J de qualquer lugar no cockpit e uma tela cheia de rádio se abre — ela não gasta nenhuma linha própria do cockpit. Busque entre 30.000 estações, veja o que está sintonizado e tocando, toque, pare (#5738). O áudio roda num processo separado, com frames chegando ao cockpit por um canal limitado que descarta em vez de crescer ou travar; ele fica em silêncio por padrão, e nada é criado até você pedir. Não ter dispositivo de áudio é um estado normal, não um erro — a busca e a navegação continuam funcionando e a tela diz por que não pode tocar (#5737). Um rádio em repouso não custa nada ao cockpit, provado comparando os bytes renderizados em vez de medir em torno deles (#5738).

Guarde a estação que você gostou: f marca a estação em foco como favorita e F mostra só as favoritas — todas as que você já marcou, não apenas as cinquenta que a última busca carregou. A marca é um glifo e uma palavra, então ela se lê sem cor, e as favoritas vivem num único arquivo SQLite pequeno dentro da sua pasta FlowForge home, que sobrevive a um reinício (#6001).

A varredura do centro para fora, do vermelho ao branco, é o espectro K.I.T.T. — o único fio visível que liga a tela de rádio de volta à estética do próprio cockpit. Ele é conduzido pelos frames de frequência reais do que está tocando, e quando não há nada para analisar, a varredura ociosa Knight Rider viaja por um piso aceso. A altura carrega o valor e a cor só o ecoa, então ele se lê sob NO_COLOR também (#5739).

E ele toca no Linux. O único backend de áudio que um programa Go tem no Linux alcança o ALSA através de C, e a FlowForge entrega um binário sem C nenhum — por isso o primeiro corte do rádio tocava só no macOS. A FlowForge agora fala o protocolo PulseAudio diretamente, em Go puro, e o PipeWire responde ao mesmo protocolo, então praticamente todo Linux de desktop é coberto pelo mesmo binário estático único. Um host com ALSA puro e sem servidor de som fica em silêncio e nomeia isso como o motivo, e o flowforge doctor ganhou uma linha radio-sink que responde coreaudio, pulse, ou unavailable: com o motivo. Isso é provado no Linux, não presumido a partir de um Mac: um job de CI toca através de um servidor PulseAudio real e falha se o que o servidor recebeu for silêncio (#6064).

O que você relatou

Moisés, accire

Quatro dos defeitos corrigidos nesta versão foram relatados por uma única pessoa: Moisés, que roda o FlowForge na accire (VolanApp). O primeiro foi um processo morto mantendo o seu lease de autofire refém — nada dava timeout nele, nada o recuperava, e um lease ficou em silêncio por quatro dias até um humano achar e apagar o arquivo à mão. O autofire agora recupera um lease cujo dono sumiu ou não deu sinal de vida por quinze minutos, e o flowforge doctor ganhou uma linha autofire-lease que nomeia um lease obsoleto, seu dono registrado, e há quanto tempo está em silêncio (#5950).

O segundo foi um registro de auditoria que anotava um bypass de gate que ninguém executou — GATE_BYPASS_UNLINKED role="adr" num repositório onde o ADR claramente existia, em toda rodada de planejamento. O único remédio que o gate oferecia era copiar um arquivo para o caminho que seu leitor esperava, o que satisfaz o gate forjando o registro que ele existe para provar. Moisés recusou, e tinha razão: escritor e leitor agora derivam a localização do artefato de uma única função, fixada por um teste, e um repositório com o formato do dele emite sem bypass nenhum (#5951).

O terceiro foi um ADR que existia como documento mas não tinha verbo para virar um registro no ledger — os dois únicos comandos capazes de gerar um ou alocavam um número novo ou exigiam reconstruir o corpus inteiro. Três rodadas seguidas de gráficos ficaram em DRAFT em vez de falsificar o registro, e Moisés disse claramente: "Nenhum registro do ledger foi forjado e nenhum SVG foi falsificado em nenhuma rodada." O flowforge adr register ADR-NNNN é o verbo que faltava — ele adota o número que o documento já carrega, verifica antes de escrever, e nunca sobrescreve um registro existente (#5952).

O quarto foi um wall que ficava disparando de novo num merge que já tinha sido concluído, cobrando um trabalho que já estava feito. Isso também está fechado: o observador agora lê os próprios fatos do wall antes de disparar, e o disparador que ficava reincidindo foi identificado pelo nome (#5953, PR #5961).

O Gantt como instrumento de planejamento

O Gantt de um sprint ratificado: a duração de cada ticket como uma barra, setas de dependência, e a data de referência impressa no quadro

A ADR-0130, ratificada em 2026-08-19, transforma o Gantt de um retrato de plano num instrumento de planejamento de verdade. A regra dela é que um número que a tela não pode garantir aparece exatamente como isso — nunca como um zero silencioso, e nunca como um traço que poderia significar qualquer coisa.

A data de referência agora é um campo de primeira classe, impressa no quadro — ◔ as of Sep11 14:03 sobre read 7m ago — para que quem lê distinga "sem progresso desde 11 de agosto" de "não medido desde 11 de agosto", e uma linha do tempo deixada aberta durante a noite não envelhece mais o próprio veredito sozinha (#5582). Duração, esforço e tempo decorrido são três campos, nunca um só: uma barra começa na primeira sessão registrada do ticket, não na sua criação, e o esforço é o tempo faturável corrigido a partir do qual a fatura é montada (#5583). A estimativa do próprio plano segue do plano até o ticket como um intervalo — Duration: 2d-4d (med) — e o flowforge feature emit --live recusa um lote com uma unidade de trabalho que não tenha uma (#5584). O número de precisão da estimativa é medido contra uma base congelada no instante em que o plano é commitado, e onde não existe essa base o número é aposentado e a tela diz por quê (#5589).

Todo campo carrega seu estado de medição — MEASURED, ABSENT, UNREADABLE ou PARTIAL (#5585) — e cada um se renderiza à parte, glifo e palavra juntos: ∅ absent · act, ? unreadable · retry, ◐ partial · wait (#5588). Um instrumento degradado nomeia a capacidade que perdeu, a entrada que falta e o caminho de volta (#5586), e uma contagem publica o denominador que já tem em mãos (#5587).

As dependências carregam um tipo e um lag — Depends-on: #123 SS+2d, #124 FF — enquanto um #123 isolado mantém seu significado exato de sempre, provado byte a byte em 80 corpos de ticket reais (#5590). A rede nomeia toda forma de estar errada parecendo certa: um ciclo, uma aresta para trás cruzando um limite de milestone, uma aresta para um ticket fora do quadro, uma raiz marcada como bloqueada sem nada no seu caminho; um ciclo recusa o caminho crítico de imediato (#5591). O próprio caminho crítico é calculado por uma passada para frente e outra para trás, com a folga total (essa cadeia pode atrasar sem mover a release?) e a folga livre (esse ticket sozinho pode atrasar sem incomodar mais ninguém?) relatadas separadamente, e um caminho que passa por um ticket sem duração fica ABSENT e nomeia isso (#5592). Oito barras sobrepostas num único responsável é um conflito que a tela agora declara, contra o máximo de tickets que essa pessoa realmente trabalhou num único dia — nunca um dia nominal de oito horas — e isso nunca move uma data (#5594).

O percentual concluído tem uma base nomeada, e a nossa é horas: ◇ 50% by hours (4 of 5). Toda hora vem do timer que paga você, que não tem incentivo para mentir do jeito que um "90% pronto" subjetivo tem. Ninguém é perguntado por uma porcentagem — um ticket reivindica suas horas quando fecha — 100% é reservado para um escopo sem nada aberto, e um ticket que o timer nunca viu fica de fora e é contado, nunca pesado como zero (#5593).

O milestone #172 do GitHub, "GANTT AS A PLANNING INSTRUMENT — fields, network, metrics", carregou os treze tickets acima.

A War Room ficou rápida

A War Room: sprints e milestones sob suas iniciativas, com contagens de atrasados, em dia e adiantados

A War Room costumava repintar uma frota cheia dez vezes por segundo, redesenhando bytes que não tinham mudado. Quatro travas rearmavam um relógio de busy-spinner às cegas; uma única regra agora decide se ele roda, e as repinturas com a frota cheia e nada digitado caíram de 11.675/s para 1.675/s, a 30.61 ms por quadro (#5689). Um segundo defeito media o mesmo painel de dois jeitos: em 200×62, o código das teclas trabalhava contra 55 linhas enquanto 47 apareciam na tela — agora há uma única autoridade de tamanho (#5693). O painel parou de se reconstruir em quadros sem mudança de tamanho — com 359 workers, as alocações de quadro ocioso caíram de 108.508 para 46.870 (#5694). Apertar Up costumava rolar a tabela inteira; o fundador pediu que só mudasse a linha selecionada. A lista é dona da própria janela: a seleção se move, o viewport fica parado (#5695). Uma tecla no meio da lista pintava a tela duas vezes e descartava a primeira passada, custando 29% do tempo da tecla (#5699). E uma atualização sem resultado e sem erro costumava apagar um painel cheio — uma resposta vazia não substitui mais uma já preenchida (#5744).

Colado

Colado vem do jiu-jitsu brasileiro, não é invenção da FlowForge. No jiu-jitsu, uma posição está colada quando está justa — sem folga, perfeitamente ajustada, pressão máxima e eficiência mecânica entre você e o adversário que você está imobilizando. Essa é a acepção de tatame: nada a ver com o sentido de dicionário de "justo", que puxa para justiça e equidade. É por isso que a FlowForge diz colado em vez de justo — para que ninguém leia aí o sentido de justiça. É o nome da família de gates que não deixa espaço nenhum entre a regra e o trabalho: um gate que viaja JUNTO com o ticket, o merge, a branch, de modo que nada escapa pela folga entre eles, do mesmo jeito que uma pegada de jiu-jitsu é justa. Colado é uma família de milestone (#3052–#3085), e a v1.2.22 é a primeira versão em que a metade visível ao cliente foi entregue — a metade que você vê funcionando no seu próprio repositório, não só dentro da FlowForge.

Sete selos chegaram nesta lane:

  • Uma identidade de cobrança que costumava variar de máquina em máquina agora é fixa numa só. Ela falha fechada no início da sessão — um único dev_id para os hooks e para o escritor — e se cura sozinha numa máquina nova, em vez de bifurcar silenciosamente (#3060).
  • A política de falhar fechado por trás disso está escrita uma vez só, com cada lugar em que a árvore a contradizia nomeado, em vez de deixado para a próxima pessoa redescobrir (#3059).
  • Um merge não pode mais passar numa checagem de CI que nunca rodou. O backstop server-side de não-mesclar-no-vermelho é um único detector agora, com uma linha no flowforge doctor, um verbo configure que se recusa a escrever às cegas, e uma frase clara sobre onde o backstop simplesmente não pode existir (#3055).
  • Uma leitura de branch protegida que falhava costumava ser indistinguível de uma branch que simplesmente não estava protegida. O backstop da Regra #18 é um único detector compartilhado com linha no doctor — COVERED, UNCOVERED, UNAVAILABLE ou UNKNOWN — e uma leitura que falhou nunca é redigida como UNCOVERED (#3056).
  • O autofire costumava tratar um plano esperando a sua própria ratificação do mesmo jeito que um build quebrado. Agora ele pergunta à escada de merge antes de disparar, então uma ratificação pendente abre RATIFY, nunca uma falha vermelha (#5973).
  • Uma instalação antiga do Claude Code costumava fazer uma capacidade ausente parecer defeito da FlowForge. Um piso de versão mínima com recusa por capacidade agora diz isso pelo nome — é a plataforma que precisa de upgrade (#5974).
  • A porta que a FlowForge abre para o seu sistema de tickets costumava ser 64 chamadas gh cruas e sem rastro, então um segundo provedor significava reescrever tudo. 168 costuras do forge estão inventariadas e travadas por catraca agora — um segundo provedor é uma mudança de costura, não uma reescrita (#5976).

Três outros fecham o mesmo tipo de lacuna, de fora dessa família de milestones:

  • O ajuste de gate de CI dizia main-only enquanto o repositório rodava CI em outras branches também. Num único repositório privado, em doze horas: 200 execuções de workflow, 193 delas fora da main, 2.319 minutos faturados. O flowforge release ci status agora lê o YAML do workflow de volta e imprime os gatilhos reais ao lado da política, e uma linha ci-trigger-drift do doctor dispara sem que ninguém precise pedir (#6113).
  • Um hotfix que chegava na main costumava ficar só lá. Toda lane de release ativa agora ganha um PR de sincronia, um conflito vira um PR etiquetado, e nada é pulado em silêncio (#3525).
  • Um corte de release podia rodar numa máquina que tinha ficado desatualizada. O flowforge release cut --dry-run imprime o plano e não toca em nada, e o corte recusa uma HEAD destacada, uma máquina atrás da origin, uma árvore rastreada suja, binários instalados divergentes, ou uma lane sem seção de notas de versão (#5130).

Coisas singelas que mudam tudo

Nem toda mudança merece um cartão de destaque. A maior parte do que faz o FlowForge melhor no seu dia a dia cabe numa linha só — coisas singelas: uma tecla que finalmente faz o que você esperava, uma tela que abre onde você estava olhando. É aqui que elas ficam, a cada versão. Singelo é a palavra do próprio fundador: pequeno, simples, sem alarde — e sentido todo dia.

Seis delas chegaram nesta lane:

  • Um acento grave costumava abrir um terminal em vez de chegar ao seu texto. Digitado em qualquer campo de texto do cockpit — o compositor da ACE, o campo de ticket do spawner, o formulário de milestone, a caixa de comentário do ticket — o ` era capturado pelo atalho global do terminal, que rodava acima de todo o roteamento de estado e acima da supressão do compositor. O caractere nunca chegava, um terminal tmux abria por cima do seu trabalho e a frase era truncada em silêncio naquele ponto. Agora o atalho é um acorde de teclas, e o acento grave é só mais um caractere (#5255). (Nota de língua: aqui "acento grave" é o caractere `, não a crase — a fusão de preposição e artigo que produz "à".)
  • Uma resposta da ACE costumava apagar, em silêncio, qualquer linha que contivesse a palavra "token". O classificador que reconhece a barra de dicas do Claude Code guardava tokens? sem âncora e sem diferenciar maiúsculas, então casava com a substring em qualquer lugar — e, como um parágrafo markdown é uma linha só, uma resposta inteira que começava nomeando SUPABASE_ACCESS_TOKEN era descartada como cromo de tela. A palavra que o classificador escolheu é justamente a palavra que toda resposta sobre credencial contém. Agora esses fragmentos estão ancorados, e a segunda metade da correção é a que a ACE não conseguia fazer sozinha: uma resposta cuja seção final renderiza vazia diz isso, em vez de deixar um título sobre o nada (#5815).
  • A janela da ACE costumava abrir onde o tmux decidisse. O spawn passava um alvo de sessão e nenhum índice, então a posição era qualquer espaço que estivesse livre, e sair era o único jeito de voltar ao cockpit. Agora a janela é criada num índice reservado; quando esse índice já está ocupado, o ocupante não é morto nem renumerado — a criação recusa de forma limpa, a janela abre na próxima posição livre, e tanto a dica na borda do painel quanto uma linha de status dizem qual é essa posição, lida de volta do tmux em vez de presumida (#5865).
  • O flowforge doctor costumava chamar os seus próprios agentes de defeito de instalação. O checkAgentCount contava todo arquivo .md em ~/.claude/agents, então uma instalação saudável mais um agente escrito por você reportava agents: FAIL — found 42 agents, expected exactly 41 e aconselhava uma reinstalação que jamais faria a checagem passar, porque o caminho de instalação corretamente se recusa a tocar num arquivo que não é dele. Agora ele conta apenas fft-*.md — que é o que o próprio comentário da função, a própria descrição da checagem e o limite de propriedade do ADR-0026 sempre disseram que ele contava. Seu primeiro ato de personalização não parece mais um defeito nosso (#5877).
  • Seus commits costumavam carregar um trailer que o seu próprio wall recusava. O Claude Code adiciona uma linha Co-Authored-By por padrão; a FlowForge recusava isso no wall e removia depois, mas nunca desligava a coisa que a escreve. A instalação agora define includeCoAuthoredBy: false nas suas configurações globais do Claude Code, então o commit já nasce certo (#5943, #3057).
  • O modelo da ACE agora é uma escolha em Configurações. Ele deixa de ser uma constante de compilação e vira uma chave persistida [display] ace_model — Opus, Fable ou Latest. O Latest resolve via --model best, o alias do próprio Claude Code ciente da conta, então ele nunca resolve para um modelo que a sua conta não pode rodar, e uma família de modelos que ainda não existe não precisa de uma versão nova do FlowForge para chegar até você. A troca vale para a sessão que você já tem aberta, a partir da próxima resposta da ACE (#5870).

Um passo de configuração

Quatro coisas entregam seu código nesta versão e entram no ar assim que um passo de configuração termina na sua conta. O consentimento de marketing (#5792) agora é pedido em vez de exigido no cadastro, e uma recusa é registrada como um não positivo em vez de silêncio — mas até o armazenamento por trás disso ser ligado, nada é registrado, e uma resposta não registrada significa nenhum marketing, que é a direção segura das duas. A nova camada de assinatura (#5796) dá aos admins verbos de status, cancelamento e retomada que de fato chegam ao Stripe, e o revoke recusa enquanto existe uma assinatura ativa em vez de deixar um cliente pagante na mão — até os verbos serem configurados para uma conta, eles respondem not configured e o revoke continua recusando, então o problema que isso fecha continua fechado de qualquer forma. As escritas de vínculo com a empresa (#5805) tiram um script SQL de 16.941 bytes que costumava ser rodado à mão e colocam isso dentro do próprio produto, provado linha a linha idêntico ao script que ele aposenta, e passam a valer assim que as novas funções de dado forem instaladas para um workspace. E as novas vozes em inglês (#5724) buscam do HuggingFace por enquanto, e vão trocar para o nosso próprio espelho no CDN assim que esse job rodar.

Ainda não

A página depois do checkout: o cartão What happens next no passo 1, um comando de instalação, sem e-mail prometido

O plano de equipe (team tier) não está pronto. A metade do banco de dados do defeito de atribuição de equipe é entregue aqui — cadastrar-se cria uma organização pessoal sua — mas a metade que você consegue ver precisa de um passo de produção único e uma mudança no console que não estão nesta versão, então um dono escolhendo a própria empresa ainda pode não ver todos os membros (#5827, #5833). A página pós-checkout não promete mais um e-mail que não consegue enviar: nenhum endpoint de webhook de pagamento está registrado na conta ao vivo, então nada que roda depois de uma compra — incluindo um futuro remetente — é acionado ainda, e a promessa fica fora da página até uma entrega real ser observada (#5793). Um host Linux com ALSA puro e sem servidor de som não tem som de rádio, e a tela diz que esse é o motivo (#6064). E a ACE falando com os níveis do espectro enquanto conversa espera o corte do sidecar voice-toolchain-v3 (#5725).

Agentes

O elenco cresceu de 41 para 44 especialistas — uma organização inteira de medição, uma cabeça e duas pontas (#5924, #5926):

  • Novo fft-analytics-architect — a cabeça da organização de análise de dados. Dono de como um número é definido: população, junção, janela, denominador e o limiar em que um portão dispara, nomeados em vez de subentendidos. Emite o MEASUREMENT BRIEF que as pontas executam; nunca calcula um número de produção por conta própria.
  • Novo fft-data-analyst — a ponta de execução. Roda o brief sobre linhas reais, calcula coortes, tendências e deltas exatamente como pedido, informa o desconhecido como desconhecido e devolve um relatório de evidências que um estranho consegue rederivar.
  • Novo fft-dataviz-designer — a ponta de apresentação. Decide qual gráfico conta qual verdade, sustenta o piso de acessibilidade (a cor nunca é o único canal) e emite o CHART SPEC que a organização de design estiliza e os construtores renderizam.

Instalados pelo flowforge update em ~/.claude/agents/ junto com os outros 41; o elenco completo está em flowforgesoft.com/agents. Adicionado a esta página depois do envio de 2026-09-13 (#6201) — a partir da v1.2.23, uma release que muda o elenco não pode ser cortada sem esta seção.

Atualizar

Os dois caminhos escrevem o mesmo binário de release em /usr/local/bin e ~/.flowforge/bin juntos — isso é uma versão, nos dois lugares, sempre.

curl -fsSL https://get.flowforgesoft.com/install.sh | sh   # instalação nova
flowforge update                                            # instalação existente

Não flowforge version update — esse comando imprime a versão instalada e sai, sem atualizar nada.


Os números nesta página foram derivados na tag v1.2.22 (dba4a1754, tag criada em 2026-09-13T01:31:23-04:00) a partir de git log v1.2.21..v1.2.22 e dos milestones do GitHub em 2026-09-13 (#6177; a contagem por dia usa a própria janela de período do cockpit em UTC−4 — NUMBERS.md §8; leituras anteriores: #6144 em f54b4dce2, #6042 em 9edf91757).

v1.2.22 — 181 PRs, 347k lines, made with FlowForge