397 lines
27 KiB
HTML
397 lines
27 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<title>Privacy Policy — Nucleic</title>
|
|
<meta name="description" content="How Nucleic handles your data. Local-first, no account, no tracking. The only telemetry is an anonymous, opt-out daily install count — no IP, no project content, ever." />
|
|
<meta name="theme-color" content="#faf7f3" />
|
|
<meta name="robots" content="index, follow" />
|
|
|
|
<!-- atom mark, reused as favicon -->
|
|
<link rel="icon" href="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><g fill='none' stroke-width='7'><ellipse cx='50' cy='50' rx='17' ry='40' transform='rotate(80 50 50)' stroke='%237AA7DD'/><ellipse cx='50' cy='50' rx='17' ry='40' transform='rotate(20 50 50)' stroke='%23DF619B'/><ellipse cx='50' cy='50' rx='17' ry='40' transform='rotate(140 50 50)' stroke='%23C5826F'/></g></svg>" />
|
|
|
|
<!-- Self-hosted fonts (latin subset). The woff2 binaries live in fonts/ and are
|
|
preloaded so they download in parallel with the HTML; @font-face is inlined
|
|
(no render-blocking stylesheet) and the page never contacts Google. -->
|
|
<link rel="preload" href="fonts/space-grotesk.woff2" as="font" type="font/woff2" crossorigin />
|
|
<link rel="preload" href="fonts/jetbrains-mono.woff2" as="font" type="font/woff2" crossorigin />
|
|
<style>
|
|
@font-face{font-family:'Space Grotesk';font-style:normal;font-weight:400 700;font-display:swap;src:url(fonts/space-grotesk.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
|
|
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:400 500;font-display:swap;src:url(fonts/jetbrains-mono.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
|
|
</style>
|
|
|
|
<style>
|
|
:root{
|
|
--ink:#181520;
|
|
--ink-soft:#5b5560;
|
|
--ink-faint:#8b8590;
|
|
--paper:#faf7f3;
|
|
--panel:#fffdfb;
|
|
--panel-2:#f3ede6;
|
|
--line:#e6ded4;
|
|
--line-2:#efe9e1;
|
|
|
|
--blue:#5e9bd8;
|
|
--pink:#db5f97;
|
|
--magenta:#c264ad;
|
|
--rust:#c47e69;
|
|
--green:#5fa775;
|
|
--amber:#d7a23f;
|
|
|
|
--sans:"Space Grotesk", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
|
|
--mono:"JetBrains Mono", ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace;
|
|
--maxw:1080px;
|
|
--prose:760px;
|
|
}
|
|
|
|
*{box-sizing:border-box}
|
|
html{scroll-behavior:smooth}
|
|
body{
|
|
margin:0;
|
|
overflow-x:clip;
|
|
font-family:var(--sans);
|
|
color:var(--ink);
|
|
background:var(--paper);
|
|
background-image:radial-gradient(var(--line) 1px, transparent 1px);
|
|
background-size:26px 26px;
|
|
background-position:-13px -13px;
|
|
-webkit-font-smoothing:antialiased;
|
|
line-height:1.5;
|
|
}
|
|
a{color:inherit}
|
|
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 24px}
|
|
|
|
.mono{font-family:var(--mono)}
|
|
.kicker{
|
|
font-family:var(--mono);
|
|
font-size:11.5px;letter-spacing:.16em;text-transform:uppercase;
|
|
color:var(--ink-faint);
|
|
}
|
|
|
|
/* ---------- top bar ---------- */
|
|
header{
|
|
position:sticky;top:0;z-index:20;
|
|
backdrop-filter:saturate(1.1) blur(8px);
|
|
background:color-mix(in srgb, var(--paper) 82%, transparent);
|
|
border-bottom:1px solid var(--line-2);
|
|
}
|
|
.bar{display:flex;align-items:center;justify-content:space-between;height:62px}
|
|
.brand{display:flex;align-items:center;gap:11px;font-weight:600;letter-spacing:-.01em;font-size:17px;text-decoration:none;color:var(--ink)}
|
|
.brand .mk{width:26px;height:26px;display:block}
|
|
.nav{display:flex;align-items:center;gap:22px;font-size:14px;color:var(--ink-soft)}
|
|
.nav a{text-decoration:none}
|
|
.nav .lk:hover{color:var(--ink)}
|
|
.btn{
|
|
font-family:var(--sans);font-size:14px;font-weight:500;
|
|
text-decoration:none;cursor:pointer;border:0;
|
|
padding:9px 16px;border-radius:10px;
|
|
color:#fff;background:var(--ink);
|
|
transition:transform .12s ease, opacity .12s ease;
|
|
white-space:nowrap;-webkit-tap-highlight-color:transparent;
|
|
}
|
|
.btn:link,.btn:visited,.btn:hover,.btn:focus,.btn:active{color:#fff}
|
|
.btn:hover{opacity:.9;transform:translateY(-1px)}
|
|
@media (max-width:600px){ .nav .lk{display:none} }
|
|
|
|
/* ---------- doc header ---------- */
|
|
.doc-hero{padding:60px 0 26px}
|
|
.doc-hero .wrap{max-width:var(--prose)}
|
|
.doc-hero h1{
|
|
font-size:clamp(32px,5vw,48px);line-height:1.04;letter-spacing:-.03em;
|
|
font-weight:600;margin:14px 0 0;
|
|
}
|
|
.doc-hero h1 .em{
|
|
background:linear-gradient(100deg,var(--rust),var(--pink) 45%,var(--magenta) 70%,var(--blue));
|
|
-webkit-background-clip:text;background-clip:text;color:transparent;
|
|
}
|
|
.doc-meta{margin-top:16px;font-family:var(--mono);font-size:12px;color:var(--ink-faint);letter-spacing:.02em}
|
|
.doc-meta .dotsep{color:var(--line)}
|
|
|
|
/* ---------- summary callout ---------- */
|
|
.summary{
|
|
max-width:var(--prose);margin:8px auto 0;
|
|
border:1px solid var(--line);border-radius:16px;background:
|
|
radial-gradient(120% 140% at 0% 0%, color-mix(in srgb,var(--blue) 8%,transparent), transparent 44%),
|
|
radial-gradient(120% 140% at 100% 100%, color-mix(in srgb,var(--pink) 8%,transparent), transparent 44%),
|
|
var(--panel);
|
|
padding:24px 26px;
|
|
}
|
|
.summary h2{margin:0 0 12px;font-size:14px;font-weight:600;letter-spacing:-.01em}
|
|
.summary ul{margin:0;padding-left:0;list-style:none;display:grid;gap:10px}
|
|
.summary li{position:relative;padding-left:26px;font-size:14.5px;color:var(--ink-soft);line-height:1.55}
|
|
.summary li strong{color:var(--ink);font-weight:600}
|
|
.summary li svg{position:absolute;left:0;top:2px;width:16px;height:16px}
|
|
|
|
/* ---------- prose ---------- */
|
|
main{padding:10px 0 30px}
|
|
.prose{max-width:var(--prose);margin:0 auto}
|
|
.prose section{padding:26px 0;border-top:1px solid var(--line-2)}
|
|
.prose section:first-child{border-top:0}
|
|
.prose h2{font-size:21px;font-weight:600;letter-spacing:-.02em;margin:0 0 4px;scroll-margin-top:80px}
|
|
.prose h2 .n{font-family:var(--mono);font-size:13px;color:var(--ink-faint);margin-right:10px;font-weight:500}
|
|
.prose h3{font-size:15.5px;font-weight:600;letter-spacing:-.01em;margin:22px 0 6px;color:var(--ink)}
|
|
.prose p{margin:12px 0;color:var(--ink-soft);font-size:15.5px;line-height:1.65}
|
|
.prose ul{margin:12px 0;padding-left:22px;color:var(--ink-soft);font-size:15.5px;line-height:1.65}
|
|
.prose li{margin:7px 0}
|
|
.prose strong{color:var(--ink);font-weight:600}
|
|
.prose a{color:var(--ink);text-decoration:underline;text-decoration-color:var(--line);text-underline-offset:3px}
|
|
.prose a:hover{text-decoration-color:var(--magenta)}
|
|
.prose code{font-family:var(--mono);font-size:.86em;background:var(--panel-2);border:1px solid var(--line-2);border-radius:5px;padding:1px 6px}
|
|
.prose .lede{font-size:17px;color:var(--ink);line-height:1.6}
|
|
|
|
/* field table */
|
|
.ftable{width:100%;border-collapse:collapse;margin:14px 0;font-size:14px}
|
|
.ftable th,.ftable td{text-align:left;padding:9px 12px;border-bottom:1px solid var(--line-2);vertical-align:top}
|
|
.ftable th{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-faint);font-weight:600}
|
|
.ftable td:first-child{font-family:var(--mono);font-size:12.5px;color:var(--ink);white-space:nowrap}
|
|
.ftable td:last-child{color:var(--ink-soft)}
|
|
|
|
.note{border-left:3px solid color-mix(in srgb,var(--green) 60%,var(--line));background:color-mix(in srgb,var(--green) 6%,var(--panel));border-radius:0 10px 10px 0;padding:14px 16px;margin:16px 0;font-size:14.5px;color:var(--ink-soft)}
|
|
.note strong{color:var(--ink)}
|
|
|
|
footer{border-top:1px solid var(--line-2);padding:30px 0 50px;margin-top:20px}
|
|
.foot{display:flex;align-items:center;justify-content:space-between;gap:18px;flex-wrap:wrap;color:var(--ink-faint);font-size:13px}
|
|
.foot .mono{font-size:12px}
|
|
.foot-links{display:flex;gap:18px;flex-wrap:wrap}
|
|
.foot-links a{text-decoration:none;color:var(--ink-soft)}
|
|
.foot-links a:hover{color:var(--ink)}
|
|
.dotsep{color:var(--line)}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
|
|
<!-- ===== top bar ===== -->
|
|
<header>
|
|
<div class="wrap bar">
|
|
<a class="brand" href="/">
|
|
<svg class="mk" viewBox="0 0 100 100" aria-hidden="true">
|
|
<g fill="none" stroke-width="7">
|
|
<ellipse cx="50" cy="50" rx="17" ry="40" transform="rotate(80 50 50)" stroke="#7AA7DD"/>
|
|
<ellipse cx="50" cy="50" rx="17" ry="40" transform="rotate(20 50 50)" stroke="#DF619B"/>
|
|
<ellipse cx="50" cy="50" rx="17" ry="40" transform="rotate(140 50 50)" stroke="#C5826F"/>
|
|
</g>
|
|
</svg>
|
|
Nucleic
|
|
</a>
|
|
<nav class="nav">
|
|
<a class="lk" href="/terms.html">Terms</a>
|
|
<a class="btn" href="/">Home</a>
|
|
</nav>
|
|
</div>
|
|
</header>
|
|
|
|
<!-- ===== title ===== -->
|
|
<section class="doc-hero">
|
|
<div class="wrap">
|
|
<div class="kicker">Legal</div>
|
|
<h1>Privacy <span class="em">Policy</span></h1>
|
|
<div class="doc-meta">Last updated June 30, 2026 <span class="dotsep">·</span> Effective June 29, 2026</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- ===== summary ===== -->
|
|
<div class="wrap">
|
|
<div class="summary">
|
|
<h2>The short version</h2>
|
|
<ul>
|
|
<li>
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="var(--green)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m9 12 2 2 4-4"/><circle cx="12" cy="12" r="9"/></svg>
|
|
<strong>Nucleic is local-first.</strong> Your code, prompts, and agent transcripts stay on your own machine. There is <strong>no Nucleic account</strong> to create.
|
|
</li>
|
|
<li>
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="var(--green)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m9 12 2 2 4-4"/><circle cx="12" cy="12" r="9"/></svg>
|
|
<strong>No tracking, no cookies, no ad networks</strong> on this website or in the app.
|
|
</li>
|
|
<li>
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="var(--green)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m9 12 2 2 4-4"/><circle cx="12" cy="12" r="9"/></svg>
|
|
The only usage data we collect is an <strong>anonymous, opt-out daily install count</strong> — no IP address, no project content, no identity.
|
|
</li>
|
|
<li>
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="var(--green)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m9 12 2 2 4-4"/><circle cx="12" cy="12" r="9"/></svg>
|
|
The iPhone remote talks to your Mac over an <strong>end-to-end encrypted</strong> channel. Our relay only ever sees ciphertext it cannot read.
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<main>
|
|
<div class="wrap prose">
|
|
|
|
<section>
|
|
<p class="lede">This Privacy Policy explains what information Nucleic processes, why, and the choices you have. Nucleic is built to be private by design: it runs on your own hardware, and we deliberately avoid collecting anything we don't need.</p>
|
|
<p>Nucleic is provided by <strong>Andrew Blakeslee Moore</strong> (“Nucleic,” “we,” “us,” or “our”). This policy covers the Nucleic website at <code>nucleic.blakeslee.xyz</code>, the Nucleic macOS app, the Nucleic iPhone remote app, and the supporting cloud services described below. If you have any questions, contact us at <a href="mailto:[email protected]">[email protected]</a>.</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2><span class="n">01</span>What we do <em>not</em> collect</h2>
|
|
<p>Because this is what most people want to know first, here is what never leaves your control or is never collected by us:</p>
|
|
<ul>
|
|
<li><strong>Your source code, files, and repositories.</strong> Nucleic orchestrates coding agents on your own machine. Your code is read and written locally.</li>
|
|
<li><strong>Your prompts and agent transcripts.</strong> The conversation between you and your coding agents stays on your device.</li>
|
|
<li><strong>Account or identity information.</strong> There is no sign-up, no login, no name, no email required to use Nucleic.</li>
|
|
<li><strong>Your IP address.</strong> Our analytics endpoint is explicitly built to not read or store the client IP.</li>
|
|
<li><strong>Advertising identifiers or cross-site tracking data.</strong> We run no ad networks and set no tracking cookies.</li>
|
|
<li><strong>Payment information.</strong> Nucleic is currently a free open beta; we do not process payments.</li>
|
|
</ul>
|
|
</section>
|
|
|
|
<section>
|
|
<h2><span class="n">02</span>The website</h2>
|
|
<p>The Nucleic website is a static marketing site served from <a href="https://www.cloudflare.com/" target="_blank" rel="noopener noreferrer">Cloudflare</a>'s edge network. It contains no analytics scripts, no tracking pixels, no cookies, and no sign-up forms.</p>
|
|
<ul>
|
|
<li><strong>Server logs.</strong> As with essentially any website, our hosting provider (Cloudflare) processes standard request metadata — such as the requested URL, timestamp, and IP address — to deliver the page and protect the service against abuse. We do not use this for tracking or profiling, and we do not combine it with any other data.</li>
|
|
<li><strong>Web fonts.</strong> Our typefaces (Space Grotesk and JetBrains Mono, both open-source) are self-hosted — served directly from this site alongside the page. Your browser never contacts Google or any other third party to load them, so loading a font reveals your IP address and request headers to no one beyond our own Cloudflare edge.</li>
|
|
<li><strong>Downloads.</strong> The “Download” button requests the app installer from our update host (<code>updates.nucleic.blakeslee.xyz</code>, backed by Cloudflare R2). This generates standard CDN request logs; we do not require any information from you to download.</li>
|
|
</ul>
|
|
</section>
|
|
|
|
<section>
|
|
<h2><span class="n">03</span>The Nucleic app (local-first)</h2>
|
|
<p>The Nucleic macOS app runs on your Mac and can operate offline. It clones, sandboxes, and edits <em>your</em> repositories on <em>your</em> machine, and drives coding agents you choose. The substance of your work — code, files, prompts, and transcripts — is stored locally on your device and is not transmitted to us.</p>
|
|
|
|
<h3>Coding agents are third parties</h3>
|
|
<p>Nucleic is an orchestrator for coding agents such as Claude Code, Codex, Grok Build, and any other ACP-compatible agent you connect. When you run one of these agents, <strong>that agent sends your prompts and relevant code to its own provider</strong> (for example, Anthropic, OpenAI, or xAI) under that provider's terms and privacy policy. Those providers — not Nucleic — control and process that data. You configure and authenticate those agents with your own credentials or API keys, which are managed on your device. We encourage you to review the privacy practices of any agent you use.</p>
|
|
|
|
<h3>Apple Intelligence</h3>
|
|
<p>Nucleic uses Apple's Foundation Models for small in-app intelligence tasks such as classifying turns, summarizing tool calls, and triaging your idea inbox. You choose how these run, and the choice has different privacy properties:</p>
|
|
<ul>
|
|
<li><strong>Apple On-Device (default).</strong> The on-device Apple Foundation Model runs entirely on your Mac. It is private and works offline; the data stays on your device.</li>
|
|
<li><strong>Private Cloud Compute.</strong> You may choose to use Apple's Private Cloud Compute Foundation Model, which processes the request on Apple's privacy-preserving cloud infrastructure rather than on your Mac. The relevant prompt is sent to Apple for processing under Apple's Private Cloud Compute model.</li>
|
|
<li><strong>Energy Aware.</strong> On laptops, you may choose this mode, which uses the on-device model while connected to power and Private Cloud Compute while on battery.</li>
|
|
</ul>
|
|
<p>In every case this is handled by Apple's Foundation Models framework and is <strong>subject to Apple's terms and privacy practices</strong>. Nucleic does not receive or store this content. Whenever you select a Private Cloud Compute option (including Energy Aware on battery), the applicable request is sent to Apple rather than kept on your Mac.</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2><span class="n">04</span>Anonymous usage analytics (opt-out)</h2>
|
|
<p>To understand roughly how many people are actively using Nucleic, the app sends an <strong>anonymous “heartbeat”</strong> at most once per day. This is the only usage telemetry Nucleic sends, and you can turn it off at any time.</p>
|
|
<p>The heartbeat is identified by a <strong>random install ID</strong> — a UUID generated on your device and stored only in your local Keychain. It is deliberately kept separate from any cryptographic identity, contains no personal information, and lets us count <em>installs</em>, not people. The full payload is:</p>
|
|
|
|
<table class="ftable">
|
|
<thead><tr><th>Field</th><th>Example</th><th>What it is</th></tr></thead>
|
|
<tbody>
|
|
<tr><td>installId</td><td><code>a random UUID</code></td><td>An anonymous per-install identifier (local Keychain). Not linked to you.</td></tr>
|
|
<tr><td>platform</td><td><code>macos</code> / <code>ios</code></td><td>Which app sent the ping.</td></tr>
|
|
<tr><td>osVersion</td><td><code>26.0</code></td><td>Operating-system version.</td></tr>
|
|
<tr><td>channel</td><td><code>beta</code></td><td>Release channel of the build.</td></tr>
|
|
<tr><td>appVersion</td><td><code>0.1.0</code></td><td>App version.</td></tr>
|
|
<tr><td>build</td><td><code>828</code></td><td>Build number.</td></tr>
|
|
<tr><td>arch</td><td><code>arm64</code></td><td>CPU architecture.</td></tr>
|
|
<tr><td>locale</td><td><code>en</code></td><td>Language code only (coarse — no region).</td></tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<p>The receiving endpoint (<code>api.nucleic.blakeslee.xyz</code>, a Cloudflare Worker) is built to <strong>not read or store your IP address</strong>, and the heartbeat carries no account, no project content, and no file or prompt data. The data is stored in Cloudflare Analytics Engine as aggregate, auto-expiring time-series events (retained roughly 90 days) and is used only to count active installs and to slice them by platform, channel, and version.</p>
|
|
|
|
<div class="note"><strong>Your choice.</strong> This is opt-out and on by default. To turn it off completely, open <strong>Settings → Privacy</strong> in the app and switch off <strong>“Share anonymous usage.”</strong> When it is off, nothing is sent. Local development builds never send a heartbeat.</div>
|
|
</section>
|
|
|
|
<section>
|
|
<h2><span class="n">05</span>The iPhone remote & the relay</h2>
|
|
<p>The Nucleic iPhone app lets you watch sessions, answer approvals, and steer work on your Mac from your phone. It is paired to your Mac by scanning a QR code (your phone's camera is used only to read that code at pairing time; pairing images are not stored or transmitted to us).</p>
|
|
<p>The connection between your phone and your Mac is <strong>end-to-end encrypted</strong> using the Noise protocol. When the two are on the same network, they connect directly over your LAN, with no cloud involved. When they are not, the connection is carried by our <strong>relay</strong> (<code>relay.nucleic.blakeslee.xyz</code>, a Cloudflare Worker and Durable Object).</p>
|
|
<p><strong>The relay cannot read your data.</strong> It forwards the encrypted frames between your devices byte-for-byte and never decrypts them. To route and secure those connections, the relay handles a small amount of non-secret metadata:</p>
|
|
<ul>
|
|
<li><strong>Room identifier</strong> — a pseudonymous value derived from a hash of your Mac's public key. It identifies an account-like “room,” not a person, and is not an email or name.</li>
|
|
<li><strong>Device identifiers and presence</strong> — so paired devices can find each other and so the relay can tell whether a device is currently connected.</li>
|
|
<li><strong>Admission tokens</strong> — short-lived, hashed credentials that gate who may join a room. They grant no ability to read traffic, and they are revoked when you unpair a device.</li>
|
|
<li><strong>A daily-active-user count</strong> — one aggregate, auto-expiring event (indexed by the pseudonymous room identifier) is recorded per admitted connection, stored in Cloudflare Analytics Engine (~90-day retention, no IP).</li>
|
|
</ul>
|
|
</section>
|
|
|
|
<section>
|
|
<h2><span class="n">06</span>Push notifications</h2>
|
|
<p>So your phone can alert you when an agent needs your approval, the iPhone app registers for Apple Push Notification service (APNs). Your device's APNs push token is stored by our relay in Cloudflare KV with a rolling 90-day expiry, solely to deliver these wake notifications, and is removed when a device is unpaired or revoked.</p>
|
|
<p>The push notifications themselves are <strong>content-free</strong>. They are a “tickle” that says an approval is waiting — they carry no code, no transcript, and no approval detail. Your phone then wakes and pulls the actual content over the end-to-end encrypted channel. Delivery is handled by Apple under Apple's privacy practices.</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2><span class="n">07</span>Software updates</h2>
|
|
<p>The macOS app checks for updates using Sparkle, fetching a signed update feed and installer from our update host (<code>updates.nucleic.blakeslee.xyz</code>, Cloudflare R2). These requests generate standard CDN logs at our hosting provider; they do not carry an account or personal information from you.</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2><span class="n">08</span>Service providers</h2>
|
|
<p>We keep our list of processors short. The third parties that may process limited data on our behalf or as part of the service are:</p>
|
|
<ul>
|
|
<li><strong>Cloudflare</strong> — website hosting, the analytics/relay/update infrastructure, and edge security. Cloudflare processes request metadata to deliver and protect the service.</li>
|
|
<li><strong>Apple</strong> — App Store / TestFlight distribution of the iPhone app and delivery of push notifications via APNs.</li>
|
|
<li><strong>Your chosen AI agent providers</strong> (e.g., Anthropic, OpenAI, xAI) — receive your prompts and code directly when you run their agents, under their own terms and privacy policies.</li>
|
|
</ul>
|
|
</section>
|
|
|
|
<section>
|
|
<h2><span class="n">09</span>Data retention</h2>
|
|
<p>We retain the little data we process only as long as needed for its purpose:</p>
|
|
<ul>
|
|
<li><strong>Anonymous analytics</strong> (install heartbeats and the relay's daily-active-user count) auto-expire after roughly 90 days.</li>
|
|
<li><strong>Push tokens and relay admission tokens</strong> expire on a rolling basis (typically within 90 days) and are deleted when you unpair or revoke a device.</li>
|
|
<li><strong>Local app data</strong> (your code, settings, transcripts, and your install ID) lives on your device until you delete it or uninstall the app.</li>
|
|
<li><strong>Hosting and CDN logs</strong> are retained by Cloudflare per its standard log-retention practices.</li>
|
|
</ul>
|
|
</section>
|
|
|
|
<section>
|
|
<h2><span class="n">10</span>Security</h2>
|
|
<p>Privacy and security are built into Nucleic's design: connections between your devices are end-to-end encrypted; sensitive local values such as your install ID and pairing credentials are kept in the system Keychain; sandboxed agents on Nucleic Control run inside Apple's containerization framework; and our relay is structured so that it cannot read your traffic. No system is perfectly secure, but we aim to collect so little that there is very little to lose.</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2><span class="n">11</span>Your choices & rights</h2>
|
|
<ul>
|
|
<li><strong>Turn off analytics</strong> at any time in <strong>Settings → Privacy</strong>. When off, no heartbeat is sent.</li>
|
|
<li><strong>Unpair devices</strong> to revoke their access to the relay and delete their stored push token.</li>
|
|
<li><strong>Uninstall</strong> the app to remove all locally stored data, including your anonymous install ID.</li>
|
|
</ul>
|
|
<p>Depending on where you live, you may have rights under laws such as the EU/UK GDPR or the California Consumer Privacy Act (CCPA/CPRA) — including the right to access, correct, or delete personal information, and to not be discriminated against for exercising those rights. Because Nucleic is designed to be anonymous and local-first, in most cases we do not hold data that can identify you, and our analytics data is not reasonably linkable to an individual. We do not sell or “share” personal information, and we do not use it for targeted advertising. If you would like to make a request, contact us at <a href="mailto:[email protected]">[email protected]</a> and we will respond as required by applicable law.</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2><span class="n">12</span>Children</h2>
|
|
<p>Nucleic is a developer tool intended for adults and is not directed to children. We do not knowingly collect personal information from children under 13 (or the equivalent minimum age in your jurisdiction).</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2><span class="n">13</span>International users</h2>
|
|
<p>Nucleic is operated from the United States, and the infrastructure described here (Cloudflare, Apple) may process data in the United States and other countries. If you use Nucleic from outside the United States, you understand that the limited data described above may be processed in the United States.</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2><span class="n">14</span>Changes to this policy</h2>
|
|
<p>We may update this Privacy Policy from time to time. When we do, we will revise the “Last updated” date at the top of this page, and significant changes will be reflected here. Your continued use of Nucleic after an update means you accept the revised policy.</p>
|
|
</section>
|
|
|
|
<section>
|
|
<h2><span class="n">15</span>Contact</h2>
|
|
<p>Questions, concerns, or requests about privacy? Email <a href="mailto:[email protected]">[email protected]</a>.</p>
|
|
</section>
|
|
|
|
</div>
|
|
</main>
|
|
|
|
<footer>
|
|
<div class="wrap foot">
|
|
<div class="brand" style="font-size:15px">
|
|
<svg class="mk" viewBox="0 0 100 100" aria-hidden="true">
|
|
<g fill="none" stroke-width="7">
|
|
<ellipse cx="50" cy="50" rx="17" ry="40" transform="rotate(80 50 50)" stroke="#7AA7DD"/>
|
|
<ellipse cx="50" cy="50" rx="17" ry="40" transform="rotate(20 50 50)" stroke="#DF619B"/>
|
|
<ellipse cx="50" cy="50" rx="17" ry="40" transform="rotate(140 50 50)" stroke="#C5826F"/>
|
|
</g>
|
|
</svg>
|
|
Nucleic
|
|
</div>
|
|
<div class="foot-links">
|
|
<a href="/">Home</a>
|
|
<a href="/support.html">Support</a>
|
|
<a href="/privacy.html">Privacy</a>
|
|
<a href="/terms.html">Terms</a>
|
|
</div>
|
|
<div class="mono">© 2026 Andrew Blakeslee Moore · Made with Nucleic</div>
|
|
</div>
|
|
</footer>
|
|
|
|
</body>
|
|
</html>
|