Repository navigation
Dual Storage and Privacy
Muninn is engineered around a core privacy principle:
"You decide what gets heard. We decide what is worth remembering."
Unlike passive surveillance tools or ambient meeting bots, Muninn never listens continuously in the background. Audio capture is opt-in, per session, with strict data boundaries between browser sandboxes and hardware storage.
Muninn separates runtime storage boundaries based on execution environment:
flowchart TD
User([User Speech / Interaction]) --> OptIn[Explicit Opt-In Session]
OptIn --> EnvChoice{Client Runtime Environment}
EnvChoice -->|Web Browser / Guest| Ephemeral[Ephemeral Browser Sandbox]
EnvChoice -->|Web Browser / Authenticated| CloudSync[Encrypted Cloud Storage]
EnvChoice -->|Android Mobile / Tablet| HardwareLocal[Hardware Local-First Storage]
Ephemeral --> SessionMem[sessionStorage / Volatile Memory]
SessionMem --> SessionEnd[Browser Window or Tab Closes]
SessionEnd --> SessionPurge[Automatic & Immediate Data Purge]
CloudSync --> NeonDB[(Neon Serverless PostgreSQL)]
NeonDB --> RLS[Row-Level Tenant Isolation]
HardwareLocal --> SharedPreferences[Native Android SharedPreferences]
HardwareLocal --> LocalVault[Local Storage Vault]
LocalVault --> OfflineWorks[Full Offline Processing & Review]
Ephemeral --> Gate[Sensitivity Review Gate]
CloudSync --> Gate
HardwareLocal --> Gate
When accessed without authentication at muninn-nmk.pages.dev:
-
Zero Server Retention: Audio chunks, live transcripts, and extracted graph nodes remain in
sessionStorageand volatile JavaScript heap memory. - Tab Lifecycle Coupling: Closing the browser tab or reloading immediately destroys session state. No local tracking cookies or persistent identifiers are deposited.
- Opt-In Cloud Sync: Connecting a Google or GitHub account enables syncing to Neon Serverless PostgreSQL over TLS 1.3 with AES-256 encryption at rest.
When installed via the Android Tablet APK:
- No Compulsory Login: The tablet client functions autonomously without creating an account or supplying credentials.
-
Hardware-Backed Storage: Session records, synthesized claims, and graph relationships persist directly in local device storage via Android
SharedPreferences. - Zero Network Reliance: The knowledge graph and review queue can be viewed and organized entirely offline.
- Persistent Notification Guard: Android displays an immutable foreground service notification with a bright visual badge during active capture, preventing background eavesdropping.
All extracted atomic claims pass through an automated privacy and security filter before permanent graph inclusion:
sequenceDiagram
autonumber
actor Engineer as User / Engineer
participant LLM as Extraction Engine
participant Gate as Sensitivity Review Gate
participant Memory as Permanent Knowledge Vault
Engineer->>LLM: Speech Capture / Audio Stream
LLM->>Gate: Extract Atomic Claims (Claims, Decisions, Tasks)
Note over Gate: Regex & Semantic Scan for API Keys, Passwords, PII, Confidential Flags
alt Clean Claim
Gate->>Memory: Commit Directly to Knowledge Graph
else Sensitive / Confidential Claim
Gate-->>Engineer: Quarantine into Review Gate (Default Discard)
alt User Approves
Engineer->>Gate: Explicit Approve Action
Gate->>Memory: Commit to Knowledge Graph
else User Discards or Ignores
Engineer->>Gate: Explicit Discard (or auto-expire)
Gate-->>Gate: Permanently Wipe Claim
end
end
- API Keys and Credentials: High-entropy strings, AWS tokens, database connection strings, bearer tokens.
- Personal Identifiable Information (PII): Social security identifiers, personal addresses, credit card numbers.
- Privileged Business Metadata: Unannounced acquisition discussions, executive compensation figures.
- Off-The-Record Directives: Spoken phrases such as "keep this off the record" or "do not write this down".
Quarantined claims are held in a pending review state. If you do not explicitly approve a quarantined claim, it is never indexed into the knowledge graph, never embedded for vector search, and never resurfaced in copilot queries.
Users maintain absolute data sovereignty. When a session is deleted via DELETE /api/sessions/:id:
- All associated claims in
claimsare dropped. - Inter-claim relationships in
claim_relationsare cascaded. - Graph links and references in
resurfacing_alertsare cleaned. - Any active copilot thread referencing only this session is dissociated.
On Android, clearing application data from system settings immediately returns the device to a pristine, zero-data state.
Muninn: A Living Memory for Technical Work. Engineered by Erebus.
Licensed under MIT. Production app live at muninn-nmk.pages.dev.