security & data access
Telemetry is read-only. Raw events stay in your store; Perfloop keeps only derived aggregates and snapshots. On code, the only writes are case branches and the pull requests they carry. The merge is always yours.
every data-access claim here is verifiable against the access you granted and your own audit logs
The contract is the same for every customer. One connection is live today — the code host. The telemetry connectors are in development, so the telemetry rows below are the contract for when each ships, not a connection you can make yet. Which datasets and fields it binds to is something you configure with your telemetry source's own primitives, before any discovery runs.
| category | what crosses the boundary | what perfloop keeps | retention |
|---|---|---|---|
| metricsread-only | aggregated series with their labels: metric names, label keys and values, percentiles, rates, counts | snapshot-level summaries | life of workspace |
| tracesread-only | span structure: names, durations, status, service labels. other attributes only as keys you approve per case; default none | derived topology + timing summaries | life of workspace |
| logsread-only | aggregate query results only: counts, distributions, percentiles, and approved grouping values from views you author or datasets you sanitize. raw-row and cross-source queries are rejected before egress | aggregates | life of workspace |
| profilesread-only | stack frames and sample counts; code structure, no payloads | derived flame summaries | life of workspace |
| source coderead + pr write | code in repos you connect; the writes are case branches and the pull requests you review, never a merge | repo structure (symbols, references, packages, files, entry points) | life of connection |
never collected
What you connect and where Perfloop runs are separate, independent choices. Each connection is its own grant and revokes on its own. Nothing is connected by default.
Read access plus PR-write on repositories you select: the only writes are case branches and the PRs they carry, never a merge. Stands alone; no telemetry required.
read-only repo grant · benchmarks run in perfloop's sandbox · writes: case branches + prs, never a merge
A separate grant over views you author or datasets you sanitize. Aggregates are the only mode Perfloop uses.
customer-configured dataset/view scope + query-only credential are the confidentiality boundary · aggregate validation is defense in depth
One workspace per customer on shared infrastructure.
the default · your data stays in this deployment
The derived model never leaves your boundary.
byoc · enterprise · same contract, your residency
soc 2 attests our controls and applies regardless of what you connect or where we run · status below
Customer-authored views or sanitized datasets, together with query-only credentials you scope at the provider, are the telemetry confidentiality boundary. Perfloop validates access to each named resource; it cannot inspect the credential's complete provider grant. Connectors also reject raw event rows and cross-source queries before egress; schema reads expose field names and types only. The aggregate-query guard minimizes data movement; because grouped results can contain authorized dimension values, it is defense in depth, not isolation. Every guide lists the grants you must configure before anyone connects anything.
datadog · axiom · grafana · gitlab · bitbucket: guides ship with their connectors · all connection guides
The agent runs your code and reads your telemetry, so the architecture treats it as compromised and contains it.
the agent is treated as compromised
Containing the agent is half of it. The platform that holds your derived data is itself least-privilege.
least privilege by default
Answered up front, against ground truth.
Today, connected source code enters model context; telemetry connectors are in development, and when they ship only aggregates will. That context goes to OpenAI's API. OpenAI does not log or store those requests (store=false, zero data retention). Customer content is not used to train models. By design, raw log events never enter model context: the planned telemetry path reads aggregates, not rows.
Assume it happens; the architecture does. The session holds no upstream provider credentials and has one network path: the proxy, where destination allowlists, per-session permissions, and credential injection are enforced outside the model. A hijacked agent gains no provider credentials, no new destinations, and no way to merge anything, and every request it makes passes through the proxy's route checks.
Google Cloud hosts the product. OpenAI runs inference over their API. They do not log or store those requests (store=false, zero data retention). WorkOS authenticates users and stores account data (name, email, IP address) for anyone who logs into Perfloop, and never receives your telemetry or source code. Axiom holds Perfloop's own operational telemetry: service logs and metrics about Perfloop itself, which exclude customer code and customer telemetry content.
Operating the product on your behalf can require a Perfloop engineer to run a support session against your workspace. That access is SSO-authenticated, runs over the same proxy-mediated, revocable grant your own sessions use, and uninstalling cuts it. The formal controls around it (per-incident scoping, time-boxing, and access logging) are in progress, and we'll walk your team through exactly where they stand under a security review.
You revoke on your side, not by asking us. Uninstall the GitHub App and access dies immediately: the proxy mints every token per request from that App, so once it's gone there is nothing left to mint. No ticket, no waiting on us.
We don't need to; that is the point of the contract. The categories are fixed and customer-invariant. The mapping to your datasets and fields happens inside grants you've already scoped: Perfloop discovers within them and proposes expansions per case, with stated justification, for you to approve. Access always precedes discovery.
This page documents what Perfloop accesses and how that access is controlled, in claims you can verify today. Formal attestations are in progress; their status is below.
full specification + security questions: security@perfloop.ai →