TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
Simple RAG implementation for local queries into a local personal knowledgebase (Zettelkasten)
ProductivityPythonGitHub @svetzalSelf-installOwner unconfirmed
Paste into Claude or ChatGPT for installation instructions suited to your environment.
Have you tried it? One tap is enough. No sign-in needed.
Loading the full README. The saved excerpt is shown below.
💬 zk-chat: AI-Powered Chat for Your Zettelkasten
Transform your Zettelkasten into an intelligent knowledge assistant. zk-chat lets you have natural conversations with your notes using AI—whether you run models locally with Ollama or use OpenAI's cloud API.Read the full README ↗Transform your Zettelkasten into an intelligent knowledge assistant. zk-chat lets you have natural conversations with your notes using AI—whether you run models locally with Ollama or use OpenAI's cloud API.
Full documentation: https://vetzal.com/zk-chat/
# Install with pipx (recommended)
pipx install zk-chat
# Install Ollama and a model
brew install ollama
ollama pull qwen3:8b
# For visual analysis (optional)
ollama pull gemma3:27b
# Start interactive session
zk-chat interactive --vault /path/to/your/notes
# Ask a question
zk-chat query "What are my main ideas about productivity?"
# Single query with visual model
zk-chat query "Analyze diagram.png" --visual-model gemma3:27b
--unsafe mode for AI-assisted content creation[[wikilink]] syntax# List all vault bookmarks
zk-chat bookmarks list
# Remove a bookmark
zk-chat bookmarks remove /path/to/vault
# Check index health
zk-chat diagnose index
# Run test query to verify search
zk-chat diagnose index --query "test"
# Register external tools
zk-chat mcp register figma stdio "figma-mcp"
# List and verify servers
zk-chat mcp list
zk-chat mcp verify
Choose based on your RAM:
| RAM Available | Text Model | Visual Model |
|---|---|---|
| 64GB+ | gpt-oss:120b, qwen3:32b | gemma3:27b |
| 36-48GB | gpt-oss:20b, qwen3:14b | gemma3:27b |
| 16-32GB | qwen3:8b, qwen2.5:7b | gemma3:9b |
| 8-16GB | qwen3:1.5b, qwen2.5:3b | gemma3:2b |
See the Model Selection Guide for detailed recommendations by task and hardware.
# Start a conversation
zk-chat interactive
# With specific model
zk-chat interactive --model qwen3:14b
# Allow AI to edit files (with git tracking)
zk-chat interactive --unsafe --git
# With visual analysis
zk-chat interactive --visual-model gemma3:27b
# Direct question
zk-chat query "What are my thoughts on AI?"
# From file or stdin
cat question.txt | zk-chat query
# Complex multi-step query
zk-chat query "Find all notes about productivity and create a summary"
# Save current vault
zk-chat interactive --vault ~/notes --save
# List bookmarks
zk-chat bookmarks list
# Remove bookmark
zk-chat bookmarks remove ~/old-notes
# Quick incremental update
zk-chat index update
# Full rebuild
zk-chat index update --full
# Check status
zk-chat index status
Ask natural questions about images in your vault:
--vault PATH or -v - Path to your Zettelkasten--gateway {ollama,openai} or -g - Choose AI provider--model NAME or -m - Specify chat model--visual-model NAME - Specify visual analysis model--save - Bookmark the current vault--no-index - Skip indexing on startup (faster start)--unsafe - Allow AI to create/edit files ⚠️--git - Enable git integration (recommended with --unsafe)--store-prompt / --no-store-prompt - Control system prompt storage--reset-memory - Clear smart memory⚠️ Safety: The
--unsafeflag allows AI to modify your notes. Always use with--gitfor tracking changes.
OPENAI_API_KEY environment variable.md files)[[Note Name]])zk-chat uses a modern RAG architecture:
The AI agent has access to:
Create custom tools for your specific needs:
from zk_chat.services import ZkChatPlugin, ServiceProvider
class MyPlugin(ZkChatPlugin):
def __init__(self, service_provider: ServiceProvider):
super().__init__(service_provider)
def run(self, input_text: str) -> str:
# Access zk-chat services
fs = self.filesystem_gateway
zk = self.zettelkasten
llm = self.llm_broker
# Your plugin logic
return result
See the Plugin Development Guide for complete documentation.
export OLLAMA_NUM_PARALLEL=4--no-indexexport OLLAMA_NUM_CTX=16384# Check running models
ollama ps
# Monitor system resources
htop # or Activity Monitor on Mac
# Remove unused models
ollama list
ollama rm unused-model
zk-chat stores its data in your vault:
.zk_chat - Configuration file.zk_chat_db/ - Vector database (ChromaDB)ZkSystemPrompt.md - System prompt (customizable)Add these to .gitignore:
.zk_chat_db/
.zk_chat
# Start Ollama
ollama serve
# Verify model installed
ollama list
# Diagnose index health
zk-chat diagnose index
# Force full rebuild
zk-chat index update --full
Contributions welcome! Please see CONTRIBUTING.md for guidelines.
MIT License - Copyright (c) 2024-2025 Stacey Vetzal
If you find zk-chat useful, please consider starring the repository on GitHub!
Made with ❤️ for the Zettelkasten community
This project uses Ruff for linting and auto-fixes (including removing unused imports/variables and sorting imports).
python -m pip install -e ".[dev]"
# Lint with Ruff (fails on errors; uses pyproject.toml configuration)
ruff check zk_chat
# Apply safe fixes (remove unused imports/variables, sort imports, etc.)
ruff check zk_chat --fix
Optional formatting (if desired):
# Ruff can also format code
ruff format zk_chat
Notes:
pyproject.toml).