Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Zabta Broker

A local credential-broker daemon that keeps API keys out of your AI agents' hands.

Instead of pasting secrets into agent configs and environment variables, you store them in an encrypted local vault. Agents request a credential at the moment of use; the Broker verifies the agent's identity, evaluates policy, checks budgets, and either issues a short-lived lease, denies the request, or escalates to a human for approval. Every decision is written to a local audit log.

Pre-release (0.1.0b6). This is an early beta: the wire protocol, CLI, and policy model may change without notice between releases. Evaluate it, but do not put production credentials behind it yet.

Install

pip install zabta-broker==0.1.0b6

While the Broker is in beta, install each release by explicit version — pip only resolves pre-releases when named exactly (and --pre would opt your whole dependency tree into pre-release versions).

Requires Python 3.10+ on macOS or Linux.

Quickstart

# 1. Store a secret in the encrypted local vault
zabta-broker vault add --provider stripe --scopes charges:create

# 2. Start the daemon (binds to 127.0.0.1:9477 — loopback only)
zabta-broker start

# 3. Connect to the Zabta control plane (policies, approvals, dashboards)
#    Requires a Starter plan or above — see https://zabta.ai/pricing
zabta-broker register --api-key <your-zabta-api-key>

Connecting a Broker to the Zabta cloud is a paid-plan capability; on Free, register returns a message pointing you to the pricing page rather than a bare error. A standalone local Broker (no cloud policies) runs on any plan.

On the agent side, use the zabta SDK. Set ZABTA_AGENT_ID to your agent's id (shown in the Zabta dashboard) — the SDK derives the agent's identity from it (did:zabta:<agent id>), and the Broker learns the same identities from cloud sync, so nothing else needs configuring:

export ZABTA_AGENT_ID=<your agent id>
import zabta

with zabta.credential("stripe", ["charges:create"]) as key:
    ...  # `key` is a fresh checkout; use it now, don't store it

To run the Broker as a background service (launchd on macOS, systemd on Linux):

zabta-broker install-daemon

How a request is decided

Each credential request runs through a seven-step pipeline:

  1. Identity — unknown or unregistered agent DIDs are hard-denied.
  2. Policy load — applicable policies are read from the local policy cache.
  3. Evaluation — policies are evaluated locally (default deny when nothing matches).
  4. Budget — an allowed request that would exceed a spend budget is downgraded to a denial.
  5. Enforce or observe — policies in observe mode always issue the credential but record what would have happened, so you can trial a policy without breaking an agent.
  6. Issue or refuse — an allowed request gets a short-lived lease on the secret; a denial gets a reason.
  7. Audit — every path, including denials, writes an audit record. Redacted summaries (agent DID fingerprints, no secret material) sync to the Zabta cloud.

The Broker's local policy evaluation builds on Microsoft's agent governance toolkit (agent-os-kernel).

Scope — what the Broker does and does not do

We would rather you know exactly where the boundary is:

  • Enforcement happens at credential checkout. Policy is evaluated when an agent requests a credential. Once a secret has been handed to the agent process, the Broker does not intercept or mediate what that process does with it.
  • The lease TTL bounds the lease record, not the secret. When a lease expires, the agent must come back through policy to get the credential again — but expiry does not revoke, rotate, or invalidate the secret value already issued. Rotation remains your (or your provider's) responsibility.
  • Policies are managed in the Zabta cloud control plane. The Broker pulls policies from your Zabta account and enforces a locally cached copy; approval verdicts are decided in the cloud (by your team, in the dashboard) and polled by the Broker. Offline, the Broker keeps enforcing the last-synced policies. An unregistered Broker has no policies, and no policy means deny by default.
  • Loopback plus a session token, not a network service. The daemon refuses to bind to anything but 127.0.0.1, and requests must present a per-session token from a 0600 file. This protects against the network, not against other processes running as your own user — anything that can read your files can read that token.

Security model

  • The vault is encrypted at rest; the master key lives in your OS keychain (macOS Keychain / Secret Service), not on disk next to the data.
  • The session token file and vault database live in ~/.zabta-broker/, owner-readable only.
  • Audit records synced to the cloud are redacted: agent DIDs are fingerprinted, secret values never leave the machine.

License

MIT © Zainova Labs LLC

Metadata

Release files for zabta-broker 0.1.0b6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for zabta-broker 0.1.0b6
File Size Uploaded Provenance
zabta_broker-0.1.0b6.tar.gz 62.3 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for zabta-broker 0.1.0b6
File Interpreter ABI Platform
zabta_broker-0.1.0b6-py3-none-any.whl Python 3 none any Details

Total release size: 109.7 kB

Release files / zabta_broker-0.1.0b6.tar.gz

Download URL zabta_broker-0.1.0b6.tar.gz
Size 62.3 kB
Tags Source
SHA-256 checksum
How to use checksums
1bd63367b5027923155d48e2b3a23ec87fc9ddb9642e8a0895d61a6350e92bc9
BLAKE2b-256 checksum
How to use checksums
9dea7c6eed0a8a2686eb30199ebc14a55c89b0cf46a416a3fc69b2675179bed2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Release files / zabta_broker-0.1.0b6-py3-none-any.whl

Download URL zabta_broker-0.1.0b6-py3-none-any.whl
Size 47.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b27abd0b0b9cbdd7ef0fad59060d0321ed376d9b05724c247b18c3d4d4f5669b
BLAKE2b-256 checksum
How to use checksums
59d7cf2f5e0ce5d00e9a58c6bab3f9122da83781c99968d1ccb723a88791bec2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.13

Security for zabta-broker 0.1.0b6

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.

Release history Release notifications | RSS feed

This release
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page