AI CLI/TUI Status and Recap Hooks
ai-ui specs/ai-ui/agent-cli-status-and-recap.kmd
Standardizes terminal-based status lines (ANSI LEDs), turn-closing indicators, and mechanical recap logging for all CLI/TUI AI agent tools across the Koder Stack.
Quando esta spec se aplica
Triggers primários
- Configure CLI statusline and recap hooks
Todos os triggers
- Format turn-closing recap and next activity
- Build terminal statusline for agent CLI
Corpo da especificação
Spec — AI CLI/TUI Status and Recap Hooks
1. Princípios
- Transparência de Estado: O operador deve saber imediatamente se o agente está trabalhando, esperando um processo em segundo plano ou aguardando comandos.
- Rastreabilidade (Handoff): Cada encerramento de turno de IA deve deixar um rastro mecânico claro do trabalho realizado e da próxima ação recomendada.
- Independência de Provedor: A mecânica de exibição no terminal e os ganchos do ciclo de vida são agnósticos e devem se aplicar igualmente a qualquer CLI de agente (Claude Code, Antigravity CLI, etc.).
- Consumo Eficiente de Espaço: O rodapé da CLI deve se adaptar de forma compacta (2 ou 3 linhas), minimizando desperdício de tela em terminais estreitos.
2. A Convenção de Encerramento de Turno (Feito: / Próximo:)
Toda resposta do assistente de IA que devolva o controle para o operador humano (fechamento de turno) deve terminar obrigatoriamente com dois blocos destacados em negrito no corpo do chat:
Feito:— Um resumo curto das ações realizadas no turno (commits, edições, correções).Próximo:— A sugestão clara da próxima tarefa imediata a ser feita.
**Feito:**
- Implementada a spec do KVIQ em specs/ai/kviq.kmd.
- Registrado o termo em vocabulary.md.
**Próximo:**
Refatorar o resolver de rotas do gateway para suportar estratégias KVIQ.
3. O Ciclo de Vida dos Ganchos (Hooks Interface)
O motor do CLI/TUI deve interceptar as transições de estado do agente através dos seguintes ganchos de ciclo de vida (hooks):
| Gancho | Momento de Disparo | Ação do Gancho |
|---|---|---|
SessionStart | Quando o terminal do agente é iniciado. | Limpa sinalizações de travamento de estados anteriores e carrega o histórico/backlog ativo. |
UserPromptSubmit | Quando o usuário pressiona Enter para enviar um prompt. | Define o sinalizador de atividade do agente como busy (ocupado). |
Stop | Quando o turno do agente termina e o controle retorna ao usuário. | 1. Limpa o sinalizador de atividade para idle (ocioso). 2. Executa a varredura do histórico do chat para extrair a linha Próximo:.3. Grava a próxima ação no arquivo de estado da sessão. 4. Registra a entrada mecânica de histórico em handoff/recaps/. |
PreCompact | Antes do motor compactar automaticamente o contexto do chat. | Salva um snapshot de backup das variáveis de estado no diretório temporário para evitar perda de memória. |
PostToolUse | Imediatamente após a conclusão da execução de qualquer ferramenta (ex: write_to_file). | Dispara gatilhos JIT (Just-In-Time) de validação de conformidade de arquivos modificados. |
4. O Layout do Rodapé TUI/CLI (Status Line)
O rodapé do terminal deve renderizar uma área persistente (atualizada via timer de intervalo, ex: 1s) contendo 2 a 3 linhas formatadas em ANSI:
Linha 1: Contexto e Identidade
Exibe a localização do repositório/slug em foco, o usuário ativo e o consumo de créditos acumulado.
- Formato:
<repo>/<component-slug> · <user> · <usage-summary> - Exemplo:
koder/kds · rodrigo · 5h: 0.12M tkn
Linha 2: LED de Status (Semáforo de Atividade)
Exibe uma bolinha colorida sinalizando o estado atual do processo:
- 🔵 Ciano (Steady - Trabalhando): O agente está processando a resposta ou executando uma ferramenta local.
- 🟡 Amarelo (Blinking - Aguardando): O agente concluiu sua vez de fala, mas há tarefas em segundo plano (builds, testes, compilações) ainda ativas no terminal do harness. A linha 3 exibe o comando ou label da tarefa.
- 🟢 Verde (Steady - Sua Vez): O agente está ocioso e sem nenhuma tarefa pendente em segundo plano, aguardando entrada humana.
Linha 3: Mini-descrição Dinâmica
Exibida apenas quando há contexto relevante para relatar, usando o prefixo ↳ em cinza (se vazia, o rodapé recolhe para 2 linhas):
- No estado Verde: Exibe o texto extraído da linha
Próximo:para guiar o operador. - No estado Amarelo: Exibe o label do
koder-jobou o comando que está executando no background. - No estado Ciano: Exibe a última ação realizada extraída dinamicamente do tail de logs (ex:
$ go testoueditando layout.templ).
5. Histórico de Handoff (Recaps Log)
O gancho Stop deve alimentar um arquivo centralizado de auditoria em meta/context/handoff/recaps/YYYY-MM.md. Cada fechamento de turno anexa uma entrada formatada contendo:
- Timestamp (RFC3339).
- Session ID (identificador único da sessão).
- Git Branch e último commit durável na árvore.
- Worktree (lista curta de arquivos modificados).
- Next Action (o valor extraído do rótulo
Próximo:).
Referências
meta/context/CLAUDE.mdmeta/context/claude/settings.jsonmeta/docs/stack/specs/ai/agent-stream.kmd