MÓDULO 4.2

🔗 Conectando o Vault ao OpenClaw

Configure o SOUL.md para integrar o vault Obsidian como backend de conhecimento — permissões, caminhos, primeira consulta e fluxo de ingestão via mensagem.

6
Tópicos
45
Minutos
Expert
Nível
Prático
Tipo
1

🏛️ Arquitetura de Integração

A integração é direta: o OpenClaw acessa o vault via filesystem local. Sem banco de dados intermediário, sem embeddings, sem sincronização — apenas leitura e escrita de arquivos Markdown onde o Obsidian já os mantém.

🏛️ Fluxo de consulta completo

📱 Usuário Telegram 🌐 WS Gateway normaliza msg 🤖 Orquestrador LLM + SOUL.md 📋 index.md 📖 wiki/pagina.md 💬 Resposta com fonte citada 1. pergunta 2. normaliza 3. orquestra 4. lê índice 5. lê páginas 6. responde
Sem embeddings

O LLM lê os arquivos Markdown diretamente. Nenhum processo de indexação vetorial necessário.

index.md como mapa

O agente sempre começa pelo index.md para encontrar as páginas relevantes antes de ler o conteúdo.

Latência local

Leitura de arquivo local: <5ms. Gargalo real é o LLM, não o acesso ao vault.

2

📝 Configurando o SOUL.md para o Wiki

A seção knowledge_base do SOUL.md é onde você instrui o agente sobre a estrutura do vault — caminhos, como interpretar o index.md, limites de tokens e formato de resposta com citação de fonte.

SOUL.md — seção knowledge_base
## Fontes de Conhecimento

knowledge_base:
  # Caminho absoluto do vault
  vault_root: /home/user/vault/

  # Índice de navegação
  index_file: /home/user/vault/index.md

  # Pasta de conhecimento compilado
  wiki_path: /home/user/vault/wiki/

  # Pasta para novos documentos
  inbox_path: /home/user/vault/raw/inbox/

  # Limite de tokens por consulta
  max_context_tokens: 8000

  # Formato de citação de fonte
  cite_format: "Fonte: wiki/{filename}"

  # Comportamento quando não encontrar
  not_found_message: |
    Não tenho essa informação registrada no wiki.
    Deseja que eu adicione como tarefa de pesquisa?
Instruções de navegação no SOUL.md
## Instruções de Consulta

Ao receber uma pergunta sobre o vault:
1. Leia /home/user/vault/index.md
2. Identifique as 2-3 páginas mais relevantes
3. Leia o conteúdo de cada página identificada
4. Sintetize uma resposta baseada APENAS
   no conteúdo lido
5. Sempre cite a fonte no formato:
   "Fonte: wiki/nome-da-pagina.md"
6. Se não encontrar, use not_found_message
7. NUNCA invente informações

Exemplos de consultas esperadas:
- "O que sei sobre Python async?"
- "O que decidimos sobre a arquitetura X?"
- "Quais são os projetos ativos?"
💡 Dica: max_context_tokens

Defina max_context_tokens conservadoramente no início (4000-8000). Se o agente tentar ler muitas páginas de uma vez, excede o contexto do LLM e a resposta piora. O index.md bem estruturado é o que permite selecionar poucas páginas com alta precisão.

3

🔐 Permissões de Leitura/Escrita

Permissões granulares e explícitas protegem o vault de acesso indevido. A regra de ouro: o agente tem acesso de leitura ao wiki/ e acesso de escrita apenas ao raw/inbox/ — nunca ao wiki/ diretamente.

🔐 Modelo de permissões do vault

Estrutura do Vault 📁 vault/ 📁 wiki/ páginas compiladas pelo LLM 📁 raw/inbox/ novos documentos aguardando ingestão 📁 raw/ (outros) 📄 SOUL.md, index.md, log.md Permissões do Agente Caminho Ler Escrever wiki/ raw/inbox/ index.md raw/ (outros) SOUL.md, log.md
Configuração de permissões no SOUL.md
## Permissões de Filesystem

skills:
  - name: filesystem
    permissions:
      read:
        - "/home/user/vault/wiki/"
        - "/home/user/vault/index.md"
        - "/home/user/vault/raw/inbox/"  # para confirmar recebimento
      write:
        - "/home/user/vault/raw/inbox/"  # ÚNICO diretório de escrita
      deny:
        - "/home/user/vault/SOUL.md"     # proteger configuração
        - "/home/user/vault/log.md"      # proteger histórico
        - "/home/user/vault/raw/"        # bloquear raw/ geral
      allowed_extensions:
        - ".md"
        - ".txt"
        - ".pdf"
      max_file_size: "10MB"
      audit_log: true  # registra todos os acessos
4

💬 Primeiro Prompt via Telegram

O momento de verdade: sua primeira consulta ao vault via Telegram. Vamos acompanhar o fluxo completo de "o que sei sobre X?" até a resposta com fonte citada.

Simulação de conversa — primeira consulta

O que sei sobre Python async?

você · 14:23

OpenClaw lendo index.md... identificando páginas relevantes... lendo wiki/python-async.md...

Python Async — resumo do que você tem registrado:

Python async/await usa o event loop do asyncio para executar corrotinas concorrentemente sem threads. Você usa principalmente com FastAPI e httpx para requests HTTP não-bloqueantes.

Padrões que você documentou:

  • • asyncio.gather() para paralelizar múltiplos awaits
  • • async context managers com async with
  • • Evitar misturar sync e async — usar run_in_executor quando necessário

📄 Fonte: wiki/python-async.md · wiki/fastapi-patterns.md

✓ O que acontece internamente
  1. 1. Telegram entrega mensagem ao WS Gateway
  2. 2. Orquestrador recebe e processa com SOUL.md
  3. 3. Skill filesystem lê index.md (~50ms)
  4. 4. LLM identifica páginas relevantes
  5. 5. Filesystem lê cada página selecionada
  6. 6. LLM sintetiza resposta com citação
  7. 7. Gateway envia para o Telegram
⏱️ Tempos esperados
Leitura index.md<5ms
Leitura páginas wiki<20ms
LLM (cloud)2-8s
LLM (Ollama local)5-30s
Total percebido3-35s
5

📥 Ingestão via Mensagem

O fluxo inverso: você envia um arquivo ou texto pelo celular → o agente salva em raw/inbox/ → dispara a ingestão → wiki/ atualizado. Zero fricção de captura.

1

Você envia o documento pelo Telegram

Pode ser texto livre, PDF anexado, ou URL. O agente aceita qualquer formato configurado em allowed_extensions.

2

OpenClaw salva em raw/inbox/

# Arquivo criado automaticamente:
# raw/inbox/2026-04-09_1423_telegram-upload.md

---
source: telegram
received_at: 2026-04-09T14:23:00
sender: user_id_123
original_filename: artigo-python.pdf
status: pending_ingestion
---

[conteúdo do documento aqui]
3

Ingestão disparada (automática ou manual)

# Via skill exec — chama Claude Code
claude "ingerir raw/inbox/ → wiki/" --vault /home/user/vault

# Ou o agente responde confirmando e pergunta:
"📥 Documento salvo em raw/inbox/.
 Deseja ingerir agora? (pode levar 2-3 min)"
4

Confirmação de sucesso via Telegram

O agente notifica quando a ingestão termina: "✓ Ingestão concluída: 2 páginas criadas/atualizadas em wiki/. Páginas: python-async-advanced.md, asyncio-patterns.md"

6

✅ Testando a Integração

Uma integração não testada é uma integração que vai falhar em produção. Execute este checklist antes de usar o sistema no dia a dia.

Checklist de validação
Teste de leitura do wiki
Perguntar sobre uma página que você sabe que existe
Teste de "não encontrado"
Perguntar sobre algo que não existe no wiki — agente deve admitir, não inventar
Teste de permissões negadas
Pedir para o agente ler SOUL.md — deve recusar
Teste de ingestão
Enviar arquivo de teste → confirmar criação em raw/inbox/
Verificação de logs
Checar audit_log para confirmar todos os acessos registrados
Teste de citação de fonte
Confirmar que respostas incluem "Fonte: wiki/..."
Comandos de diagnóstico
# Verificar status do OpenClaw
curl http://localhost:3000/health

# Ver logs em tempo real
pm2 logs openclaw --lines 50

# Testar leitura de arquivo direto
curl http://localhost:3000/debug/read \
  -d '{"path": "/vault/index.md"}'

# Ver audit log de filesystem
cat /home/user/vault/.openclaw-audit.log \
  | tail -20

# Testar conexão Telegram
curl http://localhost:3000/debug/channels

⚠️ Remova ou proteja os endpoints /debug em produção

✅ Conceitos-chave do módulo
Vault como backend de filesystem — sem banco de dados
index.md é o ponto de entrada para toda consulta
Permissões explícitas: escrita apenas em raw/inbox/
Ingestão via mensagem elimina fricção de captura
Sempre citar fonte wiki/ nas respostas
Testar sistematicamente antes de depender do sistema
4.1 — O que é OpenClaw 4.3 — Interface Conversacional