OpenExp is configured via environment variables. Copy .env.example to .env and customize.
OpenExp uses Qdrant as its vector database. The setup script starts it via Docker automatically.
| Variable | Default | Description |
|---|---|---|
QDRANT_HOST |
localhost |
Qdrant server hostname |
QDRANT_PORT |
6333 |
Qdrant HTTP port |
QDRANT_API_KEY |
(none) | Optional: enables Qdrant auth (also passed to Docker) |
OPENEXP_COLLECTION |
openexp_memories |
Collection name in Qdrant |
| Variable | Default | Description |
|---|---|---|
OPENEXP_DATA_DIR |
~/.openexp/data |
Q-cache, predictions, retrieval logs |
OPENEXP_OBSERVATIONS_DIR |
~/.openexp/observations |
Where hooks write observations |
OPENEXP_SESSIONS_DIR |
~/.openexp/sessions |
Session summary markdown files |
| Variable | Default | Description |
|---|---|---|
OPENEXP_EMBEDDING_MODEL |
BAAI/bge-small-en-v1.5 |
FastEmbed model (runs locally) |
OPENEXP_EMBEDDING_DIM |
384 |
Vector dimensions |
| Variable | Default | Description |
|---|---|---|
ANTHROPIC_API_KEY |
(none) | Enables LLM-based auto-categorization |
OPENEXP_ENRICHMENT_MODEL |
claude-haiku-4-5-20251001 |
Model for enrichment |
Without ANTHROPIC_API_KEY, memories are stored with basic metadata. The system works well without enrichment — it just won't auto-categorize memory types or extract tags.
| Variable | Default | Description |
|---|---|---|
OPENEXP_EXPERIENCE |
default |
Active experience profile (default, sales, dealflow, or custom) |
OPENEXP_EXPERIENCES_DIR |
~/.openexp/experiences |
Directory for user-created experience YAML files |
See Experiences Guide for details on creating custom experiences.
| Variable | Default | Description |
|---|---|---|
OPENEXP_EXTRACT_MODEL |
claude-opus-4-6 |
LLM model for extraction (do not downgrade) |
OPENEXP_EXTRACT_MAX_TOKENS |
2048 |
Max response tokens |
OPENEXP_EXTRACT_CONTEXT_LIMIT |
30000 |
Max chars of transcript sent to LLM |
Decision extraction uses claude -p (Claude Code pipe mode) to leverage your Max subscription. No API key needed.
| Variable | Default | Description |
|---|---|---|
OPENEXP_INGEST_BATCH_SIZE |
50 |
Observations per batch during ingest |
| Variable | Default | Description |
|---|---|---|
OPENEXP_OUTCOME_RESOLVERS |
(none) | Comma-separated list of module:ClassName resolvers |
OPENEXP_CRM_DIR |
(none) | Path to CRM directory (for CRMCSVResolver) |
Example .env for CRM outcome resolution:
OPENEXP_OUTCOME_RESOLVERS=openexp.resolvers.crm_csv:CRMCSVResolver
OPENEXP_CRM_DIR=/path/to/your/crm
The CRM directory should contain relationships/deals.csv and relationships/leads.csv.
The setup script registers OpenExp in ~/.claude/settings.local.json:
{
"mcpServers": {
"openexp": {
"command": "/path/to/openexp/.venv/bin/python3",
"args": ["-m", "openexp.mcp_server"],
"cwd": "/path/to/openexp"
}
}
}{
"hooks": {
"SessionStart": [
{"type": "command", "command": "/path/to/openexp/openexp/hooks/session-start.sh"}
],
"UserPromptSubmit": [
{"type": "command", "command": "/path/to/openexp/openexp/hooks/user-prompt-recall.sh"}
],
"PostToolUse": [
{"type": "command", "command": "/path/to/openexp/openexp/hooks/post-tool-use.sh"}
],
"SessionEnd": [
{"type": "command", "command": "/path/to/openexp/openexp/hooks/session-end.sh", "timeout": 30}
]
}
}