Configuração¶
Cada projeto de pesquisa é descrito por um único arquivo YAML. O comando
alberto-research config validate PROJECT carrega o arquivo, confere os campos
obrigatórios e verifica os tipos e intervalos antes de qualquer chamada de rede.
O carregamento aceita PyYAML quando instalado e, como alternativa, um
analisador YAML mínimo embutido — então o formato suportado é o subconjunto
usual de mappings, listas e escalares.
Chaves de primeiro nível¶
| Chave | Tipo | Obrigatória | Padrão | Descrição |
|---|---|---|---|---|
id |
string | Sim | — | Identificador único e não vazio do projeto. Usado como prefixo dos arquivos de digest e para separar projetos no banco. |
name |
string | Sim | — | Nome legível, exibido no cabeçalho do digest. |
research_question |
string | Sim | — | Pergunta de pesquisa não vazia. É o critério central da triagem e da leitura. |
priority_topics |
lista de strings | Sim | — | Tópicos que orientam a descoberta e aumentam a relevância atribuída pelo LLM. |
languages |
lista de strings | Sim | — | Idiomas aceitos (por exemplo en, pt). |
discovery_limits |
mapping | Sim | — | Limite de resultados por provedor. Veja a tabela abaixo. |
screening_threshold |
número entre 0 e 1 | Sim | — | Pontuação mínima para um candidato sobreviver à triagem. Abaixo disso, é descartado. |
deep_reading_threshold |
número entre 0 e 1 | Sim | — | Pontuação mínima para um candidato virar leitura profunda. Deve ser maior ou igual ao de triagem para ser útil. |
maximum_daily_deep_reads |
inteiro >= 0 | Sim | — | Teto de leituras profundas por execução diária. Use 0 para desligar a leitura. |
citation_chasing |
mapping | Sim | — | Configuração da busca de citações. Veja a tabela abaixo. |
digest |
mapping | Sim | — | Configuração do resumo diário. Veja a tabela abaixo. |
timezone |
string | Sim | — | Fuso IANA usado para o horário de entrega e para o recorte diário (por exemplo Europe/Lisbon). |
priority_authors |
lista de strings | Não | (vazio) | Autores de interesse especial. |
date_ranges |
mapping | Não | (sem recorte) | Janela temporal da descoberta, com as chaves start e end. |
inclusion_terms |
lista de strings | Não | (vazio) | Termos que favorecem a inclusão de um registro. |
exclusion_terms |
lista de strings | Não | (vazio) | Termos que descartam um registro. |
research_filters |
mapping | Não | (sem filtros) | Filtros adicionais. Veja a tabela abaixo. |
fulltext |
mapping | Não | (somente acesso aberto) | Cadeia de resolvedores e cache. Veja a tabela abaixo. |
notion |
mapping | Não | enabled: false |
Arquivamento opcional no Notion. |
openclaw |
mapping | Não | (resolução automática) | Caminho do binário OpenClaw. Veja a tabela abaixo. |
discovery_limits¶
| Chave | Tipo | Obrigatória | Padrão | Descrição |
|---|---|---|---|---|
crossref |
inteiro | Não | (definido no projeto) | Número máximo de resultados retornados pelo Crossref. |
semantic_scholar |
inteiro | Não | (definido no projeto) | Número máximo de resultados retornados pelo Semantic Scholar. |
Os limites são por provedor; a quantidade efetiva de candidatos após a descoberta é a soma dos provedores habilitados, menos duplicatas.
citation_chasing¶
| Chave | Tipo | Obrigatória | Padrão | Descrição |
|---|---|---|---|---|
enabled |
booleano | Sim, dentro do bloco | false |
Liga ou desliga a busca de citações. |
max_depth |
inteiro | Sim, dentro do bloco | 0 |
Profundidade máxima de encadeamento de referências. 0 desliga na prática. |
max_references_per_paper |
inteiro | Sim, dentro do bloco | 0 |
Quantas referências seguir por artigo lido. |
digest¶
| Chave | Tipo | Obrigatória | Padrão | Descrição |
|---|---|---|---|---|
enabled |
booleano | Sim, dentro do bloco | false |
Liga ou desliga a geração do digest. |
delivery_time |
string "HH:MM" |
Sim, dentro do bloco | — | Horário local de entrega, interpretado no timezone do projeto. |
max_items |
inteiro | Sim, dentro do bloco | — | Número máximo de itens no digest. |
save_local |
booleano | Sim, dentro do bloco | false |
Grava o digest em Markdown no disco, além de entregar. |
research_filters¶
| Chave | Tipo | Obrigatória | Padrão | Descrição |
|---|---|---|---|---|
article_only |
booleano | Não | false |
Mantém apenas registros classificados como artigo. |
skip_previously_read |
booleano | Não | false |
Ignora registros que já foram processados em execuções anteriores. |
excluded_doi_prefixes |
lista de strings | Não | (vazio) | Prefixos de DOI descartados, por exemplo "10.1007/". |
fulltext¶
| Chave | Tipo | Obrigatória | Padrão | Descrição |
|---|---|---|---|---|
enable_scihub |
booleano | Não | false |
Liga o resolvedor Sci-Hub. Requer o extra legacy-resolvers, desativa a verificação de certificado TLS e é de responsabilidade legal do operador. |
enable_annas_archive |
booleano | Não | false |
Liga o resolvedor Anna's Archive. Mesmas condições e ressalvas de enable_scihub. |
unpaywall_email |
string | Não | (vazio) | Endereço de contato enviado ao Unpaywall e usado no polite pool dos provedores. Use um endereço de função, como research@example.com. |
core_api_key |
string | Não | (vazio) | Chave da API do CORE. Sem ela, o resolvedor CORE não é usado. |
resolver_order |
lista de strings | Não | (ordem interna do pacote) | Ordem de tentativa dos resolvedores. Valores aceitos: zotero, unpaywall, openalex, core, doaj, europepmc, provider_url. |
download_timeout |
inteiro (segundos) | Não | 30 |
Tempo máximo por download de PDF. |
cache_dir |
string | Não | .cache/fulltext |
Diretório de cache dos PDFs baixados. |
max_fulltext_bytes |
inteiro (bytes) | Não | 52428800 (50 MiB), ou ALBERTO_MAX_FULLTEXT_BYTES |
Tamanho máximo aceito por arquivo de texto completo. |
Resolvedores listados em resolver_order que não estiverem disponíveis são
ignorados; os demais são tentados na ordem declarada e, em seguida, na ordem
interna do pacote.
notion e openclaw¶
| Chave | Tipo | Obrigatória | Padrão | Descrição |
|---|---|---|---|---|
notion.enabled |
booleano | Não | false |
Liga o envio para o Notion. Também pode ser ativado com ALBERTO_NOTION_ENABLED=1. |
openclaw.binary |
string | Não | (vazio) | Caminho absoluto do binário OpenClaw. Se vazio, usa ALBERTO_OPENCLAW_BIN e, por fim, openclaw no PATH. |
Exemplo completo e comentado¶
O arquivo abaixo é uma versão anotada de examples/basic.yaml — o mesmo que a
documentação de Uso executa.
# Identificação do projeto. `id` deve ser único no banco.
id: alberto-research-example
name: Alberto Research Example
# A pergunta que orienta triagem, leitura e síntese.
research_question: How do modular AI agent systems safely delegate untrusted research reading?
# Tópicos e autores que aumentam a prioridade de um candidato.
priority_topics:
- AI agent orchestration
- sandboxed document reading
- prompt injection defenses
priority_authors:
- Simon Willison
# Idiomas aceitos na descoberta.
languages:
- en
# Recorte temporal aplicado aos provedores.
date_ranges:
start: 2020-01-01
end: 2026-12-31
# Termos que orientam a inclusão e a exclusão de registros.
inclusion_terms:
- agent
- sandbox
- prompt injection
exclusion_terms:
- finance
# Filtros adicionais de limpeza.
research_filters:
article_only: true
skip_previously_read: true
excluded_doi_prefixes:
- "10.4324/"
- "10.1163/"
- "10.5040/"
- "10.1007/"
# Limite de resultados por provedor de descoberta.
discovery_limits:
crossref: 5
semantic_scholar: 5
# Limiares entre 0 e 1 e teto diário de leituras profundas.
screening_threshold: 0.55
deep_reading_threshold: 0.8
maximum_daily_deep_reads: 3
# Resolução de texto completo. O caminho padrão é acesso aberto legal.
fulltext:
# Resolvedores de bibliotecas sombra: DESLIGADOS por padrão.
# Ativá-los exige o extra `legacy-resolvers` e é sua responsabilidade legal.
enable_scihub: false
enable_annas_archive: false
# Contato para o "polite pool" do CrossRef e do Unpaywall.
# Use um endereço de função, nunca um e-mail pessoal.
unpaywall_email: "research@example.com"
core_api_key: ""
resolver_order:
- zotero
- unpaywall
- openalex
- core
- doaj
- europepmc
- provider_url
download_timeout: 30
cache_dir: ".cache/fulltext"
# Encadeamento de referências dos artigos lidos.
citation_chasing:
enabled: true
max_depth: 1
max_references_per_paper: 5
# Resumo diário gerado e salvo localmente.
digest:
enabled: true
delivery_time: "08:00"
max_items: 10
save_local: true
# Ative depois de configurar NOTION_API_KEY e NOTION_DATA_SOURCE_ID.
notion:
enabled: false
# Fuso usado no horário de entrega.
timezone: Europe/Lisbon
Variáveis de ambiente¶
As variáveis abaixo complementam o YAML. Segredos devem vir do ambiente, nunca do arquivo de projeto versionado.
| Variável | Para que serve |
|---|---|
ALBERTO_DB |
Caminho do banco SQLite. Tem precedência sobre o caminho padrão. |
ALBERTO_EMAIL_PROVIDER |
Seleciona o provedor de e-mail. Com o valor smtp, a entrega usa as variáveis SMTP_*. |
ALBERTO_HOME |
Diretório base dos dados operacionais. O banco padrão é $ALBERTO_HOME/alberto.sqlite3. |
ALBERTO_MAX_FULLTEXT_BYTES |
Limite global de bytes por texto completo, usado quando o projeto não define max_fulltext_bytes. |
ALBERTO_NOTION_ENABLED |
Com o valor 1, liga o Notion mesmo que o projeto não declare notion.enabled: true. |
ALBERTO_OPENCLAW_BIN |
Caminho do binário OpenClaw, usado quando openclaw.binary está vazio. |
ALBERTO_USER_AGENT |
User-Agent das requisições HTTP de texto completo. |
SEMANTIC_SCHOLAR_API_KEY |
Chave da API do Semantic Scholar, enviada no cabeçalho de autenticação. |
SMTP_HOST |
Servidor SMTP de saída. |
SMTP_PORT |
Porta SMTP. Padrão 587. |
SMTP_USERNAME |
Usuário SMTP, quando o servidor exige autenticação. |
SMTP_PASSWORD |
Senha SMTP, usada junto com SMTP_USERNAME. |
SMTP_FROM |
Remetente das mensagens. |
SMTP_TO |
Destinatário das mensagens. |
NOTION_API_KEY |
Token da integração do Notion. |
NOTION_DATABASE_ID |
Identificador do banco do Notion. |
NOTION_DATA_SOURCE_ID |
Identificador da data source do Notion; alternativa a NOTION_DATABASE_ID. |
ZOTERO_API_KEY |
Chave da API do Zotero. |
ZOTERO_LIBRARY_TYPE |
Tipo da biblioteca do Zotero. Padrão user. |
ZOTERO_LIBRARY_ID |
Identificador da biblioteca do Zotero. |
LOG_LEVEL |
Nível de log (DEBUG, INFO, WARNING, ERROR). |
Precedência
Para o caminho do binário OpenClaw, a ordem é: openclaw.binary no YAML,
depois ALBERTO_OPENCLAW_BIN, depois o openclaw resolvido pelo PATH.
Validando a configuração¶
Sempre valide antes de rodar:
Erros comuns incluem chave obrigatória ausente, screening_threshold fora do
intervalo 0–1, maximum_daily_deep_reads negativo e listas declaradas como
escalares. Veja Solução de problemas.