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 handles — federation-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 isinfra:*, 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 client — the 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-coreinside 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
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 ciris_server-0.5.86.tar.gz.
File metadata
- Download URL: ciris_server-0.5.86.tar.gz
- Upload date:
- Size: 1.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7743fd59e30a27da7f8ae6accfab22d4e3c7c62ca5f4d7ca683c4068a4ff5e66
|
|
| MD5 |
5388c813360b2d3617a3356656a69929
|
|
| BLAKE2b-256 |
ec96c0cb4161ab97879fb29579aedf040f4e0a4ec64edd3e256d089ee3f3ca50
|
Provenance
The following attestation bundles were made for ciris_server-0.5.86.tar.gz:
Publisher:
publish-pypi.yml on CIRISAI/CIRISServer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ciris_server-0.5.86.tar.gz -
Subject digest:
7743fd59e30a27da7f8ae6accfab22d4e3c7c62ca5f4d7ca683c4068a4ff5e66 - Sigstore transparency entry: 2088417649
- Sigstore integration time:
-
Permalink:
CIRISAI/CIRISServer@62b495ac3e7f7c6790289627e3e983d0f4fcce33 -
Branch / Tag:
refs/tags/v0.5.86 - Owner: https://github.com/CIRISAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@62b495ac3e7f7c6790289627e3e983d0f4fcce33 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ciris_server-0.5.86-cp310-abi3-win_amd64.whl.
File metadata
- Download URL: ciris_server-0.5.86-cp310-abi3-win_amd64.whl
- Upload date:
- Size: 92.0 MB
- Tags: CPython 3.10+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
58d698978a0d3423ae4b9b54580585fb950ddd6c987d16acff69d93b752d6a88
|
|
| MD5 |
8f5f6c7729f93c022714d2157702ef3d
|
|
| BLAKE2b-256 |
4882a7c223eff6d7eb49c8dad251234e136ac93b05104d29b9b55dbf2712b0f7
|
Provenance
The following attestation bundles were made for ciris_server-0.5.86-cp310-abi3-win_amd64.whl:
Publisher:
publish-pypi.yml on CIRISAI/CIRISServer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ciris_server-0.5.86-cp310-abi3-win_amd64.whl -
Subject digest:
58d698978a0d3423ae4b9b54580585fb950ddd6c987d16acff69d93b752d6a88 - Sigstore transparency entry: 2088419302
- Sigstore integration time:
-
Permalink:
CIRISAI/CIRISServer@62b495ac3e7f7c6790289627e3e983d0f4fcce33 -
Branch / Tag:
refs/tags/v0.5.86 - Owner: https://github.com/CIRISAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@62b495ac3e7f7c6790289627e3e983d0f4fcce33 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ciris_server-0.5.86-cp310-abi3-manylinux_2_39_x86_64.whl.
File metadata
- Download URL: ciris_server-0.5.86-cp310-abi3-manylinux_2_39_x86_64.whl
- Upload date:
- Size: 91.3 MB
- Tags: CPython 3.10+, manylinux: glibc 2.39+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be6204bd08bfd2f20a58c870c77d8bde90a603ec52ee092bb5bc3474331a3531
|
|
| MD5 |
d593e70540041478655463a941ff58cf
|
|
| BLAKE2b-256 |
200923e74c4c2cd5a3bea41a6474f20b44ab199f81ae90432b99079298501cfe
|
Provenance
The following attestation bundles were made for ciris_server-0.5.86-cp310-abi3-manylinux_2_39_x86_64.whl:
Publisher:
publish-pypi.yml on CIRISAI/CIRISServer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ciris_server-0.5.86-cp310-abi3-manylinux_2_39_x86_64.whl -
Subject digest:
be6204bd08bfd2f20a58c870c77d8bde90a603ec52ee092bb5bc3474331a3531 - Sigstore transparency entry: 2088418855
- Sigstore integration time:
-
Permalink:
CIRISAI/CIRISServer@62b495ac3e7f7c6790289627e3e983d0f4fcce33 -
Branch / Tag:
refs/tags/v0.5.86 - Owner: https://github.com/CIRISAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@62b495ac3e7f7c6790289627e3e983d0f4fcce33 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ciris_server-0.5.86-cp310-abi3-manylinux_2_39_aarch64.whl.
File metadata
- Download URL: ciris_server-0.5.86-cp310-abi3-manylinux_2_39_aarch64.whl
- Upload date:
- Size: 87.5 MB
- Tags: CPython 3.10+, manylinux: glibc 2.39+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8b49088c72c4cc56662b092f82d2fc0cde5de9b0ccf7b50b169a343d757a2ded
|
|
| MD5 |
4c908f824d58077ae119aacb07a6f2e3
|
|
| BLAKE2b-256 |
a74b243107dc1ad3709b2ff09a1370649fb0bb39274dfaf5a58cb60c247b69b6
|
Provenance
The following attestation bundles were made for ciris_server-0.5.86-cp310-abi3-manylinux_2_39_aarch64.whl:
Publisher:
publish-pypi.yml on CIRISAI/CIRISServer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ciris_server-0.5.86-cp310-abi3-manylinux_2_39_aarch64.whl -
Subject digest:
8b49088c72c4cc56662b092f82d2fc0cde5de9b0ccf7b50b169a343d757a2ded - Sigstore transparency entry: 2088419072
- Sigstore integration time:
-
Permalink:
CIRISAI/CIRISServer@62b495ac3e7f7c6790289627e3e983d0f4fcce33 -
Branch / Tag:
refs/tags/v0.5.86 - Owner: https://github.com/CIRISAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@62b495ac3e7f7c6790289627e3e983d0f4fcce33 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ciris_server-0.5.86-cp310-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: ciris_server-0.5.86-cp310-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 93.1 MB
- Tags: CPython 3.10+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
13e8c49a81e9eebd743a3f20b69ba6a3cbb4864bc5350486a1a7bfa7e6af1d7d
|
|
| MD5 |
b861e6f7e7275e9d161e0ce60ac94d96
|
|
| BLAKE2b-256 |
64b21c685657a3f198d187afcf0aacdabcc4da1c87bf8a8db14c91765c56b15d
|
Provenance
The following attestation bundles were made for ciris_server-0.5.86-cp310-abi3-macosx_11_0_arm64.whl:
Publisher:
publish-pypi.yml on CIRISAI/CIRISServer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ciris_server-0.5.86-cp310-abi3-macosx_11_0_arm64.whl -
Subject digest:
13e8c49a81e9eebd743a3f20b69ba6a3cbb4864bc5350486a1a7bfa7e6af1d7d - Sigstore transparency entry: 2088418574
- Sigstore integration time:
-
Permalink:
CIRISAI/CIRISServer@62b495ac3e7f7c6790289627e3e983d0f4fcce33 -
Branch / Tag:
refs/tags/v0.5.86 - Owner: https://github.com/CIRISAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@62b495ac3e7f7c6790289627e3e983d0f4fcce33 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ciris_server-0.5.86-cp310-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: ciris_server-0.5.86-cp310-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 94.9 MB
- Tags: CPython 3.10+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5c2925957e4f1f2f24899ac2577e3aa318b0e68ab273dfd9901066d84c16fd6c
|
|
| MD5 |
619706bf46bf7b04c2c88abae61ec4c1
|
|
| BLAKE2b-256 |
83cc8577925d76ebbf9a33d986ec07df04a1f7182fe2e702f3d464dd08e8fc28
|
Provenance
The following attestation bundles were made for ciris_server-0.5.86-cp310-abi3-macosx_10_12_x86_64.whl:
Publisher:
publish-pypi.yml on CIRISAI/CIRISServer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ciris_server-0.5.86-cp310-abi3-macosx_10_12_x86_64.whl -
Subject digest:
5c2925957e4f1f2f24899ac2577e3aa318b0e68ab273dfd9901066d84c16fd6c - Sigstore transparency entry: 2088418349
- Sigstore integration time:
-
Permalink:
CIRISAI/CIRISServer@62b495ac3e7f7c6790289627e3e983d0f4fcce33 -
Branch / Tag:
refs/tags/v0.5.86 - Owner: https://github.com/CIRISAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@62b495ac3e7f7c6790289627e3e983d0f4fcce33 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ciris_server-0.5.86-cp310-abi3-android_24_armeabi_v7a.whl.
File metadata
- Download URL: ciris_server-0.5.86-cp310-abi3-android_24_armeabi_v7a.whl
- Upload date:
- Size: 24.4 MB
- Tags: Android API level 24+ ARM EABI v7a, CPython 3.10+
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2ab33dcca7793e185ba1c0c599fa235f2c37256ad665284386107bb27db7925d
|
|
| MD5 |
e1fc0a61ad2f9dd58db80a3c8ea3c1c1
|
|
| BLAKE2b-256 |
f893ee331eb29a4a43f88cac14a9ad7b06722cbf13c7edecf9984d24a549c2e9
|
Provenance
The following attestation bundles were made for ciris_server-0.5.86-cp310-abi3-android_24_armeabi_v7a.whl:
Publisher:
publish-pypi.yml on CIRISAI/CIRISServer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ciris_server-0.5.86-cp310-abi3-android_24_armeabi_v7a.whl -
Subject digest:
2ab33dcca7793e185ba1c0c599fa235f2c37256ad665284386107bb27db7925d - Sigstore transparency entry: 2088418134
- Sigstore integration time:
-
Permalink:
CIRISAI/CIRISServer@62b495ac3e7f7c6790289627e3e983d0f4fcce33 -
Branch / Tag:
refs/tags/v0.5.86 - Owner: https://github.com/CIRISAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@62b495ac3e7f7c6790289627e3e983d0f4fcce33 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ciris_server-0.5.86-cp310-abi3-android_24_arm64_v8a.whl.
File metadata
- Download URL: ciris_server-0.5.86-cp310-abi3-android_24_arm64_v8a.whl
- Upload date:
- Size: 27.0 MB
- Tags: Android API level 24+ ARM64 v8a, CPython 3.10+
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b58d287cf7a1e5810aa9520892c65f2deb37ff4b067b9239d33cea21533d4aa4
|
|
| MD5 |
bd79edd387c5698b14ec12477ed80d7b
|
|
| BLAKE2b-256 |
007956bbea38e63a44cbcc51c6818bc10075728b53dd9c76c9081404314279af
|
Provenance
The following attestation bundles were made for ciris_server-0.5.86-cp310-abi3-android_24_arm64_v8a.whl:
Publisher:
publish-pypi.yml on CIRISAI/CIRISServer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ciris_server-0.5.86-cp310-abi3-android_24_arm64_v8a.whl -
Subject digest:
b58d287cf7a1e5810aa9520892c65f2deb37ff4b067b9239d33cea21533d4aa4 - Sigstore transparency entry: 2088417873
- Sigstore integration time:
-
Permalink:
CIRISAI/CIRISServer@62b495ac3e7f7c6790289627e3e983d0f4fcce33 -
Branch / Tag:
refs/tags/v0.5.86 - Owner: https://github.com/CIRISAI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@62b495ac3e7f7c6790289627e3e983d0f4fcce33 -
Trigger Event:
push
-
Statement type: