Skip to main content

Python SDK for the Daimon protocol — sovereign personal AI

Project description

daimon — Python SDK

Thin Python client over the Daimon daemon's Unix-socket JSON-RPC surface (SPEC §6.1). Mirrors the Go cmd/daimon CLI's wire-level behaviour: one connection per RPC, no pipelining, JSON-RPC 2.0.

Status: v0.1.0 — first GA release. Identity, memory, provider (list / invoke / stream), and activity verbs all surfaced.

Install

From PyPI:

pip install daimon-protocol

From a checkout of the Daimon repo:

pip install -e sdk/python

The PyPI distribution name is daimon-protocol because the unqualified daimon name on PyPI is held by an unrelated dormant package, and daimon-sdk / daimon-client belong to other active projects. The import name remains daimonfrom daimon import Client works regardless of how you installed it.

Use

The SDK assumes a running daimon daemon on the local machine, reachable via the same socket path the Go CLI uses ($DAIMON_HOME/daimon.sock, with the same long-path fallback rules). Start the daemon first:

daimon unlock

Then:

from daimon import Client

client = Client()                                  # resolves $DAIMON_HOME
print(client.identity.get())                       # {"did": "did:key:..."}

# memory.Kind.Valid() accepts: "fact", "preference", "task", "observation"
mid = client.memory.write(kind="fact", content="the sky is blue")
print(mid)                                         # {"id": "01K..."}

mem = client.memory.read(mid["id"])
hits = client.memory.search("sky")                 # [{...mem, "score": 0.7}, ...]
all_mems = client.memory.list()                    # search with empty query

# provider verbs
providers = client.provider.list()
env = client.provider.invoke(
    provider="ollama",
    model="llama3.2:latest",
    messages=[{"role": "user", "content": "hi"}],
)
print(env["response"]["content"])

# streaming — yields delta strings; final envelope on .final
stream = client.provider.stream(
    provider="ollama",
    model="llama3.2:latest",
    messages=[{"role": "user", "content": "count to 3"}],
)
for delta in stream:
    print(delta, end="", flush=True)
print()
print("usage:", stream.final["response"]["usage"])

# activity verbs (audit trail)
client.activity.append(kind="custom.event", payload={"n": 1})
entries = client.activity.query(limit=20)
result = client.activity.verify()                  # {"verified": N, "ok": True}

Errors

from daimon import DaemonNotRunning, DaemonLocked, RPCError

try:
    client.memory.write(kind="fact", content="x")
except DaemonNotRunning:
    # daimon binary isn't serving on this $DAIMON_HOME
    ...
except DaemonLocked:
    # daemon is running but `daimon unlock` hasn't been called
    ...
except RPCError as e:
    # any other JSON-RPC error from the daemon
    print(e.code, e.message, e.data)

Development

cd sdk/python
pip install -e .[dev]
pytest

The test suite uses a stub Unix-socket daemon (no real keys, no real storage) plus optional smoke tests against a live daimon when one is running.

See also

  • TypeScript SDK — sister SDK, same wire shape, async-iterator streaming surface.
  • examples/streaming — cross-language streaming reference: both SDKs round-trip token deltas through one daemon, audit chain verified three ways.
  • CHANGELOG.md — release notes per version.

Project details


Download files

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

Source Distribution

daimon_protocol-0.2.0.dev0.tar.gz (28.4 kB view details)

Uploaded Source

Built Distribution

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

daimon_protocol-0.2.0.dev0-py3-none-any.whl (21.6 kB view details)

Uploaded Python 3

File details

Details for the file daimon_protocol-0.2.0.dev0.tar.gz.

File metadata

  • Download URL: daimon_protocol-0.2.0.dev0.tar.gz
  • Upload date:
  • Size: 28.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for daimon_protocol-0.2.0.dev0.tar.gz
Algorithm Hash digest
SHA256 861a02d540f83a2b9c2d6dbfc0b31f3e1ecf2fe716403230a345bedd588433fc
MD5 8b7076a5a2531527e000d58fc2001c93
BLAKE2b-256 6b2301acb4ad245e4f9f2ff9b63c988b84db8666cd136f7e0031922c3583fa69

See more details on using hashes here.

File details

Details for the file daimon_protocol-0.2.0.dev0-py3-none-any.whl.

File metadata

File hashes

Hashes for daimon_protocol-0.2.0.dev0-py3-none-any.whl
Algorithm Hash digest
SHA256 2f955d8e30e129533a5d8175d0c39287f02dc6e3c53e5d53ea42bab96ecb6887
MD5 b017c955b1e46cdafbde2f065ba6c140
BLAKE2b-256 218b255d0b71b6144b3b413e477d277130fc4d5d7e70796c3bc38a70db422eeb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page