Back to blog
Enterprise AI

In Depth: Speakeasy vs Runlayer

Nolan Sullivan

Nolan Sullivan

August 20, 2026 · 32 min read

In Depth: Speakeasy vs Runlayer

Speakeasy and Runlayer are both AI control planes: they sit on the path between AI agents and the tools those agents call, inspect every Model Context Protocol (MCP) request, and decide whether it proceeds. Both scan tool definitions and tool calls, both detect sensitive data in agent traffic, both discover unsanctioned MCP servers on employee machines, and both enforce role-based access on individual tool calls.

The differences show up in two places. On security, they differ in where the enforcement points sit and how policies are authored. On governance, they differ in how identity reaches the agent, how permissions are modeled, and how custom tools get built. This post walks each platform's security capabilities, then each platform's governance capabilities, and closes with the questions that decide the choice.

NOTE

This comparison reflects both products as published in August 2026. We build Speakeasy, so read us as an interested party. Every claim we make about Runlayer links to a primary source, and we are specific about the cases where the Runlayer model is the better fit. If we have something wrong, tell us and we will correct it.

Speakeasy vs Runlayer at a glance

Speakeasy is an AI control plane built around enterprise identity. Every agent session resolves to a principal your directory already knows, either a person synced from Okta or Entra or an Agent Identity that syncs from the provider or is created in Speakeasy when the provider has no such concept, and one permission model governs both. Custom MCP servers are generated from the API contract your teams already maintain.

Runlayer is an AI control plane built around an MCP gateway and an endpoint agent. People authenticate through SSO and SCIM, agents authenticate as Agent Accounts native to Runlayer, and policies combine principals with runtime conditions evaluated at the proxy. Custom MCP servers are packaged as containers and deployed to Runlayer-managed infrastructure.

Speakeasy vs Runlayer summary

Area
Enforcement points
Speakeasy
Gateway, agent hooks, device agent (macOS, Windows, Linux), LiteLLM pre-call
Runlayer
Gateway, endpoint agent (macOS, Windows), CLI proxy, Hooks SDK, browser extension
Tool inspection
Speakeasy
Server review with evidence dossier, prompt injection heuristic plus LLM judge, natural-language guardrails with replay, CEL rules
Runlayer
ToolGuard: Tool List, Tool Call, and Tool Intent guards mapped to MITRE ATLAS
Sensitive data
Speakeasy
Secrets, financial, PII, government IDs, healthcare across four surfaces
Runlayer
13 PII types plus custom regex, Mask action
Session monitoring
Speakeasy
Agent Sessions in five clients, provider compliance API imports
Runlayer
Sessions in 11 clients, AgentGuard behavioral detection, Anthropic inference hooks (beta)
Shadow AI
Speakeasy
Traffic-sourced inventory, allow or block posture, access requests, Linux enforcement
Runlayer
AI Watch detect, protect, and enforce modes, browser extension, Incidents (beta)
Sessions and edge
Speakeasy
OAuth 2.1 server, verified client catalog, IP allowlist, tunnels, BYOK
Runlayer
OAuth Broker, resource-bound tokens, self-hosted single-tenant AWS
Agent identity
Speakeasy
Directory user or Agent Identity synced from the provider or created in Speakeasy (early access)
Runlayer
SSO user or Runlayer-native Agent Account (beta)
RBAC per tool call
Speakeasy
Grants on directory principals, disposition from annotations, deny wins
Runlayer
Policies with 22 runtime condition operators, Terraform provider
Approvals
Speakeasy
Warn and confirm, approver routing, bypass request queue, server review
Runlayer
Slack approvals (beta), connector access requests
Audit and export
Speakeasy
Audit log with diffs, directory-stamped telemetry, webhooks, project-scoped OTLP data export, SIEM export
Runlayer
Audit log with ToolGuard metadata, S3 archive, NDJSON SIEM export
Bringing tools under governance
Speakeasy
Generated from the API contract, remote proxy, MCP Registry catalog, skills registry, plugins
Runlayer
Curated catalog, Runlayer Deploy containers, Runlayer Plugin, skills sync
Cost and usage
Speakeasy
Costs and budgets keyed on directory attributes, block in coding agents
Runlayer
Analytics, per-agent USD budgets, LLM Gateway (early access)

Part 1: Security

Where does each platform enforce security?

Both platforms enforce at the gateway and on the endpoint, and both extend into the agent runtime. The coverage differs at the edges.

Speakeasy enforces at three points. The MCP gateway authenticates every session, applies per-server and per-tool authorization, and runs inline scanners on every request and response. Agent hooks in Claude Code, Claude Cowork, Cursor, Codex, and OpenCode intercept prompts and tool calls inside the client, which is what makes shadow MCP detection, destructive command detection, and budget enforcement possible for traffic that never reaches a hosted server. The device agent runs on macOS, Windows, and Linux, enforces required plugin and MCP configuration every 60 seconds, and deploys through Jamf, Kandji, or Intune. A LiteLLM integration adds a pre-call guardrail for model traffic routed through LiteLLM. Whether hooks fail open or fail closed during an outage is an organization-level setting, and blocking is the default.

Runlayer enforces at four points. The gateway is a single-tenant deployment in AWS, either Runlayer-hosted or in your own account, and every MCP request is authenticated, authorized, scanned, and logged there before it reaches a server. The AI Watch endpoint agent deploys through MDM and installs hooks into 12 AI clients on macOS and Windows, with a Monitor mode, a fail-open Protect mode built on denylists, and a fail-closed Enforce mode built on allowlists. A CLI proxy wraps local stdio servers, and a Hooks SDK gives custom agents built on the Claude Agent SDK, Vercel AI SDK, OpenAI Agents SDK, or Google ADK in-process enforcement that fails closed when Runlayer is unreachable. Runlayer documents the limit plainly: native connectors configured directly in a client bypass the gateway, and policy, scanning, and audit do not apply to that traffic.

The practical difference is reach. Runlayer reaches further into the browser and into custom agent code. Speakeasy reaches further into Linux endpoints and into model traffic.

Enforcement points

Capability
Gateway
Speakeasy
OAuth authorization, per-server and per-tool RBAC, inline scanners on every request and response
Runlayer
Single-tenant AWS proxy; every request authenticated, authorized, scanned, logged
Agent runtime
Speakeasy
Hooks in Claude Code, Claude Cowork, Cursor, Codex, OpenCode
Runlayer
Hooks SDK for Claude Agent SDK, Vercel AI SDK, OpenAI Agents SDK, Google ADK; CLI proxy for stdio servers
Endpoint
Speakeasy
Device agent on macOS, Windows, Linux; 60-second reconciliation
Runlayer
AI Watch on macOS and Windows; Monitor, Protect, Enforce modes
Browser
Speakeasy
Not offered
Runlayer
Extension for 14 web chat apps via MDM
Model traffic
Speakeasy
LiteLLM pre-call guardrail
Runlayer
Anthropic inference hooks (beta, Claude Enterprise)
Outage behavior
Speakeasy
Org toggle, blocking by default
Runlayer
Protect fails open, Enforce and Hooks SDK fail closed

How does each platform inspect tool definitions and tool calls?

Both platforms scan a server's tool definitions when it is registered and scan tool calls while they are in flight. They differ in how the detection logic is authored.

Runlayer's scanner is ToolGuard, which runs three guards. Tool List Guard scans tool descriptions at registration for hidden instructions and prompt injection. Tool Call Guard inspects tool outputs before they reach the model for injection and exfiltration attempts. Tool Intent Guard compares a tool's inputs to its outputs and flags behavior that diverges from the request, such as privilege escalation or credential theft. Findings map to a ten-category threat taxonomy aligned to MITRE ATLAS, and each scanner can Block, Block with self-approval, Mask, Alert, or Allow at Strict, Balanced, or Moderate sensitivity, configurable globally, per connector, or per client.

Speakeasy inspects on the same two timelines with a different authoring model. At registration, MCP server review gathers an evidence dossier for each server (code host health, OSV advisories, domain registration, OAuth metadata, and the tool declarations probed without credentials) and requires a written rationale for every approval decision. On the live path, risk policies run a heuristic prompt injection detector on tool inputs and outputs, covering indirect injection, role hijacks, system prompt leaks, and encoding tricks, with an opt-in LLM judge as a second layer. Destructive tool detection reads the destructiveHint annotation on MCP tools and also recognizes destructive CLI patterns such as rm -rf, git push --force, and DROP TABLE in shell commands and tool arguments. Two authoring surfaces have no Runlayer equivalent: natural-language guardrail policies judged by an LLM, which can be replayed against recent live sessions to produce a scorecard before they go into enforcement, and custom detection rules written as CEL expressions and tested against a real session.

Runlayer's intent-alignment guard has no direct Speakeasy equivalent. Speakeasy's replayable natural-language policies and CEL rules have no direct Runlayer equivalent.

Tool inspection

Capability
At registration
Speakeasy
MCP server review with evidence dossier and required rationale
Runlayer
Tool List Guard scans descriptions for hidden instructions
Tool outputs in flight
Speakeasy
Prompt injection heuristic on inputs and outputs, opt-in LLM judge
Runlayer
Tool Call Guard scans outputs for injection and exfiltration
Intent alignment
Speakeasy
Not offered
Runlayer
Tool Intent Guard compares inputs to outputs
Destructive actions
Speakeasy
destructiveHint annotation plus destructive CLI patterns
Runlayer
Policy conditions on destructiveHint
Custom logic
Speakeasy
Natural-language guardrails with replay scorecard, CEL detection rules
Runlayer
Sensitivity tiers per connector or client
Threat taxonomy
Speakeasy
Risk categories and severities per rule
Runlayer
Ten categories mapped to MITRE ATLAS

How does each platform detect sensitive data in agent traffic?

Both platforms detect PII and other sensitive content as it moves through prompts and tool calls. Speakeasy's detector catalog is broader, and Runlayer's masking action is more direct.

Runlayer ships 13 built-in PII types (SSN, credit card, phone, email, passport, driver's license, IBAN, IP address, date of birth, medical record number, VIN, and crypto wallet) plus custom RE2 regex rules. Detection direction is configurable as input, output, or both, and the Mask action redacts matched values before they continue.

Speakeasy scans four surfaces (user prompts, assistant messages, tool calls, and tool responses) against a detector catalog organized by category: secrets such as API keys and private keys, financial data such as cards and routing numbers, PII, government identifiers across the US, UK, EU, and APAC, and healthcare identifiers. Each policy has a detection sensitivity slider, a CEL scope that includes or exempts traffic by server, tool, or argument path, and exclusion lists that apply retroactively and come with a preset library of known-safe values. Actions are log, warn and confirm, or deny. Matched content is redacted in the Risk Events view by default, and revealing it is itself an audited action.

Sensitive data detection

Capability
Built-in detectors
Speakeasy
Secrets, financial, PII, government IDs (US, UK, EU, APAC), healthcare
Runlayer
13 PII types
Custom patterns
Speakeasy
CEL rules
Runlayer
RE2 regex
Surfaces scanned
Speakeasy
Prompts, assistant messages, tool calls, tool responses
Runlayer
Tool inputs, outputs, or both
Actions
Speakeasy
Log, warn and confirm, deny
Runlayer
Block, Mask, Alert, Allow
Tuning
Speakeasy
Sensitivity slider, CEL scope, retroactive exclusions with preset library
Runlayer
Strict, Balanced, Moderate
Handling of matches
Speakeasy
Redacted in Risk Events, reveal is audited
Runlayer
Masked in flight by the Mask action

How does each platform monitor agent behavior across a session?

Both platforms capture full sessions and flag behavior that drifts over several turns. Runlayer adds a dedicated behavioral detector. Speakeasy adds imports from the model providers' compliance APIs.

Runlayer's Sessions capture prompts, reasoning, tool calls, and responses from client hooks in Cursor, VS Code, Claude Code, Copilot CLI, Gemini CLI, Cline, Codex, Windsurf, Goose, and others. AgentGuard analyzes the session as a whole, detecting output-steering injection, sudden reasoning pivots, and gradual task divergence, and can end the entire session on a block. It applies globally with no per-connector override. Anthropic inference hooks, in beta, let Runlayer inspect Claude prompts before inference for Claude Enterprise customers, with a shadow mode and percentage rollout.

Speakeasy's Agent Sessions capture full transcripts, tool calls, and per-turn cost from the hooks in Claude Code, Claude Cowork, Cursor, Codex, and OpenCode, with risk findings highlighted inline and a JSON export of transcript, telemetry, and risk results. Sessions from personal AI accounts or off-domain emails are flagged as non-corporate. Beyond the hooks, Speakeasy imports from the Anthropic Compliance API, OpenAI Compliance Logs, and the Cursor Admin API, so claude.ai, ChatGPT, and Codex cloud activity appears in the same view as instrumented sessions.

Session monitoring

Capability
Instrumented clients
Speakeasy
Claude Code, Claude Cowork, Cursor, Codex, OpenCode
Runlayer
Cursor, VS Code, Claude Code, Copilot CLI, Gemini CLI, Cline, Codex, Windsurf, Goose, and others
Behavioral detection
Speakeasy
Risk findings highlighted per turn
Runlayer
AgentGuard detects pivots and drift, can end the session
Provider imports
Speakeasy
Anthropic Compliance API, OpenAI Compliance Logs, Cursor Admin API
Runlayer
Anthropic and OpenAI compliance imports (enterprise plan)
Pre-inference inspection
Speakeasy
LiteLLM pre-call
Runlayer
Anthropic inference hooks (beta)
Personal account detection
Speakeasy
Flags personal or off-domain accounts
Runlayer
Not documented
Export
Speakeasy
Session JSON with transcript, telemetry, risk results
Runlayer
Sessions to S3 (AWS and ECS only)

How does each platform handle shadow AI on endpoints?

Both platforms discover unsanctioned MCP servers and bring them under an allow or block policy. Runlayer's endpoint enforcement is deeper on macOS and Windows. Speakeasy's covers Linux and ties the request-access flow to the gateway's policy model.

Runlayer's AI Watch inventories AI clients, MCP servers, skills, plugins, and agent definitions across macOS, Windows, Linux, containers, and WSL, and classifies each as managed or shadow. Enforce mode applies deny-by-default allowlists, fails closed, and permits only npx, uvx, and uv tool run launchers, with arbitrary binaries denied. Enforcement is macOS and Windows only; Linux is detect only. A browser extension deployed via MDM captures prompts in 14 web chat apps and can mask or block a prompt before it is submitted. Incidents, in beta, group findings into a prioritized inbox with one-click remediation.

Speakeasy's shadow MCP detection builds its inventory from instrumented agent traffic, deduplicates servers by canonical URL, and shows usage and top users per server. Each organization picks a posture: block all with an allow list, or allow all with a block list. A blocked user receives a signed request-access link or a desktop notification from the device agent, an admin approves or denies, and approval writes an allow rule scoped to the policy's audience. The device agent enforces required configuration on macOS, Windows, and Linux and exports coverage evidence to Drata and Vanta.

Shadow AI on endpoints

Capability
Discovery source
Speakeasy
Instrumented agent traffic, canonical URL dedup
Runlayer
MDM endpoint agent inventory across macOS, Windows, Linux, containers, WSL
Posture
Speakeasy
Block all with allow list, or allow all with block list
Runlayer
Protect denylist (fail open) or Enforce allowlist (fail closed)
Enforcement platforms
Speakeasy
macOS, Windows, Linux
Runlayer
macOS and Windows; Linux detect only
User exception flow
Speakeasy
Signed request-access link or desktop notification, admin approval writes allow rule
Runlayer
Incidents inbox with one-click remediation (beta)
Browser coverage
Speakeasy
Not offered
Runlayer
Extension masks or blocks prompts in 14 web apps
Compliance evidence
Speakeasy
Coverage export to Drata and Vanta
Runlayer
Not documented

How does each platform secure sessions, credentials, and the network edge?

Speakeasy acts as the OAuth authorization server for every private MCP server. Runlayer brokers OAuth to upstream vendors and binds agent tokens to specific servers.

Speakeasy's gateway implements the standard MCP authorization flow as an OAuth 2.1 server: protected resource metadata, dynamic client registration, PKCE with S256 only, a consent screen on every grant, one-hour access tokens, and single-use refresh tokens. Admins choose which OAuth clients a server accepts from a verified client catalog that includes Claude, Claude Code, VS Code, Zed, ChatGPT, and Codex CLI. When the gateway proxies a remote or tunneled server, it drops the caller's Authorization, Origin, Referer, and Cookie headers and never forwards platform tokens upstream. At the network edge, an IP allowlist on a custom domain is enforced before traffic reaches the application, and MCP tunnels reach servers inside a VPC over an outbound-only WebSocket with no inbound ports. Stored secrets are encrypted with AES-GCM, and organizations can bring their own keys through AWS KMS or GCP KMS.

Runlayer's OAuth Broker centralizes vendor OAuth with pre-registered applications and per-tenant bring-your-own-client registration, stores tokens in field-level encrypted columns with KMS, and masks token values in API responses. Agent tokens support RFC 8707 resource indicators, so a token bound to one server is rejected everywhere else. Deployment is single-tenant in AWS, either hosted by Runlayer or self-hosted in your account through ECS, EKS, or a Kubernetes operator, with air-gapped installs supported. GCP and Azure hosting are not offered.

Sessions, credentials, and edge

Capability
Authorization server
Speakeasy
OAuth 2.1 with PKCE, DCR, consent, one-hour tokens, single-use refresh
Runlayer
OAuth Broker to upstream vendors
Client control
Speakeasy
Verified client catalog per server
Runlayer
Identity-scoped tokens with RFC 8707 resource indicators
Proxy hygiene
Speakeasy
Caller Authorization, Origin, Referer, Cookie dropped; platform tokens never forwarded
Runlayer
Tokens field-level encrypted, masked in API responses
Network edge
Speakeasy
IP allowlist on custom domain
Runlayer
Single-tenant deployment
Private networks
Speakeasy
Outbound-only MCP tunnels into your VPC
Runlayer
Self-hosted in your AWS account, air-gapped supported
Key management
Speakeasy
AES-GCM, BYOK via AWS KMS or GCP KMS
Runlayer
AWS KMS

Part 2: Governance

Whose identity does an agent run as?

On Speakeasy, an agent runs as a principal your identity provider knows: either the directory user behind the session or an Agent Identity. On Runlayer, a person runs as an SSO user and an agent runs as an Agent Account that lives inside Runlayer. Identity and authority are separate from the agent's working arrangement.

Speakeasy syncs users, groups, and attributes from Okta or Entra through directory sync, with a 30-second poll and deprovisioning that removes grants. When a person drives an agent, the MCP authorization handshake sends the client through your identity provider, so the session belongs to that person from the first call. For agents that need a principal of their own, Agent Identity, currently in early access, syncs from providers that model agents natively, such as Entra Agent ID, and can be created in Speakeasy when the provider has no such concept. An Agent Identity can be tied to a user or act with its own authority, and it holds its own roles and grants. Both principal types are evaluated by the same permission model and appear in the same audit trail.

Runlayer handles people and agents separately. People get SSO and SCIM group sync, and directory groups map to seven platform roles with separation-of-duty rules. Agents get Agent Accounts, in beta and requiring access approval. An Agent Account is an OAuth client created in Runlayer with a client ID and secret. Runlayer does not provision a matching identity in Okta or Entra, and the documentation states that the identity provider is unchanged. An Agent Account can use machine-to-machine tokens under its own authority, or act on behalf of a user through an RFC 8693 token exchange once that user has created a delegation. On a delegated call, the effective permission is the intersection of the agent's policies, the user's policies, and the server's policies.

The difference an auditor notices is where the answer to "who is this principal" lives. On Speakeasy it lives in the directory, for people and for agents. On Runlayer it lives in the directory for people and in Runlayer for agents.

Agent identity

Capability
People
Speakeasy
Synced from Okta or Entra, 30-second poll, deprovisioning removes grants
Runlayer
SSO and SCIM, groups map to seven platform roles
Agents
Speakeasy
Agent Identity synced from the provider or created in Speakeasy (early access)
Runlayer
Agent Account, OAuth client native to Runlayer (beta)
Where agent identity lives
Speakeasy
In the identity provider
Runlayer
Inside Runlayer; provider unchanged
Acting as a user
Speakeasy
Session is the user from the handshake; Agent Identity can be tied to a user
Runlayer
RFC 8693 token exchange against a user delegation
Agents acting with their own authority
Speakeasy
Agent Identity with its own roles and grants
Runlayer
Machine-to-machine tokens under Agent Account policies
Permission model
Speakeasy
One model for people and agents
Runlayer
Intersection of agent, user, and server policies on delegated calls

How is RBAC enforced on a single tool call?

Both platforms evaluate permissions per tool call and fail closed on conflicts. Speakeasy models permissions as grants against a directory principal. Runlayer models them as policies with runtime conditions evaluated at the proxy.

A Speakeasy grant pairs a scope with selectors that name which resources it reaches. A session attaches to a server only when the caller holds mcp:connect for that server, and each tool call then passes a second check that carries the tool name and the tool's disposition, derived at call time from its MCP annotations (read_only, destructive, idempotent, or open_world). A support role can connect to the billing server, succeed on get_invoice, and be denied on create_refund, with no change to the server:

{
  "scope": "mcp:connect",
  "selectors": [
    {
      "resource_kind": "mcp",
      "resource_id": "<billing-server-id>",
      "disposition": "read_only"
    }
  ]
}

Deny rules evaluate in a separate pass, and a matching deny always beats a matching allow. For remote servers, an admin-recorded annotation overrides whatever the vendor publishes, so a vendor cannot quietly flip a tool from read-only to destructive. Every denied call lands in an Authorization Challenges log that opens directly into the grant that would allow it.

Runlayer policies combine principals (users, groups, roles, Agent Accounts, or identity provider attributes), a scope of servers or individual tools, and runtime conditions. The condition language has 22 operators over tool arguments, IP ranges, user agent, OAuth provider and scopes, MCP annotation hints, and session history, so a policy can deny a call that touches a second repository once the session has already accessed one. Policies are also manageable as code through a Terraform provider. Session grants decide whose upstream OAuth credentials a call uses, falling back from the caller's personal grant to a shared grant and failing when neither exists.

Runlayer's runtime condition language is richer. Speakeasy's principal on every decision is a directory identity.

RBAC on a tool call

Capability
Unit of permission
Speakeasy
Grant: scope plus selectors
Runlayer
Policy: principals, scope, conditions
Per-tool granularity
Speakeasy
Tool name and disposition from MCP annotations
Runlayer
Server or individual tool
Runtime conditions
Speakeasy
Disposition, tool, project
Runlayer
22 operators over arguments, IP, user agent, OAuth state, session history
Conflict resolution
Speakeasy
Separate deny pass always wins
Runlayer
Deny-only global policies
Vendor annotation drift
Speakeasy
Admin-recorded annotation overrides upstream
Runlayer
Not documented
Policy as code
Speakeasy
API
Runlayer
Terraform provider
Denied-call visibility
Speakeasy
Authorization Challenges log opens into the grant
Runlayer
Audit log

How does each platform handle approvals and exceptions?

Both platforms route high-risk actions through a human before they proceed and let users request exceptions to policy.

Runlayer's human-in-the-loop approvals, in beta and enabled by the account team, pause an agent run on a matching tool call until an approver allows or denies it in Slack, with templates for destructive tools, external network access, and untrusted clients. Access requests let users ask for a connector or catalog item, and admins approve or reject with notes that land in the audit log.

Speakeasy's risk policies support a warn-and-confirm action that holds a call for acknowledgement, and approval routing sends a matching tool call to a designated approver before it executes. Policy bypass requests run through an RBAC-protected queue with requested, approved, denied, and revoked states, scoped to a single policy or a single shadow server, and every state change is attributed and revocable. MCP server review requires a written rationale on every decision.

Approvals and exceptions

Capability
Pre-execution approval
Speakeasy
Approver routing on matching tool calls
Runlayer
Slack approvals with templates (beta, account-team enablement)
Human acknowledgement
Speakeasy
Warn and confirm with grace period
Runlayer
Block with self-approve
Policy exceptions
Speakeasy
Bypass request queue: requested, approved, denied, revoked
Runlayer
Not documented
Access to a server
Speakeasy
Shadow MCP request-access flow
Runlayer
Connector and catalog access requests
Server onboarding
Speakeasy
MCP server review with evidence and required rationale
Runlayer
Manual connectors require admin approval

What does each platform record, and where can it go?

Both platforms keep an organization-wide audit log, stamp tool-call records with the caller's identity, and export to a SIEM.

Speakeasy's audit log records every administrative action as a resource:action event with the actor and a diff, and tool-call telemetry carries the caller's directory snapshot (groups, attributes, and roles at the moment of the call). Events leave the platform through webhooks for audit and risk finding events, through project-scoped data exports for normalized OTLP logs, metrics, and traces, and through SIEM export. Tool logs and sessions are retained for 90 days, and capture of tool inputs and outputs is off until an admin enables it.

Runlayer's audit log records lifecycle, policy, authentication, tool-call, and security events with ToolGuard metadata attached, keeps a 90-day hot window, then archives to S3 indefinitely. SIEM export streams compressed NDJSON to an S3 bucket, with CrowdStrike, Splunk, and Sentinel named as destinations. Prompts and reasoning are excluded from the audit log and live in Sessions.

Audit and export

Capability
Administrative audit
Speakeasy
resource:action events with actor and diff
Runlayer
Lifecycle, policy, auth, tool-call, and security events
Tool-call attribution
Speakeasy
Directory snapshot: groups, attributes, roles at call time
Runlayer
Principal plus ToolGuard metadata
Retention
Speakeasy
90 days for tool logs and sessions
Runlayer
90-day hot window, then S3 archive
Push delivery
Speakeasy
Webhooks for audit and risk finding events
Runlayer
Not offered; exports are S3 only
Telemetry export
Speakeasy
Project-scoped OTLP data exports
Runlayer
Not documented
SIEM
Speakeasy
SIEM export
Runlayer
NDJSON to S3; CrowdStrike, Splunk, Sentinel named
Content capture
Speakeasy
Tool I/O capture off by default
Runlayer
Prompts and reasoning kept in Sessions, excluded from audit log

How does each platform bring tools under governance?

Speakeasy generates governed MCP servers from the API contract your teams already maintain and fronts third-party servers with a governed proxy. Runlayer curates a catalog of vetted connectors and hosts custom servers you package as containers.

On Speakeasy, a server built from your own API is generated from its contract, with the tool set curated, renamed, or re-described through tool variations and narrowed per client with tag-based filtering. Any vendor's remote server gets a governed endpoint by URL, with one-click OAuth through dynamic client registration, and the catalog draws from the official MCP Registry. Skills live in a registry with content-addressed immutable versions, diffs, and rollback, and plugins bundle servers and skills for assignment to roles, with the device agent enforcing the assignment on each machine.

On Runlayer, the catalog lists pre-tested connectors with their ToolGuard results visible before enablement, and manual connectors require admin approval. The Runlayer site claims more than 18,000 servers; the documentation describes the catalog as continuously growing and refers to an account representative for the full list. Custom servers are built as Docker images and deployed through Runlayer Deploy to managed Fargate, with an MCP Builder prompt that scaffolds TypeScript servers. The Runlayer Plugin exposes one endpoint per user with search_tools and execute_tool meta-tools, and skills and plugins sync to devices hourly.

Bringing tools under governance

Capability
Custom servers
Speakeasy
Generated from the API contract
Runlayer
Docker containers deployed to managed Fargate; MCP Builder scaffolding
Third-party servers
Speakeasy
Governed proxy by URL with one-click OAuth
Runlayer
Curated catalog with ToolGuard results visible
Catalog source
Speakeasy
Official MCP Registry
Runlayer
Runlayer-curated; 18,000+ claimed on the site
Tool curation
Speakeasy
Variations, annotation overrides, tag-based filtering
Runlayer
Policy scope at tool level
Unified endpoint
Speakeasy
Dynamic toolsets with search and execute meta-tools
Runlayer
Runlayer Plugin with search_tools and execute_tool
Skills
Speakeasy
Registry with immutable versions, diffs, rollback
Runlayer
Versioned skills with hourly device sync
Plugins
Speakeasy
Bundles assigned to roles, enforced by device agent
Runlayer
Bundles installable to eight clients

How does each platform track cost and usage?

Speakeasy attributes spend to the directory and enforces per-person budgets. Runlayer attributes spend to agents and, in early access, proxies model traffic.

Speakeasy's costs view breaks down spend by employee, role, model, agent, and client, and the cost explorer cuts by department, division, job title, and cost center, all sourced from directory attributes. Budgets are per-person rules matched on those attributes, warn at 80%, and can block in Claude Code, Codex, and Cursor. Employee enrollment shows who is instrumented, which AI accounts are linked, and whether each is a team or personal account.

Runlayer's analytics cover active users, agents, and connectors, tool-call success rates, and agent token consumption. Agent budgets in USD alert at 75%, 90%, and 100% through Slack. An LLM Gateway, in early access and self-hosted only, adds virtual keys with per-key budgets and rule-based model downgrades. Per-user and per-team cost requires an export.

Cost and usage

Capability
Attribution
Speakeasy
Employee, role, model, agent, client, department, cost center
Runlayer
Users, agents, connectors
Budgets
Speakeasy
Per person on directory attributes, warn at 80%, block in Claude Code, Codex, Cursor
Runlayer
Per agent in USD, alerts at 75%, 90%, 100%
Model proxy
Speakeasy
LiteLLM integration
Runlayer
LLM Gateway with virtual keys (early access, self-hosted)
Enrollment view
Speakeasy
Instrumented employees, linked accounts, team vs personal
Runlayer
Active users and agents
Export
Speakeasy
CSV
Runlayer
CSV via Runlayer MCP

When should you pick Runlayer?

  • Your agents are built on the Claude Agent SDK, Vercel AI SDK, OpenAI Agents SDK, or Google ADK and you want in-process enforcement through a Hooks SDK.
  • Browser-based AI usage is a top concern and you want to mask or block prompts in web chat apps through a browser extension.
  • You need the control plane to run in your own AWS account, including air-gapped.
  • You want policies with rich runtime conditions over tool arguments, IP ranges, and session history, managed through Terraform.
  • You want agents modeled as principals deliberately separate from the corporate directory, which is what Agent Accounts implement.

When should you pick Speakeasy?

  • Agent identity must live in the identity provider you already run. People sync from Okta or Entra, Agent Identity syncs from providers like Entra Agent ID, and one permission model covers both.
  • Your auditors ask "who did this, and why was it allowed," and the answer has to be a directory principal plus the grant that permitted the call, stamped with their directory state at the time.
  • The tools that matter most sit behind your own APIs, and you want governed MCP servers generated from the contract your teams already maintain.
  • You want to write guardrails in plain language, replay them against last week's sessions, and see the scorecard before turning on enforcement.
  • Cost and budgets need to follow the org chart, with per-person limits keyed on department or cost center and enforced in the coding agents your teams use.
  • Your endpoint fleet includes Linux and you need enforcement there, with coverage evidence flowing to Drata or Vanta.

See the identity model on your own directory

Book a demo and we'll connect a test Okta or Entra directory, sync it, and show a denied create_refund with the exact grant that would allow it.

Book a demo
Frequently asked questions
What is the difference between Speakeasy and Runlayer?
Both are AI control planes that authenticate, authorize, scan, and log every MCP tool call. Speakeasy is built around enterprise identity: people and agents resolve to principals in your identity provider, one permission model covers both, and custom MCP servers are generated from your API contracts. Runlayer is built around an MCP gateway and an endpoint agent: people authenticate through SSO, agents authenticate as Runlayer-native Agent Accounts, and custom servers are deployed as containers to Runlayer-managed infrastructure.
Whose identity does an AI agent run as in Speakeasy vs Runlayer?
In Speakeasy, an agent runs as the directory user behind the session or as an Agent Identity, which syncs from providers that model agents natively, such as Entra Agent ID, or is created in Speakeasy when the provider has no such concept. Agent Identity is in early access. In Runlayer, an agent runs as an Agent Account, an OAuth client whose identity lives inside Runlayer rather than in your identity provider, and acts as a specific user only when on-behalf-of delegation has been set up.
Does Speakeasy support agents with their own identity?
Yes. Agent Identity, currently in early access, gives an agent a principal of its own with its own roles and grants. It can be tied to a user or act with its own authority. It syncs from identity providers that support an agent identity concept and can be created in Speakeasy for providers that do not. The same grant evaluation and audit trail apply to Agent Identities and to people.
Do Speakeasy and Runlayer have the same security capabilities?
On the core jobs, yes. Both inspect tool definitions at registration and tool calls in flight, detect prompt injection and sensitive data, monitor behavior across a session, discover unsanctioned MCP servers on endpoints, and enforce allow or block policies. They differ in reach and authoring: Runlayer adds a browser extension, an in-process Hooks SDK, and an intent-alignment guard, while Speakeasy adds Linux endpoint enforcement, a LiteLLM pre-call guardrail, natural-language guardrails with replay, and CEL detection rules.
How does RBAC differ between Speakeasy and Runlayer?
Speakeasy evaluates grants against a directory principal on every tool call, with the tool's disposition derived from its MCP annotations and a deny pass that always beats allow. Runlayer evaluates policies at its proxy that combine principals with runtime conditions over tool arguments, IP ranges, OAuth state, and session history, and on delegated calls enforces the intersection of agent, user, and server policies. Runlayer's condition language is richer; Speakeasy's principal is always a directory identity.
When is Runlayer a better choice than Speakeasy?
Pick Runlayer when you want in-process enforcement for custom agents through its Hooks SDK, when masking or blocking prompts in browser-based chat apps is a priority, when the control plane must run in your own AWS account including air-gapped, or when you want agents modeled as principals deliberately separate from the corporate directory.
What is the difference between an MCP gateway and an AI control plane?
An MCP gateway is the enforcement point on the path between agents and tools: it authenticates sessions, applies policy to each tool call, and records what happened. An AI control plane includes a gateway and adds identity synced from the enterprise directory, RBAC administration, audit, cost, and observability across every agent surface. Speakeasy ships both; see https://www.speakeasy.com/product/mcp-gateway and https://www.speakeasy.com/product/ai-control-plane.

Last updated on

AI everywhere.

Control here.