Releases: nmdra/notebrain-cli
Release list
NoteBrain CLI v2.13.1
Changelog
🐛 Bug Fixes
Other
- ca0c7d8: chore(deps)(deps): bump the go-dependencies group with 3 updates (@dependabot[bot])
- 2f0551c: docs(changelog): Remove Unreleased section from CHANGELOG (@nmdra)
Full Changelog: v2.13.0...v2.13.1
Released by GoReleaser.
NoteBrain CLI v2.13.0
🌟 Key Highlights
• New refs Command: List a note's local attachments (images, PDFs, other) and external website links in first-occurrence order, filter by kind with --only-images/--only-pdf/--only-other/--only-external-links, and audit broken references with --include-missing. Reads the note fresh from disk — never stale.
• Unified CLI Conventions: Consistent cross-command flag naming, single with-pdf config key shared by ingest/search/boosted, get positional renamed to <NOTE>, and --exclude-notes for search.
• Output Parity & House Styling: Shared JSON envelope printing across commands, --jsonpath now covers the get/stats envelopes, TSV column and score fixes, and house-styled refs text output with colored kind chips and clickable links.
• Breaking Cleanup: Removed deprecated --debug, --enable-pdf, --exclude-note, hide-tags, hidden --top-k, and refs --images/--pdf/--other/--external-links — see the Changelog for replacements.
• Search & Display Polish: --exclude-notes filter, [PDF] colorization in text results, deep-mode section dedupe and caps, terminal-width-bound heading separators.
Changelog
🚀 Features
- 5df8af8: feat(cmd): colorize [PDF] tag in text search results (@nmdra)
- 8f2f7c4: feat(cmd): dedupe title prefixes and cap deep matched sections (@nmdra)
- d7ee594: feat(cmd): list a note's attachments and external links (@nmdra)
- f025658: feat(cmd): phase 2 CLI improvements (@nmdra)
- b367336: feat(cmd): rename refs kind filters to --only-* with deprecated aliases (@nmdra)
- e94e079: feat(cmd): style refs text output with house rendering (@nmdra)
- c050e2f: feat(cmd): unify cross-command flag naming (@nmdra)
- c0e9f28: feat(ingest): expose configured Obsidian attachment folder (@nmdra)
- 4505ef3: feat(parser): extract note references (attachments + external links) (@nmdra)
- e222dc5: feat(parser): track reference syntax source for resolution (@nmdra)
- 682e6d1: feat(search): add --exclude-note flag to skip notes from results (@nmdra)
🐛 Bug Fixes
- a13c392: fix(cmd): TSV/JSONPath output parity and ignored-format warnings (@nmdra)
- 6e263ae: fix(cmd): bound heading separator to terminal width (@nmdra)
- 0536f6c: fix(cmd): keep refs order and reject traversal escapes (@nmdra)
- 2d61feb: fix(cmd): resolve goconst and unused function lint issues (@nmdra)
- 50dec47: fix(config): single global with-pdf key, wizard targets it (@nmdra)
- a490b47: fix(logging): make RotatingWriter safe for concurrent writes (@nmdra)
⚡ Performance
- 0425c08: perf(store): single-scan exclude resolution, cached link resolver, batch shared tags (@nmdra)
Other
- 0bbc56e: chore(cmd): remove dead code, extract shared display helpers (@nmdra)
- dd3c298: chore(deps)(deps): bump the go-dependencies group with 2 updates (@dependabot[bot])
- 1b37efa: chore(plan): mark consistency-pass tasks complete (@nmdra)
- 6b0113a: chore(plan): mark review-fixes plan complete (@nmdra)
- 0bbbc5b: chore(plan): record post-release review fix plan (@nmdra)
- a94dbef: chore(wiki): set model for notebrain chat agent (@nmdra)
- 56f1d35: docs(changelog): release v2.13.0 (@nmdra)
- 4b8823e: docs(plan): track Plan.md and mark refs tasks complete (@nmdra)
- 6a5c04e: docs(skill): add worked scenario guide for notebrain-assistant (@nmdra)
- 9f5feff: docs(skill): document the refs command in notebrain skill (@nmdra)
- 0957778: docs(skill): rewrite notebrain skill and references for agents (@nmdra)
- 6336739: docs(skill): use generic tag examples in notebrain docs (@nmdra)
- 285579d: docs(skills): make json/tsv the agent default, text for humans (@nmdra)
- 443f8c5: docs(skills): single source of truth per meaning, dedup skill docs (@nmdra)
- 65fdfd2: docs(wiki): add pi agent integration guide (@nmdra)
- 6a42e23: docs(wiki): rewrite architecture guide; add ranking guide (@nmdra)
- 128e251: refactor(cmd)!: remove deprecated --enable-pdf flag and enable-pdf config key (@nmdra)
- a0fe047: refactor(cmd)!: remove deprecated --exclude-note flag (@nmdra)
- c1eb82d: refactor(cmd)!: remove legacy --debug flag (@nmdra)
- 1014084: refactor(cmd): drop unused Globals param, share JSON envelope printing (@nmdra)
- cf883c4: refactor(cmd): inline lexicalFallback middle man (@nmdra)
- abe699d: refactor(cmd): narrow store/embedder seams; thread queries explicitly (@nmdra)
- 6d1a585: refactor(cmd): rename topK local to candidateChunks in hidden deep mode (@nmdra)
- d12029c: refactor(cmd): reuse kindPDF constant in print output (@nmdra)
- 6204eb9: refactor(cmd): type refs kinds via parser constants, group resolution in refResolver, drop deprecated alias flags (@nmdra)
- 47e80a7: refactor(cmd): use shared JSON envelope printing in get, stats, refs (@nmdra)
- a97bbb5: refactor(config)!: remove deprecated hide-tags config key (@nmdra)
- a13ad61: refactor(ingest): share chunk filtering and embedding between md and pdf (@nmdra)
- a6ad1f3: refactor(ingest): share note identity and batch assembly between md and pdf (@nmdra)
- 7a7b277: refactor(store): consolidate paginated Get loops into one helper (@nmdra)
- 5cf85bf: refactor(store): extract FileType and parser block-kind constants (@nmdra)
- c662058: refactor(store): typed SearchFilter; propagate resolver and scan errors (@nmdra)
- 4f64a83: refactor(store): typed Stats struct; dedupe HiddenOptions application (@nmdra)
- 32b6a00: refactor(store): unexport Levenshtein and ClosestTags (@nmdra)
- 4987a0d: refactor(store): unify per-note dedupe and link traversal helpers (@nmdra)
- a5c977d: test(cmd): cover get/stats JSONPath envelope (@nmdra)
- 5bc4e17: test(cmd): fake-store helpers; init/reset/doctor command tests (@nmdra)
Full Changelog: v2.12.0...v2.13.0
Released with ❤️ by GoReleaser.
NoteBrain CLI v2.12.0
[v2.12.0] - 2026-08-02
Added
- Unified JSON Envelope:
getandstatsJSON output is now wrapped in the same command envelope used bysearch(feat(output)). - Stdin Query Support:
searchnow accepts the query from stdin when piped, enabling shell pipelines (feat(search)). - Setup Wizard Enhancements: The
initwizard now prefills detected defaults, validates input, and previews the planned configuration before applying it (feat(init)). - Shared Tag Flags: Tags are now aligned with the shared query flags, and
--top-kis clarified as a hidden flag (feat(cmd)). - Ingest Progress: Ingestion reports periodic info-level progress, logs embedding model warmup, and warns after the validate step (
feat(ingest)). - Titled Help Sections:
--helpoutput now groups flags under titled sections and fixes placeholder rendering (feat(help)). - TTY-Aware Colors: Colors are disabled on non-TTY stdout, and the PDF emoji was dropped from output (
feat(ui)). - Hardened Logging: Improved logging and error handling across the CLI (
feat(cli)).
Fixed
- Hidden
--deep: Unlinked notes are no longer hidden when--deepis passed (fix(store)). - Exit Codes: Missing query and missing vault path now exit with code 2 (
fix(cli)). - TSV Output: TSV records stay on one line, and
statssupports TSV output (fix(output)). - Recovery Hints: Error messages now include recovery hints, and the reset confirmation accepts
y(fix(errors)). - Log Noise: The embedding model warmup log is demoted to debug level (
fix(cmd)).
NoteBrain CLI v2.11.0
🚀 NoteBrain v2.11.0 — Highlights
TL;DR: The biggest quality-of-life release since v2.10.0 — shell completion is the headline; 30+ commits, 5 new features, zero breaking changes.
Tab completion is here — bash, zsh, and fish completion for every command. It knows your subcommands, flags, enum values (--format, --log-level), and even live note slugs from your own vault index — notebrain get <Tab> completes real note slugs, no copy-pasting paths. Activate with notebrain completion <shell>.
Search & indexing reliability
doctornow detects a corrupted ChromaDB and says so, instead of failing cryptically--log-levelis back as a configurable flag (debug → error), with TOML support- New
--has-codefilter finds code-containing chunks; ingestion supports recursive**globs - 20+ fixes under the hood: store queries paginated within FFI limits, deterministic link vectors, unicode-safe slugs, chunk boundaries snapped out of placeholder tokens, PDF pages split on rune boundaries, model-prefix backends honored with warnings
Cleanup — removed dead code (unused obsidian package, legacy OCR path, unreachable ndjson output).
Docs — full wiki rewritten in Simplified Technical English, new shell-completion guide, and accuracy fixes to the NoteBrain agent skill.
What's Changed
- chore(deps)(deps): bump the go-dependencies group with 2 updates by @dependabot[bot] in #34
- Fix chunk overlap duplication, glob ingestion, and store reliability by @nmdra in #35
- feat(cmd): add shell completion for bash, zsh, and fish by @nmdra in #36
Full Changelog: v2.10.0...v2.11.0
NoteBrain CLI v2.10.0
🌟 Key Highlights
• Fallback PDF Ingestion: Gracefully skips missing-key PDFs without crashing or deleting indexed content.
• Enhanced LLM Parsing: Multi-backend support (OpenRouter, DeepSeek, OpenAI, Gemini, Ollama) with retry backoff and /v1 endpoint normalization.
• Improved Graphing & Metadata: PDF notes marked with 📄 [PDF] in graph output, subfolder links resolved, and file types preserved via GetNoteMetadata.
• Better Diagnostics: Added --context-window flag, per-file progress logging, and failure summary reports.
Changelog
🚀 Features
- ac59e8e: feat(ingest): add context-window flag, per-file progress logging, and failure reporting (@nmdra)
- a97cc84: feat(ingest): implement graceful fallback for PDF ingestion (@nmdra)
- c62ee53: feat(llmparse): add ErrNoAPIKey for graceful error handling (@nmdra)
- 3705cb0: feat(llmparse): refactor backend auto-detection and add retry backoff (@nmdra)
- 95a3ae2: feat(store): add GetNoteMetadata and deprecate GetNoteHashes (@nmdra)
🐛 Bug Fixes
- eaa6ebe: fix(llmparse): reduce max API retries to 3 (@nmdra)
- 17adf2e: fix(store): resolve stale links and surface PDF types in graph queries (@nmdra)
Other
- dc77930: docs(config): add explicit inline default comments to config.example.toml (@nmdra)
- bce8f07: docs(wiki): add guide for PDF ingestion with LLMs (@nmdra)
- 097e3cf: refactor(llmparse): simplify package structure and fix Ollama host endpoint path (@nmdra)
- d442fc6: style(llmparse): define constants for backend names to fix goconst linter warning (@nmdra)
Full Changelog: v2.9.0...v2.10.0
Released with ❤️ by GoReleaser.
NoteBrain CLI v2.9.0
📢 Important: CLI & Configuration Simplification in v2.9.0
In NoteBrain v2.9.0, we performed a major configuration audit to streamline the CLI surface area and simplify the configuration setup.
Note
Zero Breaking Configuration Downtime: Existing config.toml files continue to work seamlessly. A migration resolver automatically maps old configuration keys to their new equivalents and emits a non-fatal warning.
⚡ What Changed?
1. Renamed & Inverted Flags
| Old Flag | New Flag | Default | Description |
|---|---|---|---|
--hide-tags |
--show-tags |
false |
Tag names (#Tag/Subtag) are hidden by default. Use --show-tags to include them. |
--log-level, --log-format |
--debug |
false |
Enable debug-level logging to stderr. |
2. Removed Flags & Replacements
| Removed Flag | Replacement / Behaviour |
|---|---|
--split, --split-by |
Pass multiple positional arguments instead: notebrain search "query1" "query2". |
--verbose |
notebrain hidden --deep now always displays complete matched section lists. |
--no-hyperlinks |
Set the environment variable NO_HYPERLINKS=1 (standard Unix convention). |
--skip-attachments |
Attachment wikilinks (.png, .pdf, etc.) are now always excluded from graph edges by default. |
--enable-ocr |
OCR via Tesseract is now auto-detected whenever --enable-pdf is enabled and tesseract is available in $PATH. |
🛠️ Updated Configuration Template (~/.notebrain/config/config.toml)
The example configuration template has been streamlined from 118 lines to 35 lines. The recommended configuration file is:
# NoteBrain CLI Configuration
# Location: ~/.notebrain/config/config.toml
# Path to ChromaDB persistent storage
# chroma-path = "~/.notebrain/chroma"
# Absolute path to your Obsidian vault
# vault-path = "/home/user/Documents/Obsidian Vault"
# Output format: "text", "json", or "tsv"
# format = "text"
# Enable debug logging to stderr
# debug = false
# Respect Obsidian ignore rules & userIgnoreFilters
# respect-exclude = false
# Enable PDF attachment indexing (OCR auto-detected)
# enable-pdf = false
# Include tag names in output
# show-tags = falseTip
No configuration required. For most users, no configuration file is necessary. Simply pass --vault-path to notebrain ingest to get started.
Full Changelog: v2.8.0...v2.9.0
Released by GoReleaser.
NoteBrain CLI v2.8.0
PDF support in NoteBrain has been completely redesigned. Instead of relying on heuristic-based extraction, PDFs are now processed through an LLM-powered pipeline that produces clean, structured Markdown while preserving the original document layout as closely as possible.
This makes PDF ingestion significantly more accurate for downstream semantic chunking and search.
✨ Highlights
🧠 LLM-Powered PDF Extraction
PDFs are now processed page by page using PDFium (with Tesseract OCR for scanned documents) before being sent to an LLM for restructuring.
The model converts each page into well-formatted Markdown, preserving:
- Headings
- Paragraphs
- Lists
- Tables
- Overall document structure
The resulting Markdown is then chunked and embedded by NoteBrain, providing much higher quality retrieval compared to the previous heuristic parser.
⚙️ Choose Your Extraction Model
A new --llm-model flag lets you select the model used for PDF structuring during ingestion.
notebrain ingest --enable-pdf --llm-model <model>🌐 Native OpenRouter Support
Models that don't use the deepseek- prefix are automatically routed through OpenRouter.
Simply configure your API key:
export OPENROUTER_API_KEY="your-api-key"
notebrain ingest \
--enable-pdf \
--llm-model google/gemini-pro-3.5-flashOther Improvements
Alongside the new PDF pipeline, this release also includes:
- 🩺
notebrain doctorfor diagnosing installation and configuration issues - ⚙️
notebrain initfor interactive first-time setup - 📄 Markdown is now searched by default (
--with-pdfreplaces--no-pdf) - 🐛 Numerous fixes and improvements across the PDF/OCR pipeline
Changelog
🚀 Features
- df84a5e: feat(config): change respect-exclude default to false (@nmdra)
- 5883e7a: feat(ingest): add PDF text extraction and OCR support (@nmdra)
- f20ae5e: feat(ingest): replace pdf2md heuristic with LLM extraction (@nmdra)
- 7e9a6eb: feat(pdf): replace raw text extraction with structured PDF-to-Markdown pipeline (@nmdra)
- 1bf3dd7: feat(search): change --no-pdf to --with-pdf so markdown is default (@nmdra)
- 9d3c65d: feat(ux): implement notebrain doctor command for system diagnostics (@nmdra)
- 8c6d9b6: feat(ux): implement notebrain init for interactive configuration setup (@nmdra)
🐛 Bug Fixes
- 8c18b66: fix(cli): gracefully handle missing config file on first run (@nmdra)
- 4e08e26: fix(ingest): gracefully disable PDF ingestion if --llm-model is missing (@nmdra)
- 5001ace: fix(lint): fix gosec and gci issues in init and doctor commands (@nmdra)
- fff71d4: fix(parser): whitelist pdf extensions from SkipAttachments graph parsing (@nmdra)
- c2b750e: fix(pdf): address code review feedback on PDF/OCR pipeline (@nmdra)
- 47da2c0: fix(pdf2md): fix character sorting and faux-bold deduplication (@nmdra)
- a07cc43: fix: default unknown LLM prefixes to OpenRouter and make PDF failures non-fatal (@nmdra)
Other
- 34a0a71: Improve README badges and add gopher image (@nmdra)
- 61026bf: ci(lint): add explicit permissions block to workflow (@nmdra)
- 495755a: docs(readme): add init command to quick start section (@nmdra)
- 674aa70: docs(readme): polish copy and explicitly mention PDFium and Tesseract (@nmdra)
- 43cddc9: docs(skill): document new pdf and ocr flags in references (@nmdra)
- 863bd61: docs(skill): update agent reference with init and doctor commands (@nmdra)
- 14a3011: refactor(pdfextract): modernize loop using slices.Contains (@nmdra)
Full Changelog: v2.7.2...v2.8.0
Released with ❤️ by GoReleaser.
NoteBrain CLI v2.7.2
Changelog
🐛 Bug Fixes
- ccb17f0: fix(ci): resolve invalid goconst property in golangci.yml and replace literal occurrences with constants (@nmdra)
- 0528f5c: fix(cmd): resolve variable shadowing, unconvert, and whitespace linter issues (@nmdra)
- 2ec53fa: fix(cmd, parser): resolve shadowed error and unused parameter linter issues (@nmdra)
- bb27e0c: fix(configfile): resolve unused parameter linter warnings (@nmdra)
- 2a7840f: fix(ingest): resolve unused parameters and switch statement linter issues (@nmdra)
- 5e9c74d: fix(obsidian): add nolint annotations for gosec subprocess execution (@nmdra)
- 4afde7f: fix(store): resolve shadowed error, switch statement, and gosec linter issues (@nmdra)
Other
- bbde29e: build(deps): upgrade transitive dependencies and update vendor tree (@nmdra)
- c5a7681: docs(changelog): update CHANGELOG.md for v2.7.2 (@nmdra)
- 7beb27c: refactor(cmd): replace repeated format string literals with package constants (@nmdra)
- 126c98a: style: reformat import groupings across internal packages and cmd (@nmdra)
Full Changelog: v2.7.1...v2.7.2
Released by GoReleaser.
NoteBrain CLI v2.7.1
Changelog
🐛 Bug Fixes
- 86f4f5a: fix(cli): make show-file-path default to true and condition terminal hyperlink footer (@nmdra)
- 7d01e99: fix(store): deduplicate notes across pagination pages in hierarchical tag search (@nmdra)
Other
- 5a857a5: docs(changelog): update CHANGELOG.md for v2.7.1 (@nmdra)
- 86c41bf: docs(skills): update agent skills and wiki for show-file-path default and terminal hyperlink behavior (@nmdra)
Full Changelog: v2.7.0...v2.7.1
Released by GoReleaser.
NoteBrain CLI v2.7.0
✨ Highlights
• 🏷️ Direct Tag Search by Default: notebrain tags <tag> now performs direct tag search across your vault by default. Discovered shared notes across multiple tags are now available via the --shared flag.
• 🛡️ ChromaDB FFI Buffer Overflow Protection (Fix #21) : Implemented automated query pagination (ffiSafePageSize, paginatedGetMetadatas) across semantic search, tag search, backlinks, graph traversal, and note context retrieval to eliminate 1 MiB FFI buffer overflow crashes on large vaults.
• ⚡TUI Deprecation: Removed interactive TUI dependencies to reduce binary footprint, improve execution performance, and shift development toward AI agent and machine-driven workflows.
📋 Full Changelog
🚀 Features
- 023f79e: feat(cmd): invert tags command to direct search and improve UX (@nmdra)
- 18d8275: feat(parser): standardize extracted tags to lowercase (@nmdra)
🐛 Bug Fixes
- 80975b7: fix(store): implement pagination for hierarchical tag search (@nmdra)
- 88f61dc: fix(store): lower cleanup batch size to prevent FFI buffer overflow (@nmdra)
- da30872: fix(store): paginate graph edge queries to prevent FFI buffer overflow (@nmdra)
- fded51b: fix(store): paginate heavy embedding and text queries to prevent FFI buffer overflow (@nmdra)
- d9c1e67: fix(store): prevent 1 MiB FFI buffer overflow in TagSearch and semanticSearch (@nmdra)
- c4fec96: fix: resolve core implementation bugs (MinChunkWords, Stats pagination, unused config) (@nmdra)
Other
- a488ffc: chore(ci): bump actions/checkout from 6 to 7 (@dependabot[bot])
- e29be89: chore(ci): bump actions/setup-go from 6 to 7 (@dependabot[bot])
- 0bc52c3: chore(ci): bump sigstore/cosign-installer from 4.1.1 to 4.1.2 (@dependabot[bot])
- 2f9a576: ci(deps): update dependabot configuration (@nmdra)
- cafe3fa: docs(changelog): update CHANGELOG.md for v2.7.0 (@nmdra)
- cc4e000: docs(wiki): sync wiki with JSON output flags refactor and TUI removal (@nmdra)
- 98e0dbd: docs(wiki): update tag command usage, flags, and schema (@nmdra)
- f509dbd: refactor(cli): isolate chunk display and ingest flags from globals (@nmdra)
- 65823da: refactor(cli): remove interactive TUI features (@nmdra)
- 799f418: refactor(store): modernize if statement using min builtin (@nmdra)
- 2232d83: refactor: simplify JSON output flags (remove compact, ndjson) and add show-file-path (@nmdra)
Full Changelog: v2.6.0...v2.7.0
Released by GoReleaser.