Skip to main content

aegisdb — Python client

The client for AegisDB's newline-delimited JSON protocol. No dependencies — AegisDB is a single dependency-free binary and its wire protocol is one JSON object per line over TCP, so the client that talks to it has no business dragging in a tree.

pip install aegisdb
from aegisdb import AegisClient, NotFound

with AegisClient(host="127.0.0.1", port=9470, token="…") as db:
    rec = db.insert("prefers dark mode", type="semantic", tags=["user"])
    print(db.search(query="dark mode", top_k=5)["records"])
    try:
        db.get(999)
    except NotFound as exc:
        print(exc.code, exc.message)

Every wire operation has a method — insert / insert_many, get, history, update, delete, search, count, consolidate, forget, export, purge, promote, relate, traverse, conflicts, ping, stats, snapshot, and the token admin trio. Each accepts only the fields the server actually reads (the list was taken from the dispatcher, not from prose), plus **extra as the escape hatch for a field a newer server understands.

What it does that a bare socket doesn't

Errors are exceptions, one class per wire code. NotFound, Forbidden, NotReady, RateLimited, MemoryLimit, and the rest — all under AegisRequestError, which carries .code and .message verbatim so a code this client predates still arrives catchable rather than as a string you compare by hand. AegisUnavailable is deliberately not one of them: a refusal means the server did not act, while an unanswered request says nothing either way, and that difference is what you reason about when deciding whether to retry.

One connection, reused. The server supports pipelining and this client deliberately does not use it: one line out, one line back, so a response is never mistaken for the tail of another. A reused connection that fails with no response received is retried once on a fresh one, because the server reaps connections idle past --idle-timeout-sec and that is exactly what a pause between calls looks like.

That retry is safe for the case it exists for — a reaped connection never delivered the request. It is not safe in general: if the server received the request and the answer was lost, a retried insert writes a second record. Pass retry_stale=False where that matters more than the convenience, or reuse=False for a fresh connection per request.

Not thread-safe. A client owns one socket. Use one per thread, or reuse=False.

An unspecified argument is omitted, not defaulted. None means "not specified", so the server's default applies rather than a copy of it kept here — two copies drift, and the client's would silently win. Falsy values are not treated as absent: limit=0 is the conflicts count-without-listing probe, and subsume=False means something.

agent_id does not scope everything

AegisClient(agent_id="…") is applied to every request that does not name its own, mirroring how the server scopes reads and writes. But consolidate, forget, update, delete, relate and promote are scoped by the token's namespace and ignore agent_id entirely — so with authentication off they act across the whole server whatever you set it to. That asymmetry is the server's, not this client's; the affected methods say so in their docstrings.

Version

Published from the same git tag as the server and the Claude Code integration, so aegisdb, aegisdb-mcp and the server binary all carry the same version.

Tests

python3 -m unittest discover -s tests            # from clients/python/
make sdk-test                                    # from the repo root

test_protocol.py runs against a fake server and needs nothing. test_live.py exercises every method against a real build/aegisdb and skips when it is not built — which is the point: the server ignores request fields it does not recognise, so a misspelled field name here would otherwise succeed and quietly do the wrong thing. It has already earned its keep, catching token_revoke coercing a string fingerprint to an int.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aegisdb-0.9.4.tar.gz (21.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aegisdb-0.9.4-py3-none-any.whl (13.2 kB view details)

Uploaded Python 3

File details

Details for the file aegisdb-0.9.4.tar.gz.

File metadata

  • Download URL: aegisdb-0.9.4.tar.gz
  • Upload date:
  • Size: 21.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for aegisdb-0.9.4.tar.gz
Algorithm Hash digest
SHA256 14853f09b11ba0a8b22c7e3037a38ad72e5aec8787acda28aee41279fd5bee80
MD5 97f1ee6a2996a3116c809d2f0d2c4f80
BLAKE2b-256 a5b288aa96ee1266d6ecf1176e756f9503d883778c8c4c5c9889dadd0ecdf07d

See more details on using hashes here.

Provenance

The following attestation bundles were made for aegisdb-0.9.4.tar.gz:

Publisher: pypi.yml on d4n-larsson/aegisdb

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aegisdb-0.9.4-py3-none-any.whl.

File metadata

  • Download URL: aegisdb-0.9.4-py3-none-any.whl
  • Upload date:
  • Size: 13.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for aegisdb-0.9.4-py3-none-any.whl
Algorithm Hash digest
SHA256 91116af11efdbecddb5639bff8888ebbd4edcd45fbd173632e5aaf285a1aa59f
MD5 1e1c1802ac34c99ec1868ae12d7ff4dd
BLAKE2b-256 d70ff200178bfa8e0ebc6d6ed79efa2dc176cdfed26096bc5943afa74e864b60

See more details on using hashes here.

Provenance

The following attestation bundles were made for aegisdb-0.9.4-py3-none-any.whl:

Publisher: pypi.yml on d4n-larsson/aegisdb

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.9.4 This release

2 files

0.9.3

2 files

0.9.2

2 files

0.9.1

2 files

0.9.0

2 files

0.8.3

2 files

0.8.2

2 files

0.8.1

2 files

0.8.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page