A transport-neutral engine for governing consequences across plural horizons
Project description
Polyhorizon Engineering
Engineer what a self-changing system is not allowed to stop seeing.
Polyhorizon Engineering is an engineering discipline for plural consequence horizons around evolving agent systems. It makes purposes, affected-party standing, obligations, authority, evidence boundaries, and recourse explicit and versioned. It then governs how those objects may change while a Loop or Forge changes the system beneath them.
The core failure it addresses is endogenous horizon collapse (EHC): a system can appear to improve by shortening the period it evaluates, moving effects outside its causal scope, removing an affected party, deleting the metric that represented an obligation, weakening the evidence contract, or using a new rule to approve that same rule.
Forge asks whether the system can become better. Polyhorizon asks: better for whom, over which consequences, for how long, and under whose authority to revise those answers?
Position in the engineering stack
This is a hierarchy of controlled objects, not a claim about the order in which labels were published.
| Discipline | Primary controlled object | Characteristic question |
|---|---|---|
| Prompt Engineering | instruction | What should the model be told? |
| Context Engineering | decision information | What should be made available now? |
| Harness Engineering | one execution system | How may one run act, observe, and recover? |
| Loop Engineering | repeated trajectory | How are runs triggered, checked, remembered, and stopped? |
| Forge Engineering | evolution operator | How should harness or loop policy change from evidence? |
| Polyhorizon Engineering | constitution of consequence boundaries | What must remain visible and owed while those policies change? |
Jinsoo Kim's first public Forge Engineering commit
is dated 2026-04-24. Addy Osmani's explicit Loop Engineering formulation
is dated 2026-06-07. Harness -> Loop -> Forge -> Polyhorizon is therefore useful as a
control-object decomposition, not as a publication chronology.
What makes this more than Viability renamed
Viability theory studies whether at least one evolution can remain inside a declared constraint set. A viability gate can answer whether a candidate remains inside an already declared envelope. Polyhorizon governs the constitution of that envelope:
- which temporal, causal, stakeholder, authority, and epistemic horizons exist;
- who has standing to observe, contest, consent, discharge, or appeal;
- which obligations survive metric, evaluator, owner, and policy changes;
- whether recourse is executable for the party to whom it is owed; and
- which predecessor rule may authorize a change to those terms.
An augmented viability model can represent these variables. The claim here is not new control mathematics. It is an engineering boundary: these variables are protected, versioned, portable, and controlled by a trust domain distinct from the Forge that proposes improvements.
If a Polyhorizon charter can be compiled losslessly into an ordinary Forge or viability policy without protected cross-version state, this project has not earned a separate name. The falsification protocol makes that a direct rejection condition.
Five standard axes, an open type system
The standard profile recognizes five common axes:
- Temporal — immediate, delayed, and intergenerational effects.
- Causal — direct outputs, downstream dependencies, and externalities.
- Standing — principals, users, third parties, and affected communities.
- Authority — delegation, approval, amendment, and expiry boundaries.
- Epistemic — observations, provenance, uncertainty, and known coverage gaps.
These are not a closed enum in the kernel. Horizon kinds are namespaced extension points with versioned schemas and evaluators. A medical deployment, an infrastructure controller, and a code agent should be able to define domain horizons without patching core logic.
Engine shape
The reference design is a pure transition kernel:
step(session_state, input_event)
-> next_state + effect_requests + optional_outcome
The kernel never performs network, filesystem, identity, policy, clock, or model effects directly. The host executes a requested effect and returns a receipt bound to the session, sequence, request, charter, and candidate. The next step accepts only the matching receipt.
host discovery + artifact binding
-> proposal with declared and independently discovered claims
-> standing / evidence / authority / recourse requests
<- bound receipts
-> ALLOW | DENY | ESCALATE
This separation provides two equivalent attachment surfaces:
- an in-process Python interface; and
- a versioned NDJSON protocol suitable for a subprocess, sidecar, CI gate, or non-Python host.
The protocol is asynchronous in shape even when an in-process host completes effects immediately. See architecture, integration, and the wire protocol.
Use it as an engine
python -m pip install polyhorizon-engineering
polyhorizon capabilities
The public Python surface centers on Charter, Proposal, PureKernel, Engine,
SessionStore, EffectRequest, and EffectReceipt. Engine can use the bundled in-memory or
local-file store, or any compare-and-swap store supplied by the host. The same session semantics are
available through polyhorizon.wire/v0.1 with capabilities, open, advance, inspect, and
abort commands.
The engine is deliberately attachable rather than vendor-aware. A Python application can register in-process effect handlers; another language can run it as a subprocess or sidecar; CI can use the CLI; and HTTP, MCP, A2A, policy engines, identity systems, or queues can connect through host adapters. Those transports and systems do not become authority merely by being connected.
Runnable Python and Node sidecar examples, JSON Schemas, and a canonical digest corpus are included so an integration can start from executable artifacts rather than prose alone.
EffectReceipt.details is non-normative diagnostic metadata even when it appears in serialized
session state. The exact external result used by an adapter is bound by result_digest, and its
supporting evidence by evidence_digest. See the integration contract.
Normative decision semantics
Polyhorizon does not produce a universal goodness score.
- A known hard obligation breach, unauthorized change, self-ratifying amendment, or orphaned open
obligation is
DENY. - An uncovered consequence, unresolved affected party, stale evidence, or conflict without an
authorized ordering rule is
ESCALATE. - A proposal is
ALLOWonly when all required horizons are covered, hard obligations hold, amendments are predecessor-authorized, and any claimed recourse is reserved and executable.
Soft outcomes remain a vector. Scalar aggregation is permitted only when the charter explicitly authorizes the aggregation rule; it can never erase a hard obligation.
Repository map
POLYHORIZON.md normative method
docs/philosophy.md stewardship claims and limits
docs/theory.md formal model and failure definitions
docs/research.md primary-source lineage and non-novel mechanisms
docs/falsification.md baselines, attacks, measures, rejection conditions
docs/threat-model.md trust boundaries and adversary model
docs/architecture.md pure kernel, state, effects, receipts, extensions
docs/integration.md embedding and host responsibilities
docs/wire-protocol.md versioned NDJSON contract
examples/ Python and Node attachment examples plus digest corpus
schemas/ strict alpha manifest and wire schemas
ROADMAP.md evidence-driven milestones
CHANGELOG.md public release history and known limits
Status and claim discipline
This repository is an alpha reference implementation and a falsifiable method proposal. It is not a moral oracle, regulator, identity provider, causal-discovery system, or guarantee against unknown unknowns. Authorization proves a declared procedure was followed; it does not prove that the procedure is just. The genesis charter and its root authorities remain external human or institutional choices.
The v0.1 kernel implements predecessor-sourced ratification and manifest-level discharge requests
for changed or removed obligations. It does not yet provide a durable cross-session obligation
ledger, an in-kernel impact-discovery phase, semantic migration proofs, an independent interpreter,
or a distributed transaction with external effects. Hosts must bind independently discovered
claims before open; the kernel cannot detect an effect omitted from every input. Those are
explicit roadmap gates, not implied capabilities.
The phrase polyhorizon engineering had no obvious exact-match AI-agent discipline collision in
the scoped search performed for this release. That is not a trademark opinion, exhaustive
prior-art search, or priority claim. Multiple planning horizons, viability theory, constitutional
AI, participatory governance, policy-as-code, algorithmic recourse, and dynamic assurance cases all
predate this work and are explicitly reused or distinguished in the research review.
License
MIT.
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 Distribution
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 polyhorizon_engineering-0.1.0.tar.gz.
File metadata
- Download URL: polyhorizon_engineering-0.1.0.tar.gz
- Upload date:
- Size: 106.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fee6d8e8d4b06ae02d2380c518c0b86d588e79287d312115db49032d83e9072e
|
|
| MD5 |
3085bb355466fbf359856e8256e71cc1
|
|
| BLAKE2b-256 |
fc23901e91bd46cba1fb681611ae6e2c9f540094659650e2281237ced68369f7
|
File details
Details for the file polyhorizon_engineering-0.1.0-py3-none-any.whl.
File metadata
- Download URL: polyhorizon_engineering-0.1.0-py3-none-any.whl
- Upload date:
- Size: 38.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
50b21c98fb271079916ea5016b4697d7e6a07a23a5de2b65b5d0dd8b5a2ebced
|
|
| MD5 |
f843f5e8e0b7c57f986789f436668bb7
|
|
| BLAKE2b-256 |
3bf31598af30bf02a2b6c04c6528330a6b8921a613059ac4fbad348480915df2
|