Skip to main content
Yanked

This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 0.1.0b5 instead.
Reason given by maintainers: README shipped stale install instructions pointing at 0.1.0b3; use 0.1.0b5

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.0b3). 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.0b3

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

Download files

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

Source Distribution

zabta_broker-0.1.0b4.tar.gz (54.3 kB view details)

Uploaded Source

Built Distribution

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

zabta_broker-0.1.0b4-py3-none-any.whl (45.6 kB view details)

Uploaded Python 3

File details

Details for the file zabta_broker-0.1.0b4.tar.gz.

File metadata

  • Download URL: zabta_broker-0.1.0b4.tar.gz
  • Upload date:
  • Size: 54.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.13

File hashes

Hashes for zabta_broker-0.1.0b4.tar.gz
Algorithm Hash digest
SHA256 debd8e7f8a5b3b2d3d2cc08574c7fa97cf64f79b6b59ea80a6a306708707748c
MD5 05a83c7b36d72459d2e1a46263d0e388
BLAKE2b-256 3661b7d7cc50921da454747d45123b1ea580d27db9c25175c3f896ce6b8cd3ef

See more details on using hashes here.

File details

Details for the file zabta_broker-0.1.0b4-py3-none-any.whl.

File metadata

  • Download URL: zabta_broker-0.1.0b4-py3-none-any.whl
  • Upload date:
  • Size: 45.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.13

File hashes

Hashes for zabta_broker-0.1.0b4-py3-none-any.whl
Algorithm Hash digest
SHA256 f9e88ba4ea8d9e966fbfbdc0329538891d3cd6c86414e30be487563c589d6596
MD5 81fb86db37eee1f47cbeb71540196aea
BLAKE2b-256 45abc2a388f7ae4b165f7c7a58e78548c95560c256dce06e846812221cc8dd5c

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.0b4 This release

2 files

0.1.0b1

2 files

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