// Implemented on My 24GB Mac mini, no external Thunderbolt or USB4 SSD // executed on a archived copy of my live vault
This file covers environment setup, model selection, and the indexing pipeline implementation.
Environment Setup
- Installed Homebrew, since it is the simplest way to install command line tools on macOS.
- Install Ollama using Homebrew, gives a local model runtime with an API endpoint at localhost port 11434. // looks like Ollama can launch frontier models
- Install Python 3.11 for orchestration scripts, embedding libraries, and vector database tools assume a recent Python version.
- Create a dedicated copy of the vault to test in
Download Models
- Pull the embedding model first, since it is small and will be used immediately for testing. // pulled via
ollama pull nomic-embed-text. Default pulls into~/.ollama/models. Tested and working - Pull Qwen3 14B as your primary generation model. // pulled via
ollama pull qwen3:14b. Testing via:(echo "Read this note and return 3-5 topic tags as a comma-separated list, nothing else:"; cat "/Users/josephrenner/Projects/garage/vault/Identify files by origin then type.md") | ollama run qwen3:14b
Vector Database and Embedding Pipeline
- Install a lightweight vector database library in Python, Chroma, run embedded directly in your script without a separate server process. // installed via
pip3 install chromadb. Having issues with python finding to install. Created virtual environment instead and installed there - Write a small indexing script that reads a markdown file, splits it into reasonably sized chunks, sends each chunk to the embedding model, and stores the resulting vectors with a reference back to the source file. Implemented as
scripts/index_file.py: - // Testing small scripts:
- //
ls "Identify files by origin then type.md" - //
python3 scripts/index_file.py "Identify files by origin then type.md" --vault-root "/Users/josephrenner/Projects/vault copy for agent testing" - //
python3 scripts/index_file.py "tobiqmd mini cli search engine for your docs, knowledge bases, meeting notes, whatever. Tracking current sota approaches while being all local (by tobi).md" --vault-root "/Users/josephrenner/Projects/vault copy for agent testing"
- //
- Tested this script against a small subset of files with
garagein the name viascripts/index_subset.py, which finds vault-root.mdfiles matching a name substring, reusesindex_file()for each one, and prints a summary of files processed, failures, total chunks, and elapsed time. - Write a basic query script that takes a test question, embeds it the same way, and returns the most similar chunks from your vector database. // created
scripts/query.py- // test question with
python3 scripts/query.py "What does the term garage mean to me?"- returned 5 rational chunks
- // test question with
- Run the indexing script against your full archived vault copy. Implemented as
scripts/index_all.py, which recursively walks the vault for markdown files, reusesindex_file()for each one, and cleans up stale collection entries for files that were renamed or deleted, by diffing the current on-disk file list againstsourcemetadata already in the collection.- // Ran script via
python3 scripts/index_all.py --vault-root "/Users/josephrenner/Projects/vault copy for agent testing" - // Test rename on
2026-07-17 093208 (from Whisper)to2026-07-17 093208 (from Whisper) rename test- worked and was reported in the terminal - See 2026-08-02 Testing vault index chunking and topic clustering (by Claude) for the chunking-bug and Ollama memory pressure investigation behind getting this to run cleanly across the full vault.
- // Ran script via
Follow on tasks
- started attempt of tagging files by script creation of topics based on clusters: 2026-08-02 Testing vault index chunking and topic clustering (by Claude). Resulted in unhelpful tags and/or not full coverage
- Manual topic tag library and AI model use (by Claude), current tagging approach: a manually authored tag vocabulary, matched to each file by Qwen3 14B