The wipe API
public void wipeUser(String userId) {
jdbc.update("DELETE FROM adk_sessions WHERE user_id = ?", userId);
// CASCADE handles messages, events, tasks
vectorStore.deleteByFilter(Filter.eq("user_id", userId));
cacheEvictAll(userId);
}Advertisement
What actually needs to go
Message content, extracted PII, embeddings derived from their data, cached prompts, logs mentioning them. Aggregate metrics that don't identify them can stay.
Advertisement
Log scrubbing
Even production logs may contain user content. Design log-writing to hash user IDs and never emit prompt content.