Repository navigation
Releases: BiSemaphore/inode
Releases · BiSemaphore/inode
Release list
v0.6.0
Changed
- The CLI no longer calls what you store "notes". New commands
inode show <id>andinode delete <id>replaceinode note getandinode 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 getandinode note deletestill work, hidden from help, and print a notice pointing toinode showandinode 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 getand MCPsearch_notesstop with a message naming both models and theinode config setcommands that switch back, instead of returning unrelated items (same dimension) or failing with a database error (different dimension).inode list,inode showand MCPlist_notes/get_notekeep 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:latestis recognised asnomic-embed-text(768 dimensions) instead of requiringembedding.dimension. (#130)
Full Changelog: https://github.com/BiSemaphore/inode/blob/main/CHANGELOG.md
v0.5.1
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 --helpdescribes the tool the same way. (#80) - The default model for
llm.backend = claude-apiis nowclaude-sonnet-5-5(was Claude Sonnet 4.5, which reaches end of life on November 30, 2026). Only applies whenllm.modelis 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 = openaiorclaude-api, orembedding.backend = voyage, now uses that backend's own defaults. Before, every backend inherited Ollama's: OpenAI requests went tohttp://localhost:11434with modelllama3.2, Claude was asked forllama3.2, and Voyage gotnomic-embed-textand a 768-dimension vector table instead ofvoyage-3and 1024. Defaults per backend: Ollamallama3.2/nomic-embed-text(768) athttp://localhost:11434, OpenAIgpt-4o-miniathttps://api.openai.com/v1, Claudeclaude-sonnet-5-5, Voyagevoyage-3(1024). Values you set still win, andinode config showprints the values in use, marking defaults as(default for <backend>). The v0.5.0 workaround of settingllm.modelandllm.base_urlfor OpenAI is no longer needed. Change: an embedding model other thannomic-embed-textorvoyage-3now needsembedding.dimensionset; inode stops with a message saying so instead of assuming 768. (#31) inode config setaccepts every setting inode reads.db.backend,db.dsn,search.top_k,search.max_distanceandmcp.reveal_sensitivewere rejected as unknown keys although the README told you to set them. Values are now checked (search.top_k abcordb.backend mysqlfail with a message naming the expected type or values) and written with their type, sotop_k = 10instead oftop_k = "10"; files written by earlier versions still load.inode config set --helplists every key, andinode config showprints every setting with API keys anddb.dsnredacted. (#81)- Short note IDs no longer pick a note at random.
inode note get,inode note deleteand MCPget_noteused to take the first note whose ID started with the given text, soinode note delete 3could delete any note starting with3, 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 deleteneeds 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
Added
- OpenAI LLM backend, opt-in via
llm.backend = openai. Plainnet/httpagainst the Chat Completions API (no SDK dependency), JSON mode for classification and answers. Defaults togpt-4o-mini;llm.base_urltargets Azure OpenAI or any compatible endpoint. Ollama stays the default. Until #31 is fixed, also setllm.modelandllm.base_url(for examplehttps://api.openai.com/v1), otherwise the Ollama defaults are used.
Changed
- The README opens with a terminal recording of
inode addandinode getinstead of the old banner, and its first example now matches what the CLI prints. A social preview image for the repository is indocs/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 withgo install github.com/BiSemaphore/inode@latest. Versions up to v0.4.0 remain installable under the oldgithub.com/shahid-io/inodepath. - Go 1.26 or newer is required to build or
go installinode (was 1.25, which no longer receives security fixes). (#98)
Fixed
inode versionreports the real version forgo installbuilds (for examplev0.5.0) instead ofdev, 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 getsources,inode note getand 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. MCPlist_notesnow leaves out sensitive notes unlessmcp.reveal_sensitiveis set, andget_noteno 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.mdnow 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/textv0.43.0, fixing reachable vulnerabilities incrypto/tls,net/urland other standard-library packages, and ingolang.org/x/text. (#98) golang.org/x/cryptoupdated to v0.52.0, which fixes 13 advisories in its SSH and SSH-agent packages. inode uses onlyx/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 nextinode config set, andinode config showwarns while it is readable by others. API keys in the file stay plaintext (like~/.aws/credentials); setINODE_LLM_API_KEY/INODE_EMBEDDING_API_KEYto keep them out of it. (#82)
Full Changelog: https://github.com/BiSemaphore/inode/blob/main/CHANGELOG.md
v0.4.0
Added
- Read-only MCP server:
inode mcpservessearch_notes,list_notesandget_noteover stdio for Claude Code, Cursor and other MCP clients. - Sensitive notes are excluded from search results and masked in
get_noteunlessmcp.reveal_sensitiveis 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
Added
- Postgres + pgvector backend, opt-in via
db.backend = postgres. Pure-Gopgxdriver, sogo installworks 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.dsnconfig key for the Postgres connection string.INODE_DB_BACKENDandINODE_DB_DSNenvironment variables.pgvectorservice indocker-compose.ymlalongside Ollama — onedocker compose up -dbrings both up.- README section documenting the optional Postgres path.
Fixed
- pgvector type registration race:
CREATE EXTENSION IF NOT EXISTS vectornow runs insideAfterConnectso every new pool connection bootstraps the extension beforepgxvec.RegisterTypeslooks up thevectortype. Previously the first connect failed withvector type not found in the database.
Full Changelog: https://github.com/BiSemaphore/inode/blob/main/CHANGELOG.md
v0.2.1
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