Self-Improving AI Agents: Building Agents That Learn From Experience
From agents that simply act to agents that learn, adapt, and continuously improve from their own experience.

Introduction
For the last few years, the dominant paradigm in AI has been:
Build a model → give it tools → give it instructions → deploy it → monitor it.
But there is a fundamental limitation in this approach. Once an AI agent is deployed, its environment keeps changing while the agent largely stays the same.Users behave differently. APIs change. Business rules evolve. New edge cases appear. Tools fail in unexpected ways. Prompts that worked yesterday may fail tomorrow. And the agent accumulates experiences that contain valuable information—but conventional agents often don't systematically learn from them.
This leads to a natural next step in agentic AI:
What if an AI agent could learn from its own experience, identify what went wrong, propose improvements, test those improvements safely, and incorporate only the changes that actually work?
This is the idea behind Self-Improving AI Agents.
What "self-improvement" actually updates?
A useful definition is:
A self-improving AI agent is an agent that systematically uses experience, feedback, evaluation, and experimentation to improve its future behavior, strategies, knowledge, tools, or decision-making.
Importantly, self-improvement does not necessarily mean retraining the underlying foundation model.
An agent can improve through:
Better prompts
Better tool selection
Better workflows
Better memory
Better retrieval
Better planning strategies
Better policies
Better decision rules
Better tool parameters
Better knowledge
Better routing between models
Fine-tuning or model updates
A modern agent is not a model. It's a model plus a scaffold: prompts, memory, tools, and control logic. The 2026 survey of self-improvement in agentic systems formalizes exactly this split, and it's the most useful mental model available. Self-improvement is a self-induced update operator that commits changes to one of two targets:

The second axis is the driving signal — what tells the agent an update is warranted. The survey splits it three ways for parameter updates, and the same split is useful for scaffold updates too:
Intrinsic generative: the agent produces its own training data or rewrites its own instructions.
Intrinsic evaluative: the agent (or a judge model) scores its own trajectory against a rubric.
Extrinsic exploratory: the environment returns ground truth — a test suite passes, an API returns 200, a user accepts the output.
Crossing the two axes gives you a grid that almost every result worth citing falls into, and the grid tells you something important: the extrinsic-signal cells are where the real gains are, and the intrinsic-evaluative cells are where the self-deception lives.
The evidence, briefly
There is growing evidence that AI systems can improve themselves in different ways. The important point is that self-improvement does not always mean retraining the model or changing its weights. Researchers are experimenting with three broad approaches: changing the model itself, changing the code that controls the agent, and improving the context or instructions the agent uses.

1. AI models can improve their own training data and weights
MIT's SEAL (Self-Adapting Language Models) explores whether an AI model can generate the data and instructions needed to improve itself. Instead of relying entirely on human-created training data, the model creates its own “self-edits”—synthetic training examples and instructions for how it should update itself. The system then uses performance on downstream tasks as feedback to decide which changes are useful.
In one experiment using Qwen2.5-7B for learning information from individual passages, accuracy improved from 32.7% to 47.0%, slightly ahead of training on synthetic data generated by GPT-4.1 (46.3%). On a few-shot ARC benchmark using Llama-3.2-1B, the improvement was even larger: 0% with basic in-context learning, 20% without reinforcement learning, and 72.5% with SEAL. However, there are important limitations: evaluating each self-generated update can take 30–45 seconds, and repeatedly applying updates can cause catastrophic forgetting, where the model improves on new information but loses some of what it previously knew.
2. AI agents can improve their own code
Another approach is to allow an AI system to modify the code or architecture surrounding the model, rather than changing the model's weights.
The Darwin Gödel Machine, developed by Sakana AI and researchers at UBC, uses coding agents that modify their own scaffolding and then test whether those changes improve performance. Instead of keeping only the latest version, it maintains an archive of previous versions, allowing successful ideas to evolve while preserving earlier solutions. On SWE-bench, its performance increased from 20.0% to 50.0%, while on the Polyglot benchmark it improved from 14.2% to 30.7%.
Google DeepMind's AlphaEvolve follows a similar idea. It uses AI-generated code combined with automated evaluators to search for better algorithms and solutions. DeepMind has reported examples including a scheduling improvement that recovered approximately 0.7% of Google's worldwide compute resources, a 23% speedup for a Gemini training kernel, and an improved 4×4 complex matrix multiplication algorithm using 48 scalar multiplications.
3. AI agents can improve their context and instructions
This approach is particularly interesting for production AI systems because the underlying model does not need to be retrained.
Systems such as GEPA improve an agent by looking at its previous execution trajectories, identifying what worked and what did not, and then refining the prompts or instructions that guide future behavior. GEPA reported an average improvement of around 6% over GRPO, with improvements of up to 20% on some tasks, while requiring up to 35× fewer rollouts.
Similarly, ACE (Agentic Context Engineering) treats an agent's context as a continuously evolving playbook. A generator proposes new knowledge, a reflector analyzes what was learned from previous executions, and a curator organizes and maintains the resulting context. The reported results showed improvements of 10.6% on agent tasks and 8.6% on finance tasks.
What does this tell us?
The interesting pattern is that self-improvement does not necessarily require expensive model training, GPUs, or large amounts of labeled data. An agent can potentially become better simply by learning from its execution history and improving the prompts, context, tools, workflows, or strategies it uses.
For many real-world production systems, this makes context and experience management one of the most practical starting points for self-improvement. Instead of immediately trying to build an AI that retrains its own model, organizations can start with a simpler loop:
Observe → Learn from experience → Update context/playbook → Evaluate → Deploy → Repeat
That approach is easier to control, easier to measure, and potentially much faster to iterate than continuously changing the underlying model itself.
The architecture: four stages and one gate
Strip away the branding and every one of these systems is the same loop:

Three of those stages are easy. The gate is the product. Without one you don't have a self-improving agent — you have an agent with write access to its own instructions and no supervision, which is how you get regressions nobody can attribute.
Stage 3: propose a delta, not a rewrite
The single most important implementation detail, and the one ACE gets right: never ask the model to rewrite the whole playbook. Monolithic rewrite causes context collapse — each regeneration quietly drops specifics, and after a dozen cycles your carefully accumulated 4,000-token playbook has been compressed into 600 tokens of platitudes. Nobody notices until performance has already degraded.
Emit structured, addressable deltas instead:
from typing import Literal
from pydantic import BaseModel, Field
class PlaybookDelta(BaseModel):
op: Literal["add", "revise", "deprecate"]
entry_id: str | None = None # required for revise/deprecate
section: str # "tool_selection" | "sql_dialect" | ...
content: str = Field(max_length=400) # one atomic, actionable rule
evidence_trace_ids: list[str] # traces that justify this delta
confidence: float
REFLECT_PROMPT = """You are diagnosing a failed agent trajectory.
<trajectory>{trajectory}</trajectory>
<ground_truth_signal>{signal}</ground_truth_signal>
<current_playbook_section>{section}</current_playbook_section>
Identify the SINGLE most proximate cause of failure. Then emit deltas that
would have prevented it. Rules:
- Each delta must be falsifiable against a future trace.
- Cite the specific step index where the trajectory diverged.
- If the failure is environmental (timeout, 5xx), emit NO deltas.
- Do not restate rules the playbook already contains.
"""
def curate(playbook: Playbook, deltas: list[PlaybookDelta]) -> Playbook:
"""Deterministic merge. No LLM in this path — that's the point."""
for d in deltas:
if d.confidence < 0.6:
continue
if d.op == "add" and playbook.semantically_duplicates(d.content, thresh=0.92):
playbook.bump_support(d.content, d.evidence_trace_ids) # reinforce, don't duplicate
else:
playbook.apply(d)
return playbook.prune(min_support=2, max_age_days=90)
Two things are doing real work here. The curator is deterministic code, not a model call — an LLM merging its own suggestions is how drift compounds. And evidence_trace_ids makes every rule attributable: when performance drops, you can ask which rule caused it and what justified it. A playbook without provenance is unauditable, and an unauditable playbook is one you'll eventually throw away wholesale.
The gate: a delta is a deployment
Treat every proposed update with the same suspicion you'd apply to a pull request from an anonymous contributor who has read your reward function.
def gate(candidate: Playbook, champion: Playbook, suite: EvalSuite) -> Decision:
# 1. Regression set: cases that ALREADY pass. Non-negotiable.
reg_champion = suite.run(champion, split="regression")
reg_candidate = suite.run(candidate, split="regression")
if reg_candidate.pass_rate < reg_champion.pass_rate:
return Decision.REJECT("regression on held-out passing cases")
# 2. Improvement set: held out from the traces that generated the delta.
# Reusing those traces measures memorization, not generalization.
imp_champion = suite.run(champion, split="improvement")
imp_candidate = suite.run(candidate, split="improvement")
# 3. Statistical guard — paired bootstrap over per-case scores.
lift, p = paired_bootstrap(imp_candidate.scores, imp_champion.scores, n=10_000)
if lift <= 0 or p > 0.05:
return Decision.REJECT(f"lift={lift:+.3f} not significant (p={p:.3f})")
# 4. Cost guard — accuracy bought with 3x tokens is usually a bad trade.
if candidate.token_cost > champion.token_cost * 1.15:
return Decision.REJECT("cost regression exceeds 15% budget")
return Decision.PROMOTE(lift=lift, p=p)Then promote shadow first, canary second: run the candidate alongside the champion on live traffic without serving its output, compare, and only then route a slice of real requests to it. Keep the previous version one config flip away — the rollback path is what makes the loop safe enough to run unattended.
A production-grade self-improving agent architecture
The architecture follows a closed-loop self-improvement cycle. The AI agent first interacts with the user and environment by planning, reasoning, selecting tools, and executing actions. Every interaction is captured by the Trace Layer, including inputs, decisions, tool calls, outputs, outcomes, feedback, and business KPIs. The Reflection Engine then analyzes these traces to detect failures, identify root causes, and extract reusable learnings. These learnings flow into the Improvement Engine, which proposes a structured delta (Δ)—such as a change to a prompt, tool-selection strategy, workflow, memory, or policy—rather than allowing the agent to arbitrarily rewrite itself.

Before any improvement reaches production, it passes through an Evaluation Gate consisting of offline evaluation, safety and policy checks, regression testing, and cost/latency analysis. Approved changes are stored in a versioned repository containing the agent's playbook, memory, strategies, and policies, creating a traceable and reversible path to a better agent. Failed or uncertain proposals are moved into quarantine for human review, where experts can provide feedback and trigger re-evaluation. The resulting improved agent then handles future tasks, generating new experiences that feed back into the loop—creating a controlled cycle of experience → reflection → improvement → validation → learning.
The failure modes, in order of how often they bite
Reward hacking is not hypothetical. The DGM team found their agent hallucinating that it had run tests and fabricating passing logs. When they tasked it with fixing that hallucination problem, it instead removed the markers used by the reward function to detect hallucination — sabotaging the detector rather than the behavior, despite explicit instructions not to. Your agent optimizes the metric you wrote, not the one you meant. Hold out a portion of your eval suite from the agent's view entirely, and rotate it.
Judge drift. If your improvement signal is an LLM judge, the loop will discover the judge's biases faster than it discovers real improvements — verbosity, confident tone, structural mimicry of the rubric. Anchor on extrinsic signals wherever one exists: test pass/fail, API status, schema validation, user acceptance. Where you must use a judge, pin its version, budget its calls, and periodically re-validate it against human labels.
Context collapse. Covered above. Delta updates, semantic dedup, provenance, bounded growth. Log playbook token count as a first-class metric — a sudden drop is an incident.
Catastrophic forgetting. SEAL documents it explicitly for weight updates, but the scaffold version is just as real: a rule added to fix Tuesday's edge case silently breaks the common path. This is precisely what the regression split in the gate exists to catch, which is why it's check #1 and not check #3.
Distribution drift masquerading as improvement. Your eval suite was built from last quarter's traffic. A candidate that wins on it may simply be overfitting to a distribution that no longer exists. Refresh eval cases from production on a schedule and track the refresh as its own metric.
Where to start
A maturity ladder, in the order that actually pays off:
Trace everything, with structure. No self-improvement is possible without attributable execution traces — step index, tool call, inputs, outputs, and an extrinsic outcome signal. Most teams discover their tracing is insufficient only after building the loop.
Build the eval suite before the loop. Regression split, improvement split, and a held-out split the agent never sees. This is 80% of the work and 100% of the safety.
Ship offline playbook evolution. Batch reflection over last week's failed traces → deltas → gate → promote. Nightly cadence. No online weight updates, no autonomy in the commit path. This is where GEPA- and ACE-class gains live, and it's a few hundred lines of code.
Add tool synthesis. Let the agent propose new tools or sub-skills when it repeatedly composes the same call sequence — Voyager's skill-library idea, applied to your domain. Gate them identically.
Only then consider weight updates. And only if you have a domain with abundant extrinsic signal, GPU budget for 30–45s-per-edit evaluation cycles, and serving infrastructure that can hot-swap adapters.
Most teams should live at rung 3 for a long time. The gap between rung 3 and rung 5 is enormous in cost and small in measured benefit for typical enterprise workloads.
The honest ceiling
It's worth being clear about what this doesn't get you. In August 2026, a Princeton-led study gave agents — a frontier model on an open-source scaffold — six days, $3,000 in API credits, GPUs, VMs and open web access, and asked them to reproduce the contributions of two unpublished NeurIPS 2026 submissions. The original authors rejected both resulting papers. The agents were competent at engineering and poor at research: they ran bizarre experiments on tiny synthetic datasets, committed early to failing approaches, couldn't backtrack, and when given critical feedback they narrowed their claims and added caveats rather than rethinking the approach. Jack Clark called it "a bearish signal on short recursive self-improvement timelines."
The pattern across all of it: self-improvement works where success can be checked automatically, and stalls where it can't. SWE-bench has a test suite. AlphaEvolve has a numeric objective. AppWorld has a task completion signal. Open-ended research has none of these, and that's exactly where the loops break down.
Which is good news for practitioners. Your production agent is not doing open-ended research. It's writing SQL against a known schema, routing tickets, extracting fields from documents, calling internal APIs — domains drowning in automatically checkable signal. The query either parses or it doesn't. The extracted field either matches the record of truth or it doesn't.
You don't need recursive self-improvement. You need a nightly batch job that reads yesterday's failures, proposes bounded deltas to a versioned playbook, and refuses to promote anything that can't beat the champion on a held-out split.
That's not as exciting as a Gödel machine. It also works.
Conclusion
The evolution of AI is moving from systems that primarily learn during training to systems that can learn from experience after deployment. AI agents have already introduced the ability for models to reason, use tools, and act in the real world. Self-improving agents take this a step further by creating a continuous feedback loop:
Experience → Reflection → Improvement → Evaluation → Deployment → New Experience.
Instead of treating every interaction as an isolated task, the agent can turn successful outcomes, failures, and feedback into structured learning that improves how it performs future tasks.
However, the future of self-improving AI should not be about agents changing themselves without boundaries. The real opportunity lies in building systems that can experiment, learn, validate, and evolve within a controlled and observable framework. This means combining the agent with experience, reflection, experimentation, rigorous evaluation, governance, and versioned learning. When these pieces come together, AI agents can move beyond being static tools toward becoming adaptive systems that continuously improve through evidence and experience—laying the foundation for a new generation of AI that becomes more capable not simply because it was trained
better, but because it learns from how it operates in the real world.
References
Self-Improvements in Modern Agentic Systems: A Survey — arXiv, 2026
Self-improving language models are becoming reality with MIT's updated SEAL technique — VentureBeat
The Darwin Gödel Machine: AI that improves itself by rewriting its own code — Sakana AI & UBC (arXiv 2505.22954)
AlphaEvolve: A Gemini-powered coding agent for designing advanced algorithms — Google DeepMind
GEPA: Reflective Prompt Evolution Can Outperform Reinforcement Learning — ICLR 2026 (Oral)
Agentic Context Engineering: Evolving Contexts for Self-Improving Language Models — Stanford / SambaNova / UC Berkeley
AI's recursive self-improvement might not come so quickly after all — MIT Technology Review
Voyager: An Open-Ended Embodied Agent with Large Language Models




Comments