Safety & Security¶
Best practices and known risks when using NeuralMemory.
Known Risks¶
1. Memory Poisoning¶
Risk Level: HIGH
Incorrect or malicious information stored in memory can propagate to future recalls.
Examples:
- Wrong API endpoint: future code may use wrong URL
- Incorrect attribution: "Bob said X" when Alice said it
- Outdated information: deprecated APIs, old contacts
Mitigations:
# Verify before storing
nmem check "Bob's phone: 555-1234"
# Use tags to mark confidence
nmem remember "Bob's phone: 555-1234" -t unverified -t needs-confirmation
# Include source attribution
nmem remember "Per email from Bob on 2024-02-04: API endpoint is /v2" --type fact
# Review health periodically
nmem brain health
Best Practices:
- Verify critical information before storing
- Use tags:
verified,unverified,needs-review - Include source attribution
- Periodically review and clean old memories
2. Stale Memory¶
Risk Level: MEDIUM
Old memories become outdated but still returned in queries.
Examples:
- Project decisions that have changed
- Former employee contacts
- Deprecated API versions
- Changed credentials
Mitigations:
# Check freshness
nmem stats
# Get only fresh context
nmem context --fresh-only
# Review health
nmem brain health
# Recall shows age warnings
nmem recall "API endpoint"
# ⚠️ STALE: This memory is 180 days old
Freshness Levels:
| Level | Age | Indicator | Action |
|---|---|---|---|
| Fresh | < 7 days | 🟢 | Safe to use |
| Recent | 7-30 days | 🟢 | Generally safe |
| Aging | 30-90 days | 🟡 | Consider verifying |
| Stale | 90-365 days | 🟠 | Verify before using |
| Ancient | > 365 days | 🔴 | Likely outdated |
3. Privacy Leak¶
Risk Level: HIGH
Sensitive information can be accidentally exposed through exports, sharing, or logs.
Examples:
- API keys stored in memory
- Database credentials
- Personal information (SSN, credit cards)
- Private keys and tokens
Mitigations:
# Check content before storing
nmem check "AWS_SECRET_KEY=xxx"
# ⚠️ SENSITIVE CONTENT DETECTED
# Auto-redact sensitive content
nmem remember "Config: API_KEY=sk-xxx" --redact
# Stores: "Config: API_KEY=[REDACTED]"
# Export without sensitive content
nmem brain export --exclude-sensitive -o safe.json
# Scan imports
nmem brain import untrusted.json --scan
Detected Patterns:
- API keys and secrets
- Passwords
- AWS/Azure/GCP credentials
- Database URLs with credentials
- Private keys (PEM format)
- JWT tokens
- Credit card numbers
- Social Security Numbers
4. Over-reliance¶
Risk Level: MEDIUM
Blindly trusting memory output without verification.
Mitigations:
# Check confidence scores
nmem recall "critical config" --json | jq '.confidence'
# Set minimum threshold
nmem recall "important decision" --min-confidence 0.7
# Check memory age
nmem recall "api endpoint" --show-age
Best Practices:
- Treat memory as "hints" not "facts" for critical operations
- Always verify security-sensitive information
- Use confidence thresholds for automation
- Cross-reference with authoritative sources
Security Best Practices¶
1. Data Classification¶
DO Store:
- Project decisions and rationale
- Meeting notes (non-confidential)
- Code patterns and solutions
- Error resolutions
- Workflow documentation
DON'T Store:
- Passwords and API keys
- Personal identification numbers
- Credit card or financial data
- Private encryption keys
- Medical or legal information
2. Brain Isolation¶
Use separate brains for different security contexts:
nmem brain create work-public # Safe to share
nmem brain create work-internal # Internal only
nmem brain create personal # Never share
3. Export Safety¶
Always use --exclude-sensitive when sharing:
4. Regular Audits¶
# Weekly health check
nmem brain health
# Review statistics
nmem stats
# Clean up old memories
nmem cleanup --expired
System Limitations¶
No Encryption at Rest¶
Current State: Memory data stored as plain files.
Workaround:
- Use encrypted file system (BitLocker, FileVault, LUKS)
- Store data directory on encrypted volume
No Access Control¶
Current State: No authentication system.
Workaround:
- Use file system permissions
- Separate brains per user
- Use server mode with API keys (production)
No Automatic Cleanup¶
Current State: Memories don't auto-delete.
Workaround:
- Manual cleanup:
nmem cleanup --expired - Use
--fresh-onlyfor context - Apply decay:
nmem decay
Database Training Security¶
Current State: DB-to-Brain training uses read-only connections and validates paths.
Built-in protections:
- SQLite databases opened in read-only mode (
?mode=ro) - Absolute paths rejected in connection strings
- Path traversal (
../) rejected - SQL identifiers sanitized (regex validation)
- Error messages sanitized (no raw exceptions exposed)
- Only PRAGMA metadata queried (no data rows accessed)
~~No Contradiction Detection~~¶
Resolved in v1.5.0: The nmem_conflicts tool detects factual contradictions and decision reversals at encode time, with manual resolution via keep_existing, keep_new, keep_both strategies.
Incident Response¶
Sensitive Data Stored¶
- Identify:
nmem brain health - Remove:
nmem brain delete compromised-brain --force - Rotate: Change exposed credentials immediately
- Audit: Check exports and shared data
Accidental Brain Share¶
- Revoke: Remove shared files immediately
- Assess: Determine what was exposed
- Rotate: Change potentially exposed credentials
- Notify: Inform affected parties if PII involved
Recommendations by Use Case¶
Personal Use¶
- Use default local storage
- Enable sensitive content warnings
- Regular backups with
--exclude-sensitive
Team Use¶
- Separate brains per project/sensitivity
- Never share brains with sensitive content
- Use
brain healthbefore sharing
Automated/CI Use¶
- Always set
--min-confidencethreshold - Never store credentials in memory
- Use environment variables for secrets
- Log confidence scores for audit
Production/Enterprise¶
- Use server mode with authentication
- Use encrypted storage backend
- Implement access logging
- Regular security audits