Help us shape the future of Go! Take the 2026 Go Developer Survey

inode

command module
v0.6.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 20, 2026 License: MIT Imports: 1 Imported by: 0

README


CI Release Go License

inode is a command-line knowledge base for the things engineers keep losing: API keys, passwords, tokens, commands, runbooks. You save it in plain text and later ask for it in plain English. inode finds it by meaning (vector search) and answers only from what you stored. By default it runs on your machine with Ollama and SQLite: no API keys, no account.

$ inode add "staging DB creds: vault write database/rotate-root/staging"
  category=runbooks  tags=[vault, postgres, staging]  sensitive=true
  saved  id=a1b2c3d4
$ inode get "how do I rotate staging db creds"
Run vault write database/rotate-root/staging, then restart the api.

── Sources (1) ──
  #a1b2c3d4  Rotate staging DB creds  [runbooks] [vault, postgres, staging]  [sensitive]

What it does

  • Ask in plain English. inode get turns your question into an embedding, finds the closest stored items, and has the LLM answer from them, listing them as sources. When nothing relevant is stored, it says so.
  • Sorts what you store. Each item gets one of nine categories and a few tags from the LLM. --category and --tags override it.
  • Keeps secrets out of sight. Items marked sensitive are encrypted with AES-256-GCM before they are written and stay masked in output until you confirm a reveal. A summary that repeats a secret-looking value from the item is replaced. Details in SECURITY.md.
  • Runs offline by default. Ollama for the LLM and embeddings, SQLite (with sqlite-vec) for storage.
  • Other backends when you want them. Claude or OpenAI for the LLM, Voyage for embeddings, Postgres with pgvector for storage.
  • Works with coding agents. inode mcp is a read-only MCP server, so Claude Code or Cursor can search what you stored.

Install

go install github.com/BiSemaphore/inode@latest
inode version

You need Go 1.26 or newer and a C compiler: SQLite and sqlite-vec are compiled in through CGO, whichever storage backend you use.

Platform How
macOS go install; the compiler comes with Xcode Command Line Tools (xcode-select --install)
Linux go install with gcc, or the linux/amd64 archive on Releases
Windows go install from an MSYS2 MinGW-w64 shell with mingw-w64-x86_64-gcc and mingw-w64-x86_64-sqlite3; see CONTRIBUTING.md

CI builds and tests on all three. Release archives exist for linux/amd64 only for now; more targets are tracked in #33. Versions before v0.5.0 were published as github.com/shahid-io/inode.


Quick start

# 1. Install Ollama (https://ollama.com/download), start it, pull two models
ollama pull llama3.2           # answers, categories, summaries
ollama pull nomic-embed-text   # embeddings for search

# 2. Save something
inode add "docker system prune -af removes all unused images and containers"
inode add "stripe test key sk_test_xxxxxxxx" --sensitive

# 3. Find it later
inode get "how do I clean up docker"
inode list

The first command creates ~/.inode/notes.db and a master secret in your OS keychain (used to encrypt sensitive items). Nothing else to set up.


Other backends (optional)

Every setting can go in ~/.inode/config.toml with inode config set <key> <value>, or in an environment variable named INODE_ plus the key in capitals with . replaced by _ (INODE_LLM_API_KEY). inode config set --help lists every key and inode config show prints the values in use.

Claude for answers, Voyage for embeddings:

inode config set llm.backend claude-api
inode config set llm.api_key sk-ant-xxxx
inode config set embedding.backend voyage
inode config set embedding.api_key pa-xxxx

OpenAI for answers (llm.base_url also points it at Azure OpenAI or any compatible endpoint):

inode config set llm.backend openai
inode config set llm.api_key sk-xxxx

Each backend uses its own default model unless you set llm.model or embedding.model: llama3.2, claude-sonnet-5-5, gpt-4o-mini, nomic-embed-text, voyage-3. For any other embedding model, also set embedding.dimension.

Cloud backends receive the text of what you store, sensitive items included: on inode add to classify and embed them, and on inode get as the sources for the answer. See SECURITY.md.

Choose the embedding backend before adding anything: items embedded by one model cannot be searched with another. inode records the model in the database, and if the config later names a different one, add and get stop and say how to switch back; list, show and delete keep working. Re-embedding stored items with a new model is not built yet (#131).

Postgres with pgvector instead of SQLite:

docker compose up -d pgvector    # compose file in the repo root
inode config set db.backend postgres
inode config set db.dsn "postgres://postgres:password@localhost:5432/postgres?sslmode=disable"

inode creates the vector extension and its tables on first run. Schema upgrades run automatically on both backends; for SQLite, inode first writes a backup next to the database (notes.db.bak-v<n>-<time>).


Use it from Claude Code or Cursor (MCP)

inode mcp serves three read-only tools over stdio:

Tool Returns
search_notes the items closest to a query
list_notes items by category or tag, metadata only
get_note one item, by ID or unique ID prefix

Sensitive items are left out of search_notes and list_notes, and get_note masks their content. inode config set mcp.reveal_sensitive true lets the agent read them.

Claude Code:

claude mcp add inode -- inode mcp

Other clients (for Cursor, ~/.cursor/mcp.json):

{
  "mcpServers": {
    "inode": { "command": "inode", "args": ["mcp"] }
  }
}

Adding items from an agent is not exposed yet (#58).


Commands

# Add (with no argument, opens $EDITOR)
inode add "vault write database/rotate-root/staging"
inode add "a secret" --sensitive
inode add "brew upgrade" --no-sensitive
inode add "docker system prune -a" --category commands --tags docker,cleanup

# Ask (aliases: ask, find, search)
inode get "query"
inode get "query" --reveal              # unmask sensitive values, after a confirmation

# List
inode list                              # newest 20; --limit to change
inode list --category credentials
inode list --tag github
inode list --sensitive                  # only sensitive items, after a confirmation

# One item (its ID, or a unique prefix of the ID shown by inode list)
inode show <id>
inode delete <id>                       # at least 4 characters; asks first

# Settings
inode config set <key> <value>
inode config show

# Other
inode mcp                               # MCP server over stdio
inode version

Categories

credentials, commands, snippets, decisions, runbooks, learnings, references, contacts, notes.

If the LLM suggests anything else, the item goes to notes, the catch-all category. --category overrides the LLM.


Status and roadmap

inode is a single-user tool today, released as v0.5.x. The next phases add a self-hosted server so a team can share secrets with permissions, then what an organization needs (sign-in through its identity provider, admin roles, audit). Design questions are settled in spike issues before any of it is built.


Documentation


License

MIT © 2026 Shahid Raza

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
internal
cli
Package cli holds presentation helpers shared by Cobra commands.
Package cli holds presentation helpers shared by Cobra commands.
mcp
Package mcp exposes the inode knowledge base over the Model Context Protocol so MCP-aware AI clients (Claude Code, Cursor, etc.) can read notes via stdio.
Package mcp exposes the inode knowledge base over the Model Context Protocol so MCP-aware AI clients (Claude Code, Cursor, etc.) can read notes via stdio.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL