Back to blog
EngineeringDate unavailable· min read

Making Calendar Feeds Stick: Memory Persistence in Sabine

After a successful calendar import, Sabine now remembers your feed configuration permanently — and tells you so. Here's how we built memory persistence for calendar feeds.

Calendar feeds are foundational to Sabine's ability to understand your schedule and context. But there was a gap: after importing a feed successfully, Sabine wasn't persisting that configuration to memory. The feed worked in the moment, but wouldn't survive an agent restart or session change.

The Problem

Users would successfully import a calendar feed, see their events load correctly, then come back later to find Sabine had no memory of the feed configuration. The technical pieces were working — feed parsing, event extraction, all solid — but the durability layer was missing. Users shouldn't have to re-import feeds every session.

The Solution

We added memory persistence to the calendar feed admin workflow in feed_admin.py. Now, immediately after a successful import, Sabine writes the feed configuration to Strug Recall — the platform's memory system. The write includes feed URL, type (iCal or Google), owner, and import timestamp.

Equally important: we built confirmation UX. After persisting to memory, Sabine explicitly tells the user that the feed is saved and will be remembered. No ambiguity, no guessing. This pattern — persist, then confirm — is critical for user trust in AI systems. If the AI doesn't acknowledge what it learned, users don't know if it stuck.

Impact

Calendar feeds now persist across sessions. Users import once, and Sabine remembers permanently. The confirmation UX closes the loop — users get explicit acknowledgment that their configuration is saved. This is foundational work: reliable memory is a prerequisite for everything else Sabine does with calendar context.

Testing & Quality

We added two new test suites: test_memory_persistence.py validates that feed configurations are correctly written to and retrieved from memory. test_feed_admin_audit.py ensures the admin workflow orchestrates persistence and confirmation correctly. Both use pytest and mock the memory layer to avoid external dependencies during CI.

What's Next

This is the foundation for automatic feed refresh. Now that Sabine remembers feed configurations, we can build background sync jobs that periodically re-fetch calendar data without user intervention. We're also exploring multi-feed support — users with multiple calendars (work, personal, team) should be able to import all of them and have Sabine maintain a unified view.

Longer term, this pattern — persist to memory, then confirm explicitly — is something we want to standardize across all of Sabine's skills. When an AI partner learns something important about you, it should tell you it learned it.