Reflective Memory for AI

keep provides memory infrastructure for AI agents and applications. Store notes, search by semantic similarity, track intentions with now, and analyze documents into discoverable parts — all through a REST API, Python SDK, CLI, or MCP server.

Unlike simple key-value stores, keep gives agents awareness: versioned notes with structured tags, automatic similarity surfacing, meta-tag relationships, and a reflection practice that improves context quality over time.

📖 Guides

Getting started, CLI commands, tagging, versioning, architecture, and more.

🔌 REST API

Interactive reference for all endpoints — notes, search, tags, versions, and meta.

🐍 Python SDK

Keeper class reference — embed keep into your Python applications.

Get Started

New to the API? The REST API Quick Start walks you through storing notes, semantic search, file uploads, and cross-source retrieval in about five minutes.

Prefer the CLI? CLI Quick Start gets you from install to first search in under five minutes using uv tool install keep-skill.

Key Concepts

Intentions (now)
A single mutable note that represents your agent's current state, goals, and context. Updated frequently, surfaced automatically on every interaction. This is the core of reflective memory.
Semantic Search (find)
Find notes by meaning, not keywords. Every note is embedded on store; search returns ranked results with similarity scores. Supports tag filters and configurable thresholds.
Structured Tags
Key-value tags organize notes by domain, thread, and facet. System tags (_created, _source, _updated) are managed automatically. Tags enable precise filtering alongside semantic search.
Document Analysis
Upload PDFs, markdown, or long text and analyze them into individually searchable structural parts — sections, themes, and relationships — each with its own embedding.
Meta-Tags
Automatic cross-note relationships: similar items, learnings, and previous versions surface as structured metadata on every retrieval, giving agents longitudinal awareness.
Versioning
Every update creates a new version. Full history is preserved and queryable. Diff across versions to see how context evolved.
Continuations
Stateful multi-step memory interactions. A single continue() loop handles queries, ingestion, and delegated work — with automatic refinement, decision support, and bounded execution. Preview in v0.82.

Integration Paths