Installation
Memorose runs as a Rust API server plus a separate dashboard UI.
Prerequisites
- Rust toolchain
- Node.js and
pnpm for the dashboard
- An LLM provider key for embeddings and consolidation
- Optional:
jq for command-line examples
Clone the repository
git clone https://github.com/ai-akashic/Memorose.git
cd Memorose
Environment setup
Copy the example environment file:
At minimum, set a provider key plus model names:
GOOGLE_API_KEY=your_google_api_key_here
LLM_MODEL=gemini-2.0-flash
EMBEDDING_MODEL=text-embedding-004
If you want to force the provider through env overrides, prefer:
MEMOROSE__LLM__PROVIDER=Gemini
Or:
MEMOROSE__LLM__PROVIDER=OpenAI
OPENAI_API_KEY=your_openai_api_key_here
To avoid the default dashboard password warning, also set:
DASHBOARD_ADMIN_PASSWORD=change-me
Configuration
Create config.toml yourself using the current schema from crates/memorose-common/src/config.rs, or start from config.example.toml / config.toml.example and keep config.rs as the final source of truth.
A minimal starting point is:
[llm]
provider = "Gemini"
model = "gemini-2.0-flash"
embedding_model = "text-embedding-004"
[storage]
root_dir = "./data/node-1"
[raft]
node_id = 1
raft_addr = "127.0.0.1:5001"
heartbeat_interval_ms = 500
election_timeout_min_ms = 1500
election_timeout_max_ms = 3000
snapshot_logs = 1000000
auto_initialize = true
[worker]
llm_concurrency = 5
decay_interval_secs = 60
prune_threshold = 0.1
consolidation_interval_ms = 1000
community_interval_ms = 1000
insight_interval_ms = 30000
enable_auto_planner = true
enable_task_reflection = true
auto_link_similarity_threshold = 0.6
tick_interval_ms = 100
[reranker]
type = "weighted"
To enable internal model-based arbitration, add a reranker block:
[reranker]
type = "arbitrator"
model = "gemini-3.1-flash-lite-preview"
max_candidates = 32
fallback_to_weighted = true
Start the stack
Recommended local startup:
./scripts/start_cluster.sh start --clean --build
This starts backend nodes on 3000, 3001, and 3002 in local cluster mode, plus the dashboard UI on 3100.
If you want a single local node:
./scripts/start_cluster.sh start --mode standalone
Manual server startup
If you only want the API server:
cargo run --release -p memorose-server
Docker reranker configuration
The Docker image starts the API server on 3000 and the dashboard on 3100. Reranker mode is still configured by the same MEMOROSE__* environment variables:
docker run -d \
--name memorose \
-p 3000:3000 \
-p 3100:3100 \
-v memorose_data:/app/data \
-e GOOGLE_API_KEY="your_google_api_key_here" \
-e MEMOROSE__LLM__MODEL="gemini-3.1-flash-lite-preview" \
-e MEMOROSE__LLM__EMBEDDING_MODEL="gemini-embedding-2-preview" \
-e MEMOROSE__RERANKER__TYPE="arbitrator" \
-e MEMOROSE__RERANKER__MODEL="gemini-3.1-flash-lite-preview" \
-e MEMOROSE__RERANKER__MAX_CANDIDATES="32" \
-e MEMOROSE__RERANKER__FALLBACK_TO_WEIGHTED="true" \
dylan2024/memorose:latest
Verify the installation
Check the root endpoint:
curl http://127.0.0.1:3000/
Expected response:
Dashboard
- Dashboard UI:
http://127.0.0.1:3100/dashboard
- API redirect:
http://127.0.0.1:3000/dashboard
- Default login:
admin / admin
On first login, the response may include must_change_password: true until you set a new password.
If you deploy the dashboard using your own docker-compose.yml or docker run, you must set DASHBOARD_API_ORIGIN on the dashboard container to point at the backend API, for example DASHBOARD_API_ORIGIN=http://memorose-node-0:3000. Otherwise login and proxied dashboard requests will fail with connect ECONNREFUSED 127.0.0.1:3000.