---
name: maestro-statusline
description: >
  Configura a barra de status do Maestro no terminal. Toggle on/off inteligente:
  se desligada liga com defaults, se ligada oferece desligar ou configurar.
---

> [!important] Antes de executar, verifique se o Sistema Maestro está ativo neste projeto seguindo o `core/protocolos/protocolo-ativacao.md`.

## 1. Detecção de Estado

Ao ser acionado, verificar o estado atual:

1. Ler `~/.maestro/config.md` do plugin
2. Verificar se existe a seção `## Status Line` com campo `statusline-ativo`

**Se `statusline-ativo` não existe ou é `false`:**
→ Executar o **Fluxo de Ativação** (seção 2)

**Se `statusline-ativo: true`:**
→ Perguntar: "A status line está ativa. Quer desligar ou configurar?"
- **Desligar** → Executar o **Fluxo de Desativação** (seção 3)
- **Configurar** → Executar o **Menu de Configuração** (seção 4)

---

## 2. Fluxo de Ativação

### 2.1 Ler preferências

Verificar se já existem preferências salvas em `~/.maestro/config.md` (seção `## Status Line`).

**Se existem:** usar as preferências salvas (o usuário configurou antes e desligou).

**Se não existem:** usar os defaults:

```yaml
statusline-ativo: true
statusline-itens: contexto, limite-5h, limite-7d, modelo
statusline-estilo-contexto: barra
statusline-estilo-limite-5h: numero
statusline-estilo-limite-7d: numero
statusline-estilo-modelo: texto
statusline-estilo-custo: numero
statusline-faixas-contexto: 40,60,70
```

### 2.2 Gerar o script

1. Ler o template do script em `core/statusline/maestro-statusline.sh`
2. Substituir as variáveis de configuração no topo do script com os valores das preferências:
   - `ITEMS` → valor de `statusline-itens`
   - `ESTILO_CONTEXTO` → valor de `statusline-estilo-contexto`
   - `ESTILO_LIMITE_5H` → valor de `statusline-estilo-limite-5h`
   - `ESTILO_LIMITE_7D` → valor de `statusline-estilo-limite-7d`
   - `ESTILO_MODELO` → valor de `statusline-estilo-modelo`
   - `ESTILO_CUSTO` → valor de `statusline-estilo-custo`
   - `FAIXAS_CONTEXTO` → valor de `statusline-faixas-contexto`
3. Salvar o script gerado em `~/.claude/maestro-statusline.sh`
4. Tornar executável: `chmod +x ~/.claude/maestro-statusline.sh`

### 2.3 Verificar workspace trust

O Claude Code bloqueia statusLine em projetos sem workspace trust aceito. Verificar e corrigir se necessário:

1. Obter o diretório atual (CWD) com formato Windows (ex: `C:/dev/projeto`)
2. Executar o seguinte comando Bash para verificar o trust:

```bash
python -c "
import sys
with open(r'${HOME}/.claude.json', 'rb') as f:
    content = f.read()
# Buscar o path do projeto atual no arquivo
cwd = sys.argv[1].replace('\\\\', '/')
# Verificar se hasTrustDialogAccepted aparece como false perto do path
import re
# Encontrar a entrada do projeto
pattern = cwd.replace('/', '.{0,3}').encode()
idx = content.find(cwd.encode())
if idx == -1:
    # Tentar com barras invertidas
    idx = content.find(cwd.replace('/', '\\\\\\\\').encode())
if idx == -1:
    print('PROJECT_NOT_FOUND')
else:
    # Procurar hasTrustDialogAccepted nos próximos 500 bytes
    chunk = content[idx:idx+500]
    if b'\"hasTrustDialogAccepted\": false' in chunk:
        print('TRUST_FALSE')
    elif b'\"hasTrustDialogAccepted\": true' in chunk:
        print('TRUST_OK')
    else:
        print('TRUST_UNKNOWN')
" "$(pwd)"
```

**Se `TRUST_FALSE`:** corrigir automaticamente com replace binário:

```bash
python -c "
with open(r'${HOME}/.claude.json', 'rb') as f:
    content = f.read()
content = content.replace(b'\"hasTrustDialogAccepted\": false', b'\"hasTrustDialogAccepted\": true')
with open(r'${HOME}/.claude.json', 'wb') as f:
    f.write(content)
print('Trust corrigido')
"
```

Explicar ao usuário e pedir confirmação antes de corrigir:

> "Para a barra de status funcionar, preciso ativar o **workspace trust** neste projeto.
>
> O workspace trust é uma trava de segurança do Claude Code. Quando você abre um projeto, o Claude pergunta se confia nele. Enquanto não aceitar, ele bloqueia qualquer coisa que execute código automaticamente — como a barra de status, hooks e plugins.
>
> Esse projeto está com o trust desativado, por isso a statusline não aparece. Posso ativar agora?"

**Se sim:** executar o fix binário acima e informar: "Trust ativado! Reinicie o Claude Code para que a barra de status apareça."

**Se não:** informar: "Sem problema. A barra de status só vai funcionar quando o trust estiver ativo. Se mudar de ideia, rode `/maestro-statusline` novamente."

**IMPORTANTE:** Nunca usar `json.load`/`json.dump` no `~/.claude.json` — o arquivo contém caracteres Unicode surrogates em paths do Windows que corrompem na serialização. Sempre usar leitura/escrita binária.

**Se `TRUST_OK` ou `PROJECT_NOT_FOUND`:** seguir para o próximo passo normalmente.

### 2.4 Configurar os settings

1. Ler `~/.claude/settings.json`
2. Adicionar (ou atualizar) a chave `statusLine`:

```json
{
  "statusLine": {
    "type": "command",
    "command": "~/.claude/maestro-statusline.sh"
  }
}
```

3. Salvar o arquivo preservando as demais configurações existentes

### 2.5 Salvar estado

Atualizar `~/.maestro/config.md` — setar `statusline-ativo: true` na seção `## Status Line`.
Se a seção não existe, criá-la ao final do arquivo com todos os campos de preferências.

### 2.6 Confirmar

Informar:

> "Status line ativada! Ela aparece na próxima mensagem. Para desligar ou configurar, rode `/maestro-statusline`."
>
> Se a barra mostrar "statusline skipped", rode `/maestro-statusline` novamente — o sistema verifica e corrige o workspace trust automaticamente.

---

## 3. Fluxo de Desativação

### 3.1 Remover dos settings

1. Ler `~/.claude/settings.json`
2. Remover a chave `statusLine`
3. Salvar o arquivo preservando as demais configurações existentes

### 3.2 Atualizar estado

Atualizar `~/.maestro/config.md` — setar `statusline-ativo: false`.
**Manter todas as outras preferências** (itens, estilos, faixas) — quando o usuário religar, volta com a mesma configuração.

### 3.3 Confirmar

Informar:

> "Status line desativada. Suas preferências foram mantidas — quando quiser religar, rode `/maestro-statusline`."

---

## 4. Menu de Configuração

Apresentar o estado atual:

```
Configuração da Status Line:

1. Itens visíveis: Contexto ✓, 5h ✓, 7d ✓, Modelo ✓, Custo ✗
2. Estilo por item: Contexto [barra], 5h [número], 7d [número]
3. Faixas de cor do contexto: verde até 40%, amarelo até 60%, laranja até 70%, vermelho 71%+

O que quer alterar? (número ou "pronto")
```

Ler as preferências atuais de `~/.maestro/config.md` para montar o menu.

### 4.1 Opção 1 — Itens visíveis

Mostrar os 5 itens com estado atual:

```
Quais itens mostrar na barra?
[x] Contexto
[x] Limite 5h
[x] Limite 7d
[x] Modelo
[ ] Custo

Fale quais quer ligar ou desligar.
```

Aguardar resposta. Atualizar `statusline-itens` em `~/.maestro/config.md`.

### 4.2 Opção 2 — Estilo por item

Mostrar os itens ativos com estilo atual:

```
Qual estilo para cada item?
- Contexto: [barra] ou [número]?
- Limite 5h: [barra] ou [número]?
- Limite 7d: [barra] ou [número]?
- Custo: [barra] ou [número]?

Fale qual item quer mudar e pra qual estilo.
```

Aguardar resposta. Atualizar `statusline-estilo-[item]` em `~/.maestro/config.md`.

### 4.3 Opção 3 — Faixas de cor do contexto

```
Faixas de cor do contexto (atuais):
- Verde: 0–40%
- Amarelo: 41–60%
- Laranja: 61–70%
- Vermelho: 71%+

Informe 3 números separados por vírgula (ex: 40,60,70) ou "padrão" pra resetar.
```

Aguardar resposta.
- Se "padrão" → setar `statusline-faixas-contexto: 40,60,70`
- Se 3 números → validar que são crescentes e entre 1-99 → salvar

### 4.4 Aplicar alterações

Após qualquer mudança (ou quando o usuário disser "pronto"):

1. Salvar preferências atualizadas em `~/.maestro/config.md`
2. Regenerar o script `~/.claude/maestro-statusline.sh` (mesmo fluxo da seção 2.2)
3. Informar: "Configuração atualizada! A barra já muda na próxima mensagem."

---

## 5. Tom e Estilo

- **Direto e prático** — sem jargão técnico
- **Sem persona** — é o Maestro falando
- **Frases curtas** — máximo 2-3 frases por mensagem
- **Use acentos corretos em português** — sempre
