Igor Fernandes

Personal Knowledge Engine — Documento de Arquitetura

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:


1. Visão geral

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.


2. Domínios de conhecimento

O vault opera em 5 domínios com características distintas:

2.1 Finanças e investimentos (FIN)

2.2 Engenharia de software e ciência da computação (ENG)

2.3 Flag Theory (FLAG)

2.4 Educação clássica (EDU)

2.5 Interesses pessoais e hobbies (VIT)


3. Estrutura do vault Obsidian

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

4. Frontmatter YAML padrão

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
---

5. Templates de nota

5.1 Template: Artigo (genérico)

---
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 *

5.2 Template: Nota de leitura (Educação clássica)

---
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 -->

5.3 Template: Jurisdição (Flag Theory)

---
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 -->

5.4 Template: Receita (Hobbies/Carnes)

---
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 -->

6. Pipeline de ingestão (Coletor)

6.1 Arquitetura do coletor

┌─────────────────────────────────────────────┐
│              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/ │
     └─────────────────┘

6.2 Arquivo sources.yaml

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]

6.3 Deduplicação

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.

6.4 Cadência por domínio

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

7. Processamento IA

7.1 Pipeline de processamento

Cada item coletado passa por 4 etapas de IA:

  1. Resumo: 2-3 parágrafos factuais do conteúdo
  2. Tagger: Gera tags relevantes + identifica domínio e subdomínio
  3. Linker: Busca notas existentes no vault que se relacionam e sugere [[wikilinks]]
  4. MOC Updater: Se o item é relevante para um MOC existente, sugere adição

7.2 Prompt de resumo (summarize.md)

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 &amp;&amp; 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.

7.3 Prompt de tagging (tagger.md)

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 &amp;&amp; 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"
  }
}

7.4 Prompt de linkagem (linker.md)

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"
}

7.5 Custo estimado

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.


8. Chat IA no Obsidian (AI agnostic)

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.

8.1 Stack de plugins recomendado

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

Camada 4 — Roteamento de provedores (hub central):

Plugin: AI Providers

8.2 Configuração AI agnostic via OpenRouter

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:

8.3 Modelos locais via Ollama

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.

8.4 Fluxo de chat no dia a dia

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

9. Pipeline de publicação: Obsidian → Hugo

9.1 Visão geral do fluxo

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)

9.2 Estrutura no vault para publicação

vault/
├── 06-blog/                     # Artigos em andamento
│   ├── drafts/                  # Rascunhos (status: draft)
│   ├── review/                  # Em revisão (status: review)
│   └── published/               # Publicados (status: published)
│
└── ...

9.3 Frontmatter para artigos publicáveis

---
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...)
---

9.4 Script de sincronização Obsidian → Hugo

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:

9.5 Automação via Git hook

#!/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

9.6 IA como assistente de escrita

O diferencial do seu blog: você não escreve do zero nem posta conteúdo genérico de IA. O fluxo é:

  1. Pesquisa: Claude Code busca no vault notas relevantes sobre o tema (via MCP)
  2. Outline: IA sugere estrutura do artigo baseada nas suas notas coletadas
  3. Primeiro rascunho: Você escreve o core, IA expande e refina (via Nova/ChatGPT MD in-place)
  4. Fact-check: IA cruza claims do artigo com notas do vault e fontes originais
  5. Revisão: IA corrige gramática, melhora fluxo, sugere cortes (especialmente útil para português/inglês)
  6. Publicação: Tag publish: true → git hook → Hugo → deploy

O conteúdo sai fundamentado na sua base de conhecimento, não genérico.

9.7 Deploy sugerido

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

10. Criptografia do vault

10.1 Estratégia de criptografia em camadas

O vault contém dados com sensibilidades diferentes. A estratégia é criptografia em camadas:

Camada 1 — Disco (at rest):

Camada 2 — Git (sync/backup):

# 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):

10.2 Configuração recomendada por domínio

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

10.3 Compatibilidade com IA

Ponto crítico: a criptografia do vault não pode impedir o funcionamento dos plugins de IA.

10.4 Backup da chave de criptografia

A chave do git-crypt é o ponto único de falha. Perder = perder acesso ao vault no remote.

Estratégia de backup:


11. Consulta via Claude Code + MCP

8.1 Setup

  1. Plugin Obsidian: Instalar obsidian-claude-code-mcp (iansinnott)
    • Habilita servidor MCP via WebSocket (porta 22360)
    • Claude Code auto-descobre o vault via lock file
  2. Claude Code: Configurar para conectar ao Obsidian
    • Ao rodar claude no terminal, executar /ide e selecionar Obsidian
    • Ou configurar manualmente no claude_desktop_config.json
  3. CLAUDE.md: Arquivo na raiz do vault com instruções de comportamento

8.2 CLAUDE.md (instruções para Claude Code)

# 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.

8.3 Fluxos de consulta

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

12. Jobs periódicos

Além da ingestão contínua, o sistema roda jobs semanais:

9.1 Curadoria semanal (domingo à noite)

9.2 Digest semanal (segunda de manhã)

9.3 Limpeza mensal


13. Fases de implementação

Fase 1 — Fundação (Semana 1-2)

Entregável: Vault criptografado, chat IA funcionando com contexto do vault.

Fase 2 — Coletor automático (Semana 3-4)

Entregável: Notas aparecendo automaticamente no vault a cada poucas horas.

Fase 3 — Processamento IA (Semana 5-6)

Entregável: Notas chegam no vault já resumidas, tageadas e linkadas.

Fase 4 — Pipeline Hugo + Expansão (Semana 7+)

Entregável: Sistema completo: coleta → IA → vault criptografado → chat → escrita → blog Hugo.


14. Stack técnico sugerido

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

15. Riscos e mitigações

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

16. Referências