Cairn — three stacked stones

Cairn

Security & Architecture Disclosure

Cairn is engineered as a local-first utility for archiving Claude conversations. This disclosure describes the manifest that ships in v0.3.1 verbatim, and clearly marks any v1.0 capability that is not yet in the shipping package. If a claim here disagrees with the installed manifest, the manifest wins and this page is wrong.

1. Manifest scope & permissions held (v0.3.1)

The v0.3.1 manifest holds exactly four permissions, no host_permissions, and no declared content_scripts:

"permissions": ["activeTab", "scripting", "downloads", "sidePanel"]
// no host_permissions key
// no content_scripts key
// "externally_connectable": { "matches": [] }

Why no host_permissions: because the fetch is injected on-gesture into the active tab via chrome.scripting.executeScript, the extension does not need a static host scope and does not auto-load on any page. The v0.3.0 → v0.3.1 change dropped host_permissions: ["https://claude.ai/*"] entirely. The install-time prompt is now "manage your downloads" only; the "Read and change your data on claude.ai" line is gone.

Permissions categorically rejected: nativeMessaging, tabs, cookies, webRequest, declarativeNetRequest, identity, storage (unlimited), any content_scripts declaration, and any broad host_permissions pattern. The build-time check at ops/scripts/cairn-verify.sh rejects any manifest that adds any of them.

2. Network containment

3. Storage (v0.3.1) & cryptography (arriving in v1.0)

v0.3.1 storage, as shipped:

KnowledgeBank index (arriving in v1.0, not in v0.3.1): the design and reader-format are already public at /format so an auditor can verify the implementation when v1.0 ships. The intended shape:

Threat model for the v1.0 index: designed to resist read access by other local processes (malware, forensic tools, evil-maid attacks on a profile directory, shared-machine scenarios, corporate DLP). It is not designed to resist a user who has shared their device passphrase, nor to resist Chrome itself. This section will read as a v1.0 capability description until v1.0 ships; verify against the changelog for the date the v1.0 manifest goes live.

4. What this disclosure does not promise

5. Verification

Independent verification of the claims above. If any of these steps return a result different from what this page predicts, this page is wrong and the manifest is right — please report the finding.