Skip to content

Memory Management

Kader provides comprehensive memory management for agent conversations and state persistence.

AgentState

Key-value storage for agent data:

from kader.memory import AgentState

state = AgentState(agent_id="my-agent")

# Set values
state.set("user_name", "Alice")
state.set("preferences", {"theme": "dark", "language": "en"})

# Get values
print(state.get("user_name"))
print(state.get("preferences"))

# Check existence
if "user_name" in state:
    print("User name is set")

Session Management

Persist sessions to disk:

from kader.memory import FileSessionManager, AgentState

session_mgr = FileSessionManager()

# Create new session
session = session_mgr.create_session("my-agent")
print(f"Session ID: {session.session_id}")

# Save agent state
state = AgentState(agent_id="my-agent")
state.set("counter", 0)
session_mgr.save_agent_state(session.session_id, state)

# Load session later
loaded_state = session_mgr.load_agent_state(session.session_id)

Session Storage Location

Sessions are saved to ~/.kader/memory/sessions/ with the following structure:

~/.kader/memory/sessions/<session-id>/
├── conversation.json       # Message history
├── agent_state.json       # Agent state
├── executor/             # Sub-agent contexts
│   └── <sub-agent-id>/
│       └── conversation.json
└── checkpoint.md         # Aggregated context

Conversation Management

SlidingWindowConversationManager

Maintain context within token limits:

from kader.memory import SlidingWindowConversationManager
from kader.providers import Message

conv_mgr = SlidingWindowConversationManager(window_size=10)

# Add messages
conv_mgr.add_message(Message.user("Hello"))
conv_mgr.add_message(Message.assistant("Hi there!"))
conv_mgr.add_message(Message.user("How are you?"))

# Get messages (automatically manages window)
messages = conv_mgr.get_messages()

# Persist conversation
session_mgr.save_conversation(
    session_id,
    [msg.message for msg in conv_mgr.get_messages()]
)

PersistentSlidingWindowConversationManager

Auto-saves sub-agent history:

from kader.memory import PersistentSlidingWindowConversationManager
from kader.providers import Message

conv_mgr = PersistentSlidingWindowConversationManager(
    session_id="my-session",
    window_size=20,
    persistence_dir=Path("~/.kader/memory/sessions")
)

Tool Output Compression

Compress tool outputs to save token space:

from kader.memory import ToolOutputCompressor

compressor = ToolOutputCompressor(
    max_length=1000,
    summary_type="truncate",  # or "first_last"
)

compressed = compressor.compress(
    tool_name="read_file",
    output="Very long file content..."
)

Compression Types

Type Description
truncate Keep first N characters
first_last Keep first and last N characters

Context Aggregation

Aggregate sub-agent contexts for the main session:

from kader.utils.context_aggregator import ContextAggregator

aggregator = ContextAggregator()

# Add sub-agent context
aggregator.add_context(
    agent_id="research-agent",
    context="Research findings about..."
)

# Get aggregated context
summary = aggregator.get_summary()

Checkpoint Generation

Generate markdown summaries of agent actions:

from kader.utils.checkpointer import Checkpointer

checkpointer = Checkpointer()

# Record agent action
checkpointer.record_action(
    agent_name="PlannerAgent",
    action="Created todo list",
    details=["Step 1: Setup", "Step 2: Implement"]
)

# Generate checkpoint
checkpoint = checkpointer.generate_checkpoint()

Memory Types Summary

Class Use Case
AgentState Key-value storage for agent data
FileSessionManager Persist sessions to disk
SlidingWindowConversationManager Manage conversation history within token limits
PersistentSlidingWindowConversationManager Auto-save sub-agent history
ToolOutputCompressor Compress tool outputs
ContextAggregator Aggregate sub-agent contexts
Checkpointer Generate action summaries