Ir para o conteúdo

48 · agent.yaml e gateway.yaml, chave por chave

Idiomas

O seletor lê turnos escritos em inglês e em português do Brasil (pt-BR). O idioma é escolhido, nunca adivinhado a partir do turno: na página Settings do console (Language the selector reads), em language numa requisição de plano, ou no settings.language do seu arquivo de vocabulário; sem nenhum deles, inglês. Um turno em português pode ser digitado com os acentos ou sem eles. O português europeu não é uma gramática que o seletor tenha, e um turno em qualquer outra língua não é lido.

Este capítulo lista cada chave que os dois arquivos aceitam, com o que cada uma quer dizer. Cada tabela é gerada das listas contra as quais o pacote stalwart-agents confere um arquivo, então uma chave está aqui se e somente se o pacote a lê. Uma chave que o pacote não conhece é um erro na sua linha, nunca ignorada: uma palavra escrita errado nunca é uma configuração deixada em silêncio no seu valor padrão. O capítulo 30 mostra os arquivos em uso; este capítulo é o lugar de consultar uma chave.

O topo do agent.yaml

Chave O que diz
agents os agentes, por nome; o primeiro é aquele com que uma conversa começa
tools de onde vêm as ferramentas: python: as funções públicas de um módulo, mcp: o tools/list de um servidor, openapi: cada operação de um documento, http: as chamadas de um serviço web listadas à mão, code: o seu próprio código num espaço próprio e fechado, ou name: as palavras de uma ferramenta
rulebook a política Colang contra a qual toda chamada de ferramenta é verificada e o grafo é provado
facts o que é cada fato que o rulebook lê ($order_paid), lido de um campo do resultado de uma ferramenta: {from: get_order.status == paid, same: order_id} (capítulo 45)
runs atomic (o padrão): uma execução que falha é desfeita, da última escrita para a primeira; stop: uma execução que falha fica como está
storage onde as execuções e as confirmações pendentes são guardadas: sqlite:///runs.db, ou postgres://... para vários workers; em memória quando não informado
stores os armazenamentos que as ferramentas leem e escrevem, como uma memória ou um índice de busca, e como cada um é compartilhado
budget limites para o laço de uma execução, que a regra do caçador de bugs sobre laços sem limite lê
modules os módulos que o código escrito por um modelo pode importar, que as regras do caçador de bugs sobre código escrito por modelo leem
replies as configurações da verificação de respostas (capítulo 42)
answers respostas fundamentadas a partir dos seus documentos (capítulo 44)
job a descrição do trabalho do bot: title, purpose, a quem ele atende em serves (customers, staff ou ambos), o seu manager e escalates_to (cada um, um papel), a sua team e o seu horário em hours
tasks as tarefas do bot, por nome: cada uma com o seu title, as tools que usa, o seu output (reply, document, draft ou action), onde começa na escada (watch ou suggest), os triggers que a iniciam, e se as suas mudanças rodam in_order ou all_at_once (steps)
triggers como o trabalho chega sozinho, por nome: cada um do kind email, form, schedule, webhook, change ou message; o timing de um agendamento é around, exact ou always_on; o where de uma mudança aceita condições ou um filtro; uma mensagem chega in teams, slack, whatsapp, instagram, messenger ou sms, numa account
ladder a régua que uma tarefa precisa ultrapassar para subir na escada (no mínimo proposals 50, agreement 0,95 e drift_free_days 14: pode subir, nunca descer) e a sample das execuções em Agir e avisar que uma pessoa revisa
drift quando o trabalho passado é repetido para vigiar desvios (replay: weekly ou on_model_change) e os thresholds a partir dos quais um sinal é relatado
site a página do próprio bot: on, off, ou o seu title e language

job, tasks, triggers, ladder, drift e site descrevem o trabalho do bot para o host que o executa (abaixo); o pacote as confere e as repassa.

Um agente

Em agents:, cada agente pelo seu nome:

Chave O que diz
agents.<name>.model o modelo do agente, provedor:modelo, usado com a sua própria chave do seu ambiente; deixe-o de fora e nenhum modelo é chamado
agents.<name>.tools as ferramentas que este agente pode chamar, por nome
agents.<name>.hands_off_to os agentes para os quais este pode passar a conversa
agents.<name>.on_unread o que acontece com um turno que nada lê, depois de a pessoa ter sido convidada a dizê-lo de outra forma: refuse, model, ask ou answer; a configuração do console quando não informado
agents.<name>.privilege low, standard ou high: o grau de confiança dado a uma transferência vinda deste agente
agents.<name>.remote como uma transferência para este agente viaja quando ele roda em outro lugar, e como esse canal é autenticado
agents.<name>.budget os limites próprios deste agente para uma execução: max_steps, max_tool_calls e max_model_calls, no lugar dos do arquivo
agents.<name>.system o que é dito ao modelo antes da conversa
agents.<name>.job a descrição do trabalho deste agente, com as mesmas palavras do job do topo
agents.<name>.defaults valores que os argumentos das ferramentas recebem sempre que um turno não os dá, pelo nome do parâmetro -- a conta em que uma ferramenta age, por exemplo --, para que o roteador nunca os pergunte

budget

No topo do arquivo, ou num agente no lugar do do arquivo:

Chave O que diz
budget.max_steps o máximo de passos que uma execução dá; num agente, o dele, senão o do arquivo, senão 60. A regra do caçador de bugs sobre laços sem limite (QG023) lê este valor
budget.max_tool_calls o máximo de chamadas de ferramenta que um turno faz; a chamada além dele não é feita, e o turno para com BudgetSpent
budget.max_model_calls o máximo de chamadas ao modelo que um turno faz; a chamada além dele não é feita, e o turno para com BudgetSpent

remote

Chave O que diz
agents.<name>.remote.transport como uma transferência para este agente viaja quando ele roda em outro lugar, como a2a
agents.<name>.remote.authentication como o outro lado prova quem é, como mtls; um agente remoto sem nenhuma é QG107

Ferramentas e de onde elas vêm

Cada entrada de tools: é uma fonte, nomeada pela chave que diz de que tipo ela é, ou as palavras de uma ferramenta em name:. Uma entrada de cada tipo aceita só as chaves da sua tabela.

python:

Chave O que diz
tools[].python um módulo seu, importado no processo do agente e confiável; toda função pública é uma ferramenta, com o esquema vindo das anotações de tipo

mcp:

Chave O que diz
tools[].mcp o endereço de um servidor MCP, ou um arquivo que lista as suas ferramentas; cada ferramenta listada é uma ferramenta, com as indicações que o servidor dá
tools[].url o endereço para onde vão as chamadas, quando mcp: nomeia um arquivo que lista as ferramentas
tools[].version a versão do servidor em que as ferramentas são fixadas
tools[].digest o digest da lista de ferramentas do servidor em que as ferramentas são fixadas
tools[].headers cabeçalhos enviados em cada requisição, cada ${NAME} lido do seu ambiente quando a requisição é feita; é assim que um agente envia o seu token do gateway
tools[].receipts true atrás de um gateway que admite cada chamada pela verificação do próprio agente, que então viaja com a chamada como recibo
tools[].tools apenas estas ferramentas do servidor; todas, quando não informado

openapi:

Chave O que diz
tools[].openapi um documento OpenAPI; cada operação é uma ferramenta, GET e HEAD leem, qualquer outro método escreve, a menos que o seu x-stalwart diga o contrário
tools[].headers cabeçalhos enviados em cada requisição, cada ${NAME} lido do seu ambiente quando a requisição é feita; é assim que um agente envia o seu token do gateway
tools[].receipts true atrás de um gateway que admite cada chamada pela verificação do próprio agente, que então viaja com a chamada como recibo

Uma operação pode dizer na sua extensão x-stalwart o que o seu documento não diz, com as palavras de ferramenta abaixo e uma só sua:

Chave O que diz
x-stalwart.undo nomeia a ferramenta que desfaz esta escrita; uma execução que falha a chama, verificada como qualquer chamada
x-stalwart.irreversible a escrita não pode ser desfeita; a sua confirmação diz isso, e um rollback a deixa no lugar
x-stalwart.retry_safe chamá-la duas vezes com os mesmos argumentos faz o que chamá-la uma vez faz, então uma chamada de resultado desconhecido pode ser repetida
x-stalwart.reads_outside o que ela devolve vem de fora, um e-mail ou uma página web, e não é confiável; o que vem depois carrega essa marca
x-stalwart.sends_out ela pode enviar para uma URL ou outro destino; um argumento de destino é recusado em qualquer ferramenta que não diga isso
x-stalwart.after a ferramenta só roda depois de cada ferramenta nomeada, na mesma sessão
x-stalwart.not_after a ferramenta nunca roda depois de uma ferramenta nomeada, ou depois de qualquer coisa de fora quando ela nomeia untrusted
x-stalwart.at_most a ferramenta roda no máximo este número de vezes numa sessão; {count, per} e uma lista deles, um por período, são verificados quando o arquivo é lido, ainda não aplicados
x-stalwart.requires_privilege só um agente com pelo menos este privilégio pode chamá-la
x-stalwart.argument_kinds o que um argumento é, como code, sql, path ou url, que as regras do caçador de bugs sobre valores escritos pelo modelo leem
x-stalwart.confidential o que a ferramenta devolve é confidencial, e para quem
x-stalwart.subject_argument o argumento que nomeia de quem são os dados que a ferramenta devolve
x-stalwart.idempotency {header: <name>}: o cabeçalho em que a chave de idempotência de uma chamada é enviada
x-stalwart.also_called palavras que uma pessoa usa para aquilo sobre o que a ferramenta age, lidas como as palavras do seu nome

http:

Chave O que diz
tools[].http o endereço de uma API REST sem documento OpenAPI, começando com https://
tools[].headers cabeçalhos enviados em cada requisição, cada ${NAME} lido do seu ambiente quando a requisição é feita; é assim que um agente envia o seu token do gateway
tools[].operations as chamadas da API, listadas à mão, cada uma uma ferramenta (a próxima tabela)
tools[].receipts true atrás de um gateway que admite cada chamada pela verificação do próprio agente, que então viaja com a chamada como recibo

Cada uma das suas operations:, além de qualquer palavra de ferramenta:

Chave O que diz
tools[].operations[].name o nome da ferramenta
tools[].operations[].method GET, uma leitura, ou POST, PUT, PATCH ou DELETE, cada um dos quais precisa dizer se escreve
tools[].operations[].path o caminho depois do endereço da API
tools[].operations[].schema o JSON Schema dos argumentos; ao lado dele, qualquer palavra de ferramenta

code:

Chave O que diz
tools[].code o seu próprio código, para rodar isolado no seu próprio sandbox, cada função uma ferramenta; uma pasta ao lado do agent.yaml, ou uma URL Git fixada num commit. Verificado e guardado; executá-lo no sandbox ainda está por vir
tools[].language a linguagem do código; python, por enquanto
tools[].requirements o arquivo de dependências fixadas (name==1.2.3), instaladas quando o sandbox é montado
tools[].functions apenas estas funções; todas as públicas, quando não informado
tools[].state uma pasta dentro do projeto mantida entre as chamadas
tools[].mode call, uma execução por chamada de ferramenta, ou service, que o host mantém rodando
tools[].sandbox os limites do sandbox (a tabela do sandbox)

O seu sandbox::

Chave O que diz
tools[].sandbox.level standard, o padrão, que só pode apertar os limites padrão, ou advanced, que deixa o dono ampliá-los, cada ampliação aceita por uma pessoa no host
tools[].sandbox.network os hosts que o código pode alcançar; nenhum, quando não informado; any apenas no nível advanced
tools[].sandbox.secrets variáveis de ambiente passadas apenas a este sandbox, pelo nome, nunca pelo valor; nunca uma das do próprio Stalwart
tools[].sandbox.limits o tempo, a memória e os processos que uma execução pode usar (a tabela de limites)
tools[].sandbox.mounts pastas do host que o código pode ver, apenas no nível advanced
tools[].sandbox.allow os relaxamentos que a lista de permissões do host nomeia, apenas no nível advanced

Os limits: do sandbox:

Chave O que diz
tools[].sandbox.limits.seconds os segundos que uma execução pode levar; no máximo 60 no nível standard, e 0, sem limite, apenas com mode service
tools[].sandbox.limits.memory_mb a memória que uma execução pode usar, em megabytes; no máximo 1024 no nível standard
tools[].sandbox.limits.cpus os processadores que uma execução pode usar; no máximo 1 no nível standard
tools[].sandbox.limits.processes os processos que uma execução pode iniciar; no máximo 32 no nível standard

Cada um dos seus mounts::

Chave O que diz
tools[].sandbox.mounts[].path a pasta do host; nunca a raiz do host, as suas pastas de sistema, as do próprio Stalwart ou a do projeto, e nunca um caminho relativo
tools[].sandbox.mounts[].write true quando o código pode escrever ali

O piso. Estas são recusadas em todo nível, onde quer que apareçam, porque alcançariam a própria Stalwart ou os outros bots do dono:

Chave O que diz
privileged um contêiner privilegiado
capabilities capabilities do Linux adicionadas
devices os dispositivos do host
docker_socket o socket do Docker
host_network a rede do host
gate desligar o gate
audit desligar a auditoria
stop_button desligar o botão de parada

As palavras de uma ferramenta

Em name:, ou como @tool(...) em Python, ou ao lado de uma operação http::

Chave O que diz
writes a ferramenta muda alguma coisa, então a sua chamada é verificada contra as suas regras, e espera por uma pessoa onde elas mandam ou onde nada a permite
undo nomeia a ferramenta que desfaz esta escrita; uma execução que falha a chama, verificada como qualquer chamada
irreversible a escrita não pode ser desfeita; a sua confirmação diz isso, e um rollback a deixa no lugar
retry_safe chamá-la duas vezes com os mesmos argumentos faz o que chamá-la uma vez faz, então uma chamada de resultado desconhecido pode ser repetida
reads_outside o que ela devolve vem de fora, um e-mail ou uma página web, e não é confiável; o que vem depois carrega essa marca
sends_out ela pode enviar para uma URL ou outro destino; um argumento de destino é recusado em qualquer ferramenta que não diga isso
after a ferramenta só roda depois de cada ferramenta nomeada, na mesma sessão
not_after a ferramenta nunca roda depois de uma ferramenta nomeada, ou depois de qualquer coisa de fora quando ela nomeia untrusted
at_most a ferramenta roda no máximo este número de vezes numa sessão; {count, per} e uma lista deles, um por período, são verificados quando o arquivo é lido, ainda não aplicados
confirm_with o que se pergunta a uma pessoa antes de a chamada rodar, nas suas palavras; sobre uma ferramenta irreversível que não dê nenhuma, pergunta-se Run <tool>? Nothing undoes it once it has run.
requires_privilege só um agente com pelo menos este privilégio pode chamá-la
description o que a ferramenta faz, contra o que o seletor lê os turnos; a primeira linha da docstring quando não informado
checks condições que cada chamada precisa cumprir, como uma quantidade no máximo igual ao estoque; verificadas quando o arquivo é lido, ainda não aplicadas a uma chamada
filter numa leitura, quais registros ela repassa: each nomeia a lista, keep as condições que cada registro cumpre; verificado quando o arquivo é lido, ainda não aplicado
spend o máximo que um campo pode somar por período, com as ferramentas do mesmo pool dividindo uma contagem; verificado quando o arquivo é lido, ainda não aplicado
currency a moeda dos valores da ferramenta, como USD ou BRL; obrigatória com spend
outcome numa escrita, a leitura que a acompanha até o fim e como são feito e falhou; verificado quando o arquivo é lido, ainda não aplicado
argument_kinds o que um argumento é, como code, sql, path ou url, que as regras do caçador de bugs sobre valores escritos pelo modelo leem
sandboxed o código que a ferramenta roda é contido, o que baixa a severidade de um achado sobre ele
sanitised_by a verificação que limpa um argumento antes de a ferramenta usá-lo
confidential o que a ferramenta devolve é confidencial, e para quem
confidential_fields quais campos do que ela devolve são confidenciais
subject_argument o argumento que nomeia de quem são os dados que a ferramenta devolve
retrieves o armazenamento de onde a ferramenta lê, e o argumento que delimita as suas leituras
persists o armazenamento em que a ferramenta escreve
source de onde vem o código da ferramenta, que a regra do caçador de bugs sobre fontes não fixadas lê
server o servidor MCP que serve a ferramenta, com a sua versão ou digest
also_called palavras que uma pessoa usa para aquilo sobre o que a ferramenta age, lidas como as palavras do seu nome

Condições e limites numa ferramenta

Os checks, o filter, o at_most, o spend e o outcome de uma ferramenta dividem uma gramática. Cada condição trata de uma coisa e tem exatamente um operador:

Chave O que diz
checks[].field o valor de que a condição trata: um argumento, ou um campo do resultado, por nome ou caminho com pontos, como order.total; um caminho por uma lista, como items[].price, vale só onde todo item vale
checks[].total a soma sobre os itens de uma lista, como legs[].cost; compara como um número
checks[].count quantos itens uma lista tem, como legs[]; compara como um número
checks[].any uma lista de condições, das quais qualquer uma basta; uma lista simples de condições quer dizer todas elas
checks[].is o valor é igual a este
checks[].is_not o valor é diferente deste
checks[].one_of o valor é um de uma lista, ou do que uma chamada anterior devolveu, como {from: get_slots.slots[].start}
checks[].none_of o valor não é nenhum de uma lista, ou do que uma chamada anterior devolveu
checks[].at_least o número é este ou mais; o operando pode ser {from: <ferramenta>.<campo>}, o que uma chamada anterior na execução devolveu
checks[].at_most o número é este ou menos, como uma quantidade no máximo {from: check_stock.in_stock}
checks[].under o número é menor que este
checks[].over o número é maior que este
checks[].between o número, a data ou a hora está entre dois limites, o menor primeiro, como [10, 20]
checks[].before a data ou a hora é anterior a esta, escrita como 2026-10-16, 17:30 ou 2026-10-16T17:30
checks[].after a data ou a hora é posterior a esta
checks[].contains o valor contém este texto
checks[].because o motivo nas suas palavras, mostrado quando a condição barra algo
checks[].unknown o que faz um valor que ninguém conseguiu ler: fail, o padrão, ou pass, que só um filtro e o where de um trigger de mudança podem dizer, nunca uma verificação que deixa uma chamada passar

filter:, numa leitura:

Chave O que diz
filter.each a lista no resultado cujos registros a leitura repassa, terminando em [], como jobs[]
filter.keep as condições que cada registro precisa cumprir para ser repassado; dentro delas, {from_row: <campo>} é outro campo do mesmo registro

at_most: é um número de chamadas por sessão, ou um destes, ou uma lista deles:

Chave O que diz
at_most.count o máximo de chamadas no período, um número inteiro a partir de 1
at_most.per o período contado: call, run, session, minute, hour, day, week ou month; um limite por período

Cada um de spend:, com a currency da ferramenta:

Chave O que diz
spend[].field o campo do valor, como amount, ou legs[].cost para os itens juntos
spend[].at_most o máximo que os valores podem somar no período, um número acima de 0, na currency da ferramenta
spend[].per o período contado, como day ou month; os mesmos períodos de at_most
spend[].pool um nome; ferramentas com o mesmo pool dividem um contador

outcome:, numa escrita:

Chave O que diz
outcome.follow a ferramenta de leitura que informa como a escrita terminou; obrigatória, e precisa ser uma ferramenta declarada que não escreve
outcome.same o campo que liga a escrita e a leitura, como order_id
outcome.done_when as condições sobre o resultado da leitura que dizem que a escrita terminou; obrigatórias
outcome.failed_when as condições sobre o resultado da leitura que dizem que a escrita falhou
outcome.give_up_after os minutos de espera, pelo menos 1, antes de o desfecho ser desconhecido

Stores e módulos

Cada um de stores:, pelo nome do store:

Chave O que diz
stores.<name>.persistent true quando o que o armazenamento guarda sobrevive à execução, o que as regras do caçador sobre texto plantado leem (QG021)
stores.<name>.multi_tenant true quando vários tenants compartilham o armazenamento, então o que um escreve outro pode ler

Cada um de modules:, pelo caminho do módulo:

Chave O que diz
modules.<path>.version a versão em que um módulo de ações Colang é fixado
modules.<path>.digest o digest em que um módulo de ações Colang é fixado

Fatos

Cada um de facts:, pelo nome sob o qual o rulebook o lê:

Chave O que diz
facts.<name>.from o resultado de ferramenta de onde o fato é lido, como tool.field == value ou tool.field; nunca uma ferramenta que lê de fora
facts.<name>.same o argumento, a lista de argumentos ou o mapeamento de argumentos que liga o fato à chamada verificada, para que o status de um pedido nunca permita o reembolso de outro

Respostas e respostas prontas

replies::

Chave O que diz
replies.rules o arquivo de regras de resposta, como a página Reply rules do console o salva
replies.phrasings o arquivo de frases de resultado
replies.composer model: o modelo escreve a resposta e a verificação a confere; template: a resposta são as frases, e nenhum modelo a escreve
replies.language a língua das frases padrão: en ou pt

answers::

Chave O que diz
answers.index o índice de fontes que o stalwart sources build escreve
answers.k no máximo este número de trechos; 3 quando nem o arquivo nem o console dizem
answers.floor nenhum trecho com pontuação abaixo disto é usado, de 0 a 1; 0,3 quando nenhum dos dois diz
answers.composer extract, as próprias frases dos documentos; ou compose, o seu modelo escreve a partir delas

O trabalho do bot: job, tasks e triggers

Estas chaves descrevem o bot para o host que o executa. O pacote confere cada uma delas ao ler o arquivo; o que cada uma faz é com o host.

Chave O que diz
job a descrição do trabalho do bot: title, purpose, a quem ele atende em serves (customers, staff ou ambos), o seu manager e escalates_to (cada um, um papel), a sua team e o seu horário em hours
tasks as tarefas do bot, por nome: cada uma com o seu title, as tools que usa, o seu output (reply, document, draft ou action), onde começa na escada (watch ou suggest), os triggers que a iniciam, e se as suas mudanças rodam in_order ou all_at_once (steps)
triggers como o trabalho chega sozinho, por nome: cada um do kind email, form, schedule, webhook, change ou message; o timing de um agendamento é around, exact ou always_on; o where de uma mudança aceita condições ou um filtro; uma mensagem chega in teams, slack, whatsapp, instagram, messenger ou sms, numa account
ladder a régua que uma tarefa precisa ultrapassar para subir na escada (no mínimo proposals 50, agreement 0,95 e drift_free_days 14: pode subir, nunca descer) e a sample das execuções em Agir e avisar que uma pessoa revisa
drift quando o trabalho passado é repetido para vigiar desvios (replay: weekly ou on_model_change) e os thresholds a partir dos quais um sinal é relatado
site a página do próprio bot: on, off, ou o seu title e language

job

Chave O que diz
job.title o nome do job
job.purpose para que o bot serve, numa frase
job.serves a quem ele atende: customers, staff ou both
job.manager o papel que o gerencia; o host nomeia a pessoa
job.team quem lhe dá trabalho e quem aprova (a tabela da equipe)
job.hours o seu horário de trabalho (a tabela de horário)
job.escalates_to o papel para o qual vai um cartão parado

O seu team::

Chave O que diz
job.team.gives_work os papéis que lhe dão trabalho
job.team.approves os papéis que aprovam o que ele propõe

As suas hours::

Chave O que diz
job.hours.days os dias de trabalho, de mon a sun
job.hours.from a hora em que o trabalho começa, como HH:MM
job.hours.to a hora em que o trabalho termina, como HH:MM
job.hours.time_zone o fuso horário das horas, como Europe/London

tasks

Cada tarefa, pelo seu nome:

Chave O que diz
tasks.<name>.title o nome da tarefa em palavras; obrigatório
tasks.<name>.tools as ferramentas que a tarefa usa, cada uma declarada em tools
tasks.<name>.agent o agente que a executa; o primeiro, quando não informado
tasks.<name>.serves a quem a tarefa atende: customers, staff ou both
tasks.<name>.output o que ela produz: reply, document, draft ou action
tasks.<name>.starts_at o nível da escada em que ela começa: watch ou suggest; nenhuma tarefa começa mais alto
tasks.<name>.triggers os gatilhos que a iniciam, cada um declarado em triggers
tasks.<name>.run_window os minutos em que um host adormecido ainda pode iniciar uma execução devida, de 1 a 1440
tasks.<name>.form true quando as pessoas podem iniciar a tarefa à mão
tasks.<name>.steps in_order, ou all_at_once: todas as escritas acontecem juntas, ou nenhuma acontece

triggers

Cada trigger, pelo seu nome, é um kind e as chaves que esse tipo aceita:

Chave O que diz
triggers.<name>.kind como o trabalho chega: email, form, schedule, webhook, change ou message; ele decide as chaves ao lado
triggers.<name>.inbox o nome da caixa de entrada
triggers.<name>.urgent true quando o trabalho não espera o horário de trabalho
Chave O que diz
triggers.<name>.kind como o trabalho chega: email, form, schedule, webhook, change ou message; ele decide as chaves ao lado
triggers.<name>.audience quem preenche o formulário: customers ou staff
triggers.<name>.urgent true quando o trabalho não espera o horário de trabalho
Chave O que diz
triggers.<name>.kind como o trabalho chega: email, form, schedule, webhook, change ou message; ele decide as chaves ao lado
triggers.<name>.at a hora em que é devido, como HH:MM
triggers.<name>.days os dias em que é devido, de mon a sun
triggers.<name>.timing around (por volta da hora), exact ou always_on
triggers.<name>.urgent true quando o trabalho não espera o horário de trabalho
Chave O que diz
triggers.<name>.kind como o trabalho chega: email, form, schedule, webhook, change ou message; ele decide as chaves ao lado
triggers.<name>.secret a variável de ambiente do segredo de assinatura, como ${NAME}; nunca o próprio segredo
triggers.<name>.urgent true quando o trabalho não espera o horário de trabalho
Chave O que diz
triggers.<name>.kind como o trabalho chega: email, form, schedule, webhook, change ou message; ele decide as chaves ao lado
triggers.<name>.tool a ferramenta que ele consulta; ele nomeia esta ou resource, não as duas
triggers.<name>.resource o recurso que ele assina; ele nomeia este ou tool, não os dois
triggers.<name>.every os minutos entre consultas, de 1 a 1440
triggers.<name>.where condições sobre os campos do resultado consultado, como {field: open_count, at_least: 1}
triggers.<name>.urgent true quando o trabalho não espera o horário de trabalho
Chave O que diz
triggers.<name>.kind como o trabalho chega: email, form, schedule, webhook, change ou message; ele decide as chaves ao lado
triggers.<name>.in o canal: teams, slack, whatsapp, instagram, messenger ou sms
triggers.<name>.account a página, o número ou o workspace: um nome, ou ${NAME} para um que o host guarda
triggers.<name>.urgent true quando o trabalho não espera o horário de trabalho

ladder, drift e site

Chave O que diz
ladder.bar o que uma tarefa precisa mostrar para subir um nível: proposals, agreement e drift_free_days, que podem ser elevados, nunca reduzidos abaixo de 50, 0,95 e 14
ladder.sample a fração das execuções Act-and-tell que uma pessoa revisa; 0,1 quando não informado
Chave O que diz
drift.replay weekly, ou apenas on_model_change
drift.thresholds quanto cada sinal pode mudar antes de ser drift: tools, plan_shape, decisions, plan_lock_stops, refusals, untraced_claims
drift.baseline_days os dias de execuções contra os quais os sinais são comparados, de 1 a 90
Chave O que diz
site.title o título do site
site.language o idioma do site: en ou pt
site.colour a cor principal do site
site.logo o logotipo do site

Um template

Um template é um agent.yaml do qual uma pessoa parte. Ele acrescenta:

Chave O que diz
first_bot true quando o modelo inicia Make my first bot
needs as entradas de catálogo que o modelo usa, cada uma com o seu login (a próxima tabela)
optional entradas que ele oferece e sem as quais funciona

Cada uma das suas needs::

Chave O que diz
needs.<name>.entry o id da entrada de catálogo; obrigatório
needs.<name>.sign_in como a entrada faz login: oauth, service ou none
needs.<name>.why por que o modelo precisa dela, numa frase que o dono lê
needs.<name>.route como os seus dados são alcançados: api, aggregator, owner_feed ou owner_browser

gateway.yaml

O gateway (capítulo 37) lê estas do arquivo com que é iniciado, e se recusa a iniciar com qualquer outra:

$ stalwart gateway --config gateway.yaml
Chave O que diz
catalogue o catálogo do tenant contra o qual o gateway verifica cada chamada, no formato do modelo extraído; obrigatório
upstreams qual servidor MCP guarda cada ferramenta, pelo nome da ferramenta; "*" para as demais
agents um token por agente, cada ${NAME} vindo do ambiente; cada agente se conecta com o seu, e pelo menos um é obrigatório
admin_token o token que a rota de rollback aceita; a rota fica desligada quando ele não está definido
audit o arquivo ao qual cada decisão é acrescentada
elicitation_timeout os segundos que uma pessoa tem para responder a uma pergunta que a chamada faz; 600 quando não informado
listen o endereço e a porta em que ele serve; 127.0.0.1:8800 quando não informado

Os limites

  • A tabela de uma chave diz o que o pacote lê. Algumas chaves são conferidas e guardadas mas ainda não aplicadas -- checks, filter, spend e outcome numa ferramenta, e o código de uma fonte code:, que ainda não é executado -- e as suas linhas o dizem.
  • As chaves de fundação são conferidas aqui e aplicadas pelo host que executa o bot.