hebb

hebb turns a folder of markdown notes into a fast, connected knowledge base — and gives your AI tools a memory they can search and recall.
Point hebb at a vault of .md files. It builds a full-text index, follows your [[wiki-links]] and tags to assemble related context, and serves both over the Model Context Protocol (MCP) — so Claude and Codex can search your notes and pull in connected material while they work. Your notes stay plain markdown on your disk; hebb indexes and serves them, it never takes ownership.
Multi-vault, like git is multi-repo: run hebb inside a vault directory, or pass --vault.
Why hebb
- Agent-native. One MCP server gives Claude Code, Claude Desktop, and Codex the same tools:
search_vault, get_context_for_topic, expand_context, vault_stats, reindex_vault.
- Connected recall, not just keywords. hebb walks
[[wiki-links]] and shared tags to gather a topic's context, so an agent gets the related notes, not just the literal hits.
- Local and fast. Pure-Go SQLite FTS5 — no service, no cloud, no cgo. A single static binary; your vault never leaves your machine.
- Composable. A CLI, a local web UI, an MCP server, a Claude Code plugin, and a file watcher over one engine. Use the parts you want.
Install
hebb is a single static binary for macOS or Linux (arm64 or amd64). Pick one method:
Install script. Downloads the matching release binary to ~/.local/bin:
# public repo:
curl -fsSL https://raw.githubusercontent.com/cizer/hebb/main/install.sh | sh
# private repo (uses your GitHub CLI auth for both the script and the binary):
gh api repos/cizer/hebb/contents/install.sh -H "Accept: application/vnd.github.raw" | sh
Override the target dir with HEBB_INSTALL_DIR, or pin a version with HEBB_VERSION=vX.Y.Z.
Go: go install github.com/cizer/hebb/cmd/hebb@latest (set GOPRIVATE=github.com/cizer/* while the repo is private).
Homebrew: planned, not yet enabled.
Then make sure the install dir is on your PATH, and check the binary:
export PATH="$HOME/.local/bin:$PATH" # add to your shell profile if it isn't already
hebb --version
Later, upgrade in place with hebb update.
Set up a vault
A vault is just a folder of markdown notes. hebb adds a .hebb/ directory to it (like .git adds .git/) and wires it into your machine and agents. Start one of two ways.
A new vault
hebb new ~/notes
Scaffolds a PARA skeleton (1-Projects/, 2-Areas/, 3-Resources/, 4-Archives/), a baseline CLAUDE.md and AGENTS.md, a note template, and an empty memory seed, then installs it. Refuses to scaffold into a non-empty directory, so it never overwrites existing files.
An existing folder of notes
hebb install --vault ~/existing-notes
Indexes the folder in place and wires it. Pass --vault the first time because the folder has no .hebb/ yet for hebb to find. After that the vault self-identifies, so you can just cd ~/existing-notes && hebb <command>.
What hebb install does
Both paths run hebb install. It is idempotent and never modifies your notes:
- writes
.hebb/config.toml (the committed, per-vault config) and builds the search index at .hebb/index.db;
- symlinks the vault's agent memory (
.hebb/memory/) into Claude's project directory;
- installs hebb's skills into
~/.claude/skills (--no-skills to skip);
- offers an interactive picker to connect your agents (or pass
--codex / --claude-desktop / --mcp-json explicitly, or --no-interaction to skip);
- with
--launchd, renders background jobs (--load also starts them).
Check the result any time with hebb doctor, and browse the vault with hebb serve (local web UI on 127.0.0.1).
Connect your agents
The picker can do this for you, or wire each explicitly:
See Agents for how each adapter works.
What to commit
Commit .hebb/config.toml and your notes, so a cloned or synced vault self-identifies. The index (.hebb/index.db) is derived and rebuilt on demand, so gitignore it. Memory under .hebb/memory/ travels with the vault. To keep the markdown synced automatically, enable [git] in config.toml (see hebb sync below).
Multiple vaults
hebb is multi-vault like git is multi-repo: install the binary once, then create or attach as many vaults as you like. Each is independent. Every command resolves its vault from the current directory (nearest .hebb/ above the cwd), or an explicit --vault <path>, or $HEBB_VAULT.
Try it
cd ~/notes
printf '# Search engines\nNotes on ranking and FTS. #ideas\n' > 1-Projects/Search.md
hebb search "ranking" # full-text search
hebb serve # browse at http://127.0.0.1:4321
Commands
hebb new <path> — scaffold a fresh vault (PARA skeleton, CLAUDE.md + AGENTS.md, note template) and install it.
hebb install — wire a vault into the machine (config, index, memory, agent skills into ~/.claude/skills, optional launchd jobs) and offer to connect your agents. Idempotent. --no-skills to skip the skills.
hebb search <query> — full-text search (--tag, --path-prefix, --limit).
hebb mcp — MCP server over stdio (the five tools above).
hebb serve — local web search UI on 127.0.0.1 (--port, $HEBB_WEB_PORT).
hebb codex — register the vault as a Codex MCP server (~/.codex/config.toml) and install hebb's agent skills into Codex's skills dir (~/.agents/skills), non-destructively. --no-skills to skip the skills.
hebb doctor — read-only health check; non-zero exit if anything is broken.
hebb reset — un-wire a vault from the machine (memory link, launchd jobs, agent configs, index). Dry run by default; --force to apply. Never touches your notes.
hebb sync — commit, pull (rebase), and push the vault's markdown via git. Never force-pushes; a conflicting pull is aborted and reported. Enable [git] in config.toml to also auto-sync: pull when a hebb process starts, commit+push after edits settle.
hebb update — check for and install a newer hebb release (checksum-verified, atomic replace), then re-apply the release's skills to whichever skills dirs already have them (so new and changed skills land on upgrade). --check only reports. Self-replaces only a binary hebb owns; a Homebrew or go install binary is left to its package manager. A scheduled update-check job notifies of new releases (set [update] auto = true to install them).
hebb index — build or refresh the index (usually automatic).
Vault selection everywhere: --vault <path>, $HEBB_VAULT, or the nearest .hebb/ above the working directory.
Agents
hebb is the engine; thin adapters connect it to each tool, all over the same MCP server:
- Claude Code —
hebb install materialises the vault-ingest skill into ~/.claude/skills so it works in any context, and the plugin/ additionally offers it (plus the MCP server) via the marketplace for those who prefer that.
- Codex — an MCP-server entry pinned to the vault plus the same skills materialised into
~/.agents/skills, written by hebb codex (or the hebb install picker). The Codex counterpart to the plugin.
- Claude Desktop — an MCP-server entry pinned to a vault, written by the
hebb install picker.
- Anything else that speaks MCP — point it at
hebb mcp.
How it works
core/ engine: index, search, context graph, file watcher
cli/ the hebb command
mcp/ MCP server surface
web/ local web UI (embedded)
plugin/ Claude Code plugin (manifest, .mcp.json, vault-ingest skill)
automation/ optional background jobs (digest, action review)
vault-template/ the `hebb new` scaffold
Per vault, hebb keeps a .hebb/ directory (like .git): config.toml, the derived index.db, and memory/. Commit config.toml and your notes; the index is rebuilt on demand.
See ARCHITECTURE.md for the design.
Build
go build ./...
go test ./...
hebb --version shows the git revision on dev builds; releases stamp a clean tag. Test strategy and the CD pipeline are in TESTING.md; releasing in RELEASING.md.
License
Apache-2.0.