← Inforjota

As tuas notas, com memória.

Your notes, with memory.

Um cofre Markdown (compatível com o Obsidian) que procura por significado, responde com fontes, arruma as ideias soltas sozinho — e deixa os teus agentes de IA ler e escrever sem nunca sobrepor o que escreveste. Na tua máquina, só Python, sem conta em lado nenhum.

A Markdown vault (Obsidian-compatible) that searches by meaning, answers with sources, tidies loose ideas on its own — and lets your AI agents read and write without ever overwriting what you wrote. On your machine, plain Python, no account anywhere.

Instalar em 2 minutos Install in 2 minutes Código (MIT) Source (MIT)

Os teus ficheiros

Your files

Markdown numa pasta com histórico git. Abre com o Obsidian, o vim, o que quiseres. Sem base de dados fechada.

Markdown in a folder with git history. Open it with Obsidian, vim, anything. No closed database.

Pesquisa por significado, offline

Semantic search, offline

Com embeddings locais (Ollama) encontras «aquela nota do barco das 8» sem acertar nas palavras. Sem embeddings, procura por palavras (BM25).

With local embeddings (Ollama) you find “that note about the 8 o’clock ferry” without matching the words. Without them, lexical search (BM25).

Agentes que não estragam nada

Agents that break nothing

Servidor MCP com 7 ferramentas, para o Claude, o ChatGPT, o Codex. Cada escrita exige o hash da versão lida; se mudou, o agente recebe o texto actual e funde. Não há apagar.

MCP server with 7 tools, for Claude, ChatGPT, Codex. Every write needs the hash of the version read; if it changed, the agent gets the current text and merges. There is no delete.

Nada se perde numa corrida

Nothing lost in a race

Escritas atómicas compare-and-swap (renameat2), trinco entre processos, cópias de segurança do que sai numa troca. Auditado por uma IA de outra família.

Atomic compare-and-swap writes (renameat2), cross-process lock, safety copies of whatever leaves in a swap. Audited by an AI of another family.

Mesmo sem rede

Truly offline

A interface guarda uma cópia local (service worker + IndexedDB) com trancas por sessão: editas no telemóvel sem rede e sincroniza quando voltar.

The UI keeps a local copy (service worker + IndexedDB) with per-session locks: edit on your phone with no network, sync when it is back.

Diagramas, fórmulas, IA no editor

Diagrams, formulas, AI in the editor

Mermaid e KaTeX como no Obsidian; editor CodeMirror 6 com resumir, reescrever, continuar. Segredos em claro são recusados ao gravar.

Mermaid and KaTeX as in Obsidian; a CodeMirror 6 editor with summarise, rewrite, continue. Plaintext secrets are refused on save.

Instalar

Install

git clone https://github.com/inforjota/basalt basalt && cd basalt
python3 -m basalt iniciar --dados ~/basalt-dados --email tu@exemplo.pt
BASALT_CONFIG=~/basalt-dados/basalt.toml python3 -m basalt serve   # http://127.0.0.1:8121

Linux com Python ≥ 3.11 e git — no Windows dentro do WSL2, no Mac com o Docker. Chega um portátil: ver «Só com um portátil» em docs/INSTALAR.md. IA local opcional com o Ollama (nomic-embed-text + um modelo de chat).

Linux with Python ≥ 3.11 and git — on Windows inside WSL2, on a Mac with Docker. A laptop is enough: see “Só com um portátil” in docs/INSTALAR.md. Optional local AI with Ollama (nomic-embed-text + a chat model).

Traz a tua IA

Bring your own AI

Usa o Claude (claude.ai, app e telemóvel) ou o ChatGPT com as tuas notas, na subscrição que já pagas: na página 🔌 Ligar a tua IA copias um endereço, colas na tua IA, entras e carregas em «Permitir». Sem chaves para copiar — é OAuth, e cortas o acesso quando quiseres com um clique em «Revogar». Precisa de o Basalt se ver na internet (proxy HTTPS ou túnel); num portátil, só enquanto estiver ligado.

Use Claude (claude.ai, desktop and mobile) or ChatGPT with your notes, on the plan you already pay for: on the 🔌 Connect your AI page you copy one address, paste it into your AI, sign in and press “Allow”. No keys to copy — it is OAuth, and you cut access whenever you want with one click on “Revoke”. Basalt must be reachable from the internet (HTTPS proxy or tunnel); on a laptop, only while it is on.

https://notas.exemplo.pt/mcp

Agentes no terminal também: claude mcp add basalt -- python3 -m basalt mcp --utilizador tu@exemplo.pt, e o Codex com um token criado na mesma página. Depois: «procura nas minhas notas o que decidi sobre o servidor», «acrescenta à nota projecto_x que…». Tudo em docs/MCP.md.

Terminal agents too: claude mcp add basalt -- python3 -m basalt mcp --utilizador you@example.com, and Codex with a token made on the same page. Then: “search my notes for what I decided about the server”, “append to note project_x that…”. All in docs/MCP.md.

Segurança, em duas linhas

Security, in two lines

Escuta em 127.0.0.1 por omissão; para a rede, um proxy HTTPS à frente. Sessões HttpOnly/SameSite=Strict, scrypt, limite de tentativas por IP. O MCP por HTTP só aceita Authorization: Bearer — nunca o cookie — por isso um site de terceiros no teu browser não consegue escrever nas tuas notas.

Listens on 127.0.0.1 by default; for the network, an HTTPS proxy in front. HttpOnly/SameSite=Strict sessions, scrypt, per-IP attempt limit. MCP over HTTP accepts Authorization: Bearer only — never the cookie — so a third-party site in your browser cannot write to your notes.

Não queres instalar sozinho?

Don't want to install it yourself?

Mais em inforjota.com/basalt, onde também pedes acesso à beta. O código continua grátis e completo; o que se paga é o serviço.

More at inforjota.com/basalt (page in Portuguese), where you can also ask to join the beta. The code stays free and complete; what you pay for is the service.