Skip to main content

endoxa

Governed beliefs for agents. An append-only ledger, SMT-checked consistency, defeasible revision, and calibration instruments — a layer you give an agent, not a framework you build one inside.

Status: pre-alpha. The library was extracted whole from the research system it grew in, where it has run for months. Versions before 1.0 may move the public API: what is shown below is where the extraction landed, not a promise.

The problem

An LLM agent will tell you Socrates is mortal, and twenty turns later that he is immortal, and never notice. It has no place to put a claim other than its own context, no way to check a new claim against the ones it already made, and no record of why it believes any of them. Asking it to be consistent is asking the thing that lost track to keep track.

endoxa is the place to put them.

What it does

  • Checks. Beliefs and the rules they live under go to a bundled SMT solver, which answers satisfiable, unsatisfiable, or unknown when its deliberation budget runs out — a real answer, not a failure.
  • Decides. On a conflict it finds what is actually to blame and orders the candidates by how readily each may be given up. A rule the agent learned may be retracted; a rule it was given may not.
  • Holds. When two beliefs are equally credible, the conflict cannot be settled from the inside. That is a state with a name, not a coin flip.
  • Records. Every operation is an entry in an append-only ledger. A retracted belief keeps its row and stops counting, so the history of what the agent believed survives the change.
  • Measures. Whether the agent's confidence matched its accuracy, over what it claims to know, what it claims to be able to do, and when it chooses to ask.

Example

from endoxa.governance import Belief, Constraints, Rule, govern

constraints = Constraints(
    rules=(
        Rule(
            name="mortality",
            axiom="fof(m, axiom, ![X]: (human(X) => mortal(X))).",
            confidence=0.9,
        ),
    ),
)
beliefs = [
    Belief(target="human(socrates)", truth_value=True, confidence=1.0, context="user"),
    Belief(target="mortal(socrates)", truth_value=False, confidence=0.6, context="agent"),
]

outcome = govern(beliefs, constraints)

outcome.consistent  # False

# The operations to perform, in order: here, retracting the 0.6-confidence
# claim -- not the rule, and not the one the user asserted.
outcome.ops

govern decides; it does not mutate. The operations it returns are what you append to the ledger and apply to your own store.

Install

pip install endoxa

The core takes one dependency. Two packages need more and are opt-in:

pip install "endoxa[trace]"     # the ordered series of an agent's propositions
pip install "endoxa[coverage]"  # how densely rules connect predicates

Design notes

  • The solver is bundled and frozen. endoxa answers about consistency without reaching for an external prover. Its correctness is asserted differentially against Z3 in dev-only tests rather than by its own suite alone.
  • The ledger is the record, not a cache. Operations are appended; the current view is folded from them. An unsettleable conflict appears in that view as UNRESOLVED rather than as a silent choice.
  • Instruments are imported by nothing else. A measure its subject can reach is a measure its subject can move, so the dependency is forbidden by contract and checked in CI.
  • Requires Python 3.14+.

License

Apache-2.0. See LICENSE and NOTICE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

endoxa-0.0.1.tar.gz (83.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

endoxa-0.0.1-py3-none-any.whl (108.8 kB view details)

Uploaded Python 3

File details

Details for the file endoxa-0.0.1.tar.gz.

File metadata

  • Download URL: endoxa-0.0.1.tar.gz
  • Upload date:
  • Size: 83.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for endoxa-0.0.1.tar.gz
Algorithm Hash digest
SHA256 29e7ced8e81360164264e48850cac869d486ff3a786ef780d39f4e174b90cb6f
MD5 358ab3f7b186613f649fc84785afd39b
BLAKE2b-256 0d8071570287143a5c2ea0d10d8b3fa3b7ead5080aa54720663f3ab27f4454f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for endoxa-0.0.1.tar.gz:

Publisher: release.yml on noise01/endoxa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file endoxa-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: endoxa-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 108.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for endoxa-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1cb3f7472c370f53a4a163e10ebed90e75860458ec3adcbe61e525f345662cbf
MD5 1ebc755b6f16370674193e7c00882210
BLAKE2b-256 3150d6bd2d4349841d2c9f5b0a25604e0fcf0bb37c61f7aacbadfd54984b7a9a

See more details on using hashes here.

Provenance

The following attestation bundles were made for endoxa-0.0.1-py3-none-any.whl:

Publisher: release.yml on noise01/endoxa

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.4.0

2 files

0.3.0

2 files

0.2.1

2 files

0.2.0

2 files

0.1.1

2 files

0.1.0

2 files

This release

0.0.1 This release

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page