Tarefas de código
O quadro de código transforma uma tarefa escrita em código fundido com tão pouca cerimónia quanto você quiser: escreva o que precisa e depois Planear primeiro — dividi-la em fases revisíveis com um agente de planeamento interativo — ou Iniciar logo, veja o agente a trabalhar na sua própria worktree git, reveja o diff com comentários ancorados a linhas, e integre-a — o agente que escreveu a alteração funde-a (ou abre a pull request) assim que a aprovar. Cada etapa é uma coluna; cada tarefa está numa delas.
Na barra lateral, a secção Tarefas de código fica logo abaixo de Sessões, acima de Automatizações e de Máquinas virtuais. O seu cabeçalho mostra quantas tarefas estão abertas, uma insígnia laranja a contar as tarefas à espera em Revisão, uma insígnia vermelha quando um agente precisa de você, e um + para uma tarefa nova. Abaixo, uma linha resume o quadro (2 planeadas · 1 em curso · 1 a revisar), ou diz Nenhuma tarefa aberta quando o quadro está vazio. Clique no título da secção (Abrir Tarefas de código (⇧⌘T)) ou nessa linha para abrir o quadro intitulado Tarefas de código; também pode premir ⇧⌘T (Espaços de trabalho › Tarefas) ou escolher Tarefas de código na palete ⌘K.
| Coluna | O que lá está |
|---|---|
| Backlog | Tarefas que escreveu mas não iniciou. Cada uma oferece Planear primeiro e Iniciar, e pode ser atribuída a uma sessão ou a uma sala. |
| Plano | Fases que um agente planeador registou a partir de uma tarefa — numeradas, atentas às dependências, selecionáveis em grupo. |
| Em curso | Tarefas e fases em que um agente está a trabalhar ativamente, cada uma na sua própria worktree e cada uma mostrada como uma sessão na barra lateral. |
| Revisão | Trabalho terminado à sua espera: clicar numa tarefa abre a janela de revisão com o diff do ramo. Uma tarefa a ser integrada fica aqui até a alteração entrar. |
| Concluído | Cada tarefa diz como lá chegou: Fundida em ramo, PR #N aberta, Marcada como concluída por você ou Fechada sem fundir. |
Tudo nesta página funciona de forma idêntica a partir de um cliente nativo remoto — o quadro, a janela de planeamento e a janela de revisão espelham-se todos pela API de controlo.
Escrever uma tarefa
Nova tarefa no topo do quadro, o + no cabeçalho Tarefas de código da barra lateral, ou clicar numa tarefa do Backlog abre o editor:
- Um Título e uma descrição escrita em Markdown, com uma alternância Escrever / Pré-visualizar. A descrição torna-se o prompt do agente, por isso escreva-a como tal.
- Espaço de trabalho e Agente — a tarefa corre na máquina escolhida (um espaço de trabalho, no editor de definições) com um dos agentes lá disponíveis.
- Iniciar o agente em — uma pasta dentro da máquina. Quando é um repositório git por direito próprio, a tarefa corre numa worktree e num ramo novos, aí.
- Criar pasta e repositório git se for preciso — para trabalho de raiz: iniciar ou planear corre primeiro
mkdir+git init(com um commit raiz vazio) quando a pasta ainda não é o seu próprio repositório. Deixe isto desligado para uma pasta dentro de um repositório existente. - Ao aprovar — como a tarefa sai da Revisão: Predefinição do espaço de trabalho (a escolha da máquina, que por sua vez segue as Preferências — ver Geral), Fundir no ramo ou Abrir uma pull request.
Uma tarefa nova começa no espaço de trabalho e na pasta que usou da última vez.
Uma tarefa no Backlog oferece dois botões:
- Iniciar manda a tarefa para Em curso: um agente novo faz a coisa toda de forma autónoma numa worktree nova e entrega-lhe o diff em Revisão. (Não está disponível enquanto a tarefa está a ser planeada.)
- Planear primeiro abre primeiro uma sessão de planeamento.
Iniciar verifica antes de qualquer coisa mexer: a máquina é arrancada se for preciso, depois a pasta tem de existir e ser um repositório git por direito próprio (ou Criar pasta e repositório git se for preciso tem de estar ligado). Enquanto verifica, a tarefa fica na sua coluna com um indicador A iniciar…; só passa a Em curso quando o agente pode mesmo arrancar. Uma tarefa que não consegue arrancar fica onde estava e mostra o motivo a vermelho — uma pasta em falta, uma pasta que não é um repositório — para que o quadro (e GET /tasks) nunca mostre Em curso uma tarefa que não está a correr.
Cada tarefa do Backlog mostra também quem a vai buscar: Atribuir abre a escolha (um agente novo, a Central, uma sessão ou uma sala) e a tarefa passa a dizer Atribuída a nome; Remover atribuição tira-a dessa fila. Novas tarefas: não atribuídas no topo do quadro define a quem as novas tarefas são atribuídas quando as cria.
Planear
Planear primeiro lança uma sessão de planeamento visível e interativa e abre a sua janela — uma vista de conversa nativa, sem precisar de terminal. A sessão abre sobre a sua tarefa; o agente explora o repositório só em leitura, narra o que encontra, e faz perguntas quando a tarefa deixa escolhas reais em aberto.
As perguntas chegam como um cartão com separadores — um separador por pergunta, espelhando exatamente o seletor que o agente mostra na sua própria sessão. As respostas são reunidas localmente e ficam editáveis até você premir Enviar, o que manda o conjunto todo de uma vez; um clique errado nunca é definitivo. Também pode escrever respostas livres na caixa de composição no fundo da janela, ou premir Abrir terminal para ver a sessão em cru.
Quando o agente tem o que precisa, regista o plano no quadro — fases ordenadas na coluna Plano, cada uma correspondendo mais ou menos a uma pull request revisível, com dependências entre elas — e grava uma visão geral do plano. A janela mostra então O plano está pronto com o número de fases e um botão Fechar, o separador da sessão de planeamento fecha-se sozinho e a sua sessão é arquivada, e a tarefa sai do Backlog (as suas fases substituem-na; remova-as todas e ela volta).
O planeamento é vigiado: se a máquina reiniciar, se o agente for encerrado, ou se a sessão morrer antes de as fases serem registadas, o indicador da tarefa termina com um motivo concreto — clique em Planear primeiro para tentar de novo — em vez de girar para sempre.
A coluna Plano
As fases são numeradas pela ordem do plano e levam:
- Uma insígnia de dependência (um cadeado com números de fase) quando a fase precisa de fases anteriores Concluído primeiro.
- Uma insígnia em fila quando a iniciou antes de as suas dependências terminarem — arranca automaticamente no momento em que todas estiverem Concluído.
- O nome da tarefa que lhes deu origem.
Selecione várias fases com as caixas de verificação e aparece a barra de seleção: Iniciar N selecionadas inicia cada uma delas (as fases travadas por dependências ficam em fila), Limpar larga a seleção, e Remover retira a seleção toda atrás de uma confirmação. Editar uma fase mostra a sua lista Depende de — cada fase irmã com uma caixa de verificação, para que as dependências possam ser refeitas à mão.
As fases correm totalmente em autonomia — não se espera nenhuma intervenção interativa depois de iniciadas.
Em curso
Uma tarefa iniciada arranca a máquina se for preciso, cria uma worktree nova do repositório, e lança o agente com a descrição da tarefa como prompt. O agente aparece como uma sessão na barra lateral como qualquer outra, por isso pode segui-lo no chat. A tarefa mostra o estado do seu agente com as mesmas palavras que a linha da sessão na barra lateral — A trabalhar, Precisa de você a vermelho quando o agente está bloqueado numa pergunta, Pronto quando o agente espera no seu prompt sem ter entregue a tarefa, Em pausa quando a sua sessão está adormecida — e quando começou. Clicar nela (Abrir a sessão ao vivo da tarefa) põe essa sessão em palco; uma sessão que desapareceu oferece Reiniciar a sessão, e uma tarefa cujo repositório ou ramo desapareceu oferece Começar do zero (uma execução nova num ramo novo). Um agente que morre ao arrancar — um comando em falta, uma flag errada — é apanhado em segundos: a tarefa di-lo a vermelho, com o estado de saída do agente, e oferece Reiniciar a sessão. Quando uma mensagem para o agente encontra texto já na sua caixa de entrada, o Bromure não escreve por cima: a mensagem espera que a caixa fique vazia e, se isso não acontecer, a tarefa di-lo a vermelho. A insígnia Tarefas da barra lateral conta estas, para que nunca lhe escape nenhuma.
Passar o rato sobre uma tarefa Em curso mostra um botão ✓ Concluído (Marcar como concluída, depois de uma confirmação: nada é fundido e o ramo é mantido). Clique com o botão direito para Abrir sessão, Reiniciar a sessão, Mover para Revisão, Marcar como concluída, Parar e voltar ao Backlog (o agente para; a sua worktree e o seu ramo ficam no espaço de trabalho, a tarefa volta ao Backlog), Parar e descartar o ramo e Remover apenas a tarefa. Arrastar uma tarefa do Backlog ou uma fase para Em curso inicia-a. Uma tarefa entregue a uma sessão ou a uma sala oferece antes Abrir sessão e Parar e voltar ao Backlog.
Quando o agente diz que terminou, a tarefa passa a Revisão. A sua sessão fica aberta: os comentários de revisão que devolver chegam à mesma conversa, e quando aprovar a tarefa é o mesmo agente que a integra. A sessão é arquivada quando a tarefa é integrada, marcada como concluída ou descartada — ou depois de cerca de duas horas em Revisão sem acontecer nada, caso em que uma devolução ou uma integração retoma a conversa do agente num separador novo. Se em vez disso o agente falhar, a tarefa fica vermelha em vez de fingir que trabalha.
Revisão
Uma tarefa em Revisão mostra o seu ramo, os seus comentários de revisão e em que ponto está: Pronta para integrar, A integrar — agente está a fundir em ramo… (com a última linha do agente), ou Precisa de você — motivo a vermelho (duas linhas no cartão, tudo ao passar o rato) com os botões Tentar novamente e Abrir sessão. Uma tarefa que não produziu código diz Sem alterações de código — leia o relatório. Passe o rato sobre uma tarefa para ✓ Concluído; arraste-a para Concluído para a marcar como concluída. Clique nela para abrir a janela de revisão — a mesma janela usada para revisar as alterações de uma sessão, intitulada Revisão — <tarefa>, com os botões próprios da tarefa.
Por baixo do cabeçalho da janela, um resumo diz em que ponto está o ramo: O Kimi Code trabalhou em wt/fix-login em Web app · ~/app · 3 commits · 4 ficheiros (+120 −7) face a main · main avançou 2 commits desde então · checkout de main limpo · remoto: origin.
A janela mostra o diff do ramo, lido ao vivo da máquina (pelo que a máquina tem de estar a correr), com expansores por ficheiro, as contagens de linhas acrescentadas e retiradas, os commits e o estado da cópia de trabalho, e o plano que o agente registou, se houver. Um seletor no topo escolhe contra o que o diff é comparado:
| Escolha | Mostra |
|---|---|
| Desde <pai> (predefinição) | Tudo o que o ramo alterou desde que saiu do ramo-pai, com commit ou não. |
| Sem commit | Só as edições ainda sem commit, ficheiros novos incluídos. |
| Último commit | Só o último commit. |
Reveja-a como uma pull request:
- Marque ficheiros como vistos. Cada ficheiro tem uma marca Visto (Marcar como visto — dobra-se até mudar outra vez). Um ficheiro visto dobra-se, e desdobra-se sozinho se o seu diff mudar.
- Comente. Passe o rato numa linha e clique na bolha da margem (Comentar esta linha) para comentar essa linha exata, use Comentar este ficheiro num cabeçalho de ficheiro, ou escreva na caixa de composição em baixo para um comentário sobre a alteração toda. Na caixa de composição, ⏎ acrescenta o comentário, ⌥⏎ insere uma nova linha e ⇧⌘⏎ envia tudo de volta. Os comentários em rascunho podem ser retirados antes de os enviar.
- Devolva. O botão de envio diz Devolver (N). Entrega todos os comentários em rascunho ao agente numa só mensagem — formatados como Em
foo.js, linha 196: use outro método — e devolve a tarefa a Em curso para mais uma volta, na mesma conversa, worktree e ramo (⇧⌘⏎). - Integre-a. O botão principal segue a escolha Ao aprovar da tarefa: Fundir em ramo ou Abrir pull request (oferecido só quando o repositório tem um remoto). O seu menu contém o outro, Squash e fundir em ramo, Fundir noutro ramo… e Manter o ramo — marcar como concluída. Cada um abre uma confirmação que diz exatamente o que vai acontecer (ver Integração), com uma opção Manter o ramo.
- Marcar como concluída — concluída sem fundir, depois de uma confirmação de que o ramo é mantido.
- Mais — Abrir sessão, Ver transcrição e Descartar o ramo… (apaga o ramo e o seu checkout; a tarefa passa a Concluído como fechada sem fundir, com a transcrição guardada).
- Abrir terminal salta para a sessão da tarefa na máquina.
Uma tarefa que não produziu código — sem ramo, um ramo sem alterações face ao seu destino, ou uma entrega delegada sem worktree — mostra o relatório final do agente em vez do git: o seu botão principal é Marcar como concluída, ao lado de Ver transcrição e Devolver.
Uma tarefa feita por uma sessão ou uma sala que já abriu uma pull request oferece Ver pull request #N e Marcar como fundida (depois de ser fundida na forja).
Clique com o botão direito numa tarefa em Revisão para Revisar alterações, Abrir sessão, Tentar a integração de novo (quando precisa de você), Marcar como concluída, Fundir em ramo… (abre a revisão na sua confirmação de fusão), Voltar a Em curso, Descartar o ramo… e Remover apenas a tarefa. Descartar uma tarefa, ou marcá-la como concluída, diz quantos comentários de revisão que nunca chegaram ao agente vão com ela.
Clique com o botão direito numa tarefa Concluída para Ler transcrição, Abrir sessão enquanto a sua sessão ainda estiver viva, Abrir pull request quando tiver uma, e Remover tarefa. O menu de cada cartão é também o seu menu do VoiceOver (VO-Shift-M) e a sua lista de ações; o VoiceOver lê um cartão como o seu título e estado.
Integração
Aprovar uma fusão integra a alteração sem que você resolva nada à mão:
- Caminho rápido. Quando o ramo está estritamente à frente do seu destino, o seu checkout não tem nada sem commit e o checkout do destino está limpo, o próprio Bromure funde-o — um fast-forward onde o destino está em checkout, ou uma atualização direta do ramo quando não está em checkout em lado nenhum. Nunca funde num checkout que esteja noutro ramo.
- O agente integra-a. Caso contrário, é o agente que escreveu a alteração que o faz, na sua própria sessão — escrito na sua conversa ao vivo, ou nessa conversa retomada: faz commit do que faltar, faz rebase sobre o destino mais recente (resolvendo conflitos mantendo a intenção de ambos os lados), corre as verificações rápidas do projeto e corrige o que a sua alteração partiu, faz fast-forward do destino e reporta. Nunca toca em alterações sem commit no checkout do destino. Uma integração por pull request faz antes push do ramo e corre
gh pr createcom um resumo e um plano de testes. - Verificada. A tarefa só passa a Concluído quando o Bromure vê a alteração no histórico do destino. Uma integração que o agente reporta mas que o Bromure não consegue verificar (uma máquina que não consegue alcançar) é registada como reportada pelo agente, não verificada.
- Precisa de você. Se o agente reportar que está bloqueado, parar sem integrar, ou não tiver terminado ao fim de 20 minutos, a tarefa fica vermelha com o motivo; a janela de revisão oferece Abrir sessão, Tentar novamente e Cancelar integração.
Depois, o ramo e o seu checkout são removidos (a menos que os tenha mantido) e a sessão é arquivada. As tarefas entregues a uma sessão ou a uma sala integram-se da mesma forma: quem a recebeu recebe o pedido de integração na mesma delegação e reporta com deliver.
Dica: não precisa de uma tarefa para revisar o trabalho de um agente. Todas as sessões com uma pasta têm Revisar alterações no seu menu e no ⌘K, e a linha N ficheiros alterados do chat abre a mesma janela para esse turno. Ver Ramos e revisão.
Remover tarefas
Cada tarefa ganha um ✕ ao passar o rato (Remover tarefa), atrás de uma confirmação. Para uma tarefa Em curso, o diálogo oferece Parar e descartar o ramo, que desmonta tudo, ou Remover apenas a tarefa, que deixa a sessão e o checkout intactos na máquina; para uma tarefa em Revisão, oferece Descartar o ramo ou Remover apenas a tarefa. O menu de uma tarefa do Backlog tem Remover tarefa.
Armazenamento e API
As tarefas persistem num só ficheiro ao lado do armazém das máquinas, com escritas atómicas e datas ISO-8601:
~/Library/Application Support/BromureAC/tasks.json
O quadro todo é espelhado no socket de controlo da aplicação, para clientes nativos e para guiões:
| Ponto final | Para quê |
|---|---|
GET /tasks | Listar todas as tarefas. |
POST /tasks | Criar ou atualizar (upsert) um documento de tarefa. |
POST /tasks/<id>/start | Iniciá-la (worktree + agente). As verificações correm primeiro: a tarefa fica na sua coluna com startingAt definido e depois passa a inProgress — ou mantém a coluna com lastError definido quando não consegue arrancar. |
POST /tasks/<id>/plan | Lançar a sessão de planeamento. |
POST /tasks/<id>/comment | Acrescentar um comentário de revisão (text, com file e line opcionais). |
POST /tasks/<id>/send-back | Entregar os comentários não enviados e devolver a tarefa a Em curso. |
POST /tasks/<id>/land | Integrá-la: mode (merge, squash ou pr), com target e keepBranch opcionais. /merge e /open-pr são aliases. |
POST /tasks/<id>/retry-landing, /cancel-landing | Tentar de novo uma integração encravada, ou desistir dela. |
POST /tasks/<id>/mark-done | Concluída tal como está (nada fundido, ramo mantido). |
POST /tasks/<id>/mark-merged | Concluída como fundida noutro lado (uma pull request fundida na forja). |
POST /tasks/<id>/close-no-merge | Descartar: apagar o ramo e o seu checkout, Concluída como fechada sem fundir. |
POST /tasks/<id>/stop | Parar o agente e devolver a tarefa ao Backlog (worktree mantida). |
POST /tasks/<id>/to-testing, /to-in-progress | Movê-la à mão para Revisão ou Em curso. |
POST /tasks/<id>/destroy | Parar o agente, apagar a worktree e o ramo, remover a tarefa. |
DELETE /tasks/<id> | Remover apenas a tarefa. |
Por baixo do capô, os agentes de planeamento e de tarefa falam de volta com o quadro através de um servidor MCP do quadro por sessão (vsock, do lado do anfitrião): board_get_task, board_set_plan, board_create_subtasks, board_ready_for_review e board_report_landing são a forma como as fases são registadas, como uma tarefa terminada se anuncia, e como uma integração reporta merged, pr_opened ou blocked — sem sondagens, sem raspagem. As ferramentas são ligadas automaticamente para cada agente suportado: o Claude Code carrega uma configuração MCP por ramo, o Codex recebe substituições mcp_servers por invocação, e o Grok lê um .grok/settings.json com âmbito de projeto escrito no checkout da sessão (e excluído do seu diff).