Conceitos centrais¶
O flower tem um vocabulário próprio: execução, etapa, session, coordenador, executor, clarificação prévia, guardião de objetivo, continuidade, handoff. Esta página explica todos eles de uma vez; depois de lê-la, você não precisa mais adivinhar nada nas outras páginas. Dá para ler em cinco minutos.
Aqui só há conceitos, sem assinaturas de API — para assinaturas vá para a API Python, para definições de uma linha e o pareamento chinês-inglês vá para o glossário, para flags de linha de comando vá para a referência de linha de comando.
Qual é o formato de uma execução¶
Três níveis, do maior para o menor:
| Termo | O que é | Onde fica registrado |
|---|---|---|
| execução run | O processo completo de um Runtime, do início ao fim. No caminho padrão, uma execução é uma vez que você digita flower | runs/manifest.json |
| etapa step | Uma unidade executável dentro da execução: recebe um dicionário de contexto, roda um agent, escreve o resultado de volta no dicionário. Cada linha de == na tela é uma fronteira de etapa | idem, uma linha por etapa |
| session session | Um contexto do lado do modelo. Tem seu próprio session_id, pode sofrer resume e pode sofrer fork | runs/sessions.db |
O aninhamento entre eles não é um-para-um:
execução ── esta vez que você digitou flower
├── etapa confirmar requisitos ── session A
├── etapa definir objetivo ────── session B
└── etapa executar ───────────── session C ──[contexto quase cheio]──> session C'
└── executar·veredito#1 ─── session D
- Uma etapa pode queimar várias sessions. Quando o contexto está quase cheio, ela não faz compact; escreve um documento de handoff e abre uma session nova para assumir — isso é o handoff, e acontece dentro da mesma execução.
- Uma execução nova pode retomar uma session antiga. Digitando
flowerde novo no mesmo diretório, cada etapa reconecta à session da vez anterior — isso é a continuidade, e acontece entre processos. Ela se apoia emruns/lineage.jsonpara lembrar "qual nome de etapa corresponde a qualsession_id". - A rodada de veredito é sempre uma session nova. Ela não faz continuidade e não entra na linhagem — quem julga "está pronto ou não" não pode ser o executor que acabou de trabalhar.
Um conjunto de etapas encadeadas em ordem se chama workflow. Rodando flower puro, usa-se o workflow de três etapas que vem com o framework: confirmar requisitos → definir objetivo → executar.
Divisão de trabalho: o coordenador não põe a mão na massa¶
É sobre isto que todo o framework se apoia.
O coordenador é o agent que está na thread principal. Ele decompõe a tarefa, despacha trabalho, lê relatórios, toma decisões — mas não recebe Write nem Edit, e o Bash dele só dá para rodar comandos efêmeros como ls e git status, para dar uma olhada (fiscalizado por hook, não por restrição de prompt; e esse tipo de resultado não entra no registro persistido da session). A lista de ferramentas dele é Agent, TodoWrite, Read mais aquele Bash restrito.
Quem realmente trabalha é o executor — um subagent despachado pela ferramenta Agent.
Por que essa divisão. O subagent tem a sua própria transcript: quantos arquivos leu, quantas vezes rodou os testes, quantas voltas deu tentando e errando, tudo fica registrado ali; a thread principal só recebe o relatório final. E a thread principal é o único contexto que atravessa a execução inteira, então é ela que mais precisa ser economizada.
Medido na prática (HT001, uma execução de 10.4 horas):
| thread principal | subagent | proporção que afundou | |
|---|---|---|---|
| Turnos de modelo | 70 | 3.0K | 97.7 % |
| Caracteres de texto | 200.1K | 3.6M | 94.8 % |
| Chamadas de ferramenta | 32 | 1,893 | —— |
Em média, a cada despacho, 82 chamadas de ferramenta a thread principal simplesmente não vê. Essa é a primeira camada de economia de contexto, e a que economiza mais; a argumentação completa está em economia de contexto.
Dois pontos que costumam ser mal entendidos:
- O coordenador não é um agent mais inteligente. Por padrão ele usa o mesmo nível de modelo que o executor; o que se economiza é contexto, não modelo.
- O formato da resposta é restrito. A resposta do executor tem exatamente quatro seções — conclusão / evidências / entregas / não verificado, no máximo 30 linhas, e é proibido colar conteúdo de arquivo, saída de comando, log ou diff bruto. Coisas longas vão para
artifacts/, na workbench; na resposta só entra o caminho.
O flower tem cinco papéis ao todo, todos feitos da mesma forma: um trecho de texto de regras injetado + um conjunto de ferramentas + um conjunto de hooks.
| Papel | O que faz | O que tem na mão |
|---|---|---|
| coordenador coordinator | decompõe, despacha, decide | Agent TodoWrite Read + Bash restrito |
| executor worker | escreve código, roda testes, pesquisa | Read Write Edit Bash Glob Grep WebFetch WebSearch |
| clarificador clarify | antes de agir, só pergunta, até ficar claro | ferramentas de pergunta + ferramentas somente-leitura, nenhuma ferramenta de escrita |
| juiz judge | define o objetivo, ou julga se "esta rodada está pronta" | ferramentas de pergunta + Read Glob Grep (para ele rodar comandos, é preciso habilitar explicitamente) |
| oráculo oracle | responde "onde estamos agora" no meio da execução | Read Glob Grep. O que ele diz não entra no contexto daquela execução |
Os parâmetros e valores padrão das funções fábrica estão na API Python.
O longo alcance quebra em quatro lugares¶
Uma execução de longo alcance atravessa horas ou dias, atravessa várias sessions, atravessa reinícios de processo. Ela se desmonta de umas poucas maneiras, e cada uma tem um mecanismo correspondente:
| O que você teme | Mecanismo | O que ele faz | Detalhes |
|---|---|---|---|
| O que sai não é o que você queria | clarificação prévia | Antes de agir, esclarece o requisito e congela num brief; cada etapa seguinte lê esse brief, sem ficar adivinhando de novo | clarificação prévia |
| Ele diz que terminou, mas não terminou | guardião de objetivo | No fim de cada rodada, um juiz que não participou do trabalho julga de forma independente; se o objetivo não foi alcançado, devolve para continuar | guardião de objetivo |
| Rodou por horas, caiu, e volta tudo do zero | continuidade | Rodar de novo no mesmo diretório retoma automaticamente o progresso anterior — vale também se o processo foi morto ou a máquina reiniciou | continuidade |
| O contexto encheu e virou um resumo comprimido | handoff | Quando está quase cheio, a session atual escreve um documento de handoff legível e editável por pessoas, e uma session nova assume | handoff |
Duas coisas merecem ser lembradas à parte:
O veredito tem três conclusões, não duas. Alcançado, não alcançado, este ambiente não consegue verificar. As duas últimas são conclusões diferentes — "aqui não dá para verificar" nunca é aprovado; para tudo e pergunta para a pessoa. Além disso, o juiz julga o artefato produzido, não o código-fonte: em HT002 isso deu errado uma vez, o juiz olhou apenas o ramo macOS do Makefile e aprovou, quando o que foi entregue era um ELF Linux.
Handoff não é compact. O compact é o modelo, por conta própria e às escuras, resumindo a conversa anterior num parágrafo: ilegível, não editável, e você não sabe o que se perdeu. O documento de handoff é estruturado e fica em disco; você pode abrir, mudar uma linha e mandar continuar. O flower desliga por padrão o auto-compact nativo e coloca o handoff no lugar.
Ainda há duas camadas que não estão nessa tabela, mas rodam em toda execução:
- spill — resultado de ferramenta acima de 4000 caracteres é escrito em
.flower/spill/, e no contexto fica só uma linha com o caminho. Corta na hora, não espera encher para depois comprimir. - workbench — os três diretórios
scripts/,artifacts/enotes/dentro de.flower/, mais um índiceINDEX.mdinjetado no system prompt, de modo que o agent sabe a cada rodada o que tem na mão. Naquela execução do HT001 acumularam-se 61 scripts, executados 331 vezes, dos quais 92 % foram executados mais de uma vez.
O que o flower não faz¶
Um: ele não fornece workflows prontos. O framework cuida só dos mecanismos: como uma etapa roda, como economizar contexto, como retomar depois de cair a rede, como não haver conflito quando várias execuções mexem no mesmo repositório em paralelo, como parar quando é preciso perguntar para a pessoa. O workflow é você que escreve. As três etapas do flower puro vêm de flower/workflow/starter.py, genéricas a ponto de não conterem nenhuma suposição de domínio — servem para você começar, não são o limite da capacidade do framework. Para escrever o seu, veja projetar workflows.
Dois: ele não herda a configuração da máquina hospedeira. O flower roda com setting_sources=[]: não lê o ~/.claude/ da máquina, nem o .claude/ do projeto. Isso é ser portável — em outra máquina o comportamento é o mesmo. A capacidade de domínio vem de plugins que viajam junto com o repositório, não do que por acaso está instalado nesta máquina.
Três: as credenciais precisam ser trazidas por você. Esse é o preço do item dois. O flower busca credenciais numa ordem fixa (variáveis de ambiente do processo → $FLOWER_ENV → .env do diretório atual → ~/.config/flower/.env → .env na raiz do repositório de código), e por último vai pegar emprestadas, do bloco env do ~/.claude/settings.json, aquelas 9 chaves de credencial como fallback — empresta só a informação de "onde encontrar o token"; nada mais dentro do settings.json afeta o comportamento do agent. A ordem completa e a semântica de cada variável estão na referência de configuração.
Quatro: ele não substitui o system prompt. As instruções de domínio são anexadas depois do system prompt nativo do Claude Code, não o substituem. Por isso a especialização não custa a capacidade geral.
Chegando até aqui, você já deve conseguir ler todas aquelas saídas do início rápido. Para saber como ajustar cada um desses mecanismos e quando não usá-los, comece por economia de contexto; se você só quer copiar comandos, vá para a referência de linha de comando.