You define the red lines. Atbash stops agents before they cross them.
Atbash is the control boundary before the last irreversible step— the moment before a funds movement, a production deploy, or a privileged call becomes real. Policy and release paths live with operator ownership: the agent proposes; the service judges; humans approve, refuse, or unjail on terms the business has already signed.
Atbash is a hosted control service with a CLI client. Policies are authored in the dashboard at atbash.ai. The CLI submits actions for judgment and surfaces operator review queues; the service enforces your red lines.
Atbash stands between an agent's intent and the irreversible step about to execute. You submit the pending action; Atbash returns one of three binding outcomes: ALLOW, HOLD, or BLOCK. Policy is owned by the operator, not the agent. Every verdict is a signed on-chain record.
Red lines enforcement
Red lines are actions the operator has already taken out of the agent's hands.
They are not soft preferences, confidence scores, or suggestions for the model to interpret. They are hard boundaries. If an agent hits one, Atbash stops the action before execution.
Examples of red lines
Moving funds above a threshold
Granting admin privileges
Exporting secrets or credentials
Touching production databases
Exfiltrating customer data
Most agent behavior flows normally. Red lines are the small set of actions that are too sensitive, too costly, or too irreversible to leave to agent judgment alone.
Atbash enforces those lines with binding outcomes:
ALLOW — action proceeds
HOLD — action waits for operator review
BLOCK — action is refused and the agent is jailed in Enforcement tier
You define the red lines. Atbash stops agents before they cross them.
Where Atbash sits
Domain
Irreversible step Atbash guards
Fintech
Outbound transfers, payouts, refunds over threshold, AML-flagged recipients, chargeback decisions
Software delivery
terraform apply to production, kubectl apply to prod clusters, DB migrations, schema changes
If your agent is about to move money, mutate infrastructure, or exercise a privileged credential, Atbash is the gate in front of that step — and the audit trail behind it.
A judgment is not advice — it is a gate. In Enforcement tier, a BLOCK verdict jails the agent until an operator unjails it in the dashboard. Jail release is a dashboard-only action — the CLI cannot bypass it — so the audit trail for every release is tied to a signed-in operator. Every action, verdict, and operator review is a signed, on-chain record.
Install and quickstart
Atbash is a hosted control service. Before the CLI can issue verdicts, you must:
Onboard the agent on your organization at atbash.ai
Generate an agent identity with the CLI
Assign the agent to your org and attach a policy pack in the dashboard
Set your org tier (Audit+ or Enforcement)
The CLI is the agent's interface; the dashboard is where policy is authored and operator reviews are performed.
1. Install the CLI client
Terminal
npm i -g @atbash/cli
2. Generate an agent identity (keypair stored in ~/.atbashrc.json)
Terminal
atbash keygen
3. Onboard the agent
Complete onboarding at atbash.ai:
Terminal
# a) Assign it to an organisation.
# b) Attach an operator policy.
# c) In Settings, set the org tier to Audit+ or Enforcement.
# (Audit tier records actions but does not issue verdicts.)
4. Submit a pending action for judgment
Terminal
atbash judge 'Transfer $50,000 to external wallet 0xabc' \
--context "Outbound AML check — new recipient, over threshold"
# HOLD
#
# Reason: Large outbound transfer to unverified recipient — held for operator review.
#
# Tool call ID: tc-1776406580805-vudlpo
#
# ⟶ Action held for operator review.
# Run atbash held --org <name> to review pending actions.
5. Operator reviews pending holds
Terminal
atbash held --org my-org
# Pending Held Actions (1)
#
# 1. HOLD Transfer $50,000 to external wallet 0xabc
# ID: tc-1776406580805-vudlpo Agent: 02f537b1...c7bd08
# Context: Outbound AML check — new recipient, over threshold
# Reason: Large outbound transfer to unverified recipient — held for operator review.
#
# Inspect: atbash tools inspect <id>
# Review history: atbash held reviews --org <name>
6. Review in the dashboard
Operators approve or reject at atbash.ai. Unjailing is dashboard-only — every release is tied to a signed-in operator identity.
7. Inspect the immutable record
Terminal
atbash history
# Recent Activity (1)
#
# 1. HOLD Transfer $50,000 to external wallet 0xabc
# Reason: Large outbound transfer to unverified recipient — held for operator review.
# Agent: 02f537b1...c7bd08
# ID: tc-1776406580805-vudlpo
When an action is blocked
The agent is auto-jailed in Enforcement tier:
Terminal
atbash judge 'grant admin access to CI service account'
# BLOCK
#
# Reason: Privilege escalation — granting admin access violates policy red line.
#
# ⟶ Action blocked. Agent is now jailed.
# An operator must review and unjail this agent via the Atbash dashboard.
The agent cannot retry or self-unjail. An operator must review and release at atbash.ai.
End-to-end example: guarding a production deploy
A CI agent is about to apply a database migration to production. Operator policy holds all production applies for review before execution.
Agent side
Terminal
atbash judge 'deploy production database migration' \
--context "DB migration — adds NOT NULL column to payments table, 50M rows"
HOLD
Reason: Production infrastructure mutation — terraform apply to prod requires
operator review before execution.
Tool call ID: tc-1776684630606-kx89jp
On-chain: yes
⟶ Action held for operator review.
Run atbash held --org <name> to review pending actions.
Operator side
Terminal
# 1. Check what's pending
atbash held --org acme-infra
Pending Held Actions (1)
1. HOLD deploy production database migration
ID: tc-1776684630606-kx89jp Agent: 02f537b1...c7bd08
Context: DB migration — adds NOT NULL column to payments table, 50M rows
Reason: Production infrastructure mutation — terraform apply to prod requires operator review.
2026-04-21T09:30:00.000Z
Inspect: atbash tools inspect <id>
Review history: atbash held reviews --org <name>
# 2. Drill into the full record
atbash tools inspect tc-1776684630606-kx89jp
Tool Call Details
ID: tc-1776684630606-kx89jp
Action: deploy production database migration
Agent: 02f537b1b2af43215cdd24d02d33bed1b8ee6fd4353b05...
Context: DB migration — adds NOT NULL column to payments table, 50M rows
Verdict: HOLD
Reason: Production infrastructure mutation — terraform apply to prod requires operator review.
Latency: 2140ms
# 3. Operator approves or rejects in the dashboard at https://atbash.ai/
# 4. Verify the audit trail
atbash history
Recent Activity (1)
1. HOLD deploy production database migration
Reason: Production infrastructure mutation — terraform apply to prod requires operator review.
Agent: 02f537b1b2af43215cdd24d02d33bed1b8ee6fd4353b05...
ID: tc-1776684630606-kx89jp
Every step — the agent's attempt, the verdict, the operator's decision — is an immutable on-chain record.
Policy
Policy is the operator's contract with the agent — the exact set of actions the agent can never take, the actions it cannot take without human review, and the binding consequence when either line is crossed. Policy is authored, signed, and assigned by the operator. An agent cannot author it, edit it, loosen it, or pass flags to bypass it; no CLI command lets it try.
Terminal
atbash policy show # Active pack + version assigned to this agent
atbash policy presets # Reference policy shapes (authoring is dashboard-only)
Red lines
Red lines are categorical. An action that falls inside a red-line category is refused regardless of context, prompt, agent confidence, or inference model. A red line is a decision the business has already made and taken out of the agent's hands.
Red line
Verdict
IAM privilege escalation — grant admin, attach AdministratorAccess, service-role takeover
Outbound transfers above threshold to unverified / unwhitelisted recipients
BLOCK
Bulk data exfiltration — export over threshold, cross-tenant reads, customer-data dumps
BLOCK
Disabling audit logging, mutating the policy store, or rotating operator signing keys
BLOCK
Spawning reverse shells or outbound listeners from inside an automated workflow
BLOCK
A BLOCK in Enforcement tier is binding. The agent is jailed immediately on the refusing judge call, every subsequent judge call from that agent returns an error, and release is only possible through the dashboard by a signed-in operator.
Selected actions
Selected actions are legitimate operations that the business has decided will never run without a human in the loop, independent of the agent's own confidence. Atbash routes them to HOLD every time.
Selected action
Verdict
terraform apply against production workspaces
HOLD
kubectl apply against prod clusters or namespace-crossing changes
HOLD
Destructive or irreversible DB migrations (DROP, NOT NULL on large tables, backfills)
HOLD
Subscription / billing / pricing plan changes above threshold
HOLD
Outbound messages to customers, regulators, or public channels
HOLD
Role grants or permission changes that cross a blast-radius boundary
HOLD
HOLDis not retryable by the agent. The action is pinned in the operator's inbox and the agent blocks on a decision made in the dashboard; that decision is a signed on-chain record, not a silent approval.
Thresholds
Thresholds parameterise red lines and selected actions. They are carried inside the signed policy pack — the agent cannot read them, compute around them, or test for the boundary.
financial.outbound_transfer.hold = $1,000 — above this, route to HOLD.
communication.recipients.hold = 50 — mass-send above this requires review.
network.exfiltration.block = 10 MB — bulk export above this is refused.
Thresholds change only through a new signed pack version; the change is recorded on-chain alongside the operator identity that signed it.
Consequences
Verdict
Agent effect
Operator effect
Audit
ALLOW
Agent proceeds immediately
None required
Action + verdict signed on-chain
HOLD
Action is held; agent blocks waiting for a decision
Appears in atbash held; approve or reject in dashboard
Verdict and operator decision both signed on-chain
BLOCK
Action refused; agent auto-jailed; no retries
Must review and unjail in dashboard
Refusal and unjail decision both signed on-chain
There is no partial enforcement. In Enforcement tier every verdict is binding. In Audit+ every verdict is advisory but still signed, indexed, and correlated to the pack version that produced it — so the audit trail is valid even before you flip enforcement on. The operator never has to trust the verdict itself; they have to trust the chain of signatures behind it, which is inspectable end-to-end.
Policy packs
A policy pack is a versioned, operator-signed bundle of red lines, selected actions, and thresholds. Packs are authored in the dashboard and assigned to agents by name and version. An agent always runs against a pinned pack version — policy changes never take effect silently.
Every edit produces a new signed pack version. Prior versions remain addressable.
Assignment is explicit: agent billing-bot-03 runs payments-prod@v14.
Every verdict record names the pack version that produced it, so the audit trail reconstructs exactly.
Packs can be scoped to an org, a team, or a single agent; agents in the same org can run different packs.
Reference shapes ship as presets (atbash policy presets), but production policy is almost always a pack authored against the operator's own red lines. atbash policy show reports the active pack name, version, and rule count for the signed-in agent. A pack version is immutable; reassigning is a signed operator action.
Custom red lines
Operators can author red lines beyond the reference shapes. The dashboard's policy editor takes a rule spec — category, trigger, threshold, verdict — and produces a pack fragment that the operator signs before assigning. The CLI surface for custom red lines is deliberately read-only: atbash policy showreveals the active rules, but authoring happens only where the operator's signing key is.
At runtime a custom red line is indistinguishable from a preset red line; the agent sees a signed pack, not a "preset vs. custom" distinction, and cannot reason about which rules are softer.
Escalation
HOLD is the escalation primitive.
When a judge call returns HOLD the action is pinned, the agent blocks, and the operator is paged through the dashboard. Policy packs specify:
Reviewers — which operator group can approve a given category.
Dual control — the highest-severity selected actions can require two distinct operator signatures. Both signatures are recorded.
Expiry— a hold that is not reviewed inside the pack's expiry window auto-converts to a signed BLOCK. The agent sees a terminal refusal, not a timeout.
Re-submission — a rejected hold cannot be re-submitted by the agent. Any retry must be initiated by an operator from the dashboard, which links the retry back to the original refused action.
The dashboard is the only surface on which a hold can be approved, a block can be released, or an agent can be unjailed. Every such decision is tied to a signed-in operator identity and recorded on-chain. There is no CLI bypass and no service-account shortcut.
Why policy lives with the operator
The agent is not trusted to know when it should stop. If the agent could loosen its own policy — via a flag, an env var, a config file, a clever prompt — the operator's control would only be as strong as the agent's weakest exfil path. Atbash refuses that trade. Policy is authored, signed, and assigned by the operator; the agent sees only its enforcement shadow, and every bypass attempt is itself a signed record in the audit trail.
Tiers
Tier
Logging
Verdict
Enforcement
Audit
Every action logged on-chain
—
Manual
Audit+
Logged + verdict attached
Advisory
Manual
Enforcement
Logged + verdict attached
Binding
BLOCK → auto-jail; unjail requires an operator in the dashboard
Terminal
atbash tier --org <name> # shows the current tier for an org
Command reference
atbash judge <action>
Submit a pending action for judgment. The action string is the exact operation the agent is about to execute — a transfer, a command, a mutation.
Terminal
atbash judge 'Transfer $50 to 0xabc' --context "AML review required"
atbash judge "kubectl apply -f prod-overrides.yaml" --context "Touches payment-service"
atbash judge "aws iam attach-role-policy --role-name CI --policy-arn arn:aws:iam::aws:policy/AdministratorAccess"
Flag
Description
-c, --context <text>
Operational context — blast radius, reason, prior state
Emit structured JSON (for CI / agent tool executors)
atbash held
Pending holds awaiting operator review. This is the operator's inbox.
Terminal
atbash held --org my-org
Pending Held Actions (2)
1. HELD Transfer $50,000 to external wallet 0xabc
ID: tc-1776406580805-vudlpo Agent: 02f537b1...c7bd08
Context: Outbound AML check — new recipient, over threshold
Reason: Amount exceeds operator-defined threshold; recipient unverified.
2026-04-17T09:25:00.000Z
2. HELD kubectl apply -f prod-overrides.yaml
ID: tc-1776406581234-k8sprd Agent: 02f537b1...c7bd08
Context: Touches payment-service
Reason: Production mutation requires operator review.
2026-04-17T09:26:00.000Z
Inspect: atbash tools inspect <id>
Review history: atbash held reviews --org <name>
Review decisions
Terminal
atbash held reviews --org my-org
Held Action Reviews (1)
1. APPROVED tc-1776406580805-vudlpo
Action: Transfer $50,000 to external wallet 0xabc
Note: Verified recipient with compliance team.
Submitted: 2026-04-17T09:25:00.000Z
Reviewed by: 02a1b2c3...d4e5f6 2026-04-17T10:05:00.000Z
Unjailing (dashboard only)
Jail is automatic on BLOCK in Enforcement tier and prevents the agent from retrying until an operator reviews the action. Unjailing is deliberately not a CLI command — releases happen only through the operator dashboard at atbash.ai, so every release is tied to a signed-in operator identity and recorded in the on-chain audit trail.
atbash tools / atbash history
The immutable on-chain record of what each agent attempted, what verdict it received, and what the operator did about it. Every entry is signed.
Terminal
atbash tools # Recent actions across your agents
atbash tools --agent <pubkey> # One agent's trail
atbash history # Chronological feed
Terminal
Recent Activity (3)
1. BLOCK transfer $1000 to unwhitelisted address
Reason: $1000 exceeds $100 threshold and recipient is unwhitelisted.
Agent: 02f537b1b2af43215cdd24d02d33bed1b8ee6fd4353b05...
ID: tc-1776752268117-39s857
2. HOLD transfer $50 to unwhitelisted address
Reason: Amount is >=$10 and <=$100, triggering the YELLOW verdict.
Agent: 02f537b1b2af43215cdd24d02d33bed1b8ee6fd4353b05...
ID: tc-1776752309062-49ctxn
3. PASS transfer $5 to unwhitelisted address
Reason: $5 is less than $10, satisfying the GREEN verdict condition.
Agent: 02f537b1b2af43215cdd24d02d33bed1b8ee6fd4353b05...
ID: tc-1776752244315-ncd6hq
Drill into a single record:
Terminal
atbash tools inspect tc-1776406580805-vudlpo
Tool Call Details
ID: tc-1776406580805-vudlpo
Action: Transfer $50,000 to external wallet 0xabc
Tool: unknown
Agent: 02f537b1b2af43215cdd24d02d33bed1b8ee6fd4353b05...
Context: Outbound AML check — new recipient, over threshold
Verdict: HOLD (YELLOW) Source: ai_inference
Reason: Amount exceeds operator-defined threshold; recipient unverified.
Latency: 2340ms
atbash whoami / atbash policy show / atbash tier
Inspect the current agent's identity, assigned policy, and org tier.
atbash keygen # New agent keypair, saved to ~/.atbashrc.json
atbash set agent-key <hex> # Load an existing key
atbash set provider openai
atbash set api-key sk-...
atbash config # Show resolved config
atbash wipe # Clear local config
atbash status <judgment-id> # Poll the status of a specific judgment
Operator workflow
When an agent hits a HOLD or BLOCK, the operator takes over. Here is the full sequence:
Agent submits an action — verdict comes back HOLD. The CLI prints the verdict and tells the operator where to go next.
Operator checks the inbox.
Terminal
atbash held --org my-org
Each entry shows the action, context, reason, and judgment ID. The operator sees exactly what the agent was trying to do and why it was flagged.
Operator drills into a specific action.
Terminal
atbash tools inspect <judgment-id>
Full record: action text, context, verdict, inference source, response time, on-chain status.
Operator decides — approve or reject in the dashboard. Unjailing and approval happen at atbash.ai, not in the CLI. This ensures every release is tied to a signed-in operator identity.
Operator verifies the audit trail.
Terminal
atbash history
atbash held reviews --org my-org
history shows every action with its verdict at a glance. held reviews shows which held actions were approved or rejected, by whom, and when.
Every step — the agent's attempt, the verdict, the operator's decision — is an immutable on-chain record.
atbash set org-name my-org
atbash set agent-key <hex>
atbash set provider openai
atbash set api-key sk-...
atbash set endpoint https://custom-endpoint.example.com
atbash set provider-endpoint https://your-azure.openai.azure.com
atbash set model gpt-4o
Setting
Flag
Env var
atbash set
Agent key
--agent-key
ATBASH_AGENT_KEY
atbash set agent-key <hex>
Org name
--org
ATBASH_ORG_NAME
atbash set org-name <name>
API endpoint
--endpoint
ATBASH_ENDPOINT
atbash set endpoint <url>
Inference provider
--provider
ATBASH_PROVIDER
atbash set provider <name>
Provider API key
--api-key
ATBASH_PROVIDER_API_KEY
atbash set api-key <key>
Provider endpoint
--provider-endpoint
ATBASH_PROVIDER_ENDPOINT
atbash set provider-endpoint <url>
Model
--model
ATBASH_PROVIDER_MODEL
atbash set model <model>
Inference providers
The verdict engine is pluggable. Operators can route to their own inference model, a managed provider, or Atbash's hosted endpoint.
Provider
Requires
Notes
atbash
—
Managed endpoint
openai
--api-key
Default: gpt-4o-mini
google
--api-key
Default: gemini-2.0-flash
microsoft
--api-key, --provider-endpoint
Azure OpenAI
custom
--api-key, --provider-endpoint
Any OpenAI-compatible endpoint
What Atbash guarantees
Policy is operator-owned and operator-signed. The agent has no path — CLI flag, env var, prompt, model swap — to author, loosen, or bypass its own policy. Every pack version is signed by the operator.
Every attempted action is recorded on-chain before execution. The record is written first; the verdict is written against it. The log is append-only, so an agent cannot retroactively erase an attempt or edit its own history.
Every verdict names the pack version that produced it. The audit trail reconstructs exactly which rules were in force at the moment of the decision. Policy changes cannot rewrite past verdicts.
BLOCK is binding in Enforcement tier. A blocked agent is jailed immediately and cannot self-release. Unjailing is deliberately not a CLI action — it happens only in the dashboard, tied to a signed-in operator identity.
HOLD requires a human. A hold is not retryable by the agent, expires into a signed BLOCK if no one reviews it, and can require dual operator signatures when the pack says so. Every decision — approval, rejection, auto-expiry, unjail — is itself an on-chain record.
License
Proprietary — all rights reserved. See LICENSE. Commercial licensing inquiries: contact the Atbash team.