Memory check-up
A one-command health report on your agent's memory. Surfaces duplicates, stale entries, things near the storage cap, and anything that looks structurally off. Useful weekly. Essential before a big launch. Paid-tier feature.
The idea, in plain language
Just like your code can benefit from a linter (a program that points out small problems before they become bugs), your agent's memory can drift over time. Duplicates creep in. Stale facts pile up. The agent might be hanging on to flagged actors you've forgotten about. The memory check-up reads through everything and tells you what looks wrong.
What you see when you run it
A clean health report, like this:
╔══════════════════════════════════════════════════════════════════╗
║ SIBYL MEMORY · LINT REPORT ║
╠══════════════════════════════════════════════════════════════════╣
║ tenant │ [email protected] ║
║ db path │ memory.db ║
║ schema v │ 2 ║
║ db size │ 1247.8 KB ║
╠══════════════════════════════════════════════════════════════════╣
║ entities │ 142 ║
║ journal_events │ 1840 ║
║ reference_documents │ 23 ║
║ archived_entities │ 18 ║
║ skill_proposals │ 9 ║
╠══════════════════════════════════════════════════════════════════╣
║ [⚠ warning] db-soft-cap ║
║ local DB is at 82.1% of the 2 MB cap ║
║ → Archive stale entities or upgrade to remove the cap. ║
║ ║
║ [⚠ warning] duplicate-entity ║
║ entity name 'atlas' appears in 2 categories ║
║ → Pick one canonical category and archive the other. ║
║ ║
║ [i info] stale-entity ║
║ entity person/old-collaborator hasn't been updated since ║
║ 2025-10-01T00:00:00Z (> 90 days) ║
║ → Update or archive. ║
╠══════════════════════════════════════════════════════════════════╣
║ 0 critical · 2 warnings · 1 info ║
╚══════════════════════════════════════════════════════════════════╝
What it checks
Eleven checks across three severity levels.
| Check | Severity | What it catches |
|---|---|---|
| Schema version | critical | Your local database is older than the SDK expects. Auto-migrates on next open. |
| Invalid entity body | critical | An entity's body isn't valid JSON. Should be impossible, but the check is here belt-and-suspenders. |
| Invalid state body | critical | Same, for state documents. |
| Invalid journal entry | critical | Same, for journal entries. |
| Duplicate entity | warning | The same name appears in multiple kinds. One canonical category is cleaner. |
| Empty reference | warning | A reference doc has no body. Either populate it or delete it. |
| Storage cap | warning / critical | You're past 80% of the free-tier cap (warning) or fully over it (critical). |
| Search index mismatch | warning | The full-text search index doesn't match the underlying entities. Easy to rebuild. |
| Stale entity | info | An entity hasn't been touched in more than 90 days. Probably worth archiving. |
| Empty journal entry | info | A journal entry was written with no payload. Either fill it in or delete it. |
| Recent flagged actor | info | You've flagged someone as a bad actor in the last 30 days. Surfaces for review. |
Three severity levels, three different reactions
Critical (red)
Something is structurally broken. The schema is out of date, or a row that should be valid JSON isn't. The agent might still work, but it's working on borrowed time. Fix critical issues before doing anything else.
Warning (amber)
Something is messy. Duplicates, near-cap, search index drift. Won't break anything immediately but degrades the agent's quality. Schedule a clean-up.
Info (grey)
FYI items. Stale entries, empty journal events, recent flags worth a re-read. Read through these once a week to keep the agent's worldview tidy.
How to run it (when you're on a paid tier)
In Python:
report = memory.lint()
print(report.to_ascii())
Once the sibyl terminal command ships, the friendlier version is:
sibyl lint
Programmatic access for automation:
report = memory.lint()
if not report.ok:
print("memory needs attention")
for finding in report.critical:
print(f" - {finding.check}: {finding.message}")
When to run it
- Weekly, as a routine. A 5-second scan catches drift before it accumulates.
- Before a big launch. Confirm the agent's worldview matches yours before shipping.
- After an unusual session. If the agent did something surprising, the check-up can show whether something in memory caused it.
- Whenever you upgrade between Sibyl Memory Plugin versions. Catches anything the migration didn't.
Once the sibyl terminal command ships, the install will offer to schedule a daily check-up via your
system's task scheduler (cron on Mac/Linux, Task Scheduler on Windows). You'll get a one-line summary in your
morning terminal output. Opt-in, of course.
Why this is a paid-tier feature
The memory check-up is the diagnostic layer. If self-learning is "make the agent smarter," the check-up is "keep the agent honest." Both compound. Neither matters much in the first day; both matter a lot by month three. Both are reserved for users who care enough to pay for them.
Calling memory.lint() raises a polite error pointing at the upgrade page. You can still see your
storage status (memory.free_tier_status()) and run any of the other memory operations on the free
tier. The check-up is the only gated visibility feature.