{
  "markdown": "# Lore — Universal AI Memory Layer\n\n[![PyPI](https://img.shields.io/pypi/v/lore-sdk)](https://pypi.org/project/lore-sdk/)\n[![npm](https://img.shields.io/npm/v/lore-sdk)](https://www.npmjs.com/package/lore-sdk)\n[![Container](https://img.shields.io/badge/ghcr.io-agentkitai%2Flore-2496ED?logo=docker&logoColor=white)](https://github.com/agentkitai/lore/pkgs/container/lore)\n[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/github/license/agentkitai/lore)](LICENSE)\n[![MCP Compatible](https://img.shields.io/badge/MCP-compatible-green.svg)](https://modelcontextprotocol.io)\n[![Tests](https://img.shields.io/github/actions/workflow/status/agentkitai/lore/ci.yml?label=tests)](https://github.com/agentkitai/lore/actions)\n\n<!-- mcp-name: io.github.agentkitai/lore -->\n\n**Your AI agents remember everything. Automatically.**\n\nLore is a cross-agent memory system that stores, connects, and retrieves knowledge across any AI agent — without code changes. Install a hook, and relevant memories appear in every prompt. No agent cooperation needed.\n\n```\nUser: \"What API rate limits should I use?\"\n\n── Lore hook fires (20ms) ──────────────────────────────\n🧠 Relevant memories from Lore:\n- [0.82] Stripe API returns 429 after 100 req/min — use exponential backoff\n- [0.71] Our internal API rate limit is 500 req/min per API key\n────────────────────────────────────────────────────────\n\nAgent sees memories + prompt → responds with full context\n```\n\n## Features\n\n### Universal Memory\n`remember` · `recall` · `forget` · `list_memories` · `stats`\n\nStore and retrieve memories across any AI agent via MCP tools, REST API, or Python/TypeScript SDK. Semantic search with tier-based TTL, temporal decay, and automatic PII redaction.\n\n### Knowledge Graph\n`graph_query` · `entity_map` · `related` · `extract_facts` · `list_facts` · `conflicts`\n\nEntities and relationships auto-extracted from memories. Hop-by-hop graph traversal surfaces connected knowledge that pure vector search misses. Atomic fact extraction with automatic conflict detection.\n\n### Bi-Temporal Facts & Supersession\n`supersede` · `list_at_time` · `facts_at_time` · `timeline` · `provenance` · `supersession_chain` · `consolidate_memories`\n\nHistory without deletion. Memories and facts are corrected by *superseding* them, never deleting — every change appends to an auditable trail. Lore tracks two independent time axes (bi-temporal): **valid-time** (when a fact was true in the world) and **system-time** (when Lore learned it), so you can ask \"what was canonical — or true about X — *as of* date Y?\". `list_at_time` / `facts_at_time` answer as-of queries, `timeline` walks chronologically adjacent events, and `provenance` / `supersession_chain` expose the full correction lineage for a memory or fact.\n\n### Graph Visualization\n**Web UI at `/ui/`**\n\nInteractive D3 force-directed graph of your knowledge base. Entity detail panels, topic clusters, search, and filtering. Runs in the browser — no install required.\n\n### Session Continuity\n**Auto-snapshot + auto-inject — zero agent cooperation**\n\nThe Session Accumulator automatically captures conversation context and injects relevant session history into every prompt. Deterministic (no LLM needed). Works via hooks — the agent never knows Lore exists.\n\n### Recent Activity\n`recent_activity`\n\nSession-aware summary of what happened recently across all projects. Gives agents continuity between conversations without manual context-passing.\n\n### Topic Notes\n`topics` · `topic_detail`\n\nAuto-generated concept hubs that cluster related memories, entities, and facts around recurring themes. See everything Lore knows about a topic in one view.\n\n### Export & Snapshot\n`export` · `snapshot` · `snapshot_list` · `save_snapshot`\n\nFull data export in JSON and Markdown formats. Obsidian-compatible output for browsing your knowledge graph in a PKM tool. Snapshots for backup and migration.\n\n### Approval UX with Risk Scoring\n`review_digest` · `review_connection` · `lore review list --sort risk`\n\nReview discovered knowledge graph connections with computed risk scores. Batch approve/reject with notes, full audit trail of decisions. Sort by risk, confidence, or age.\n\n### Guided Bootstrap\n`lore bootstrap`\n\nSingle command that validates Python version, Postgres, pgvector, Docker, runs migrations, and verifies server health. Use `--fix` to auto-remediate missing dependencies.\n\n### Multi-Agent Setup\n`lore setup claude-code` · `lore setup openclaw` · `lore setup cursor` · `lore setup codex`\n\nOne-command hook installation for all major AI coding agents. Auto-retrieval injected into every prompt — no code changes needed. Includes `--validate`, `--test-connection`, and `--dry-run` flags.\n\n### SLO Dashboard + Alerting\n`lore slo create` · `lore slo status` · `GET /v1/slo/status`\n\nDefine SLO targets for retrieval latency (p50/p95/p99) and hit rate. Background checker evaluates every 60s and fires webhook or email alerts on breach. Time-series API for charting.\n\n### Adaptive Retrieval Profiles\n`lore profiles list` · `GET /v1/profiles` · `?profile=coding`\n\nNamed retrieval profiles stored in Postgres. Presets for coding (recency-biased), incident response (graph-heavy), and research (long-term). Select per-request or set as API key default.\n\n### Policy-Based Retention\n`lore policy create` · `lore restore-drill` · `GET /v1/policies/compliance`\n\nDeclarative lifecycle policies with per-tier retention windows, cron-based snapshot schedules, and restore drills with timing metrics. Compliance dashboard across all policies.\n\n### Multi-Tenant Workspaces\n`lore workspace create` · `lore workspace switch` · `lore audit`\n\nWorkspace isolation within orgs. Scoped API keys, member management with RBAC roles, and a full audit log of every action (memory.create, key.revoke, etc.).\n\n### Plugin SDK\n`lore plugin create` · `lore plugin list` · `lore plugin reload`\n\nExtend Lore with plugins discovered via Python entry_points. Five lifecycle hooks (`on_remember`, `on_recall`, `on_enrich`, `on_extract`, `on_score`), hot-reload, scaffold CLI, and test harness.\n\n### Proactive Recommendations\n`suggest` · `lore suggest --context \"...\"` · `GET /v1/recommendations`\n\nSurface relevant memories before explicit queries. Multi-signal scoring (context similarity, entity overlap, temporal patterns, access patterns) with human-readable explanations and a feedback loop.\n\n### Retrieval Analytics\n`GET /v1/analytics/retrieval` · Prometheus metrics\n\nTrack hit rate, score distribution, memory utilization, and latency. Know whether memories are actually helping your agents.\n\n## Quick Start\n\n### Docker Compose (recommended)\n\n```bash\ngit clone https://github.com/agentkitai/lore.git\ncd lore\ndocker compose up -d\n```\n\nStarts Postgres with pgvector and the Lore server on `http://localhost:8765`.\n\n### pip\n\n```bash\npip install \"lore-sdk[server,solo]\"\nlore serve  # starts on port 8765\n```\n\n### Verify it works\n\n```bash\ncurl http://localhost:8765/v1/memories\n```\n\n## Add Lore as an MCP server\n\nOne line — no install — drops Lore into any MCP client (Claude Code, Cursor, VS Code, Codex, Claude Desktop):\n\n```jsonc\n// Claude Code: .mcp.json  ·  Claude Desktop: claude_desktop_config.json\n{\n  \"mcpServers\": {\n    \"lore\": { \"command\": \"uvx\", \"args\": [\"--from\", \"lore-sdk[mcp]\", \"lore-memory\"] }\n  }\n}\n```\n\nAlready installed (`pip install lore-sdk[mcp]`)? Use `\"command\": \"lore-memory\"` (or `lore mcp`). Per-client guides are in [Multi-Agent Setup](#multi-agent-setup) below; `lore integrate --platform <client>` writes the config for you.\n\n## Multi-Agent Setup\n\n### Claude Code\n\n**Option A: Auto-retrieval hook (recommended)**\n\n```bash\nlore setup claude-code\n```\n\nThis installs a `UserPromptSubmit` hook that auto-injects relevant memories into every prompt.\n\n**Option B: MCP tools**\n\nAdd to `~/.claude/settings.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"lore\": {\n      \"command\": \"lore\",\n      \"args\": [\"mcp\"],\n      \"env\": {\n        \"LORE_API_URL\": \"http://localhost:8765\",\n        \"LORE_API_KEY\": \"your-api-key\"\n      }\n    }\n  }\n}\n```\n\n### OpenClaw\n\n```bash\nlore setup openclaw\n```\n\nInstalls a `message:preprocessed` hook for auto-retrieval. Memories appear in context before every agent response.\n\n### Cursor\n\n```bash\nlore setup cursor\n```\n\nInstalls a `beforeSubmitPrompt` hook. Also add MCP config to `.cursorrules`:\n\n```json\n{\n  \"mcpServers\": {\n    \"lore\": {\n      \"command\": \"lore\",\n      \"args\": [\"mcp\"],\n      \"env\": {\n        \"LORE_API_URL\": \"http://localhost:8765\",\n        \"LORE_API_KEY\": \"your-api-key\"\n      }\n    }\n  }\n}\n```\n\n### Codex CLI\n\n```bash\nlore setup codex\n```\n\nInstalls a `beforePlan` hook. Add MCP config:\n\n```json\n{\n  \"mcpServers\": {\n    \"lore\": {\n      \"command\": \"lore\",\n      \"args\": [\"mcp\"],\n      \"env\": {\n        \"LORE_API_URL\": \"http://localhost:8765\",\n        \"LORE_API_KEY\": \"your-api-key\"\n      }\n    }\n  }\n}\n```\n\n### Any HTTP client\n\nAuto-retrieval works with any system that can make an HTTP call before sending a prompt:\n\n```bash\ncurl -s \"http://localhost:8765/v1/retrieve?query=your+prompt&limit=5&min_score=0.3&format=markdown\" \\\n  -H \"Authorization: Bearer $LORE_API_KEY\"\n```\n\n## MCP Tools Reference\n\n| Tool | Description |\n|------|-------------|\n| `remember` | Store a memory with type, tier, tags, metadata |\n| `recall` | Semantic search with temporal/graph-enhanced retrieval |\n| `forget` | Delete a memory by ID |\n| `list_memories` | List memories with filtering |\n| `stats` | Memory statistics (total, by type/tier) |\n| `upvote_memory` | Boost memory ranking |\n| `downvote_memory` | Lower memory ranking |\n| `graph_query` | Hop-by-hop knowledge graph traversal |\n| `entity_map` | List entities (optional D3 format) |\n| `related` | Find related memories/entities |\n| `extract_facts` | Extract (subject, predicate, object) triples |\n| `list_facts` | List active facts |\n| `conflicts` | List detected fact conflicts |\n| `classify` | Intent, domain, emotion classification |\n| `enrich` | LLM-powered metadata extraction |\n| `consolidate` | Merge duplicate/related memories |\n| `ingest` | Accept content from external sources |\n| `github_sync` | Sync GitHub repo data |\n| `check_freshness` | Verify memory freshness against git |\n| `as_prompt` | Export memories formatted for LLM injection |\n| `add_conversation` | Extract memories from conversation messages |\n| `recent_activity` | Recent memory activity summary |\n| `topics` | List auto-detected recurring topics |\n| `topic_detail` | Deep dive on a topic (memories, entities, timeline) |\n| `export` | Export all data to JSON |\n| `snapshot` | Create data backup |\n| `snapshot_list` | List available snapshots |\n| `save_snapshot` | Save session snapshot |\n| `review_digest` | Get pending connections for review |\n| `review_connection` | Approve/reject a pending connection |\n| `on_this_day` | Memories from same date across years |\n| `suggest` | Proactive memory recommendations based on session context |\n| `remember_observation` | Record a structured observation from a session |\n| `search` | Progressive-disclosure compact index (id, title, score) |\n| `get_memories` | Fetch full payloads for one or more memory IDs |\n| `timeline` | Chronologically adjacent events around an anchor memory |\n| `promote_memory` | Share a private memory with the team (private→shared) |\n| `demote_memory` | Unshare a memory, making it private again |\n| `supersede` | Mark a memory as superseded by a newer one |\n| `list_at_time` | List memories that were canonical at a given time |\n| `consolidate_memories` | Create a merged memory and supersede all sources |\n| `provenance` | Full lineage for a memory (sources + supersession chain) |\n| `supersession_chain` | Supersession audit chain for a memory |\n| `facts_at_time` | Facts about an entity that were valid at a given time |\n| `supersede_fact` | Supersede a fact with a newer one (never deletes) |\n| `fact_supersession_chain` | Correction trail for a fact |\n\n## CLI Reference\n\n```bash\n# Memory operations\nlore remember \"API rate limit is 100 req/min\" --tags api,limits\nlore recall \"rate limits\" --limit 5\nlore forget <memory-id>\nlore memories --tier long_term\nlore stats\n\n# Knowledge graph\nlore graph \"authentication\" --depth 2\nlore entities --limit 50\nlore facts \"extract facts from this text\"\nlore conflicts\n\n# Session & context\nlore recent --hours 24\nlore on-this-day\n\n# Export & backup\nlore export --format json > backup.json\nlore import backup.json\nlore snapshot-save --title \"before refactor\"\n\n# Server & setup\nlore bootstrap               # validate prerequisites\nlore serve                    # start HTTP server\nlore mcp                     # start MCP server\nlore ui                      # start web UI\nlore setup claude-code       # install hooks\nlore setup claude-code --validate --test-connection\n\n# SLO management\nlore slo create --name \"P99 < 50ms\" --metric p99_latency --threshold 50 --operator lt\nlore slo status\nlore slo alerts\n\n# Retrieval profiles\nlore profiles list\nlore profiles create --name fast-coding --semantic-weight 1.0 --recency-bias 7\n\n# Retention policies\nlore policy create --name prod --snapshot-schedule \"0 2 * * *\" --max-snapshots 30\nlore policy compliance\nlore restore-drill --latest\n\n# Workspaces\nlore workspace create dev-team\nlore workspace switch dev-team\nlore audit --since 24h\n\n# Plugins\nlore plugin create my-tagger\nlore plugin list\nlore plugin reload my-tagger\n\n# Recommendations\nlore suggest --context \"setting up docker\"\n\n# Review (with risk scoring)\nlore review list --sort risk\nlore review approve <id> --note \"Verified\"\nlore review batch approve --ids id1,id2\n\n# API keys\nlore keys create --name \"my-agent\"\nlore keys list\nlore keys revoke <key-id>\n```\n\n## API Reference\n\n### Key endpoints\n\n```\n# Memory CRUD\nGET    /v1/retrieve                    # Auto-retrieval (for hooks)\nPOST   /v1/memories                    # Create memory\nPOST   /v1/memories/search             # Semantic search\nGET    /v1/memories                    # List memories\nGET    /v1/memories/{id}               # Get memory\nPATCH  /v1/memories/{id}               # Update memory\nDELETE /v1/memories/{id}               # Delete memory\n\n# Knowledge graph\nGET    /v1/graph                       # Knowledge graph\nGET    /v1/graph/topics                # Topic list\nGET    /v1/graph/topics/{name}         # Topic detail\nGET    /v1/graph/entity/{id}           # Entity detail\n\n# Bi-temporal & supersession (history without deletion)\nPOST   /v1/memories/{id}/supersede            # Mark superseded (by=null un-supersedes)\nGET    /v1/memories/at_time                   # Memories canonical as of ?at=<ts>\nGET    /v1/memories/{id}/supersession-chain   # Memory correction audit trail\nGET    /v1/memories/{id}/provenance           # Full lineage (sources + chain)\nPOST   /v1/memories/consolidate               # Merge N memories + supersede sources\nGET    /v1/facts/at_time                      # Facts about an entity valid at ?at=<ts>\nPOST   /v1/facts/{id}/supersede               # Supersede-not-delete a fact edge\nGET    /v1/facts/{id}/supersession-chain      # Fact correction trail\nGET    /v1/timeline                           # Chronologically adjacent events\n\n# Ingestion\nPOST   /v1/conversations              # Extract memories from conversation\nPOST   /v1/ingest                     # Ingest external content\n\n# Review + risk scoring\nGET    /v1/review                     # Pending reviews (sortable by risk)\nPOST   /v1/review/{id}               # Approve/reject with notes\nPOST   /v1/review/bulk               # Batch approve/reject\nGET    /v1/review/history             # Decision audit trail\n\n# Export & snapshots\nPOST   /v1/export                     # Export all data\nPOST   /v1/import                     # Import data\nPOST   /v1/export/snapshots           # Create snapshot\nGET    /v1/export/snapshots           # List snapshots\n\n# SLO dashboard\nGET    /v1/slo                        # List SLO definitions\nPOST   /v1/slo                        # Create SLO\nGET    /v1/slo/status                 # Current pass/fail per SLO\nGET    /v1/slo/alerts                 # Alert history\nGET    /v1/slo/timeseries             # Time-series for charts\n\n# Retrieval profiles\nGET    /v1/profiles                   # List profiles\nPOST   /v1/profiles                   # Create profile\nGET    /v1/retrieve?profile=coding    # Retrieve with profile\n\n# Retention policies\nGET    /v1/policies                   # List policies\nPOST   /v1/policies                   # Create policy\nGET    /v1/policies/compliance        # Compliance summary\nPOST   /v1/policies/{id}/drill       # Execute restore drill\n\n# Workspaces + RBAC\nPOST   /v1/workspaces                 # Create workspace\nGET    /v1/workspaces                 # List workspaces\nPOST   /v1/workspaces/{id}/members   # Add member\nGET    /v1/audit                      # Query audit log\n\n# Plugins\nGET    /v1/plugins                    # List plugins\nPOST   /v1/plugins/{name}/enable     # Enable plugin\nPOST   /v1/plugins/{name}/reload     # Hot-reload plugin\n\n# Recommendations\nPOST   /v1/recommendations           # Get proactive suggestions\nPOST   /v1/recommendations/{id}/feedback  # Thumbs up/down\nPATCH  /v1/recommendations/config    # Adjust aggressiveness\n\n# Setup validation\nPOST   /v1/setup/validate            # Test connectivity\n\n# Analytics & monitoring\nGET    /v1/recent                     # Recent activity\nGET    /v1/analytics/retrieval        # Retrieval analytics\nGET    /metrics                       # Prometheus metrics\n\n# API keys\nPOST   /v1/keys                       # Create API key\nGET    /v1/keys                       # List API keys\nDELETE /v1/keys/{id}                  # Revoke API key\n```\n\n## Configuration\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `DATABASE_URL` | — | PostgreSQL connection string |\n| `LORE_PORT` | `8765` | Server port |\n| `LORE_API_KEY` | — | API key for authentication |\n| `LORE_API_URL` | `http://localhost:8765` | Remote server URL |\n| `LORE_PROJECT` | — | Default project scope |\n| `LORE_SNAPSHOT_THRESHOLD` | `30000` | Characters before auto-snapshot |\n| `LORE_ENRICHMENT_ENABLED` | `false` | Enable LLM enrichment pipeline |\n| `LORE_ENRICHMENT_MODEL` | `gpt-4o-mini` | Model for enrichment |\n| `LORE_LLM_PROVIDER` | — | LLM provider override |\n| `LORE_LLM_API_KEY` | — | LLM API key |\n| `LORE_LLM_MODEL` | — | LLM model override |\n| `LORE_LLM_BASE_URL` | — | LLM base URL |\n| `LORE_GRAPH_DEPTH` | `2` | Default graph traversal depth |\n| `LORE_GRAPH_CONFIDENCE_THRESHOLD` | `0.5` | Entity confidence threshold |\n| `LORE_GRAPH_EXTRACTION_ENABLED` | `true` | Entity extraction from new memories. On by default — entities come from local **spaCy** NER (no LLM, no `claude` CLI), with a proper-noun heuristic fallback when spaCy/`en_core_web_sm` isn't installed. Set `false` to disable. Install `lore-sdk[ner]` + `python -m spacy download en_core_web_sm` for best entities. |\n| `LORE_GRAPH_LLM` | `false` | Use the `claude` CLI to extract entities **and relationships** (subject→predicate→object) instead of local entity-only extraction. Needs Claude Code on `PATH`. |\n| `LORE_GRAPH_EXTRACTION_CONCURRENCY` | `2` | Max concurrent `claude` extraction subprocesses (LLM path only) |\n| `LORE_GRAPH_EXTRACTION_TIMEOUT` | `30` | Per-extraction subprocess timeout, seconds (LLM path only) |\n| `LORE_CONTRADICTION_DETECTION` | auto | Write-time contradiction detection + soft-supersession. Auto-on when `OPENAI_API_KEY` is set (it's LLM-scored); set `true`/`false` to override. Flags the new memory and soft-supersedes the older contradicted one (recall suppresses superseded memories ×0.1 — not deleted). |\n| `LORE_CONTRADICTION_SUPERSEDE` | `true` | Soft-supersede the older contradicted memory (last-write-wins). `false` = flag-only (old behavior). Only your own / unowned memories are superseded; cross-agent conflicts are flag-only. |\n| `LORE_CONTRADICTION_SUPERSEDE_MIN_CONFIDENCE` | `0.75` | Confidence bar to supersede (higher than the flag bar, `LORE_CONTRADICTION_MIN_CONFIDENCE`=`0.6`). |\n| `LORE_AUTO_SAVE` | `true` | Auto-capture (Claude Code hooks) master switch; `false` disables all capture. |\n| `LORE_CAPTURE_N` | `0` | Auto-capture mid-session batch size. `0` = buffer-only (extract per-turn at `Stop`); `>0` spawns `capture-extract` every N tool calls (the old default was `10`). |\n| `LORE_EXTRACT_ON_STOP` | `true` | Auto-capture: extract once per completed agent turn (`Stop` hook). `false` = strict end-of-session-only extraction. |\n| `LORE_HTTP_TIMEOUT` | `30` | HTTP timeout (seconds) |\n| `OPENAI_API_KEY` | — | Auto-enables enrichment when set |\n| `SLO_CHECK_INTERVAL` | `60` | SLO evaluation interval (seconds) |\n| `ALERT_WEBHOOK_URL` | — | Default webhook URL for SLO alerts |\n| `SMTP_HOST` | — | SMTP server for email alerts |\n| `SMTP_PORT` | `587` | SMTP port |\n| `SMTP_USER` | — | SMTP username |\n| `SMTP_FROM` | — | Email sender address |\n| `AUTH_MODE` | `api-key-only` | Auth mode: `api-key-only`, `dual`, `oidc-required` |\n| `LORE_WORKSPACE` | — | Default workspace slug |\n\n## Architecture\n\n```\n┌──────────────────────────────────────────────────────────────┐\n│                      Agent Runtimes                          │\n│  Claude Code · OpenClaw · Cursor · Codex · Any HTTP client   │\n└──────────┬──────────────────────────────────┬────────────────┘\n           │ hooks (auto-retrieval)           │ MCP tools\n           ▼                                  ▼\n┌──────────────────────────────────────────────────────────────┐\n│                     Lore Server (:8765)                       │\n│                                                              │\n│  REST API · MCP Server · Web UI (/ui/) · Plugin SDK          │\n│                                                              │\n│  ┌─────────────┐  ┌──────────────┐  ┌─────────────────────┐ │\n│  │  Embedder   │  │  Knowledge   │  │  LLM Pipeline       │ │\n│  │  (ONNX)     │  │  Graph       │  │  (optional)         │ │\n│  │  pgvector   │  │  + Review    │  │  classify · enrich   │ │\n│  │  + Profiles │  │  + Risk      │  │  extract · recommend │ │\n│  └─────────────┘  └──────────────┘  └─────────────────────┘ │\n│                                                              │\n│  ┌─────────────┐  ┌──────────────┐  ┌─────────────────────┐ │\n│  │  SLO        │  │  Retention   │  │  Workspaces         │ │\n│  │  Checker    │  │  Scheduler   │  │  + RBAC             │ │\n│  │  + Alerting │  │  + Drills    │  │  + Audit Log        │ │\n│  └─────────────┘  └──────────────┘  └─────────────────────┘ │\n└──────────────────────────┬───────────────────────────────────┘\n                           │\n              ┌────────────▼────────────┐\n              │   PostgreSQL + pgvector  │\n              │   memories · entities    │\n              │   relationships · facts  │\n              │   slo · profiles · audit │\n              │   workspaces · policies  │\n              └─────────────────────────┘\n```\n\n## Performance\n\n| Operation | Latency |\n|-----------|---------|\n| `/v1/retrieve` (warm) | ~20ms |\n| `remember()` (no LLM) | < 100ms |\n| `recall()` 100 memories | < 50ms |\n| `recall()` 10K memories | < 200ms |\n| `recall()` graph-enhanced | < 500ms |\n| Embedding (500 words) | < 200ms |\n\n## Contributing\n\n```bash\ngit clone https://github.com/agentkitai/lore.git\ncd lore\npip install -e \".[dev,server,mcp,enrichment]\"\ndocker compose up -d db  # Postgres + pgvector\npytest\n```\n\n## License\n\nMIT\n",
  "bytes": 23431,
  "sha": "6e2fbafa000eac847332da23bfe0b1822e6d18746573a55267869d6801d40080",
  "repo_slug": "agentkitai/lore",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_agentkitai_lore_2a99ae54/readme"
}