Skip to content

Pattern 08: Memory Management

"Maintain a clean, append-only conversation history with turn-aware compaction"

Codex stores ResponseItems and compacts at logical boundaries while preserving the last assistant/user messages for context.

Codex references: - codex-rs/core/src/conversation_history.rs - codex-rs/core/src/codex/compact.rs

Example (Python)

class Memory:
    def __init__(self, max_len=50):
        self.items: list[dict] = []
        self.max_len = max_len

    def add(self, role: str, content: str):
        self.items.append({"role": role, "content": content})
        if len(self.items) > self.max_len:
            self.items = self.items[-self.max_len:]

    def compact(self):
        # Keep last user + last assistant; drop older filler
        keep = []
        last_user = next((i for i in reversed(self.items) if i["role"]=="user"), None)
        last_asst = next((i for i in reversed(self.items) if i["role"]=="assistant"), None)
        if last_user: keep.append(last_user)
        if last_asst: keep.append(last_asst)
        self.items = sorted(set(map(tuple, map(dict.items, keep))))