These products sit between the agent and the tools. The decision happens when a call is attempted, and the credential is attached by something other than the agent.
Agentic Fabriq
Our own product, classified on the same dimensions as everything else. Each user connects a provider once; the credential is held in a vault and attached to the outbound call server-side at call time, so it is never in the agent’s context, prompt or logs. Each call records two identities — the agent and the user it acted for — in one audit record. The tool list an agent gets back is the intersection of that user’s grant and the agent’s own scopes, so neither side can widen the other. Anything the layer cannot decide is denied: the default is fail-closed.
- Identity model
- aact:identity-model/per-agent-identity
Each agent is registered with its own scopes, separate from the users it acts for.
- Delegation model
- aact:delegation-model/on-behalf-of-user
- aact:delegation-model/on-behalf-of-end-customer
Every call is attributed to one named user, including the case where that user is a customer’s employee using their own account.
- Credential model
- aact:credential-model/credential-never-exposed
The per-user credential stays in the vault and is attached server-side at call time; the agent receives a result, not a token.
- Authorization model
- aact:authorization-model/intersection-of-agent-and-user
The effective tool list is the intersection of the agent’s scopes and the user’s grant. This is scope arithmetic, not a policy engine: there are no conditions, attributes or rules to write.
- Enforcement point
- aact:enforcement-point/gateway
The decision is made and the credential attached in the layer, not in the agent and not in the prompt.
- Failure behavior
- aact:failure-behavior/fail-closed
A missing grant, an unscoped tool or an undecidable call is denied, and the denial is recorded.
- Human oversight
- aact:human-oversight/post-hoc-review
There is no approval workflow. A person consents when connecting a provider and reviews the audit record afterwards; no action waits for an approver.
- Audit granularity
- aact:audit-granularity/per-action-with-principal-chain
Each call records the agent, the user it acted for, the tool and the outcome in one record.
- Resource surface
- aact:resource-surface/saas-api
- aact:resource-surface/mcp-server
- aact:resource-surface/code-and-shell
Third-party SaaS APIs, tools exposed over MCP, and coding agents reached through the same intersection.
Right choice when: Agents act for named individuals against third-party SaaS, you want the credential never to reach the agent, and you need a per-call record naming both the agent and the person. The intersection rule is the reason to pick it over a plain token vault: a low-privilege user cannot borrow a broadly scoped agent, and a narrow agent cannot be widened by a privileged user.
What it does not do: No approval workflow: nothing holds an action until a human signs off, so if your control has to be a gate rather than a record, this is the wrong layer. No policy engine: if you need conditional or attribute-based rules, the intersection of two scope sets will not express them. No provider-side revocation — clearing a vault copy stops us using the credential, but it does not revoke the grant at Google, Slack or Salesforce. That has to be done in the provider’s own console, and an export taken before the clear is still an export. No payload inspection: we decide on scope, not on the content of a call, so a product that has to redact sensitive data inside a tool call needs something else. And on the developer product our shared provider apps are a paid-plan feature — on the free plan your users authorize through an OAuth app you register, and Gmail and full Google Drive use your own Google app on every plan because Google treats those scopes as restricted.
Read on 29 October 2026: What is Agentic Fabriq; Agent Permissions — how agent and user scopes intersect; Audit Trail — what is recorded on every call; Fabriq Developer — plans, limits and the external-user model; Developer Quickstart — the ten-line integration; Agentic Fabriq pricing — the plan boundary on shared provider apps
Arcade
Arcade describes itself as an actions runtime for agents: it “handles OAuth and manages user tokens, API keys, and secrets for tools like Gmail and Google Drive”, and enforces per-action authorization at runtime. Authorization is scoped to the user the call is made for — “when an agent calls a tool, if the user has not granted the required permissions, Arcade Engine will automatically prompt the user to authorize the tool and coordinate the OAuth 2.0 flow with the service provider.” Each tool declares the scopes it needs. Group-based tool access and contextual access policies control who can invoke which tools, and the platform emits OpenTelemetry audit logs. Its homepage, re-read 29 October 2026, states the same two-sided rule this page classifies us on: agents “act on behalf of the authenticated user, never through broad service accounts” and “every action runs at the intersection of what the user can do and what the agent is scoped to do”, with pre- and post-tool-call hooks that “Inspect every request before it runs and every response before it returns”. Its own production guidance adds a cost worth reading before launch: Arcade’s default OAuth apps “can only be used with the Arcade user verifier, which requires each end user to sign in to an Arcade account that is a member of your project”, so a multi-user product needs its own OAuth app paired with a custom user verifier it writes and hosts.
- Identity model
not classified
The unit of identity in a call is the user the tool is executed for; the documentation read does not describe a per-agent registered identity distinct from the calling application.
- Delegation model
- aact:delegation-model/on-behalf-of-user
- aact:delegation-model/on-behalf-of-end-customer
Every tool call is bound to a user id, which in a multi-tenant product is each of your customers’ own users.
- Credential model
- aact:credential-model/credential-never-exposed
Tokens stay in Arcade’s infrastructure and are not handed to the agent or the model.
- Authorization model
- aact:authorization-model/per-action-policy
Per-action authorization at runtime, with group and contextual access deciding which users may invoke which tools and scopes.
- Enforcement point
- aact:enforcement-point/gateway
The Arcade Engine sits between the agent and the tool and executes the call.
- Failure behavior
not classified
A missing grant triggers an authorization prompt rather than a silent pass, but the pages read do not state a fail-open or fail-closed posture for an undecidable call.
- Human oversight
- aact:human-oversight/post-hoc-review
The user is interrupted to consent when a scope is missing; the documentation read does not describe approval of individual actions.
- Audit granularity
- aact:audit-granularity/per-action
Tool execution is tracked and exported as OpenTelemetry audit logs.
- Resource surface
- aact:resource-surface/saas-api
- aact:resource-surface/mcp-server
A catalogue of SaaS tools, served to agents as hosted MCP servers.
Right choice when: You want a large catalogue of pre-built, authenticated actions rather than wiring providers yourself, and you are happy for the catalogue and the auth to come from the same vendor. The just-in-time consent prompt is well suited to consumer-facing or self-serve products where the user is present.
What it does not do: The tool catalogue is also the coupling: your agents reach providers the way Arcade models them. If you need an identity for the agent itself, distinct from the user, that is not what the documentation read describes. And on a default OAuth app, end-user authorization is tied to project membership, which its docs call “intended for development and single-tenant use” — a multi-user product carries both its own provider apps and a custom verifier route.
Read on 29 October 2026: Arcade documentation (home); How Arcade helps with authorization (Arcade documentation); Arcade homepage — the user-and-agent intersection and tool-call hooks; Secure auth in production (Arcade) — the user verifier and project membership
Gravitee
Gravitee puts one gateway in front of LLM traffic, MCP tool calls and agent-to-agent communication, with an identity layer underneath it. Identity is issued differently per deployment shape: Client ID Metadata Documents “bind desktop productivity agents directly to human workers via your enterprise SSO”; workload agents get “short-lived, auto-rotating SPIFFE/SPIRE cryptographic identities (SVIDs)” that “strictly bound the blast radius to a single hour”; hosted agents use “standard OAuth flows enhanced with CIBA and step-up MFA”. For upstream access it uses token exchange to “securely swap a user’s enterprise session for an upstream-scoped token”, so “the upstream system sees a legitimate token from its own issuer, without the user ever seeing the upstream credential”. It brokers token exchange and consent for third-party MCP servers, and keeps “a crystal-clear, per-user audit trail for every task delegated to an agent”.
- Identity model
- aact:identity-model/workload-identity
- aact:identity-model/per-instance-identity
- aact:identity-model/per-agent-identity
Three issuance paths by agent shape: SSO-bound desktop agents, hour-lived SPIFFE SVIDs for workloads, OAuth clients for hosted agents.
- Delegation model
- aact:delegation-model/on-behalf-of-user
- aact:delegation-model/agent-to-agent
Token exchange carries the user’s authority upstream, and the gateway covers agent-to-agent traffic as a first-class protocol alongside LLM and MCP calls.
- Credential model
- aact:credential-model/brokered-short-lived-token
The upstream credential is never shown to the user or carried by the agent; the gateway swaps a session for a scoped token per upstream.
- Authorization model
- aact:authorization-model/per-action-policy
Authorization Management enforces “fine-grained, per-entity policies based on exactly who the agent is”, fed by the identity layer.
- Enforcement point
- aact:enforcement-point/gateway
One gateway for LLM, MCP and agent-to-agent traffic, self-hostable like the rest of the Gravitee platform.
- Failure behavior
not classified
Not stated on the pages read.
- Human oversight
- aact:human-oversight/approval-for-high-risk
CIBA and step-up MFA put a person in the loop at authorization time, and the platform “intercepts upstream consent requirements” and surfaces them in the agent’s UI — consent and step-up rather than a reviewer’s approval queue.
- Audit granularity
- aact:audit-granularity/per-action-with-principal-chain
A per-user audit trail per delegated task, with identity feeding the gateway “for accurate lineage” so “every automated action traces back to a real person”.
- Resource surface
- aact:resource-surface/mcp-server
- aact:resource-surface/saas-api
- aact:resource-surface/internal-network
MCP servers and tool calls, LLM endpoints, agent-to-agent traffic, and internal APIs already behind a Gravitee gateway.
Right choice when: You already run an API management estate, or you want one self-hostable control point that covers model traffic, tool calls and agent-to-agent calls together — including cost and token visibility, which is an API-gateway concern the identity-first products do not address.
What it does not do: It is a platform, with the operational weight that implies. If you have no gateway today and only need per-user tokens for a handful of SaaS providers, this is more machinery than the problem needs.
Read on 12 October 2026: Identity & Access Management (Gravitee); AI Gateway for LLM, MCP & A2A governance (Gravitee)
Keycard
Keycard is runtime authorization for agents, organised around zones: “a logical grouping of users, applications, and resources that share a common set of security controls and policies”. Actors are users and applications; resources are “web APIs, MCP servers, and databases”; providers federate external identity and access systems such as Okta, Entra, AWS, GitHub and Slack. The access loop is challenge, request, evaluate, issue — the resource demands a credential, the application asks Keycard’s STS, policy is evaluated, and a scoped token is issued. “As each challenge and response is completed, policy is evaluated against the current authorization context”, which includes identity and group membership for the person and identity and delegated authority for the agent. Applications can “register a public key with the zone, avoiding use of shared secrets”, or authenticate with a workload identity, “eliminating the need for service accounts with long-lived secrets”. OAuth 2.0 token exchange supports cross-domain access and preserves delegation chains.
- Identity model
- aact:identity-model/per-agent-identity
- aact:identity-model/workload-identity
An application is a first-class actor in the zone, identified by a registered public key, a client credential, or the workload identity of the runtime it sits in.
- Delegation model
- aact:delegation-model/on-behalf-of-user
- aact:delegation-model/agent-to-agent
The authorization context carries both the person and the agent’s delegated authority, and token exchange preserves the chain across domains.
- Credential model
- aact:credential-model/brokered-short-lived-token
Credentials are “issued or brokered only after that check” — the agent gets a scoped token for the resource, including brokered credentials for external services.
- Authorization model
- aact:authorization-model/per-action-policy
Policy is a decision point evaluated on each challenge, against the identity and context current at that moment.
- Enforcement point
- aact:enforcement-point/target-system
- aact:enforcement-point/gateway
The decision is made by Keycard’s STS at issuance; the resource that issued the challenge validates the credential it gets back.
- Failure behavior
not classified
A credential is only issued when the check passes, but the pages read do not state the posture for an undecidable policy.
- Human oversight
- aact:human-oversight/post-hoc-review
Audit log and session views, plus revocation; no per-action approval step in the concepts documentation.
- Audit granularity
- aact:audit-granularity/session-level
The documentation describes an audit log and sessions, with each token exchange in the delegation chain recorded; it does not promise a record of every downstream call the token is then used for.
- Resource surface
- aact:resource-surface/saas-api
- aact:resource-surface/mcp-server
- aact:resource-surface/database
- aact:resource-surface/code-and-shell
Web APIs, MCP servers and databases, with setup guides for coding agents such as Claude Code and Cursor.
Right choice when: Multi-agent systems where authority is passed from one agent to the next and you need the chain to narrow at each hop rather than be re-presented whole. The zone model and public-key registration also fit teams that want no shared secrets anywhere.
What it does not do: It is infrastructure, and it expects you to model zones, actors, resources and policy before anything works. If your need is a per-user token for Gmail by Friday, that modelling is overhead.
Read on 12 October 2026: Concepts overview (Keycard documentation); Keycard (product site)