Como Escrever Arquivos de Prompt
Estrutura Geral do Arquivo
Um arquivo de prompt começa com um bloco de front matter YAML (delimitado por ---) que contém os metadados do prompt. O uuid é o único campo obrigatório. Em seguida, as seções de conteúdo são delimitadas por títulos de nível 1 (# NOME DA SEÇÃO).
---
<metadados em formato YAML>
---
# SYSTEM PROMPT
<instruções de sistema para o modelo de IA>
# PROMPT
<o texto do prompt que será enviado ao modelo>
# JSON SCHEMA
<esquema JSON da resposta esperada (opcional)>
# FORMAT
<instruções adicionais de formato (opcional)>
Front Matter
Contém os metadados do prompt em formato YAML, delimitado por --- no início e no fim. Controla visibilidade, filtros, ordenação e integração com outros prompts.
Exemplo completo
---
uuid: 8c8bac70-1aaa-46fc-90fc-328b19906307
name: Voto
sort: 3
share: publico
target: processo
piece_strategy: mais-relevantes-segunda-instancia
profile: eficiente
instance: [segundo-grau]
matter: [civel]
scope: [justica-federal]
author: Nome do Autor
group:
slug: minutas-segunda-instancia
title: Minutas de Segunda Instância
context:
action: minuta-editar
instance: segundo-grau
predecessors:
- path: pedidos-fundamentacoes-e-dispositivos
successors:
- path: chat
---
Referência de Campos
uuid (obrigatório)
Identificador único e permanente do prompt. Nunca altere este valor após o arquivo ser publicado — ele é usado para rastrear o histórico de versões e manter as referências de workflow.
- Gere um UUID v4 em qualquer gerador online (ex:
uuidgenerator.net) ou com o comandouuidgenno terminal. - Formato:
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx - Arquivos sem
uuidsão ignorados pela sincronização (útil para arquivos auxiliares/snippets).
name (opcional)
Nome de exibição do prompt na interface. Se omitido, o sistema usa o nome do arquivo (sem extensão e com formatação automática).
name: Minuta de Sentença
sort (opcional)
Número inteiro que controla a ordem de exibição na lista. Números menores aparecem primeiro. Prompts sem sort definido aparecem no final, em ordem alfabética.
sort: 3
author (opcional)
Texto livre com o nome do autor ou equipe responsável pelo prompt. Sugerimos incluir a sigla do órgão, conforme exemplo abaixo.
author: Caroline Tauk/JFRJ
share (opcional)
Controla a visibilidade do prompt para outros usuários. Valor padrão: padrao.
| Valor | Descrição |
|---|---|
padrao |
Visibilidade padrão do sistema — segue as regras gerais (normalmente visível apenas dentro da instalação) |
publico |
Visível para todos os usuários |
em-analise |
Em revisão pela moderação; visível para moderadores |
beta-teste |
Disponível apenas para usuários de beta |
nao-listado |
Não aparece nas listas, mas pode ser acessado diretamente via link |
privado |
Visível apenas para quem criou |
oculto |
Completamente oculto — não aparece em nenhuma lista, nem para administradores. Reservado para prompts internos do sistema |
share: publico
ocultoé gerenciado automaticamente pelo sistema e não deve ser usado em prompts criados por usuários. Ele aparece no formulário de edição como informação somente-leitura quando já está definido.
target (opcional)
Define o tipo de entrada sobre o qual o prompt opera. Valor padrão: processo.
| Valor | Descrição |
|---|---|
processo |
Opera sobre peças de um processo judicial |
texto |
Opera sobre um texto livre fornecido pelo usuário |
refinamento |
Refina ou melhora um texto já gerado |
chat |
Modo de conversa interativa |
target: processo
piece_strategy (opcional)
Define qual estratégia de seleção de peças do processo será usada. Relevante apenas quando target: processo.
| Valor | Descrição |
|---|---|
mais-relevantes |
Peças mais relevantes (estratégia geral) |
mais-relevantes-primeira-instancia |
Peças mais relevantes de processos de primeiro grau |
mais-relevantes-segunda-instancia |
Peças mais relevantes de processos de segundo grau |
apelacao-e-triagem |
Focada em apelações, agravos e triagem |
conhecimento |
Fase de conhecimento |
viabilidade-recurso-extraordinario |
Voltada para análise de viabilidade de RE |
viabilidade-recurso-especial |
Voltada para análise de viabilidade de REsp |
agravo-interno-em-viabilidade-recurso-especial |
Agravo interno em viabilidade de REsp |
agravo-interno-em-viabilidade-recurso-extraordinario |
Agravo interno em viabilidade de RE |
peticao-inicial |
Foca na petição inicial |
peticao-inicial-e-anexos |
Petição inicial e seus anexos |
ppp |
Perfis Profissiográficos Previdenciários (PPP) |
tipos-especificos |
Seleciona tipos de peça especificados separadamente (veja piece_descr) |
todas |
Inclui todas as peças disponíveis |
suspensao |
Decisão de suspensão (IRDR/repetitivos/repercussão geral) |
selecionadas-pela-ia |
Nenhuma peça pré-selecionada: a IA escolhe e obtém os textos do processo por meio de ferramentas |
piece_strategy: mais-relevantes-segunda-instancia
profile(opcional)
Define o perfil de modelo a ser usado por este prompt. O front matter aceita apenas os perfis abstratos abaixo, nunca nomes concretos de modelos como gemini-2.5-pro ou gpt-4.1. Use o perfil premium só em último caso, pois normalmente é muito mais caro que os demais. Utilize o perfil eficiente quando não há necessidade de raciocínio profundo, mas se quer velocidade e baixo custo. O perfil versatil representa modelos com boa capacidade de raciocínio e custo razoável. O perfil padrao é o modelo base configurado pelo tribunal.
Perfis aceitos:
| Valor | Descrição |
|---|---|
padrao |
Perfil padrão do tribunal |
padrao-mp3 |
Perfil padrão com suporte a MP3 |
padrao-pdf |
Perfil padrão com suporte a PDF |
padrao-mp3-pdf |
Perfil padrão com suporte a MP3 e PDF |
premium |
Perfil de maior capacidade geral |
premium-mp3 |
Perfil premium com suporte a MP3 |
premium-pdf |
Perfil premium com suporte a PDF |
premium-mp3-pdf |
Perfil premium com suporte a MP3 e PDF |
versatil |
Perfil intermediário de uso geral |
versatil-mp3 |
Perfil versátil com suporte a MP3 |
versatil-pdf |
Perfil versátil com suporte a PDF |
versatil-mp3-pdf |
Perfil versátil com suporte a MP3 e PDF |
eficiente |
Perfil mais econômico/eficiente |
eficiente-mp3 |
Perfil eficiente com suporte a MP3 |
eficiente-pdf |
Perfil eficiente com suporte a PDF |
eficiente-mp3-pdf |
Perfil eficiente com suporte a MP3 e PDF |
Valores legados (
alto,medio,baixoe sufixosaudio) não são mais aceitos.
instance (opcional)
Lista de instâncias para as quais o prompt é aplicável. Filtra o prompt na interface conforme o processo selecionado.
| Valor | Descrição |
|---|---|
primeiro-grau |
Primeiro grau |
segundo-grau |
Segundo grau (tribunais) |
terceiro-grau |
Terceiro grau (STJ, STF) |
Aceita um ou mais valores em lista YAML:
instance: [segundo-grau]
instance: [primeiro-grau, segundo-grau]
scope (opcional)
Lista de ramos da Justiça para as quais o prompt é aplicável.
| Valor | Descrição |
|---|---|
supremo-tribunal-federal |
STF |
superior-tribunal-justica |
STJ |
conselho-nacional-justica |
CNJ |
justica-federal |
Justiça Federal |
justica-estadual |
Justiça Estadual |
justica-trabalho |
Justiça do Trabalho |
justica-eleitoral |
Justiça Eleitoral |
justica-militar-uniao |
Justiça Militar da União |
scope: [justica-federal, justica-estadual]
matter (opcional)
Lista de matérias jurídicas para as quais o prompt é aplicável.
| Valor | Descrição |
|---|---|
civel |
Cível |
criminal |
Criminal |
eleitoral |
Eleitoral |
trabalhista |
Trabalhista |
matter: [civel]
group (opcional)
Agrupa prompts relacionados em uma seção visual na interface. Todos os prompts com o mesmo slug aparecem juntos sob o mesmo title.
group:
slug: admissibilidade-de-recursos
title: Admissibilidade de Recursos
slug: identificador do grupo (letras minúsculas, hífens, sem acentos)title: texto exibido como cabeçalho do grupo na interface
context (opcional)
Controla quando o prompt aparece automaticamente no painel lateral (Sidekick), baseado no contexto da tela atual do usuário. Esta opção deve ser usada para guiar a integração da Apoia ao sistema processual (eproc/PJe) através do IntelliAgent.
context:
action: minuta-editar
instance: segundo-grau
| Subcampo | Descrição | Valores aceitos |
|---|---|---|
action |
Ação da interface que ativa o prompt | minuta-editar, processo-selecionar |
instance |
Instância do processo que ativa o prompt | mesmos valores de instance acima |
Ambos os subcampos são opcionais — você pode especificar apenas action, apenas instance, ou ambos.
Exemplo — prompt visível ao editar minutas de segundo grau:
context:
action: minuta-editar
instance: segundo-grau
Exemplo — prompt visível ao selecionar qualquer processo:
context:
action: processo-selecionar
plugins (opcional)
Lista de plugins ativados para este prompt. Os plugins adicionam funcionalidades extras à execução (usados em relatórios em lote).
| Valor | Descrição |
|---|---|
triagem |
Plugin de triagem |
normas |
Extração de normas citadas |
palavras-chave |
Extração de palavras-chave |
triagem-json |
Triagem com saída em JSON |
normas-json |
Normas com saída em JSON |
palavras-chave-json |
Palavras-chave com saída em JSON |
plugins:
- triagem-json
- normas
batch_report (opcional)
Indica que este prompt pode ser utilizado em relatórios de lote (Relatório de Acervo). Quando true, o prompt aparece como opção no processamento em lote de múltiplos processos.
batch_report: true
summary (opcional)
Controla se o prompt gera um resumo exibido na interface (por exemplo, o resumo de cada peça usado pelos prompts seguintes do workflow). Aceita sim ou nao.
summary: sim
editor_label (opcional)
Texto curto exibido no editor quando este prompt é selecionado como opção. Útil para diferenciar prompts com nomes semelhantes no contexto do editor.
editor_label: Minuta de Voto
piece_descr (opcional)
Lista de tipos de peça processual associados a este prompt. Tem papel duplo — define a seleção padrão e filtra as peças que o prompt recebe —, porém só tem efeito quando piece_strategy: tipos-especificos (o formulário só expõe o campo nessa estratégia). Os valores são as chaves do enum de tipos de peça, podendo ser escritas na forma canônica ou com hífens (slug).
A semântica é por presença:
- Ausente = sem filtro: o prompt recebe todas as peças selecionadas pela estratégia.
- Presente, mesmo com lista vazia = só entram peças dos tipos listados. A lista vazia (
[]) significa que o prompt não recebe peças — útil para passos de workflow que usam apenas os resultados de prompts anteriores (ex.: uma busca de jurisprudência sobre os pedidos já extraídos).
Essa regra vale para o prompt raiz e para os steps de workflow. O casamento é feito sobre o tipo efetivo da peça, respeitando reclassificações. A sincronização preserva listas vazias declaradas e descarta valores inválidos.
Exemplos de valores aceitos: peticao-inicial, contestacao, sentenca, apelacao, recurso-especial, etc.
piece_descr:
- peticao-inicial
- contestacao
- sentenca
# prompt que não recebe peças, apenas resultados anteriores
piece_strategy: tipos-especificos
piece_descr: []
predecessors (opcional)
Lista de prompts que devem ser executados antes deste. O sistema usa essa informação para montar o encadeamento do workflow (veja Workflows de Prompts).
Cada item pode referenciar outro prompt por path (slug do arquivo, sem extensão) ou por uuid:
predecessors:
- path: pedidos-fundamentacoes-e-dispositivos
- path: pesquisa-de-temas
predecessors:
- uuid: a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d
O path é o nome do arquivo sem extensão, relativo ao diretório raiz que está sendo importado. Para arquivos em subpastas, use o caminho relativo:
predecessors:
- path: admissibilidade-de-recurso/juizo-viabilidade-recurso
Campos adicionais opcionais por predecessor:
| Campo | Tipo | Descrição |
|---|---|---|
name |
string | Nome de exibição (se diferente do padrão) |
optional |
boolean | Se true, o predecessor não é obrigatório |
condition |
string | Condição lógica para incluir este predecessor |
successors (opcional)
Lista de prompts sugeridos como próximo passo após a execução deste. Aparecem como sugestão ao usuário ao final da geração.
successors:
- path: chat
- path: voto
A sintaxe é idêntica à de predecessors.
Seção # SYSTEM PROMPT
Instrução de sistema enviada ao modelo de IA antes do prompt do usuário. Define o papel, tom, restrições e expertise esperados do modelo.
# SYSTEM PROMPT
Você é um assistente de magistrado altamente experiente, especialista em Direito Civil e Processual Civil.
Sua principal habilidade é redigir minutas de votos claras, bem fundamentadas e tecnicamente impecáveis.
{{salvaguardas}}
Seção # PROMPT
O texto principal do prompt, enviado como mensagem do usuário ao modelo. Suporta Markdown e variáveis de template.
# PROMPT
Com base nas peças do processo abaixo, elabore um resumo dos principais pedidos da parte autora:
{{textos}}
Variáveis de template
| Variável | Descrição |
|---|---|
{{textos}} |
Substituída pelo texto extraído das peças do processo selecionadas |
{{salvaguardas}} |
Insere o texto padrão de salvaguardas e limitações do sistema |
Seção # JSON SCHEMA (opcional)
Define o esquema JSON da resposta esperada do modelo, quando o prompt deve retornar dados estruturados em vez de texto livre. O sistema usa este schema para validar e processar a resposta.
# JSON SCHEMA
{
"type": "object",
"properties": {
"pedidos": {
"type": "array",
"items": { "type": "string" }
}
}
}
Seção # FORMAT (opcional)
Template Nunjucks que transforma o JSON retornado pelo modelo em texto formatado para exibição ao usuário. É necessário sempre que o prompt usa # JSON SCHEMA ou ## FIELDS, pois o JSON bruto não é exibido diretamente — ele precisa ser renderizado em Markdown, tabela ou qualquer outra estrutura legível.
Fluxo de execução:
- O modelo retorna um JSON (validado pelo schema)
- O sistema interpreta o
# FORMATcomo um template Nunjucks, passando os campos do JSON como variáveis de contexto - O resultado renderizado é exibido ao usuário
Sintaxe de expressões
Há duas formas de inserir o valor de um campo do JSON no template:
| Sintaxe | Comportamento |
|---|---|
{{ campo }} |
Insere o valor com destaque visual (span de highlight), indicando ao leitor que a informação foi extraída do JSON |
{= campo =} |
Insere o valor sem destaque, de forma transparente no texto |
Use {{ }} quando quiser que o usuário identifique facilmente que aquele trecho veio da análise do modelo. Use {= =} quando o valor deve aparecer como parte natural do texto, sem marcação.
{{ campo }} → valor do campo, com highlight
{= campo =} → valor do campo, sem highlight
{= objeto.subcampo =} → acesso aninhado
{= array[0] =} → primeiro elemento
Para blocos de controle (condicionais, laços), use a sintaxe {% %} normalmente:
{% if condicao %}...{% endif %}
{% for item in lista %}...{% endfor %}
{% set mapa = { CHAVE: 'valor' } %}
```### Filtros disponíveis
Além dos filtros padrão do Nunjucks, estão disponíveis:
| Filtro | Descrição |
|--------|-----------|
| `sortByDate(campo, ordem)` | Ordena um array por um campo de data no formato `DD/MM/YYYY`. `ordem` pode ser `'asc'` (padrão) ou `'desc'` |
| `blockquoteLines` | Escapa o texto e formata cada linha com `>` (blockquote Markdown) |
| `limpaHtml` | Limpa HTML desnecessário e embute HTML vivo sem escape (útil para campos JSON e resultados de ferramentas) |
### Funções de data disponíveis
As seguintes funções ficam disponíveis no contexto do template:
| Função | Descrição |
|--------|-----------|
| `date('DD/MM/YYYY')` | Converte uma string de data |
| `dateAddDays(data, n)` | Adiciona `n` dias a uma data |
| `dateAddMonths(data, n)` | Adiciona `n` meses a uma data |
### Marcadores de referência no `# FORMAT`
Trechos do FORMAT podem ser marcados como **referenciáveis** por prompts sucessores do workflow, usando pares de comentários HTML no namespace `apoia:`:
```
<!--apoia:ementa-->...conteúdo...<!--/apoia:ementa-->
```
* Os ids são únicos por prompt (letras, números, `.`, `_`, `-`), podem ser aninhados e os comentários são invisíveis no navegador.
* Um prompt sucessor pode copiar o trecho por referência (veja campos `Rf_` e o comando `copiar` abaixo) ou citá-lo com `step:<slug>#<id>`.
* Mecanismo **opt-in**: sem marcadores, nada é referenciável. Marcador não fechado é ignorado.
### Exemplos
**Lista numerada simples** (arquivo `indice.md`):
```nunjucks
# FORMAT
{% for d in indice %}
{{ loop.index }}. **{= d.descr =}** (evento {= d.event =}{% if d.label %}, {= d.label =}{% endif %}{% if d.pages %}, pág. {= d.pages =}{% endif %})
{% endfor %}
```**Tabela Markdown** (arquivo `linha-do-tempo-fatica.md`):
```nunjucks
# FORMAT
{% if Linha_Do_Tempo | length %}
| Data | Agente | Fato | Peça |
|------|--------|------|------|
{% for fato in Linha_Do_Tempo %}| {= fato.Tx_Data_Do_Fato =} | {= fato.Tx_Agente or "" =} | {= fato.Tx_Fato_Resumido =} | {= fato.Tx_Peca =} |
{% endfor %}{% endif %}
```**Mapeamento de enum para texto legível** (arquivo `pedidos-fundamentacoes-e-dispositivos.md`):
```nunjucks
# FORMAT
{% set tipos = {
CONDENAR_A_PAGAR: 'Condenar a Pagar',
CONDENAR_A_FAZER: 'Condenar a Fazer',
ANULAR_RELACAO_JURIDICA: 'Anular Relação Jurídica'
} %}
{% for d in pedidos %}{{ loop.index }}. {{ tipos[d.tipoDePedido] }}: {= d.texto =}
{% endfor %}
```**Tabela com ordenação por data** (arquivo `prev-ppp.md`):
```nunjucks
# FORMAT
{% if PPP | length %}
| Início | Fim | Empresa | Profissão |
|--------|-----|---------|-----------|
{% for p in PPP | sortByDate('Dt_Inicio') %}| {= p.Dt_Inicio =} | {= p.Dt_Fim =} | {= p.Tx_Empresa =} | {= p.Tx_Profissao =} |
{% endfor %}{% endif %}
Importante: O
# FORMATsó é executado quando a resposta do modelo começa com{(ou seja, é JSON). Se o modelo retornar texto livre, o FORMAT é ignorado e o texto bruto é exibido diretamente.
Seção ## FIELDS e ## FIELDS READONLY (opcional)
O recurso auto-json permite definir a estrutura dos campos de extração diretamente no corpo do # PROMPT, usando headings Markdown como definição de schema. O sistema lê esses headings, gera automaticamente o # JSON SCHEMA correspondente e injeta o boilerplate de instruções de preenchimento para o modelo.
O resultado é que o autor do prompt escreve apenas uma vez — as descrições dos campos servem simultaneamente como instrução para o modelo e como definição do schema JSON.
Diferença entre os dois títulos:
| Título | Comportamento |
|---|---|
## FIELDS |
Após o modelo retornar o JSON, a interface exibe os dados em um formulário editável — o usuário pode corrigir os valores antes de prosseguir |
## FIELDS READONLY |
Os dados extraídos são exibidos mas não editáveis pelo usuário |
Todo schema ganha automaticamente um campo técnico errorMessage: se o modelo o preencher (por exemplo, para reportar que não encontrou os dados), o restante do JSON é descartado e o erro é tratado pelo canal normal da aplicação.
Estrutura dos headings
Os headings de nível H3 a H6 abaixo do marcador definem a hierarquia do JSON. O nível hierárquico determina o tipo:
| Nível | Tipo inferido | Exemplo |
|---|---|---|
H3–H5 sem [] |
Objeto aninhado | ### Endereco |
H3–H5 com [] |
Array de objetos | ### Itens[] |
| H6 | Campo primitivo | ###### Tx_Nome |
O tipo primitivo de cada campo H6 é inferido pelo prefixo do nome:
| Prefixo | Tipo | Formato |
|---|---|---|
Tx_ |
string curta | texto livre (máx. 300 caracteres) |
Tg_ |
string longa | texto livre, múltiplas linhas |
Dt_ |
date (string) | dd/mm/yyyy |
Ma_ |
string | mês/ano mm/aaaa |
Nr_ |
number | número |
Lo_ |
boolean | true / false |
Ev_ |
string | número de evento processual |
Rf_ |
referência | veja "Campos de referência" abaixo |
| (outros) | string | inferido por palavras como "texto", "resumo" |
O texto em itálico após o traço no nome do heading (### PPP[] - Perfis Profissiográficos) vira o rótulo de exibição; o texto antes do traço vira o nome do campo no JSON.
Modificadores de campo
No nome do heading de campos primitivos (H6) e de arrays primitivos, podem ser usados modificadores entre parênteses, combináveis:
| Modificador | Efeito |
|---|---|
(opcional) |
O campo pode ficar nulo (continua listado como obrigatório no schema, mas aceita vazio) |
(opções: A, B, C) |
Restringe os valores aceitos (enum). Disponível apenas para campos primitivos e arrays primitivos |
Arrays declarados com [] aceitam lista vazia por padrão.
Exemplo — campo simples e array
# PROMPT
Extraia as informações do processo abaixo.
## FIELDS
### Processo - Dados do Processo
###### Tx_Numero - Número do Processo
- Número do processo no formato CNJ
###### Dt_Distribuicao - Data de Distribuição
- Data de distribuição no formato dd/mm/yyyy
### Partes[] - Partes do Processo
###### Tx_Nome - Nome
- Nome completo da parte
###### Tx_Polo - Polo
- "Ativo" ou "Passivo"
Isso gera automaticamente o JSON schema equivalente a:
{
"Processo": {
"Tx_Numero": "...",
"Dt_Distribuicao": "..."
},
"Partes": [
{ "Tx_Nome": "...", "Tx_Polo": "..." }
]
}
Exemplo real — array com objeto agrupador (arquivo prev-ppp.md)
## FIELDS
### Docs_Analisados - Documentos Analisados
###### Nr_PPPs - Número de PPPs
- Número de PPPs extraídos dos documentos
### PPP[] - Perfis Profissiográficos Previdenciários
- Extraia as informações dos textos dos PPPs nos autos
- Se não houver PPPs, responda com um array vazio.
###### Ev_Event - Evento
- Número do evento processual
###### Dt_Inicio - Início do Período
- Data de início conforme consta no PPP ou "?" se não tiver certeza.
###### Tx_Empresa - Empresa
- Nome da empresa
###### Lo_EPI_Eficaz - EPI Eficaz
- true se o EPI foi considerado eficaz no PPP
Exemplo com hierarquia de arrays (pedidos-viabilidade-recurso.md)
Arrays podem conter sub-arrays usando H4 e H5:
## FIELDS READONLY
### Pedidos[] - Lista de Pedidos
#### Tx_Texto - Texto do Pedido
- Descrição concisa do pedido
##### Argumentos[] - Lista de Argumentos
###### Tx_Texto - Texto do Argumento
- Descrição concisa do argumento
###### Tx_Trecho - Trecho Comprobatório
- Trecho exato do texto onde o argumento aparece
Regras de aninhamento
- H3 na raiz → campo ou array de nível raiz
- H4 dentro de H3 → subcampo ou subarray
- H5 dentro de H4 → subsubcampo ou subsubarray
- H6 é sempre campo primitivo — não pode ter filhos nem ser array
- Nomes de campos no mesmo nível devem ser únicos
- Descrições (linhas de texto após o heading) tornam-se instrução para o modelo e não entram no schema JSON
O
## FIELDSé usado dentro da seção# PROMPT. O sistema injeta automaticamente o boilerplate de instruções gerais (tipos de dados, formatos de data, regras de preenchimento) antes do título, de modo que o autor não precisa repeti-las.
Campos de referência (Rf_)
Quando o valor de um campo deve ser copiado integralmente de um resultado anterior (de ferramenta ou de prompt predecessor) em vez de redigitado pela IA, use o prefixo Rf_. O modelo emite apenas uma referência e a Apoia materializa o valor exato — uma cópia literal por construção, sem risco de alucinação.
- Fontes de referência:
<toolCallId>#<caminho>;<nomeDaFerramenta>#<n>#<caminho>(n-ésima execução);<nomeDaFerramenta>#<caminho>(última execução da ferramenta — forma recomendada);step:<slug>#<id>(resultado de prompt anterior do fluxo, onde<id>é o marcador<!--apoia:id-->do FORMAT). - O
<caminho>é um JSON Pointer (RFC 6901); em arrays com propriedadeid, prefiraid:<valor>ao índice. - Regras: apenas cópia exata (sínteses vão em campos
Tx_/Tg_); referência inválida é erro (registrado no painel de erros com a resposta crua); não combinável com(opções); no formulário editável, o usuário edita o valor mantendo a referência como procedência; no FORMAT, o valor é acessado diretamente.
Comando de cópia integral (copiar)
Em prompts de saída textual (sem FIELDS) cuja prosa precisa inserir trecho literal de um resultado anterior, o modelo pode emitir o comentário <!--apoia:copiar:<id>--> (forma curta — usa o último resultado que tiver o marcador) ou <!--apoia:copiar:step:<slug>#<id>--> (forma qualificada). A Apoia substitui o comando pelo conteúdo exato do trecho referenciado, reproduzindo os marcadores originais — o resultado permanece re-referenciável por prompts sucessores. Referência inválida é erro fatal (a resposta é substituída por ERRO: ...). A instrução para o modelo é autoral: inclua no PROMPT/SYSTEM PROMPT o parágrafo canônico de instrução documentado na documentação interna do repositório.
Exemplos Completos
Prompt simples de análise de processo
---
uuid: 9c8f98fb-0679-4f2a-9722-91c2e1b35600
name: Resumos e Análise
sort: 2
piece_strategy: mais-relevantes
context:
action: processo-selecionar
successors:
- path: chat
---
# SYSTEM PROMPT
Você conhece profundamente o direito brasileiro e está completamente atualizado juridicamente.
Você sempre presta informações precisas, objetivas e confiáveis.
Você não está autorizado a criar nada; suas respostas devem ser baseadas apenas no texto fornecido.
# PROMPT
Leia com atenção os textos a seguir e resuma as informações mais importantes:
{{textos}}
Prompt de segunda instância com workflow completo
---
uuid: 8c8bac70-1aaa-46fc-90fc-328b19906307
name: Voto
sort: 3
piece_strategy: mais-relevantes-segunda-instancia
instance: [segundo-grau]
context:
action: minuta-editar
instance: segundo-grau
predecessors:
- path: pedidos-fundamentacoes-e-dispositivos
successors:
- path: chat
---
# SYSTEM PROMPT
Você é um assistente de magistrado altamente experiente, especialista em Direito Civil e Processual Civil.
# PROMPT
Considerando as informações do processo em questão, gere uma minuta completa de voto de mérito.
{{textos}}
Prompt com grupo e share restrito
---
uuid: a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d
name: Minuta de Decisão de Viabilidade de Recurso Especial
sort: 3
share: beta-teste
piece_strategy: viabilidade-recurso-especial
group:
slug: admissibilidade-de-recursos
title: Admissibilidade de Recursos
predecessors:
- path: pedidos-viabilidade-recurso
- path: pesquisa-de-temas
- path: juizo-viabilidade-recurso
successors:
- path: chat
---
# SYSTEM PROMPT
...
# PROMPT
...
Prompt de subpasta com scope específico
---
uuid: b01fed52-428c-47b1-aa7b-228be3b63ba4
name: Relatório de Aposentadoria Especial - Segunda Instância
sort: 1000
piece_strategy: mais-relevantes-segunda-instancia
author: Caroline Tauk/JFRJ
instance: [segundo-grau]
scope: [justica-federal]
matter: [civel]
successors:
- path: pedidos-fundamentacoes-e-dispositivos
- path: voto
- path: chat
---
# SYSTEM PROMPT
...
# PROMPT
...
Boas Práticas
- Nunca altere o
uuidde um prompt já publicado. Isso quebraria as referências de workflow e o histórico de versões. - Use slugs legíveis ao referenciar prompts por
path. O slug é o nome do arquivo sem.mde em letras minúsculas com hífens. - Mantenha o system prompt curto e focado. Defina papel e restrições; os detalhes da tarefa vão no
# PROMPT. - Use
{{textos}}no corpo do prompt quando o modelo precisar ler o conteúdo do processo. Sem essa variável, nenhum texto do processo será enviado. - Use
sortpara organizar. Prompts mais usados devem ter números menores (aparecem primeiro). - Defina
instanceescopequando o prompt for específico para um tipo de tribunal ou grau — isso evita que apareça em contextos irrelevantes e melhora a experiência do usuário. - Use
share: privadodurante o desenvolvimento para que o prompt fique visível apenas para você antes de ser publicado.