Own The Climb LogoOwn The Climb
Security at Own The Climb

Your data
stays yours.

Protected in code, not in promises.

Encryption everywhere, access that expires, and AI that never trains on your data, enforced by the system itself and proven on request.

AES-256
Encryption at rest
TLS 1.2+
In transit
Zero
Data retention
Hardware
Key-backed MFA
Encryption everywhere
Zero data retention
Hardware-key access
Isolated deployment options
Static analysis on every change
72-hour breach notification
How your data is handled

Your data never trains anyone's models.

For AI work, we run inference on BAA and enterprise model tiers (Vertex AI, AWS Bedrock, OpenAI's BAA tier) that do not retain or train on your data. Your information is processed for the task and nothing is persisted to model infrastructure. PHI never reaches a model without an executed BAA, and network egress to any non-BAA destination is blocked at the application layer.

A signed enterprise data agreement

No training

We run inference on BAA and enterprise model tiers that are contractually barred from training on your data. Your prompts and your records never become someone else's training set. The terms are written into the model contract, not assumed.

An empty server drive bay

No retention

Your data is processed in memory for the duration of the task, then it is gone. Nothing is persisted to model infrastructure, no prompt logs, no embeddings cache, no retained copy on the provider side. There is no quiet store for it to leak from later.

A signed Business Associate Agreement

No non-BAA path

Network egress to any destination without an executed BAA is blocked at the application layer, in code. PHI cannot reach a model that has not signed for it. The boundary is enforced by the system, not left to a person to remember.

Access control

Access that has to be earned, and expires.

Hardware-backed MFA on every administrator and engineer account. No SMS codes, no shared logins. Production access is requested per task, scoped to the smallest necessary surface, granted for a fixed window, and revoked when the work is done. Every grant is logged with who, what, why, and for how long.

A hardware security key

Identity

  • Hardware-backed MFA on every administrator and engineer account
  • No SMS codes, no shared logins, no password-only access
  • Phishing-resistant security keys for engagements that require it

Authorization

  • Role-based access control enforced at the application layer
  • Postgres Row-Level Security enforced again at the database
  • The same permission check fires in two places by design, so one missed guard cannot expose data

Just-in-time

  • Production access is requested per task, never standing
  • Each grant is scoped to the smallest necessary surface
  • Access expires on a fixed window and every action is logged with who, what, and why

Lifecycle

  • Quarterly access reviews remove anything no longer needed
  • Onboarding and offboarding follow a documented checklist
  • Departed personnel lose all access the same business day
Architecture and isolation

Run it your way. Cloud, your private network, or fully isolated.

Tenant isolation is enforced at the database with Postgres Row-Level Security. Where an engagement requires it, we deploy into your private VPC or a fully isolated, network-restricted environment. You choose where your data lives. We pin the region in code and verify it at deploy time.

A private, isolated enterprise data center

Cloud

Data residency
Mainland-US regions, region pinned in code
OTC access level
Scoped, time-bounded, logged
Zero data retention
Available
Network egress
Allowlist at the application layer
Code-enforced controls

Controls enforced by the code itself.

Policy without enforcement is just a document. Our controls are written into working software: a static-analysis gate runs on every pull request, a build cannot proceed if a control regresses, and the runtime is default-deny. A forgotten sensitive field has no path out.

01

Pre-merge

A static-analysis rule blocks the pull request if a new code path writes a field that is not on the allowlist. The author sees it in code review, before anything ships.

02

Build-time

The same rule runs in continuous integration. A build cannot proceed if a control regresses, so a broken guard never reaches an environment.

03

Runtime

The serializer is default-deny. Unknown fields are dropped, not silently forwarded, so a field nobody anticipated still has no path out.

outbound/scrub.ts
live
// outbound/scrub.ts — every event leaving the process
// passes through this allowlist serializer first.
 
type OutboundEvent = Record<string, unknown>;
 
// Fields permitted to leave. Everything else is dropped.
const ALLOWED: ReadonlySet<string> = new Set([
"event_id", "event_type", "occurred_at",
"tenant_id", "actor_role", "resource_kind",
]);
 
export function scrub(event: OutboundEvent): OutboundEvent {
return Object.fromEntries(
Object.entries(event).filter(
([key]) => ALLOWED.has(key),
),
);
}
 
// CI rule: emitters that bypass scrub() fail the build.
// A new field is invisible until it is allowlisted here.

Single source of truth

The allowlist is the source of truth. A field is invisible to the outside world until someone adds it on purpose and a reviewer signs off.

Three layers, one rule

The same rule runs at three layers, so no single missed review can let sensitive data slip out unnoticed.

Safe by default

Default-deny means the failure mode is safe. When something unexpected appears, the system drops it rather than leaking it.

Vulnerability management

We look for the weaknesses first.

Every pull request runs static analysis before it can merge. Every production deploy triggers dynamic scanning, and critical findings block the release. For engagements that require it, we commission independent third-party penetration tests, track every finding to closure with date evidence, and re-test the critical ones.

Security code review and penetration testing

Static analysis

  • Semgrep runs on every pull request, before any code merges
  • A finding can block the merge until it is resolved or explicitly accepted
  • Rules encode our own control policy, not just generic checks, so our specific guardrails are enforced

Dynamic scanning

  • Nuclei DAST runs against every production deploy
  • Critical findings block the release rather than ship and wait
  • The application is re-scanned on the next deploy, so a fix is confirmed in place

Penetration testing

  • For engagements that require it, we commission independent third-party tests
  • Every finding is tracked to closure with date evidence, not just noted
  • Critical findings are re-tested after remediation to confirm they are actually closed

Found a vulnerability? We want to know.

Report it to security@owntheclimb.com. Our disclosure policy and contact are published at /.well-known/security.txt.

No-pressure security review

Reviewing us for a security-sensitive build?

Bring your security team. We will walk your architecture, share our control documentation, and answer the questionnaire directly. You own all code, data, and models from the first commit.

Architecture walkthrough
Control documentation
You own everything

Agentic Systems · AI Agents · Custom Software