Deterministic pre-execution authority layer for AI agents.
Project description
predicate-authority
predicate-authority is a deterministic pre-execution authority layer for AI agents.
It binds identity, policy, and runtime evidence so risky actions are authorized
before execution and denied fail-closed when checks do not pass.
Docs: https://www.PredicateSystems.ai/docs Github Repo: https://github.com/PredicateSystems/predicate-authority
Core pieces:
PolicyEnginefor allow/deny + required verification labels,ActionGuardfor pre-actionauthorize/enforce,LocalMandateSignerfor signed short-lived mandates,InMemoryProofLedgerand optionalOpenTelemetryTraceEmitter,- typed integration adapters (including
sdk-pythonmapping helpers), - control-plane client primitives for shipping proof and usage batches to hosted APIs,
- local identity registry primitives (ephemeral task identities + local flush queue).
Quick usage example
from predicate_authority import ActionGuard, InMemoryProofLedger, LocalMandateSigner, PolicyEngine
from predicate_contracts import (
ActionRequest,
ActionSpec,
PolicyEffect,
PolicyRule,
PrincipalRef,
StateEvidence,
VerificationEvidence,
)
guard = ActionGuard(
policy_engine=PolicyEngine(
rules=(
PolicyRule(
name="allow-orders",
effect=PolicyEffect.ALLOW,
principals=("agent:orders",),
actions=("http.post",),
resources=("https://api.vendor.com/orders",),
),
)
),
mandate_signer=LocalMandateSigner(secret_key="replace-with-strong-secret"),
proof_ledger=InMemoryProofLedger(),
)
request = ActionRequest(
principal=PrincipalRef(principal_id="agent:orders", tenant_id="tenant-a"),
action_spec=ActionSpec(
action="http.post",
resource="https://api.vendor.com/orders",
intent="create order",
),
state_evidence=StateEvidence(source="backend", state_hash="sha256:example"),
verification_evidence=VerificationEvidence(),
)
decision = guard.authorize(request)
print("allowed=", decision.allowed, "reason=", decision.reason.value)
Entra compatibility demo (capability-gated OBO)
python examples/delegation/entra_obo_compat_demo.py \
--tenant-id "$ENTRA_TENANT_ID" \
--client-id "$ENTRA_CLIENT_ID" \
--client-secret "$ENTRA_CLIENT_SECRET" \
--scope "${ENTRA_SCOPE:-api://predicate-authority/.default}"
Local IdP quick example
from predicate_authority import LocalIdPBridge, LocalIdPBridgeConfig
from predicate_contracts import PrincipalRef, StateEvidence
bridge = LocalIdPBridge(
LocalIdPBridgeConfig(
issuer="http://localhost/predicate-local-idp",
audience="api://predicate-authority",
signing_key="replace-with-strong-secret",
token_ttl_seconds=300,
)
)
token = bridge.exchange_token(
PrincipalRef(principal_id="agent:local", tenant_id="tenant-a"),
StateEvidence(source="backend", state_hash="sha256:local-state"),
)
print(token.provider.value, token.access_token[:24] + "...")
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
predicate_authority-0.3.0.tar.gz
(34.8 kB
view details)
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