Sistema AI-agnostic de automação para coleta, processamento e organização de conteúdo multi-domínio em um vault Obsidian criptografado, com chat IA integrado no navegador, assistência para escrita de artigos e publicação em blog Hugo.
Versão: 2.0
Data: 2026-03-30
Inspiração: The M.Akita Chronicles (arquitetura de coleta + IA + organização)
Princípios fundamentais:
O sistema funciona como um pipeline de 6 camadas:
Fontes → Coletor → Processamento IA → Obsidian Vault (criptografado) → Chat IA + Escrita → Hugo Blog
Cada camada é independente e pode ser desenvolvida/testada separadamente. O princípio do Akita se aplica aqui: sempre prefira a fonte mais simples que funcione — RSS antes de scraping, API antes de headless browser.
Princípio AI agnostic: O sistema usa uma camada de abstração para provedores de IA. Nenhum componente depende de um modelo específico. A escolha do modelo é feita por tarefa:
| Tarefa | Modelo sugerido | Alternativa | Justificativa |
|---|---|---|---|
| Chat conversacional (vault context) | Claude Sonnet | GPT-4o, Gemini Pro | Melhor para RAG e raciocínio sobre documentos |
| Resumo de artigos (batch) | Claude Haiku / Gemini Flash | DeepSeek, Qwen | Custo baixo para alto volume |
| Tagging e categorização | Modelo local (Ollama) | Qualquer API barata | Tarefa simples, não precisa de modelo caro |
| Escrita de artigos (assistência) | Claude Opus / GPT-4o | Gemini Pro | Qualidade de escrita importa aqui |
| Code generation (scripts) | Claude Code | Codex, Qwen-Coder | Agente com acesso ao filesystem |
| Embeddings (busca semântica) | Modelo local (nomic-embed) | OpenAI ada-002 | Roda local, sem custo recorrente |
A interface de roteamento é feita via OpenRouter (API unificada para 100+ modelos) ou via configuração direta por plugin no Obsidian.
O vault opera em 5 domínios com características distintas:
ticker, asset_class (renda fixa, variável, FII, cripto, commodity), market (BR, US, global)language (Go, Python, Rust…), area (sistemas distribuídos, IA/LLMs, DevOps, arquitetura…), repo_urlflag_number (1-7), jurisdiction, program_type (CBI, residência, offshore corp, etc.)art (gramática, lógica, retórica, aritmética, geometria, música, astronomia), author, work, chaptersubdomain (carnes, vinhos, metais, terras), type (receita, análise, cotação, nota pessoal)vault/
├── 00-inbox/ # Tudo cai aqui primeiro
│ ├── FIN/ # Inbox por domínio (opcional, pode ser flat)
│ ├── ENG/
│ ├── FLAG/
│ ├── EDU/
│ └── VIT/
│
├── 01-financas/
│ ├── macro/ # Análises macroeconômicas
│ ├── renda-variavel/ # Ações, ETFs
│ ├── renda-fixa/
│ ├── fiis/
│ ├── cripto/
│ ├── commodities/ # Ouro, prata, agro
│ └── _index.md # MOC do domínio
│
├── 02-engenharia/
│ ├── go/
│ ├── arquitetura/
│ ├── ia-llms/
│ ├── devops/
│ ├── fundamentos-cs/
│ ├── ferramentas/
│ └── _index.md
│
├── 03-flag-theory/
│ ├── 1-cidadania/
│ ├── 2-residencia-fiscal/
│ ├── 3-offshore-banking/
│ ├── 4-empresa-offshore/
│ ├── 5-ativos-fisicos/
│ ├── 6-ativos-digitais/
│ ├── 7-seguranca-digital/
│ ├── jurisdicoes/ # Uma nota por jurisdição relevante
│ └── _index.md
│
├── 04-educacao-classica/
│ ├── trivium/
│ │ ├── gramatica/
│ │ ├── logica/
│ │ └── retorica/
│ ├── quadrivium/
│ │ ├── aritmetica/
│ │ ├── geometria/
│ │ ├── musica/
│ │ └── astronomia/
│ ├── autores/ # Notas por autor (Carpeaux, Hugo de São Vítor, etc.)
│ ├── obras/ # Notas por obra/livro
│ └── _index.md
│
├── 05-hobbies/
│ ├── carnes/
│ ├── vinhos/
│ ├── metais-preciosos/
│ ├── terras-produtivas/
│ └── _index.md
│
├── 06-blog/ # Artigos para publicação no Hugo
│ ├── drafts/ # Rascunhos em andamento
│ ├── review/ # Em revisão (IA + pessoal)
│ └── published/ # Prontos para publicar (tag publish: true)
│
├── MOCs/ # Maps of Content — cross-domain
│ ├── reserva-de-valor.md # Liga FIN + FLAG + VIT (ouro, terras, cripto)
│ ├── internacionalizacao.md # Liga FLAG + FIN
│ ├── stack-tecnico-2026.md # Liga ENG (Go, IA, ferramentas)
│ ├── formacao-intelectual.md # Liga EDU (progresso no Trivium/Quadrivium)
│ └── ...
│
├── templates/ # Templates de nota por tipo
│ ├── artigo.md
│ ├── video.md
│ ├── tweet-thread.md
│ ├── nota-de-leitura.md
│ ├── receita.md
│ ├── jurisdicao.md
│ ├── ativo.md
│ └── degustacao.md
│
├── _system/ # Configs do sistema
│ ├── prompts/ # Prompts usados pela IA para processamento
│ │ ├── summarize.md
│ │ ├── tagger.md
│ │ ├── linker.md
│ │ └── moc-updater.md
│ ├── sources.yaml # Cadastro de fontes (RSS URLs, canais, perfis)
│ ├── domains.yaml # Configuração dos domínios
│ └── cron-config.yaml # Cadência por domínio
│
└── CLAUDE.md # Instruções para Claude Code via MCP
Cada nota gerada pelo sistema segue este schema:
---
title: "Título do conteúdo"
source: "InfoMoney" # De onde veio
source_type: "rss" # rss | youtube | twitter | manual | book
url: "https://..." # Link original
date: 2026-03-30 # Data de publicação original
ingested: 2026-03-30T14:30:00 # Quando foi coletado
domain: "FIN" # FIN | ENG | FLAG | EDU | VIT
tags:
- macro
- selic
- renda-fixa
status: "inbox" # inbox | reviewed | archived | starred
summary: "Resumo de 2-3 linhas gerado pela IA"
related: # Wikilinks sugeridos pela IA
- "[[Perspectivas Selic 2026]]"
- "[[MOCs/reserva-de-valor]]"
# Campos específicos por domínio (opcionais)
ticker: "PETR4" # FIN
asset_class: "renda-variavel" # FIN
flag_number: 2 # FLAG
jurisdiction: "Portugal" # FLAG
art: "lógica" # EDU
author: "Carpeaux" # EDU
subdomain: "carnes" # VIT
---
---
title: ""
source: ""
source_type: ""
url: ""
date:
ingested:
domain: ""
tags:
status: "inbox"
summary: ""
related:
---
#
> Fonte: []() —
## Resumo
## Pontos-chave
## Notas pessoais
<!-- Espaço para suas anotações após revisão -->
---
*Processado automaticamente em *
---
title: " — "
source_type: "book"
domain: "EDU"
art: ""
author: ""
work: ""
chapter: ""
tags:
status: "inbox"
date:
---
# —
**Autor:**
**Arte liberal:**
## Resumo do trecho
<!-- Seu resumo -->
## Citações relevantes
<!-- Trechos que marcou -->
## Conexões
<!-- Como isso se conecta com outras leituras ou domínios -->
## Perguntas abertas
<!-- O que ficou sem resposta, para investigar depois -->
---
title: " — Flag Theory"
source_type: "manual"
domain: "FLAG"
jurisdiction: ""
tags:
status: "inbox"
date:
---
#
## Cidadania / Residência (Flag 1)
<!-- Programas disponíveis, requisitos, custos, timeline -->
## Tributação (Flag 2)
<!-- Regime fiscal, territorial vs. worldwide, tratados -->
## Banking (Flag 3)
<!-- Bancos acessíveis, requisitos de abertura, reputação -->
## Empresas (Flag 4)
<!-- Tipos societários, custos, compliance, substance requirements -->
## Ativos físicos (Flag 5)
<!-- Imóveis, terras, metais — regras de posse por estrangeiros -->
## Ativos digitais (Flag 6)
<!-- Regulamentação cripto, exchanges locais -->
## Notas pessoais
<!-- Suas observações e decisões -->
---
title: ""
source: ""
source_type: ""
url: ""
domain: "VIT"
subdomain: "carnes"
tags:
status: "inbox"
date:
---
#
## Ingredientes
<!-- Lista -->
## Preparo
<!-- Passo a passo -->
## Temperaturas e tempos
| Etapa | Temperatura | Tempo |
|-------|------------|-------|
| | | |
## Notas pessoais
<!-- Como ficou quando você testou, ajustes -->
┌─────────────────────────────────────────────┐
│ sources.yaml │
│ (cadastro de todas as fontes por domínio) │
└──────────────────┬──────────────────────────┘
│
┌────────▼────────┐
│ Scheduler │
│ (cron/systemd) │
└────────┬────────┘
│
┌─────────────┼─────────────┐
▼ ▼ ▼
┌─────────┐ ┌──────────┐ ┌──────────┐
│ RSS │ │ YouTube │ │ Twitter │
│ Fetcher │ │ Fetcher │ │ Fetcher │
└────┬────┘ └────┬─────┘ └────┬─────┘
│ │ │
└─────────┬─┘────────────┘
▼
┌─────────────────┐
│ Deduplicador │
│ (SQLite/hash) │
└────────┬────────┘
▼
┌─────────────────┐
│ Fila de │
│ processamento │
└────────┬────────┘
▼
┌─────────────────┐
│ IA Processing │
│ (Claude API) │
└────────┬────────┘
▼
┌─────────────────┐
│ Markdown Writer│
│ → vault/inbox/ │
└─────────────────┘
domains:
FIN:
schedule: "*/4 * * * *" # A cada 4 horas
sources:
- name: "InfoMoney"
type: rss
url: "https://www.infomoney.com.br/feed/"
tags_default: [mercado, brasil]
- name: "Valor Econômico"
type: rss
url: "https://valor.globo.com/rss/"
tags_default: [mercado, macro]
- name: "Yahoo Finance BR"
type: rss
url: "https://news.google.com/rss/search?q=when:24h+allinurl:finance.yahoo.com&hl=pt-BR"
tags_default: [mercado, global]
ENG:
schedule: "*/6 * * * *" # A cada 6 horas
sources:
- name: "Hacker News - Best"
type: rss
url: "https://hnrss.org/best?points=100"
tags_default: [tech]
- name: "Lobsters"
type: rss
url: "https://lobste.rs/rss"
tags_default: [tech]
- name: "Go Blog"
type: rss
url: "https://go.dev/blog/feed.atom"
tags_default: [go, golang]
- name: "Akita On Rails"
type: rss
url: "https://akitaonrails.com/index.xml"
tags_default: [tech, dev-br]
FLAG:
schedule: "0 8 * * 1" # Segunda-feira às 8h
sources:
- name: "Flag Theory Blog"
type: rss
url: "https://flagtheory.com/feed/"
tags_default: [flag-theory, internacionalizacao]
- name: "Nomad Capitalist"
type: youtube_channel
channel_id: "UCgzfj9jqIajBSKSiEF4LC2A"
tags_default: [flag-theory, internacionalizacao]
EDU:
schedule: null # Sem automação — manual only
sources: []
VIT:
schedule: "0 12 * * *" # Diário ao meio-dia
sources:
- name: "Kitco News"
type: rss
url: "https://www.kitco.com/feed/rss/news/"
tags_default: [metais, ouro, prata]
O sistema usa um SQLite local com hash SHA256 da URL como chave primária:
CREATE TABLE ingested_items (
url_hash TEXT PRIMARY KEY,
url TEXT NOT NULL,
source TEXT NOT NULL,
domain TEXT NOT NULL,
ingested_at DATETIME DEFAULT CURRENT_TIMESTAMP,
vault_path TEXT,
status TEXT DEFAULT 'processed'
);
Antes de processar qualquer item, verifica se url_hash já existe. Isso evita duplicatas mesmo se o mesmo artigo aparecer em múltiplos feeds.
| Domínio | Cron | Volume estimado/dia | Justificativa |
|---|---|---|---|
| FIN | A cada 4h | 10-20 itens | Mercado muda rápido, precisa estar atualizado |
| ENG | A cada 6h | 5-15 itens | Conteúdo com meia-vida longa, menos urgência |
| FLAG | Semanal (segunda) | 2-5 itens | Mudanças regulatórias são lentas |
| EDU | Manual | 0 automático | Baseado em leitura de livros |
| VIT | Diário (12h) | 3-8 itens | Mix de cotações (metais) e conteúdo estável |
Cada item coletado passa por 4 etapas de IA:
[[wikilinks]]Você é um assistente de curadoria de conhecimento. Dado o conteúdo abaixo,
gere um resumo factual em português de 2-3 parágrafos. Sem opinião, sem
sensacionalismo. Foque nos fatos, dados e conclusões do autor original.
Domínio:
Fonte:
Título:
Conteúdo:
<h1 id="agentsmd--instruções-para-agentes-de-ia">AGENTS.md — Instruções para agentes de IA</h1>
<blockquote>
<p>Este arquivo é lido automaticamente pelo Claude Code via symlink CLAUDE.md → AGENTS.md.</p>
</blockquote>
<h2 id="contexto-do-projeto">Contexto do projeto</h2>
<p>Monorepo com blog pessoal Hugo + Hextra, deploy via GitHub Pages em fsiggor.github.io.</p>
<p>O dono é engenheiro de software que segue princípios XP (Kent Beck): simplicidade, feedback, comunicação, coragem. Documentação em português, conteúdo do blog em inglês.</p>
<h2 id="estrutura">Estrutura</h2>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>├── AGENTS.md # Este arquivo (instruções para IA)
├── CLAUDE.md # Symlink → AGENTS.md (gitignored)
├── README.md # Descrição do projeto
├── blog/ # Site Hugo + Hextra
│ ├── hugo.toml
│ ├── content/
│ ├── archetypes/
│ └── static/
├── docs/ # Documentação do projeto
└── .github/workflows/ # CI/CD
</code></pre></div></div>
<h2 id="regras">Regras</h2>
<ul>
<li><strong>CLAUDE.md é symlink para AGENTS.md</strong> — só AGENTS.md vai pro git, CLAUDE.md está no .gitignore</li>
<li>Simplicidade acima de tudo (YAGNI, KISS)</li>
<li>Não crie arquivos ou estruturas desnecessárias</li>
<li>Conteúdo do blog vai em <code class="language-plaintext highlighter-rouge">blog/content/blog/</code></li>
<li>Hugo config em <code class="language-plaintext highlighter-rouge">blog/hugo.toml</code></li>
<li>Frontmatter YAML (<code class="language-plaintext highlighter-rouge">---</code>) em todos os .md de conteúdo</li>
<li>Para rodar o Hugo: <code class="language-plaintext highlighter-rouge">cd blog && hugo server -D</code></li>
</ul>
<h2 id="tom-e-estilo">Tom e estilo</h2>
<ul>
<li>Respostas diretas, sem enrolação</li>
<li>O dono é técnico — pode usar jargão de programação e conceitos avançados</li>
<li>Em português por padrão; inglês para conteúdo técnico e blog</li>
</ul>
Responda APENAS com o resumo, sem preâmbulo.
Dado o conteúdo abaixo, gere:
1. Uma lista de 3-7 tags relevantes (lowercase, sem acentos, separadas por vírgula)
2. O domínio principal: FIN, ENG, FLAG, EDU ou VIT
3. Campos específicos do domínio quando aplicável
Conteúdo:
<h1 id="agentsmd--instruções-para-agentes-de-ia">AGENTS.md — Instruções para agentes de IA</h1>
<blockquote>
<p>Este arquivo é lido automaticamente pelo Claude Code via symlink CLAUDE.md → AGENTS.md.</p>
</blockquote>
<h2 id="contexto-do-projeto">Contexto do projeto</h2>
<p>Monorepo com blog pessoal Hugo + Hextra, deploy via GitHub Pages em fsiggor.github.io.</p>
<p>O dono é engenheiro de software que segue princípios XP (Kent Beck): simplicidade, feedback, comunicação, coragem. Documentação em português, conteúdo do blog em inglês.</p>
<h2 id="estrutura">Estrutura</h2>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>├── AGENTS.md # Este arquivo (instruções para IA)
├── CLAUDE.md # Symlink → AGENTS.md (gitignored)
├── README.md # Descrição do projeto
├── blog/ # Site Hugo + Hextra
│ ├── hugo.toml
│ ├── content/
│ ├── archetypes/
│ └── static/
├── docs/ # Documentação do projeto
└── .github/workflows/ # CI/CD
</code></pre></div></div>
<h2 id="regras">Regras</h2>
<ul>
<li><strong>CLAUDE.md é symlink para AGENTS.md</strong> — só AGENTS.md vai pro git, CLAUDE.md está no .gitignore</li>
<li>Simplicidade acima de tudo (YAGNI, KISS)</li>
<li>Não crie arquivos ou estruturas desnecessárias</li>
<li>Conteúdo do blog vai em <code class="language-plaintext highlighter-rouge">blog/content/blog/</code></li>
<li>Hugo config em <code class="language-plaintext highlighter-rouge">blog/hugo.toml</code></li>
<li>Frontmatter YAML (<code class="language-plaintext highlighter-rouge">---</code>) em todos os .md de conteúdo</li>
<li>Para rodar o Hugo: <code class="language-plaintext highlighter-rouge">cd blog && hugo server -D</code></li>
</ul>
<h2 id="tom-e-estilo">Tom e estilo</h2>
<ul>
<li>Respostas diretas, sem enrolação</li>
<li>O dono é técnico — pode usar jargão de programação e conceitos avançados</li>
<li>Em português por padrão; inglês para conteúdo técnico e blog</li>
</ul>
Responda em JSON:
{
"tags": ["tag1", "tag2"],
"domain": "FIN",
"specific_fields": {
"ticker": "PETR4",
"asset_class": "renda-variavel"
}
}
Dado o resumo abaixo e a lista de notas existentes no vault, sugira
até 5 notas relacionadas que devem ser linkadas via wikilink.
Resumo:
Notas existentes (título | tags):
Responda em JSON:
{
"related": ["Nota X", "Nota Y"],
"reasoning": "Breve justificativa para cada link"
}
Usando Claude Sonnet via API (ou equivalente via OpenRouter para otimizar custo):
| Operação | Tokens estimados | Custo por item (aprox.) |
|---|---|---|
| Resumo | ~1500 input + 500 output | ~$0.005 |
| Tagger | ~1500 input + 200 output | ~$0.003 |
| Linker | ~2000 input + 300 output | ~$0.004 |
| Total por item | ~$0.012 | |
| 30 itens/dia × 30 dias | ~$10.80/mês |
Nota: Esses valores variam conforme o modelo e provedor. Via OpenRouter com modelos mais baratos, pode cair para $3-5/mês.
O Obsidian funciona como sua interface principal de chat com IA — no navegador ou desktop — com a vantagem de ter o contexto do vault inteiro disponível para fundamentar respostas.
O ecossistema de plugins é montado em camadas, cada uma AI agnostic:
Camada 1 — Chat conversacional com contexto do vault:
Plugin principal: Smart Connections + Smart Chat
Camada 2 — Chat agêntico (lê/escreve no vault):
Plugin: Claudian (sidebar com Claude Code) ou BMO Chatbot (multi-provider)
Camada 3 — Edição in-place (sem chat):
Plugin: Nova ou ChatGPT MD
model: "ollama/llama3.2" ou model: "claude-sonnet-4-20250514"Camada 4 — Roteamento de provedores (hub central):
Plugin: AI Providers
OpenRouter funciona como proxy unificado para 100+ modelos. Todos os plugins que aceitam “OpenAI-compatible endpoint” funcionam com OpenRouter:
Endpoint: https://openrouter.ai/api/v1
API Key: sk-or-...
Model: anthropic/claude-sonnet-4 (ou qualquer outro)
Isso significa que você pode trocar de modelo a qualquer momento sem mudar plugin. Na prática:
google/gemini-2.5-flash (barato e rápido)anthropic/claude-sonnet-4 (melhor RAG)anthropic/claude-opus-4 (melhor qualidade)deepseek/deepseek-chat (custo mínimo)ollama/llama3.2 (local, zero cloud)Para dados sensíveis (finanças, flag theory), rodar modelos localmente é ideal:
# Instalar Ollama
curl -fsSL https://ollama.com/install.sh | sh
# Baixar modelos
ollama pull llama3.2 # Chat geral (3B, roda em qualquer máquina)
ollama pull nomic-embed-text # Embeddings para Smart Connections
ollama pull qwen2.5-coder # Assistência de código
# O servidor roda em http://localhost:11434
# Todos os plugins de Obsidian que suportam Ollama apontam para esse endpoint
Fluxo recomendado: dados sensíveis → Ollama local. Dados públicos/tech → API cloud via OpenRouter.
Você abre o Obsidian no navegador (Obsidian Web ou desktop app)
│
├── Quer perguntar algo rápido sobre o vault?
│ └── Smart Chat → busca notas via RAG → envia contexto + pergunta para o modelo
│
├── Quer que a IA crie/edite notas no vault?
│ └── Claudian/BMO → agente com acesso ao filesystem → cria, edita, organiza
│
├── Está escrevendo um artigo e quer assistência?
│ └── ChatGPT MD / Nova → edição in-place → reescrever, expandir, traduzir
│
└── Quer deep research cruzando vault + web?
└── Claude Code via MCP → busca vault primeiro → web search como fallback
Nota no vault (status: draft)
│
├── IA assiste na escrita (Smart Chat, Nova, ChatGPT MD)
│
├── Nota recebe tag #publish no frontmatter
│
├── Git hook ou script detecta a tag
│
├── obsidian-to-hugo converte wikilinks → Hugo refs
│
├── Copia para hugo/content/posts/
│
├── Hugo build (local preview ou CI/CD)
│
└── Deploy (Netlify, Cloudflare Pages, Vercel, ou self-hosted)
vault/
├── 06-blog/ # Artigos em andamento
│ ├── drafts/ # Rascunhos (status: draft)
│ ├── review/ # Em revisão (status: review)
│ └── published/ # Publicados (status: published)
│
└── ...
---
title: "Como estruturar investimentos usando Flag Theory"
date: 2026-03-30
draft: false
publish: true # Flag que triggers o pipeline
slug: "flag-theory-investimentos"
categories:
- finanças
- flag-theory
tags:
- internacionalizacao
- investimentos
- offshore
summary: "Um guia prático sobre como aplicar os 7 flags..."
domain: "FLAG"
status: "published"
hugo_section: "posts" # Onde vai no Hugo (posts, notes, guides...)
---
Usando obsidian-to-hugo (Python, zero dependências):
# Instalar
pip install obsidian-to-hugo
# Executar (pode ser via git hook, cron, ou manualmente)
python -m obsidian_to_hugo \
--obsidian-vault-dir=/path/to/vault/06-blog/published \
--hugo-content-dir=/path/to/hugo/content/posts
O que ele faz automaticamente:
[[wikilinks]] para Hugo [text]()==highlights== para <mark>highlights</mark>hugo/static/images/#!/bin/bash
# .git/hooks/post-commit (no repo do vault)
BLOG_DIR="/path/to/hugo"
VAULT_DIR="/path/to/vault"
# Encontra notas com publish: true
PUBLISH_FILES=$(grep -rl "publish: true" "$VAULT_DIR/06-blog/" --include="*.md")
if [ -n "$PUBLISH_FILES" ]; then
python -m obsidian_to_hugo \
--obsidian-vault-dir="$VAULT_DIR/06-blog/published" \
--hugo-content-dir="$BLOG_DIR/content/posts"
cd "$BLOG_DIR"
git add -A
git commit -m "Auto-publish from vault"
git push # Triggers Netlify/Cloudflare build
fi
O diferencial do seu blog: você não escreve do zero nem posta conteúdo genérico de IA. O fluxo é:
publish: true → git hook → Hugo → deployO conteúdo sai fundamentado na sua base de conhecimento, não genérico.
| Opção | Custo | Setup | Nota |
|---|---|---|---|
| Cloudflare Pages | Grátis | Conecta GitHub, build command: hugo |
Mais rápido, CDN global |
| Netlify | Grátis (tier básico) | Conecta GitHub, auto-build | Mais popular, boa DX |
| Self-hosted (VPS) | ~$5/mês | Hugo build local + rsync/scp | Controle total |
| GitHub Pages | Grátis | GitHub Actions + Hugo | Simples mas menos flexível |
O vault contém dados com sensibilidades diferentes. A estratégia é criptografia em camadas:
Camada 1 — Disco (at rest):
Camada 2 — Git (sync/backup):
.gitattributes:# Criptografar tudo exceto configs do git
*.md filter=git-crypt diff=git-crypt
*.canvas filter=git-crypt diff=git-crypt
*.png filter=git-crypt diff=git-crypt
*.jpg filter=git-crypt diff=git-crypt
*.pdf filter=git-crypt diff=git-crypt
# NÃO criptografar
.gitattributes !filter !diff
.gitignore !filter !diff
Setup:
# Inicializar
cd /path/to/vault
git init
git-crypt init
# Exportar chave simétrica (BACKUP ESSA CHAVE!)
git-crypt export-key ~/vault-key.bin
# Ou usar GPG (recomendado — já usa para commits assinados)
git-crypt add-gpg-user SEU_EMAIL@example.com
# Verificar status
git-crypt status
Camada 3 — Notas individuais (sensíveis):
| Domínio | Sensibilidade | Camada 1 (disco) | Camada 2 (git) | Camada 3 (nota) |
|---|---|---|---|---|
| FIN | Alta | Sim | git-crypt | Seções com dados bancários |
| FLAG | Alta | Sim | git-crypt | Dados de passaporte/contas |
| ENG | Baixa | Sim | git-crypt (pode relaxar) | Não necessário |
| EDU | Baixa | Sim | git-crypt | Não necessário |
| VIT | Baixa | Sim | git-crypt | Não necessário |
Ponto crítico: a criptografia do vault não pode impedir o funcionamento dos plugins de IA.
A chave do git-crypt é o ponto único de falha. Perder = perder acesso ao vault no remote.
Estratégia de backup:
git-crypt export-key ~/vault-key.binobsidian-claude-code-mcp (iansinnott)
claude no terminal, executar /ide e selecionar Obsidianclaude_desktop_config.json# Personal Knowledge Engine — Instruções
## Contexto
Este vault é uma base de conhecimento pessoal com 5 domínios:
- FIN: Finanças e investimentos (investidor solo)
- ENG: Engenharia de software e CS
- FLAG: Flag Theory (internacionalização, soberania financeira)
- EDU: Educação clássica (Trivium + Quadrivium, Carpeaux)
- VIT: Interesses pessoais (carnes, vinhos, metais, terras)
## Regra de ouro para consultas
1. SEMPRE busque primeiro no vault local antes de ir para a web
2. Use as tags e o frontmatter YAML para filtrar resultados
3. Cite as notas do vault com [[wikilinks]] na resposta
4. Se o vault não tem a informação, faça web search como fallback
5. Ao usar web search, pergunte se o usuário quer salvar o resultado como nova nota
## Estrutura do vault
- 00-inbox/: itens não revisados (status: inbox)
- 01-financas/ a 05-hobbies/: conteúdo organizado por domínio
- MOCs/: Maps of Content que cruzam domínios
- templates/: templates de nota por tipo
- _system/: configs e prompts
## Frontmatter
Todas as notas têm frontmatter YAML com: title, source, domain, tags, status, summary, related.
Use esses campos para filtrar buscas.
## Ao criar novas notas
- Use o template apropriado de templates/
- Coloque em 00-inbox/{DOMAIN}/
- Preencha o frontmatter completo
- Sugira wikilinks para notas existentes
## Tom
Respostas diretas, sem enrolação. O usuário é técnico e quer dados, não disclaimers.
Para finanças: apresente fatos e dados, não recomendações de compra/venda.
Para educação clássica: respeite a tradição intelectual, referencie autores originais.
Consulta simples (vault-first):
Você: "O que eu tenho sobre Selic?"
Claude Code → MCP → busca no vault por tag "selic"
→ Encontra 8 notas → sintetiza com citações [[wikilink]]
Consulta com fallback web:
Você: "Qual a última decisão do Copom?"
Claude Code → MCP → busca "copom" no vault
→ Nota mais recente é de 2 semanas atrás
→ Faz web search para dados atuais
→ Pergunta: "Quer que eu salve isso como nova nota?"
Deep research (cross-domain):
Você: "Compile tudo que tenho sobre proteção de patrimônio"
Claude Code → MCP → busca tags: ouro, metais, flag-theory, ativos-fisicos, terras
→ Encontra notas em FIN, FLAG e VIT
→ Gera relatório cruzando os domínios
→ Atualiza MOCs/reserva-de-valor.md
Assistência em leitura (EDU):
Você: "Acabei de ler o capítulo 3 do Trivium da Miriam Joseph sobre lógica proposicional.
Crie uma nota de leitura e conecte com o que já tenho."
Claude Code → cria nota usando template nota-de-leitura.md
→ Busca notas existentes em 04-educacao-classica/trivium/logica/
→ Sugere conexões com notas anteriores
Além da ingestão contínua, o sistema roda jobs semanais:
00-inbox/ com status “inbox”MOCs/digest-semanal-YYYY-WW.md06-blog/)Entregável: Vault criptografado, chat IA funcionando com contexto do vault.
Entregável: Notas aparecendo automaticamente no vault a cada poucas horas.
Entregável: Notas chegam no vault já resumidas, tageadas e linkadas.
Entregável: Sistema completo: coleta → IA → vault criptografado → chat → escrita → blog Hugo.
| Componente | Opção A (pragmática) | Opção B (se quiser aprender Go) |
|---|---|---|
| Coletor/fetcher | Python (feedparser, yt-dlp, tweepy) | Go (gofeed, youtube API client) |
| Deduplicação | SQLite (nativo em ambos) | SQLite |
| Processamento IA | OpenRouter (multi-modelo) | OpenRouter |
| Chat no Obsidian | Smart Chat + BMO Chatbot | Smart Chat + Claudian |
| Modelos locais | Ollama (llama3.2, nomic-embed) | Ollama |
| Escrita assistida | ChatGPT MD / Nova (in-place) | ChatGPT MD / Nova |
| Scheduler | cron + systemd | cron + systemd |
| Markdown writer | Python (gera .md direto) | Go (template/text) |
| Vault | Obsidian | Obsidian |
| Criptografia (git) | git-crypt + GPG | git-crypt + GPG |
| Criptografia (disco) | LUKS / FileVault / BitLocker | LUKS / FileVault / BitLocker |
| Consulta agêntica | Claude Code + MCP plugin | Claude Code + MCP plugin |
| Blog | Hugo | Hugo |
| Deploy blog | Cloudflare Pages / Netlify | Cloudflare Pages / Netlify |
| Obsidian→Hugo | obsidian-to-hugo (Python) | Script custom (Go) |
| Versionamento | Git + git-crypt | Git + git-crypt |
| Risco | Impacto | Mitigação |
|---|---|---|
| Inbox infinito (acumula sem revisar) | Vault vira cemitério | Digest semanal + alerta de notas >30 dias sem revisão |
| Custo de IA escala com volume | Gasto mensal cresce | Rate limit por domínio + OpenRouter com modelos baratos para batch |
| Fontes RSS quebram/mudam | Ingestão para | Healthcheck semanal de fontes + alertas |
| Vault fica grande demais | Obsidian fica lento | Arquivar notas antigas (>6 meses sem acesso) em pasta separada |
| Over-engineering prematuro | Nunca termina | Fase 1 sem código — só vault + chat IA manual |
| Duplicatas cross-domain | Mesma nota em FIN e FLAG | Tag multi-domain no frontmatter, nota física em um só lugar |
| Perda da chave de criptografia | Perda total do vault remoto | Backup em 3 locais: pendrive, password manager, cópia offline |
| Vendor lock-in em IA | Dependência de um provedor | OpenRouter como abstração + Ollama local como fallback |
| Dados sensíveis enviados para cloud | Vazamento de dados financeiros | Ollama para domínios FIN e FLAG; cloud só para ENG e EDU |
| Blog publica nota errada | Conteúdo inacabado vai ao ar | Flag publish: true explícita + preview local antes do deploy |