Skip to content

feat: Add memory management tools — view, edit, delete L1 memories #116

@Enominera

Description

@Enominera

Problem

Currently, the plugin provides tdai_memory_search and tdai_conversation_search for querying memories, but there is no way to:

  1. List all stored memories — users cannot see the full inventory of what the agent has learned
  2. Edit a memory — if a memory is outdated or incorrect, there is no way to correct it
  3. Delete a memory — if a memory is wrong or no longer relevant, there is no way to remove it

Use Case

In long-term collaborative scenarios, memory accuracy degrades over time:

  • User preferences change (e.g., "user prefers dark mode" → later switches to light mode)
  • Facts become outdated (e.g., "user works at Company A" → later changes jobs)
  • The LLM may extract incorrect memories from ambiguous conversations

Without management tools, users must either:

  • Wait for the memory to be naturally superseded (which may never happen)
  • Reinstall the plugin and re-seed (losing all memories)
  • Manually edit the SQLite database (risky and not user-friendly)

Proposed Solution

Add a set of CLI commands and/or agent tools:

CLI Commands

# List all memories (with filters)
openclaw memory-tdai list [--type persona|episodic|instruction] [--limit 50]

# Show a specific memory
openclaw memory-tdai show <memory_id>

# Edit a memory
openclaw memory-tdai edit <memory_id> --content "updated content"

# Delete a memory
openclaw memory-tdai delete <memory_id>

# Purge memories matching a query
openclaw memory-tdai purge --query "outdated info" [--confirm]

Agent Tools

Add tdai_memory_edit and tdai_memory_delete tools that the agent can use when the user asks to correct or remove a memory.

Current Workaround

I wrote a Python script that reads the L1 JSONL files and displays all memories:

import json
from pathlib import Path

records_dir = Path("~/.openclaw/memory-tdai/records")
for f in sorted(records_dir.glob("*.jsonl")):
    for line in f.read_text().strip().split("\n"):
        if line:
            r = json.loads(line)
            print(f"[{r.get(type)}] {r.get(content)[:200]}")

This works for viewing but cannot edit or delete.

Priority

This is important for trust and adoption. Users need to feel in control of what the agent "remembers" about them.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions