Skip to content

Commit 579ba0c

Browse files
committed
refactor: Clean up stale references (FAISS, ChromaDB, LanceDB)
- Remove FAISS from requirements.txt (already removed from pyproject.toml) - Update config/mcp-servers.json description to reflect Graphiti - Replace FAISS config with Graphiti in settings.yaml - Update Bruno API docs to remove FAISS references - Fix test mocks to use graphiti instead of faiss - Update CLAUDE.md architecture (ChromaDB → Neo4j) - Update README.md search system (remove Hound, update roadmap) - Fix wiki docs (Installation, Configuration, Troubleshooting) - Register pytest 'slow' marker in pyproject.toml - Remove lancedb directory creation from install.sh - Add security contact email to SECURITY.md
1 parent 863eafe commit 579ba0c

17 files changed

Lines changed: 37 additions & 50 deletions

CLAUDE.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ An AI-native development environment that extends Claude Code with persistent me
1717
├─────────────────────────────────────────────────────────────┤
1818
│ Infrastructure │
1919
│ ├── Redis - Hot memory cache (port 6379) │
20-
│ ├── ChromaDB - Vector embeddings (port 8000)
20+
│ ├── Neo4j - Knowledge graph (port 7687)
2121
│ └── LiteLLM - Model routing (port 4000) │
2222
└─────────────────────────────────────────────────────────────┘
2323
```
@@ -241,7 +241,7 @@ docker-compose -f docker/docker-compose.yaml --profile local-llm up -d
241241
| Service | Port | Purpose |
242242
|---------|------|---------|
243243
| redis | 6379 | Hot memory cache |
244-
| chromadb | 8000 | Vector embeddings |
244+
| neo4j | 7474/7687 | Knowledge graph (HTTP/Bolt) |
245245
| litellm | 4000 | Model routing |
246246
| playwright | 9222 | Browser automation (optional) |
247247
| ollama | 11434 | Local LLM (optional) |

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ An AI-native development environment that extends Claude Code with persistent me
66

77
Claude Code++ adds enterprise-grade capabilities to Claude Code through MCP (Model Context Protocol) servers:
88

9-
- **Memory MCP** - Four-tier persistent memory (Redis → Graphiti → livegrep → Obsidian)
10-
- **Search MCP** - Multi-layer search (Hound → livegrep → Graphiti → Semantic)
9+
- **Memory MCP** - Four-tier persistent memory (Redis → Graphiti → SQLite → Obsidian)
10+
- **Search MCP** - Multi-layer search (SQLite FTS → livegrep → Graphiti)
1111
- **System Controller** - macOS Accessibility API integration
1212
- **Research Environment** - Voice conversations + webcam whiteboard capture
1313
- **Infrastructure** - Docker-based services for Redis, Neo4j, and model routing
@@ -243,10 +243,10 @@ See [wiki/Research-Environment.md](wiki/Research-Environment.md) for full docume
243243

244244
## Roadmap
245245

246-
- [ ] Hound integration for project-local search
247-
- [ ] Semantic search layer (Nomic Embed + LanceDB)
248-
- [ ] Search MCP server (separate from Memory MCP)
246+
- [ ] Semantic search layer (intent-based queries)
249247
- [ ] Windows/Linux System Controller
248+
- [ ] CAIIDE++ VS Code fork integration
249+
- [ ] Voice mode improvements
250250

251251
## License
252252

SECURITY.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ If you discover a security vulnerability in Claude Code++, please report it resp
88
2. Email security concerns to the maintainers directly
99
3. Include details about the vulnerability and steps to reproduce
1010

11+
## Security Contact
12+
13+
Email: jeremiahk@halfservers.com
14+
1115
## Security Measures
1216

1317
Claude Code++ implements several security measures:

bruno/memory-mcp/Memory Stats.bru

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,14 @@ docs {
5151
- `sqlite`: SQLite cold storage
5252
- `vault`: Obsidian vault archive
5353
- `redis`: Redis hot cache
54-
- `faiss`: FAISS vector search
54+
- `graphiti`: Graphiti/Neo4j knowledge graph
5555
- `embedder`: Embedding provider
5656
- `health`: Detailed health status with latency
5757
- Each component shows: status, latency_ms, error (if any)
5858
- `sqlite`: SQLite-specific stats
5959
- `vault`: Vault-specific stats
6060
- `redis`: Redis-specific stats (if available)
61-
- `faiss`: FAISS-specific stats (if available)
61+
- `graphiti`: Graphiti-specific stats (if available)
6262
- `embedder`: Embedder info (if available)
6363

6464
## Use Cases

bruno/memory-mcp/README.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,12 @@ npm install -g @usebruno/cli
3232
Since Memory MCP uses stdio, you'll need an HTTP bridge for Bruno testing:
3333

3434
```bash
35-
# Option 1: Use the MCP Inspector (recommended for debugging)
35+
# Use the MCP Inspector (recommended)
3636
npx @modelcontextprotocol/inspector python -m memory_mcp.server
37-
38-
# Option 2: Custom HTTP bridge (if implemented)
39-
python -m memory_mcp.http_bridge --port 8080
4037
```
4138

39+
This opens an inspector UI at http://localhost:5173 with an MCP endpoint for testing.
40+
4241
### 3. Configure Environment
4342

4443
The `environments/local.bru` file contains:

bruno/memory-mcp/Search Memory.bru

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ docs {
5252
## Search Types
5353

5454
- **text**: Full-text search using SQLite FTS5
55-
- **semantic**: Vector similarity search using FAISS
55+
- **semantic**: Vector similarity search using embeddings
5656
- **hybrid**: Combines both methods for best results
5757

5858
## Response

config/mcp-servers.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"env": {
77
"CLAUDE_CODE_PP_CONFIG": "~/.claude-code-pp/config/settings.yaml"
88
},
9-
"description": "Claude Code++ Memory System - tiered memory with Redis, FAISS, SQLite, and Obsidian vault"
9+
"description": "Claude Code++ Memory System - tiered memory with Redis, Graphiti/Neo4j, SQLite, and Obsidian vault"
1010
},
1111
"claude-code-pp-system": {
1212
"command": "${HOME}/.claude-code-pp/bin/system-controller",

config/settings.yaml

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -56,20 +56,21 @@ memory:
5656
# Storage paths
5757
paths:
5858
vault: "~/.claude-code-pp/memory/vault"
59-
faiss: "~/.claude-code-pp/memory/faiss"
6059
database: "~/.claude-code-pp/memory/metadata.db"
61-
60+
6261
# Hot layer (Redis)
6362
redis:
6463
enabled: true
6564
host: "localhost"
6665
port: 6379
6766
db: 0
68-
69-
# Warm layer (FAISS)
70-
faiss:
71-
index_type: "flat" # flat | ivf | hnsw
72-
rebuild_threshold: 0.1
67+
68+
# Warm layer (Graphiti/Neo4j)
69+
graphiti:
70+
enabled: true
71+
neo4j_uri: "bolt://localhost:7687"
72+
neo4j_user: "neo4j"
73+
# neo4j_password: set via NEO4J_PASSWORD env var
7374

7475
# Auto-memory triggers
7576
auto_store:

install.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ create_directories() {
202202
info "Creating directory structure..."
203203

204204
mkdir -p "$INSTALL_DIR"/{bin,config,logs,cache}
205-
mkdir -p "$INSTALL_DIR"/memory/{sqlite,lancedb,vault/{code,notes,conversations,references,daily}}
205+
mkdir -p "$INSTALL_DIR"/memory/{sqlite,vault/{code,notes,conversations,references,daily}}
206206

207207
success "Created $INSTALL_DIR"
208208
}

python/memory_mcp/sqlite_index.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,7 @@ def get_recent(self, limit: int = 20) -> List[MemoryDocument]:
393393
return [MemoryDocument.from_row(row) for row in cursor.fetchall()]
394394

395395
def get_by_embedding_ids(self, embedding_ids: List[str]) -> List[MemoryDocument]:
396-
"""Get documents by their embedding IDs (for FAISS result lookup)."""
396+
"""Get documents by their embedding IDs (for semantic search result lookup)."""
397397
if not embedding_ids:
398398
return []
399399
placeholders = ",".join("?" * len(embedding_ids))

0 commit comments

Comments
 (0)