PyHall
The Python reference implementation of WCP — Worker Class Protocol.
The first open standard for governing AI worker dispatch.
PyHall is the governed layer between a capability request and its execution. It answers the question every agentic system ignores: should this worker be trusted with this job, under these conditions, with this data?
The Union Hall Metaphor
Agents are like contractors. Contractors who are signatory to a union can hire trained, certified workers through the Hall. When an agent needs a worker, they contact PyHall.
PyHall is the Hall.
- Workers enroll in the Hall with a registry record declaring their capabilities and controls.
- Agents make capability requests — not "call tool X", but "I need
cap.doc.summarize". - The Hall routes the request to the best available worker, verifying controls and computing blast radius.
- The Hall returns a RouteDecision — an evidence receipt of every governance decision made.
Install
pip install pyhall-wcp
Quick Start
import uuid
from pyhall import make_decision, RouteInput, Registry, load_rules
# Load routing rules and enrolled workers
rules = load_rules("rules.json")
registry = Registry(registry_dir="enrolled/")
# Build a capability request
inp = RouteInput(
capability_id="cap.doc.summarize",
env="dev",
data_label="INTERNAL",
tenant_risk="low",
qos_class="P2",
tenant_id="acme-corp",
correlation_id=str(uuid.uuid4()),
)
# Ask the Hall
decision = make_decision(
inp=inp,
rules=rules,
registry_controls_present=registry.controls_present(),
registry_worker_available=registry.worker_available,
)
if decision.denied:
print(f"Denied: {decision.deny_reason_if_denied}")
else:
print(f"Dispatch to: {decision.selected_worker_species_id}")
# -> "wrk.doc.summarizer"
What PyHall Gives You
- Governed dispatch — every capability request goes through blast radius scoring, controls verification, and policy gate evaluation before a worker is selected.
- Blast radius containment — workers declare their potential damage scope before execution. High-risk operations in production automatically require human review.
- Deterministic routing — given identical inputs, routing decisions are identical. Golden snapshot testing catches regressions before they ship.
- Evidence receipts — every dispatch produces a signed, hashed evidence trail: what ran, when, under what policy, with what controls verified.
WCP Compliance Levels
| Level | Requirements |
|---|---|
| WCP-Basic | Capability routing, fail-closed, deterministic |
| WCP-Standard | + Controls enforcement, mandatory telemetry, dry-run |
| WCP-Full | + Blast radius, privilege envelopes, policy gate, evidence receipts, discovery API |
PyHall implements WCP-Full.
CLI
# Route a capability request
pyhall route --capability cap.doc.summarize --env dev --rules rules.json
# Validate all test fixtures against routing rules
pyhall validate rules.json tests.json
# Show registry status
pyhall status --registry-dir enrolled/
# Enroll a worker
pyhall enroll my_worker/registry_record.json --registry-dir enrolled/
# Version
pyhall version
The Five-Worker Pipeline
WCP excels at governed multi-worker pipelines. The canonical research ingestion pipeline chains five workers with full correlation propagation:
cap.web.fetch -> cap.doc.chunk -> cap.ml.embed -> cap.doc.hash -> cap.research.register
web_fetcher (blast: 1, reversible) — fetch URL, extract text
doc_chunker (blast: 0, reversible) — semantic chunking ~500 tokens
embedder (blast: 1, reversible) — embed with nomic-embed-text
doc_hasher (blast: 0, deterministic) — SHA-256 + optional signing
research_registrar (blast: 2, reversible) — register to knowledge store
Total chain blast: 4 (within WCP-Standard threshold for dev/INTERNAL)
correlation_id: propagated through all 5 workers and all telemetry events
Architecture
Agent (Claude, GPT, local LLM)
|
| capability request (RouteInput)
v
+------------------+
| PyHall / Hall |
| |
| 1. Rule match | <- routing_rules.json
| 2. Controls | <- Registry.controls_present()
| 3. Blast radius | <- computed or pre-scored
| 4. Policy gate | <- PolicyGate.evaluate()
| 5. Worker select| <- Registry.worker_available()
| 6. Telemetry | <- 3 mandatory events
+------------------+
|
| RouteDecision (evidence receipt)
v
selected_worker_species_id
telemetry_envelopes
required_controls_effective
Project Layout
pyhall/
__init__.py — public API
router.py — make_decision() — the core routing engine
models.py — RouteInput, RouteDecision (Pydantic v2)
rules.py — Rule, load_rules, route_first_match
registry.py — Registry class, worker enrollment
policy_gate.py — PolicyGate stub (replace with your engine)
telemetry.py — mandatory telemetry event builders
conformance.py — conformance validation for CI
common.py — shared utilities (timestamps, response envelopes)
cli.py — pyhall CLI (route, validate, status, enroll)
workers/examples/
hello_worker/ — minimal complete worker (start here)
tests/
test_router.py — WCP compliance test suite
WCP spec — see https://github.com/fafolab/wcp
License
Apache 2.0 — see LICENSE
Contributing
See CONTRIBUTING.md. WCP is an open concept — fork it, implement it, improve it.
Built by FΔFΌ★LΔB
Metadata
Release files for pyhall-wcp 0.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pyhall_wcp-0.2.2.tar.gz | 93.9 kB | Without provenance | Details for pyhall_wcp-0.2.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pyhall_wcp-0.2.2-py3-none-any.whl | Python 3 | none | any | Details for pyhall_wcp-0.2.2-py3-none-any.whl |
Total release size: 156.6 kB
Release files / pyhall_wcp-0.2.2.tar.gz
| Download URL | pyhall_wcp-0.2.2.tar.gz |
|---|---|
| Size | 93.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f06f512512c8d50c15e631fbf65c5349d415a68316b8190ca1b26234e940f321
|
|
BLAKE2b-256 checksum How to use checksums |
04d2f8951de4dbff822c7146a6ce44329c88da57ddad3ee25a30c865696c4874
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|
Release files / pyhall_wcp-0.2.2-py3-none-any.whl
| Download URL | pyhall_wcp-0.2.2-py3-none-any.whl |
|---|---|
| Size | 62.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b66158376ed227cd48d66b2166ae9794019d4af1413b91d8e27d252839f492de
|
|
BLAKE2b-256 checksum How to use checksums |
d704c73d8c6bdb343ae944d658a75d988cde96ec2bbc7d8312e9f753e531a69c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|
Security for pyhall-wcp 0.2.2
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.