Nexialismo, a última inteligência versão markdown llms.txt

Como um agente de IA agenda um post no LinkedIn pelo Zernio

Zernio agent-first: agendar no LinkedIn por REST, por José C. Amorim na Nexialismo, A última inteligência. Verificado em 2026-07-28 por execução real contra a API. Documento versão 2.0, descreve o Zernio na API v1. Zernio é uma camada de publicação para redes sociais operável por máquina.

Um agente agenda um post no LinkedIn pelo Zernio com duas chamadas: POST /posts devolve 201 e cria, GET /posts/{id} devolve 200 e prova. O ciclo de criar, confirmar e apagar foi executado em 2026-07-28 contra a API real. A condição de validade é uma conta conectada por OAuth em zernio.com e uma chave no formato sk_ mais 64 caracteres hexadecimais.

Contrato de execução do Zernio

Objetivo: agendar um post de texto no LinkedIn pelo Zernio.

Só há o que executar com as quatro condições:

  1. o texto está aprovado pelo humano;
  2. o horário está em ISO 8601 com offset explícito;
  3. a conta do LinkedIn está identificada pelo _id;
  4. a autorização do humano é explícita.

Só existe sucesso quando as quatro provas aparecem:

  1. o POST devolve 201 e cria o recurso;
  2. o GET pelo identificador devolve 200;
  3. o status é scheduled;
  4. o instante e a conta conferem com o enviado.

Quatro coisas nunca acontecem neste fluxo: a ZERNIO_API_KEY aparecer em saída, log ou mensagem; um POST ser repetido diante de resposta ambígua; o recibo de criação ser tratado como confirmação; uma URL ser publicada no corpo do post.

O que este documento do Zernio cobre

Cobre:

Não cobre:

Mapa do documento

  1. Os três níveis de leitura do Zernio
  2. O agendamento fantasma do Zernio
  3. Quem decide o quê no Zernio
  4. Antes de começar com o Zernio
  5. Os passos do agendamento no Zernio
  6. Como confirmar o agendamento no Zernio
  7. Quando parar no Zernio
  8. Se o agendamento no Zernio falhar
  9. O que não funciona no Zernio
  10. Como ler o resultado do Zernio
  11. A partitura desta edição

Os três níveis de leitura do Zernio

Três seções do Zernio levam rótulo de profundidade: Em uma frase: no diagrama, Se você nunca viu isso antes: nas pré-condições e Se você já opera isso: nas falhas silenciosas.

O agendamento fantasma do Zernio

O humano arquivou um clipe que decidiu não usar. A ordem seguiu de pé no Zernio, identificador 6a63c68abb68bcea95998ca9, marcada para 2026-07-27 às 06:45. Ordem viva sem peça é o fantasma.

Ninguém errou: o arquivo foi arquivado onde se arquiva arquivo, a ordem ficou onde se guarda ordem, e nenhuma das duas pontas tinha o trabalho de avisar a outra. Foi percebido na véspera. O estado desse agendamento em 2026-07-28 é NÃO VERIFICADO.

Quem decide o quê no Zernio

Tabela dos Verbos: Hermes Agent decide como, Zernio executa, Notion lembra, humano decide se

Em uma frase: cinco caixas, quatro de máquina e uma de humano. Hermes Agent decide como e nunca guarda estado. Zernio executa e nunca julga o conteúdo. Notion lembra e nunca executa. Telegram conversa e nunca guarda estado. O humano decide se e nunca delega: escolhe o hook, aprova a peça e cola o primeiro comentário.

Antes de começar com o Zernio

Se você nunca viu isso antes: o Zernio publica em redes sociais por API REST, sem clique em painel. Cada endereço é um endpoint, o corpo da ordem é JSON, e a chave viaja no header Authorization na forma Bearer.

Três entradas vêm do humano. Se faltar uma, pergunte antes de chamar o Zernio: agendamento errado só se desfaz apagando.

Os passos do agendamento no Zernio

  1. Descubra o identificador da conta. O campo chama _id. Em 2026-07-28 esta chamada devolveu quatro contas ativas: instagram, linkedin, whatsapp e youtube.
    curl -sS 'https://zernio.com/api/v1/accounts' -H "Authorization: Bearer $ZERNIO_API_KEY" -o contas.json -w 'HTTP %{http_code}\n'
    python3 -c "import json;print([(c['platform'],c['_id']) for c in json.load(open('contas.json'))['accounts']])"
  2. Monte o corpo da requisição. O accountId fica dentro de platforms, nunca na raiz, porque cada destino carrega a conta dele. Na criação ele vai como texto simples. Os valores abaixo são exemplo.
    {
      "content": "Texto integral do post, sem URL no corpo.",
      "platforms": [ { "platform": "linkedin", "accountId": "O_ID_DA_SUA_CONTA" } ],
      "scheduledFor": "2027-01-15T06:45:00-03:00"
    }
  3. Meça o texto contra o teto de 3000 caracteres do LinkedIn. Monte o JSON com uma biblioteca, nunca concatenando texto na linha de comando: apóstrofo em português encerra a aspa do shell e o comando morre antes de falar com o Zernio.
    python3 -c "import sys;c=open(sys.argv[1],encoding='utf-8').read();print(len(c));sys.exit(1 if len(c)>3000 else 0)" texto.txt
  4. Crie o agendamento. O endereço é a base https://zernio.com/api/v1 mais /posts, e a versão aparece uma vez só no endereço final.
    curl -sS -X POST 'https://zernio.com/api/v1/posts' -H "Authorization: Bearer $ZERNIO_API_KEY" -H 'Content-Type: application/json' --data @post.json -o recibo.json -w 'HTTP %{http_code}\n'
  5. Leia o código impresso. O código de sucesso da criação é 201, não 200. Valor fora da faixa 200 a 299 é falha: abra recibo.json, que carrega o motivo, e vá para a seção de falhas.
  6. Extraia o identificador. O recibo é aninhado: o objeto vem em post e o campo chama _id, não id e não postId. Ler a raiz devolve vazio.
    python3 -c "import json;d=json.load(open('recibo.json'));p=d.get('post') or {};print(p.get('_id') or 'SEM IDENTIFICADOR')"
  7. Se sair SEM IDENTIFICADOR, o agendamento está NÃO VERIFICADO. Imprima o recibo com python3 -m json.tool recibo.json e procure o identificador antes de tentar de novo, porque um segundo POST com o mesmo texto vira conteúdo duplicado.

Como confirmar o agendamento no Zernio

O POST devolve um recibo de aceite, que não é prova de existência. A prova vem da segunda chamada. O campo a extrair é o _id dentro de post, e o estado esperado é scheduled.

curl -sS "https://zernio.com/api/v1/posts/O_ID_DO_PASSO_5" -H "Authorization: Bearer $ZERNIO_API_KEY" -o confirmacao.json -w 'HTTP %{http_code}\n'
python3 -c "
import json,datetime as dt
p=json.load(open('confirmacao.json'))['post']
enviado='2027-01-15T06:45:00-03:00'
a=dt.datetime.fromisoformat(enviado)
b=dt.datetime.fromisoformat(p['scheduledFor'].replace('Z','+00:00'))
print(p['_id'], p['status'], p['scheduledFor'])
print('mesmo instante:', a==b)"

Nunca compare o scheduledFor como texto. O Zernio normaliza para UTC e devolve outra string: em 2026-07-28, 2027-01-15T06:45:00-03:00 voltou como 2027-01-15T09:45:00.000Z. As duas apontam o mesmo instante, e comparar caractere a caractere reprova um agendamento correto.

Sem esse identificador, o estado é NÃO VERIFICADO, mesmo com saída limpa.

Quando parar no Zernio

Para desfazer, DELETE /posts/{id} devolve 200 com mensagem de remoção, e o GET seguinte passa a devolver 404. Foi assim que o post de teste desta edição foi criado e apagado.

Se o agendamento no Zernio falhar

python3 -m json.tool recibo.json

O corpo da resposta carrega o motivo. O código HTTP foi impresso na última linha do comando que falhou e não sobrevive para a chamada seguinte: se você perdeu o código, repita a leitura, nunca o POST.

Sintoma na saída do ZernioAção
HTTP 401 ou 403Confira o formato da chave e peça rotação ao humano. Não tente outra credencial.
HTTP 200 com corpo começando em DOCTYPEO endereço não existe. Corrija o caminho antes de repetir.
Recibo sem post._idLeia o recibo inteiro antes de tentar de novo, porque um segundo POST cria duplicidade.
HTTP 404 no GET logo após criarO identificador foi lido do lugar errado. Ele mora em post._id.
HTTP 422 na hora de publicar no LinkedInConteúdo repetido é recusado; reescreva o texto se for esse o caso.

O que não funciona no Zernio

Se você já opera isso: as quatro falhas abaixo foram testadas em 2026-07-28 e nenhuma delas devolve erro de forma óbvia.

Estes limites são do LinkedIn, não do Zernio: um documento por post, até 20 imagens de 8 MB cada, vídeo em MP4, MOV, AVI ou WebM até 5 GB, 10 minutos em perfil pessoal e 30 minutos em página de empresa. A API do LinkedIn não aceita arquivo .srt, então a legenda precisa estar queimada no vídeo. Link no corpo derruba de 40 a 50 por cento do alcance, e o lugar do link é o primeiro comentário, que fica com o humano.

Nome de tool decorado também não funciona: o servidor MCP oficial do Zernio expõe mais de 480 tools, cerca de 461 auto-geradas a partir do OpenAPI, que mudam de nome quando a API muda. Só 20 são documentadas como core, e nenhuma existe num run REST puro como o descrito aqui.

A execução que foi ao ar é outra: saiu em 2026-07-24 com urn:li:share:7486455115952906240 e status published, pelo caminho REST, porque o servidor MCP do Zernio não estava exposto naquela execução.

Como ler o resultado do Zernio

Duas linhas decidem: status scheduled com o instante certo significa agendamento de pé, e corpo em HTML significa que o endereço não existe.

Padrão na resposta do ZernioO que significaO que fazer agora
201 com post._id presenteCriado, ainda não confirmadoRodar o GET antes de relatar
200, status scheduled, instante igualAgendamento de pé no horário certoColar o primeiro comentário no dia
200 com corpo em HTMLEndereço inexistente disfarçado de sucessoCorrigir o caminho, não repetir a chamada
Instante diferente do enviadoO post sai em outra horaApagar com DELETE e criar de novo

A partitura desta edição

A tabela separa as decisões que José C. Amorim tomou das execuções que a frota rodou. A publicação de 2026-07-24 teve 34 impressões e 2,94% de engajamento, lidos no painel do LinkedIn em 2026-07-24.

Humano decidiuAgente executou
Decidiu não usar o clipe arquivadoManteve o agendamento no Zernio
Autorizou rodar contra a API realCriou, confirmou e apagou o post de teste
Escolheu o hook e aprovou a peçaLeu os quatro identificadores de conta

Verificado em 2026-07-28. Próxima revisão em 2026-10-28. A versão 2.0 troca suposição por execução: o identificador é post._id, a criação devolve 201, o horário volta normalizado em UTC e o endpoint de validação de mídia não existe.

Tamo junto.