Identity · Scopes · Approvals · Audit

Give your agents a valet key, not your house keys.

AgentValet is a broker. It sits in the call path between your agents and the real systems they reach. Each agent gets a scoped identity (it can only call what you granted, nothing else). Risky calls wait for approval-as-policy (a human okays the action before it runs). Every action leaves a receipt you can hand an auditor.

Govern the agents you already run, wherever they run. No new runtime to adopt, no sandbox to migrate onto.

npm: @agentvalet/register 30 platforms live append-only audit · INSERT-only RLS Okta SSO live

Free tier, no card. Live in 5 minutes, or we'll wire your first agent with you on a call.

audit · liveagent: invoice-processor
14:02:11github · repo.read · acme/ledger-service✓ ALLOW
14:02:13slack · chat.write · #finance-ops✓ ALLOW
14:02:19stripe · charge.create · $4,200.00⏸ HOLD
14:02:24gmail · mail.delete · all✕ DENY
append-only · INSERT-only RLSsigned RS256
A governed agent on a finance workflow: allowed, held for approval, denied, every decision logged.
Why this exists

Built by someone who runs this in production.

Edwin Ashdown, founder of AgentValet

"Dharmesh Shah, co-founder and CTO of HubSpot, described a valet key for AI agents: one that starts the car but won't open the boot or the front gate. I commented that I might build it. Then I did. I write the code, run it in production, and I've spent fifteen years in regulated Australian environments where a leaked credential is a genuinely bad day."

Edwin Ashdown · Founder, AgentValet · Brisbane · LinkedIn
The default we reject

House key or valet key? Most agents are running with the wrong one.

● House key agent, today's default
Full keyring. Every door.

The agent inherits your raw API keys. It can read your email, write to your database, push to production, spend money, and delete files. None of that was intentional. It's just what "give the agent access" looks like with no governance in between.

  • No cryptographic identity per agent
  • No scope limits on what it can call
  • No human gate on risky actions
  • Revoking means rotating every key it touched
● Valet key agent, with AgentValet
Starts the car. Nothing else.

Each agent has its own RS256 identity (a signing key that proves which agent is calling), granted only the scopes it actually needs. Risky calls pause for a human. Every action writes an append-only receipt. Revoke one agent in a click and nothing else is touched.

  • Cryptographic identity per agent (RS256, so calls are attributable)
  • Deny-by-default scopes (nothing is allowed until you grant it)
  • Approval-as-policy (a human okays the action before it runs)
  • One-click revocation, instant and cascading
See it decide

One instruction, three actions, six gates.

A walkthrough of the real decision path: policy, scope, approval, vault, proxy, audit. Flip the switch in the demo header to compromise the agent, then watch the same six gates stop it before a credential is ever issued.

Interactive. Starts when it scrolls into view. Toggle legitimate / malicious, or pause it.

How it works

From zero to governed in three steps. No keys in your repo.

01
Register the agent you already run
Run npx @agentvalet/register. An RS256 keypair is generated (a private signing key plus a public one we can check it against). The public key goes to the registry, the private key never leaves your machine.
02
Grant the scopes, not the keyring
Connect platforms and grant each agent precisely what it needs: read-only on one GitHub account, write on one Slack channel, nothing else. Credentials are envelope-encrypted (each secret gets its own key, and that key is locked by a per-organisation master key, in hardware on paid plans).
03
Route the call through the broker
The agent calls with a short-lived JWT (a signed token that expires in minutes, not a stored password). The broker verifies it, checks scope, attaches the credential, forwards the call, and writes an audit row. Risky calls pause for your approval.
Capabilities

Six things you can do on day one.

Each one is a real control in the product, not a diagram. Every one of them works on the day you sign up.

01
Approve from your phone
A risky call stops at the broker and pings you out-of-band (on your phone, not inside the agent's own session, so a compromised agent can't answer for you). Approve with a passkey and your fingerprint or face unlocks the action. Decline and the agent gets a clean refusal instead of a hang.
Push approvals on Team and up. Passkey and magic-link approval on every plan.
02
Bind a credential your agent never sees
Keyless bind (the agent holds no secret and never receives one). You connect the platform once; the credential is sealed in the vault and attached by the broker at call time, then dropped. It is never written to the agent's config, its logs, or the response it gets back.
Every plan, including Free.
03
Connect an MCP server, authorize once
Paste any MCP server URL (the standard way agents plug into tools) and it becomes a governed platform. Its tools turn into scopes you hand out per agent. Bearer token, custom header, API key in the URL, and OAuth servers are all supported, and the secret is vaulted rather than pasted into a config file.
Every plan. Platform count varies by plan.
04
Grant one scope, not the keyring
Deny-by-default (an agent can do nothing until you say otherwise). Three checks have to agree before a call goes through: your org-wide guardrails, the policy on that owner, and the scope on that agent. Any one of them saying no ends it, and the refusal is logged with the policy that caused it.
Every plan.
05
Export the trail your auditor asks for
Every decision writes a row: who called, which agent, which platform, which action, allowed or held or denied, and which policy version decided it. The log is append-only at the database level (the app has INSERT rights and nothing else, so no path in the product can edit or delete a past row). Export it to CSV, JSON, or PDF.
Audit log on every plan. Export on Team and up. Retention grows with the plan.
06
Pull the plug on one agent
Revoke an agent and it stops mid-flight (in-flight calls are rejected, not drained). Its public key leaves the registry, its grants are void, and the stored refresh-token chain is revoked upstream so the access can't be quietly resumed. No key rotation across every system it ever touched.
Every plan.
Observe Mode, free, no signup

Watch every call your agent makes before you commit to anything.

Bring your own key. It stays on your machine, travels with each call, and is never vaulted or written down on our side. Your agent's calls relay through AgentValet and land in a live audit feed on a private link. Observe Mode applies no policy: it records what your agents do and blocks nothing, so it is a recording of real calls, not a safety net. We keep call metadata (platform, endpoint, method, status, timing) for 24 hours and then delete it, and we never keep your key, your request bodies, or the responses. No account is needed to start. When you're ready for full governance, sign in once and the trail comes with you.

Start observing free
What you get

One governed surface for everything your agents reach for.

One broker in front of everything your agents touch, so there's a single audit trail and a single place to pull the plug.

GOVERNED MCP
Paste an MCP server URL. AgentValet wraps it.

Point AgentValet at any third-party MCP server (the open standard agents use to reach tools) and it becomes a governed platform: the token is vaulted, the server's tools become scopes you grant per agent, and every call runs the same approval and audit path. No token on disk, no token in your config. AgentValet also runs its own hosted MCP server over OAuth 2.1.

MCP server URL
https://your-mcp-server.io/mcp
Bearer token, custom header, API key in query, and OAuth servers, all supported today.
Keep two accounts on one platform apart
Two GitHub logins, three Google accounts, different Slack workspaces, each held as its own connection (a separate stored login, not one shared bot). Grant scopes per connection. The audit log records which account acted, every time.
Write a guardrail in a sentence Beta
Press ⌘K and say "never let any agent send email without my approval." Ask Valet drafts the policy (the machine-readable rule the broker enforces) and you review it before anything ships. In beta, on request.
Set a rule once, bind every agent
Deny wins in a fixed cascade (the strictest rule in the chain decides): org guardrails, then per-owner policy, then the per-agent scope check. All three have to agree before a call is allowed, and one "no" is enough to stop it.
Security model

Credentials that are genuinely hard to misuse.

The assumption underlying most secrets management is that if nobody can read the secret file, you're fine. That breaks the moment an agent runs with inherited API keys and no scope enforcement, because now a compromised agent or a careless scope grant becomes a master key.

AgentValet starts from a different position. Each credential gets its own AES-256 data encryption key, and that key is itself encrypted by a per-organisation master key, held on paid plans in tamper-resistant hardware that will not hand it back out. When a call comes in, the broker unseals the credential in memory for that one request and discards it. It never lands in a log, a response body, or a debug trace, and it never reaches the agent.

Scope enforcement runs first, before anything is unsealed. An agent without the right grant never gets that far. Risky actions pause for a human. Every decision, approved or denied, lands in the append-only audit log (rows can be added, never rewritten). Revoke an agent and the effect is immediate.

Not sure where your own gaps are? The Agent Exposure Scorecard maps your setup to the OWASP Top 10 for Agentic Applications 2026 in about two minutes, and shows your score with no email.

Identity
An RS256 keypair per agent (a signing key that proves which agent is calling). The private key never leaves the agent machine. No shared secrets to leak.
Encryption
Envelope encryption (each secret has its own key, locked by a per-organisation master key, in hardware on paid plans). Unsealed in memory at call time only. Never logged, never returned.
Governance
Deny-by-default scopes. Approval-as-policy on risky calls. Append-only audit. Instant revoke. A circuit breaker auto-suspends an agent after repeated auth failures.
Works with your tools

Claude Code, Cursor, Codex, CrewAI, Hermes, Paperclip, and your own scripts.

One MCP endpoint (a single address your agent host already knows how to talk to). Connect it in minutes, or register directly with npx @agentvalet/register. Nothing about your stack changes: same models, same frameworks, same agents. They just call through the broker instead of holding the keys.

See all integration guides →
Your own code

Not in an MCP host? Nine lines, and your agent holds no keys.

A LangChain tool, a cron job, a plain Node or Python service: anything that isn't an MCP host talks to the broker through the client library instead. Same grants, same approvals, same audit log. The only credential on the machine is your agent's own identity key.

notify.ts
import { AgentValet } from "@agentvalet/client";

const av = AgentValet.fromEnv();

await av.call({
  platform: "slack",
  endpoint: "/api/chat.postMessage",
  method:   "POST",
  scope:    "chat:write",
  data:     { channel: "#general", text: "Deploy finished." },
});

// No Slack token in this file, this process, or the model's context.
// Checked against your grants, credential injected at call time,
// one audit row written.

And the part a diagram can't show you: what happens when the agent reaches for something you never granted. A denial is a typed error your code can branch on, not a stack trace.

refund.ts
import { AccessDeniedError } from "@agentvalet/client";

try {
  await av.call({ platform: "stripe", endpoint: "/v1/refunds",
                  method: "POST", scope: "refunds:write", data: { charge } });

} catch (err) {
  if (err instanceof AccessDeniedError) {
    // Not a crash. A governance decision your code can act on.
    const decision = await av.requestAccess({
      platform: err.platform,
      scope:    err.scope,
      reason:   "Refund duplicate charges flagged by support",
    });
  }
}
Read the SDK guide →
Why trust this

Product proof, not promises.

Things you can actually verify, not things I'm asking you to take my word for.

THE REAL INSTALL COMMAND
npx @agentvalet/register

Published on npm. Works today. Free tier, no card required.

LIVE TODAY
  • 30 platform integrations live (Airtable, Gmail, Slack, GitHub, HubSpot, Xero, and more)
  • MCP server on npm, installable right now
  • Append-only audit log enforced at the database level (the app can add rows, never edit or delete them)
  • Envelope encryption, and on paid plans the master key lives in hardware that won't release it
  • Okta SSO live on Enterprise via verified domain
✓ The audit guarantee

Every action through AgentValet writes a receipt you can export. If you ever find an agent action that isn't in your audit trail, that's on us: a full refund, and I'll help you move off. Check it free before you trust me.

HONEST BETA LINE

It's still beta, and I'll tell you what isn't built yet rather than paper over it. Bring-your-own-key is in development. A handful of integrations are in testing, not yet live. If you need something specific, ask me directly.

Pricing

Priced on what you actually run.

You pay for the calls your agents make, not for seats, not per agent. Register as many agents as you like on any plan. A quiet month costs less, and governance never becomes the reason you don't put an agent behind it. AgentValet is in beta: any plan you start now is locked in for as long as you stay subscribed.

Free
$0 forever
 
Try it on a real agent. No card.
  • Unlimited agents
  • 1,000 calls included
  • 3-day audit log
Start free
Solo
$19 /mo
 
Get started, test the waters.
  • Unlimited agents
  • 10,000 calls included
  • 30-day audit log
  • Email support
  • 30-day money-back
Get started
Beta rate, yours for life
Studio
$59 /mo
 
Real agent workflows.
  • Unlimited agents
  • 50,000 calls included
  • 90-day audit log
  • Email support
  • 30-day money-back
Get started
Team
$129 /mo
 
Agencies and operators.
  • Unlimited agents
  • 200,000 calls included
  • 1-year audit + export
  • Mobile push approvals
  • Priority support
Get started

Go past your plan's included calls and the work keeps running. Nothing is cut off mid-workflow, and your dashboard shows where you stand before the bill does.

ENTERPRISE
Governed agent access for the whole org

Priced on what you actually run, agreed up front. Okta SSO live today, forensic audit (IP, geo, request ID on every action), per-user connection identity (the downstream system logs the person, not one shared bot), and the controls your security team will ask for before agents touch production. Run a scoped pilot with your real agents. If it doesn't satisfy your team, walk away.

Book a call → See the Enterprise overview
FAQ

The broker runs in ours, as a managed service, so there's nothing for your team to install or patch. The part that touches your machines is open source under MIT (the MCP server, the CLI, the desktop bundle, and the runtime adapters), so you can read it, fork it, and run it yourself. Your agents stay exactly where they are; only the outbound call path changes. Enterprise customers can ask for a dedicated managed tenant in a specific region.

Four things, in order. It's deny-by-default (an agent can call nothing until you grant a specific scope). Three layers then have to agree on that call: your org guardrails, the owner's policy, and the agent's own grant. Anything risky hits approval-as-policy (it stops and waits for a human to okay it). And it's a keyless bind (the agent never holds the credential), so even a fully compromised agent has nothing to steal and nothing to reuse somewhere we can't see.

Yes, and you don't move anything to make it work. AgentValet is model-agnostic and framework-agnostic: it governs the call to the real system, not the model that decided to make it. It's MCP-native (it speaks the open protocol your agent host already uses for tools), so Claude Code, Cursor, Codex, Claude Desktop and others connect by adding one endpoint. Anything that can make an HTTP request and sign a short-lived token can use it, including code you wrote yourself.

Every call writes one row at the moment it's decided: timestamp, owner, agent, platform, action, the outcome, the reason, and the exact policy version that produced it. The table is append-only at the database level (the application holds INSERT rights and nothing else, so no product path can rewrite history). That gives an auditor a complete, ordered decision record they can reconstruct a session from, exportable to CSV, JSON, or PDF on Team and up. It's a decision record rather than a packet capture (it proves what was decided and which rule decided it, without keeping the contents of each request).

The governance itself is free. On the Free plan you get per-agent identity, deny-by-default scopes, human approval, keyless bind, and the audit log, on a real agent, with no card. Observe Mode (a recording of what your agents already do, with no policy applied and nothing blocked) is free too, and doesn't need an account. Paid plans are priced on what you actually run: more call volume, longer audit retention, export, push approvals, delegated approvers, and the multi-user and forensic controls a security team asks for.

An API key is a static secret that can't prove who is holding it. AgentValet gives each agent an RS256 keypair instead (a private signing key that never leaves its machine), so every request is attributable to one named agent. Scope enforcement, approval, and the audit trail sit on top of that identity. Revoking one agent doesn't mean rotating a key across every system it ever touched.

Revocation is immediate and cascading. The public key leaves the registry, every scope grant is invalidated, in-flight requests are rejected rather than drained, and the stored OAuth refresh-token chain is revoked upstream so the access can't be quietly resumed. Nothing else in your org is touched.

Try it before you trust it.

Start on the free tier and run your first agent through it. You'll know within an hour. If the audit trail and approval flow don't satisfy your team, walk away.