← Back to list

Beyond RAG: Mastering Agent Context Engineering with OpenWiki Brains for Reliable AI Agents

Why Your 10-Step Agent Keeps Failing & How OpenWiki Brains Finally Fixes It

Roshni kumari · 2026-07-18 12:09 · 0 claps · 11.5 min read
#openwiki #context-engineering #langchain-deepagents #agentic-ai
Open on Medium ↗
Wiki topics: RAG · RAG & Retrieval AGT · AI Agents

Beyond RAG: Mastering Agent Context Engineering with OpenWiki Brains for Reliable AI Agents

Why Your 10-Step Agent Keeps Failing & How OpenWiki Brains Finally Fixes It

Table of Contents

  1. Introduction: Why Context Is the New Bottleneck in 2026 Agents
  2. The Problem: Human Docs vs. Agent-Native Memory
  3. OpenWiki Brains Deep Dive — What LangChain Just Shipped
  4. AGENTS.md & Context Files: Best Practices for Frameworks
  5. Step-by-Step: Implementing Persistent Wiki Memory
  6. Advanced Patterns: Hierarchical Memory, Critique Loops & Cross-Project Sync
  7. Common Pitfalls & How to Avoid the 10-Step Wall
  8. Contribution Opportunities Across OSS Projects
  9. Conclusion & Resources

1. Why Context Is the New Bottleneck in Agents

Agentic AI has exploded in capability.

Models are smarter, faster & cheaper than ever before.

Yet something curious happens around step 8–10:

Your agent starts hallucinating. Forgetting. Repeating itself. Making decisions that would have been correct five minutes ago but aren’t anymore.

This isn’t a model problem. It’s a context problem.

Recent benchmarks from leading research labs show:

The bottleneck isn’t reasoning capability — it’s memory management, knowledge freshness, and retrieval precision.

Enter Context Engineering

Context engineering treats persistent memory and documentation as first-class infrastructure not an afterthought. It’s the discipline of designing, maintaining, and optimizing the knowledge environment your agents operate within.

LangChain’s OpenWiki Brains (released July 10, 2026) makes this practical.

It transforms your codebase into a living, LLM-optimized wiki that agents actually use effectively — not just theoretically.

This article will equip you to:

  • Implement OpenWiki Brains across LangChain, CrewAI, and LlamaIndex
  • Reduce agent failures by 40–60% through better context
  • Contribute back to the ecosystem and build your reputation
  • Master advanced patterns like hierarchical memory and critique loops

2. Human Docs vs. Agent-Native Memory

Why Traditional Documentation Fails Agents

Traditional READMEs, API docs & wikis are optimized for human cognition:

Real-World Failures

Example 1: Outdated API Reference

# Human doc says: "Use get_data() with optional limit parameter"
# But the codebase changed: get_data() now requires a limit
# Agent uses old pattern → RuntimeError → cascading failure

Example 2: Missing Decision Traces

# Agent needs to choose between database A and B
# No documented reasoning for previous choices
# Agent makes wrong decision → inconsistent behavior → compounding errors

Example 3: Context Accumulation

# After 12 steps, the agent's context window contains:
# - 3 outdated code snippets
# - 2 contradictory instructions
# - 5 irrelevant user messages
# - 4 repeated warnings
# Result: 58% wasted tokens, degraded reasoning quality

The Maintenance Cost

Open-source maintainers report spending 30–50% of their time responding to issues caused by poor agent context issues that could be prevented with better documentation practices.

This is exactly why projects like LangChain, CrewAI, and Ollama are actively seeking strong technical writers to improve their agent-native documentation.

Key Insight: When your agent fails at step 10, it’s not the model’s fault — it’s your context infrastructure.

3. OpenWiki Brains: What LangChain Just Shipped

What Is OpenWiki Brains?

OpenWiki Brains is a context management framework that creates and maintains an openwiki/ directory in your project. This directory contains:

openwiki/
├── README.md                    # Project overview for agents
├── decisions/                   # Decision traces with timestamps
│   ├── 2026-07-15-api-choice.md
│   └── 2026-07-16-caching-strategy.md
├── modules/                     # Component-specific docs
│   ├── auth.md
│   ├── database.md
│   └── api-gateway.md
├── patterns/                    # Reusable solution patterns
│   ├── retry-pattern.md
│   └── fallback-pattern.md
├── glossary.md                  # Consistent terminology
└── .meta/                       # Metadata for auto-updates
    └── version-history.json

Core Capabilities

1. Auto-Synced Documentation

OpenWiki automatically detects code changes and updates relevant documentation:

# .openwiki/config.yaml
auto_sync:
  enabled: true
  watch_paths:
    - src/**/*.py
    - src/**/*.js
  update_strategy: "incremental"
  conflict_resolution: "human_review"

2. Token-Optimized Content

Traditional docs → OpenWiki transformation:

# Human Version (2,300 tokens)
"This module handles authentication using JWTs. JWTs are JSON Web Tokens 
that contain claims encoded as a JSON object... [extensive explanation]"

# Agent-Optimized Version (420 tokens)
## Module: Auth
**Purpose**: Authenticate requests using JWTs
**Input**: JWT string, user_id
**Output**: AuthResult { success: bool, user: User }
**Errors**: 
  - ExpiredJWT → retry with refresh
  - InvalidSignature → reject
**Dependencies**: jose library (v4.0+)
**Examples**: see auth.test.py

3. Cross-Reference Graph

OpenWiki builds a knowledge graph connecting related concepts:

4. Integration with Agent Frameworks

OpenWiki pairs seamlessly with:

  • Deep Agents harness for governed, observable workflows
  • NemoClaw for multi-agent coordination
  • LangChain, CrewAI, LlamaIndex as primary consumers
  • Ollama for local agent deployments

Under the Hood: How It Works

# Simplified implementation of OpenWiki context retrieval
class OpenWikiBrain:
    def get_context(self, agent_state: AgentState) -> str:
        # 1. Determine which docs are relevant
        relevant_docs = self.retriever.search(
            query=agent_state.current_goal,
            limit=5,
            include_recent_decisions=True
        )

        # 2. Apply token budget
        truncated = self.token_optimizer.truncate(
            docs=relevant_docs,
            budget=agent_state.remaining_tokens
        )

        # 3. Add decision history
        decisions = self.decision_store.get_recent(
            count=3,
            filter_by=agent_state.topic
        )

        # 4. Format for LLM consumption
        return self.formatter.format(
            docs=truncated,
            decisions=decisions,
            format="markdown"
        )

Result: Agents can now reliably operate for 25–30 steps with context-aware memory, compared to the previous 8–10 step wall.

4. AGENTS.md & Context Files: Best Practices for Frameworks

The AGENTS.md Standard

The community is coalescing around AGENTS.md (or CLAUDE.md) as the entry point for agent context:

# AGENTS.md

## Project: MyAgentProject
**Version**: 2.1.0
**Last Updated**: 2026-07-18

## Quick Reference
- **Repository**: github.com/user/project
- **Entry Point**: src/main.py
- **Framework**: LangChain v0.5.0
- **Key Dependencies**: OpenAI API, Qdrant, PostgreSQL

## Agent Capabilities
1. **Research Agent**: Gathers and synthesizes information
2. **Code Agent**: Generates and reviews code
3. **Deployment Agent**: Manages infrastructure

## Critical Rules
- **ALWAYS** validate database schema before queries
- **NEVER** use user input in system prompts directly
- **PREFER** async operations for I/O-bound tasks

## Decision History (Recent)
- 2026-07-15: Chose Qdrant over Pinecone (cost + performance)
- 2026-07-12: Implemented retry-with-backoff pattern
- 2026-07-10: Migrated to OpenWiki for context management

## OpenWiki Integration
- **Path**: ./openwiki/
- **Auto-Sync**: Enabled
- **Update Frequency**: On code change

Framework-Specific Best Practices

LangChain

# Implement OpenWiki as a custom Retriever
class OpenWikiRetriever(BaseRetriever):
    def _get_relevant_documents(self, query: str) -> List[Document]:
        # Load from openwiki/ directory
        docs = load_openwiki_docs()
        # Use semantic search
        return semantic_search(query, docs)

Pro Tips:

  • Use LangGraph with OpenWiki for state management
  • Implement checkpointing to save and restore context
  • Use RAGAS to evaluate retrieval quality

CrewAI

# crew_config.yaml
crew:
  agents:
    researcher:
      role: "Research Agent"
      context_files:
        - openwiki/modules/research.md
        - openwiki/patterns/research-pattern.md

    executor:
      role: "Execution Agent"
      context_files:
        - openwiki/modules/execution.md
        - openwiki/decisions/recent.md

Pro Tips:

  • Create agent-specific context files
  • Use hierarchical memory for task decomposition
  • Implement critique agents that review decisions

LlamaIndex

from llama_index import SimpleDirectoryReader, VectorStoreIndex

# Load OpenWiki as knowledge base
reader = SimpleDirectoryReader(
    input_dir="./openwiki",
    recursive=True
)
docs = reader.load_data()
index = VectorStoreIndex.from_documents(docs)

# Query with agent state
query_engine = index.as_query_engine()
context = query_engine.query(agent_state.current_goal)

Pro Tips:

  • Use HyDE (Hypothetical Document Embeddings) for better retrieval
  • Implement re-ranking for multi-step reasoning
  • Use context compression to maximize token efficiency

Architecture Overview

5. Implementing Persistent Wiki Memory

Phase 1: Initial Setup (Day 1)

Step 1: Install OpenWiki

pip install openwiki-brains  # Python
# or
npm install @openwiki/core   # Node.js

Step 2: Initialize in Your Project

openwiki init --framework=langchain

This creates the openwiki/ directory with templates.

Step 3: Configure Auto-Sync

# .openwiki/config.yaml
project:
  name: "MyAgentProject"
  version: "1.0.0"

sync:
  enabled: true
  watch_paths:
    - "src/**/*.py"
    - "src/**/*.md"
  ignore_paths:
    - "tests/**"
    - "docs/_build/**"

retrieval:
  max_tokens: 4000
  top_k: 5

agents:
  - name: "main_agent"
    context_files:
      - "openwiki/README.md"
      - "openwiki/modules/*.md"

Step 4: Create Your AGENTS.md

openwiki create-agents-md --template=langchain

Phase 2: Populating Context (Day 2–3)

Step 5: Document Core Modules

# Use OpenWiki decorators to auto-document
from openwiki import module, decision

@module(name="authentication")
class AuthModule:
    """Handles user authentication and authorization."""

    @decision("2026-07-18", "Use JWT with refresh tokens")
    def authenticate(self, token: str) -> User:
        """Validates JWT and returns user."""
        # Implementation...

Step 6: Capture Decisions

from openwiki import DecisionStore

store = DecisionStore()
store.record(
    topic="Database Choice",
    decision="PostgreSQL with TimescaleDB for time-series data",
    rationale="High write throughput needed, TimescaleDB provides compression",
    alternatives=["MongoDB", "ClickHouse"],
    outcome="Successful 3-month pilot"
)

Step 7: Define Patterns

# openwiki/patterns/retry-with-backoff.md

## Pattern: Exponential Backoff Retry

**When to use**: Network requests, API calls, transient failures

**Implementation**:
```python
def retry_with_backoff(func, max_retries=5, base_delay=1):
    for attempt in range(max_retries):
        try:
            return func()
        except TransientError:
            delay = base_delay * (2 ** attempt)
            time.sleep(delay)
    raise MaxRetriesExceeded()

Example: See integration_test.py


### Phase 3: Integration (Day 4-5)

#### Step 8: Connect Your Agent

```python
# LangChain integration
from openwiki import OpenWikiBrain
from langchain.agents import AgentExecutor

# Initialize OpenWiki
wiki_brain = OpenWikiBrain(
    project_root="./",
    max_context_tokens=4000
)

# Create agent with wiki context
def get_agent_context(state):
    return wiki_brain.get_context(
        goal=state.goal,
        step_number=state.step,
        previous_actions=state.history[-3:]
    )

agent = AgentExecutor(
    agent=agent,
    tools=tools,
    context_provider=get_agent_context
)

Step 9: Add Monitoring

from openwiki import OpenWikiMonitor

monitor = OpenWikiMonitor()

# Track context usage
@monitor.track
def agent_step(step_input):
    context = wiki_brain.get_context(step_input.goal)
    response = llm.invoke(context + step_input.prompt)
    return response

# Generate report
monitor.report()

Phase 4: Testing & Optimization (Day 6–7)

Step 10: Evaluate Performance

# Test 10-step tasks with vs without OpenWiki
def evaluate_with_context():
    results = []
    for task in benchmark_tasks:
        agent = create_agent(use_openwiki=True)
        result = agent.run(task)
        results.append(result)
    return results

# Compare baseline
baseline = evaluate_without_context()
improved = evaluate_with_context()

print(f"Success Rate: {baseline}% → {improved}%")
print(f"Average Steps: {baseline_steps} → {improved_steps}")

Step 11: Implement Continuous Updates

# Auto-update wiki on code changes
import watchdog
from openwiki import OpenWikiUpdater

updater = OpenWikiUpdater()
watcher = watchdog.observers.Observer()
watcher.schedule(updater, path="src/", recursive=True)
watcher.start()

6. Hierarchical Memory, Critique Loops & Cross-Project Sync

Pattern 1: Hierarchical Memory

Organize knowledge as a hierarchy to manage complexity:

# openwiki/.hierarchy.yaml
memory_hierarchy:
  level_1:  # Working memory (current task)
    capacity: 2000 tokens
    retention: "session"
    sources:
      - recent_decisions/
      - current_goal.md

  level_2:  # Short-term memory (project context)
    capacity: 8000 tokens
    retention: "week"
    sources:
      - modules/
      - patterns/

  level_3:  # Long-term memory (institutional knowledge)
    capacity: unlimited
    retention: "permanent"
    sources:
      - archived_decisions/
      - retrospectives/
      - project_history/

Implementation:

class HierarchicalMemory:
    def __init__(self):
        self.levels = {
            "working": WorkingMemory(2000),
            "short_term": ShortTermMemory(8000),
            "long_term": LongTermMemory()
        }

    def get_context(self, query: str, step_number: int):
        # Start with working memory
        context = self.levels["working"].get()

        # Add short-term if needed
        if step_number > 3:
            context += self.levels["short_term"].search(query)

        # Add long-term for complex tasks
        if self.is_complex_task(query):
            context += self.levels["long_term"].search(query)

        return context

Pattern 2: Critique Loops

Create agents that review and improve context:

class CritiqueLoop:
    def __init__(self, primary_agent, critic_agent):
        self.primary = primary_agent
        self.critic = critic_agent

    def execute_with_review(self, task):
        # Primary agent generates solution
        solution = self.primary.run(task)

        # Critic agent evaluates
        critique = self.critic.run(
            task=task,
            solution=solution,
            criteria=self.criteria
        )

        # Store both
        self.store_decision(task, solution, critique)

        # Update wiki
        self.update_wiki(task, solution, critique)

        return solution, critique

Pattern 3: Cross-Project Sync

Maintain consistency across multiple projects:

# sync_config.yaml
projects:
  - name: "auth-service"
    path: "../auth-service/"
  - name: "user-service"
    path: "../user-service/"
  - name: "api-gateway"
    path: "../api-gateway/"

sync_rules:
  shared_patterns:
    - "openwiki/patterns/common/"
    - "openwiki/patterns/shared/"

  sync_interval: "hourly"

  conflict_strategy: "manual_review"

Pattern 4: Multi-Modal Context

Incorporate non-textual context:

class MultiModalContext:
    def add_visual_context(self, image_path: str, description: str):
        """Add image descriptions to context."""
        self.images[image_path] = {
            "description": description,
            "embedding": self.embed_image(image_path)
        }

    def add_code_snippets(self, snippets: List[CodeSnippet]):
        """Add code snippets with execution traces."""
        for snippet in snippets:
            self.snippets.append({
                "code": snippet.code,
                "trace": self.run_snippet(snippet),
                "use_case": snippet.use_case
            })

Pattern 5: Adaptive Retrieval

Dynamically adjust retrieval based on context:

class AdaptiveRetriever:
    def retrieve(self, query: str, state: AgentState):
        # Adjust retrieval strategy based on agent state
        if state.confidence < 0.5:
            # Agent is uncertain → broader search
            return self.broad_search(query)

        if state.step_number > 10:
            # Long-running agent → prioritize decisions
            return self.prioritize_decisions(query)

        if state.topology == "multi-agent":
            # Multiple agents → include coordination contexts
            return self.include_coordination(query)

        return self.default_search(query)

7. Common Pitfalls & How to Avoid the 10-Step Wall

Pitfall 1: Context Overload

The Problem: Including too much context, wasting tokens and confusing the model.

The Fix: Implement token budgeting:

class TokenBudgetManager:
    def __init__(self, max_tokens=4000):
        self.budget = max_tokens
        self.reserved = {
            "system_prompt": 500,
            "user_input": 500,
            "response_format": 300
        }
        self.context_budget = self.budget - sum(self.reserved.values())

    def fit_context(self, docs: List[Document]) -> str:
        """Fit context within token budget."""
        total_tokens = sum(doc.token_count for doc in docs)
        if total_tokens <= self.context_budget:
            return self.format(docs)

        # Truncate by importance
        docs_sorted = sorted(docs, key=lambda d: d.importance, reverse=True)
        truncated = []
        tokens_used = 0
        for doc in docs_sorted:
            if tokens_used + doc.token_count <= self.context_budget:
                truncated.append(doc)
                tokens_used += doc.token_count
            else:
                # Include summary instead
                truncated.append(doc.summary)
                break

        return self.format(truncated)

Pitfall 2: Stale Knowledge

The Problem: OpenWiki not updating when code changes.

The Fix: Implement proper monitoring:

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

class WikiUpdater(FileSystemEventHandler):
    def __init__(self, wiki_path):
        self.wiki_path = wiki_path
        self.debounce = {}

    def on_modified(self, event):
        if not event.is_directory:
            file_path = event.src_path
            # Debounce updates (wait for write to complete)
            if file_path in self.debounce:
                return

            self.debounce[file_path] = time.time()
            time.sleep(0.5)  # Debounce window

            # Trigger update
            self.update_wiki(file_path)

            # Remove from debounce
            del self.debounce[file_path]

    def update_wiki(self, file_path):
        """Update relevant wiki pages based on file changes."""
        changed_module = detect_changed_module(file_path)
        update_docs = find_affected_docs(changed_module)
        for doc in update_docs:
            regenerate_doc(doc)

Pitfall 3: Incomplete Decision Logging

The Problem: Not recording enough context about decisions.

The Fix: Implement structured decision logging:

@dataclass
class Decision:
    timestamp: datetime
    topic: str
    decision: str
    rationale: str
    alternatives: List[str]
    tradeoffs: Dict[str, str]
    outcome: Optional[str] = None
    context: Dict[str, Any] = field(default_factory=dict)

class DecisionLogger:
    def log_decision(self, decision: Decision):
        # Save to openwiki/decisions/
        file_path = f"openwiki/decisions/{decision.timestamp.date()}-{slugify(decision.topic)}.md"

        content = f"""
## Decision: {decision.topic}
**Date**: {decision.timestamp}
**Decision**: {decision.decision}
**Rationale**: {decision.rationale}

### Alternatives Considered
{self.format_alternatives(decision.alternatives)}

### Tradeoffs
{self.format_tradeoffs(decision.tradeoffs)}

### Outcome
{decision.outcome or "Pending evaluation"}

### Context
{json.dumps(decision.context, indent=2)}
"""

        with open(file_path, 'w') as f:
            f.write(content)

Pitfall 4: Poor Cross-Referencing

The Problem: Context files are isolated, not building a knowledge graph.

The Fix: Implement automatic cross-referencing:

class CrossReferencer:
    def generate_references(self, doc_path: str):
        """Auto-generate cross-references between docs."""
        doc = load_doc(doc_path)
        references = []

        # Find references to other modules
        for module in self.module_patterns:
            if module in doc.content:
                references.append({
                    "type": "depends_on",
                    "target": f"openwiki/modules/{module}.md"
                })

        # Find pattern usage
        for pattern in self.patterns:
            if pattern in doc.content:
                references.append({
                    "type": "uses_pattern",
                    "target": f"openwiki/patterns/{pattern}.md"
                })

        # Update doc with references
        self.update_references(doc_path, references)

Pitfall 5: Not Testing with Real Workloads

The Problem: Testing with toy examples, failing in production.

The Fix: Build a comprehensive test suite:

class AgentContextTest:
    def test_long_horizon_tasks(self):
        """Test agent with 20+ step tasks."""
        agent = create_agent(use_openwiki=True)
        task = generate_long_task(25)  # 25 steps

        for step in range(25):
            result = agent.step(task, step)
            assert result.valid
            assert not result.confused  # Confidence > 0.7

        assert agent.completed_successfully

    def test_context_switching(self):
        """Test ability to switch between disparate tasks."""
        tasks = [
            "Write Python function for data validation",
            "Deploy to AWS Lambda",
            "Debug production issue",
            "Review PR for authentication"
        ]

        for task in tasks:
            agent.switch_task(task)
            result = agent.run(task)
            assert result.success

        # Should still have coherent context
        final_context = agent.get_context()
        assert "switch between tasks" in final_context

    def test_knowledge_freshness(self):
        """Test that OpenWiki updates reflect code changes."""
        # Change a key function
        change_function("get_user_data", "add retry logic")

        # Agent should know about the change
        response = agent.query("How to get user data?")
        assert "retry" in response.lower()

The 10-Step Wall: A Checklist for Prevention

Before deploying, ensure you have:

  • OpenWiki auto-sync enabled (not manual updates)
  • Token budget management (max 4000 tokens with prioritization)
  • Decision logging structure (timestamped, with rationale)
  • Cross-reference graph (automatic relationships between docs)
  • Test suite (20+ step tasks, context switches, knowledge freshness)
  • Monitoring (context usage, retrieval quality, update frequency)
  • Fallback strategy (what happens when context is missing)
  • Critique loop (self-review of decisions)

8. Contribution Opportunities Across OSS Projects

  1. Build your reputation in the deeptech community
  2. Learn from core maintainers of leading projects
  3. Solve real problems affecting thousands of builders
  4. Build your portfolio with impactful contributions
  5. Gain early access to cutting-edge features
## My Contribution Template

### Title: [Clear, Action-Oriented Title]

### Problem Statement
[What pain point does this solve?]

### Proposed Solution
[What exactly are you contributing?]

### Implementation Plan
- Phase 1: [Initial setup and documentation]
- Phase 2: [Core implementation]
- Phase 3: [Testing and examples]
- Phase 4: [Review and polish]

### Timeline
[Realistic timeline with milestones]

### Success Metrics
[How will this be measured?]

### Resources Needed
[What do you need from maintainers?]

9. Conclusion & Resources

Context engineering is shifting agents from brittle demos to production workhorses.

By implementing OpenWiki Brains and contributing high-quality guides, you directly reduce friction for thousands of builders.

Key Takeaways

  1. Context is infrastructure — treat it with the same rigor as code
  2. OpenWiki Brains provides the practical tools to implement context engineering
  3. AGENTS.md is emerging as the standard for agent-native documentation
  4. Advanced patterns (hierarchical memory, critique loops) take you to the next level
  5. Contributions to OSS projects build reputation and help the community

Resources

Documentation:

Community:

Tools:

“The best time to fix your context was 6 months ago. The second best time is now.”

— Adapted from the OpenWiki Community


메타데이터
post_id
b3fe5e70c65a
slug
beyond-rag-mastering-agent-context-engineering-with-openwiki-brains-for-reliable-ai-agents-b3fe5e70c65a
url
https://medium.com/@roshni_k06/beyond-rag-mastering-agent-context-engineering-with-openwiki-brains-for-reliable-ai-agents-b3fe5e70c65a
canonical_url
https://medium.com/@roshni_k06/beyond-rag-mastering-agent-context-engineering-with-openwiki-brains-for-reliable-ai-agents-b3fe5e70c65a
author_url
https://medium.com/@roshni_k06
status
ok
fetched_at
2026-08-03 19:12:03