Você troca de modelo com /model, muda de branch, abre outra pasta, e depois de meia hora não lembra mais em que modelo está nem quanto do contexto já foi usado. A status line resolve isso: uma linha fixa embaixo do prompt da Verboo Code que mostra o que você quiser, atualizada a cada resposta do agente. O comando /statusline monta essa linha por você.
O que é a status line da Verboo Code?
É uma linha de texto embaixo da caixa de prompt, gerada por um comando de shell seu. A Verboo Code roda esse comando, manda para ele um JSON com o estado da sessão pela entrada padrão e mostra o que o comando imprimir.
No código-fonte, ela só aparece quando existe a chave statusLine no settings. Sem essa chave, não tem linha nenhuma. O texto é exibido com cor atenuada e aceita códigos de cor ANSI, então dá para colorir com printf.
Como configurar a status line com /statusline?
Digite /statusline na sessão. Sem argumento, ele tenta copiar o prompt do seu terminal. Com argumento, ele faz o que você pedir.
/statusline
Sem argumento, o pedido padrão é Configure my statusLine from my shell PS1 configuration. Um subagente chamado statusline-setup, que só tem as ferramentas Read e Edit, procura a variável PS1 nesta ordem: ~/.zshrc, ~/.bashrc, ~/.bash_profile e ~/.profile. Ele converte os códigos do PS1 em comandos (\u vira $(whoami), \w vira $(pwd), \W vira $(basename "$(pwd)")) e tira o $ ou > do final.
Se você não tem PS1 customizado, ou quer outra coisa, descreva:
/statusline mostre o modelo, o nome da pasta, a branch do git e a porcentagem de contexto usada
O subagente grava o resultado no seu settings.json, preservando o resto do arquivo. Se o comando ficar longo, ele salva um script separado e aponta o settings para ele. Se a CLI pedir permissão para editar o arquivo, aprove. Para ajustes depois, é só rodar /statusline de novo com o novo pedido.
Armadilha: o
/statuslineé desativado em modo não interativo. Em script ou CI, configure na mão, como na seção abaixo.
Como configurar a status line na mão?
Crie um script, torne executável e aponte a chave statusLine para ele. São três passos.
1. O script. Salve em ~/.verboo/statusline.sh. Ele usa jq para ler o JSON:
#!/usr/bin/env bash
input=$(cat)
model=$(echo "$input" | jq -r '.model.display_name')
dir=$(echo "$input" | jq -r '.workspace.current_dir')
used=$(echo "$input" | jq -r '.context_window.used_percentage // empty')
branch=$(git -C "$dir" --no-optional-locks branch --show-current 2>/dev/null)
out="$model · $(basename "$dir")"
[ -n "$branch" ] && out="$out · $branch"
[ -n "$used" ] && out="$out · ctx $(printf '%.0f' "$used")%"
printf '%s\n' "$out"
O --no-optional-locks no git é recomendação do próprio código: a linha roda a cada resposta, e sem essa flag o git pode disputar o lock do repositório com o agente.
2. Permissão de execução:
chmod +x ~/.verboo/statusline.sh
3. O settings. Em ~/.verboo/settings.json (ou na pasta definida em VERBOO_CONFIG_DIR, se você usa essa variável):
{
"statusLine": {
"type": "command",
"command": "~/.verboo/statusline.sh",
"padding": 0
}
}
O type só aceita "command". O padding é opcional e define o espaço lateral da linha. Para valer só num projeto, use .verboo/settings.json na raiz do repositório. Não precisa reiniciar: quando o comando muda no settings, a linha é recalculada na hora.
Como testar o script antes de usar?
Mande um JSON falso pela entrada padrão. Se imprimir a linha, está pronto.
echo '{"model":{"display_name":"deepseek-v4-pro"},"workspace":{"current_dir":"'"$PWD"'"},"context_window":{"used_percentage":42.7}}' | ~/.verboo/statusline.sh
Dentro de um repositório git na branch main, a saída fica assim:
deepseek-v4-pro · meu-projeto · main · ctx 43%
Antes da primeira resposta da sessão, used_percentage vem null. O // empty no jq e o teste [ -n "$used" ] fazem o trecho de contexto simplesmente sumir nesse caso, em vez de mostrar ctx null%.
Quais campos o JSON da status line traz?
Os principais, conforme o tipo montado em src/components/StatusLine.tsx:
| Campo | O que é | Quando vem |
|---|---|---|
model.display_name e model.id | Modelo que está respondendo agora | Sempre. Muda quando você usa /model |
workspace.current_dir | Pasta atual | Sempre |
workspace.project_dir | Pasta onde a sessão começou | Sempre |
workspace.added_dirs | Pastas liberadas com /add-dir | Sempre (lista, pode ser vazia) |
context_window.used_percentage | Porcentagem do contexto usada, de 0 a 100 | null antes da primeira resposta |
context_window.remaining_percentage | Porcentagem do contexto livre | null antes da primeira resposta |
context_window.context_window_size | Tamanho da janela do modelo atual, em tokens | Sempre |
session_name | Nome dado à sessão com /rename | Só se a sessão tiver nome |
output_style.name | Estilo de saída ativo | Sempre (default se nenhum) |
vim.mode | INSERT ou NORMAL | Só com modo vim ligado |
worktree.name e worktree.branch | Worktree e branch da sessão | Só em sessão com --worktree |
version | Versão da Verboo Code | Sempre |
Campo opcional que não vem é campo ausente no JSON, então use sempre // empty no jq para ele não virar o texto null na tela.
Quando a status line atualiza?
Quando chega resposta nova do agente, quando você troca o modo de permissão, o modo vim ou o modelo. Não é um relógio: se nada disso muda, o comando não roda de novo.
O código espera 300 ms depois da última mudança antes de rodar o comando, e cancela uma execução em andamento quando outra começa. Na prática: um script lento não trava a interface, mas uma linha com hora (date +%H:%M) só mostra a hora da última atualização, não a hora atual.
Por que a status line não aparece?
Quase sempre é uma destas seis causas. Erros do script são ignorados em silêncio, então a linha só some, sem mensagem.
| Sintoma | Causa no código | O que fazer |
|---|---|---|
Aviso statusline skipped · restart to fix | A pasta ainda não foi marcada como confiável. Nenhum comando de usuário roda antes disso | Aceite o diálogo de confiança da pasta e reinicie a sessão |
| Linha vazia, script parece certo | Script saiu com código diferente de 0. Só a saída com exit 0 é exibida | Rode o teste com JSON falso e confira echo $? |
| Linha vazia, exit 0 | Nada foi impresso no stdout. Linhas em branco são descartadas | Imprima com printf ou echo, não em stderr |
jq: command not found no teste | Sem jq instalado o script falha | brew install jq ou sudo apt install jq |
Permission denied no teste | Script sem permissão de execução | chmod +x ~/.verboo/statusline.sh |
| Nada aparece em nenhuma pasta | "disableAllHooks": true no settings desliga hooks e status line juntos | Remova a chave ou mude para false |
O comando roda em bash. No Windows, ele passa pelo Git Bash, então escreva o script em sintaxe bash mesmo lá.
Dá para colorir ou usar mais de uma linha?
Dá. Códigos ANSI passam, desde que você use printf:
printf '\033[35m%s\033[0m · %s\n' "$model" "$(basename "$dir")"
Para várias linhas, imprima mais de uma. A Verboo Code mantém todas e só descarta as vazias. Lembre que a linha aparece atenuada, então cores muito escuras ficam difíceis de ler.
Com a porcentagem de contexto na tela, você sabe a hora de rodar /compact antes de a sessão ficar lenta. Na Verboo Code o token é ilimitado, então esse é o único número que você precisa acompanhar: crie a conta em verboo.ai, abra a CLI e rode /statusline.



