Security at Specsight
How we handle your code, your data, and your access. We aim to be specific and honest — including about what is and is not in place at this stage of the product.
Your source code is never stored
Repositories are cloned to a temporary environment, analysed, and deleted in the same job. Only the extracted specification persists.
Read-only GitHub access
Specsight uses a fine-grained GitHub App with read-only permissions. It cannot write to, merge into, or modify your repositories.
Row-level security on every org table
Multi-tenancy is enforced at the Postgres layer, not just in application code. Cross-organisation data access is not possible.
European operator, GDPR compliant
Specsight is operated from Poland. We follow GDPR, and a Data Processing Agreement is available on request.
How we handle your source code
This is the most common question we get, so we are explicit about every step.
During analysis. When you trigger a full scan, a background job clones your repository with a shallow Git clone (--depth 1 --single-branch) to a temporary directory created with the operating system’s mkdtemp primitive. The clone uses a short-lived GitHub App installation token, not a long-lived credential.
After analysis. The temporary directory is deleted in a finally block — so even if the analysis fails partway through, the code is removed. The cleanup runs whether the scan succeeded, failed, or was cancelled.
What persists. Only the extracted specification: features, scenarios, annotations, connections, and metadata about the scan itself (token usage, duration, status). The raw source code, file contents, and commit messages are not stored anywhere in Specsight.
During merge syncs. When you merge to your watched branch, Specsight receives a webhook and analyses only the diff for the changed files. The diff is sent to Specsight for analysis and is not persisted after the sync completes.
GitHub App permissions
Specsight integrates with GitHub via a fine-grained GitHub App — not a personal access token, not an OAuth app with broad scopes.
- Read-only access to repository contents. Specsight can read files, branches, commits, and diffs. It cannot write, push, merge, open pull requests, or modify your repositories in any way.
- Webhook events. The app subscribes to three events:
push(to trigger merge syncs),installation(app install/uninstall), andinstallation_repositories(repo added to or removed from the installation). - Webhook signature verification. Every incoming webhook is verified using HMAC-SHA256 with a timing-safe comparison against a secret known only to Specsight and GitHub. Unsigned or mismatched deliveries are rejected.
- Replay protection. Webhook delivery IDs are tracked in memory with a 10-minute TTL to prevent replay attacks.
- Installation-scoped tokens. When Specsight needs to clone your repository, it generates a short-lived installation token at the moment of the scan. The token is never stored.
AI processing
All code analysis and text generation is handled by Anthropic’s Claude.
Specsight uses the Claude Agent SDK for codebase analysis (full scans and merge syncs) and the Claude API for text generation tasks like feature descriptions, change reports, and merge triage. Both run against Anthropic’s hosted API.
Per Anthropic’s privacy policy, inputs are not used to train their models. Anthropic retains API inputs for up to 30 days for abuse and safety review only, then deletes them. We do not currently have a Zero Data Retention agreement with Anthropic — if your security review requires one, contact us and we can raise it with them. Anthropic’s broader security posture is documented at trust.anthropic.com.
Whose Anthropic account analyses your code. By default, code is analysed using Specsight’s own Anthropic account. If you provide your own Anthropic API key (BYOK), your code goes to your Anthropic account instead. The encrypted storage of BYOK keys is described in Encryption.
Every AI call logs input and output token counts, cost, duration, and metadata to an internal ai_usage_log table. The logs contain token counts and scan metadata — they do not contain raw prompts or AI outputs.
Data storage and access control
Organisation data is stored in Supabase Postgres. Every table is protected by Row-Level Security.
Row-Level Security (RLS). Every table holding org-scoped data has RLS policies enforced at the Postgres layer. A user authenticated to one organisation cannot read or modify data belonging to another — even if a bug in application code tried to request it. Multi-tenancy is enforced in the database, not only in the application.
What is stored. Features, scenarios, annotations, changelogs, feature connections, feature summaries, projects, organisations, members, profiles, API key hashes, and encrypted BYOK keys.
What is not stored. Raw source code, repository file contents, full commit history, or plaintext API keys.
Edit history. Every change to a scenario or feature — whether by Specsight or a teammate — is recorded in a changelog table (scenario_changelog, feature_changelog) with the change type, the source (AI vs human), the timestamp, and the author for human edits. Members can see this history in the activity feed.
Encryption
All data in transit is encrypted, and sensitive secrets have an additional layer of protection at rest.
- In transit. All connections use TLS/HTTPS. This includes API requests, webhook deliveries, database connections, and any calls to third-party services.
- At rest (database). The Supabase-managed Postgres database encrypts stored data using Supabase’s platform defaults.
- BYOK API keys (Bring Your Own Key). When you add a BYOK Anthropic key for your organisation, it is encrypted and stored in Supabase Vault — a dedicated secrets manager, not a regular database column. It is only decrypted at the moment of use and is never logged. The underlying RPC functions that read BYOK keys are
SECURITY DEFINERand restricted to the database service role. - Webhook signatures. GitHub webhooks are verified using HMAC-SHA256 with a timing-safe comparison, not a simple string equality check.
Authentication
Specsight uses Supabase Auth for all authentication.
- Supported methods. Email and password, Google OAuth, and magic link (used for invitation acceptance).
- Password storage. Password hashing is handled by Supabase Auth using industry-standard algorithms. Specsight never sees or stores plaintext passwords.
- Sessions. JWT-based sessions are delivered as HttpOnly, Secure, SameSite=Lax cookies.
- Multi-factor authentication. MFA is not currently enabled in production. TOTP support and SSO (SAML/OIDC) are on the roadmap — if your procurement process requires either, let us know.
MCP API keys
API keys for the Specsight MCP server are designed so a database breach would not expose usable credentials.
- Hash-only storage. The full API key is shown to you exactly once, at creation. Only a SHA-256 hash is stored in the database. If the database were ever exposed, existing keys would not be usable.
- Prefix for identification. All keys start with
sk_sp_. The first 8 characters are stored separately so you can identify which key is which in the UI without the hash being exposed. - Org-scoped. Each key is scoped to a single organisation. Members can see and revoke their own keys; admins can see and revoke any key in the organisation.
- Soft revocation. Revoked keys are marked with a timestamp rather than deleted, so the audit trail is preserved.
Subprocessors
The third-party services Specsight relies on to operate. Each one is listed below with its purpose and the data it may handle.
| Service | Location | Purpose & data |
|---|---|---|
| SupabaseSupabase Inc. | EU (London) | Database, authentication, realtime, Vault (secrets), storageOrganisation and user data, scenarios, annotations, encrypted BYOK keys |
| AnthropicAnthropic PBC | USA | AI code analysis (Claude Agent SDK) and text generation (Claude API)Source code during analysis (transient), generated specifications |
| GitHubGitHub, Inc. (Microsoft) | USA | Repository access via GitHub App, webhook deliveryRepository metadata, diffs, commit hashes, installation tokens |
| VercelVercel Inc. | USA | Application hosting, serverless compute, analyticsHTTP metadata, error logs, web vitals |
| Trigger.devTrigger.dev Ltd. | UK | Background job orchestration for scans and merge syncsJob payloads (scan parameters, results), task metadata |
| StripeStripe, Inc. | USA | Payment processing and subscription managementStripe customer ID, subscription ID, plan type |
| ResendResend Inc. | USA | Transactional email delivery (invitations, notifications)Email addresses, invitation content, notification content |
Data transfers outside the European Economic Area rely on the EU–US Data Privacy Framework or Standard Contractual Clauses as appropriate. See the privacy policy for the full legal basis.
Operations and personnel
Specsight is operated by one person today. We say so plainly because it shapes the answers below.
- Production access. Ola Piętka, the founder, is the sole operator with access to production infrastructure (Supabase, Vercel, Trigger.dev, Stripe, Resend). New team members will not get production access without a documented review.
- Backups. Daily backups are handled by Supabase as part of the managed Postgres service. We have not yet rehearsed a full restore from backup — this is on the roadmap.
- Security headers. All responses set HSTS (2-year, preload),
X-Frame-Options: DENY,X-Content-Type-Options: nosniff,Referrer-Policy: strict-origin-when-cross-origin, and a locked-downPermissions-Policy. A formal Content Security Policy is not yet deployed and is on the roadmap. - Rate limiting. Public-facing endpoints (contact forms, OAuth, the MCP server) have per-IP rate limits. The implementation is in-memory per serverless instance — defence in depth rather than a hard guarantee.
- Vulnerability management. Dependencies are pinned in
package-lock.jsonand updated on a regular cadence. We watchnpm auditand GitHub’s built-in vulnerability alerts on the repository. Critical vulnerabilities are patched promptly after disclosure.
Compliance and your data rights
Specsight is operated from Poland by Ola Piętka, a registered sole proprietorship. Personal data is handled under GDPR.
- GDPR. Specsight follows the General Data Protection Regulation. The privacy policy details lawful bases for processing, data retention, and your rights as a data subject.
- Data subject rights. You can request access to, correction of, or deletion of your personal data. Account deletion is processed immediately on request — your user account, organisation data, scenarios, and connected projects are removed from the active database via cascading foreign-key constraints. Backups held by Supabase rotate out within 30 days.
- Data residency. The Supabase Postgres database — where organisation data, scenarios, and annotations are stored — is hosted in the EU (London,
eu-west-2). Application requests and serverless functions run on Vercel iniad1(Washington DC, USA). Background jobs run on Trigger.dev’s managed cloud (Trigger.dev Ltd. is UK-incorporated; their infrastructure regions are documented on their platform). - International transfers. Where data is processed outside the EEA — including by application functions on Vercel and AI calls to Anthropic — transfers rely on the EU–US Data Privacy Framework or Standard Contractual Clauses.
- Data Processing Agreement (DPA). A DPA is available on request. Email us at the address in the next section.
- Breach notification. In the event of a personal data breach, Specsight will notify the Polish supervisory authority (UODO) within 72 hours of becoming aware, and affected users directly if the risk is high.
What we do not claim
Specsight is an early-stage product. We think being specific about what is and is not in place matters more than marketing language.
We have not yet pursued external compliance certifications such as SOC 2 or ISO 27001. Security reviews and penetration testing are on the roadmap but have not been commissioned at the time of writing. If your procurement process requires any of these, let us know — we can discuss where we are and what is realistic to commit to.
The practices on this page are what the product does today. As the product matures and we add subprocessors or capabilities, this page will be updated and the privacy policy will be versioned accordingly.
Reporting a security issue
If you believe you have found a security vulnerability in Specsight, we want to hear about it.
Email ola@specsight.app with SECURITY in the subject line. Include a clear description of the issue, steps to reproduce if possible, any related URLs or proof of concept, and your assessment of the impact.
We take reports seriously and respond as quickly as we can. We ask that you give us a reasonable window to investigate before public disclosure, and that you avoid accessing data that is not your own while testing.
Frequently asked questions
No. When Specsight analyses your codebase, the repository is cloned to a temporary environment via a shallow Git clone, analysed, and then deleted in the same job. The only things persisted afterwards are the extracted specifications — features, scenarios, and connections — not the source code itself. During Release Syncs, only the diff for the changed files is sent to the AI for analysis, and it is not stored either.
All code analysis and text generation is performed by Anthropic's Claude. Per Anthropic's API privacy policy, inputs sent to their API are not used to train their models. Specsight uses the Claude Agent SDK for Full Analysis and the Claude API for text generation like Feature descriptions and Reports.
Specsight connects via a GitHub App with fine-grained, read-only permissions. It can read repository contents, file trees, commits, and diffs. It cannot write to, merge into, or modify your repositories in any way. The app subscribes to push, installation, and installation_repositories webhook events to trigger Release Syncs.
Every org-scoped table in Specsight's database has Row-Level Security (RLS) policies enforced at the Postgres layer via Supabase. A user authenticated to one organisation cannot read or modify data belonging to another. Multi-tenancy is enforced in the database, not just in the application code.
When you generate an MCP API key, only a SHA-256 hash is stored in the database — never the full key. If the database were ever exposed, existing keys would not be usable. Keys are prefixed with sk_sp_ for identification and are scoped to a single organisation. Revocation is soft-only so the audit trail is preserved.
Account deletion is processed immediately — your account is removed from the active database via cascading foreign-key constraints, and Supabase backups rotate it out within 30 days. Deleting an Organisation cascades to every Project, Feature, Scenario, and changelog entry inside it; if other Members remain, the Organisation persists and only your account leaves. Billing records are retained for the period required by Polish tax law (5 years from the end of the tax year). Full detail on the security page.
Yes. A DPA is available on request — email ola@specsight.app and we will send you one.
Email ola@specsight.app with "SECURITY" in the subject line. Please describe the issue clearly, include steps to reproduce if possible, and give us a reasonable window to respond before any public disclosure. We take reports seriously and respond as quickly as we can.