Skip to content

Choose Your Production Integration Path

You have protected a real service, made your runs identifiable, and traced both an allow and a deny. One decision remains before production work starts: where enforcement happens in your architecture. This page helps you make that decision once, deliberately.

So far, every call was verified by the Gateway - the checkpoint in front of your service. That is one of two possible boundaries:

BoundaryHow it worksChoose it when
Gateway-routed (what you have been using)Requests travel through the Gateway, which verifies each mandate, attaches upstream credentials, and records the action result centrally.Your protected target is HTTP and you want enforcement, credential brokering, and audit in one place your services never have to implement.
In-process adapterYour own service verifies mandates inside its process using a framework adapter, then records its own action results.You own the service’s code, and requests should not detour through a central checkpoint - for latency, topology, or deployment reasons.

Both enforce the same contract; they differ in where verification runs and who writes the action-result audit. Start with the Gateway boundary unless you have a concrete reason not to - it is the path you have already proven end to end.

Complete Trace One Protected Request or be able to explain an equivalent request from application to resource.

Gateway-routed - requests detour through the central checkpoint:

If your production path is…Continue with
Route HTTP traffic through the Caracal GatewayProtect a Gateway-Routed HTTP API

In-process adapter - your service verifies mandates itself:

If your production path is…Continue with
Protect an Express resource server in processProtect an Express App
Protect a FastAPI or Starlette service in processProtect a FastAPI App
Protect a FastMCP server in processProtect a FastMCP App
Protect a Go net/http service in processProtect a Go net/http Service
Protect an MCP server without a dedicated adapterProtect an MCP Server

Two paths sit alongside the boundary choice rather than replacing it - how your application code obtains authority, and how existing CLIs receive provider credentials:

If you also need to…Continue with
Add Caracal sessions and Gateway calls to app codeTypeScript SDK, Python SDK, or Go SDK
Launch an existing CLI or worker with injected provider credentialsRun an Agent with caracal run

These build on a verified boundary; none of them replaces it:

When you need to…Continue with
Model zones, apps, resources, and customer boundariesModel Your Application in Caracal
Configure provider credentials or OAuthDefine Resources and Providers and Provider Recipes
Debug denies or unexpected allowsDebug Authorization Decisions
Hand narrowed authority between agentsImplement Multi-Agent Delegation
Export or query audit evidenceTail and Query the Audit Stream
Hold sensitive actions for human approvalHuman Approval
RoleStart with
App engineerSDK guide for your language, then the Gateway or adapter guide.
Platform engineerProduction Integration Patterns, then operations pages.
Security reviewerDebug Authorization Decisions, Audit and Request Traces, and Review the Threat Model.
Policy ownerAuthor Policy Data and Activate a Policy Set.

You leave this page with one primary enforcement boundary and one implementation guide, recorded before anyone adds delegation, approvals, or alternative adapters. You have completed the tutorial path: a real protected API, identifiable runs, self-serve debugging, and a deliberate production direction.

Open Guides and follow the path that matches your boundary.