Skip to content

Releases: BiSemaphore/inode

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 20 Oct 17:58
b086e8d

Changed

  • The CLI no longer calls what you store "notes". New commands inode show <id> and inode delete <id> replace inode note get and inode note delete; prompts and output name the item by its category (Delete credential #3f1a9c02 "stripe test key"?, deleted credential #3f1a9c02), and help text, errors and messages describe API keys, passwords, tokens, commands and runbooks. Internal names (~/.inode/notes.db) and MCP tool names are unchanged. (#145)
  • The MCP server is built on mcp-go v1.3.0 (was v0.54.0). Tools, their arguments and their responses are unchanged. (#141)

Deprecated

  • inode note get and inode note delete still work, hidden from help, and print a notice pointing to inode show and inode delete. They will be removed in v0.7.0. (#145)

Fixed

  • Changing the embedding model no longer breaks search silently. The database now records the embedding backend, model and dimension its items were embedded with. If the config names a different model, inode add, inode get and MCP search_notes stop with a message naming both models and the inode config set commands that switch back, instead of returning unrelated items (same dimension) or failing with a database error (different dimension). inode list, inode show and MCP list_notes / get_note keep working. A database with no items takes the new model, resizing its vector table if needed. Databases from earlier versions are upgraded on first run: the dimension is read from the schema and, when it matches the config, the configured model is recorded, since it is the only information available. (#130)
  • embedding.model = nomic-embed-text:latest is recognised as nomic-embed-text (768 dimensions) instead of requiring embedding.dimension. (#130)

Full Changelog: https://github.com/BiSemaphore/inode/blob/main/CHANGELOG.md

v0.5.1

Choose a tag to compare

@github-actions github-actions released this 18 Oct 13:16
0e6490c

Changed

  • README rewritten to match v0.5.x: what inode does, install requirements per platform (Go 1.26, a C compiler for SQLite on every platform), quick start on the Ollama path, per-backend defaults, MCP setup for Claude Code and Cursor, every command, and links to the docs instead of an outdated roadmap table. inode --help describes the tool the same way. (#80)
  • The default model for llm.backend = claude-api is now claude-sonnet-5-5 (was Claude Sonnet 4.5, which reaches end of life on November 30, 2026). Only applies when llm.model is not set. Dependencies updated: Anthropic SDK v1.81.0, pgx v5.11.0, pgvector-go v0.4.1, go-sqlite3 v1.14.52, golang.org/x/crypto v0.58.0. (#113)

Fixed

  • Choosing llm.backend = openai or claude-api, or embedding.backend = voyage, now uses that backend's own defaults. Before, every backend inherited Ollama's: OpenAI requests went to http://localhost:11434 with model llama3.2, Claude was asked for llama3.2, and Voyage got nomic-embed-text and a 768-dimension vector table instead of voyage-3 and 1024. Defaults per backend: Ollama llama3.2 / nomic-embed-text (768) at http://localhost:11434, OpenAI gpt-4o-mini at https://api.openai.com/v1, Claude claude-sonnet-5-5, Voyage voyage-3 (1024). Values you set still win, and inode config show prints the values in use, marking defaults as (default for <backend>). The v0.5.0 workaround of setting llm.model and llm.base_url for OpenAI is no longer needed. Change: an embedding model other than nomic-embed-text or voyage-3 now needs embedding.dimension set; inode stops with a message saying so instead of assuming 768. (#31)
  • inode config set accepts every setting inode reads. db.backend, db.dsn, search.top_k, search.max_distance and mcp.reveal_sensitive were rejected as unknown keys although the README told you to set them. Values are now checked (search.top_k abc or db.backend mysql fail with a message naming the expected type or values) and written with their type, so top_k = 10 instead of top_k = "10"; files written by earlier versions still load. inode config set --help lists every key, and inode config show prints every setting with API keys and db.dsn redacted. (#81)
  • Short note IDs no longer pick a note at random. inode note get, inode note delete and MCP get_note used to take the first note whose ID started with the given text, so inode note delete 3 could delete any note starting with 3, and an empty ID or % matched any note. A prefix that matches more than one note is now refused with the list of matches, IDs may only contain hex digits and -, note delete needs at least 4 characters and its confirmation names the note (short ID, summary, category) instead of repeating your input. (#90)

Full Changelog: https://github.com/BiSemaphore/inode/blob/main/CHANGELOG.md

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 17 Oct 18:54
8595d7d

Added

  • OpenAI LLM backend, opt-in via llm.backend = openai. Plain net/http against the Chat Completions API (no SDK dependency), JSON mode for classification and answers. Defaults to gpt-4o-mini; llm.base_url targets Azure OpenAI or any compatible endpoint. Ollama stays the default. Until #31 is fixed, also set llm.model and llm.base_url (for example https://api.openai.com/v1), otherwise the Ollama defaults are used.

Changed

  • The README opens with a terminal recording of inode add and inode get instead of the old banner, and its first example now matches what the CLI prints. A social preview image for the repository is in docs/assets/social-preview.png. (#110)
  • Databases now carry a schema version and are upgraded automatically when a new inode opens them. Before upgrading a SQLite database, inode writes a backup next to it (notes.db.bak-v<from>-<timestamp>). A database upgraded by a newer inode is refused instead of being opened. (#85)
  • The repository moved to the BiSemaphore organization. The Go module path is now github.com/BiSemaphore/inode: install with go install github.com/BiSemaphore/inode@latest. Versions up to v0.4.0 remain installable under the old github.com/shahid-io/inode path.
  • Go 1.26 or newer is required to build or go install inode (was 1.25, which no longer receives security fixes). (#98)

Fixed

  • inode version reports the real version for go install builds (for example v0.5.0) instead of dev, and the commit and time for builds from a git checkout; the MCP server reports the same version to clients. Release archives are unchanged. (#32)
  • Summaries of sensitive notes no longer expose the secret. They were stored and shown in plaintext in inode list, inode get sources, inode note get and MCP; when the LLM was unavailable the summary was the first 80 characters of the secret itself. New summaries are checked against the note and replaced with a neutral <category> (sensitive): <tags> when they contain secret-looking values; summaries stored by earlier versions are checked once on first run and fixed the same way. MCP list_notes now leaves out sensitive notes unless mcp.reveal_sensitive is set, and get_note no longer returns their summary. (#53)

Security

  • inode no longer creates a new master secret when the OS keychain cannot be read. Previously any keychain error (locked keychain, denied prompt, unavailable service) made inode generate and store a new secret, which could overwrite the existing one and make every encrypted note unreadable. A new secret is now created only on a genuine first run; otherwise inode stops with an explanation and writes nothing. (#104)
  • SECURITY.md now describes what the code actually protects and lists known limitations, including that cloud backends (claude-api, openai, voyage) receive note content in plaintext. Vulnerabilities are reported through GitHub private vulnerability reporting. (#71)
  • Release binaries are built with Go 1.26 and golang.org/x/text v0.43.0, fixing reachable vulnerabilities in crypto/tls, net/url and other standard-library packages, and in golang.org/x/text. (#98)
  • golang.org/x/crypto updated to v0.52.0, which fixes 13 advisories in its SSH and SSH-agent packages. inode uses only x/crypto/argon2 (key derivation), so none of them were reachable, but release binaries no longer ship the affected versions. (#102)
  • ~/.inode/config.toml, which can hold API keys, is now written with mode 0600 instead of 0644. A file written by an earlier version is tightened on the next inode config set, and inode config show warns while it is readable by others. API keys in the file stay plaintext (like ~/.aws/credentials); set INODE_LLM_API_KEY / INODE_EMBEDDING_API_KEY to keep them out of it. (#82)

Full Changelog: https://github.com/BiSemaphore/inode/blob/main/CHANGELOG.md

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 14 Jun 09:45

Added

  • Read-only MCP server: inode mcp serves search_notes, list_notes and get_note over stdio for Claude Code, Cursor and other MCP clients.
  • Sensitive notes are excluded from search results and masked in get_note unless mcp.reveal_sensitive is set.

Fixed

  • MCP tools now advertise themselves as read-only and idempotent. The SDK defaults marked them destructive, so clients asked for approval on every lookup.

Full Changelog: https://github.com/BiSemaphore/inode/blob/main/CHANGELOG.md

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 13 May 16:48

Added

  • Postgres + pgvector backend, opt-in via db.backend = postgres. Pure-Go pgx driver, so go install works without a C toolchain when this backend is selected. Same L2 distance metric (<-> operator) as the SQLite path — the relevance threshold ports over unchanged.
  • db.dsn config key for the Postgres connection string. INODE_DB_BACKEND and INODE_DB_DSN environment variables.
  • pgvector service in docker-compose.yml alongside Ollama — one docker compose up -d brings both up.
  • README section documenting the optional Postgres path.

Fixed

  • pgvector type registration race: CREATE EXTENSION IF NOT EXISTS vector now runs inside AfterConnect so every new pool connection bootstraps the extension before pgxvec.RegisterTypes looks up the vector type. Previously the first connect failed with vector type not found in the database.

Full Changelog: https://github.com/BiSemaphore/inode/blob/main/CHANGELOG.md

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 10 May 17:39

Fixed

  • Release workflow simplified to a single Ubuntu runner; dropped arm64 to unblock the first binary release.

Added

  • First pre-built binaries on the GitHub Releases page (linux/amd64).

Full Changelog: https://github.com/BiSemaphore/inode/blob/main/CHANGELOG.md