Release local embeddings and local sqlite-vec without need for chroma.

This commit is contained in:
2025-12-16 11:42:59 +00:00
parent e975419ec7
commit 02169677a9
5 changed files with 36 additions and 99 deletions
+9 -5
View File
@@ -13,11 +13,13 @@ before:
- bash -c "cd ui && npm ci --silent && npm run build"
- bash -c "rm -rf internal/worker/static && mkdir -p internal/worker/static && cp -r ui/dist/* internal/worker/static/"
# Generate versioned plugin configuration files (GoReleaser Pro feature)
# Generate versioned plugin configuration files (GoReleaser Pro)
template_files:
- src: plugin/.claude-plugin/plugin.json.tpl
- id: plugin-json
src: plugin/.claude-plugin/plugin.json.tpl
dst: .claude-plugin/plugin.json
- src: plugin/.claude-plugin/marketplace.json.tpl
- id: marketplace-json
src: plugin/.claude-plugin/marketplace.json.tpl
dst: .claude-plugin/marketplace.json
builds:
@@ -212,7 +214,8 @@ builds:
archives:
- id: default
format: tar.gz
formats:
- tar.gz
name_template: >-
{{ .ProjectName }}_
{{- .Version }}_
@@ -227,7 +230,8 @@ archives:
strip_parent: true
format_overrides:
- goos: windows
format: zip
formats:
- zip
checksum:
name_template: 'checksums.txt'
+13 -33
View File
@@ -18,10 +18,8 @@ It captures what Claude learns during your coding sessions - bug fixes, architec
|------------|----------|---------|
| **Claude Code CLI** | Yes | Host application (this is a plugin) |
| **jq** | Yes | JSON processing during installation |
| **Python 3.13+** | Optional | ChromaDB semantic search |
| **uvx** | Optional | Python package runner for ChromaDB |
The installer will check for these and provide installation commands if missing.
That's it. No Python. No external services. Everything runs locally.
> **No API keys needed!** Claude Mnemonic uses Claude Code CLI, which works with your existing Claude Pro or Max subscription. No separate API costs.
@@ -53,30 +51,6 @@ make build && make install
Requires: Go 1.24+, Node.js 18+, CGO-compatible compiler
</details>
<details>
<summary>Install optional dependencies (for semantic search)</summary>
**macOS:**
```bash
brew install python@3.13
pip3 install uv
```
**Linux (Ubuntu/Debian):**
```bash
sudo apt install python3 python3-pip
pip3 install uv
```
**Windows:**
```powershell
winget install Python.Python.3.13
pip install uv
```
Note: Requires Python 3.13+. Most package managers install the latest version.
</details>
After install, open **http://localhost:37777** to see the dashboard. Start a new Claude Code session - memory is now active.
### Verifying Release Signatures
@@ -115,7 +89,7 @@ Mnemonic captures it automatically
Next session: Claude remembers
```
Behind the scenes: hooks capture Claude's observations → SQLite stores with full-text search → ChromaDB enables semantic search → relevant context is injected at session start.
Behind the scenes: hooks capture Claude's observations → SQLite stores with full-text search → sqlite-vec enables semantic search with local embeddings (all-MiniLM-L6-v2) → relevant context is injected at session start.
## Configuration
@@ -149,7 +123,7 @@ Example: A bug fix in your auth module stays local. "Always validate JWT server-
## MCP Tools
When ChromaDB is available, these search tools work via MCP:
These search tools are available via MCP:
- `search` - semantic search across all memories
- `timeline` - browse by time
@@ -170,9 +144,6 @@ cat /tmp/claude-mnemonic-worker.log # view logs
rm -f ~/.claude-mnemonic/*.db-wal ~/.claude-mnemonic/*.db-shm
```
**ChromaDB not working?**
Needs Python 3.13+ and `uvx`. On macOS: `brew install python@3.13`
## Uninstall
```bash
@@ -183,6 +154,15 @@ curl -sSL https://raw.githubusercontent.com/lukaszraczylo/claude-mnemonic/main/s
curl -sSL https://raw.githubusercontent.com/lukaszraczylo/claude-mnemonic/main/scripts/uninstall.sh | bash -s -- --keep-data
```
## Architecture
- **SQLite + FTS5** - Full-text search for exact matches
- **sqlite-vec** - Vector database embedded in SQLite
- **all-MiniLM-L6-v2** - Local embedding model (384 dimensions) via ONNX Runtime
- **Go** - Single binary, no external dependencies
Everything runs locally. No Python. No external vector database. No API calls for embeddings.
## Platform support
| Platform | Status |
@@ -190,8 +170,8 @@ curl -sSL https://raw.githubusercontent.com/lukaszraczylo/claude-mnemonic/main/s
| macOS Intel | Supported |
| macOS Apple Silicon | Supported |
| Linux amd64 | Supported |
| Linux arm64 | Supported |
| Windows amd64 | Supported |
| Linux arm64 | Not supported (CGO limitation) |
## Development
+13 -60
View File
@@ -202,14 +202,13 @@
<!-- Requirements Section -->
<section id="requirements" class="py-20 lg:py-28 px-4 sm:px-6 bg-slate-900/30">
<div class="max-w-6xl mx-auto">
<SectionHeader title="Requirements" subtitle="Minimal dependencies. Maximum functionality." />
<SectionHeader title="Requirements" subtitle="Minimal dependencies. Everything else is built-in." />
<div class="grid md:grid-cols-2 gap-6 sm:gap-8">
<!-- Required -->
<div class="max-w-xl mx-auto">
<div class="glass rounded-2xl p-5 sm:p-6">
<div class="flex items-center gap-2 mb-4">
<i class="fas fa-check-circle text-green-500"></i>
<span class="text-white font-semibold text-sm sm:text-base">Required</span>
<span class="text-white font-semibold text-sm sm:text-base">That's all you need</span>
</div>
<div class="space-y-3">
<div v-for="req in requiredDeps" :key="req.name" class="flex items-start gap-3 p-3 bg-slate-800/50 rounded-lg">
@@ -220,57 +219,12 @@
</div>
</div>
</div>
</div>
<!-- Optional -->
<div class="glass rounded-2xl p-5 sm:p-6">
<div class="flex items-center gap-2 mb-4">
<i class="fas fa-plus-circle text-amber-500"></i>
<span class="text-white font-semibold text-sm sm:text-base">Optional (for semantic search)</span>
</div>
<div class="space-y-3">
<div v-for="req in optionalDeps" :key="req.name" class="flex items-start gap-3 p-3 bg-slate-800/50 rounded-lg">
<i :class="[req.icon, 'text-slate-500 mt-0.5']"></i>
<div>
<code class="text-white text-xs sm:text-sm font-semibold">{{ req.name }}</code>
<p class="text-slate-400 text-xs mt-1">{{ req.description }}</p>
</div>
</div>
</div>
<p class="text-slate-500 text-xs mt-4">
<i class="fas fa-info-circle mr-1"></i>
Without these, core functionality (SQLite storage, full-text search) still works.
No Python. No external services. Semantic search with local embeddings is built-in.
</p>
</div>
</div>
<div class="mt-6 sm:mt-8 glass rounded-xl p-4 sm:p-5">
<div class="flex items-center gap-2 mb-3">
<i class="fas fa-terminal text-amber-500"></i>
<span class="text-white font-semibold text-sm">Install optional dependencies</span>
</div>
<div class="grid sm:grid-cols-3 gap-3 text-xs">
<div class="bg-slate-800/50 rounded-lg p-3">
<p class="text-slate-400 mb-2">macOS</p>
<code class="text-amber-400">brew install python3</code><br>
<code class="text-amber-400">pip3 install uv</code>
</div>
<div class="bg-slate-800/50 rounded-lg p-3">
<p class="text-slate-400 mb-2">Linux</p>
<code class="text-amber-400">apt install python3</code><br>
<code class="text-amber-400">pip3 install uv</code>
</div>
<div class="bg-slate-800/50 rounded-lg p-3">
<p class="text-slate-400 mb-2">Windows</p>
<code class="text-amber-400">winget install Python.Python.3</code><br>
<code class="text-amber-400">pip install uv</code>
</div>
</div>
<p class="text-slate-500 text-xs mt-3">
<i class="fas fa-info-circle mr-1"></i>
Requires Python 3.13+. Most package managers install the latest version.
</p>
</div>
</div>
</section>
@@ -320,18 +274,22 @@
<section class="py-20 lg:py-28 px-4 sm:px-6">
<div class="max-w-6xl mx-auto">
<SectionHeader title="Under the hood" subtitle="Built with simplicity and performance in mind" />
<div class="grid sm:grid-cols-3 gap-4 sm:gap-8 text-center">
<div class="grid sm:grid-cols-2 lg:grid-cols-4 gap-4 sm:gap-6 text-center">
<div class="glass rounded-2xl p-6 sm:p-8 hover:border-amber-500/30 transition-colors">
<div class="text-3xl sm:text-4xl font-bold text-amber-500 mb-2">Go</div>
<p class="text-slate-400 text-xs sm:text-sm">Worker service and hooks. Fast startup, low memory footprint, zero runtime dependencies.</p>
<p class="text-slate-400 text-xs sm:text-sm">Single binary. Fast startup, low memory. Zero runtime dependencies.</p>
</div>
<div class="glass rounded-2xl p-6 sm:p-8 hover:border-amber-500/30 transition-colors">
<div class="text-3xl sm:text-4xl font-bold text-amber-500 mb-2">SQLite</div>
<p class="text-slate-400 text-xs sm:text-sm">FTS5 full-text search. Single file database. No server to manage. Survives restarts.</p>
<p class="text-slate-400 text-xs sm:text-sm">FTS5 full-text search. Single file database. Survives restarts.</p>
</div>
<div class="glass rounded-2xl p-6 sm:p-8 hover:border-amber-500/30 transition-colors">
<div class="text-3xl sm:text-4xl font-bold text-amber-500 mb-2">ChromaDB</div>
<p class="text-slate-400 text-xs sm:text-sm">Vector embeddings for semantic search. "Fix auth" finds "JWT validation issue" automatically.</p>
<div class="text-3xl sm:text-4xl font-bold text-amber-500 mb-2">sqlite-vec</div>
<p class="text-slate-400 text-xs sm:text-sm">Embedded vector database. No external services required.</p>
</div>
<div class="glass rounded-2xl p-6 sm:p-8 hover:border-amber-500/30 transition-colors">
<div class="text-3xl sm:text-4xl font-bold text-amber-500 mb-2">MiniLM</div>
<p class="text-slate-400 text-xs sm:text-sm">Local embeddings via ONNX. "Fix auth" finds "JWT issue" automatically.</p>
</div>
</div>
</div>
@@ -466,11 +424,6 @@ const requiredDeps = [
{ name: 'jq', description: 'JSON processor used during installation. Usually pre-installed on most systems.', icon: 'fas fa-code' },
]
const optionalDeps = [
{ name: 'Python 3.13+', description: 'Required for ChromaDB semantic search. Natural language queries like "that auth bug" work.', icon: 'fab fa-python' },
{ name: 'uv', description: 'Python package manager for ChromaDB MCP server. Provides the uvx command.', icon: 'fas fa-box' },
]
const faqs = [
{ question: 'Will it confuse Claude with wrong context?', answer: 'No. Mnemonic uses project isolation and semantic relevance scoring. Only memories from the current project (or global best practices) are injected, and only when they\'re actually relevant to your prompt.' },
{ question: 'What exactly gets saved?', answer: 'Bug fixes with context ("Fixed race condition by adding mutex"), architecture decisions ("Using repository pattern for data access"), conventions ("All API routes prefixed with /api/v1"), and learnings you want to preserve.' },
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "claude-mnemonic-dashboard",
"version": "v0.6.1-11-g7fe679f-dirty",
"version": "{{ .Version }}",
"private": true,
"type": "module",
"scripts": {