Todos os projetos

Atta Star desktop

Onde desenvolvo e giro os projetos: uma só fila de tarefas para todos, sincronizada nos dois sentidos com as issues do GitHub. Uma tarefa abre uma sessão de programação; integrar o seu pull request fecha a issue.

Função
Único programador e único utilizador
Ano
2026
Resultado
Uma só fila para o trabalho seguinte de cada projeto, alinhada com o GitHub. Uma tarefa passa da fila para uma sessão de programação e daí para um pull request integrado, sem ser copiada para lado nenhum.
Feito com
Electron, TypeScript, Vue 3, Vite, Vitest, Playwright
Atta Star desktop, o ecrã inicial: uma só fila de tarefas de projetos fictícios, com a tarefa escolhida pronta a começar no VS Code.
Captura com dados fictícios.

Porque o fiz

Trabalho em vários projetos ao mesmo tempo, e cada um tem as suas próprias issues no GitHub. Para ver o que vinha a seguir, tinha de os percorrer um a um, e para voltar a encontrar uma sessão de programação tinha de me lembrar de onde a tinha deixado.

O que faz

  1. Uma só fila

    O ecrã Home junta as próximas tarefas de todos os projetos numa só fila ordenada, lida de um pequeno ficheiro de tarefas que cada projeto mantém. Uma tarefa tem um tamanho e pode ser marcada como minha (um trabalho para mim, não código), como "decidir primeiro" ou como bug, e pode estar à espera de outras pessoas. As vistas são Running (em curso), Up next (a seguir), Waiting on you (à sua espera), Quick wins (rápidas), Postponed (adiadas) e Done this week (feitas esta semana). Subir uma tarefa puxa consigo os seus pré-requisitos; descê-la empurra para trás o que depende dela. Uma tarefa pode ser adiada para amanhã, para segunda-feira, para uma data ou para um dia qualquer.

    Home, Up next: as três próximas tarefas de projetos fictícios, o que está à minha espera, as vitórias rápidas e a tarefa escolhida com o prompt que preenche, nunca enviado.
  2. Da tarefa ao pull request

    O botão Start abre o projeto no VS Code ou no T3 Code com uma sessão de programação e o seu prompt já escrito ("Próximo passo neste projeto: ler primeiro o plano"). Sou eu que carrego em Enter; nada é enviado por mim. A aplicação volta a encontrar a sessão pela tarefa na primeira mensagem ou pelo id da tarefa no nome do branch, mostra-a como Running enquanto está ativa e leva-me de volta a ela. O pull request fecha a issue do GitHub, e a sincronização seguinte risca a tarefa.

    Ilustração: tarefa, sessão, a tecla Enter carregada à mão, revisão, pull request, fechada.
  3. Sincronização com o GitHub

    Cada projeto escolhe se entra. O primeiro envio lista exatamente o que vai e o que fica, e nada sai do computador até eu carregar em Send. Só vão títulos, ids, etiquetas e ligações; os pré-requisitos passam a ligações "blocked by" e as partes passam a sub-issues. Uma tarefa que mencione um cliente, ou qualquer coisa com a forma de um NIF ou de um IBAN, fica local, e o Home diz porquê. A partir daí, a sincronização é um merge a três vias: quando os dois lados mudaram, ganha o GitHub e o Home mostra o que foi substituído.

    O primeiro envio para o GitHub de um projeto: as seis tarefas que vão, com as etiquetas, e nada é enviado antes de carregar no botão. Projeto fictício.
  4. O quadro Projects

    Todos os projetos numa só tabela: último commit, branch e ficheiros sem commit, branches por integrar, pull requests abertos, o estado da CI no main, se a sua cópia do Atta se afastou da partilhada, e a próxima tarefa.

    O quadro de projetos: cada projeto fictício com o branch, os ficheiros por gravar, os pull requests abertos, a CI do main e a próxima tarefa.
  5. Sessions

    A última semana de sessões do Claude Code e do Codex, agrupadas por projeto, com o número de passos, o que está a correr ou falhou, e o último resultado de testes, build ou push. Uma sessão abre como a sua conversa, com os subagentes encaixados debaixo do passo respetivo, filtrada para o trabalho ou só para os testes, builds e pushes, e com o fim do log de um comando em segundo plano a atualizar em direto.

    Uma sessão de programação aberta em Sessions: os passos e uma execução de testes falhada com o resultado aberto. Projeto fictício.
  6. Reviews

    Os registos do revisor independente, agrupados em Needs you (à sua espera), With the session (com a sessão), Ready (prontas) e Earlier (anteriores). Cada ronda lista as suas conclusões por gravidade, com ficheiro e linha, a prova e o que a sessão respondeu. Não há nenhum botão para dispensar ou repetir uma revisão, e é de propósito.

    Reviews: uma ronda bloqueada do revisor independente, com as conclusões por gravidade, ficheiro e linha. Projeto fictício.
  7. CI & releases

    As execuções do GitHub Actions de todos os repositórios para onde fiz push na última semana, até ao log de um job, com os tokens escondidos. Compara a versão mais recente com a build que o servidor indica, o que responde a "a aplicação em produção está na build mais recente?". Uma notificação do Windows avisa quando uma execução falha e quando sai uma versão.

    CI & releases: o servidor está na última versão, e uma execução falhada aberta nos seus jobs e passos. Repositórios fictícios.
  8. Star

    A aplicação web num separador próprio e fechado, com o início de sessão feito pela mesma porta de entrada.

    Ilustração: o separador Star da aplicação de secretária a mostrar a aplicação web numa janela trancada, com uma ligação externa a abrir num navegador à parte.

Como funciona

Lê; quase não escreve
O processo principal faz toda a leitura: o ficheiro de tarefas e o estado do git de cada projeto, os registos do revisor, as transcrições locais das sessões e a base de dados do T3 Code, aberta só de leitura. As únicas escritas num repositório são riscar as minhas próprias tarefas e acrescentar novas. Antes de ler o que quer que seja, é obrigatória uma lista dos projetos que nunca pode ler, e os projetos de clientes nunca são lidos.
Uma janela fechada
O painel não tem qualquer acesso à rede, com isolamento de contexto e uma política de segurança de conteúdo estrita. Um único preload com canais fixos é a única ponte; cada handler verifica que a chamada veio do painel e só age sobre ids, caminhos ou ligações que o próprio processo principal mostrou. O separador Star não tem Node e tem três bloqueios separados que mantêm a navegação dentro da aplicação e do seu início de sessão. Os fuses do Electron desligam a execução como Node e o inspetor.
Sem tokens
A aplicação não guarda tokens. O GitHub passa pela sessão que a linha de comandos gh já tem iniciada, e o início de sessão no Star é um cookie numa partição cifrada. Tudo o que pareça um segredo é mascarado antes de chegar à página.

Como foi feito e testado

Testes
Cerca de 1200 testes unitários e 141 testes end-to-end que conduzem a aplicação real com Playwright para Electron, contra servidores locais falsos, repositórios git temporários, transcrições inventadas e respostas do GitHub preparadas de antemão.
Versões
Um instalador do Windows por utilizador, construído e instalado à mão. Não há atualização automática, de propósito.

Como o Atta ajudou

  • O Atta de cada projeto guarda os próximos passos numa lista curta de tarefas, e o ecrã inicial da aplicação junta essas listas numa só fila.
  • O Atta escreve as tarefas mas nunca as reordena: as prioridades são minhas, definidas na aplicação.
  • Os seus pull requests passam pelo atta-critic antes de poderem ser integrados, como os de qualquer outro projeto.