Standalone · Read-only · Local-first

Your vault already knows. Go ask it.

Basalt reads your Markdown vault and surfaces what you believe but never wrote down — the claim from six months ago that the last four weeks of work depend on. It sits on top of whatever you already have. No methodology to impose.

4/4 site-advertised verbs shipped 0 network calls in the Open tier Read-only — never writes to your notes Verified on a 1,683-note vault

The wedge

Three load-bearing properties. Most tools give up at least one.

Basalt is the only second-brain compiler in this category that keeps all three at once.

Doesn't require an agent

Standalone Python. It runs on your laptop without Claude Code, Cursor, or any editor plugin in the loop.

Doesn't write to your vault

Your notes are the substrate — read from disk, never moved, never modified without consent. A mirror, not a profile.

Doesn't phone home

Embeddings are computed by your local Ollama. The index lives at ~/.basalt. No request leaves your machine in the Open tier.

Cognitive verbs

Five ways to read what you already wrote.

Each verb is one operation over your link graph and embeddings. The signature output is The First Brief — citation-grounded, every section ending in a one-click commit.

01 · IMPLICIT THESIS

The thing you keep saying.

“…without realizing you're saying the same thing.”

Tight clusters of notes converging on an unnamed through-line. The centroid's load-bearing sentence is the proxy thesis.

shipped · v0
02 · CONTRADICTION

The two notes that can't both be true.

“…you wrote and forgot you disagreed with yourself.”

Same-topic pairs whose load-bearing claims carry opposing markers — ship ↔ kill, works ↔ broken. Candidates, not verdicts.

shipped · v0 heuristic
03 · DRIFT

Stated priority vs lived priority.

“…what you say matters versus where the week went.”

Project-folder structure against daily-note mentions over 30 days. Surfaces the largest divergence — your stated #9 is your lived #1.

shipped
04 · CONNECTION

The same idea, two folders apart.

“…that turn out to be the same idea.”

Notes across different top-level folders, no wikilink between them, embedding similarity ≥ 0.78. The link you never drew.

shipped
05 · BURIED INSIGHT

The note you wrote once and left.

“…that recent work quietly keeps citing.”

A claim you haven't returned to, that newer notes still link to — explicit links plus semantic validators. The bonus fifth unlock.

shipped · bonus
+ · THE BRIEF

All of it, one page.

“Run every shipped verb in a single pass.”

basalt brief --section all compiles a longitudinal model of you — claims, drift, theses — under 90 seconds on a 1,500-note vault.

the signature output

The Brief

Citation-grounded. Never a vibe.

Every finding quotes the exact sentence, names the file, and dates it. You can open the note and check. The same output renders in the terminal and in the desktop app.

  • Sentence-aware quotes.Picks the punchline over the setup line, strips Markdown noise, refuses cliffhangers.
  • Hub-note penalty.Maps of content and index hubs are excluded so the real signal surfaces.
  • Vault-age-aware thresholds.Dormancy and recency windows derive from your oldest note, clamped to sane floors.
  basalt brief --section all
THE BURIED INSIGHT
─────────────────────
vault age: 244d · age≥122d dormant≥40d recent≤122d

On 2025-09-12 you wrote, in
02-Projects/SignalBot/HYPOTHESIS.md:

  The sustainable edge isn't speed alone —
  it's speed + intelligence.
  (callout body)

Since then, 4 notes link back.
You haven't returned to this claim since.

    02-Projects/SignalBot/PHASE2.md       (2026-03-14)
    02-Projects/SignalBot/BACKTEST.md     (2026-03-21)
    02-Projects/SignalBot/CALIBRATION.md  (0.83)

   ▸ Promote to thesis   ▸ Open all   ▸ Snooze

Calibration layer

It keeps its own receipts.

Every finding ships with a falsification rule — a verifiable way it could be wrong. Run basalt audit weekly and your track record compounds. This is the line between a research log and a summary tool.

⊘ FALSIFICATION

This is wrong if…

“…no new note cites this claim in 60 days.” “…you link these two and the link reads as forced.” Each finding sets an expectation you can check against the vault later.

▓ TRACK RECORD

Confirmed · pending · falsified.

The audit walks every pending finding, applies its rule, and updates the verdict. Your record fills in over weeks — not minutes — and it's shown at the top of every Brief.

The desktop app

The workshop, in the open — by hand, while you watch.

A native app for Windows and macOS — a front-end for the Basalt CLI. The same engine, the same read-only promise, with a clean onboarding and the Brief rendered as a workshop shelf you can browse.

Basalt desktop — the workshop view with the verb rail, track-record bar, and finding cards
basalt desktop · the workshop & shelf
  • Pick a folder, or try the demo.Point it at any Markdown vault, or open a bundled sample with one genuine buried insight built in.
  • The verb rail.Switch between the five verbs and set how many findings to surface — the shelf updates in place.
  • Cards you can act on.Quotes, provenance, validators, falsification rules, and the track-record bar — the Brief, made browsable.
  • Doctor & Audit, built in.A five-row health check and the weekly re-evaluation, a click away.

On an Intel Mac? Download the x64 build.

Requires the Basalt CLI The desktop app drives the CLI engine, so install it first to work with your own vault: pip install basalt-vault (Python 3.12+, plus Ollama for indexing). Without it, the app still opens the bundled demo. CLI setup →

Onboarding that respects you.

No setup wizard theater. Two equal-weight paths — bring your vault or open the demo — and a plain line about where your data lives. Privacy stated, not sold.

Basalt desktop — the first-touch onboarding screen with two equal-weight cards
basalt desktop · first touch

The CLI

Three commands. Sixty seconds.

Prefer the terminal? Basalt is a standalone Python package. The interactive wizard handles setup, and the JSON output pipes straight into jq or an MCP client.

INSTALL

pip install basalt-vault

SET UP & INDEX

basalt init
basalt index
basalt brief --section all

OR TRY IT FIRST — NO VAULT NEEDED

basalt demo

THE COMMAND SURFACE

init
interactive first-run setup
index
walk the vault, build the link graph, embed
brief
every verb, or one section, top N
connection / drift
convenience subcommands per verb
audit
re-evaluate pending findings, score the record
doctor
five-row health check, exits non-zero on red

Basalt also exposes its verbs as an MCP server, so Claude Desktop, Cursor, Cline, Zed, or VS Code can call them as tools. pip install 'basalt-vault[mcp]'

How it works

A compiler, not a chatbot.

  • Substrate.Your existing Markdown vault — Obsidian, Logseq, or a plain folder of .md.
  • Compiler.SQLite for notes, links, and embeddings; numpy similarity; content-hash incremental cache.
  • Embeddings.Local Ollama nomic-embed-text by default; unchanged notes skip the network entirely.
  • Verbs.Cognitive operations over the same primitives, exposed as commands and MCP tools.

Privacy posture

A mirror. Always.

The moment a tool owns your self-reflection data, it stops being a mirror and becomes a profile. Basalt is built so it can't.

  • Local-first.Your data lives on your machine. The index never leaves it.
  • Open format.Plain Markdown you can read without Basalt. Leave anytime with everything.
  • No network in the Open tier.Verifiably so — that's why the embedding model is pinned to a local one.

Benchmarks

Real numbers, real vault.

From a working 2,022-note Obsidian vault. The cache means daily Briefs after the first index are near-instant.

StepCostNotes
Parse + link graph1.1s
2,022 notes / 9,284 links — pure Python, deterministic
Embed (first run)143.5s
636 uncached notes, 6-way concurrent (~4.4 notes/sec)
Embed (cache hit)0s
content-hash cache — unchanged notes skip the network
Brief — one section~1–2s
reads from SQLite + numpy; no embedding at brief-time
Brief — all sections~5–10s
connection + implicit thesis dominate the pairwise scan
Audit<1s
SQL-only — no model calls

Tiers

Generous by default.

The free tier is generous enough that trust builds before money enters.

Open

Free · forever

Everything that runs without a network call.

  • All five shipped verbs + the Brief
  • CLI + native desktop app
  • Calibration layer & track record
  • MCP server for your editor
  • Local embeddings, zero network

Get Basalt

Nothing you think is ever lost. Nothing you believe goes unchallenged.

Start with the CLI in sixty seconds, or download the desktop app for Windows.

pip install basalt-vault

The Windows & macOS apps are front-ends for the CLI — install it too.