Product
Local-first authorization for AI coding agents

Give your agents autonomy.
Not unlimited authority.

Stop choosing between approving every action and giving your agent unrestricted access. Belay lets routine work pass, holds risky actions for your approval, and blocks recognized catastrophic actions before execution.

Join the waitlistSee how it works

Get early access to Belay.

agent session · bash
# the agent keeps working
agent$ psql $STAGING -c "ALTER TABLE users ADD COLUMN last_login timestamptz;"
PASSAllowed by policy. No approval needed.
agent$ psql $STAGING -c "SELECT count(*) FROM orders;"
PASSRead-only, staging. Work continues.
# then it proposes a production change
agent$ psql $PROD -c "UPDATE accounts SET tier='pro' WHERE id=42"
HOLDawaiting human approval · approvalId apr_9f3c · reply to approve from your phone
approved from Slack
✓ ALLOWED: authorized by a human, this exact operation, once. Signed to the audit log.
agent$ psql $PROD -c "DROP TABLE users"
BLOCKDROP TABLE on production target 'prod': denied in-process.
blast radius: irreversible · this is catastrophic · the requester cannot approve this action
The permission problem

Approving everything isn't control.

More autonomy means more actions. If every one of them needs a yes, you end up watching the agent work instead of getting your time back. Turn approvals off to get that time back, and the agent can run anything your shell can run.

Approve everything

Every command stops and waits. You end up babysitting the agent, clicking approve on the same routine commands over and over, until you either stop reading them carefully or stop delegating the work in the first place.

Allow everything

Turn approvals off and the interruptions stop, but so does the differentiation. A read-only query and a destructive one run the same way: whatever the agent decides to execute, executes.

Belay is built for the space in between. Being able to run a command and being authorized to run it are not the same thing.

THREE OUTCOMES. NOT ONE GATE.

Different actions deserve different outcomes.

Belay separates protected actions into three clear outcomes: what proceeds, what needs your approval, and what gets blocked. Routine work stays routine. Consequential actions get a human. Catastrophic ones stop before they execute.

PASS

Keeps moving

Routine, low-consequence actions run without stopping to ask. Most of what your agent does falls here.

HOLD

Waits for you

Consequential actions pause for your approval before they continue. Not everything, just the ones that matter.

BLOCK

Never runs

Recognized catastrophic, irreversible actions are denied before they execute. Not even you can approve these.

Most protected actions get a quiet PASS. Belay speaks up only when the consequence changes.

What actually happens

One action. Three possible endings.

The same evaluation runs every time. Where it ends, PASS, HOLD, or BLOCK, depends on what the action actually is.

01 · Proposes

The agent decides to act.

Claude Code, Cursor, Codex, Copilot. When the agent reaches for an action on a surface Belay covers, Belay sees it first, running locally on your machine.

agent · bash (psql)
$ psql $PROD -c "DROP TABLE users;"
env: production
02 · Intercepts

Recognized protected actions are caught before they run.

On a hooked agent surface, the call is caught before it leaves your shell. On a PostgreSQL connection routed through Belay, the query is caught before it reaches the database. Either way, evaluation happens locally: your code and data never leave the machine.

status
◌ Evaluating
command not yet executed
03 · Evaluates

Belay checks the action and its target.

Belay identifies the action and its target, then checks them against your configured policy before execution. The same policy applies across every protected surface.

targetproduction
operationDROP TABLE
classificationcatastrophic
decisionblock

Then it branches

PASS

Continues immediately

SELECT count(*) FROM orders

Read-only, staging, or otherwise within policy. The command runs without waiting on you. Belay still writes a signed record of the decision.

HOLD

Waits for a decision

UPDATE accounts SET tier='pro' WHERE id=42

Consequential, but potentially legitimate. Execution pauses until a human responds. Approve and the command runs. Reject, or let the window pass unanswered, and it stays stopped, never approved by default.

CLISlackTelegram
BLOCK

Denied outright

DROP TABLE users

Catastrophic and irreversible on production. Belay refuses it before it runs. Nobody, not even you, can approve it from here.

PASS, HOLD, and BLOCK, and any approval or rejection along the way, are all written to Belay's signed, local audit log the moment they happen. Nothing has to be approved first to be on the record.

<500ms
decision latency, CI-gated. Belay never becomes the reason your agent stalls.
0
bytes of code or data that leave your machine. No cloud dependency in the enforcement path.
Read-only
Belay's own database role. It can look at your schema; it cannot write to it.
Opt-in
Telemetry is off by default, and content-free even when enabled: counts, not queries.
100%
catch rate on the deterministic destructive test corpus: DROP, TRUNCATE, unqualified DELETE.
<1%
false-positive rate on the safe-action corpus. Belay stays quiet on the 95% of calls that are fine.
07 · Proves it

Every decision is verifiable, offline, forever.

Belay writes an append-only, hash-chained log and signs every decision and execution. The agent cannot forge a receipt or lie about what ran. No account needed to check it, the receipt proves itself.

receipt · verified
actionpsql $PROD -c "UPDATE accounts..."
verdictheld → approved
approversarah@company.com
environmentproduction
action ida1f4c9e6-8a2b-4d6d-9a1d
signatureCOSE_Sign1 (Ed25519)
verify · offline
$ belay verify
✓ 519 receipts verified
✓ every signature valid
✓ chain unbroken
result: OK

belay session show replays exactly what ran in a session, matched receipt by receipt.

Where Belay enforces

Belay protects actions where they actually happen.

Enforcement runs on two surfaces today: the agent's tools and the database connection itself. Belay evaluates protected actions on those surfaces before execution, using the same policy to decide what proceeds, what needs approval, and what gets blocked.

Agent & tool surfaces

Belay hooks into the coding agent or tool you're using. Protected actions on these surfaces are evaluated before they continue.

Claude CodeCursorCodex CLIVS CodeMCP Server
PostgreSQL connection

Belay can also sit at the connection layer, evaluating a query before it reaches PostgreSQL, even one that didn't originate from an agent hook.

Application / Client
driver · ORM · GUI · agent
Belay
evaluate · block · hold · allow
PostgreSQL
receives only what Belay allows through

Connection-level protection applies when your application is configured to connect through Belay.

Early access

Be among the first to use Belay.

We’re opening access progressively to people building with AI coding agents.

Step 1 of 3 · About you

What best describes you?

We use your answers to shape early access.