Mem- Oracle

Configuration

Configure mem-oracle settings and embedding providers.

Mem- Oracle is highly configurable to suit your needs. Configuration is stored in ~/.mem-oracle/config.json.

Default Configuration

config.json
{
  "dataDir": "~/.mem-oracle",
  "embedding": {
    "provider": "local",
    "model": "all-MiniLM-L6-v2",
    "batchSize": 32
  },
  "vectorStore": {
    "provider": "local",
    "collectionPrefix": "mem-oracle"
  },
  "worker": {
    "port": 7432,
    "host": "127.0.0.1"
  },
  "crawler": {
    "concurrency": 3,
    "requestDelay": 500,
    "timeout": 30000,
    "maxPages": 1000,
    "userAgent": "mem-oracle/1.0 (docs indexer)"
  },
  "hybrid": {
    "enabled": true,
    "alpha": 0.65,
    "vectorTopK": 20,
    "keywordTopK": 20
  },
  "retrieval": {
    "maxChunksPerPage": 3,
    "maxTotalChars": 32000,
    "formatSnippets": true,
    "snippetMaxChars": 2000
  }
}

Configuration Options

Data Directory

OptionDefaultDescription
dataDir~/.mem-oracleDirectory for storing all data

The data directory contains:

Directory Structure
~/.mem-oracle/
├── cache/          # Fetched page cache
├── vectors/        # Vector embeddings
├── metadata.db     # SQLite database
├── worker.pid      # Worker process ID
└── worker.log      # Worker logs

Embedding Providers

Local (Default)

Uses TF-IDF for embeddings. No API key required.

Local Embeddings
{
  "embedding": {
    "provider": "local",
    "model": "all-MiniLM-L6-v2",
    "batchSize": 32
  }
}

OpenAI

OpenAI Embeddings
{
  "embedding": {
    "provider": "openai",
    "model": "text-embedding-3-small",
    "apiKey": "sk-..."
  }
}
ModelDimensionsCost
text-embedding-3-small1536$0.00002/1K tokens
text-embedding-3-large3072$0.00013/1K tokens
text-embedding-ada-0021536$0.0001/1K tokens

Voyage AI

Voyage AI Embeddings
{
  "embedding": {
    "provider": "voyage",
    "model": "voyage-2",
    "apiKey": "..."
  }
}
ModelDimensionsBest For
voyage-21024General purpose
voyage-code-21536Code documentation

Cohere

Cohere Embeddings
{
  "embedding": {
    "provider": "cohere",
    "model": "embed-english-v3.0",
    "apiKey": "..."
  }
}

Vector Store Settings

Vector Store
{
  "vectorStore": {
    "provider": "local",
    "collectionPrefix": "mem-oracle"
  }
}
OptionDefaultDescription
providerlocalVector store provider (local, qdrant, pinecone)
url-Remote vector store URL
apiKey-API key for remote provider
collectionPrefixmem-oracleCollection/index name prefix

Worker Settings

Worker Config
{
  "worker": {
    "port": 7432,
    "host": "127.0.0.1"
  }
}
OptionDefaultDescription
port7432HTTP port for the worker
host127.0.0.1Host to bind to

Crawler Settings

Crawler Config
{
  "crawler": {
    "concurrency": 3,
    "requestDelay": 500,
    "timeout": 30000,
    "maxPages": 1000,
    "userAgent": "mem-oracle/1.0 (docs indexer)"
  }
}
OptionDefaultDescription
concurrency3Number of concurrent requests
requestDelay500Delay between requests (ms)
timeout30000Request timeout (ms)
maxPages1000Maximum pages per docset
userAgentmem-oracle/1.0 (docs indexer)User agent string for crawler requests

Hybrid Search Settings

Configure how vector and keyword search are combined for better results.

Hybrid Search Config
{
  "hybrid": {
    "enabled": true,
    "alpha": 0.65,
    "vectorTopK": 20,
    "keywordTopK": 20,
    "minKeywordScore": 0
  }
}
OptionDefaultDescription
enabledtrueEnable hybrid search (vector + keyword)
alpha0.65Weight for vector score (0-1). Higher = more vector weight
vectorTopK20Number of vector results to fetch before merging
keywordTopK20Number of keyword results to fetch before merging
minKeywordScore0Minimum keyword score threshold

Retrieval Settings

Control how search results are formatted and returned for context injection.

Retrieval Config
{
  "retrieval": {
    "maxChunksPerPage": 3,
    "maxTotalChars": 32000,
    "formatSnippets": true,
    "snippetMaxChars": 2000
  }
}
OptionDefaultDescription
maxChunksPerPage3Max chunks from same page (diversity)
maxTotalChars32000Total character budget for all results
formatSnippetstrueInclude formatted snippets with metadata
snippetMaxChars2000Max characters per individual snippet

Diversity Filtering

The maxChunksPerPage setting prevents results from being dominated by many chunks from a single page. This ensures diverse results from multiple sources.

Character Budget

The maxTotalChars setting ensures predictable context injection size for Claude. Results are truncated intelligently at sentence or paragraph boundaries when the budget is exceeded.

Snippet Formatting

When formatSnippets is enabled, each result includes a pre-formatted snippet ready for context injection:

## Page Title
Source: https://example.com/docs/page
Section: Api > Authentication > OAuth Setup

The actual content goes here...

Environment Variables

You can also configure via environment variables:

VariableDescription
MEM_ORACLE_PORTWorker service port
MEM_ORACLE_DATA_DIRData storage directory
MEM_ORACLE_WORKER_URLOverride worker URL for plugin hooks
MEM_ORACLE_IDLE_CHECK_MSIdle shutdown check interval (ms)
MEM_ORACLE_REPO_ROOTOverride repo path for plugin scripts
MEM_ORACLE_TOP_KDefault number of results (OpenCode plugin)
MEM_ORACLE_AUTO_INDEXAuto-index detected URLs (OpenCode plugin)
OPENAI_API_KEYOpenAI API key
VOYAGE_API_KEYVoyage AI API key
COHERE_API_KEYCohere API key

Plugin Configuration

Claude Code Plugin

The Claude Code hooks read the worker URL from MEM_ORACLE_WORKER_URL (defaults to http://127.0.0.1:7432).

OpenCode Plugin Environment

VariableDefaultDescription
MEM_ORACLE_PORT7432Worker service port
MEM_ORACLE_DATA_DIR~/.mem-oracleData storage directory
MEM_ORACLE_TOP_K5Number of snippets
MEM_ORACLE_AUTO_INDEXtrueAuto-index URLs

Recommendations

For Local Development

Local Development
{
  "embedding": {
    "provider": "local"
  },
  "crawler": {
    "concurrency": 5,
    "maxPages": 500
  }
}

For Production Quality

Production
{
  "embedding": {
    "provider": "openai",
    "model": "text-embedding-3-small",
    "apiKey": "sk-..."
  },
  "crawler": {
    "concurrency": 3,
    "requestDelay": 1000,
    "maxPages": 2000
  }
}

For Code Documentation

Code Documentation
{
  "embedding": {
    "provider": "voyage",
    "model": "voyage-code-2",
    "apiKey": "..."
  }
}

On this page