knowd — Personal Knowledge Base
Save web pages, search them semantically. No UI — just conversation.
Setup
Install dependencies:
pip3 install -r <skill>/requirements.txt
Set ONE of these API keys (or use Ollama for local/free):
OPENAI_API_KEY— OpenAI text-embedding-3-small (default)VOYAGE_API_KEY— Voyage AI voyage-3-liteCOHERE_API_KEY— Cohere embed-v4JINA_API_KEY— Jina jina-embeddings-v3- Ollama: no key needed, just have Ollama running locally
The provider is locked in on first save — can't mix embedding spaces in the same DB.
Commands
# Save a URL
python3 <skill>/scripts/knowd.py save "<url>"
# Save with a specific provider (first use only sets the provider)
python3 <skill>/scripts/knowd.py --provider voyage save "<url>"
# Semantic search
python3 <skill>/scripts/knowd.py search "<query>" -k 5
# List saved sources
python3 <skill>/scripts/knowd.py list
# Stats (includes provider info)
python3 <skill>/scripts/knowd.py stats
# Delete a source
python3 <skill>/scripts/knowd.py delete "<url-or-id>"
# List available providers and which keys are set
python3 <skill>/scripts/knowd.py providers
When to Use
Saving
When user shares a URL with intent to save ("save this", "remember this", "bookmark this", "add to my knowledge base"):
- Run
knowd save "<url>" - Report: title, chunk count, provider used
- Be conversational: "Saved! Got 8 chunks from 'Article Title' via openai."
Searching
When user asks about saved knowledge ("what did I save about...", "find that article about...", "search my knowledge base for..."):
- Run
knowd search "<query>" - Summarize results naturally — titles, relevant snippets, scores only if helpful
- Don't dump raw output; synthesize
Listing
When user asks what they've saved:
- Run
knowd list - Present as a clean list with titles and dates
Provider Selection
- On first use, if user hasn't specified, auto-detect: use whichever API key is available in the environment
- If multiple keys exist, prefer OpenAI (most common)
- If user explicitly requests a provider:
--provider cohere - After first save, the provider is locked to that DB
State
Database: <workspace>/state/knowd.db (SQLite)
The DB stores the embedding provider/model in metadata. Attempting to use a different provider on an existing DB will error with a clear explanation.
Auto-Detection
If the user doesn't specify a provider, check environment variables in this order:
- OPENAI_API_KEY → openai
- VOYAGE_API_KEY → voyage
- COHERE_API_KEY → cohere
- JINA_API_KEY → jina
- Check if Ollama is running → ollama
- Error: no provider available
