Security and trust
Authorization is decided on the backend, in layers.
Every call to a Pyrana App passes one gate, takes one authorization path, and writes one execution record before it runs. The page only reflects the outcome. Facts that still need sign-off are marked to confirm.
- SOC 2 aligned
- Private tenant or client infrastructure
- No training on client data
- SSO · Entra ID · OAuth
- Tenant isolation with RLS
To confirm before publication
- · Penetration test firm and date
- · SOC 2 audit status and report availability
- · Subprocessor list
- · Data residency regions offered
- · Retention periods for data, content, and telemetry
- · SIEM export path
- · Security contact address and disclosure policy
01Vocabulary
Client data. Client content. Platform telemetry.
Three different things with three different homes and three different readers.
Client data
- What
- Records, credentials, and identities an App is bound to: the ledger, the CRM, the project graph in a client extension.
- Where it lives
- Stays in the client's systems and the extension's own storage. Agents query it live through tool sources; the platform does not need to store it.
- Who can see it
- Callers with a matching access profile and scope entitlement. Anything else is absent from results.
Client content
- What
- Documents and conversations that become Context Units, and the resources an App publishes.
- Where it lives
- cortIQ stores Context Units in the client's deployment. Resources are versioned and held under the App that produced them.
- Who can see it
- Authorization is applied before retrieval returns, so an unauthorized unit is absent rather than redacted.
Platform telemetry
- What
- Operational metadata needed to run, audit, and evaluate: gate decisions, tool calls, approvals, effects, context accounting, traces and tokens.
- Where it lives
- Audit and telemetry records in the client's deployment, written before execution. Available as JSON.
- Who can see it
- Tenant administrators and the auditors they grant access to.
02Identity and access
The identity the enterprise already runs, extended to agents.
People arrive through SSO (Entra ID, OAuth). Services arrive with OAuth client credentials. Identity is explicit: an agent with its own identity, an agent on behalf of a user with a delegated token that names both, a workflow as a service principal. Nothing in the chain is flattened into a shared account.
Authorization is decided in five layers, all on the backend. Each layer narrows the one above it, and the frontend only reflects the result.
- 01TenantThe hard boundary. Row-level security in Postgres; every query carries the tenant.
- 02App membershipA caller belongs to an App or does not. An App a caller is not a member of reads as absent.
- 03Access profileWhat a member may do in the App: read, run, approve. Reading a record and approving a change are two different permissions.
- 04Scope entitlementWhich entity, project, or review queue the profile applies to. Tool policies map the entitlement to tool arguments before the call.
- 05Approval lanesConsequential actions route to a named group before they execute. A queued request is visibly different from a posted entry.
- initiator
- maya.chen · sso:entra-id
- app
- finance-close@v14
- agent
- agent:close-reviewer · own identity · delegated for maya.chen
- tool
- tool:ledger.journal.post
- authority
- child ⊆ parent · live policy re-checked
- credential
- erp connection held by platform · never by the agent or extension
Illustrative. Pyrana Capital is a synthetic portfolio.
03Application security
What an App may do is decided per call, at the gate.
One gate admits every call, whether it arrives from a page, the copilot, the API, MCP, a schedule, or an external event. The same eight steps run for a person and for an agent.
One gate, fail closed
Every call through every door passes eight steps before dispatch: identity and idempotency key; active App version; target exists and caller allowed; page and resource references resolved to exact versions; one authorization check; idempotency claimed and the execution row and audit record written in one transaction; dispatch to the native host; outcome recorded. Any uncertainty is a refusal.
Identity is explicit
An agent with its own identity, an agent on behalf of a user, a workflow as a service principal. All three take the same authorization path, and a child call never exceeds its parent's authority.
Tool policies before the call
Tool policies map a caller's scope entitlement to tool arguments before the tool runs. Above a threshold the invocation freezes and routes to a named lane; the frozen call is revalidated before it dispatches once.
Extensions reachable only through the platform
Client-owned durable services run in the same cluster, built with the platform library that handles authentication and authorization up front. Not publicly accessible. Outbound actions are performed by the platform with platform-held credentials.
Secrets never in prompts
Connector credentials are held by the platform. Prompts carry references, not secrets. Model calls go through the client's keys to the providers the client configured.
No existence leak
Unauthorized resources are absent from listings and resolve as not found. The refusal is in the audit record, never in the response.
- where
- a dedicated private tenant (SaaS), or the client's own infrastructure
- durability
- Temporal workers: checkpoint, suspend, resume; horizontal scaling
- worker pools
- separate pools for data fetching, file extraction, and the code interpreter
- tenant
- row-level security in Postgres · OpenFGA
- models
- a model per agent through provider adapters · client keys · no mid-run switching
- training
- client data is never used to train external models
- residency
- regions: TO CONFIRM
- retention
- data / content / telemetry: TO CONFIRM
04Deployment and isolation
Deployed in the client's cloud. Client data never trains external models.
Pyrana is hosted as SaaS on a dedicated private tenant, or deployed into the client's own infrastructure for large enterprises. Temporal workers provide durability and horizontal scaling, with separate worker pools for data fetching, file extraction, and the code interpreter. Tenant isolation is enforced at the database with row-level security, with OpenFGA relationship checks above it.
A model is assigned per agent through provider adapters (Azure OpenAI, OpenAI, Anthropic, Fireworks, Google Gemini, and others), with the client's own keys; models are not switched mid-run. Knowledge lives in the context engine rather than in model weights.
Roadmap: passing the user's own principal through to data platforms such as Snowflake and Databricks, so their row-level security applies to the agent's query as it would to the person's.
05Audit and observability
Written before execution, not reconstructed from logs.
The gate claims an idempotency key and writes the execution row and the audit record in one transaction, before dispatch. A crash after dispatch leaves a record that says the call left the platform with an unknown outcome, never nothing. Every admitted call produces one AppExecution record, and a refused call leaves the same evidence as an admitted one. Traces, tokens, and tool errors for every run are captured and available as JSON.
- actor chain
- maya.chen (sso) → finance-close@v14 → agent:close-reviewer → tool:ledger.journal.post
- app
- finance-close v14 · sha256:3f9a71c2…e08b
- target
- ledger.journal.post · lane=agent · door=copilot
- profile / scope
- controller · entity:US-01 · period:2026-08
- resources
- policy jrnl-threshold v3 · cxu_set close-controls 2026-08-30
- policy
- { approval.journal.amount } · amount >= 25,000 USD → approval_required
- approval
- controller-approval · j.alvarez · approved · 2026-09-02T14:07:11Z
- effects
- erp.journal.create → JE-88213 · receipt sha256:b71d…
- context
- retrieved 12 ⊇ injected 6 ⊇ cited 2 · cxu:1220a7ff…f843 · cxu:9b31e0d4…21aa
Illustrative record. Pyrana Capital is a synthetic portfolio.
06Compliance
Aligned means mapped, and to which criteria.
SOC 2 aligned means Pyrana's controls are mapped to the SOC 2 trust services criteria. Pyrana does not describe itself as certified until an auditor has. For customer programs under HIPAA, SOX, ISO 27001, and PCI DSS, the platform supplies the controls those programs need: identity, isolation, approval lanes, and an audit record written before execution.
- SOC 2
- Aligned. Controls mapped to the trust services criteria. Audit status: TO CONFIRM.
- HIPAA · SOX · ISO 27001 · PCI DSS
- Supports customer programs under these frameworks. Not a claim of certification.
- Penetration testing
- Firm and date: TO CONFIRM.
- Subprocessors
- List: TO CONFIRM.
07Responsible disclosure
Reporting a vulnerability
Security contact address and disclosure policy: TO CONFIRM before publication.
08Questions
Frequently asked
Where does Pyrana run?
How does the platform scale?
How is one tenant separated from another?
What can an agent see that a person cannot?
Does a user's own permission pass through to the data platforms?
What does the audit record contain?
Can a security questionnaire be answered from this page?
Security questionnaires are answered with mechanisms.
Every control on this page maps to a step in the gate.