library(artclaude)
# Create memory-enabled agent
memory_dir <- tempfile("claude_memory_")
chat <- claude_new(
tools = list(claude_memory(memory_dir)),
beta = beta_headers$BETA_CONTEXT_MGMT
)
# First session - store information
chat$chat("Remember that my favorite color is blue")
chat$chat("Also remember I'm working on project Alpha")
chat$chat("The project deadline is 2024-06-30")
# New session - memory persists
chat2 <- claude_new(
tools = list(claude_memory(memory_dir)),
beta = beta_headers$BETA_CONTEXT_MGMT
)
chat2$chat("What is my favorite color?")
# Returns: "blue"
chat2$chat("What project am I working on and when is it due?")
# Returns: "project Alpha, deadline 2024-06-30"Overview
Long-running agents require two key capabilities:
- Memory: Persist information across sessions
- Context Editing: Automatically manage context to prevent exhaustion
This vignette demonstrates how to build agents that run for extended periods without hitting token limits or losing context.
Memory Tool
Basic Memory
Enable Claude to store and retrieve information across sessions:
Memory Capabilities
The memory tool allows Claude to:
- Create new memory files
- Read existing memory files
- Update memory file contents
- Delete memory files
Claude manages the file structure automatically - you just provide the directory.
Long-Running Agent Example
# Agent that tracks project status over time
agent_memory <- tempfile("project_agent_")
chat <- claude_new(
tools = list(claude_memory(agent_memory)),
beta = beta_headers$BETA_CONTEXT_MGMT
)
# Day 1
chat$chat("Track that project X started on 2024-01-15")
chat$chat("Initial team: Alice (dev), Bob (design), Carol (PM)")
# Day 30
chat$chat("Update: First milestone completed on 2024-02-14")
chat$chat("Add note: Bob requested additional resources")
# Day 60
chat$chat("What's the complete status of project X?")
# Returns: Full history from memory
# Day 90
chat$chat("Create a timeline of all project X events")
# Returns: Organized timeline from memoryContext Editing
Why Context Editing?
Tool-heavy workflows quickly accumulate context:
- Each tool call adds input tokens
- Each tool result adds output tokens
- Long sessions hit context limits
Context editing automatically removes stale tool results while preserving conversation flow.
Basic Context Editing
chat <- claude_new(
tools = list(claude_web_search()),
context_edit = claude_context_edit(),
beta = beta_headers$BETA_CONTEXT_MGMT
)
# Can now run many searches without hitting limits
for (i in 1:100) {
chat$chat(paste("Search for topic", i))
}Custom Thresholds
Tune context editing parameters for your workflow:
chat <- claude_new(
tools = list(claude_web_search()),
context_edit = claude_context_edit(
trigger_tokens = 50000L, # Clear when context reaches 50k tokens
keep_tool_uses = 10L, # Keep 10 most recent tool uses
clear_at_least = 5000L # Clear at least 5k tokens per edit
),
beta = beta_headers$BETA_CONTEXT_MGMT
)Parameters: - trigger_tokens: Input token threshold to trigger clearing - keep_tool_uses: Number of recent tool uses to preserve - clear_at_least: Minimum tokens to clear per edit - exclude_tools: Tools to exclude from clearing
Excluding Tools
Prevent specific tools from being cleared:
# Keep memory tool results, clear web search results
chat <- claude_new(
tools = list(
claude_memory(tempdir()),
claude_web_search()
),
context_edit = claude_context_edit(
exclude_tools = c("memory")
),
beta = beta_headers$BETA_CONTEXT_MGMT
)Impact
In testing, context editing:
- Reduced token consumption by 84% in 100-turn sessions
- Enabled workflows that would otherwise fail from context exhaustion
- Preserved conversation quality and continuity
Combined: Memory + Context Editing
Complete Long-Running Agent
library(artclaude)
# Setup persistent agent
agent_memory <- "~/agents/research_assistant"
fs::dir_create(agent_memory)
# Create agent with memory AND context editing
chat <- claude_new(
tools = list(
claude_memory(agent_memory),
claude_web_search(),
claude_code_exec()
),
context_edit = claude_context_edit(
trigger_tokens = 40000L,
keep_tool_uses = 8L,
exclude_tools = c("memory")
),
beta = c(
beta_headers$BETA_CONTEXT_MGMT,
beta_headers$BETA_CODE_EXEC_BASH
)
)
# Session 1: Research phase
chat$chat("Research the top 10 R packages for data visualization")
chat$chat("Save key findings about each package to memory")
# Session 2: Analysis phase (new R session, memory persists)
chat2 <- claude_new(
tools = list(
claude_memory(agent_memory),
claude_web_search(),
claude_code_exec()
),
context_edit = claude_context_edit(exclude_tools = c("memory")),
beta = c(beta_headers$BETA_CONTEXT_MGMT, beta_headers$BETA_CODE_EXEC_BASH)
)
chat2$chat("Based on your research, create a comparison table")
chat2$chat("Which packages are best for interactive visualizations?")
# Session 3: Report generation
chat3 <- claude_new(
tools = list(claude_memory(agent_memory)),
beta = beta_headers$BETA_CONTEXT_MGMT
)
chat3$chat("Create a markdown report of all findings")Use Cases
Research Agent
memory_dir <- "~/agents/research"
fs::dir_create(memory_dir)
agent <- claude_new(
tools = list(
claude_memory(memory_dir),
claude_web_search()
),
context_edit = claude_context_edit(exclude_tools = c("memory")),
beta = beta_headers$BETA_CONTEXT_MGMT
)
# Accumulate research over days/weeks
agent$chat("Research topic A and save key points")
agent$chat("Research topic B and compare with topic A")
agent$chat("Synthesize all research into a summary")Project Tracker
memory_dir <- "~/agents/project_tracker"
fs::dir_create(memory_dir)
tracker <- claude_new(
tools = list(claude_memory(memory_dir)),
beta = beta_headers$BETA_CONTEXT_MGMT
)
# Track events over time
tracker$chat("Project Alpha started 2024-01-15")
tracker$chat("Milestone 1 completed 2024-02-20")
tracker$chat("Budget increased by 15% on 2024-03-10")
tracker$chat("Create timeline of all events")API References
- Memory Tool: https://docs.claude.com/en/docs/agents-and-tools/tool-use/memory-tool
- Context Management: https://anthropic.com/news/context-management
Related Functions
-
claude_memory(): Enable persistent memory -
claude_context_edit(): Configure context editing -
claude_new(): Create chat with memory and context editing
