Governed agent swarms · in your VPC

Run AI agents your auditors can verify.

Agent swarms inside your VPC — capability-bounded, hash-chain audited, quality-gated.

run #4812 · Support triagegoverned
documents.search31 tickets · 0.4s
data.cluster4 themes · 1.1s
http.request → stripe.comdenied · out of scope
eval · golden-suitePASS · contains, shape
sha256 3a9f…c17chain verified·no data left VPC
A real run: two tool calls allowed, one denied out of scope, the verdict and hash chain recorded.

100%

tool calls audited

0

data leaves your VPC

sha-256

tamper-evident chain

your model

Anthropic · OpenAI · Ollama

Governance is the product.

Self-hostable, capability-scoped, fully audited, quality-gated, model-agnostic — one engine, on your infrastructure.

Capability bounds
Per-agent allowed domains and denied tools, fail-closed. Dry-run the guard before it goes live.
Audit trail
Every tool call, approval, and config change in a sha-256 hash chain. Replay and verify on demand.
Quality gates
Golden-suite evals score each run. Failing runs self-heal — retry or replan to an alternate agent.
Approvals
Policy-driven human gates by risk level, cost, and domain. Timed-out approvals park the run, not the worker.
Cost control
Per-org budgets, per-run cost caps, daily quotas, and a kill switch for runs that blow their ceiling.
Deployment
Self-hosted in your VPC. Bring your own model — Anthropic, OpenAI-compatible, or local. Air-gap friendly.

Every step visible while it runs.

Agents stream each tool call as a live, attributable feed — the same one your operators see in the console.

  • Roles for sales, finance, support, operations, marketing, and risk
  • Install from the catalog or author your own
  • Approval gates route high-risk actions to a human
Bahini · Sales agentLive

A typed SDK over the same governed API.

Everything the console does, your code does — same capability bounds, same audit trail. Dependency-free.

quickstart.ts@bahini/sdk
import { BahiniClient } from "@bahini/sdk";

const bahini = new BahiniClient({
  apiKey: process.env.BAHINI_API_KEY!,
});

const done = await bahini.runAgentAndWait("agent_123", {
  prompt: "Summarize last month's sales by division.",
});

console.log(done.run.status); // "COMPLETED"

Put agents in front of your auditors, not your incident channel.