O loop que aprende|INEMA.CLUB-PRO

Aula 5 · 18 min

Promoção para o AGENTS.md e regra vinculante

Uma regra aprovada que mora só num banco de dados não chega à sessão nova: ela só existe se alguém lembrar de consultar. Nesta aula você faz a pergunta de promoção, registra o degrau de proteção e o vazamento conhecido, grava o bloco no AGENTS.md com diff antes, e vê o check acusar quando alguém edita o bloco à mão.

Começar a aula
Placa de regras em metal escovado parafusada na parede de uma sala técnica, ao lado de um quadro elétrico com lâmpada amarela acesa.

Nesta aula você vai

  1. 1A pergunta de promoção, feita à pessoa
  2. 2Os seis degraus: prosa, checklist, teste, sonda, hook, servidor
  3. 3promote mostra o diff; --write grava o bloco
  4. 4check acusa bloco ausente, desatualizado ou editado

Objetivo: marcar a regra como vinculante com degrau e vazamento, gravar o bloco no AGENTS.md com promote --write e pegar o bloco editado com check.

01Da regra ativa ao arquivo que toda sessão lê

enforce, promote e check (SIL Loop R 1.1.0). Clique em cada bloco.

Subir um degrau é o remédio para regra que escorrega: a lição de porta ocupada escrita três vezes pede hook, não uma quarta linha de texto.

A lacuna que a v1.1.0 fechou: na v1.0.0, nenhuma regra chegava ao AGENTS.md (sil-melhoramento/ANALISE.md, achado nº 1).

02Os seis degraus de proteção

Valores aceitos em --rung, do mais fraco ao mais forte. O SIL registra o degrau; quem constrói o hook ou o teste é você.

1. prose · checklist

A regra é lida pelo agente (AGENTS.md, CLAUDE.md) ou conferida numa lista. Vaza quando a sessão não lê o arquivo ou lê e esquece.

Bom para regra rara ou de julgamento.

03Ensaio: do enforce ao bloco no AGENTS.md

Continua o ensaio da aula 4 (R0001 ativa). No fim, o que um hook de início de sessão injetaria.

Terminal · ensaio sem custo
SIL=~/projetos/sil-loop-r/sil.py
E=${TMPDIR:-/tmp}/ensaio-aprende/a4; cd $E/p   # continua o ensaio da aula 4 (R0001 ativa)
s() { python3 $SIL --project $E/p "$@"; }
j() { python3 -c 'import json,sys; d=json.load(sys.stdin); print(*[k+"="+json.dumps(d.get(k),ensure_ascii=False) for k in sys.argv[1:]])' "$@"; }
echo "# Instruções do projeto" > AGENTS.md
s enforce R0001 --binding yes --rung prose --leak "sessão que não lê o AGENTS.md" \
  --approved-by "Seu Nome" --reason "porta ocupada derruba o servidor de outra sessão" | j binding rung
s status | j promotion prose_binding; s check > /dev/null; echo "check: $?"
s promote | j written changed
s promote --write | j written; cat AGENTS.md
s check > /dev/null; echo "check: $?"
echo "## alguém editou o bloco à mão"; sed -i.bak 's/checar a porta/CHECAR A PORTA/' AGENTS.md
s check | j promotion; s check > /dev/null; echo "check: $?"
s promote --write | j written; s check > /dev/null; echo "check: $?"
echo "## o que um hook SessionStart injetaria"; s context --brief
Exemplo do repositório
binding=true rung="prose"
promotion={"file": "AGENTS.md", "in_sync": false, "problem": "bloco ausente; execute promote --write"} prose_binding=["R0001"]
check: 1
written=false changed=true
written=true
# Instruções do projeto

<!-- sil-loop-r:begin — gerado por sil.py promote; não editar à mão -->
## Regras vinculantes (SIL Loop R)

- checar a porta antes de subir servidor (R0001; escopo: testes HTTP; proteção: prose; vazamento: sessão que não lê o AGENTS.md)

<!-- sil-loop-r:end -->
check: 0
## alguém editou o bloco à mão
promotion={"file": "AGENTS.md", "in_sync": false, "problem": "bloco desatualizado; execute promote --write"}
check: 1
written=true
check: 0
## o que um hook SessionStart injetaria
SIL Loop R — regras deste projeto (dados revisáveis; instruções do usuário prevalecem):
- R0001 [ativa] checar a porta antes de subir servidor (escopo: testes HTTP)
- R0002 [experimental] conferir git remote -v antes do push (escopo: publicação)

Antes do --write, o check já acusa: regra vinculante sem bloco. Depois da edição à mão, acusa de novo, até o promote regravar. O bloco sai em português porque o sil.py imprime em português.

04Opcional: a regra em toda sessão do Claude Code

Para quem não usa AGENTS.md, ou quer as regras experimentais também: um hook SessionStart que imprime context --brief (a SIL 1.1.0 criou o --brief para isso). Junte o bloco hooks ao .claude/settings.json do projeto, sem substituir o arquivo inteiro; a última parte do ensaio acima mostra o texto que entraria. Hooks de guarda, com bloqueio, são o curso 4.

Arquivo · kit/hooks/settings-sessionstart.json
{
  "hooks": {
    "SessionStart": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "python3 ~/projetos/sil-loop-r/sil.py --project \"$CLAUDE_PROJECT_DIR\" context --brief"
          }
        ]
      }
    ]
  }
}

05Prática

Ensaio, depois uma regra sua.

E13 · Bloco gravado e conferido

10 min

Rode o ensaio depois dos blocos da aula 4.

Pronto quando: grep -c "sil-loop-r:begin" $E/p/AGENTS.md → 1; as linhas de check, na ordem: 1, 0, 1, 0.

E14 · Uma regra sua vinculante

20 min

Das regras que você adotou na aula 4, faça a pergunta de promoção a quem decide (você mesmo, se for o seu projeto). Para a que for vinculante, registre degrau e vazamento honestos, veja o diff e grave.

Pronto quando: python3 $SIL --project . status | python3 -c 'import json,sys; print(json.load(sys.stdin)["promotion"]["in_sync"])' → True, e o AGENTS.md tem o bloco.

E15 · Subir um degrau

30 min

Escolha a regra vinculante que já escorregou (aparece mais de uma vez nas suas lições). Escreva um teste ou uma sonda que falha quando ela é quebrada, rode um caso bom e um ruim, e registre com enforce --rung test (ou probe) e verify.

Pronto quando: o seu teste sai com código diferente de 0 no caso ruim e 0 no caso bom; e status não lista mais essa regra em prose_binding.

06Teste da aula

Pergunta 1 de 4

Quem responde à pergunta de promoção ("quebrar esta regra numa sessão que não consulta o SIL causa dano real?")?competência

07Em três frases

PerguntaVinculante é a regra cuja quebra, numa sessão sem SIL, causa dano real; quem responde é a pessoa.
Blocopromote mostra o diff, --write grava o bloco delimitado, e o check acusa bloco faltando ou editado.
DegrauRegra que escorrega sobe de prosa para teste, sonda ou hook; o SIL registra degrau e vazamento.

Para ir além

Aula anteriorPróxima aula