{"id":49915707,"url":"https://github.com/two-tech-dev/memorable","last_synced_at":"2026-05-16T16:10:33.606Z","repository":{"id":351948379,"uuid":"1213116289","full_name":"two-tech-dev/memorable","owner":"two-tech-dev","description":"Long-term Memory Engine for AI Agents","archived":false,"fork":false,"pushed_at":"2026-04-17T06:26:58.000Z","size":70,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-17T08:17:43.147Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/two-tech-dev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-17T04:01:26.000Z","updated_at":"2026-04-17T06:27:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/two-tech-dev/memorable","commit_stats":null,"previous_names":["two-tech-dev/memorable"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/two-tech-dev/memorable","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/two-tech-dev%2Fmemorable","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/two-tech-dev%2Fmemorable/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/two-tech-dev%2Fmemorable/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/two-tech-dev%2Fmemorable/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/two-tech-dev","download_url":"https://codeload.github.com/two-tech-dev/memorable/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/two-tech-dev%2Fmemorable/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33109465,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T04:41:52.686Z","status":"ssl_error","status_checked_at":"2026-05-16T04:41:52.009Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-16T16:10:30.734Z","updated_at":"2026-05-16T16:10:33.592Z","avatar_url":"https://github.com/two-tech-dev.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/logo.svg\" alt=\"Memorable\" width=\"120\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eMemorable\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eLong-term memory engine for AI agents.\u003c/strong\u003e\u003cbr\u003e\n  Give your coding assistant a brain that persists across sessions.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#quick-start\"\u003eQuick Start\u003c/a\u003e •\n  \u003ca href=\"#auto-install\"\u003eAuto Install\u003c/a\u003e •\n  \u003ca href=\"#architecture\"\u003eArchitecture\u003c/a\u003e •\n  \u003ca href=\"#mcp-tools\"\u003eMCP Tools\u003c/a\u003e •\n  \u003ca href=\"#configuration\"\u003eConfiguration\u003c/a\u003e •\n  \u003ca href=\"CONTRIBUTING.md\"\u003eContributing\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/two-tech-dev/memorable/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/two-tech-dev/memorable/actions/workflows/ci.yml/badge.svg\" alt=\"CI\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://goreportcard.com/report/github.com/two-tech-dev/memorable\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/two-tech-dev/memorable\" alt=\"Go Report Card\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://pkg.go.dev/github.com/two-tech-dev/memorable\"\u003e\u003cimg src=\"https://pkg.go.dev/badge/github.com/two-tech-dev/memorable.svg\" alt=\"Go Reference\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"License: MIT\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/two-tech-dev/memorable/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/two-tech-dev/memorable?include_prereleases\" alt=\"Release\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/go-1.21+-00ADD8?logo=go\u0026logoColor=white\" alt=\"Go 1.21+\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/MCP-compatible-8A2BE2?logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSIyIi8+PC9zdmc+\" alt=\"MCP Compatible\"\u003e\n  \u003ca href=\"https://github.com/two-tech-dev/memorable/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/two-tech-dev/memorable?style=social\" alt=\"Stars\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## What is Memorable?\n\nMemorable is an [MCP](https://modelcontextprotocol.io/) server that gives AI coding agents—Cursor, Claude Code, GitHub Copilot, Windsurf—persistent long-term memory backed by semantic vector search.\n\nWithout Memorable, every conversation starts from zero. With it, your agent recalls past decisions, learned patterns, corrections, and project context across sessions.\n\n### Why another memory tool?\n\n| Feature                     | Memorable                                                  | Plain file notes  | Other memory servers  |\n| --------------------------- | ---------------------------------------------------------- | ----------------- | --------------------- |\n| Semantic search             | **Yes** (pgvector cosine similarity)                       | No (keyword grep) | Varies                |\n| Dedup                       | **SHA-256 content hashing**                                | Manual            | Rare                  |\n| Multi-dimensional scoping   | **user × agent × app × run**                               | None              | Usually single-tenant |\n| Five memory types           | **fact, conversation, decision, code_pattern, correction** | Unstructured      | Usually one           |\n| MCP-native                  | **12 typed tools, auto-schema**                            | N/A               | Some                  |\n| Pluggable embeddings        | **OpenAI, Gemini, Ollama, OpenRouter, custom**             | N/A               | Rarely                |\n| Knowledge graph             | **Entity-relation extraction + traversal**                 | N/A               | No                    |\n| Heartbeat / self-reflection | **Periodic consolidation + contradiction detection**       | N/A               | No                    |\n| Hybrid retrieval            | **Vector + recency + frequency scoring**                   | N/A               | Vector only           |\n\n---\n\n## Quick Start\n\n### Prerequisites\n\n- **Go 1.21+**\n- **PostgreSQL 15+** with the [`pgvector`](https://github.com/pgvector/pgvector) extension\n- **Embedding API key** — one of: [OpenAI](https://platform.openai.com/), [Google Gemini](https://ai.google.dev/), [OpenRouter](https://openrouter.ai/), or [Ollama](https://ollama.com/) (local, no key needed). Any OpenAI-compatible API also works via the `custom` provider.\n\n### 1. Install\n\n**From source:**\n\n```bash\ngit clone https://github.com/two-tech-dev/memorable.git\ncd memorable\nmake build\n```\n\nThe binary is written to `bin/memorable`.\n\n**With Go:**\n\n```bash\ngo install github.com/two-tech-dev/memorable/cmd/memorable@latest\n```\n\n### 2. Start PostgreSQL with pgvector\n\nUsing Docker:\n\n```bash\ndocker run -d --name memorable-pg \\\n  -e POSTGRES_DB=memorable \\\n  -e POSTGRES_HOST_AUTH_METHOD=trust \\\n  -p 5432:5432 \\\n  pgvector/pgvector:pg16\n```\n\nOr install pgvector on an existing PostgreSQL instance.\n\n### 3. Configure\n\nCopy the example config and set your API key:\n\n```bash\ncp config.example.yaml memorable.yaml\n```\n\nEdit `memorable.yaml` or use environment variables:\n\n```bash\n# Pick your embedding provider:\nexport OPENAI_API_KEY=sk-...       # OpenAI\nexport GEMINI_API_KEY=AI...         # Google Gemini\n# Or use Ollama locally (no key needed)\n\nexport MEMORABLE_DSN=postgres://localhost:5432/memorable?sslmode=disable\n```\n\n### 4. Run\n\n```bash\nbin/memorable\n# or\nmake run\n```\n\nThe server starts on stdio and auto-migrates the database schema on first connect.\n\n---\n\n## Auto Install\n\nMemorable includes install scripts that automatically configure MCP for your AI agents.\n\n### One-liner (all agents)\n\n**macOS / Linux:**\n\n```bash\n./scripts/install.sh\n```\n\n**Windows (PowerShell):**\n\n```powershell\n.\\scripts\\install.ps1\n```\n\nThis detects and configures **Cursor**, **Claude Desktop / Claude Code**, **VS Code (GitHub Copilot)**, and **Windsurf** in one command.\n\n### Target a specific agent\n\n```bash\n# Linux/macOS\n./scripts/install.sh --agent cursor\n./scripts/install.sh --agent claude --config ~/memorable.yaml\n\n# Windows\n.\\scripts\\install.ps1 -Agent cursor\n.\\scripts\\install.ps1 -Agent claude -Config \"C:\\Users\\me\\memorable.yaml\"\n```\n\n**Supported agents:** `cursor`, `claude`, `copilot`, `windsurf`, `all`\n\n### What the scripts do\n\n| Agent                 | Config file                                                                                                                         | Servers key  |\n| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------ |\n| **Cursor**            | `~/.cursor/mcp.json`                                                                                                                | `mcpServers` |\n| **Claude**            | `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) / `%APPDATA%\\Claude\\claude_desktop_config.json` (Windows) | `mcpServers` |\n| **VS Code (Copilot)** | `.vscode/mcp.json` (workspace)                                                                                                      | `servers`    |\n| **Windsurf**          | `~/.codeium/windsurf/mcp_config.json`                                                                                               | `mcpServers` |\n\nThe scripts safely merge into existing config files — your other MCP servers are preserved.\n\n---\n\n## Manual Configuration\n\n\u003cdetails\u003e\n\u003csummary\u003eClick to expand manual agent configuration\u003c/summary\u003e\n\n### Cursor\n\nAdd to `.cursor/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"memorable\": {\n      \"command\": \"memorable\",\n      \"args\": [\"-config\", \"/path/to/memorable.yaml\"]\n    }\n  }\n}\n```\n\n### Claude Code\n\nAdd to your MCP config:\n\n```json\n{\n  \"mcpServers\": {\n    \"memorable\": {\n      \"command\": \"memorable\",\n      \"args\": []\n    }\n  }\n}\n```\n\n### VS Code (GitHub Copilot)\n\nAdd to `.vscode/mcp.json`:\n\n```json\n{\n  \"servers\": {\n    \"memorable\": {\n      \"type\": \"stdio\",\n      \"command\": \"memorable\",\n      \"args\": [\"-config\", \"memorable.yaml\"]\n    }\n  }\n}\n```\n\n### Windsurf\n\nAdd to `~/.codeium/windsurf/mcp_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"memorable\": {\n      \"command\": \"memorable\"\n    }\n  }\n}\n```\n\n\u003c/details\u003e\n\n---\n\n## Architecture\n\n```\n┌───────────────────────────────────────────────────────────────┐\n│               AI Agent (Cursor, Claude, Copilot, Windsurf)    │\n│                          ↕ MCP (stdio)                        │\n├───────────────────────────────────────────────────────────────┤\n│                        MCP Server (12 tools)                  │\n│  ┌──────┐ ┌────────┐ ┌──────────┐ ┌───────┐ ┌────────────┐  │\n│  │ CRUD │ │ search │ │heartbeat │ │ graph │ │   stats    │  │\n│  └──┬───┘ └───┬────┘ └────┬─────┘ └───┬───┘ └─────┬──────┘  │\n│     └─────────┴────────────┴───────────┴───────────┘         │\n│                      Memory Manager                           │\n│            (dedup · embed · CRUD · scope)                     │\n├────────┬──────────────────┬──────────────────┬───────────────┤\n│  L1    │  L2 Vector DB    │  Knowledge       │  L3 Soul/     │\n│  Cache │  (pgvector)      │  Graph           │  Profile      │\n│  (LRU) │                  │  (entity-rel)    │  (traits)     │\n├────────┴──────────────────┴──────────────────┴───────────────┤\n│  Embedding Provider                   Hybrid Retrieval        │\n│  (OpenAI / Gemini / Ollama / Custom)  (vector+recency+freq)  │\n└───────────────────────────────────────────────────────────────┘\n                           ↕\n                    ┌──────────────┐\n                    │  PostgreSQL  │\n                    │  + pgvector  │\n                    └──────────────┘\n```\n\n### Project Layout\n\n```\nmemorable/\n├── cmd/memorable/       # Application entry point\n│   └── main.go\n├── internal/\n│   ├── cache/           # L1 LRU cache (generic, thread-safe)\n│   ├── config/          # YAML config loader + env overrides\n│   ├── embedding/       # Embedding providers (OpenAI, Gemini, Ollama, Custom)\n│   ├── graph/           # Knowledge graph (entities, relations, triple extraction)\n│   ├── heartbeat/       # Self-reflection \u0026 memory consolidation\n│   ├── mcp/             # MCP server, tool registration, typed handlers\n│   ├── memory/          # Core types, Manager (CRUD + dedup), VectorStore interface\n│   ├── profile/         # L3 Soul/Profile (user trait accumulation)\n│   ├── retrieval/       # Hybrid scoring (vector + recency + frequency)\n│   └── store/           # Storage implementations (pgvector)\n├── scripts/             # Auto-install scripts (bash + PowerShell)\n├── docs/                # Documentation assets\n├── config.example.yaml  # Example configuration\n├── Makefile             # Build, test, lint targets\n└── .github/workflows/   # CI pipeline\n```\n\n### Memory Types\n\n| Type           | Description                                 | Example                                                              |\n| -------------- | ------------------------------------------- | -------------------------------------------------------------------- |\n| `fact`         | Factual knowledge the agent should remember | \"This project uses Go 1.21 with modules.\"                            |\n| `conversation` | Key points from conversations               | \"User prefers tabs over spaces.\"                                     |\n| `decision`     | Architectural or design decisions           | \"We chose pgvector over Pinecone for self-hosting.\"                  |\n| `code_pattern` | Reusable patterns and idioms                | \"Error wrapping: always use fmt.Errorf with %w.\"                     |\n| `correction`   | Mistakes and their fixes                    | \"Don't import from internal/store directly; use memory.VectorStore.\" |\n\n### Scoping\n\nEvery memory is scoped along four dimensions, all optional:\n\n| Dimension  | Purpose             | Example                    |\n| ---------- | ------------------- | -------------------------- |\n| `user_id`  | Per-user isolation  | `\"alice\"`                  |\n| `agent_id` | Per-agent context   | `\"cursor\"`, `\"claude\"`     |\n| `app_id`   | Per-project context | `\"memorable\"`, `\"my-saas\"` |\n| `run_id`   | Per-session context | `\"session-2024-01-15\"`     |\n\nMemories with no scope are global. Scopes are combined as filters during search and retrieval.\n\n---\n\n## MCP Tools\n\nMemorable exposes **12 tools** through the MCP protocol:\n\n### Memory CRUD\n\n#### `memorable_add`\n\nStore a new memory. Automatically deduplicates by content hash within the same scope.\n\n```json\n{\n  \"content\": \"The project uses pgvector for vector similarity search\",\n  \"type\": \"fact\",\n  \"app_id\": \"my-project\"\n}\n```\n\n#### `memorable_search`\n\nSearch memories by semantic similarity. The query is embedded and compared against stored vectors using cosine distance.\n\n```json\n{\n  \"query\": \"which database do we use?\",\n  \"limit\": 5,\n  \"app_id\": \"my-project\"\n}\n```\n\n#### `memorable_get`\n\nRetrieve a specific memory by UUID.\n\n```json\n{ \"id\": \"550e8400-e29b-41d4-a716-446655440000\" }\n```\n\n#### `memorable_update`\n\nUpdate content (triggers re-embedding) and/or merge metadata.\n\n```json\n{\n  \"id\": \"550e8400-e29b-41d4-a716-446655440000\",\n  \"content\": \"Updated: we migrated from pgvector to Qdrant\",\n  \"metadata\": { \"reviewed\": true }\n}\n```\n\n#### `memorable_delete`\n\nDelete a memory by UUID.\n\n```json\n{ \"id\": \"550e8400-e29b-41d4-a716-446655440000\" }\n```\n\n#### `memorable_list`\n\nList memories with filters and pagination.\n\n```json\n{\n  \"type\": \"decision\",\n  \"app_id\": \"my-project\",\n  \"limit\": 20,\n  \"offset\": 0\n}\n```\n\n#### `memorable_stats`\n\nGet aggregate statistics: total count, breakdown by type, time range.\n\n```json\n{ \"user_id\": \"alice\" }\n```\n\n### Heartbeat / Self-Reflection\n\n#### `memorable_heartbeat`\n\nRun a consolidation cycle. Analyzes stored memories, finds clusters of similar content, and generates insights (summaries, contradictions, patterns).\n\n```json\n{ \"user_id\": \"alice\", \"app_id\": \"my-project\" }\n```\n\nReturns:\n\n- **Summaries** — consolidated clusters of related memories\n- **Contradictions** — detects when corrections supersede older facts\n- **Patterns** — recurring themes across memories\n\n### Knowledge Graph\n\n#### `memorable_graph_add`\n\nExtract entities and relations from text and add them to the knowledge graph.\n\n```json\n{\n  \"content\": \"The project uses PostgreSQL. React depends on Node.\",\n  \"memory_id\": \"550e8400-...\"\n}\n```\n\n#### `memorable_graph_search`\n\nSearch for entities in the knowledge graph by name.\n\n```json\n{ \"query\": \"postgres\", \"limit\": 5 }\n```\n\n#### `memorable_graph_neighbors`\n\nGet entities and relations connected to a given entity, with configurable traversal depth.\n\n```json\n{ \"entity_id\": \"ent_abc123\", \"depth\": 2 }\n```\n\n#### `memorable_graph_stats`\n\nGet knowledge graph statistics: entity and relation counts.\n\n```json\n{}\n```\n\n---\n\n## Configuration\n\nMemorable looks for configuration in this order:\n\n1. `--config` flag (explicit path)\n2. `./memorable.yaml` (current directory)\n3. `~/.memorable/config.yaml` (home directory)\n4. Built-in defaults\n\n### Full Reference\n\n```yaml\n# Server transport\nserver:\n  transport: stdio # stdio | http (future)\n\n# Storage backend\nstorage:\n  backend: pgvector # pgvector | sqlite (future)\n  pgvector:\n    dsn: \"postgres://localhost:5432/memorable?sslmode=disable\"\n    table_name: memories\n    vector_dimensions: 1536 # Must match embedding model\n\n# Embedding provider (openai | gemini | ollama | custom)\nembedding:\n  provider: openai\n\n  openai:\n    api_key: ${OPENAI_API_KEY}\n    model: text-embedding-3-small\n    # base_url: https://custom-api.example.com/v1  # For OpenAI-compatible APIs\n\n  gemini:\n    api_key: ${GEMINI_API_KEY}\n    model: text-embedding-004\n\n  ollama:\n    base_url: http://localhost:11434\n    model: nomic-embed-text\n    dims: 768\n\n  # Generic OpenAI-compatible provider — works with any /v1/embeddings API\n  custom:\n    base_url: https://openrouter.ai/api/v1 # Required\n    api_key: ${CUSTOM_API_KEY}\n    model: openai/text-embedding-3-small # Required\n    dims: 1536 # Required\n    headers: # Optional\n      X-Title: Memorable\n```\n\n### Environment Variables\n\n| Variable         | Description                   | Overrides                  |\n| ---------------- | ----------------------------- | -------------------------- |\n| `OPENAI_API_KEY` | OpenAI API key for embeddings | `embedding.openai.api_key` |\n| `GEMINI_API_KEY` | Google Gemini API key         | `embedding.gemini.api_key` |\n| `CUSTOM_API_KEY` | API key for custom provider   | `embedding.custom.api_key` |\n| `MEMORABLE_DSN`  | PostgreSQL connection string  | `storage.pgvector.dsn`     |\n\n### Embedding Providers\n\n#### OpenAI\n\n| Model                    | Dimensions | Notes                                 |\n| ------------------------ | ---------- | ------------------------------------- |\n| `text-embedding-3-small` | 1536       | Default. Best cost/performance ratio. |\n| `text-embedding-3-large` | 3072       | Higher accuracy, 2× storage.          |\n| `text-embedding-ada-002` | 1536       | Legacy.                               |\n\nSet `base_url` to use OpenAI-compatible APIs like **Voyage AI**, **Together AI**, or **Azure OpenAI**.\n\n#### Google Gemini\n\n| Model                | Dimensions | Notes        |\n| -------------------- | ---------- | ------------ |\n| `text-embedding-004` | 768        | Recommended. |\n| `embedding-001`      | 768        | Legacy.      |\n\n#### Ollama (Local)\n\n| Model               | Dimensions | Notes                       |\n| ------------------- | ---------- | --------------------------- |\n| `nomic-embed-text`  | 768        | Good general-purpose model. |\n| `mxbai-embed-large` | 1024       | Higher accuracy.            |\n| `all-minilm`        | 384        | Smallest, fastest.          |\n\nRun `ollama pull nomic-embed-text` to download the model, then set `provider: ollama` in config. No API key required.\n\n#### Custom Provider (OpenRouter, Together, Voyage, Mistral, Cohere, etc.)\n\nSet `provider: custom` and point `base_url` at any API that implements the OpenAI `/v1/embeddings` endpoint.\n\n**OpenRouter:**\n\n```yaml\nembedding:\n  provider: custom\n  custom:\n    base_url: https://openrouter.ai/api/v1\n    api_key: ${CUSTOM_API_KEY}\n    model: openai/text-embedding-3-small\n    dims: 1536\n    headers:\n      X-Title: Memorable\n      HTTP-Referer: https://github.com/two-tech-dev/memorable\n```\n\n**Together AI:**\n\n```yaml\nembedding:\n  provider: custom\n  custom:\n    base_url: https://api.together.xyz/v1\n    api_key: ${CUSTOM_API_KEY}\n    model: togethercomputer/m2-bert-80M-8k-retrieval\n    dims: 768\n```\n\n**Voyage AI:**\n\n```yaml\nembedding:\n  provider: custom\n  custom:\n    base_url: https://api.voyageai.com/v1\n    api_key: ${CUSTOM_API_KEY}\n    model: voyage-3\n    dims: 1024\n```\n\n**Mistral:**\n\n```yaml\nembedding:\n  provider: custom\n  custom:\n    base_url: https://api.mistral.ai/v1\n    api_key: ${CUSTOM_API_KEY}\n    model: mistral-embed\n    dims: 1024\n```\n\n**Azure OpenAI:**\n\n```yaml\nembedding:\n  provider: custom\n  custom:\n    base_url: https://YOUR-RESOURCE.openai.azure.com/openai/deployments/YOUR-DEPLOYMENT\n    api_key: ${CUSTOM_API_KEY}\n    model: text-embedding-3-small\n    dims: 1536\n    headers:\n      api-key: ${CUSTOM_API_KEY}\n```\n\n\u003e **Note:** Set `dims` to match the actual output dimensions of your chosen model, and ensure `storage.pgvector.vector_dimensions` matches.\n\n---\n\n## Development\n\n```bash\n# Build\nmake build\n\n# Run tests\nmake test\n\n# Run linter\nmake lint\n\n# Clean build artifacts\nmake clean\n\n```\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for the full development guide.\n\n---\n\n## License\n\n[MIT](LICENSE) © 2026 [Two Tech Dev](https://github.com/two-tech-dev)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftwo-tech-dev%2Fmemorable","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftwo-tech-dev%2Fmemorable","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftwo-tech-dev%2Fmemorable/lists"}