Security
Every claim on this page is true today.
Written for the person running the security review. What holds candidate data, how the candidate environment is isolated, how access is controlled — and, marked as open, the documents we cannot hand you yet.
The standard
No aspirational certifications.
Nothing here describes something we intend to build. Every control below is running in the platform now, and every number is read from the configuration that runs it.
Where a reviewer would expect a document we do not have — an audit report, a data processing agreement, a sub-processor list, a written retention schedule — it is listed as an open item further down, marked as one. You should not have to discover a gap on a call.
If a control matters to your review and is not on this page, ask. We would rather write you a “not yet” than let you infer a yes.
Candidate access
Candidates have no accounts.
There is no candidate user type in the system, by design.
A candidate is identified by an invitation token and a session token, nothing else. No password to reuse, no profile, no directory to appear in, no credential of theirs for an attacker to take.
The invitation link is single use and expires seven days after it is issued by default. The token appears in a URL exactly once — the emailed link. The first page captures it into browser session storage and redirects to an address that does not contain it, so it is not left in browser history or in a referrer header. Every page after that is guarded by the captured token.
Company accounts are separate and are never used by candidates. Reports, transcripts and code are scoped to the company that owns the assessment.
Isolation
One machine per session, with the network closed.
Each candidate works in their own Firecracker microVM. No candidate code runs in a container next to our services, and no two candidates share a machine. The candidate is not root inside it.
At provision time the firewall drops new outbound connections. Loopback and replies on established connections keep the editor and the command channel working; the public internet is not reachable from inside. Dependencies are baked into the image, so no package fetch is needed and the rules do not permit one. When a company enables the in-sandbox agent, exactly one destination is opened — our own model proxy, pinned by IP address, with no DNS permitted out of the machine.
Those rules are applied as root, and the candidate's unprivileged account cannot flush them. If a guest kernel ever refused the rules, provisioning would continue and the failure is logged rather than hidden.
The git snapshot repository that records how the work progressed is owned by root outside the workspace, so it cannot be rewritten from inside the session.
Hidden tests, the reference solution and the grading contracts never enter the candidate's machine. Hidden tests run after submission in a separate sandbox the candidate never touched, which is destroyed immediately afterwards. The candidate's own machine has a fixed lifetime and is destroyed at the end of the session; nothing installed or written inside it survives.
Candidate data
What we hold, and what we record.
The candidate is shown this before the environment is provisioned, and acknowledges it again before the interview room opens.
Held for hiring review
- The candidate's written plan, and the files they opened while planning.
- The submitted code, and a git history of how it got there, snapshotted every 30 seconds.
- Terminal command history inside the assessment environment.
- Test results: every Run tests press, and the hidden tests run after submission.
- Every exchange with the AI — the chat panel, and what Claude Code was asked, ran and edited.
- Assessment activity: session and phase timings, tab switches, focus changes, paste events, and the IP address and browser on each request.
- The written transcript of the interview, and its recording.
- The candidate's name and email, as supplied by the company that invited them.
Recorded — the interview only
The interview is recorded: the candidate's screen share, their camera and their microphone, as one video file. The coding hour is never filmed — it is replayed from what we already keep.
One function in the platform is the authority on what is captured, and the candidate acknowledges the current version of that notice before the environment is provisioned and again before the interview room opens. A recording never reaches a model: scoring reads the written transcript alone, and a test enforces that rather than a policy asserting it.
Read that precisely: the recording exists so a hiring team can watch the conversation themselves, not so software can judge a face. Activity telemetry — tab switches, focus changes, paste events, the IP address and browser — is captured, appears in the report, and is stated to the candidate. It produces questions for the interviewer, not an automated verdict.
Company accounts
Access control on your side.
There is no self-serve sign-up. Accounts are created by Sphinque or by an invitation from a colleague at your company, and every member holds one role — admin, hiring manager, recruiter or viewer — that decides what they can do.
Sign-in issues a short-lived access token and a refresh token that rotates on use, with the previous refresh token blacklisted. Repeated failed sign-ins lock the account by username and by IP address. Passwords have a twelve-character minimum. Google sign-in is optional; the OAuth tokens it returns are encrypted at rest.
Significant actions are written to an append-only audit trail with the actor, the resource and the request context. The administrative interface is not served from a published path, and the paths an attacker would guess are honeypots.
The numbers
Configuration, not intent.
Each of these is the value the platform runs on today. If one changes, this page changes with it.
| Control | Value | Notes |
|---|---|---|
| Sign-in token lifetime | 60 minutes | Access tokens are short-lived; the session refreshes behind it. |
| Refresh token lifetime | 7 days | Rotated on every use. The previous token is blacklisted. |
| Failed sign-ins before lockout | 5 | Counted by username and by IP address. |
| Lockout cool-off | 1 hour | Cleared on a successful sign-in. |
| Minimum password length | 12 characters | Enforced at set and reset, alongside the standard strength checks. |
| Candidate invitation validity | 7 days | The default. Single use; the link stops working after the session. |
| HSTS max-age | 1 year | Subdomains included, preload set. HTTP is redirected to HTTPS. |
| Candidate machines | 1 per session | A microVM, destroyed when the session ends. |
In transit
TLS, and nothing that talks around it.
In production every request is served over TLS, HTTP is redirected, and HSTS is sent with a one-year max-age, subdomains included and preload set. Cookies are marked secure and HTTP-only, the referrer policy is strict-origin, and content-type sniffing is off.
Browser access is limited to an explicit list of origins. The service refuses to start in production if that list is empty, so a misconfiguration fails loudly instead of opening the API to any origin.
During the interview the browser holds a room token scoped to that one room and nothing else. Every vendor credential lives on the interview worker, server side. No model or voice provider key is ever sent to a browser.
Open items
What we cannot hand you yet.
These are the things a review asks for that do not exist today. They are listed so nobody has to find out on a call.
SOC 2
We do not hold a SOC 2 report. We answer security questionnaires in writing.
ISO 27001
Not certified.
Data processing agreement
There is no standard DPA to sign today.
Sub-processors
Anthropic, OpenAI, Amazon Web Services, Deepgram, ElevenLabs, LiveKit, E2B, Cloudflare, Railway, Resend, Stripe, Google. The privacy policy says what each one does; a formal list with regions and a DPA is not yet published.
Retention schedule
No written schedule is published. Assessment data is kept until the hiring company asks for deletion or closes its account.
Encryption at rest
OAuth tokens are encrypted at rest by the platform. For everything else, ask: we will confirm in writing what our database and storage providers apply.
Independent penetration test
No independent penetration test report is available to share.
Send us your questionnaire, or what you found.
Write to [email protected] with “Security” in the subject, use the contact form, or bring it to a walkthrough. We answer in writing, including the questions where the answer is not yet.