← Back to Blog
February 27, 2026

SaveState v0.9.0: Memory That Heals Itself

Privacy controls, memory lifecycle management, quality scoring, and agents that learn from failure. 76 commits and 25 days of building the future of AI state.

Your AI agent has a memory problem. Not capacity: quality. It remembers things it shouldn't, forgets to question stale facts, and repeats the same mistakes. Until now, you had two options: trust the chaos or nuke everything and start fresh.

SaveState v0.9.0 gives you a third option: memory that manages itself.

This is our biggest release yet. 76 commits since v0.7.0, spanning privacy, lifecycle controls, quality scoring, tiered storage, audit trails, and failure learning. Let's dig in.

🔒 Privacy Controls: Your Data, Your Rules

AI agents see everything. They remember everything. That's powerful, but it's also risky. SaveState v0.9.0 introduces comprehensive privacy controls that let you define what gets stored and guarantee deletion when requested.

# Enable PII redaction
savestate config set privacy.pii_redaction enabled

# Add patterns to the deny list
savestate privacy deny-add "ssn:*"
savestate privacy deny-add "credit_card:*"
savestate privacy deny-add "*@company-internal.com"

# View your deny list
savestate privacy deny-list

The system scans incoming memories and redacts matching patterns before storage. This isn't regex theater: it's backed by deletion guarantees. When you remove something, it's gone from all tiers.

# Delete all memories matching a pattern
savestate privacy delete "user.medical.*" --confirm

# Verify deletion
savestate privacy audit "user.medical.*"
✓ No matching entries found in L1, L2, or L3 storage

🔄 Memory Lifecycle Controls

Memories aren't permanent. Facts expire. Contexts shift. Your agent's memory should reflect that reality.

# Edit a specific memory
savestate memory edit user.preferences.editor --value "neovim"

# Roll back to a previous state
savestate memory rollback user.preferences --to 2026-02-15

# Set expiration on volatile memories
savestate memory expire user.session.auth_token --in 24h

# View the audit trail for any memory path
savestate memory audit user.preferences.editor
┌────────────────────┬──────────┬────────────────┐
│ Timestamp          │ Action   │ Value          │
├────────────────────┼──────────┼────────────────┤
│ 2026-02-27 10:32   │ edit     │ neovim         │
│ 2026-02-15 14:11   │ create   │ vscode         │
└────────────────────┴──────────┴────────────────┘

Every change is tracked. Every rollback is reversible. Your agent's memory isn't a black box anymore.

📊 Memory Quality Framework

Not all memories are created equal. Some are rock solid. Some are inferences. Some are outdated opinions from six months ago that your agent still treats as gospel.

The new quality framework scores every memory along three dimensions:

  • Confidence: How reliable is the source? Direct user input scores higher than inferred preferences.
  • Staleness: When was this last validated? Memories decay over time without reinforcement.
  • Quarantine status: Is this memory flagged for review before use?
# Check quality scores across your memory graph
savestate memory quality --summary
┌─────────────────────┬────────────┬───────────┬─────────────┐
│ Path                │ Confidence │ Staleness │ Quarantine  │
├─────────────────────┼────────────┼───────────┼─────────────┤
│ user.name           │ 0.99       │ fresh     │ no          │
│ user.employer       │ 0.85       │ stale     │ no          │
│ user.preferences.*  │ 0.72       │ mixed     │ 3 items     │
└─────────────────────┴────────────┴───────────┴─────────────┘

# Quarantine suspicious ingestions
savestate memory quarantine user.preferences.diet
Memory quarantined. Agent will request confirmation before using.

# Promote quarantined memory after validation
savestate memory promote user.preferences.diet

🗄️ Multi-Tier Memory: L1, L2, L3

Not every memory needs instant access. Your agent's favorite coffee order belongs in fast storage. The project you finished two years ago can live in the archives.

SaveState now supports three storage tiers:

Tier Access Speed Use Case
L1 (Hot) <10ms Active context, recent conversations, working memory
L2 (Warm) <100ms Frequently referenced facts, project knowledge, preferences
L3 (Cold) <1s Archives, historical context, rarely accessed memories
# Check current tier distribution
savestate memory tiers

# Manually promote a memory to hot storage
savestate memory promote project.current --tier L1

# Archive old project data
savestate memory archive project.legacy.* --tier L3

Tier placement is automatic by default, based on access patterns. Override when you know better.

📜 Askable Echoes Trace Ledger

When your agent makes a decision, can you trace why? The new Trace Ledger records every agent run with full audit capability.

# List recent agent runs
savestate echoes list --limit 10

# Inspect a specific run
savestate echoes trace run_abc123
┌────────────────────────────────────────────────────┐
│ Run: run_abc123                                    │
│ Started: 2026-02-27 09:15:32                       │
│ Duration: 4.2s                                     │
├────────────────────────────────────────────────────┤
│ Memories Accessed:                                 │
│   • user.preferences.timezone (L1, confidence 0.99)│
│   • project.deadlines (L2, confidence 0.91)        │
│   • calendar.events.today (L1, confidence 0.95)    │
├────────────────────────────────────────────────────┤
│ Decision Points:                                   │
│   1. Selected morning slot based on timezone pref  │
│   2. Avoided 2pm conflict from calendar            │
└────────────────────────────────────────────────────┘

# Ask natural language questions about past runs
savestate echoes ask "Why did the agent suggest Tuesday?"

🛡️ Core Integrity and Decision Guard

Some memories shouldn't change without explicit approval. Core Integrity lets you designate protected paths that require confirmation before modification.

# Protect critical configuration
savestate guard protect system.config.*
savestate guard protect user.identity.*

# Attempted modification triggers confirmation
savestate memory edit user.identity.name --value "New Name"
⚠️  Protected path: user.identity.name
   Requires confirmation via: savestate guard approve req_xyz

Decision Guard extends this to runtime. High stakes decisions can require human approval before execution.

🦠 Failure Antibody System

This is the one that changes everything.

When your agent fails, it usually fails the same way again. And again. The Failure Antibody System records failures and their contexts, creating "antibodies" that prevent repeat mistakes.

# View failure antibodies
savestate antibodies list
┌─────────────────────────────────────────────────────┐
│ Antibody: ab_deploy_friday                          │
│ Created: 2026-02-20                                 │
│ Trigger: deploy command + friday context            │
│ Action: Block with warning                          │
│ Prevented: 3 times                                  │
└─────────────────────────────────────────────────────┘

# Create manual antibody
savestate antibodies create \
  --trigger "rm -rf with production path" \
  --action block \
  --message "This command would delete production data"

# Review antibody effectiveness
savestate antibodies stats
Total failures prevented: 47
Most active antibody: ab_api_rate_limit (12 blocks)

Your agent learns from its mistakes. Not in a vague "continuous learning" way. In a concrete, auditable, "this specific failure will never happen again" way.

📁 Path-Addressable State Filesystem

Memory is now a filesystem. Browse it, query it, watch it change.

# Browse memory like a filesystem
savestate fs ls /user/preferences/
editor/
timezone
theme
language

# Read values directly
savestate fs cat /user/preferences/timezone
America/New_York

# Watch for changes
savestate fs watch /project/current/
Watching /project/current/ for changes... (Ctrl+C to stop)

📍 Checkpoint Ledger

Create named checkpoints before risky operations. Roll back instantly if things go wrong.

# Create a checkpoint before major changes
savestate checkpoint create "before-refactor"
Checkpoint created: chk_before_refactor_20260227

# Something went wrong? Roll back
savestate checkpoint restore "before-refactor"
Restored 247 memories to checkpoint state

# List all checkpoints
savestate checkpoint list

📖 Action Recall Drillbook

The Drillbook stores successful action sequences that your agent can recall and replay. Think of it as muscle memory for AI.

# Record a successful workflow
savestate drillbook record "deploy-staging"
Recording actions... (run 'savestate drillbook stop' when done)

# Later, recall the workflow
savestate drillbook recall "deploy-staging"
Found matching drill. Steps:
  1. Pull latest from main
  2. Run test suite
  3. Build Docker image
  4. Push to staging registry
  5. Trigger staging deploy

Execute? [y/N]

🚀 Get v0.9.0

# npm
npm install -g @savestate/cli@latest

# Homebrew
brew upgrade savestate

# Verify
savestate --version
0.9.0

This release represents 25 days of focused work. Privacy, quality, lifecycle, learning. These aren't features for their own sake. They're the foundation for AI agents that actually earn your trust.

Memory is the moat. Now you control it.

Install SaveState →

Questions? Ideas? Find us at GitHub, @SaveStateDev, or hello@savestate.dev.