Agience Chorus
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 and 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.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| agience_chorus-0.1.0.tar.gz | 885.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| agience_chorus-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.9 MB
Release files / agience_chorus-0.1.0.tar.gz
| Download URL | agience_chorus-0.1.0.tar.gz |
|---|---|
| Size | 885.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fb61978970323b46834d94efbd71412c503d9d9db70aa0c526009bd46b5232a9
|
|
BLAKE2b-256 checksum How to use checksums |
a0ca6626bbe9fa2eb6a26781a70c27b29558ced0fe1318a52cac3192a48aeadb
|
| 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 Sep 17, 2026.
Transparency logRelease files / agience_chorus-0.1.0-py3-none-any.whl
| Download URL | agience_chorus-0.1.0-py3-none-any.whl |
|---|---|
| Size | 999.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
dd26243b26415c82af005d1996a1f8b432d66b169396ef781ff4afee446127a6
|
|
BLAKE2b-256 checksum How to use checksums |
d424183cdd980491b2a1e04d0b29283ced5236871307b5a44f495e0543040050
|
| 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 Sep 17, 2026.
Transparency log