Skip to content
Back to skills

Memory Indexed Experience Scaling

ASecurity

Enable long-horizon agents to manage finite context by separating working memory from persistent storage. Use indexed summaries with pointers to archived evidence, treating memory operations as first-class agent actions learned via RL.

  • 6 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 9, 2026
ai-agentspythongoperformance

Security analysis

A100/100

Scanned September 9, 2026

npx -y skills add ADu2021/skillXiv --skill memory-indexed-experience-scaling --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Memory Indexed Experience Scaling?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Memory Indexed Experience Scaling
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/adu2021-memory-indexed-experience-scaling/badge)](https://www.skillsdirectory.com/skills/adu2021-memory-indexed-experience-scaling)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: memory-indexed-experience-scaling
title: "Memex(RL): Scaling Long-Horizon LLM Agents via Indexed Experience Memory"
version: 0.0.2
engine: skillxiv-v0.0.2-claude-opus-4.6
license: MIT
url: "https://arxiv.org/abs/2603.04257"
keywords: [Long-Horizon Reasoning, Memory Management, Context Compression, Agent Scaling, Reinforcement Learning]
description: "Enable long-horizon agents to manage finite context by separating working memory from persistent storage. Use indexed summaries with pointers to archived evidence, treating memory operations as first-class agent actions learned via RL."
---

# Memex(RL): Indexed Experience Memory for Scaling Long-Horizon Agents

Long-horizon multi-step reasoning tasks overwhelm finite context windows: agents either repeat full conversation history (inefficient) or use lossy summaries (information loss). Memex introduces a memory architecture where agents explicitly manage both working context and long-term storage through learned operations. The system maintains compact in-context indexed summaries with pointers to externally archived artifacts, enabling full-fidelity evidence retrieval on demand.

The core innovation treats memory as a first-class agent capability: read operations dereference indices to retrieve exact past information; write operations compress state into indexed summaries. This mirrors how humans manage complex projects with external notes and references while keeping working memory focused.

## Core Concept

Memex decomposes memory into two complementary systems:

1. **Working Context**: Compact in-context summary (~1-2KB) containing indexed references to past interactions
2. **Experience Store**: External archive of full-fidelity artifacts (full trajectories, tool outputs, decision trees) under stable indices

Agents learn to:
- **Write**: Compress key information into indexed summary for future reference
- **Read**: Dereference indices to retrieve exact past information when needed
- **Manage**: Decide what to compress, when to retrieve, based on task demands

This separation enables agents to maintain reasoning coherence over thousands of tokens while staying within practical context limits.

## Architecture Overview

- **Input**: Long-horizon task with multi-step subtasks
- **Working Context Module**: Compressed summary with embedded indices
- **Experience Store**: Persistent key-value archive indexed by discrete IDs
- **Read/Write Operators**: Agent-learned memory operations
- **Action Space**: Extended with memory operations (read_idx, write_summary)
- **Output**: Decision with access to complete historical context

## Implementation Steps

**Step 1: Design experience store and indexing scheme**

Create a persistent storage system for archived experiences with stable access keys.

```python
class ExperienceStore:
    """External memory store for agent artifacts."""
    def __init__(self, max_size=10000):
        self.store = {}
        self.index_counter = 0
        self.max_size = max_size

    def write(self, artifact, artifact_type='trajectory'):
        """
        Archive an artifact and return stable index.
        artifact_type: 'trajectory', 'tool_output', 'decision_tree', etc.
        """
        if len(self.store) >= self.max_size:
            # Evict least-recently-used entry
            oldest_idx = min(self.store.keys(),
                            key=lambda k: self.store[k]['access_time'])
            del self.store[oldest_idx]

        idx = self.index_counter
        self.store[idx] = {
            'artifact': artifact,
            'type': artifact_type,
            'timestamp': time.time(),
            'access_time': time.time(),
            'access_count': 0
        }

        self.index_counter += 1
        return idx

    def read(self, idx):
        """Retrieve archived artifact by index."""
        if idx not in self.store:
            return None

        entry = self.store[idx]
        entry['access_time'] = time.time()
        entry['access_count'] += 1

        return entry['artifact']

    def list_indices(self):
        """Return available indices for agent querying."""
        return sorted(self.store.keys())
```

**Step 2: Create working context with indexed summaries**

Design a compact in-context representation that embeds indices without storing full artifacts.

```python
def create_indexed_summary(current_trajectory, experience_indices,
                          summary_max_tokens=200):
    """
    Create compact working context with embedded index references.

    Format:
    - Current step context (80-100 tokens)
    - Index references to archived experiences (20-40 tokens)
    - Metadata about available archived artifacts (remaining tokens)
    """
    # Part 1: Recent context (last 2-3 steps)
    recent_context = format_recent_trajectory(current_trajectory, depth=3)

    # Part 2: Archived experience index pointers
    index_pointers = []
    for idx in experience_indices[-5:]:  # Reference last 5 archived experiences
        summary = f"[exp_{idx}] "  # Compact reference
        index_pointers.append(summary)

    # Part 3: Metadata about available memories
    available_memories = f"Available: {len(experience_indices)} archived experiences"

    # Combine into compact summary
    working_context = f"""
Current Context:
{recent_context}

Available Memories:
{' '.join(index_pointers)}
{available_memories}

Agent Action Space: [act, read_exp_IDX, write_summary]
"""

    return working_context.strip()

def format_recent_trajectory(trajectory, depth=3):
    """Format last `depth` steps of trajectory for context."""
    recent = trajectory[-depth:]
    formatted = []
    for step in recent:
        formatted.append(f"Step: {step['action']}, Result: {step['result'][:50]}")
    return '\n'.join(formatted)
```

**Step 3: Implement read/write agent actions**

Extend agent action space to include memory operations as learned behaviors.

```python
class MemoryAugmentedAgent:
    """LLM agent with learned memory operations."""
    def __init__(self, llm_model, experience_store, working_context_size=200):
        self.llm = llm_model
        self.store = experience_store
        self.working_context_size = working_context_size

    def step(self, task_prompt, working_memory, trajectory):
        """
        Execute agent step with optional memory operations.
        Returns: (action, memory_operation)
        """
        # Construct full prompt with working memory
        indexed_summary = create_indexed_summary(trajectory, self.store.list_indices())

        full_prompt = f"""
Task: {task_prompt}

Working Memory:
{indexed_summary}

Your action (format: ACTION:value or READ:exp_IDX or WRITE:summary_text):
"""

        # Forward pass through LLM
        response = self.llm.generate(full_prompt, max_tokens=100)

        # Parse response for action type
        if response.startswith('READ:'):
            # Memory read operation
            exp_idx = int(response.split(':')[1])
            artifact = self.store.read(exp_idx)
            return ('read', artifact, exp_idx)

        elif response.startswith('WRITE:'):
            # Memory write operation
            summary = response.split(':', 1)[1]
            idx = self.store.write(summary, artifact_type='agent_summary')
            return ('write', idx)

        else:
            # Regular action
            return ('act', response)

    def compress_for_storage(self, trajectory_segment):
        """
        Compress trajectory segment into archived summary.
        Executed when agent issues WRITE action.
        """
        # Summarize key decisions and outcomes
        summary = f"""
Trajectory Summary:
- Steps: {len(trajectory_segment)}
- Key decisions: {[s['action'] for s in trajectory_segment[:3]]}
- Final outcome: {trajectory_segment[-1]['result']}
"""
        return summary
```

**Step 4: Learn memory operations via reinforcement learning**

Train agent to optimize when and what to read/write using RL.

```python
def compute_memory_cost(operation_type, access_count=0):
    """
    Compute cost of memory operation in tokens.
    - read: 1-2 tokens (index) + retrieved artifact tokens
    - write: summary length + index (2-3 tokens)
    """
    if operation_type == 'read':
        # Cost: index overhead + artifact retrieval
        return 2 + access_count  # Penalize repeated reads of same info

    elif operation_type == 'write':
        # Cost: summary compression + indexing overhead
        return 3 + 0  # Fixed overhead

    else:
        return 0  # No memory cost for regular actions

def compute_memory_reward(trajectory, task_success):
    """
    Reward successful task completion while penalizing memory operations.

    reward = task_success_bonus - memory_operation_cost
    """
    success_bonus = 10.0 if task_success else -1.0

    # Count memory operations in trajectory
    total_memory_cost = 0
    for step in trajectory:
        if step['action_type'] in ['read', 'write']:
            total_memory_cost += compute_memory_cost(step['action_type'])

    # Memory efficiency reward
    memory_penalty = 0.1 * total_memory_cost

    return success_bonus - memory_penalty

def memory_rl_update(agent, batch_trajectories, learning_rate=0.001):
    """
    RL update to optimize memory operations.
    Uses policy gradient with memory cost penalties.
    """
    total_pg_loss = 0.0

    for trajectory in batch_trajectories:
        task_success = trajectory[-1]['task_complete']
        reward = compute_memory_reward(trajectory, task_success)

        # Policy gradient for each step
        for t, step in enumerate(trajectory):
            # Log probability of chosen action
            logprob = agent.llm.compute_logprob(
                step['prompt'],
                step['action']
            )

            # PG loss: maximize log-prob of low-cost, high-reward actions
            step_memory_cost = compute_memory_cost(step['action_type'])
            adjusted_reward = reward - step_memory_cost

            pg_loss = -logprob * adjusted_reward
            total_pg_loss += pg_loss

    # Optimize
    agent.llm.backward(total_pg_loss / len(batch_trajectories))
    agent.llm.optimizer.step(learning_rate)

    return (total_pg_loss / len(batch_trajectories)).item()
```

**Step 5: Scaling evaluation on long-horizon tasks**

Benchmark memory-augmented agents on tasks requiring hundreds of steps.

```python
def evaluate_scaling(agent, task_sequence, max_steps=500):
    """
    Evaluate agent on long-horizon task.
    Compare: working context size, success rate, memory operations.
    """
    trajectory = []
    working_memory = []
    context_size = 0
    success = False

    for step_idx in range(max_steps):
        # Agent step
        action, memory_op = agent.step(
            task_sequence[step_idx],
            working_memory,
            trajectory
        )

        trajectory.append({
            'step': step_idx,
            'action': action,
            'memory_op': memory_op,
            'context_size': context_size
        })

        # Update working memory
        if memory_op[0] == 'write':
            working_memory.append(memory_op[1])
            context_size += len(str(memory_op[1]))

        # Check task completion
        if agent.check_success(action):
            success = True
            break

    return {
        'success': success,
        'steps_taken': len(trajectory),
        'peak_context_size': max(s['context_size'] for s in trajectory),
        'memory_ops': len([t for t in trajectory if t['memory_op'] is not None]),
        'trajectory': trajectory
    }
```

## Practical Guidance

**Hyperparameter Selection:**
- **Working context size**: 200-500 tokens. Balance information density vs. token overhead.
- **Experience store max size**: 1,000-10,000. Larger = more history available; higher eviction cost.
- **Memory operation cost weight**: 0.1-0.5. Higher = penalizes reads/writes more, encouraging efficient memory usage.
- **Access count penalty**: 0.1-0.5 per read. Discourages repeated reads of same information; encourages compression.

**When to Use:**
- Long-horizon multi-step reasoning (100+ steps)
- Tasks requiring history reference (e.g., negotiation, project planning)
- Scenarios where lossy compression is insufficient
- Agent systems with token budget constraints

**When NOT to Use:**
- Short tasks (<20 steps) where context window is not a bottleneck
- Real-time systems requiring minimal latency (memory operations add overhead)
- Tasks where all information is state-encoded (no explicit history dependency)

**Common Pitfalls:**
- **Memory leakage**: Archived summaries can drift from true history. Validate by spot-checking retrieved artifacts.
- **Access patterns**: Skewed access patterns can cause eviction of useful memories. Use LRU or frequency-based retention.
- **Compression degradation**: Over-compressed summaries lose critical details. Monitor task performance; increase context size if needed.
- **Index fragmentation**: After many reads/writes, indices become sparse. Periodic compaction of store helps.

## Reference

arXiv: https://arxiv.org/abs/2603.04257

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.