Surfil
Surfil/Products/Mind
// surfil mind · consumerpartly built

Local, encrypted memory your agents can reuse.

Every new session starts from zero. Agents re-discover the same project conventions, re-ask the same questions, and forget decisions you already made.

architecture.weave.md
--- fact: Auth uses device flow (RFC 8628) source: acme/api@a91f code_hash: a91f…3c2 ✓ fresh --- fact: Legacy webhook path /hooks/v0 code_hash: 2b7e…901 ⚠ STALE ---
Portable, signed, offline-verifiable.surfilpkg
Mind is partly built. Some of what follows ships on a linked device today and the rest does not. Your dashboard marks each capability, and nothing shows a number it has not measured.
What it does

Memory that stays on-device

Mind stores project memory on-device and syncs it end-to-end encrypted - ciphertext only, never plaintext source. Your agents get continuity across sessions; your code never leaves the device.

Local-first - Memory lives on your device by default; nothing is required to leave it to be useful.
E2E-encrypted sync - Optional sync moves ciphertext only - Surfil's servers never see plaintext memory.
Cross-session continuity - Agents pick up where the last session left off instead of relearning your project.
Feeds Weave - Memory facts carry provenance and a code hash, so stale facts are flagged automatically.

Proof, not promises

Mind produces one metric type on the shared spine: facts recalled across sessions. Every paid output is signed (Ed25519) and verifiable offline with no account. Zero-trace: your source never leaves the device.

$ surfil verify rcpt_8f2a
✓ VALID (offline · epoch 7)
In your terminal

Mind, as you'd actually see it

~/acme/api - surfil mind
$ surfil mind recall --topic auth
3 facts · provenance acme/api@a91f3c2
· sessions use Ed25519 device tokens (decided 2026-05-30)
· refresh flow lives in /auth/refresh.rs
· rate limits: STALE - code_hash changed, re-verify
$ surfil mind sync
synced 41 facts as ciphertext (E2E) · plaintext never left device
How it works

How Mind does it

1Mind captures decisions and project facts from agent sessions, on-device.
2Each fact carries provenance (repo@commit) and a code_hash of what it describes.
3When the code changes under a fact, the hash mismatch auto-flags it STALE.
4Every agent reads the same memory through the one interception point.
5Optional sync replicates ciphertext only - end-to-end encrypted.
Use cases

Where Mind earns its place

Stop re-explaining the architecture

Conventions and decisions persist across sessions and across agents.

Switching agents mid-task

Move from Cursor to Claude Code and keep the same project memory.

Trustworthy recall

STALE auto-flagging means agents don't act on facts the codebase has outgrown.

Claude CodeCursorCodexCopilotMCP agents
FAQ

Questions developers ask first

Can Surfil read my memory?

No. Sync moves ciphertext only - encryption is end-to-end and keys stay with you.

Does memory include my source code?

Facts describe your project; they carry hashes and provenance, and nothing syncs as plaintext.

What happens to stale facts?

A code_hash mismatch flags them STALE automatically so agents re-verify instead of guessing.

Works well with

One spine - products compound

Add Mind to your agents.

Core installs with Starter; Mind plugs into the same interception point - no second layer, no new setup.