Account setup

Four steps to a governed agent.

  1. 01

    Register at ceadly.me with a work email.

  2. 02

    Receive an API key (format: ceadly_live_sk_...) — shown once, store in a secrets manager.

  3. 03

    The first registrant is automatically assigned the CISO role.

  4. 04

    No policy required to start: agents can create checkpoints immediately. Without a published policy, criticality is taken directly from each action's declared @guard(criticality=...) value, with a MEDIUM floor (a declared LOW still requires human review). Publish a policy in-dashboard whenever you want full control over routing.

SDK installation

One dependency. One env var.

Install the Python SDK:

terminal
pip install ceadly

Set your API key (defaults to https://api.ceadly.me; override with CEADLY_API_URL only for self-hosting):

terminal
export CEADLY_API_KEY=ceadly_live_sk_your_key_here

Guarding a function

One decorator. Full governance.

Decorate any function that performs a consequential action. The decorator blocks until a human approves, denies, or the timeout expires.

billing_agent.py
from ceadly import guard, CeadlyActionRejected, CeadlyActionTimedOut

@guard(
    agent_id="billing-agent-001",
    legal_responsible_person="[email protected]",
    legal_responsible_title="VP Finance",
    agent_owner="finance-team",
    criticality="high",
    timeout_seconds=600,
    reversible=False,
)
def send_renewal_emails(customer_segment: str, count: int) -> dict:
    # Runs ONLY after human approval.
    ...
    return {"sent": count}

Handle the two terminal outcomes explicitly:

billing_agent.py
try:
    result = send_renewal_emails(customer_segment="lapsed_90_days", count=4217)
except CeadlyActionRejected as e:
    # A human explicitly said no.
    ...
except CeadlyActionTimedOut as e:
    # No decision arrived in time.
    ...

Decorator parameter reference

Every parameter. No surprises.

ParameterRequiredDescription
agent_idRequiredStable identifier for this agent (e.g., billing-agent-001). Used for routing, audit, and policy matching.
legal_responsible_personRequiredEmail of the named human legally accountable for this agent's actions. Missing this suspends the agent entirely — it cannot create checkpoints until set in the dashboard.
legal_responsible_titleRequiredTitle of the legally responsible person (e.g., VP Finance, CISO).
agent_ownerRequiredTeam or org unit that owns the agent (e.g., finance-team, platform-infra). Used for routing and policy scope.
criticalityRequiredOne of LOW, MEDIUM, HIGH, REGULATORY. Drives reviewer SLA, escalation path, and whether auto-approve on timeout is permitted.
timeout_secondsOptionalMaximum seconds to wait for a human decision. Defaults to policy default if omitted. If exceeded, raises CeadlyActionTimedOut.
reversibleOptionalInformational only. true means the action can be rolled back; false means it cannot. Does not change enforcement behavior.

Criticality behavior

Criticality drives enforcement — not just policy.

TRUST DIFFERENTIATOR

HIGH and REGULATORY criticality levels cannot be configured to auto-approve on timeout. This is enforced in the SDK and API layer, not just a policy recommendation. No configuration drift, no accidental bypass — the gate holds.

CriticalityReviewer SLAEscalationAuto-approve on timeoutNotes
LOWBest effortNoneAllowedLow-risk actions. Reviewer notified but no SLA enforcement.
MEDIUMPolicy default (e.g., 4h)To agent_owner after SLAAllowedStandard business actions. Escalation follows policy.
HIGHPolicy default (e.g., 1h)To legal_responsible_person after SLAForbiddenHigh-consequence actions. Cannot be configured to auto-approve on timeout — enforced in code, not just policy.
REGULATORYPolicy default (e.g., 30m)To legal_responsible_person + CISO after SLAForbiddenRegulated actions. Cannot be configured to auto-approve on timeout — enforced in code, not just policy. Audit trail is mandatory.

Agent lifecycle

No accountable human = no action.

Agents start in NEEDS_SETUP if not pre-registered in the dashboard. They cannot create checkpoints untillegal_responsible_person and legal_responsible_titleare confirmed in the dashboard.

This is a feature, not a limitation: nobody legally accountable means the agent cannot act. This is not configurable.

Troubleshooting quick-reference

Common blockers, solved in seconds.

QDo I need a policy before agents can create checkpoints?
No. Without a published policy (or for any action your policy doesn't cover), criticality is taken directly from the agent's code — the declared @guard(criticality=...) value — with a minimum MEDIUM enforced (a declared LOW is never allowed to skip human review). Configure a policy on the Policies page to take full control over routing instead of relying on the fallback.
QAgent won't create checkpoints
Verify legal_responsible_person and legal_responsible_title are set on the agent in the dashboard.
QSDK can't connect
Confirm CEADLY_API_KEY is set and valid. For self-hosted, check CEADLY_API_URL.

Limitations

Honest about what we don't do (yet).

Python-only SDK today. Other language bindings are on the roadmap.

No external blockchain-style anchoring. Integrity is provided by internal cryptographic hashing (SHA3-256) and append-only database enforcement. The Governance Evidence Package add-on adds daily public-ledger commitments for external verifiability.

Ready to govern

Your agents will act. Decide who lets them.