kepta
Python-Client für KEPTA — dem lokalen Gedächtnis für KI-Agenten.
Deine Agenten vergessen dich nach jedem Gespräch. KEPTA behebt das — mit einer SQLite-Datei auf deinem Rechner. Kein Konto, keine Cloud, keine Telemetrie.
Dieses Paket ist der Client, nicht die App. KEPTA läuft als Desktop-Anwendung auf demselben Gerät; hier verbindest du dich damit.
pip install kepta
In dreißig Sekunden
from kepta import KeptaClient
kepta = KeptaClient() # findet die laufende Instanz von allein
kepta.save("Rezept Carbonara", "Guanciale, Pecorino, Eigelb. Keine Sahne.", tags=["kochen"])
for hit in kepta.search("was koche ich mit Nudeln"):
print(f"{hit.score:.2f} {hit.memory.title}")
Das Wort Nudeln steht in der Notiz nicht. Gefunden wird sie trotzdem — die Suche kombiniert Volltext, Vektoren und Wissensgraph per Reciprocal Rank Fusion.
Warum das interessant ist
Dasselbe Gedächtnis wie deine Agenten. Claude Desktop und Cursor sprechen über MCP mit derselben Datenbank. Was dein Python-Skript schreibt, weiß Claude in der nächsten Antwort.
Erinnerungen altern. Jede hat Typ, Gültigkeit und Konfidenz. Zieht jemand um, verdrängt die neue Adresse die alte — die alte bleibt als Historie und fällt im Ranking ab. Widersprüche stapeln sich nicht.
alt = kepta.save("Wohnort", "Alex wohnt in Hamburg.")
kepta.update(alt.id, valid_to=1788400000000) # abgelaufen ab diesem Zeitpunkt
kepta.save("Wohnort aktuell", "Alex wohnt jetzt in Leipzig.")
m = kepta.list()[0]
m.is_expired, m.is_superseded # Zustand direkt am Objekt
Keine Abhängigkeiten. Nur die Standardbibliothek. Ein Gedächtnis, das Privatsphäre verspricht, sollte keinen fremden Code in deinen Prozess holen.
Die Verbindung finden
KeptaClient() sucht in dieser Reihenfolge:
- Umgebungsvariable
KEPTA_URL ~/.kepta/endpoint.json— die Adressdatei, die KEPTA beim Start schreibthttp://127.0.0.1:3000als Rückfall für den Entwicklungsmodus
Schritt 2 ist der wichtige: Die gepackte App wählt einen zufälligen Port. Explizit geht natürlich auch:
kepta = KeptaClient("http://127.0.0.1:52341")
Läuft nichts, bekommst du keinen kryptischen Netzwerkfehler, sondern einen Satz, der sagt, was zu tun ist:
if not kepta.is_alive():
print("KEPTA läuft nicht — App starten oder KEPTA_URL setzen.")
Was der Client kann
| Methode | Zweck |
|---|---|
health() · is_alive() |
Status, Version, Anzahl Knoten |
list(trash=False) |
Alle Erinnerungen oder den Papierkorb |
search(query, top_k, tags, type, scope) |
Hybride Suche mit temporaler Gewichtung |
save(title, content, …) |
Anlegen — Typ, Tags, Konfidenz, Gültigkeit |
update(id, **felder) |
Ändern; valid_to= statt validTo= |
delete(id, permanent=False) |
Papierkorb, auf Wunsch endgültig |
restore(id) |
Aus dem Papierkorb zurückholen |
graph() |
Entitäten und Relationen |
Memory und SearchHit sind eingefrorene Dataclasses mit Typannotationen. SearchHit zeigt neben dem Gesamtwert auch die Einzelspuren vector_score und lexical_score.
KEPTA installieren
Die App gibt es für macOS, Windows und Linux unter Releases — jeweils Intel und ARM. MIT-Lizenz, kostenlos.
Lizenz
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kepta-0.1.0.tar.gz.
File metadata
- Download URL: kepta-0.1.0.tar.gz
- Upload date:
- Size: 8.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c6ea44391d00098bdb089e81436d435d69da236f6fba97c84591f5615f276b60
|
|
| MD5 |
fc2347975b96d11e8218e59a9384d5dc
|
|
| BLAKE2b-256 |
26fc0abe7d1bac0af9c7f650451400477c93bfe4d2f868ca97a7c28d84ecae1b
|
Provenance
The following attestation bundles were made for kepta-0.1.0.tar.gz:
Publisher:
pypi.yml on DamianTodorovic/kepta
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kepta-0.1.0.tar.gz -
Subject digest:
c6ea44391d00098bdb089e81436d435d69da236f6fba97c84591f5615f276b60 - Sigstore transparency entry: 2699256504
- Sigstore integration time:
-
Permalink:
DamianTodorovic/kepta@28da3bdd5e5e7479996c420d5cc36ed455fd9df3 -
Branch / Tag:
refs/tags/py-v0.1.0 - Owner: https://github.com/DamianTodorovic
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yml@28da3bdd5e5e7479996c420d5cc36ed455fd9df3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file kepta-0.1.0-py3-none-any.whl.
File metadata
- Download URL: kepta-0.1.0-py3-none-any.whl
- Upload date:
- Size: 7.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bc0b8014f195b4582d0a10116773dd2422783abaf1d65cdea4dd83cfc2718085
|
|
| MD5 |
732b96a3d68b5adb6d71af780502b842
|
|
| BLAKE2b-256 |
57321c92d2fff762df9bc4ff88e2beac129f34829ae715e3b55f1a9148a89844
|
Provenance
The following attestation bundles were made for kepta-0.1.0-py3-none-any.whl:
Publisher:
pypi.yml on DamianTodorovic/kepta
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kepta-0.1.0-py3-none-any.whl -
Subject digest:
bc0b8014f195b4582d0a10116773dd2422783abaf1d65cdea4dd83cfc2718085 - Sigstore transparency entry: 2699256900
- Sigstore integration time:
-
Permalink:
DamianTodorovic/kepta@28da3bdd5e5e7479996c420d5cc36ed455fd9df3 -
Branch / Tag:
refs/tags/py-v0.1.0 - Owner: https://github.com/DamianTodorovic
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yml@28da3bdd5e5e7479996c420d5cc36ed455fd9df3 -
Trigger Event:
push
-
Statement type: