mirror of
https://github.com/lukaszraczylo/claude-mnemonic.git
synced 2026-10-12 04:55:18 +00:00
Release local embeddings and local sqlite-vec without need for chroma.
This commit is contained in:
+9
-5
@@ -13,11 +13,13 @@ before:
|
|||||||
- bash -c "cd ui && npm ci --silent && npm run build"
|
- 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/"
|
- 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:
|
template_files:
|
||||||
- src: plugin/.claude-plugin/plugin.json.tpl
|
- id: plugin-json
|
||||||
|
src: plugin/.claude-plugin/plugin.json.tpl
|
||||||
dst: .claude-plugin/plugin.json
|
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
|
dst: .claude-plugin/marketplace.json
|
||||||
|
|
||||||
builds:
|
builds:
|
||||||
@@ -212,7 +214,8 @@ builds:
|
|||||||
|
|
||||||
archives:
|
archives:
|
||||||
- id: default
|
- id: default
|
||||||
format: tar.gz
|
formats:
|
||||||
|
- tar.gz
|
||||||
name_template: >-
|
name_template: >-
|
||||||
{{ .ProjectName }}_
|
{{ .ProjectName }}_
|
||||||
{{- .Version }}_
|
{{- .Version }}_
|
||||||
@@ -227,7 +230,8 @@ archives:
|
|||||||
strip_parent: true
|
strip_parent: true
|
||||||
format_overrides:
|
format_overrides:
|
||||||
- goos: windows
|
- goos: windows
|
||||||
format: zip
|
formats:
|
||||||
|
- zip
|
||||||
|
|
||||||
checksum:
|
checksum:
|
||||||
name_template: 'checksums.txt'
|
name_template: 'checksums.txt'
|
||||||
|
|||||||
@@ -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) |
|
| **Claude Code CLI** | Yes | Host application (this is a plugin) |
|
||||||
| **jq** | Yes | JSON processing during installation |
|
| **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.
|
> **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
|
Requires: Go 1.24+, Node.js 18+, CGO-compatible compiler
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>Install optional dependencies (for semantic search)</summary>
|
|
||||||
|
|
||||||
**macOS:**
|
|
||||||
```bash
|
|
||||||
brew install [email protected]
|
|
||||||
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.
|
After install, open **http://localhost:37777** to see the dashboard. Start a new Claude Code session - memory is now active.
|
||||||
|
|
||||||
### Verifying Release Signatures
|
### Verifying Release Signatures
|
||||||
@@ -115,7 +89,7 @@ Mnemonic captures it automatically
|
|||||||
Next session: Claude remembers
|
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
|
## Configuration
|
||||||
|
|
||||||
@@ -149,7 +123,7 @@ Example: A bug fix in your auth module stays local. "Always validate JWT server-
|
|||||||
|
|
||||||
## MCP Tools
|
## 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
|
- `search` - semantic search across all memories
|
||||||
- `timeline` - browse by time
|
- `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
|
rm -f ~/.claude-mnemonic/*.db-wal ~/.claude-mnemonic/*.db-shm
|
||||||
```
|
```
|
||||||
|
|
||||||
**ChromaDB not working?**
|
|
||||||
Needs Python 3.13+ and `uvx`. On macOS: `brew install [email protected]`
|
|
||||||
|
|
||||||
## Uninstall
|
## Uninstall
|
||||||
|
|
||||||
```bash
|
```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
|
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 support
|
||||||
|
|
||||||
| Platform | Status |
|
| Platform | Status |
|
||||||
@@ -190,8 +170,8 @@ curl -sSL https://raw.githubusercontent.com/lukaszraczylo/claude-mnemonic/main/s
|
|||||||
| macOS Intel | Supported |
|
| macOS Intel | Supported |
|
||||||
| macOS Apple Silicon | Supported |
|
| macOS Apple Silicon | Supported |
|
||||||
| Linux amd64 | Supported |
|
| Linux amd64 | Supported |
|
||||||
|
| Linux arm64 | Supported |
|
||||||
| Windows amd64 | Supported |
|
| Windows amd64 | Supported |
|
||||||
| Linux arm64 | Not supported (CGO limitation) |
|
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
|
|||||||
+13
-60
@@ -202,14 +202,13 @@
|
|||||||
<!-- Requirements Section -->
|
<!-- Requirements Section -->
|
||||||
<section id="requirements" class="py-20 lg:py-28 px-4 sm:px-6 bg-slate-900/30">
|
<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">
|
<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">
|
<div class="max-w-xl mx-auto">
|
||||||
<!-- Required -->
|
|
||||||
<div class="glass rounded-2xl p-5 sm:p-6">
|
<div class="glass rounded-2xl p-5 sm:p-6">
|
||||||
<div class="flex items-center gap-2 mb-4">
|
<div class="flex items-center gap-2 mb-4">
|
||||||
<i class="fas fa-check-circle text-green-500"></i>
|
<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>
|
||||||
<div class="space-y-3">
|
<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">
|
<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>
|
||||||
</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">
|
<p class="text-slate-500 text-xs mt-4">
|
||||||
<i class="fas fa-info-circle mr-1"></i>
|
<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>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</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>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@@ -320,18 +274,22 @@
|
|||||||
<section class="py-20 lg:py-28 px-4 sm:px-6">
|
<section class="py-20 lg:py-28 px-4 sm:px-6">
|
||||||
<div class="max-w-6xl mx-auto">
|
<div class="max-w-6xl mx-auto">
|
||||||
<SectionHeader title="Under the hood" subtitle="Built with simplicity and performance in mind" />
|
<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="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>
|
<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>
|
||||||
<div class="glass rounded-2xl p-6 sm:p-8 hover:border-amber-500/30 transition-colors">
|
<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>
|
<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>
|
||||||
<div class="glass rounded-2xl p-6 sm:p-8 hover:border-amber-500/30 transition-colors">
|
<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>
|
<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">Vector embeddings for semantic search. "Fix auth" finds "JWT validation issue" automatically.</p>
|
<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>
|
</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' },
|
{ 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 = [
|
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: '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.' },
|
{ 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
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "claude-mnemonic-dashboard",
|
"name": "claude-mnemonic-dashboard",
|
||||||
"version": "v0.6.1-11-g7fe679f-dirty",
|
"version": "{{ .Version }}",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
Reference in New Issue
Block a user