Skip to main content

The fabric node — the federation's headless cohabitation runtime (registry + lens [+ node] over one shared substrate), as the abi3 wheel CIRISAgent consumes. agent = fabric node + brain.

Project description

CIRISServer — the fabric node

The decentralized CEWP node/client. agent = fabric node + brain. CIRISServer is the federation's headless cohabitation runtime: the same composition of cores that folds into a CIRISAgent, packaged without a reasoning brain. Infrastructure must not have agency — so the fabric node attests, stores, observes, reaches consensus, and transports, but it does not reason, decide, or act.

It is the node software for CEWP — the decentralized network formed by CEG, the CIRIS Epistemic Grammar. Any operator can run one; no single instance is load-bearing.

Read MISSION.md first — the charter (why this exists, the separation-of-powers invariant, the apophatic bounds), written against the CIRIS Accord (M-1), the CEG §7.0.1 fabric-node discipline, and Mission Driven Development. The build plan + dependency GANTT live in FSD/SERVER_1.0_PLAN.md.

What it is

A thin composition crate — shipped as both the headless ciris-server binary and a PyO3 abi3 wheel that CIRISAgent (pure Python) links instead of composing the cores itself — linking the federation's cores as libraries over one shared substrate:

ciris-server (the fabric node)
  ├── ciris-registry-core   authority    — identity / license / revocation / steward attestation
  ├── ciris-lens-core       observation  — Coherence Ratchet / Capacity Score (validated, not adjudicated)
  ├── ciris-node-core       consensus    — deferral / voting / expertise / moderation        [folds in at 1.0]
  ├── one shared ciris-persist Engine    — the durable corpus + federation directory
  └── one shared ciris-edge runtime      — CEG/RET transport + the node's single federation identity

It authors no primitives; CEG and the cores own the grammar. CIRISServer is the wiring, the boot order, one unified identity endpoint (/v1/identity, the six-key LocalIdentityAggregate) — and the control surface below.

A node and a client — the UX handles

CIRISServer renders no UI of its own. It is also the client control surface: it exposes every fabric control handle upward, and rich UIs consume them. The handles (MISSION §3.4):

  • Substrate handles — the node's federation identity (/v1/identity), federation-directory reads, content fetch, replication / health.
  • Fabric handlesfederation-identity minting (a hardware-rooted, YubiKey- or TPM/SE-sealed user identity → a CIRIS-V2- fedcode), node ownership (claim a node with its NodeCode + one-time PIN; the responsible owner-binding is infra:*, never agency), the per-role × per-axis trust/consent toggles, trust-graph management (untrust, re-root, create/join groups), canonical-group membership + voting, self/family occurrence attachment, and consent-object setup between peers (consent:replication).

Those handles are consumed by rich clients. Just like CIRISAgent, CIRISServer can run fully headless (the ciris-server binary + a CLI: e.g. ciris-server identity create --backend pkcs11 mints a YubiKey-backed federation ID) and it exposes a rich clientthe same CIRISAgent Kotlin-Multiplatform app, minus the agent (brain) cards. The app is a node: it runs a local fabric node and drives it (all crypto stays in the substrate, never in the UI). It surfaces the fabric cards — create-your-federation-ID (mint the hardware-rooted ID from the desktop app), claim-a-node (NodeCode + PIN), the consent-objects card, the node switcher, and the holonomic scoreboard — without the reasoning/chat cards an agent adds. (Other rich clients: CIRISPortal, CIRISNode.) The infrastructure that holds the audit corpus is the surface that publishes it (redacted PDMA logs / WBD tickets / attestation reads, per the Accord's transparency requirement).

What it replaces

The three canonical nodes (lens + registry-us + registry-eu) become identical fabric nodes — the founding members of the ciris-canonical governed community, replicating via CEG over Reticulum (no Spock, no DNS).

  • The CIRISRegistry singleton servers go away. Each node handles its own key the way the lens already does (per-node identity, no shared vault key); the three per-node keys are the 2-of-3 registry-consensus quorum.
  • The CIRISLens deployment goes away — Python ingest + TimescaleDB + Grafana retired. A central dashboard the whole federation reads is itself the singleton this architecture forbids. The lens function lives as ciris-lens-core inside every fabric node, over the shared substrate, queryable from any node.

The repos (ciris-registry-core, ciris-lens-core, ciris-node-core) stay — they are the libraries this binary composes, the same cores that fold into CIRISAgent.

Install

pip install ciris-server      # the PyO3 abi3 wheel (or build the binary: cargo build --release)
ciris-server                  # boots a zero-setup node — mode=server, trusts ciris-canonical, no wizard
                              # on a fresh (unclaimed) node it prints its NodeCode + one-time claim PIN

# Headless: mint a hardware-rooted federation ID (or do it from the desktop app)
ciris-server identity create --backend pkcs11   # YubiKey-backed; --backend platform-sealed (TPM/SE) | software (dev)
                                                # prints your CIRIS-V2- fedcode + key_id

Defaults need no setup: data under $CIRIS_HOME, SQLite corpus (Postgres via CIRIS_DB_URL), identity minted-or-migrated on first boot, Reticulum transport up, the lens read API on listen+1. Migrating a deployed CIRISLens host? See FSD/LENS_TO_SERVER_MIGRATION.md — the federation key and RNS address carry over byte-identically (no re-key).

The same wheel gives CIRISAgent the lens drop-in: from ciris_server import LensClient.

Status

Shipped (0.3.0) — the integrated fabric node. ciris-server boots a zero-setup node: relay ingest (CEG AccordEventsBatch over Reticulum/HTTP) + the seven frozen GET /lens/api/v1/* read endpoints + the six-key GET /v1/identity, over one shared persist Engine. Federation signatures are 100% hybrid post-quantum (Ed25519 + ML-DSA-65, hard cut — no classical-only path); the sealed-Ed25519 federation seed and the RNS transport identity are TPM/SE/StrongBox sealed (software-encrypted fallback) and adopted byte-identically on a CIRISLens takeover (no re-key).

0.3.0 adds the auth subsystem (src/auth/, CIRISServer#9) — the fabric is the single auth authority: one x-ciris-* hybrid request verifier, self-at-login (so consent/erasure are user-signed), OAuth + sessions + roles/perms + api-keys + user-signed consent + CEG-native erasure (GDPR Art. 17), all a byte-compatible port of the agent's wa_cert-backed auth — and the one-wheel re-export (CIRISServer#4) so CIRISAgent consumes a single ciris_server .so (one PyO3 registry). Also shipped: legacy-trace import (ciris-server import-traces), the holonomic federation scoreboard (ciris-server scoreboard) + the interpreted capability page at https://cirisai.github.io/CIRISServer/, and the §19.7 noise-floor compliance bench. Below the lens-store disk minimum the node degrades to a Reticulum relay node.

Substrate floor: persist v13.3.0 / edge v9.1.3 / verify-family v8.9.0 (the 0.5.84 safe-mesh-seed cut; see Cargo.toml). ciris-lens-core is absorbed in-tree — the standalone CIRISLensCore library and the CIRISLens deployment (Grafana/TimescaleDB/Python ingest) retire. Cohabitation + CEG-profile conformance is gated by CIRISConformance against the published wheels.

Roadmap (driven by the CIRISAgent train):

  • 0.5 (config-as-CEG — zero env vars) — all node config is signed CEG objects (owner-authored, runtime-reconciled, replicated); the fabric IS the config, the same way the agent IS its graph.
  • 0.6 (+ registry authority) — agent ~2.9.8/9. Prep: FSD/REGISTRY_FOLD_DERISK.md, #2.
  • 1.0 (+ node consensus — the complete fabric node) — agent ~2.9.10.

The wiring needs no core changes — CIRISServer adapts to what's shipped. See FSD/SERVER_1.0_PLAN.md.

License

AGPL-3.0-or-later — matching the CIRIS ecosystem.

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

ciris_server-0.5.120.tar.gz (1.4 MB view details)

Uploaded Source

Built Distributions

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

ciris_server-0.5.120-cp310-abi3-win_amd64.whl (95.5 MB view details)

Uploaded CPython 3.10+Windows x86-64

ciris_server-0.5.120-cp310-abi3-manylinux_2_39_x86_64.whl (94.6 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.39+ x86-64

ciris_server-0.5.120-cp310-abi3-manylinux_2_39_aarch64.whl (90.7 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.39+ ARM64

ciris_server-0.5.120-cp310-abi3-macosx_11_0_arm64.whl (96.2 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

ciris_server-0.5.120-cp310-abi3-macosx_10_12_x86_64.whl (97.9 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

ciris_server-0.5.120-cp310-abi3-android_24_x86_64.whl (31.5 MB view details)

Uploaded Android API level 24+ x86-64CPython 3.10+

ciris_server-0.5.120-cp310-abi3-android_24_armeabi_v7a.whl (26.9 MB view details)

Uploaded Android API level 24+ ARM EABI v7aCPython 3.10+

ciris_server-0.5.120-cp310-abi3-android_24_arm64_v8a.whl (29.4 MB view details)

Uploaded Android API level 24+ ARM64 v8aCPython 3.10+

File details

Details for the file ciris_server-0.5.120.tar.gz.

File metadata

  • Download URL: ciris_server-0.5.120.tar.gz
  • Upload date:
  • Size: 1.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ciris_server-0.5.120.tar.gz
Algorithm Hash digest
SHA256 5ec277f805c0e2c56ff78bfd03e2861f05a6bf79c4d72b61f7743e66524ffe19
MD5 0d8f9a9916db2693e82f9a532837bb07
BLAKE2b-256 e99a6878ef284b9caceed28824d3aa9fc18e07071b756d165d31615947b394e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for ciris_server-0.5.120.tar.gz:

Publisher: publish-pypi.yml on CIRISAI/CIRISServer

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

File details

Details for the file ciris_server-0.5.120-cp310-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for ciris_server-0.5.120-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 a7bd4c207a9a34fd6d29b12ce3d3fe10836d9a0856dde68269105cfbe4de5c01
MD5 0ff23f059720fcdca67235e8bfc16171
BLAKE2b-256 62f9f6d685a7e3bea6fe3503defe128cc79e53fa9e6c365edebebe2ea0117813

See more details on using hashes here.

Provenance

The following attestation bundles were made for ciris_server-0.5.120-cp310-abi3-win_amd64.whl:

Publisher: publish-pypi.yml on CIRISAI/CIRISServer

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

File details

Details for the file ciris_server-0.5.120-cp310-abi3-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for ciris_server-0.5.120-cp310-abi3-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 cc0de6f5870073aa7bcd5746a4a640a8c9ba3e1d8a4eec8eda7a75fa7c9473fb
MD5 decb7a88f84b9f5931a179826ed2fdbc
BLAKE2b-256 901407f38b99e32ee92e6bfdbcf1ee9abd0e78473cbb4c76aeca0f5eec0ef780

See more details on using hashes here.

Provenance

The following attestation bundles were made for ciris_server-0.5.120-cp310-abi3-manylinux_2_39_x86_64.whl:

Publisher: publish-pypi.yml on CIRISAI/CIRISServer

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

File details

Details for the file ciris_server-0.5.120-cp310-abi3-manylinux_2_39_aarch64.whl.

File metadata

File hashes

Hashes for ciris_server-0.5.120-cp310-abi3-manylinux_2_39_aarch64.whl
Algorithm Hash digest
SHA256 b24c315097f708f88a42edda984507dd76fd883c4fb02ba8f2176b272155b6a4
MD5 d808670bda1eb2385ef7686cbf8af3a8
BLAKE2b-256 285f1d3bc696234d70bbb565a105d6eeecf8dc7d64094d7231afadad09c0c7e1

See more details on using hashes here.

Provenance

The following attestation bundles were made for ciris_server-0.5.120-cp310-abi3-manylinux_2_39_aarch64.whl:

Publisher: publish-pypi.yml on CIRISAI/CIRISServer

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

File details

Details for the file ciris_server-0.5.120-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ciris_server-0.5.120-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2b75b6a22422f3b89e22e5806d34e75b9942605eca0f153adb8284503ab25ecc
MD5 c80af16229ef5c02deb205641178f453
BLAKE2b-256 b281168877dbedc7ba255a229f27237bee75a2dc205359cee958163e83884dbc

See more details on using hashes here.

Provenance

The following attestation bundles were made for ciris_server-0.5.120-cp310-abi3-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on CIRISAI/CIRISServer

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

File details

Details for the file ciris_server-0.5.120-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for ciris_server-0.5.120-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2075c1239d7d35f90ea9a413152aa06fe2d91e3e3d96ef40861d1ede911ea5ee
MD5 47b9f1cf13e57d1af1e884adfc3d05ba
BLAKE2b-256 d39caf23392506bbdf117f1674d5d4dff5c184bed7427b44a1223af043a4b184

See more details on using hashes here.

Provenance

The following attestation bundles were made for ciris_server-0.5.120-cp310-abi3-macosx_10_12_x86_64.whl:

Publisher: publish-pypi.yml on CIRISAI/CIRISServer

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

File details

Details for the file ciris_server-0.5.120-cp310-abi3-android_24_x86_64.whl.

File metadata

File hashes

Hashes for ciris_server-0.5.120-cp310-abi3-android_24_x86_64.whl
Algorithm Hash digest
SHA256 625f7cac9c1d38fd02b30b00879d644eff043a0426ce6b4cdebf50b4f2b2b510
MD5 4cb38dac8d0a3f5ec32cb1af40fbeacf
BLAKE2b-256 d7fa767cfe1a18e2f2f945cf0be011e20b869a5c8aca4c97c8b1e29fd4c4539d

See more details on using hashes here.

Provenance

The following attestation bundles were made for ciris_server-0.5.120-cp310-abi3-android_24_x86_64.whl:

Publisher: publish-pypi.yml on CIRISAI/CIRISServer

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

File details

Details for the file ciris_server-0.5.120-cp310-abi3-android_24_armeabi_v7a.whl.

File metadata

File hashes

Hashes for ciris_server-0.5.120-cp310-abi3-android_24_armeabi_v7a.whl
Algorithm Hash digest
SHA256 c051f33822868cd9611239b99ebd9aef2c564050aebe325dbdf78ef0ef74af1f
MD5 6583fa26e74073177c9b3ffa8b619085
BLAKE2b-256 b147481e1dc3258ccf98c35d3676dc538cc0b77cb3ae1e6699789f4146b22ff7

See more details on using hashes here.

Provenance

The following attestation bundles were made for ciris_server-0.5.120-cp310-abi3-android_24_armeabi_v7a.whl:

Publisher: publish-pypi.yml on CIRISAI/CIRISServer

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

File details

Details for the file ciris_server-0.5.120-cp310-abi3-android_24_arm64_v8a.whl.

File metadata

File hashes

Hashes for ciris_server-0.5.120-cp310-abi3-android_24_arm64_v8a.whl
Algorithm Hash digest
SHA256 034d392d198ebb16855e6a00a7f290d067a9f294ed431fda73761f7af67f5966
MD5 18c1d39d88f0f0ed7ee84891846d08fb
BLAKE2b-256 2a1b7cc432a923b8acbe8ed90550bb05daebec83c02b32b8601fa977aa616982

See more details on using hashes here.

Provenance

The following attestation bundles were made for ciris_server-0.5.120-cp310-abi3-android_24_arm64_v8a.whl:

Publisher: publish-pypi.yml on CIRISAI/CIRISServer

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

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