Communitygithub.com

StephenSook/attest

O agente telefônico que se recusa a adivinhar. Uma chamada de verificação divulgada por registro de listagem de saúde: cada resposta cita seu trecho de transcrição literal, a reconciliação mostra sua aritmética, e um portão conformal se abstém em vez de adivinhar. Hackathon CALL-E, setembro de 2026.

O que é attest?

Este skill, verify-by-phone, permite que um agente de IA verifique, via chamada telefônica, se informações armazenadas sobre uma organização ainda são verdadeiras, sem jamais adivinhar respostas incertas. O skill faz uma única chamada divulgada por registro, extrai a resposta do transcript com um trecho de suporte literal, reconcilia-a com o registro armazenado usando uma aritmética transparente de pesos de correspondência e retorna uma confiança calibrada ou uma abstenção explícita. É ideal para verificar listagens de provedores de saúde, horários de funcionamento, aceitação de planos e outros dados onde o telefone é a fonte da verdade. O skill suporta plataformas como Claude Code e ambientes que usam a API CALL-E, e seu design garante que respostas incertas ou recusas sejam registradas honestamente como 'não verificável', em vez de serem convertidas em escritas confiantes no banco de dados.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add StephenSook/attest

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Verificar por Telefone

Use este skill quando um agente precisar estabelecer se informações armazenadas sobre uma organização ainda são verdadeiras, e uma chamada telefônica para o número público da organização for a maneira de descobrir.

verify-by-phone é um skill de fluxo de trabalho de verificação. Ele faz exatamente uma chamada CALL-E divulgada por registro, extrai a resposta do transcript com um trecho de suporte literal, reconcilia-a com o registro armazenado usando aritmética transparente de pesos de correspondência e retorna uma confiança calibrada ou uma abstenção explícita. O objetivo de design é um agente que nunca converte uma resposta telefônica incerta em uma escrita confiante no banco de dados.

Quando Usar

Use este skill para:

  • verificar uma listagem de diretório de provedor: esta prática é real, acessível, aceitando novos pacientes, aceitando um determinado plano de saúde
  • verificar se um registro de negócio armazenado (horários, serviços, disponibilidade) ainda corresponde à realidade
  • atualizar qualquer conjunto de dados onde o telefone é a fonte da verdade e o registro está suspeito de estar desatualizado
  • fluxos de trabalho onde um resultado "desconhecido" deve ser registrado honestamente em vez de adivinhado
  • um registro de cada vez, com uma lista de destinatários autorizada por humanos

Quando Não Usar

Não use este skill para:

  • fazer chamadas não divulgadas ou com pretexto; toda chamada anuncia que é um assistente automatizado e por que está ligando, na mesma respiração
  • ligar para números pessoais ou sem fio; os alvos de verificação são linhas organizacionais publicadas
  • realizar marketing, vendas, geração de leads ou qualquer divulgação promocional
  • discar em lote uma lista sem autorização humana por registro
  • sobrescrever um registro armazenado diretamente de um resultado de chamada; a saída é um veredito com evidência, e a decisão de escrita permanece com o operador
  • adivinhar uma resposta que o entrevistado não deu; se a chamada não produzir uma resposta utilizável, o resultado é uma abstenção, e essa é a saída correta

Regras de Consentimento e Divulgação

Estas são estruturais, não meramente burocráticas:

  1. A chamada começa declarando a identidade da IA e o propósito juntos, antes de qualquer outra coisa, e anuncia que a chamada pode ser gravada.
  2. Se o entrevistado se opuser a falar com um chamador automatizado, a chamada agradece e termina imediatamente. O resultado registra a recusa como um resultado não verificável.
  3. O tempo de espera é limitado. Se o entrevistado pedir ao chamador para esperar, ele espera brevemente e depois relata de volta em vez de esperar indefinidamente.
  4. O agente nunca inventa informações que não lhe foram dadas, na chamada ou no resultado. Concretamente: uma clínica frequentemente pedirá ao chamador um nome, uma data de nascimento, um número de membro ou cartão do seguro, ou um motivo para a visita. O agente diz claramente que não tem essa informação, porque esta é uma chamada de verificação de diretório e não uma solicitação de consulta, e então repete a pergunta que ligou para fazer. Um espaço reservado é uma invenção.
  5. Correio de voz não é uma resposta. Ao chegar ao correio de voz ou a uma secretária eletrônica, a chamada termina imediatamente sem deixar mensagem: um fato de diretório não pode ser estabelecido a partir de uma gravação, e ninguém deve encontrar uma mensagem de robô em sua linha.
  6. As chamadas são de verificação informacional, nunca promocionais. Trate toda chamada como gravada, considerando os requisitos de consentimento de todas as partes.

Fluxo de Trabalho de Verificação

  1. Calibre o limite de abstenção primeiro, com scripts/calibrate.py em dados de cenário rotulados, para que "confiante" signifique algo mensurável: no nível padrão, a verdadeira resposta cai dentro do conjunto de previsão pelo menos 90 por cento das vezes em dados retidos. Ele imprime um qhat que a etapa 6 consome. Isso é executado sem credenciais e sem chamadas, então pode ser feito uma vez, antes de qualquer discagem.
  2. Colete o registro a verificar: nome da organização, número de telefone publicado em E.164, e as afirmações a verificar (por exemplo, aceitando novos pacientes, aceita um plano nomeado).
  3. Confirme que o operador autoriza esta chamada específica para este número específico.
  4. Construa a tarefa de chamada com scripts/place_verify_call.py. O script padrão é uma execução a seco que imprime a tarefa exata e o destinatário sem discar; passe --live somente após a execução a seco parecer correta.
  5. Consulte o resultado terminal com scripts/poll_result.py, que salva o payload completo em um arquivo local.
  6. Extraia a resposta com scripts/extract_answer.py --qhat da etapa 1. Cada campo extraído carrega o trecho de transcrição literal e os deslocamentos de caractere que o suportam. Respostas evasivas ("Acho que sim") mantêm sua polaridade com uma pontuação de confiança atenuada. Turnos não responsivos (número errado, recusa, "ligue mais tarde") nunca contam como respostas. A resposta é fornecida somente quando o conjunto de previsão calibrado é um único valor e esse valor não é "desconhecido"; caso contrário, o resultado é uma abstenção. Omitir --qhat abstém-se de tudo e rotula a saída como uncalibrated, porque um limite sem calibração por trás não garante nada.
  7. Reconcilie contra o registro armazenado com scripts/reconcile_record.py: cada campo concordante adiciona bits documentados de evidência, cada campo discordante os subtrai, e o veredito é verificado, contradito ou não verificável.

Nota de Manutenção

Os scripts neste skill são cópias autocontidas da implementação de referência no backend Attest (backend/app no repositório de origem). Eles são mantidos pequenos de propósito para que o skill seja instalado sem dependências desse repositório.

Essa cópia é imposta, não prometida. tests/test_skill_parity.py no repositório de origem executa o extrator deste skill e o do backend sobre os mesmos transcripts e falha se eles discordarem sobre a resposta, sobre os deslocamentos de caractere do trecho citado, ou sobre os próprios léxicos de sinalização. Uma versão anterior desta nota pedia a um humano para ressincronizar manualmente, e a cópia ainda assim divergiu: o backend aprendeu a confiar na última sinalização em um turno e a ler "sem problema" como concordância, enquanto este script ainda confiava na primeira, então um simples "Não, não estamos" se absteve aqui e respondeu lá.

Início Rápido

pip install calle-ai

# 1. Calibre o portão primeiro. Imprime o qhat que a etapa 5 precisa.
python3 scripts/calibrate.py --data references/sample-scenarios.jsonl --alpha 0.1

# 2. Execução a seco: imprime a tarefa e o destinatário mascarado, não disca nada.
python3 scripts/place_verify_call.py \
  --org "Centro de Aconselhamento Exemplo" \
  --phone "+15550101234" \
  --claim-accepting-new-patients yes \
  --claim-plan "Exemplo Saúde PPO"

# 3. Faça a chamada de verdade (requer CALLE_API_KEY).
python3 scripts/place_verify_call.py ... --live

# 4. Aguarde o payload terminal.
python3 scripts/poll_result.py --call-id call_abc123 --out result.json

# 5. Extraia a resposta baseada no trecho, controlada pelo limite calibrado.
python3 scripts/extract_answer.py --payload result.json --qhat 0.750

# 6. Reconcilie contra o registro armazenado.
python3 scripts/reconcile_record.py --payload result.json \
  --claim-accepting-new-patients yes --claim-plan-accepted yes

Todos os números de exemplo neste skill são números fictícios reservados. O caminho de execução a seco e os dados de cenário incluídos significam que tudo, exceto a etapa 3, é executado sem credenciais e sem chamada real.

Como é a Saída

extract_answer.py emite um objeto JSON por afirmação:

{
  "claim": "accepting_new_patients",
  "answer": "yes",
  "trust_score": 0.9,
  "hedged": false,
  "span": {"turn": 6, "text": "Sim.", "char_start": 0, "char_end": 3},
  "abstain": false,
  "gate": "conformal(qhat=0.750)"
}

Uma abstenção mantém a mesma forma com "abstain": true, seja porque o conjunto de previsão calibrado continha mais de um rótulo ou porque o extrator não encontrou resposta alguma ("answer": "unknown"). O campo gate nomeia o limite que tomou a decisão e lê uncalibrated quando nenhum --qhat foi fornecido, que é o único caso em que toda afirmação se abstém independentemente do que foi dito. reconcile_record.py adiciona a aritmética de pesos de correspondência e um veredito. Nenhum campo aparece nunca sem um trecho de suporte ou uma abstenção explícita.

Efeitos Colaterais e Cancelamento

  • Efeito colateral: exatamente uma chamada telefônica de saída por invocação --live, para o número que o operador forneceu. Nada é recorrente; não há agendador neste skill.
  • Custo: uma chamada CALL-E faturada por execução ao vivo. Execuções a seco são gratuitas.
  • Cancelamento: CALL-E não expõe cancelamento de chamada, então o momento de parar é antes de --live. O padrão de execução a seco existe exatamente por esse motivo.
  • Dados: os payloads são escritos em arquivos locais que o operador nomeia. Os números de telefone são mascarados na saída do console. Nada neste skill transmite resultados para qualquer lugar, exceto a própria API CALL-E.

Referências

  • references/api-notes.md: a forma do payload CALL-E observada empiricamente e os comportamentos da API nos quais este skill se baseia, incluindo fatos que foram descobertos por teste em vez de documentação.
  • references/verification-protocol.md: o script de divulgação completo, a postura legal para chamadas de verificação de saída e por que a abstenção é a decisão central de design.
  • references/sample-scenarios.jsonl: dados de cenário fictícios rotulados usados por scripts/calibrate.py, para que a calibração seja executada sem credenciais e sem chamadas.

Habilidades Relacionadas