---
name: mural
description: Operate Meta Agent Tools — catalog, private Claude Code inventory, exact hash review, optional hooks and watch alerts. Use for Meta Agent Tools, agentalog.com, OKF Index or the mural workspace.
---

# Meta Agent Tools — skill para agentes

**Live:** https://agentalog.com  
**UI humana:** busca dentro de cada tipo → lista com stats → ficha em sub-aba do tipo (README na abertura) → instalação sob demanda. Agentes começam em `/developers` e consomem API/OpenAPI/MCP; não dependem do HTML ou dos exemplos de instalação de terceiros.

**Descoberta:** `GET /api/` · `/llms.txt` · `/openapi.json` · `GET /v0.1/servers`  
**SEO (13/09/2026):** todo registro é rastreável — página HTML por registro em `/l/<id>` (linha da API + README + JSON-LD, sem JS), índice navegável `/catalog/` (tipo → assunto ou publicador → páginas de 50 → registro), `/sitemap.xml` (páginas e nós do índice) e `/sitemap-listings.xml` (todo registro, em shards de 50 mil gerados no c3). IndexNow = CI.

**Catálogo:** `src/lib/apidocs.js`  
**MCP (remoto, recomendado):** `POST https://agentalog.com/mcp` — Streamable HTTP, JSON-RPC 2.0.
Pluga direto no cliente MCP; não precisa deste repositório. Confira com `GET https://agentalog.com/mcp`.
**MCP (stdio, local):** `node ~/src/mm/scripts/mcp/server.mjs --product mural`

Paridade UI/API/skill/MCP no mesmo commit: `AGENTS.md` do produto e `AGENTS-API.md` da raiz.

## Auth

- `POST /api/guest` → `X-Guest-Token: mr_…` (like, comentário, submissão paga e a lista "Mine");
  no navegador o convidado mora também no cookie HttpOnly `mr_guest`. A emissão tem teto por rede
  (20 por hora). A tela abre a submissão e "Mine" sem pedir login; o registro criado fica com esse
  visitante até a pessoa escolher vincular a conta.
- Registrar: sessão da conta MM (humano, no navegador: entra em `/conta/global`; cookie HttpOnly +
  `X-CSRF-Token` de `/api/auth/bootstrap`; grátis) **ou** como agente, também grátis enquanto a cobrança está desligada (x402 $0.10 é o preço de referência). Logo depois de entrar, a tela
  da conta faz o claim (`POST /api/auth/claim`): registros, likes e comentários do convidado passam para a
  conta — o like que a conta já tinha no mesmo registro fica com o convidado. Escrita com o cookie de uma
  sessão que acabou responde 401 `session_ended` (entre de novo), nunca vira o convidado.
  `POST /api/auth/start` e `/verify` respondem 410; não há bearer de conta para agentes.
- Com a cobrança ativa, o token de visitante preserva o acesso ao pagamento. Com ela desligada,
  o envio é grátis, com ou sem conta.
- ✅ **Valida antes de cobrar.** Corpo recusado (400) e cota estourada (429) vêm ANTES do 402:
  nenhum pagamento liquida por registro que já se sabe que não entra. Corpo válido sem pagamento
  recebe 402 com o preço quando a cobrança estiver ativa.

## Operações

| Tool | HTTP |
|------|------|
| `api_index` | `GET /api/` |
| `list_listings` | `GET /api/listings` (**varredura inteira:** siga `next` até `null` — sem `q` é cursor (`next_cursor`/`cursor`, ordens `recent`, `stars`, `nome`) e não há teto; `offset` continua aceito, sem teto, mas o banco lê as linhas saltadas; `kind=mcp\|skill\|plugin\|okf`, `origin=official\|smithery\|casdoor\|indices\|marketplace\|directory\|gemini\|majiayu\|seed\|community` (`indices` = servidor MCP que só os índices de terceiros conhecem, com o que cada um mediu em `mcp_index_signals`), `q` — busca de texto pelo índice FTS5: toda palavra é exigida (nome, resumo, descrição, identificador de origem e excerto do README), ordem por bm25 com o nome pesando mais, vezes 1 + 0,05·ln(1 + estrelas) + 0,1 se houve push em 180 dias + 0,1 se há README, empate por estrelas; kind/topic/transport words become filters unless `interpret=0`, a cauda `low` (sinal baixo, selo LOW) vem em toda lista DEPOIS das `live`; `low=0` a deixa de fora) |
| — | Para pessoas: a home com recorte na URL (`/?kind=mcp&topico=finance`, `/?ns=io.github.x`, `/pt?…`) sai do servidor com título, `<h1>`, description e canonical do recorte (F6.1); a abertura lista os recortes prontos por assunto com a contagem do catálogo. `ns` é o publicador: o namespace reverso do registro oficial (`io.github.<conta>` para quem publica pelo GitHub; o chip mostra sem o prefixo) — o recorte `?ns=<ns>` é a página do publicador (F6.2): cabeçalho com nome, quantos registros vivos e estrelas somadas, vindos de `publicador` no `GET /api/facets?ns=<ns>` (só com um `ns`), e o link "todos deste publicador" limpa o resto do recorte. A canônica do recorte que tem nó no índice (`?kind=`, `?kind=&topico=`, `?ns=`) é o nó de `/catalog/`; a página de cada registro é `/l/<id>` |
| `list_mcp_servers` | `GET /v0.1/servers` (subregistry MCP) |
| `get_listing` | `GET /api/listings/:id` — `topico` é inferido do texto (regra de palavras e, onde ela não acha nada, modelo de linguagem com confiança ≥ 0,8; ninguém declara); quando veio do modelo, `payload.topico_llm` traz `{topico, confianca, trecho, v}` com o trecho que justificou |
| `get_listing_readme` | `GET /api/listings/:id/readme` — só quando a linha da lista ou a ficha traz `readme_api` (ausente = não coletou; a rota responde 404); `readme_bytes` na lista diz o tamanho antes de abrir. `readme_fonte` na ficha e `fonte` na rota dizem de onde veio: `repo` (README do repositório GitHub) ou `npm`/`pypi` (README do registro do pacote, quando não há repositório) |
| — | `GET /api/volatil?ids=a,b` — downloads, instalações e versão frescos (cache de 15 min); a ficha já os aplica |
| `listing_history` | `GET /api/listings/:id/history` — a linha do tempo do repositório do registro (F7): até 5 eventos, do mais recente para o mais antigo, `{em, tipo, de?, para?}` com `tipo` em `abandono` (12 meses sem push), `sumiu`, `renomeado`, `readme_mudou`, `manifesto_mudou`; lista vazia = nada mudou desde que a série começou (o registro existe); a ficha traz o mesmo em `historico` |
| `feed_find` | `GET /api/feeds?dominio=<domínio>` — **este site publica feed?** Devolve todo feed conhecido daquele domínio |
| `feed_search` | `GET /api/feeds` — índice de feeds RSS/Atom/JSON, listas OPML e sites que só viram feed por uma ponte (RSS-Bridge). Filtro e texto na MESMA consulta: dentro de um parâmetro os valores são OU, entre parâmetros são E. `q`, `tipo=rss2\|rss1\|atom\|json`, `midia=audio\|video`, `comunidade=fediverse\|indieweb\|mastodon\|friendica\|wordpress\|funkwhale`, `recurso=content\|itunes\|podcast\|media\|slash\|wfw\|georss`, `origem=index\|blogroll\|bridge`, `lista=web\|catalogo\|planeta`, `ano=<AAAA>` (ano do item mais novo visto; `0` = sem data). Sem `q`, a ordem é a densidade medida e `next_cursor` é keyset — siga `next` para varrer tudo. Contagem por valor em `GET /api/feeds/facets`; ficha em `GET /api/feeds/:id` e página em `/feeds/<id>` |
| `feed_posts` | `GET /api/feeds/:id/items` — **o que esse feed publicou**, como a NOSSA fila leu: até 40 posts na ordem do feed, com `titulo`, `quando`, `autor`, `resumo`, `tags` (categorias do autor), `media` (o anexo do episódio) e `comentarios`, SEM o corpo. `bytes` diz quanto texto há guardado antes de abrir. 200 com `itens` vazio = feed conhecido que a fila ainda não leu; 404 = id que não é nosso |
| `feed_post` | `GET /api/feeds/:id/items/:ord` — **um post inteiro** (`ord` 0 é o mais novo): `conteudo` em Markdown e `conteudo_html` com a formatação do autor passada por lista de permissão. Os dois nascem na LEITURA do feed, não no pedido — nenhum dos dois carrega script. `link` leva ao original |
| — | É a NOSSA cópia, na NOSSA agenda, endereçada por id deste índice — nunca por uma URL que você entrega. Não somos proxy e não buscamos nada em seu nome |
| — | Para pessoas: `/feeds/` lista os recortes (podcasts, texto completo, IndieWeb, listas de leitura…), cada um com página própria e paginação por link real |
| `briefings_topics` | `GET /api/briefings` — **Briefings**: links de engenharia das pastas públicas dos bookmarks do dono no X (CUDA, inferência, RAG, agentes…), cada um com a fonte, o tipo dela e um resumo de duas linhas em inglês e português. Os tópicos com a contagem e os 30 mais recentes; `?resumo=1` só as contagens; `inscricao.aberta` diz se o e-mail semanal abriu |
| `briefings_links` | `GET /api/briefings/itens?topico=&tipo=&page=` — o recorte por tópico e tipo da fonte (`paper`, `repo`, `model`, `dataset`, `demo`, `video`, `docs`, `article`, `post`), 20 por página, com a contagem de cada valor (cada grupo contado com o filtro do OUTRO); siga `_links.next`. Um tópico em `GET /api/briefings/:slug?page=N` |
| — | `POST /api/briefings/subscribe` — entra na lista do briefing semanal (e-mail, tópicos e língua; um registro por e-mail, pedir de novo troca os tópicos). Antes da primeira edição a lista vai ao CommsHarbor, que manda a confirmação (dupla confirmação) e o descadastro em um clique; uma inscrição a cada 10 s por rede. Para pessoas: `/briefings/` e `/briefings/<slug>/`, sem JS |
| `mcp_index_signals` | `GET /api/indices/sinais?listing=<id>` — **o que os índices de MCP independentes mediram deste registro**: Truespar, Wellknown, agent-tools.cloud, Link (hultra), Paygent, Neuronto e Nerq, um sinal por índice com `credito` (nome, site, licença), `mede` (o que aquele índice observa: handshake, sonda de chamada, reputação paga, vida do repositório, só descoberta), `estado` na palavra da casa (`vivo` · `fora` · `parado` · `abandonado` · `apagado` · `desconhecido`) e `estado_na_fonte` na palavra deles. Casa só pelo MESMO objeto: nome no registro oficial, URL exata do endpoint ou `owner/repo` — domínio não casa. Coleta 1×/dia no nosso host; atribuição obrigatória, e o derivado do Link sai sob ODbL |
| `mcp_index_search` | `GET /api/indices/itens` — navegar os sinais: `fonte`, `estado`, `casou=0` (o que os índices conhecem e o catálogo ainda não) ou `casou=1`, `q`, `limit`/`offset`. As fontes, a licença de cada uma, a contagem por estado e a última rodada: `GET /api/indices` |
| `a2a_agent_search` | `GET /api/a2a/agents` — **agentes A2A** (quem publica `AgentCard`): coleção própria, fora de `/api/listings`, juntada de registros públicos (A2A Registry, Global A2A Registry, Agenstry) e servida como vem, sem fila de aprovação — uma linha por domínio do cartão, com `fontes` e `creditos` (nome, site e licença de cada registro; a do Agenstry, CC-BY-4.0, exige atribuição). Filtros: `q` (trecho do nome, descrição, chave, publicador ou skills, em qualquer caixa), `saude=sim\|nao\|sem_medida`, `protocolo` (`0.3`, `1.0`…), `fonte=a2a_registry\|a2a_global\|agenstry`, `tag`, `publicador`, `skills=1`; dentro de um parâmetro OU, entre parâmetros E. Ordem: com endereço, com skills, em mais registros, saudável, mudança recente. `limit` 1–50 e `offset` até 20.000 — siga `_links.next` |
| `a2a_agent` | `GET /api/a2a/agents/:chave` — a ficha do agente: todas as skills do cartão, `capacidades`, a versão como o cartão escreveu, documentação, ícone e a primeira vez que o vimos; 404 `not_found` para chave que não indexamos |
| — | `GET /api/a2a/acervo` — o que veio JUNTO dos registros (MCP, skill, API paga, workflow, repositório, domínio citado), com `no_catalogo` dizendo se o catálogo já tem (mesmo repositório ou mesma URL): `kind`, `fonte`, `q`, `casou=0\|1`, `offset` até 50.000. `GET /api/a2a/facets` (contagens por saúde, protocolo, fonte, tag e publicador) e `GET /api/a2a/stats` (registros brutos por fonte, crédito, licença e a última rodada de cada fonte) são públicas, fora da franquia MAT. A resposta pronta fica no disco entre reinícios; a agenda é conferida a cada ~9 min, recontando após mudança de rodada/checkpoint ou uma vez por dia. Durante renovação, a última resposta confirmada vale por até 6 h. A casca responde 308 para `https://api.agentalog.com` — siga o redirect |
| `listing_security` | `GET /api/listings/:id/security` — revisão de MCP remoto ou SKILL.md. MCP: nível, sinais medidos, servidor, domínio, ferramentas e mudanças. Skill: `tipo: skill` e `revisao` com arquivo, linha, trecho e contexto. Não executa comandos nem revisa scripts citados. Fato medido, não certificado. Sem leitura ou fonte suportada: `conferido: false`. |
| `check_tool` | `GET /api/check?url=<endereço>` — **antes de instalar um MCP remoto, mande o endereço**: os sinais do próprio endereço (túnel de consumo, `http://` sem TLS), os registros do catálogo com esse endereço (`exato`) e com o mesmo host, cada um com o nível e os sinais da última visita, e os fatos do domínio. Nunca visita o endereço. Fora do catálogo: `no_catalogo: false` e `registrar` (a revisão começa no registro) |
| `listing_tools` | `GET /api/listings/:id/tools` — as ferramentas e as instruções que o servidor anunciou na última visita (nome, título, descrição, schema de entrada, anotações). Ler a rota nunca contata o servidor; 404 `tools_not_read` = ainda não lido |
| `list_watched_tools` | `GET /api/me/vigia` (conta ou carteira) — MCP e skills vigiados, com o nível de agora, a cota e as ofertas |
| `watch_tool` | `POST /api/me/vigia` `{listing_id}` — MCP remoto vivo ou SKILL.md público suportado, com a coleta ativa. Agenda diária sujeita à cota da fonte. Conta recebe e-mail; carteira acompanha pela API. Cookie exige `X-CSRF-Token`. 3 grátis por dono; sem vaga, 402 da vaga avulsa. Fonte sem suporte é recusada antes da cobrança. |
| `unwatch_tool` | `DELETE /api/me/vigia/:id` — parar de vigiar; a vaga fica livre |
| `buy_watch_plan` | `POST /api/me/vigia/plano` `{oferta}` — `vaga` (1), `equipe` (50) ou `empresa` (500) vagas por 30 dias, sem renovação automática; Equipe e Empresa também permitem até 10 projetos privados com 3 instalações ativas por projeto. 402 com o preço, pague com x402 ou crédito e repita |
| `claude_code_allowlist` | `GET /api/me/vigia/claude-code` — a lista vigiada como configurações gerenciadas do Claude Code: `allowManagedMcpServersOnly`, `allowedMcpServers` (`serverUrl` com `*` no fim) para o que não está em `risco`, `deniedMcpServers` para o que está, e um `claude mcp add` por servidor permitido |
| `go_listing` | `GET /api/go/:id` (302) |
| `like_listing` | `POST /api/listings/:id/like` |
| `list_comments` | `GET /api/listings/:id/comments` |
| `create_listing` | `POST /api/listings` (conta grátis · visitante e agente sem pagamento enquanto a cobrança está desligada, sem pedir login; um por dia, três na fila). Skill: URL do `SKILL.md`. Nasce `pending`; o 201 traz `status_api`. |
| — | `GET /api/me/listings` com o token `mr_…` ou a conta lista os próprios registros, inclusive os pendentes; `PATCH /api/listings/:id` aceita o mesmo dono. |
| `listing_status` | `GET /api/listings/:id/status` — a decisão da fila (`pending` · `live` · `low` · `hidden` · `blocked`) e o `reason` quando a moderação deixou um, sem credencial e sem o conteúdo; cache 60 s, consulte a cada poucos minutos |
| `submit_okf` | `POST /api/okf/ping` (OKF Index — grátis, sem conta; a mesma fila de `okfindex.com/api/ping`; ver abaixo) |
| `billing` | `GET /api/billing` |
| `contact` | `POST /api/contact` — grátis para gente e agente, sem captcha nem pagamento; uma mensagem a cada 10 s por rede (a que chega antes espera a vez) |

Admin (`ADMIN_EMAIL` / `ADMIN_TOKEN`): `GET /api/me` traz `carga.falhas[]`; `GET|POST /api/admin/carga` dispara lote e marca visto; `GET /api/admin/listings/:id` lê o envio completo, mesmo fora da primeira página da fila; o link `/?fila=<id>` abre seus dados na tela, após entrar como admin. `POST /api/admin/listings/:id` decide (`approve` · `hide` · `block`) com `reason` (obrigatório em `block`, até 300), que quem submeteu lê em `listing_status`, e aceita `fix` (`name`, `tagline`, `body`, `category`) junto de `approve` para corrigir antes de publicar — nunca a URL. Sem tool MCP — é operador.

F3: só SKILL.md público em `raw.githubusercontent.com`. `revisao.achados` contém até 50 achados
com `codigo`, `nivel`, `contexto`, `caminho`, `linha`, `trecho`, `abreviado` e `redigido`.
As regras procuram leitura de segredo, download com execução, envio externo, caracteres invisíveis,
texto codificado longo e permissões amplas. Exemplos e proibições não aumentam o nível.
O nível inclui os achados além do teto da vista. Valores sensíveis são ocultados.
Skills vigiadas, visitadas, com estrelas e novas têm prioridade dentro da cota do GitHub.
`skill_na_fila`, `skill_sem_fonte` e `skill_em_preparo` explicam a ausência de revisão.
Avisos cobrem mudança de texto e de sinais. A lista gerenciada do Claude Code contém só MCP.
F3 publicada em `83832fc61` e `ee6165e7d`, com cota da fonte e amostra manual de 100 skills.
A amostra não comprova revisão de todo o catálogo.

## Inventário local

`GET /api/` informa `docs.local_monitor`, com o arquivo e o manifesto SHA-256.
Baixe `https://agentalog.com/downloads/mat-monitor-0.4.1.mjs` e o manifesto `.mjs.json`.
Confira o hash antes de executar. Use Node.js 26. Estado local exige Linux e `/usr/bin/flock`.

`preview --project CAMINHO` imprime os metadados da coleta. Nada é enviado ou executado.
`init` usa as mesmas opções e salva as raízes e o primeiro lote em estado privado.
`scan --project CAMINHO` reutiliza as raízes salvas e guarda apenas mudanças.
`outbox --project CAMINHO` salva ações pendentes e mostra o próximo lote. `status` mostra a fila.
Use `--help` para raízes pessoais, plugins, idioma e pasta do estado.

Não envie caminhos locais, texto, argumentos ou segredos. Não envie o arquivo privado de estado.
Cobertura incompleta preserva os itens anteriores. Fila: até 16 lotes e 4 MiB.
Perda do estado salvo bloqueia a operação. Restaure a cópia; não reinicie a referência.
Entre na conta e abra **Mine**. Crie um projeto e baixe a credencial privada da instalação.
Use `chmod 600 credencial-mat.json` antes de importar.
`connect --project CAMINHO --credential-file credencial-mat.json --accept-preview` confere a
referência remota e salva a credencial. Não envia inventário.
`sync --project CAMINHO` envia até quatro lotes persistidos para `https://api.agentalog.com`.
Falha mantém o lote. Recibo perdido repete o mesmo ID, sem outro evento ou débito.
A credencial vale por até 30 dias ou até o fim do passe vigente, o que ocorrer antes.
Ela pode ser revogada em Mine.
Ela não cria projetos, emite outra credencial, aprova ferramenta ou compra passe.
Cookie humano controla `/api/monitor/projetos`; não use chave ampla.
`GET` devolve `projetos` e `limites` com `projetos`, `instalacoes` e `expira_em`.
Conta básica pode criar três projetos. Passe Equipe ou Empresa vigente permite dez.
Cada projeto admite três instalações ativas. Somar vagas avulsas não amplia projetos.
O dono da conta revisa as versões. O passe não cria membros ou aprovações compartilhadas.
Após vencer, projetos existentes continuam legíveis, revisáveis e exportáveis.
`GET /api/monitor/projetos/:projeto/inventario?historico=1` inclui referências arquivadas.
Devolve até três instalações da época atual: ativas primeiro, depois as arquivadas mais recentes.
`ativa:false` permite somente leitura. Credencial vencida não envia, aprova ou recebe política.
Referências entram na limpeza por lotes 45 dias após o vencimento da credencial.
Novos projetos e conexões voltam aos limites básicos. Nenhum dado é apagado por vencimento.
Em Mine, associe um item recebido a uma vigia existente do catálogo.
Confira se o item e a vigia representam a mesma ferramenta. Não associe pelo nome.
`GET /api/monitor/projetos/:projeto/vigias` lê vínculos e vigias ativas da conta.
`POST` no mesmo caminho recebe `{instalacao,item,alvo}` e exige cookie humano e CSRF.
Use `alvo:null` para remover o vínculo. Vigia vencida deixa o vínculo inativo.
Retry exato não grava. Mudanças dividem o teto global de 512 registros por dia.
O vínculo não cria vigia, cobrança ou aprovação. As próximas diferenças retêm os vínculos
ativos no momento da gravação. Esse contexto não prova envio de e-mail.
Em Mine, abra **Changes and notices** para ler eventos e conferir o estado atual do aviso.
`GET /api/monitor/projetos/:projeto/eventos?desde=0&limite=5` aceita o cookie da conta.
Com a consulta opcional configurada, aceita também a chave restrita `mmq_` do mesmo projeto.
Não combine essa chave com cookie ou `X-API-Key`. A credencial de instalação não lê eventos.
Em Mine, abra **API access**, consulte as chaves e baixe `consulta-monitor.json`.
Proteja esse arquivo com modo 0600. O segredo é entregue uma única vez.
Use seu `token` como `Authorization: Bearer …` na origem `https://api.agentalog.com`.
Não encaminhe o segredo a outro host e não siga redirecionamentos.
O módulo concede só leitura de eventos, sem ingestão, aprovação, compra ou emissão de chaves.
Até três chaves ativas por projeto, com validade de 30 dias.
Criar e revogar exige sessão humana recente, CSRF e `{}`.
`GET|POST /api/monitor/projetos/:projeto/consultas` lista metadados ou emite uma chave.
`POST /api/monitor/projetos/:projeto/consultas/:consulta/revogar` impede novas leituras.
A lista não devolve token ou digest. Não registre o segredo em conversa ou log.
Se a emissão ficar incerta, consulte e revogue a chave não usada antes de emitir outra.
O servidor revalida a autorização da conta em cada leitura. Nenhuma dessas rotas tem tool MCP.
Com o webhook opcional configurado, abra **Change webhook** em Mine.
`GET /api/monitor/projetos/:projeto/webhooks` lê destinos e dez entregas recentes.
A lista mostra domínio, sem caminho da URL ou chave.
`POST` no mesmo caminho recebe `{id,url}` com sessão humana recente e CSRF.
Use ID aleatório de 32 hex minúsculos. Se o resultado ficar incerto, repita só
o mesmo ID e a mesma URL. Não há retry automático de criação no navegador.
O download contém a chave `whsec_`. Guarde-a privada, fora do repositório e dos logs.
Um destino HTTPS público por projeto dura 30 dias e recebe um teste assinado.
Não use IP, credencial na URL, query, fragmento, rede privada ou redirecionamento.
O receptor confere assinatura e horário Standard Webhooks. Depois elimina repetição
pelo `webhook-id` antes de agir. Recibo perdido pode repetir a entrega.
Mudanças usam `webhook-inventario-1` com o mesmo evento confirmado da API.
O teste usa `webhook-teste-1`, sem inventar evento de inventário.
Referência inicial e ações aprovadas rotineiras não geram envio.
Cada entrega admite seis tentativas no teto diário compartilhado com o e-mail.
`POST /api/monitor/projetos/:projeto/webhooks/:webhook/revogar` recebe `{}` e
impede novos envios. Um pedido já em trânsito ainda pode chegar.
Recupere evento ausente pelo cursor. O webhook não aprova ferramenta.
Essas rotas exigem o dono humano. Nenhuma delas tem tool MCP.
Guarde `cursor`. Informe cobertura incompleta e histórico expirado, inclusive o erro 410.
`avisos_ativos:false` informa fila indisponível. Não afirme que o correio está ligado só pela fila.
`aviso.estado:enviado` indica aceitação pelo provedor, sem prova de chegada à caixa.
`incerto` impede reenvio automático. A leitura não grava confirmação nem faz outro envio.
Com a fila e o correio configurados, diferenças após a referência inicial podem gerar e-mail.
Novos itens, remoções, upgrades e ações que exigem atenção não dependem de vínculo ao catálogo.
Ações aprovadas rotineiras permanecem no cursor, sem e-mail.
Uma fonte incompleta nova ou alterada gera contexto de aviso e conserva a referência.
Repetir a mesma lacuna não cria outro aviso.
O texto mostra valores de antes e depois e distingue tentativa de execução observada.
Antes do envio, o servidor revalida instalação e conta. Links do catálogo são contexto opcional.
Cada intenção de envio reserva uma das 512 tentativas globais por dia UTC na mesma transação.
Retries certos de não envio usam esse teto. Cota esgotada retorna 429 e conserva o aviso.
Orçamento ausente ou inválido retorna 503. Nenhum e-mail é autorizado nesse caso.
Revogue a instalação para impedir esses avisos.
As rotas `/api/monitor/avisos/{reivindicar,iniciar,finalizar}` são só do serviço de correio.
Exigem credencial dedicada `mmn_`; não use cookie humano, token `mmi_` ou chave de operador.
Essas rotas não têm tool MCP e não concedem aprovação.
Essas rotas não têm tool MCP: escolher uma vigia exige autoridade humana.
Em Mine, exporte o inventário atual ou exclua um projeto.
`POST /api/monitor/projetos/:projeto/excluir` exige sessão humana recente, CSRF e `{}`.
Confira `pendente`. Novos envios param. Lotes restantes continuam na limpeza horária.
Arquivos locais, vigias existentes e créditos comprados permanecem.
O token restrito usa `/api/monitor/instalacao` e `/api/monitor/inventario`.
Com a revisão configurada, abra **Review versions** na instalação em Mine.
Compare o candidato exato com a referência anterior. Aprovação e suspensão exigem
cookie humano, entrada recente e CSRF. Modelo e credencial de instalação não aprovam.
Cobertura incompleta impede aprovação. Mudança conserva a referência anterior.
Leia `/api/monitor/projetos/:projeto/instalacoes/:instalacao/revisoes`.
Envie a decisão com o candidato, sequência, versão e ID único retornados ou descritos na API.
Guarde o mesmo ID e corpo em retry. Não repita uma decisão incerta com outro ID.
`policy --project CAMINHO` recebe `/api/monitor/politica` com a credencial restrita.
O cliente confere Ed25519 com sua chave pública fixa. Não aceite outra chave do servidor,
de variável de ambiente ou de arquivo local.
`check --project CAMINHO --item ID` recolhe o item e as configurações selecionadas.
Ele compara os candidatos exatos com suas decisões.
Política expira em até 15 minutos; revogação on-line impede renovação.
Uma política salva pode continuar válida até expirar. Confira esse limite antes de usar.
Falha, expiração e diferença impedem confirmação. O comando não executa nem ativa ferramentas.
Configuração tem decisão própria pelo hash e metadados.
Mudança de permissão ou telemetria exige nova revisão para chamadas cobertas.
Regras, valores de ambiente e caminhos ficam locais; só hash, categorias e domínios são enviados.
A coleta não resolve a precedência de configurações ou opções da linha de comando.
Configuração aprovada removida impede confirmação até sua restauração e revisão.
MCP remoto informa declaração, sem congelar seu código.

`hooks-preview --project CAMINHO --mode observe` mostra a instalação e os campos dos eventos.
`hooks-install --project CAMINHO --mode observe --accept-preview` instala só hooks do projeto.
O padrão é observar. `--mode enforce` exige política assinada vigente e recusa chamadas cobertas
com hash, configuração ou origem sem aprovação. Modelo não concede permissão.
`hooks-status --project CAMINHO` informa configuração, fila, política e orçamento de envio.
`hooks-remove --project CAMINHO` remove só os grupos exatos adicionados pelo monitor.
Instalação e remoção têm cópia privada, retomada e preservação de mudanças alheias.
Os eventos distinguem sessão, configuração, tentativa, execução observada e falha.
Nenhuma conversa, argumento, saída ou caminho completo é enviado.
Entrega automática usa sessões e Stop; não inicia processo em segundo plano.
Teto diário: 96 tentativas e 20 pedidos de lote, com intervalo mínimo de 15 minutos.
Use `--delivery manual` na instalação para exigir `sync`.
`lote-1` permanece válido. `lote-2` exige de 1 a 64 ações e receptor opcional ativo.
Novas ações compartilham 512 registros/dia. Replay exato não cria outra ação.
Hooks desativados, binário ausente ou prazo externo podem permitir a ação.
Inicialização de MCP, processos arbitrários e rede ficam fora desse controle.
O caminho Skill do modelo sem origem confirmada é recusado em `enforce`.
Não afirme bloqueio universal, execução por uma tentativa ou certificado de segurança.

O servidor entrega os avisos quando a fila e o correio estão configurados.
O download `0.1.0` continua disponível, só local.
O download `0.2.0` conserva seu hash publicado. `0.2.1` mantém os mesmos comandos,
estado e credencial. O texto de apresentação não altera sua compilação.
`0.3.0` acrescenta `policy` e `check` à mesma conexão.
Os quatro downloads anteriores conservam os bytes e manifestos publicados.
`0.4.0` acrescenta hooks opcionais, configuração e eventos nativos.

Worker do c3 (`MODERATION_TOKEN` próprio): `GET|POST /api/internal/moderation` lê uma submissão
pendente e confirma `approve` ou `review` sobre o snapshot exato. A aprovação automática só
alcança MCP remoto com fonte verificável; dúvida mantém o registro privado e avisa o dono.

Fora das tools: as contagens do catálogo por tipo, procedência, categoria e estado saem em
`GET /api/facets` (é o que alimenta os filtros da tela); comentário seu se apaga com
`DELETE /api/comments/:id` — comentário alheio responde 404, não 403. Curtida, comentário e visita
de cada registro que tem algum saem em `GET /api/contadores` (lidos de onde são gravados, cache de
1 min). App e catálogo usam a mesma tabela de contadores, sem atraso da coleta;
tráfego de smoke não conta em nenhum deles.

`GET /coleta/readme/:arquivo` é a cópia Markdown já presente no disco da origem
(por exemplo, `owner/repository.md`), sob a mesma quota e passe MAT. Prefira
`get_listing_readme` e `/api/listings/:id/readme`: incluem metadados e o histórico
anterior nos arquivos do app (o antigo R2) quando o objeto ainda não está no disco.

## OKF Index (kind `okf`)

Pacotes do Open Knowledge Format (OKF) organizam conhecimento em arquivos Markdown com
metadados YAML no início, chamados frontmatter. O agente segue os links para os conceitos de
que precisa. Este índice lê o arquivo raiz e confere `okf_version`. A especificação não define convenção de descoberta nem
registro; o **OKF Index** (https://okfindex.com — busca, ficha, estatística e MCP próprios, mesmo
backend) é a resposta a isso, e o mural indexa e exibe os mesmos bundles. Só entra bundle cuja raiz foi LIDA e tem `okf_version` —
não é lista de repositório que menciona OKF. **Não fixamos versão:** vale o `okf_version` que o bundle declarar (medido 07/09/2026: 0.1 e 0.2 convivem, ~40% já em 0.2).

- **De onde vêm:** as raízes públicas no GitHub (varredura fatiada — medido 07/09/2026:
  **2.818 bundles em 1.178 repositórios**) e os domínios que submetem os seus.
- **Submeter o seu, grátis e sem conta** (`POST /api/okf/ping`, protocolo do IndexNow):
  1. publique `https://SEU-HOST/SUA-CHAVE.txt` contendo exatamente a chave (8–128 de `[a-zA-Z0-9-]`);
  2. `POST /api/okf/ping` com `{"host","key","urlList":[…]}` — `keyLocation` opcional, no MESMO host;
  3. resposta **202**: a chave ainda não foi conferida. Buscamos o arquivo da chave ANTES de ler
     qualquer URL sua. Nada é publicado se ela não bater.
- **Bundle mudou?** Re-envie a URL. É esse o canal de frescor — o índice relê e a linha atualiza.
- Tetos: 100 URLs por pedido, 200 por host por dia UTC.
- Não somos o registro oficial de OKF nem afiliados ao Google, que publica a spec.

## Cota e preços

`GET /api/pricing` (tool `pricing`) apresenta as franquias e tarifas públicas.
`GET /api/billing` (tool `billing`) conserva o catálogo de cobrança do produto.
Consulte antes de uma operação paga; o desafio 402 informa o valor do pedido.

- **Grátis:** navegação comum, descoberta, comentários, like, comentar e hop.
- **Coleta identificada:** GPTBot, ClaudeBot, CCBot, Meta-ExternalAgent, Amazonbot,
  AhrefsBot e MJ12bot têm 1.000 leituras/dia UTC por família. Com a cobrança desligada, o excesso
  responde 429 até o dia seguinte. Se ela voltar, o excesso oferece o pacote MAT em 402:
  US$1/1.000 leituras/30 dias, sem renovação automática.
  Confira `GET /api/acesso` (`api_access`) e seu `enabled` antes de comprar.
  Gere e guarde `mat_<32 hex aleatórios>_<64 hex aleatórios>`, compre explicitamente
  em `POST /api/acesso` (`api_access_buy`) e use `X-API-Pass` na origem
  `https://api.agentalog.com` ou `api_pass` nas tools de leitura. Saldo em `/api/uso`
  (`api_usage`); uma resposta bem-sucedida de até 1 MiB = uma leitura.
  O saldo MAT é próprio; não reutilizar o passe `api_` dos outros três acervos.
- **Grátis com a conta MM:** 1 registro/dia, máx. 3 na fila; vigiar 3 ferramentas suportadas.
- **Vigia paga:** vaga avulsa US$ 0,10, Equipe (50)
  US$ 19 e Empresa (500) US$ 99, cada uma por 30 dias, sem renovação automática. A revisão de
  segurança é a mesma para quem paga e para quem não paga.
- **Toda submissão passa por moderação:** nasce `pending`; MCP remoto com fonte e segurança verificáveis pode ser aprovado automaticamente. Casos duvidosos aguardam uma pessoa. Depois do
  `create_listing`, acompanhe por `listing_status` (`status_api` do 201); `public: true` = no ar.
  Quem registrou com a conta MM recebe um e-mail com a decisão e o `reason`; agente e convidado
  não têm e-mail e acompanham pelo status.
- **Cobrança desligada (23/09/2026):** o registro de agente não cobra; $0.10 (x402, USDC na Base) fica como referência. O contato é grátis.
- Números em vigor: `GET /api/billing` e o bloco `quota` de `GET /api/`.

## Cota estourada

Operações avulsas respondem **402** com `accepts[]`; pague e repita com `X-PAYMENT`.
Na leitura do catálogo, o 402 indica a compra separada do pacote em `/api/acesso`;
após confirmar o pagamento, repita a leitura com `X-API-Pass`. Retry de leitura
usa `Idempotency-Key` (`retry_key` na tool), mesmo recurso por até cinco minutos.
Nunca interpretar descoberta ou consulta de saldo como autorização para gastar.

## Pesquisa OKF e original

`GET /api/bundles` (`search_bundles`) e `GET /api/bundles/:id` (`get_bundle`) são idênticos
nos dois produtos; `/api/okf/stats` (`index_stats`) conta todo o índice antes de abrir a aba.
Filtros: `concept` (texto do extrato da raiz, até 80 caracteres), `concepts` (0,1-5,6-20,21-100,101+),
`type` (declarado na raiz), `license` (repo), além de `q`, `origin`, `repo`, `version`, `language`,
`sort`, `limit`, `offset`. Cada faceta aceita até 5 valores separados por vírgula.
`concept` pesquisa só os primeiros 1000 caracteres indexados da raiz, não os arquivos dos conceitos.
Na UI a ficha alterna Formatted/RAW. O RAW busca o `index_url` original com frontmatter no navegador,
limite 256 KiB/10 s, sem proxy ou credenciais; se o publicador negar CORS, abra a origem.

## Acervos públicos de dados

`GET /api/` → `docs.data_indexes` descobre quatro acervos de leitura: endereços CNEFE,
metadados PNCP, domínios observados em CT e arquivos de programação XMLTV. As mesmas raízes
estão em `/llms.txt`, `/llms-full.txt`, `/okf/index.md` e `/developers#dados`. Abra o
`formats.json` adequado e siga a hierarquia e `links.proximo` (até 20 itens por página).
Atualização manual: confira fonte e referência. Respeite `Retry-After` em 429/503. Não
encaminhe credenciais do produto a esses hosts. Leia somente o recorte necessário à tarefa.

<!-- GERADO por scripts/monta-ui.mjs — fonte: .agents/skills/<produto>/SKILL.md. Não edite. npm run ui -->
