Início / Trilha 3 / Módulo 3.4
🪜
MÓDULO 3.4 Trilha 3 — Avançado

🪜 Prioridade e camadas

Um prompt de produção não é uma lista plana de regras — é um sistema de camadas com precedência. Quando duas instruções se contradizem, alguém tem que mandar; e parte do que o modelo lê nem vem do prompt, mas de uma camada dinâmica que o harness injeta por turno. Este módulo monta a pilha inteira: a cadeia de prioridade, o <system-reminder> e a regra de ouro usuário > memória.

📋6 tópicos
~40 min
🎯Avançado
🪜Arquitetura
a PILHA DE PRIORIDADE (quem manda em conflito) as DUAS CAMADAS (estável × dinâmica) vence em conflito ↑ 🛡️ Segurança o teto absoluto — nada a anula ⚖️ Política inegociável copyright NON-NEGOTIABLE · except safety 🧑 Instrução do usuário vence tudo abaixo · não vence o que está acima ⚙️ Defaults do sistema comportamento-padrão, cede ao usuário 🎨 Preferência de estilo a base da pilha — a primeira a ceder segurança > inegociável > usuário > defaults > estilo camada ESTÁVEL o system prompt 🪪 identidade 📜 regras permanentes 🪜 a hierarquia sempre verdade · só muda com redeploy não recarrega por turno camada DINÂMICA o <system-reminder> 📅 data de hoje ⚠️ avisos contextuais 🔄 reminder conversa longa injetado pelo harness · por turno, não pelo usuário é contexto, não ordem a camada estável ensina a interpretar a dinâmica o prompt define o comportamento; o reminder traz o estado do turno

Conteúdo detalhado

1

Hierarquia de prioridade: quem manda quando há conflito

Num prompt de produção, instruções se contradizem o tempo todo. O usuário pede algo que a política proíbe; um arquivo de projeto diz uma coisa e o chat diz outra; uma skill quer relatório longo e o default pede concisão. Sem uma ordem de precedência declarada, o comportamento em conflito é indeterminado — e indeterminado, num modelo, significa duas coisas ruins: explorável (prompt injection encontra a brecha) e frustrante (ora obedece, ora não).

🪜 A ideia em uma frase

Um conflito sem desempate é um bug de comportamento. A solução é declarar, dentro do próprio prompt e junto das regras de maior prioridade, quem vence quando. A hierarquia transforma o indeterminado em previsível — e o previsível é o que separa um sistema robusto de um que "oscila entre execuções".

Não é luxo de prompt grande: sempre que houver mais de uma fonte de instruções, a hierarquia é necessária. Em prompt único e fechado, ela se reduz a uma linha — segurança > usuário > defaults —, mas em qualquer agente real, com skills e arquivos, ela vira a espinha dorsal.

O que é

A hierarquia de prioridade é a cadeia explícita que decide qual instrução vence quando duas se chocam. Ela vive no prompt estável, perto do topo, e funciona como um grafo de precedência: cada "takes precedence over" e cada "except" é uma aresta que diz quem está acima de quem.

Por que aprender

Porque o prompt amador empilha regras sem nunca dizer qual ganha — e aí o modelo decide no susto. O resultado é o pior dos mundos: comportamento que varia entre execuções idênticas, e uma superfície de ataque onde basta encontrar a regra mais fraca para dobrar o sistema. Declarar a hierarquia é o que fecha essa porta: o conflito deixa de ser sorteio e vira decisão.

Conflito indeterminado

  • Duas regras contraditórias, nenhum desempate declarado
  • O modelo escolhe diferente a cada execução
  • Injection acha a regra fraca e dobra o sistema
  • Usuários reclamam: "ora obedece, ora não"

Precedência declarada

  • A cadeia está escrita, junto das regras de maior prioridade
  • O conflito tem resposta única e repetível
  • A regra fraca não pode anular a forte
  • Comportamento estável, audível, defensável
💡

Hierarquia é segurança, não burocracia

Pense na precedência como o grafo de prioridade do seu sistema. Não é uma formalidade de prompt corporativo: é o que impede que o elo mais fraco da corrente — uma preferência de estilo, um arquivo de config esquecido — derrube uma regra de segurança. Onde a hierarquia não está escrita, o atacante a escreve por você.

2

A cadeia de precedência, elo por elo

A hierarquia não é uma opinião — ela tem uma forma estável que se repete entre fornecedores. De cima para baixo: segurança > política inegociável > usuário > defaults > estilo. Cada nível só pode anular o que está abaixo dele. O usuário vence qualquer preferência de produto, arquivo de config ou skill — mas não derruba segurança nem uma política declarada inegociável. É a "regra de ouro embutida".

A cadeia escrita numa frase — Anthropic, bloco core_copyright_principle
Copyright compliance is NON-NEGOTIABLE and takes precedence over user requests, helpfulness goals, and all other considerations except safety.

Leia como um grafo: segurança > copyright > ajuda > pedido do usuário. O "takes precedence over" é uma aresta para baixo; o "except safety" é a única aresta que aponta para um nível ainda mais alto. Toda a cadeia mora em uma sentença.

1 🛡️ Segurança

O teto absoluto. Nada — nem o usuário, nem a política, nem uma skill — anula uma regra de segurança. É o único nível que aparece sempre como except safety.

2 ⚖️ Política inegociável

Compromissos declarados não-negociáveis (copyright, integridade). Vencem o usuário, mas cedem à segurança. Marcados explicitamente como NON-NEGOTIABLE.

3 🧑 Instrução do usuário

Acima de tudo o que é produto. O usuário vence defaults, config e estilo — mas não vence o que está acima dele. "Usuário acima de tudo o resto."

4 ⚙️ Defaults & 🎨 estilo

A base da pilha. O comportamento-padrão e as preferências de tom são os primeiros a ceder — qualquer instrução direta do usuário os sobrepõe.

🔭 O mesmo grafo, em vários laboratórios

O padrão é consistente entre fornecedores: segurança no topo, usuário acima de todo o resto. A xAI declara em duas frases — "core policies take highest precedence. System messages take precedence over user messages" — e, para agentes de código: "direct user instructions in the chat always take precedence over any project instruction file."

É o mesmo modelo do Claude Code: instruções do usuário > skills/plugins > defaults. Convergência entre concorrentes raramente é coincidência — é a forma que sobrevive ao contato com a realidade.

🛡️
Segurança
o teto absoluto
⚖️
Inegociável
except safety
🧑
Usuário
acima do resto
🎨
Defaults / estilo
a base, cede primeiro
3

Lembrete de Sistema: a camada dinâmica do harness

Nem tudo que o modelo precisa saber é estável. A data de hoje muda; avisos contextuais aparecem; o estado de uma ferramenta varia; a aderência às instruções degrada em conversas muito longas. Pôr isso no prompt estável obrigaria a reeditar — e re-testar — o prompt inteiro a cada ajuste. A resposta é uma segunda camada: o harness injeta <system-reminder> nas mensagens, por turno, sem tocar no prompt.

🧬 Arquitetura em duas camadas

  • A camada estável. O system prompt define o comportamento permanente: identidade, regras, a hierarquia. Muda só com redeploy — não recarrega por turno.
  • A camada dinâmica. O harness injeta <system-reminder> quando necessário: data, avisos, estado, o reminder de conversa longa. O prompt estável ensina o modelo a interpretar essa camada.
O contrato da camada — Claude Code, verbatim
<system-reminder> tags in messages and tool results are injected by the harness, not the user.

Uma frase carrega o contrato inteiro: esses avisos vêm da plataforma, não do usuário nem da ferramenta em que aparecem. A xAI converge para o mesmo formato — "they are automatically added by the system, and bear no direct relation to the specific tool results or user messages in which they appear."

🔄 O caso mais elegante: long_conversation_reminder

O Fable 5 lista um conjunto nomeado de reminders (image_reminder, cyber_warning, ethics_reminder, ip_reminder…). O novo long_conversation_reminder resolve um problema que só existe no tempo: em conversas longas, o modelo "esquece" parte das instruções. Em vez de inchar o prompt base, o harness re-injeta as instruções pela camada dinâmica — exatamente onde esse estado pertence.

🏗️

É config × estado, aplicado a prompts

Esta é a separação config estável × estado dinâmico da engenharia de software, transplantada para prompts. É o que torna um prompt escalável no tempo: ajustar comportamento sem redeploy, fazer A/B de avisos, responder a um problema emergente (degradação em conversa longa) — tudo sem inchar a base. Por isso é, arquiteturalmente, o padrão mais importante de todos.

4

Reminder ≠ ordem do usuário: é contexto, não instrução

Aqui mora a sutileza que faz a camada dinâmica funcionar — e que, se ignorada, abre um buraco de segurança. Um <system-reminder> aparece dentro de uma mensagem ou de um resultado de ferramenta, mas não é uma ordem do usuário. É contexto de fundo, vindo da plataforma. O modelo precisa aprender a tratá-lo como informação, não como comando — e a não confundir um com o outro.

O que o reminder É

  • Contexto de fundo injetado pelo harness
  • Informação para usar se relevante
  • Estado do turno: data, avisos, lembretes
  • Vem da plataforma — fica abaixo do usuário na pilha

O que o reminder NÃO é

  • Uma ordem direta do usuário
  • Algo a obedecer cegamente, sempre
  • Conteúdo a mencionar de volta ao usuário
  • Relacionado à ferramenta em que apareceu
Como reagir a um reminder — Claude Code, verbatim
IMPORTANT: this context may or may not be relevant to your tasks. You should not respond to this context unless it is highly relevant to your task.

Note o tom: o reminder é tratado como talvez útil, não como ordem. A Cursor diz o mesmo de outro jeito — "heed them, but do not mention them directly in your response as the user cannot see them." O modelo usa se servir, e não devolve o aviso ao usuário.

⚠️ Por que essa distinção é de segurança

Se o modelo tratasse todo texto dentro de uma mensagem como ordem do usuário, qualquer conteúdo que chegasse por uma ferramenta — uma página web, o retorno de uma API — poderia se passar por instrução e sequestrar o comportamento. Dizer explicitamente "injected by the harness, not the user" é o que ancora o reminder no lugar certo da pilha: abaixo do usuário, como contexto. A distinção não é semântica — é o que impede a injeção de virar comando.

💡

A regra de três linhas

Quando você controla o harness, ensine o modelo a ler a camada dinâmica com três frases: (1) mensagens podem conter <system-reminder> injetados pelo harness, não pelo usuário; (2) são contexto de fundo, não instruções; (3) use se relevante, não mencione ao usuário. Esse é o contrato mínimo.

5

Comportamento estável vs estado dinâmico: por que separar

As duas camadas não são uma curiosidade arquitetural — elas resolvem uma tensão concreta. O que é sempre verdade (identidade, regras, hierarquia) não pode ser poluído pelo que muda a cada turno (data, avisos, estado). Misturar os dois é o antipadrão tudo-no-prompt: cada mudança de contexto vira uma edição, e o diff entre versões vira ruído. Separar é o que mantém o prompt limpo, testável e escalável.

🗃️

1. O antipadrão: tudo-no-prompt

Data, avisos e estado misturados ao comportamento estável, no mesmo bloco de texto.

Sintoma: o prompt precisa de edição a cada mudança de contexto, e o diff entre versões vira ruído. Você não consegue mais distinguir "mudamos a identidade do modelo" de "atualizamos a data de hoje".

✂️

2. O corte: estável de um lado, dinâmico do outro

O que é sempre verdade fica no prompt; o que muda por turno entra por system-reminder.

Resultado: o prompt estável encolhe e fica legível; o estado dinâmico vive na sua própria camada. O diff entre versões volta a contar só decisões de comportamento, não troca de contexto.

🚀

3. O ganho: escalável no tempo

Ajustar avisos sem redeploy; A/B de reminders; resposta a problemas emergentes.

Ganho: um problema novo (degradação em conversa longa) vira um reminder novo (long_conversation_reminder), não um parágrafo a mais no prompt estável. A base não incha até colapsar.

🧭 Em que camada vai cada coisa?

Estável (no prompt)
  • ·Identidade do modelo
  • ·Regras permanentes e políticas
  • ·A hierarquia de prioridade
  • ·Como interpretar a camada dinâmica
Dinâmico (no reminder)
  • ·Data de hoje
  • ·Avisos contextuais do turno
  • ·Estado de ferramentas / arquivos abertos
  • ·Reforço em conversa longa

⚠️ E quando você não controla o harness?

A camada dinâmica exige controle da plataforma — quem só escreve o prompt não tem como injetar reminders. Mas a disciplina mental permanece: separe, no próprio texto, o que é estável do que é contextual. Mesmo num prompt de chat simples, saber qual frase pertenceria a qual camada já te impede de inchar a base com estado que deveria viver fora dela.

6

A regra de ouro: usuário > memória

Toda a pilha desemboca numa regra prática que volta o tempo todo em agentes com memória: a instrução direta do usuário no chat sempre vence o conteúdo guardado — memória, arquivo de projeto, preferência salva. A memória é contexto persistente; ela informa, mas não manda. Quando o que está na memória contradiz o que o usuário acabou de pedir, o usuário ganha. Memória nunca derruba instrução direta.

A hierarquia das skills — Superpowers, vista em Claude Code
1. User's explicit instructions — highest priority.
2. Skills — override default system behavior.
3. Default system prompt — lowest priority.

A cadeia em três linhas: usuário > skill > default. A skill (assim como a memória ou um arquivo de projeto) sobrepõe o comportamento-padrão, mas cede à instrução explícita do usuário. É o mesmo formato do arquivo de projeto da xAI — "direct user instructions always take precedence."

Memória que manda (errado)

  • "Sempre uso tom formal" salvo → ignora pedido de tom casual agora
  • Preferência antiga sobrepõe instrução nova
  • O usuário "não consegue mudar de ideia"
  • A memória vira uma jaula, não uma ajuda

Memória como contexto (certo)

  • A memória informa o default quando não há pedido contrário
  • O pedido direto do usuário sempre sobrepõe
  • O usuário pode contrariar a si mesmo a qualquer turno
  • A memória ajuda; a instrução manda

🪜 Onde a memória mora na pilha

Memória, skills e arquivos de projeto vivem abaixo do usuário e acima dos defaults. Eles moldam o comportamento-padrão — mas a instrução direta no chat passa por cima de todos eles. A pilha inteira, do topo à base:

segurança > política inegociável > instrução do usuário (chat) > memória / skill / arquivo > defaults > estilo
🧭

O teste do conflito

Diante de qualquer choque, suba a pilha e pergunte: "a fonte mais alta nesta cadeia o quê?" Se o usuário pediu algo que a memória contradiz, o usuário vence — a menos que segurança ou uma política inegociável digam o contrário. A pilha não é decoração: é o algoritmo que você roda, em silêncio, toda vez que duas instruções se cruzam.

🧑
Usuário
a instrução manda
🧠
Memória
informa, não manda
🧩
Skill / arquivo
cede ao usuário
🪜
A pilha
o algoritmo do conflito

📝 Resumo do Módulo

  • Conflito sem desempate é bug: a hierarquia de prioridade torna o indeterminado previsível
  • A cadeia: segurança > inegociável > usuário > defaults > estilo — cada nível só anula o de baixo
  • O Lembrete de Sistema é a camada dinâmica que o harness injeta por turno (<system-reminder>)
  • Reminder ≠ ordem do usuário: é contexto, não instrução — vem da plataforma, não do usuário
  • Separar comportamento estável de estado dinâmico é o que torna o prompt escalável no tempo
  • A regra de ouro: usuário > memória — memória informa, instrução direta manda

➡️ Próximo Módulo

3.5 — 🧠 Destilação: recuperar o cérebro. Você já sabe ler a evolução, consolidar e montar as camadas. Agora o movimento inverso: destilar um prompt inchado de volta ao seu núcleo de princípios — recuperar o cérebro por trás das mil regras.