| Version | Supported |
|---|---|
| 1.0.x | β Yes |
| < 1.0 | β No |
- β Local-first - All data stored on your machine
- β No cloud sync - Nothing leaves your computer (except API calls)
- β SQLite database - Standard, auditable storage
- β File-based vectors - JSON format, human-readable
- β AES-256-GCM - Industry standard authenticated encryption
- β PBKDF2 - Key derivation with 100,000 iterations
- β Random IV/Salt - Different for each encrypted memory
- β Secure key storage - File permissions 0o600 (owner only)
- β Optional authentication - API key via header or query parameter
- β Input validation - All inputs validated before processing
- β No SQL injection - Parameterized queries
- β CORS enabled - Can restrict origins if needed
- β TypeScript strict mode - Type safety
- β 83 tests - Comprehensive test coverage
- β CI/CD - Automated testing on every commit
- β No external dependencies for core encryption
No authentication required. The API is only accessible on localhost:3000.
Safe when:
- Running on local machine only
- Not exposing port 3000 to network
- Only you have access to the machine
Enable API authentication:
# Generate a secure API key
openssl rand -hex 32
# Add to .env
API_KEY=your-generated-key-here
# Restart API server
yarn apiUse in requests:
# Via header (recommended)
curl -H "X-API-Key: your-key" http://localhost:3000/api/memories
# Via query parameter
curl "http://localhost:3000/api/memories?api_key=your-key"- Never commit API keys to git
- Rotate keys periodically
- Use HTTPS in production (reverse proxy with nginx/Caddy)
- Consider IP whitelisting
Definitely encrypt:
- π Passwords and credentials
- π API keys and tokens
- π Social Security Numbers
- π Financial information
- π Medical records
- π Private conversations
Probably don't encrypt:
- π General preferences ("I like dark mode")
- π Public facts ("I work in Seattle")
- π Non-sensitive experiences
Trade-off: Encrypted memories cannot be searched semantically.
Do:
- β Backup encryption key in password manager
- β Use strong passphrases (>20 characters)
- β Store key file securely
- β Never share encryption keys
Don't:
- β Commit
.keyfile to git - β Share encryption key via email/chat
- β Store key in plaintext notes
- β Reuse keys across systems
If you discover a security vulnerability:
- DO NOT open a public GitHub issue
- Email: ella@lesperance.dev (replace with your email)
- Include:
- Description of vulnerability
- Steps to reproduce
- Potential impact
- Suggested fix (if any)
We'll respond within 48 hours and work on a fix.
- Install on personal machine only
- Use localhost API (no network exposure)
- Enable encryption for sensitive data
- Regular backups (
yarn cli export) - Optional: Set API_KEY if paranoid
- Set strong API_KEY
- Use HTTPS (nginx/Caddy reverse proxy)
- Enable CORS restrictions
- Set up rate limiting
- Regular security audits
- Use separate database per user
- Consider adding user authentication
- No user authentication - Single user system
- Local storage - Not designed for multi-device sync
- API keys in env - Not a secrets manager
- In-memory cache - Cleared on restart
- Use for personal/single-user only
- Enable encryption for sensitive data
- Set API_KEY if exposing to network
- Regular backups
- Keep software updated
# .env file (gitignored)
ENCRYPTION_KEY=...
API_KEY=...
ANTHROPIC_API_KEY=...# Command line (visible in process list)
ENCRYPTION_KEY=abc123 yarn api
# Hardcoded (never do this)
const key = "my-secret-key";The system makes API calls to:
-
Anthropic (Claude) - For conversation analysis
- Data sent: Conversation text
- Retention: Per Anthropic privacy policy
- Optional: Can disable by not using extract features
-
OpenAI (Whisper) - For voice transcription
- Data sent: Audio recordings
- Retention: Per OpenAI privacy policy
- Optional: Can disable by not using voice features
Privacy: If privacy is critical, don't use voice or conversation extraction features.
# Run on localhost only
PORT=3000 yarn api
# Accessible: http://localhost:3000# 1. Set API key
API_KEY=$(openssl rand -hex 32)
# 2. Set up reverse proxy (nginx)
server {
listen 443 ssl;
server_name brain.yourdomain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://localhost:3000;
proxy_set_header X-Real-IP $remote_addr;
}
}
# 3. Enable firewall
sudo ufw allow 443/tcp
sudo ufw enableCurrently no audit logging. Future enhancement could add:
- Log all memory operations (add, update, delete)
- Log failed authentication attempts
- Log API access with timestamps
- Rotate logs automatically
- Alert on suspicious activity
This software is provided as-is for personal use. For compliance requirements (GDPR, HIPAA, etc.):
- β Data stays local (GDPR right to data)
- β User controls all data (GDPR right to deletion)
- β Encryption available (data protection)
- β No audit trail (not HIPAA compliant out-of-box)
- β No multi-tenancy (not designed for organizations)
MIT License - See LICENSE file.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND.
Last Updated: October 8, 2025
Contact: Create an issue on GitHub for security questions.