Security
Deterministic by default. Hardened where it matters.
The public launch surface is an OSS CLI. It is designed to minimise exposure by running locally by default, with every network path behind an explicit command and explicit credentials. Full posture in SECURITY.md. This page is the summary.
CLI
- No implicit network calls.
spine init,spine compile,spine inspect,spine export,spine template,spine explain, andspine drift checkrun entirely offline.spine doctorverifies that local posture. The only routed network command today isspine tokens pull, which requires an explicit Figma file key or URL andFIGMA_TOKEN. - No repo upload path.The routed OSS CLI reads your repo and writes generated files locally. It does not upload source, briefs, generated exports, or drift reports to Project Spine.
- Opt-in LLM enrichment.Rationale enrichment via Anthropic's API is opt-in per command and requires an explicit key in env. Prompts run through a secrets scrubber (PATs, API keys, PEM blocks) before leaving your machine.
Website
- CSP with per-request nonce.
script-src 'self' 'nonce-<fresh>' 'strict-dynamic', with no'unsafe-inline'on scripts. Middleware mints a fresh nonce per request; every route renders dynamically so Next stamps it onto its inline RSC payload scripts. - Transport.HTTPS only.
.devis HSTS-preloaded at the TLD; we additionally sendStrict-Transport-Security: max-age=63072000; includeSubDomains; preload.
PlusX-Frame-Options: DENY,X-Content-Type-Options: nosniff,Referrer-Policy: strict-origin-when-cross-origin,Permissions-Policylocking out geolocation / microphone / camera. - XSS on public rationale URLs.Markdown is rendered via
markedand then passed throughsanitize-htmlwith an allowlist. Scripts, iframes, inline styles, andjavascript:schemes are stripped. Rationales setnoindex, nofollow.
What we don't collect
- Your repo source.The routed CLI runs offline for compile and drift. The website never receives repo source, generated exports, briefs, or drift reports from the OSS workflow.
- Repo-source analytics.The website loads Google Analytics for aggregate site measurement, but the public CLI workflow still uploads no repo source, briefs, generated exports, or drift reports. Check the site's Content-Security-Policy header in devtools.
connect-srcallows'self',api.github.com, andregistry.npmjs.orgfor product features, plus Google Analytics endpoints for measurement. - Request bodies in logs.Vercel logs access lines (IP, path, status, timestamp) only, retained per Vercel's policy. Tokens never appear in logs; API routes don't print auth headers.
Reporting vulnerabilities
Email security@projectspine.dev or use GitHub private vulnerability reporting on the repo. Acknowledgement within 72 hours, initial assessment within 7 days, coordinated disclosure on a timeline agreed with you.