inode
FeaturedA privacy-focused CLI for storing and retrieving notes, secrets, and commands through natural-language semantic search.
Save anything. Ask in plain English.
Runs on your machine. Encrypted. Yours.
$ go install inode
Overview
Every developer accumulates a pile of scattered knowledge: the staging database password, the exact flags for a deploy, a snippet you wrote once and will need again. It ends up in notes apps, shell history, password managers, and stray text files. The problem is rarely storing it. The problem is finding it again, weeks later, when you no longer remember the exact words you used.
inode is a command-line knowledge base that solves the finding problem. You talk to it in plain English. Instead of grepping for an exact string, you ask for what you mean, like “the staging database password” or “how I deployed the worker last time”, and it returns the right entry even when none of those words appear in it. It matches meaning, not characters.
It is built to run entirely on your machine. By default there are no API keys, no accounts, and no network calls: embeddings and language-model inference run locally through Ollama, and everything is stored in a single SQLite file you own. When you want higher-quality results, you can point it at cloud backends without changing a single command you type.
At a glance
- Language
- Go
- Default storage
- SQLite + sqlite-vec
- Optional backends
- PostgreSQL/pgvector · Claude · Voyage AI
- Embeddings
- Ollama (local) · Voyage AI
- Security
- AES-256-GCM, on-device
- Integrations
- MCP (Claude Code, Cursor)
- Categories
- 9 (credentials, commands, runbooks, …)
- Platforms
- macOS · Linux · Windows
How it works
Capture and classify
When you add an entry, inode classifies it into one of nine strict categories (credential, command, snippet, runbook, note, and so on) so retrieval stays precise and sensitive types can be handled differently.
Embed
The text is turned into a vector embedding, a list of numbers that captures its meaning. Local embeddings run through Ollama at zero cost; Voyage AI or Claude can be used for higher quality.
Store
Vectors and content live in SQLite with the sqlite-vec extension by default, or PostgreSQL with pgvector when you want a shared, larger store. Credentials are encrypted at rest before they touch disk.
Retrieve and rerank
Your query is embedded the same way and matched by nearest-neighbor (cosine) similarity. The top candidates are then handed to an LLM that reads them and returns the answer that is actually there, rather than trusting the raw vector score alone.
Capabilities
01Semantic search that understands intent
Retrieval is built on vector embeddings and LLM reranking, so a query like “prod logging config” surfaces the right runbook even if it was titled “observability setup”. Content is auto-classified into nine categories, which keeps results sharp and lets inode treat a credential differently from a note.
02Runs on your machine, cloud is opt-in
The default stack is SQLite + sqlite-vec + Ollama: no API keys, no internet, nothing leaves your laptop. The same commands work unchanged against PostgreSQL/pgvector for storage and Claude or Voyage AI for embeddings when you want more power. The architecture treats backends as a swappable detail, not a rewrite.
03Secrets handled like secrets
Sensitive values are encrypted at rest with AES-256-GCM and masked in terminal output by default, so a screen-share or a scrollback never leaks them. You reveal a value explicitly, only when you mean to.
04An MCP server your editor can read
inode ships a read-only Model Context Protocol server, so assistants like Claude Code and Cursor can query your knowledge base directly and answer from your real notes and runbooks. Read-only by design: the model can look, but it cannot rewrite or delete what you have stored.
Usage
$ inode add "My Stripe test key is sk_test_xxxxx"Save anything. The LLM auto-detects the category (credentials), adds tags, and flags it sensitive, then encrypts it at rest.
$ inode get "stripe test key"Ask in plain English. inode embeds the query, finds the closest notes by meaning, and answers from them. Aliases: ask, find, search.
$ inode get "stripe test key" --revealSensitive values are masked by default. --reveal prompts for confirmation, then prints the plaintext.
$ inode list --category credentialsBrowse by category or tag. inode sorts everything into nine strict categories.
$ inode mcpRun the read-only MCP server over stdio so Claude Code or Cursor can read your knowledge base.
Want the code?
inode is open source and built in public.