Trust & security centre
Answer the question before it is asked.
Kestrel holds standing permission to execute actions on employee laptops. For a product like that the security posture is the product, so this page is built to the same standard as the home page and answers with mechanisms rather than assurances.
Everything below describes something implemented. Anything on the roadmap is labelled as roadmap, with a date. Where the honest answer is no — air-gapped deployment, self-hosted inference, a SOC 2 report we do not yet hold — it says no.
- SOC 2 Type II
- In progress — window open
- Penetration test
- Annual, summary under NDA
- Data residency
- US · EU-IE · EU-DE
- Air-gapped
- Not supported
01
The architecture of restraint
Four things the system cannot do, stated as absent capabilities rather than promised policies.
Last reviewed 2026-07-22 · Security engineering
Kestrel holds standing permission to execute code on employee laptops. That is a serious thing to ask for, so the first section of this page is not what we promise — it is what the system is structurally incapable of. A policy can be changed by whoever holds the admin account. A missing capability cannot.
1. The model cannot emit code
The language model’s only output that reaches the rest of the system is a tool call: one action identifier drawn from Quarry, plus parameters validated against that action’s JSON schema. There is no field in that structure that carries free text to a shell. If the model returns an identifier that does not exist, the call fails schema validation and is logged as a rejected recommendation.
{
"action": "quarry.printspool.restart", // must exist in the signed bundle
"parameters": { "clear_queue": true }, // validated against the action schema
"rationale": "...", // stored verbatim, never executed
"confidence": 0.94
}2. The authorization decision is deterministic code
Creance — the autonomy engine — is plain, testable, reviewable logic with no model in its path. It takes the proposed action, the device, the resolved policy and the current time, and returns one of four outcomes. The same inputs always produce the same outcome. It is the artifact we expect your security team, our auditors and our insurer to read, and we will hand you the test suite.
3. The agent refuses anything not in its own signed bundle
The cloud sends Talon an action identifier. It cannot send an action body. Talon verifies the identifier against the Quarry bundle installed on that machine, whose signature it checks against a pinned certificate chain at load time. If the identifier is absent or the signature does not verify, the agent refuses, reports, and continues running. A compromised control plane cannot introduce a new capability to an endpoint; it can only ask for capabilities that are already there and already authorized.
4. Nothing is autonomous by default
Every tenant, every device group, every action starts Hooded (observe only). Autonomy is granted explicitly, per action, per risk tier, per device group, per time window. It is never inherited from a parent group and never enabled by an upgrade, a migration or a support action. There is no “enable all” control, in the UI or the API.
02
Data handling
Exactly what Talon collects, exactly what it does not, retention per class, and what is redacted before anything reaches a model provider.
Last reviewed 2026-07-22 · Security engineering
What Talon collects
- Running process list — image name, PID, parent, CPU and memory, signature status. Not command-line arguments, which routinely contain credentials.
- Service and daemon states, start type, last exit code, and dependency status.
- Windows Event Log slices scoped to System, Application and the specific provider relevant to an open incident. Time-bounded to the incident window.
- Disk capacity and free space per volume, memory pressure, uptime, and thermal state.
- Installed software inventory: name, version, publisher, install date.
- Network adapter state: adapter presence, link status, IP configuration, DNS servers, default route, VPN tunnel state.
- Recent change events: package installs, driver updates, OS patch history, and Kestrel’s own prior actions on the device.
- Hardware and OS identity: model, serial, OS build, architecture, domain or MDM enrollment state.
What Talon does not collect
This list is enforced by what the agent implements, not by a configuration setting. There is no collector for any of it.
- Keystrokes. There is no keyboard hook.
- Screen contents. There is no capture path, and no remote-view feature.
- File contents. Talon reads file metadata for diagnostics — size, timestamp, path — and never the bytes.
- Browser history, bookmarks, cookies, or stored credentials.
- Clipboard contents.
- Microphone or camera. The agent requests no such permission and holds no such entitlement, which is verifiable in the notarised macOS bundle and the Windows manifest.
- Personal document metadata outside diagnostic scope. The agent does not enumerate user home directories.
- Geolocation beyond the network egress region already visible to your own infrastructure.
Retention
| Data class | Default retention | Configurable | Where |
|---|---|---|---|
| Bells telemetry | 30 days | Yes, 7–180 days | Regional Postgres |
| Frozen observation snapshots | Life of the Flightlog entry | Follows audit retention | Object store, encrypted |
| Flightlog audit records | 1 year (Fleet), 90 days (Flight) | Yes, up to 7 years | ClickHouse, append-only |
| Ticket content | 90 days after resolution | Yes, or zero-retention mode | Regional Postgres |
| Model prompts and completions | Stored in Flightlog verbatim; not retained by the provider | Follows audit retention | ClickHouse |
| Device inventory | Current state plus 12 months of diffs | Yes | Regional Postgres |
Data residency
Tenant data is pinned to one region at creation and does not move. Available: us-east, eu-west (Ireland), and eu-central (Frankfurt). ap-southeast is on the roadmap for Q1 2027 and is not available today — if you need it now, we are not the right vendor yet and would rather say so.
What leaves your region for the model provider
Diagnosis runs against Claude via the Anthropic API. Before any payload leaves our infrastructure it passes through a redaction stage we call the scrub pass, which runs on every field without exception and cannot be disabled per-tenant.
- Usernames and email addresses are replaced with stable per-tenant pseudonyms. The mapping never leaves your region.
- Hostnames are pseudonymised while preserving their naming-convention shape, because the shape is diagnostically useful and the name is not.
- IP addresses, MAC addresses and serial numbers are replaced with stable tokens.
- Anything matching credential, key, token or connection-string patterns is dropped rather than tokenised — a redacted secret is still a secret in a log.
- Free-text ticket bodies are passed through, because the requester’s own words are the highest-value diagnostic signal. Zero-retention mode is available if your policy forbids this, at a measurable cost to diagnosis quality that we will quantify for your fleet.
03
Encryption & key management
mTLS everywhere, per-device certificates issued at enrollment, KMS-backed key hierarchy, and what happens on compromise.
Last reviewed 2026-07-15 · Security engineering
In transit
- Agent to cloud: gRPC over mutual TLS 1.3. The agent presents a per-device client certificate issued at enrollment; the cloud presents a certificate pinned to our intermediate. Both sides verify. There is no fallback to server-only TLS.
- Layered on the mTLS channel, a short-lived session token scoped to one device and one tenant, valid 15 minutes, refreshed over the same authenticated channel.
- Browser to cloud: TLS 1.3, HSTS with preload, and no support for TLS 1.1 or below.
- Cloud to your ticketing system: TLS 1.2 minimum, certificate validation enforced, no option to disable it.
At rest
- AES-256-GCM for all stored data, on managed storage with encryption enabled at the volume layer as well.
- Connector credentials use envelope encryption: a per-tenant data key wrapped by a KMS customer master key. Plaintext data keys exist only in process memory during a call.
- Connector credentials are never returned by any API response, never rendered back into the UI after save, and are scrubbed from application logs by a filter with its own test suite.
Key hierarchy and rotation
| Key | Backed by | Rotation | On compromise |
|---|---|---|---|
| Tenant data keys | KMS CMK, per tenant | Annual, automatic | Re-wrap and re-encrypt; no downtime |
| Device client certificates | Kestrel intermediate CA | 90 days, automatic renewal | Revoked via CRL and OCSP; device must re-enrol |
| Quarry bundle signing key | HSM, offline root | Intermediate annually, root at 10 years | Bundle pinned chain rotated; agents refuse the old chain |
| Talon binary signing | Authenticode + Apple notarisation | Per certificate lifetime | Certificate revoked; Mews forces update |
| Session tokens | Derived, not stored | 15 minutes | Expire on their own |
De-enrollment and compromise
When a device is de-enrolled, its certificate is revoked immediately and published to the CRL and OCSP responder. The agent, if still running, receives a stand-down over the independent Recall channel and stops acting. Telemetry stops. Historical Flightlog entries for that device are retained, because deleting the audit record of a device you just removed is exactly backwards.
If you believe a device certificate is compromised, revocation is a single call and is effective on the next connection attempt — under 30 seconds in practice. A revoked certificate cannot be used to enrol a new device; enrollment requires a separate, single-use Manning token.
04
The Quarry review pipeline
Every remediation action is authored as code, peer-reviewed by a security engineer, sandbox-tested, tiered, signed and versioned. The manifest schema is published.
Last reviewed 2026-07-28 · Security engineering
Quarry is the entire vocabulary of things Kestrel can do to a machine. Publishing our internal review process for it is unusual. We do it because the process is the control, and a control you cannot inspect is a control you have to take on faith.
The gate, in order
- Authored as code in the Quarry repository, with a declarative manifest. Never a script pasted into a console.
- Peer review by a named security engineer, who is not the author, and who has an unconditional veto. CODEOWNERS enforces it.
- Sandbox fleet: executed against a dedicated fleet spanning every supported OS build, including deliberately broken machines. Rollback is exercised on every run, not just the failure runs.
- Risk tier assigned from observed blast radius, not from author intent.
- Reversibility declared with a rollback procedure that has been tested. An action cannot be marked reversible without a rollback that ran.
- Signed and versioned into a bundle. Bundles are immutable; a fix is a new version, never an edit.
- Staged release through the Quarry channel, which is separate from the Talon binary channel so a remediation fix does not require a fleet-wide agent update.
The manifest schema
This is the real shape. Every field is mandatory except preconditions. The reference published in the docs is generated from these manifests at build time — there is one source, and hand-editing the reference fails CI.
id: quarry.printspool.restart
version: 4.2.0
platforms: [windows]
risk_tier: 0
reversible: true
rollback:
procedure: restore-service-state
tested_against: [win10-22h2, win11-23h2, win11-24h2, ws2019, ws2022]
requires_privilege: elevated
privilege_scope: single-call # escalate, act, drop — in one function
max_duration_seconds: 60
parameters:
clear_queue:
type: boolean
default: true
description: Delete queued jobs in the spool directory before restart.
preconditions:
- service_exists: Spooler
- device_health: [healthy, degraded]
verification:
- service_state: {name: Spooler, expect: running}
- test_print: optional
review:
author: <redacted>
security_reviewer: <redacted> # never the author
sandbox_run: 2026-07-19T09:14:22Z
signature: sha256:9f2b1c7ae04d…c81aRisk tiers
| Tier | Meaning | Example | Max autonomy available |
|---|---|---|---|
| Tier 0 | Read-only or trivially reversible | quarry.smb.credential.refresh | Unattended |
| Tier 1 | Reversible service-level change | quarry.printspool.restart | Unattended |
| Tier 2 | System change with a tested rollback | quarry.driver.rollback | Unattended, explicit grant only |
| Tier 3 | High blast radius or irreversible | quarry.disk.partition.resize | Approval required, always |
05
Autonomy, control & Recall
How Creance is scoped, how autonomy is earned with evidence, and the kill switch that works when everything else does not.
Last reviewed 2026-07-22 · Security engineering
What a rule can be scoped by
- Action identifier, or an action category, or a risk tier.
- Device group — static membership, or dynamic by OS, version, tag, directory OU, location or check-in recency.
- Reversibility requirement.
- Time window, evaluated in the device’s local timezone, not the tenant’s.
- Rate limits per device, per group, per hour and per day.
- Device health preconditions.
- User context — the exclusion of executive or VIP groups is a first-class field, because every enterprise asks for it.
- Maintenance-window awareness.
- Required approver role, for approval-gated outcomes.
Precedence
Deny always wins. More-specific scope beats less-specific. The resolution order is displayed in the policy UI on every rule, along with which other rules it interacts with. Silent precedence is how security policy interfaces cause incidents, so we show it whether or not anyone asks.
Earning autonomy with evidence
Autonomy is not a switch you flip on day one. An action accumulates a record under human approval; when that record is strong enough, the console proposes a scoped promotion with the evidence attached: “this action ran 214 times under approval with a 100% success rate and zero rollbacks — promote to unattended for Standard Laptops, business hours?” You accept a specific scope, not a general permission. Before saving, the simulator replays your last 30 days of Flightlog against the draft policy and shows exactly what would have changed.
Recall — the kill switch
Recall stands every agent down. It is reachable in one click from every screen in the console, and it is deliberately not behind a settings page or a “danger zone” accordion. Confirmation requires typing the word RECALL and shows the blast radius first: how many devices, how many actions in flight.
- Scope: global, per tenant, per device group, or per device.
- Effect: every agent in scope stops acting within 5 seconds. In-flight multi-step actions halt and roll back to their last checkpoint.
- Telemetry continues. You do not lose visibility at the moment you most want it.
- Independence: the stand-down travels on a channel separate from the orchestration path, with its own endpoint, its own credentials and its own health. Recall works when Stoop is down. We verify this in staging by taking orchestration fully offline before every release, and the test is a release blocker.
- Agents that are offline when Recall fires receive the stand-down as the first message on reconnect, before any work is dispatched to them.
- Recall is itself an audited action: who, when, from where, what scope, and how many devices acknowledged.
06
Compliance
SOC 2 status stated honestly with dates, control mapping, GDPR posture, sub-processors, pen-test cadence and disclosure policy.
Last reviewed 2026-07-30 · Security engineering
Control mapping
| Trust Services criterion | Implemented control | Evidence source |
|---|---|---|
| CC6.1 Logical access | SSO via WorkOS, SCIM deprovisioning, role-based access with an auditor role that reaches Flightlog only | Access review export |
| CC6.6 Boundary protection | mTLS with per-device certificates; no inbound listener on the agent | Certificate inventory, network policy |
| CC6.7 Data in transit | TLS 1.3 everywhere, HSTS preload, no downgrade path | TLS scan, quarterly |
| CC7.2 Monitoring | Flightlog append-only with hash chaining; SIEM export | Integrity verification report |
| CC7.3 Incident response | Documented severities and notification SLAs, tested quarterly | Tabletop exercise records |
| CC8.1 Change management | CODEOWNERS review, signed releases, staged rollout with automatic rollback | Release records, signing logs |
| A1.2 Availability | Independent status page, health-probe driven | Uptime history |
| P1 / GDPR Art. 32 | Scrub pass before egress, regional pinning, retention per data class | Redaction test suite |
GDPR and CCPA
- Kestrel is a processor. You are the controller for device and ticket data.
- A DPA is available and is signed at contract, not on request after the fact.
- Standard Contractual Clauses for transfers out of the EEA, with the transfer impact assessment provided.
- Data subject requests: deletion and export within 30 days, with the exception of audit records under an active legal hold, which is itself an audited state.
- Sub-processor list below is generated from a single source file that also feeds the DPA appendix, so the two cannot disagree. Change notification is 30 days in advance, by email subscription.
Testing
| Activity | Cadence | By | Available to customers |
|---|---|---|---|
| External penetration test | Annual, plus on major architecture change | Third-party firm | Summary letter, under NDA |
| Agent-specific red team | Annual | Third-party firm | Summary letter, under NDA |
| Dependency and container scanning | Every build | Automated | On request |
| Quarry action review | Every action, every version | Named security engineer | Process published above |
| Recall independence test | Every release, as a blocker | Automated in staging | Result in release notes |
Vulnerability disclosure
security@kestrel.io is monitored by a human, and /.well-known/security.txt is served on every Kestrel domain. We acknowledge within one business day, agree a disclosure timeline with you, and we do not use legal threats against good-faith researchers. There is no bounty programme yet; we say so rather than implying one.
Sub-processors
Generated from content/subprocessors, the same source that produces the DPA appendix, so the two cannot disagree. Subscribe at security@kestrel.io for 30-day change notice.
| Sub-processor | Purpose | Region | DPA |
|---|---|---|---|
| Amazon Web Services | Primary infrastructure, storage, KMS | US, IE, DE | signed |
| Anthropic | Model inference for diagnosis (Claude) | US | signed |
| ClickHouse Cloud | Flightlog audit store | US, EU | signed |
| WorkOS | SSO, directory sync, audit of auth events | US | signed |
| Stripe | Billing and payment processing | US | signed |
| Temporal Cloud | Durable orchestration state | US, EU | signed |
| Cloudflare | CDN, DDoS protection, WAF for web surfaces | Global edge | signed |
07
Shared responsibility
What Kestrel secures, and what you must configure. Enterprise reviewers look for this table specifically.
Last reviewed 2026-07-15 · Security engineering
| Area | Kestrel is responsible for | You are responsible for |
|---|---|---|
| Identity | Authenticating users, enforcing role permissions, session lifetime, SCIM deprovisioning | Your IdP configuration, who you grant policy_admin, and reviewing access |
| Autonomy policy | Evaluating policy deterministically and identically every time; showing precedence; refusing invalid configurations | Deciding what Kestrel may do unattended, and to which devices |
| Device groups | Resolving effective policy correctly and warning before a membership change alters autonomy scope | Group membership, and reading the warning |
| Endpoint agent | Signing, notarisation, sandboxing, privilege drop-back, rollback, update integrity | Deploying Talon, MDM/TCC pre-approval, and pinning a version if your change process needs it |
| Connector credentials | Envelope encryption, never rendering them back, scrubbing them from logs | Creating a least-privilege service account rather than using a personal admin login |
| Ticket data | Encryption, retention enforcement, redaction before model egress | What your users put in tickets, and choosing zero-retention if your policy requires it |
| Audit | Append-only storage, hash chaining, integrity verification, export | Retention period, legal holds, and reviewing the record |
| Availability | Platform uptime, independent status page, Recall independence | Network egress to our endpoints, and your own change windows |
| Incident response | Detecting, containing and notifying per the SLAs below | Keeping your security contact current, and acting on notification |
08
Incident response
Severity definitions, notification SLAs, escalation path, and the post-incident commitment.
Last reviewed 2026-07-15 · Security engineering
| Severity | Definition | Notify you within | Post-incident report |
|---|---|---|---|
| SEV-1 | Confirmed unauthorised access to customer data, or unauthorised action executed on customer endpoints | 4 hours of confirmation | Within 5 business days, unconditionally |
| SEV-2 | Credible indication of compromise, or a defect that caused an unintended action on a customer device | 24 hours | Within 10 business days |
| SEV-3 | Vulnerability with no evidence of exploitation, or a degradation affecting autonomy decisions | 3 business days | On request |
| SEV-4 | Vulnerability with no customer impact | Next release notes | No |
What we will tell you
- What happened, in plain language, including what we do not yet know.
- Which of your devices, tenants and data classes were in scope — specifically, from Flightlog, not estimated.
- What actions were executed, by whom or by what, with the authorizing policy version.
- What we did to contain it, and at what time.
- What you need to do, if anything.
A first notification will not be delayed to make it complete. We would rather send you an incomplete SEV-1 notice inside four hours and follow it than a tidy one on day three.
Escalation
Your named security contact is notified by email and by the webhook you configure. For SEV-1, a human calls. You may escalate at any time to security@kestrel.io, which pages the on-call security engineer directly and does not route through support.
09
Document shelf
Self-serve access to the artifacts a vendor review actually needs, including a pre-filled CAIQ-Lite.
Last reviewed 2026-07-30 · Security engineering
Everything a security reviewer normally has to email for. The CAIQ-Lite is the highest-leverage item on this page: it is pre-filled, answer by answer, against what is actually implemented, and it saves your team roughly a week.
Security whitepaper
availableArchitecture, threat model, and the four invariants in detail.
no gate — direct download
CAIQ-Lite, pre-filled
availableCross-checked line by line against implementation by a security engineer.
no gate — direct download
Architecture whitepaper
availableData flow diagrams, trust boundaries, and the agent privilege model.
no gate — direct download
Data Processing Agreement
availableWith the sub-processor appendix generated from the same source as this page.
no gate — direct download
Penetration test summary
availableMost recent third-party test. Findings and remediation status.
click-through NDA required
SOC 2 Type II report
pendingObservation window open since 12 April 2026. Target Q1 2027.
click-through NDA required
Insurance certificate
availableTechnology E&O and cyber liability, with the endpoint-action endorsement.
click-through NDA required
10
The hostile questions
The questions a security lead actually asks, answered directly, including where the answer is “not yet”.
Last reviewed 2026-07-28 · Security engineering
What happens if your AI decides to delete System32?
What if your cloud is breached — can an attacker run commands on my fleet?
What they could do is trigger authorized, reversible, tier-appropriate actions on devices inside your policy — restart a service you already let us restart. That is the real, bounded worst case, and we would rather state it than claim there is none.
Can I run it fully air-gapped?
Does Talon give you remote access to my machines?
Can your support staff see my ticket contents?
What stops a bad Quarry action from breaking 6,000 machines at once?
How do I prove to an auditor what happened?
What is your bus factor on the signing key?
Still have a question this page did not answer?
Send it to security@kestrel.io. If it is a question a reviewer would reasonably ask, the answer gets added to this page rather than emailed to one person — which is the entire point of publishing it.
security@kestrel.io