Security

Least data we need. Humans still approve the ticket.

SDK teams trust us with the ugliest hour of an evaluation — the stack still on screen. We designed AethelLayer so that moment is useful to you and boring to an attacker: hashed identity, org-scoped keys, RLS, and drafts that wait.

Identity

Hashed developer identifiers

Tickets

You hit send

SOC 2 Type II

Program in progress — not a badge yet

Trust pack

Questionnaire answers at /trust

What we believe about trust

Security pages that only list logos are ads. This one is an operating manual. If a control is not live, we say so.

Least data we need

We keep the stack, runtime, command, and error code. We do not want payment cards, government IDs, health records, or secrets you cannot afford to log. If it does not help you fix the failure, it should not be in the probe.

Hashed identity, not a dossier

Developer identifiers are hashed. We cluster failures so you can see fourteen people hit ERR_DOCKER_OOM — not so we can build a profile of a person. You keep the customer relationship.

Agents propose. Humans ship.

GitHub and Linear drafts wait for you. Playbooks can reply in-thread for known clusters. They do not open public issues on their own. If a product writes tickets without you, it is not a teammate.

The probe is read-only to your product

One line in the CLI, SDK, or middleware. We sit in the failure. We do not become your auth surface, your status page, or a new hot path in production traffic.

What a probe may contain

  • Error code, stack trace, endpoint path, taxonomy
  • Environment: CLI, Web SDK, or API middleware
  • Runtime, OS, SDK version when you send them
  • Hashed or opaque developer identifier
  • Optional metadata you attach (container, cluster, replay ids)

What you must not send

  • Payment card data, bank accounts, government IDs
  • Health records or other special-category data
  • Passwords, private keys, session cookies, unhashed secrets
  • Full source trees or customer PII you cannot afford to log

See the Acceptable Use Policy and DPA. InfoSec questionnaire: Trust pack.

How access actually works

The inbox is not a public dump of every stack on the internet. Ingest is keyed. Reading is membership. Writing tickets uses your GitHub or Linear token, not ours, unless you never connect them.

Authentication

Supabase Auth with email and password. Workspace membership is mapped in Postgres. Session cookies follow the authenticated App Router path. Demo workspaces stay local until you sign in for real.

Row Level Security

Org members only read their workspaces. Conversations, events, Memory Graph nodes, playbooks, and watch rules are gated by is_org_member. Ingest does not use a logged-in browser session.

API keys

Each organization has a live ingest key (aethel_live_…). Eval-mode keys add a time-boxed probe bonus for sales PoCs without opening Growth. Rotate from SDK setup. Treat keys like production secrets.

Ingest path

POST /api/v1/probes and POST /api/v1/graph/ingest require Bearer aethel_live_… keys. ingest_probe is a security-definer RPC: unknown keys fail closed, monthly limits live in the database. Graph writes are scoped to the org on that key.

Transport

TLS in transit on hosted paths. You remain responsible for how your CLI and SDKs store AETHEL_API_KEY. We do not ship keys in public blog snippets as live credentials.

Tickets

Connect GitHub or Linear with a token you control. Preview first. confirm:true creates the issue. The conversation stores the URL. Nothing auto-files.

Optional AI

If you set OPENAI_API_KEY, summaries and inbox replies may leave our boundary to that provider. If you do not, templates stay in-product. You choose.

Email

Watch alerts, sales leads, and Monday churn digests send only when Gmail SMTP, generic SMTP, or Resend is configured. Recipients are the workspace notify address you save in Settings.

Honest status

Preparing for SOC 2 Type II is a program, not a sticker.

We are building access reviews, change evidence, vendor inventory, and incident process. We will not claim certification until an auditor says so. Forward-looking statements are not warranties — see the Disclaimer.

Enterprise SSO, SCIM, audit log export, and VPC or dedicated region are scoped on a call. They are not hiding behind a self-serve toggle on Starter.

Subprocessors

Infrastructure we use to run the product. Optional rows only apply if you turn that integration on.

Supabase

Auth, Postgres, RLS, Realtime, Storage (avatars)

Vercel

Hosting, Analytics, Speed Insights, cron

OpenAI-compatible APIs

Optional summaries and replies — only if you bring a key

Resend or Google SMTP

Optional outbound email — only if you configure it

PostHog

Optional product analytics on our marketing site, if the project token is set

Privacy policy: /legal/privacy. Cookies: /legal/cookies.

Report a vulnerability

Email security@aethellayer.com. We ask for coordinated disclosure: reasonable time to patch before public write-ups, no exfiltration of customer stacks, no attacks on production ingest with stolen keys that are not yours. We will acknowledge, triage, and tell you when a fix is live.

Please do not file customer error payloads in public GitHub issues as “PoCs.” That is the opposite of the product.

Security FAQ

Are you SOC 2 certified today?

No. We are preparing for SOC 2 Type II. That is a controls and evidence program, not a badge you can buy in an afternoon. We will not put a fake seal on this page.

Do you store source code?

No. Probes send error codes, stacks, endpoint paths, taxonomy, and metadata you choose. Do not dump repositories into metadata.

Who can see my inbox?

Members of your organization, for that workspace. Service ingest cannot list other orgs. The public SDK health badge shows aggregated path status, not stacks or identities.

What about Memory Graph?

Growth, Scale, and Enterprise. Nodes and edges remember clusters (error ↔ runtime ↔ fix). They are not a people graph for advertising. Starter does not include the atlas.

Can we run in a VPC?

Enterprise is scoped on a call: SSO, SCIM, audit log, custom taxonomy, dedicated region or VPC if required. Those are not self-serve toggles.

Further reading

Longer pieces on hashed identity, ingest keys, and why we refuse fake compliance theater.

Early access

Stop finding out about churn in a dashboard three days later.

Paste npx --yes @aethellayer/sdk run -- false and read the drafted issue in your terminal. Book a call when you want the probe in your CLI.