Skip to main content

Agience Chorus

License Python Protocol Sponsor

Operators, by domain. Chorus is the tekton standard library: seven MCP services, each holding the operators of one domain, served from one host or deployed one at a time.

A tekton is a chorus member — a condensor whose tools are organons, invoked by condensation. Each declares a module-level PERSONA in its own server.py, and src/agience_chorus/personas.py discovers them and hands the roster to the host:

tekton domain mount
aria Presentation & Interface /aria/mcp
astra Ingestion & Indexing /astra/mcp
sage Research & Retrieval /sage/mcp
iris Routing & Communication /iris/mcp
ophan Economic Operations /ophan/mcp
seraph Security & Governance /seraph/mcp
lumen Wisdom & Inference /lumen/mcp

Tektons are reached over the wire — HTTP and MCP — and are independently deployable, so an operator runs only the ones they need. Each constructs its own server auth and signs with its own identity, and no tekton imports another.

Running it

pip install agience-chorus                  # every tekton
pip install "agience-chorus[iris,seraph]"   # only what those two need
python -m agience_chorus.server             # every tekton on one process, :8082

MCP_HOST (default 0.0.0.0), MCP_PORT (default 8082) and LOG_LEVEL (default INFO) configure the host. uvicorn agience_chorus.server:app resolves too — the app is built at import time. CHORUS_CRYSTALS=aria,seraph boots a node holding a subset.

The import name is agience_chorus, and the tektons are subpackages of it — agience_chorus.aria, .astra, .iris, .lumen, .ophan, .sage, .seraph.

The extras select dependencies, not modules. agience-chorus[ophan] installs all seven tektons and adds Stripe; Python has no mechanism for an extra to exclude code. What it saves is real, all the same: a node running only iris and seraph otherwise installs Stripe, HuggingFace datasets, pypdf, sympy and numpy to run none of them. Whether an operator may discharge is still the capability gate's answer, not the installer's.

For a checkout, pip install -e ".[all,dev]" — which is what requirements.txt resolves to.

Running the tests

pytest -q src tests --rootdir=src

Both paths, and --rootdir=src, are load-bearing. Each tekton carries its own pyproject.toml, so without the flag pytest picks one of them as the rootdir and src/conftest.py — which wires the organons — never loads; the symptom is a phantom _op_retrieve is None rather than an error naming the cause.

pytest tests/ on its own does not work, and the way it fails is misleading: it stops at a collection error on import seraph.server, which reads like a broken test. The import is correct (seraph is its own distribution, agience-server-seraph); what is missing is the environment the invocation above sets up. Verified 2026-09-16 — under the full command that file collects and its twenty tests pass. Reach for the whole command before concluding anything from a subset that fails.

The bundles

src/agience_chorus/bundles/ holds the operator payloads, one JSON per group, built from the sources named in src/agience_chorus/seraph/bundle_spec.json. Each carries a sha256 that the mesh publishes.

They live inside the package so the wheel carries them: the runtime executes the payload, so an installed chorus without them could not discharge an operator at all.

The runtime reads the payload, not the source file. An edit to a tekton that is not rebuilt has no effect, and the published sha then disagrees with the tree. src/tests/test_bundles_match_source.py fails when they drift.

Layout

path what it is
src/agience_chorus/<tekton>/server.py one deployable tekton service, with its own manifest.py, tests/ and ui/
src/agience_chorus/<tekton>/ui/<top>/<sub>/type.json the content types that tekton owns; it registers them with the gateway at host startup
src/agience_chorus/server.py the unified host, mounting every tekton on one process
src/agience_chorus/​_chorus_identity.py · _persona.py · _host_seams.py the identity, artifact and host-seam helpers tektons load at runtime
src/agience_chorus/​reach_host.py · reach_wiring.py · reading_junction.py the reach surfaces shared across tektons
src/agience_chorus/personas.py tekton discovery and host binding: module loading, service-identity boot, and the roster the host consumes
src/agience_chorus/​corpus_fts.py · corpus_stats.py · live_service.py the corpus and live-service surfaces shared across tektons
src/conftest.py · src/tests/ the test process's environment, and the cross-tekton suite — outside the package, so neither ships
tests/ the repo-level invariants, one file per property: that every persona transport verifies its caller, that no persona shells out, that the runtime data a node reads is declared package-data, and that the Facet source tree stays out of the distribution. Each names the incident it exists for
pyproject.toml the distribution: dependencies, per-tekton extras, and what goes in the wheel

Model-free

A tekton's answer path is grounded operators over the artifact graph, so nothing imports a judgement made elsewhere that a caller cannot re-derive. Reaching a model stays legitimate as a deliberate act through a tekton that offers it, where the call is explicit and the provenance records who chose it. resolve_llm_credentials in src/agience_chorus/seraph/server.py raises and names the rule in the @mcp.tool description a caller reads.

Security issues: email connect@agience.ai rather than opening a public issue.

Dual-licensed — see LICENSE, COMMERCIAL_LICENSE.md, NOTICE and CLA.md.

Declaration of generative AI use

The author used Anthropic's Claude Opus (versions 4.8, 5, and 5.5) in the preparation of this work. Its contribution was to write code, and to generate and validate content. The ideas, the construction and the claims are the author's. No other generative AI tool was used. The author reviewed and edited all output and takes full responsibility for the content of this publication.

Metadata

Release files for agience-chorus 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 agience-chorus 0.2.0
File Size Uploaded
agience_chorus-0.2.0.tar.gz 902.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for agience-chorus 0.2.0
File Interpreter ABI Platform
agience_chorus-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.9 MB

Release files / agience_chorus-0.2.0.tar.gz

Download URL agience_chorus-0.2.0.tar.gz
Size 902.7 kB
Tags Source
SHA-256 checksum
How to use checksums
944c044149562a875e8407267b1a76d256342bd4923c8bd03a598bf6365e2ac5
BLAKE2b-256 checksum
How to use checksums
f21dc128c49db65821abdbb5e6102e2a7a360ac61b6c930cb5717f89035cdcf3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.

Transparency log

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

Download URL agience_chorus-0.2.0-py3-none-any.whl
Size 1.0 MB
Tags Python 3
SHA-256 checksum
How to use checksums
06231ddc692f5e8fc3acf4cbf18ad085cdd1d80f71af2b899f71bdfd67c9da37
BLAKE2b-256 checksum
How to use checksums
c29c11c6b86c7a06e774680e4e675fe0e35d601f038fb025286c080b36419f66
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 10, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0 This release

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