# Robô — o trabalho que acontece sem você
> QUANDO LER: quando ela pedir algo que acontece **fora da conversa** — "todo dia de manhã…", "me avisa quando…".

Um robô é um comando agendado no **cron do seu container**. Ele roda sozinho, sem ninguém do outro lado.

## Onde ele mora

- Você mexe no container por `mcp__nix__shell`: `crontab -l` (ver), `crontab -e` (editar).
- Ponha os robôs em `/home/usuario/workspace/robos/` — pasta que sobrevive a reinício.
- O container **tem internet** (`curl`, `pip install`, API pública) — o que ele **não** alcança é o
  **banco da empresa** e o cofre. Para o Sankhya, o caminho é sempre a casa (as ferramentas), nunca
  uma senha dentro da oficina.

## Os dois telefones

| Comando | O que faz | Custo |
|---|---|---|
| `nexum avisa "texto"` | Manda um recado pra pessoa, no app dela. | grátis |
| `nexum pensa "pergunta"` | Acorda **um turno seu** (com as suas ferramentas: banco, arquivos) e devolve a resposta na saída do comando. | **gasta a cota dela** |

Duas verdades que mudam o desenho do robô:

- **Só o `pensa` alcança o Sankhya.** O cron sozinho não fala com o banco. Se a conferência puder ser feita com comando comum (ler um arquivo, comparar uma data, somar um número que você já guardou), **faça com comando comum** — é grátis e não erra.
- **`pensa` não é silencioso:** a resposta dele também cai no chat dela. Então peça **uma linha seca** (um número, uma palavra). O aviso de verdade, com conteúdo, é o `avisa`.

Parcimônia: um `pensa` por dia é aceitável; de cinco em cinco minutos é queimar a cota dela.

## A regra zero — ROBÔ NÃO ATUALIZA TELA. NENHUMA.

**Nada que aparece numa tela precisa de robô** — nem painel, nem a previsão do tempo, nem a
cotação, nem o número do dia. A tela **busca sozinha** pela tomada, toda vez que abre:
`mcp__nix__publica_dados` (com `sql:` do banco ou `url:` da internet) → `fetch('/api/meu/dados/<nome>')`.
Caderno `painel.md`, Parte 0. Para a **tela inicial**, é a faixa (`.nexum/faixa.json`).

Robô que roda algo e regrava um `.json` **acorda o seu cérebro a cada rodada**: custa **uma mensagem
dela por atualização**, demora minutos, e entre uma rodada e outra a tela mostra número velho.
*Já aconteceu duas vezes aqui: um "só uma query" virou robô + script + arquivo; e um "põe o tempo
na tela inicial" virou um cron de 20 em 20 minutos.*

Robô é para o que só ele faz: **olhar sozinho, quando não há ninguém olhando, e falar quando algo
foge do normal.** Se ninguém precisa ser avisado, não é robô — é tomada.

**E o robô não conversa.** O que ele manda cai no chat dela como recado; recado repetido vira
paisagem e, no dia do aviso que importa, ninguém lê. Silêncio é o resultado normal de quase toda
rodada.

## As sete regras

1. **Só avisa quando foge do normal.** Robô que fala todo dia vira paisagem — e no dia do aviso que importava, ninguém lê. Silêncio é o resultado esperado da maioria das rodadas.
2. **Na dúvida, fique quieto.** Aviso errado custa mais confiança do que aviso que não veio.
3. **O aviso leva o conteúdo dentro dele.** Nunca "o resultado está lá na tela/na pasta" — ninguém vai abrir. Escreva o número, a data e o que fazer, curto, do tamanho de uma notificação.
4. **Robô que se conserta sozinho não avisa.** Consulta falhou? Tente de novo, ou por outro caminho. Só chame gente quando as duas tentativas falharam.
5. **Um problema, um aviso.** Guarde num arquivo o que já avisou; não repita a mesma coisa a cada rodada. Quando resolver, apague a marca — se voltar a acontecer, aí sim avisa de novo.
6. **Robô NÃO lança no ERP.** Lançar exige que a pessoa repita o código de confirmação (`sankhya_propoe` → `sankhya_confirma`), e turno de robô não tem ninguém do outro lado. Robô lê, calcula e avisa; quem lança é ela, na conversa.
7. **Sem limbo.** Toda rodada termina dizendo o que fez: entregou, ou falhou **com motivo**. Grave uma linha com data num arquivo de registro. Erro que fica parado em silêncio é a pior falha que existe.

## Antes de pôr no cron

- **Rode o comando na mão primeiro** (`sh /home/usuario/workspace/robos/x.sh`) e veja a saída. Robô que nunca rodou na mão quebra na primeira madrugada.
- Teste **os dois caminhos**: force o limite pra ver o aviso chegar, e depois volte ao normal pra confirmar o silêncio.
- O cron não herda o seu ambiente: **caminho absoluto em tudo** (`/usr/local/bin/nexum`).
- Confira a hora do container (`date`) antes de escolher o horário.
- Diga a ela, em uma linha: o que o robô confere, a que horas, e **quando ele vai falar**. E se ela pedir pra parar de receber aquilo, **apague o robô** (`crontab -e`) — não basta calar.

## Exemplo mínimo (é assim que se faz)

Confere o volume entregue ontem, toda manhã, e **só fala se cair abaixo do piso**.

`/home/usuario/workspace/robos/volume.sh`

```sh
#!/bin/sh
PISO=200
REG=/home/usuario/workspace/robos/volume.log
AGORA=$(date '+%F %H:%M')

pega() {
  /usr/local/bin/nexum pensa \
    "Pelo Sankhya, some o volume de concreto (m3) entregue ONTEM na alianca 1.
     Responda SO o numero, sem texto, sem unidade." | tail -n1 | tr -d ' \r'
}

# regra 4: tenta duas vezes antes de reclamar com gente
NUM=$(pega)
case "$NUM" in ''|*[!0-9.]*) NUM=$(pega) ;; esac

case "$NUM" in
  ''|*[!0-9.]*)
    echo "$AGORA FALHOU: nao consegui o numero ($NUM)" >> $REG
    /usr/local/bin/nexum avisa "Robo do volume nao rodou hoje: nao consegui ler o numero no Sankhya. Tento de novo amanha."
    exit 1 ;;
esac

if [ "$(echo "$NUM < $PISO" | bc -l)" = "1" ]; then
  /usr/local/bin/nexum avisa "Volume de ontem: $NUM m3 — abaixo do piso de $PISO m3 (alianca 1). Vale olhar as usinas antes da reuniao."
  echo "$AGORA AVISOU: $NUM" >> $REG
else
  echo "$AGORA normal: $NUM" >> $REG   # dia normal: registro, e boca fechada
fi
```

No cron (`crontab -e`, dentro do container):

```
0 7 * * 1-5 /home/usuario/workspace/robos/volume.sh
```

O que esse robô respeita: fala só quando fura o piso (1); leva o número dentro do aviso (3); tenta duas vezes antes de chamar gente (4); só lê o banco (6); e toda rodada deixa registro — normal, avisou ou falhou com motivo (7).

---

## O que eu aprendi (meu caderno)

*Vazio por enquanto. Aqui vai o que EU descobrir trabalhando com esta pessoa — o limite que ela realmente quer, o horário que ela lê, o robô que virou ruído e eu apaguei. Uma linha por coisa, curta.*
