- How do I expire old agent memory automatically instead of writing a cron?
- Store memory as typed rows with an `expires_at` timestamp in a real database, and expiry becomes a `WHERE expires_at < now()` predicate rather than a service you build. Today you run that cutoff `DELETE` on your own schedule through the SDK or a signed-in `POST /v1/run`; a managed server-run sweep (`SK-PIVOT-011`) is landing so you won't have to. On a hand-rolled table you own the whole retention job yourself.
- Does nlqdb delete expired memory for me yet?
- Not automatically yet — be honest about the state. The deterministic sweep core (a bound-cutoff `DELETE FROM facts`, per-database failure isolation) is written and tested, but the scheduled Worker that fires it nightly is still landing (`SK-PIVOT-011`). Until then, expiry is a `DELETE` you trigger yourself on the schedule you choose; the storage shape makes it one line instead of a bespoke job.
- Can I query which agent memories are about to expire?
- Yes — because `expires_at` is a typed column, 'memories expiring in the next 7 days, soonest first' is a normal query. Ask it in English and nlqdb compiles the `WHERE` + `ORDER BY`, runs it, and shows the SQL. A JSON blob or vector store has no such grain to filter or sort on.
- What does a DIY retention cron cost me later?
- The `DELETE` statement is the easy part. The expensive part is scheduling it reliably, isolating one failed run so it doesn't wedge the rest, and remembering to filter expired-but-not-yet-deleted rows out of every read path. Miss the last one and your agent recalls memory you meant to forget. nlqdb is moving that into the engine (`SK-PIVOT-011`, E-04) so you don't hand-maintain it.