Manage an existing Oso integration
Oso is an authorization platform that provides fine-grained access control for AI agents. This topic is for Aperture admins managing an existing Oso integration.
Aperture sends tool use data to Oso using the hooks system. The hook defines the Oso endpoint, and a grant specifies which requests trigger the hook and what data to include.
Oso is a third-party service. When Aperture forwards request data to it, Oso's use of that data is governed by your agreement with Oso, not your agreement with Tailscale.
Oso uses asynchronous hooks (tool_call_entire_request) that fire after the response completes. For synchronous pre-request enforcement that can block or modify requests before they reach the provider, refer to guardrails.
Prerequisites
Before you begin, ensure you have the following:
- Access to your Aperture gateway.
- The admin role in Aperture to access the admin dashboard and edit configuration.
- An existing Oso integration configured in Aperture and access to its Oso account.
Review or update the Oso hook
To review or update an existing integration:
-
Open the Aperture admin dashboard and go to Administration > Configuration.
-
Find the existing
osoentry in thehookssection. If you need to replace its API key, update theapikeyvalue with a key from your Oso account."hooks": { "oso": { "url": "https://api.osohq.com/api/agents/v1/model-request", "apikey": "<oso-api-key>" } }Keep the existing endpoint unless Oso instructs you to change it.
-
Review the grants with a
send_hooksentry that references theosohook. Each grant controls which requests trigger the hook and what data Aperture sends. For example:"grants": [ { "src": ["*"], "app": { "tailscale.com/cap/aperture": [ { "send_hooks": [ { "name": "oso", "events": ["tool_call_entire_request"], "send": ["user_message", "tools", "request_body", "response_body"] } ] } ] } } ]This configuration forwards full request and response bodies (
request_bodyandresponse_body), which contain prompt and model-output content, not just tool-use metadata. Send only the data Oso needs for your authorization policies. To limit which users' requests trigger the hook, replace"*"in thesrcfield with specific user identities or tags. -
Save the configuration.
For details on hook events and send types, refer to the hooks configuration reference.
The grant examples on this page use Aperture configuration syntax, where the dst field is not required because the destination is the Aperture device itself. If you define grants in the tailnet policy file instead, you must include a dst key specifying the Aperture device (for example, "dst": ["tag:aperture"]). Omitting dst in a tailnet policy file grant causes the grant to silently have no effect. For a full comparison and conversion steps, refer to Aperture grants vs. tailnet policy file grants.
Verify the integration
After updating the Oso hook or its grants, verify that Aperture is sending the intended data to Oso.
- Send a request through Aperture that includes a tool call and matches your grant conditions.
- Open the Oso dashboard and confirm the tool use data appears.
If data doesn't appear, check that the send_hooks name matches the key in your hooks section and that the grant's src field includes the user who made the request.
Next steps
- Build a custom webhook to send Aperture data to other services.
- Learn about hook events and data types in the configuration reference.
- Explore other external integrations for Aperture.