claude-self-reflect
Version:
Give Claude perfect memory of all your conversations - Installation wizard for Python MCP server
110 lines (103 loc) • 3.24 kB
YAML
volumes:
qdrant_data:
services:
# Fix permissions for config directory
init-permissions:
image: alpine
command: chown -R 1000:1000 /config
volumes:
- ${CONFIG_PATH:-~/.claude-self-reflect/config}:/config
profiles: ["watch", "mcp", "import"]
# Qdrant vector database - the heart of semantic search
qdrant:
image: qdrant/qdrant:v1.15.1
container_name: claude-reflection-qdrant
ports:
- "${QDRANT_PORT:-6333}:6333"
volumes:
- qdrant_data:/qdrant/storage
environment:
- QDRANT__LOG_LEVEL=INFO
- QDRANT__SERVICE__HTTP_PORT=6333
restart: unless-stopped
mem_limit: ${QDRANT_MEMORY:-2g}
memswap_limit: ${QDRANT_MEMORY:-2g}
# One-time import service (runs once then exits)
importer:
build:
context: .
dockerfile: Dockerfile.importer
container_name: claude-reflection-importer
depends_on:
- init-permissions
- qdrant
volumes:
- ${CLAUDE_LOGS_PATH:-~/.claude/projects}:/logs:ro
- ${CONFIG_PATH:-~/.claude-self-reflect/config}:/config
- ./scripts:/scripts:ro
environment:
- QDRANT_URL=http://qdrant:6333
- STATE_FILE=/config/imported-files.json
- OPENAI_API_KEY=${OPENAI_API_KEY:-}
- VOYAGE_API_KEY=${VOYAGE_API_KEY:-}
- VOYAGE_KEY=${VOYAGE_KEY:-}
- PREFER_LOCAL_EMBEDDINGS=${PREFER_LOCAL_EMBEDDINGS:-false}
- EMBEDDING_MODEL=${EMBEDDING_MODEL:-voyage-3}
- BATCH_SIZE=${BATCH_SIZE:-50}
- CHUNK_SIZE=${CHUNK_SIZE:-10}
- PYTHONUNBUFFERED=1
restart: "no"
profiles: ["import"]
command: python /scripts/import-conversations-unified.py
# Continuous watcher service (optional)
watcher:
build:
context: .
dockerfile: Dockerfile.watcher
container_name: claude-reflection-watcher
depends_on:
- init-permissions
- qdrant
volumes:
- ${CLAUDE_LOGS_PATH:-~/.claude/projects}:/logs:ro
- ${CONFIG_PATH:-~/.claude-self-reflect/config}:/config
- ./scripts:/scripts:ro
- /tmp:/tmp
environment:
- QDRANT_URL=http://qdrant:6333
- STATE_FILE=/config/imported-files.json
- OPENAI_API_KEY=${OPENAI_API_KEY:-}
- VOYAGE_API_KEY=${VOYAGE_API_KEY:-}
- VOYAGE_KEY=${VOYAGE_KEY:-}
- PREFER_LOCAL_EMBEDDINGS=${PREFER_LOCAL_EMBEDDINGS:-false}
- EMBEDDING_MODEL=${EMBEDDING_MODEL:-voyage-3}
- WATCH_INTERVAL=${WATCH_INTERVAL:-60}
- PYTHONUNBUFFERED=1
restart: unless-stopped
profiles: ["watch"]
mem_limit: 1g
memswap_limit: 1g
# MCP server for Claude integration
mcp-server:
build:
context: .
dockerfile: Dockerfile.mcp-server
container_name: claude-reflection-mcp
depends_on:
- qdrant
environment:
- QDRANT_URL=http://qdrant:6333
- VOYAGE_KEY=${VOYAGE_KEY:-}
- PREFER_LOCAL_EMBEDDINGS=${PREFER_LOCAL_EMBEDDINGS:-true}
- ENABLE_MEMORY_DECAY=${ENABLE_MEMORY_DECAY:-true}
- DECAY_WEIGHT=${DECAY_WEIGHT:-0.3}
- DECAY_SCALE_DAYS=${DECAY_SCALE_DAYS:-90}
- PYTHONUNBUFFERED=1
restart: unless-stopped
stdin_open: true
tty: true
profiles: ["mcp"]
networks:
default:
name: claude-reflection-network
external: false