Skip to main content

nodus-sdk

Unified platform SDK for Nodus AI systems.

Single-package installation story for the Nodus ecosystem. Auto-wires available packages via create_runtime(**kwargs), provides 9 bridge modules for external integrations, and exposes a FastAPI control-plane router.

Status: v0.2.0 — published on PyPI.

create_runtime(auth=True) now requires a configured SECRET_KEY and raises without one — it used to attach nothing and report success. See CHANGELOG.md.


Install

pip install nodus-sdk                            # core only
pip install "nodus-sdk[agent,sql,fastapi]"       # agent + SQLAlchemy + FastAPI
pip install "nodus-sdk[full]"                    # everything

Quick start

from nodus_sdk import create_runtime

rt = create_runtime(memory=True, trace_id="req-001", timeout_ms=None)
result = rt.run_source('print("hello from sdk")')

create_runtime()

from nodus_sdk import create_runtime, NodusSDKRuntime

rt = create_runtime(
    memory=True,          # the runtime's own std:memory store; or pass a MemoryStore
    events=True,          # True = auto-configure; or pass EventBusConfig
    extensions=True,      # attach ExtensionRegistry
    auth=True,            # KeyRing from $SECRET_KEY; or pass your own ring
    observability=True,   # or pass service name string
    trace_id="tid-001",   # injected into every emitted event
    timeout_ms=None,      # None = unlimited (required for long-lived services)
    max_steps=None,
    # Confinement matches a bare NodusRuntime: the filesystem is jailed to the
    # working directory unless allowed_paths is given (None = no jail), and
    # subprocess / network / env are denied unless granted:
    allowed_paths=["/data"],
    allow_network=True,
    project_root=None,
)

rt.memory_store is the store the guest's memory_get / memory_put read and write — the same object create_nodus_router(rt)'s /memory/{key} routes use.

create_runtime returns a NodusSDKRuntime — a NodusRuntime subclass with fluent attach_* bridge methods. All capability kwargs accept True (default config) or a config/store object.

auth=True needs a configured SECRET_KEY

auth=True builds a nodus_auth.KeyRing from AuthSettings().SECRET_KEY, so set that environment variable to a random secret of at least 32 bytes (nodus_auth.generate_key() makes one). It raises rather than falling back, because the two obvious fallbacks are both worse than an error:

  • a random secret per runtime would stop tokens verifying across a restart, across two runtimes in one process, and across the replicas of any real deployment — while passing every single-process test;
  • nodus-auth's dev default SECRET_KEY is a published constant, so a ring built on it is forgeable by anyone who has read the package.

auth=my_key_ring skips all of that and uses the ring you pass. Requires nodus-auth>=0.2.0; 0.1.x signs through python-jose, which carries an unfixed critical advisory (CVE-2026-85394).

rt.auth_key_ring is the ring, and rt.event_bus the bus — both None if the matching optional package is not installed, in which case the bridge is not listed in rt.attached_bridges() either.


NodusSDKRuntime fluent API

from nodus_sdk import NodusSDKRuntime
from nodus_sdk.bridges.sql import SqlBridge
from nodus_sdk.bridges.webhook import WebhookBridge

rt = (
    NodusSDKRuntime(timeout_ms=None)
    .attach_sql(SqlBridge("postgresql://..."))
    .attach_webhook(WebhookBridge(secret="my-secret"))
)

All attach_* methods are idempotent and return self.


Bridges

Bridge Install extra Key class
bridges/redis.py [redis] RedisBridge(url) → queue_backend, event_bus
bridges/http.py [http] HttpBridge() → nodus_http.HttpClient
bridges/llm.py [llm] LLMBridge(credentials) → FailoverClient
bridges/observability.py [observability] init_observability(name, otel=, prometheus=)
bridges/sql.py [sql] SqlBridge(url) → sql_query/sql_execute host fns
bridges/vector.py [vector] VectorBridge(url, table, dimensions) → vector_search/upsert/delete
bridges/scheduler.py [scheduler] SchedulerBridge().register_job(name, fn) → .nd schedules it: scheduler_add_interval(id, secs, name) / scheduler_add_cron(id, expr, name) / cancel
bridges/webhook.py [webhooks] WebhookBridge(secret=) → webhook_send
bridges/api.py [fastapi] create_nodus_router(rt) + NodusTraceMiddleware

Bridge return type note: Bridge host functions return Python maps (dicts), not Records. Use index access in .nd code: r["status"], not r.status.


FastAPI integration

from fastapi import FastAPI
from nodus_sdk import create_runtime
from nodus_sdk.bridges.api import create_nodus_router, NodusTraceMiddleware

rt = create_runtime(timeout_ms=None)
app = FastAPI()
app.add_middleware(NodusTraceMiddleware, runtime=rt)
app.include_router(create_nodus_router(rt))
# Routes: POST /run, GET /health, GET /syscalls, GET|POST|DELETE /memory/{key}

detect_available()

from nodus_sdk import detect_available

avail = detect_available()
# {"memory": True, "extension": False, "events": True, ...}

Development

pip install -e ".[dev]"
PYTHONPATH="C:/dev/Coding Language/src" pytest tests/ -q

Tests require nodus-lang source on PYTHONPATH.


License

MIT — see LICENSE.

Metadata

Release files for nodus-sdk 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nodus-sdk 0.2.0
File Size Uploaded
nodus_sdk-0.2.0.tar.gz 37.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nodus-sdk 0.2.0
File Interpreter ABI Platform
nodus_sdk-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 62.2 kB

Release files / nodus_sdk-0.2.0.tar.gz

Download URL nodus_sdk-0.2.0.tar.gz
Size 37.3 kB
Tags Source
SHA-256 checksum
How to use checksums
eb7700031f8b5677ff7185be8c5a37b2d042b032d4b3df58a62eb9bf56e44f8d
BLAKE2b-256 checksum
How to use checksums
8a64d1c6988fba11c9f00c75f1cff6b167af94a1a99fea63467713c93f90b41f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.9

Release files / nodus_sdk-0.2.0-py3-none-any.whl

Download URL nodus_sdk-0.2.0-py3-none-any.whl
Size 24.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
42d6ed0109933c5a46475f4cd8da77b8f87b4f6a3a11a31562919517709d152e
BLAKE2b-256 checksum
How to use checksums
3c661ec217119d37e9eadba79f6c341f37fc551033f7dc986e60d914ac28a459
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.9

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release 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