Apply to my task
arXiv:2610.20926 ★ 85 Oct 14, 2026

SkillNEO: Evolving Agent Skills, Where a Lower-Scoring Version Can Become the Base of a Better One

Key result

The paradox: you shouldn’t throw away a lower-scoring skill version, because the best one often grows out of it. A skill is a folder with instructions and scripts that an agent reads before a task (Claude Code, Codex). The SkillNEO method lets you refine a skill automatically based on run logs, not a single final score. The trick: the production version and the version to keep refining are picked by two separate decisions. A weak model raised its own average score from 49% to 66%. The finished skills also helped stronger models with no extra refinement.

01

TL;DR

SkillNEO is a method for improving skills (a folder with SKILL.md, scripts and resources that an agent reads before a task). The agent runs the task many times, a separate “analyst” compares the run logs of different skill versions and figures out what works and what breaks. Then an “editor” revises the skill. The core idea is two separate decisions: which version the agent uses in production, and which version keeps getting refined.

Normally, an edit that didn’t raise the score gets tossed. But a hard fix often consists of several linked edits. The first might fix how input data is read while the output assembly is still broken. The overall score then doesn’t budge or even drops. “Keep only the best” selection kills these half-finished versions before they ever pay off. On top of that, a single overall score doesn’t tell you what exactly broke.

The method keeps lower-scoring versions in the refinement pool too, while the best verified version stays in production. Edits are chosen by comparing logs: parent and child show which edit changed what, and “siblings” show alternative fixes. As a result, a weak model raised its own average score from 49% to 66%, and the resulting skills also boosted stronger models with no extra refinement.

Want this for your own case? Apply this study to your task: AI adapts its method to what you are working on and writes the prompt.

02

Method Blueprint

STEP 0: Original skill = root of the version tree. 3 agent runs → scored by the checker (verifier)
LOOP (up to 5 generations):
  STEP 1: ANALYST compares saved logs (runs of one version against each other, parent↔child, “siblings”)
         → what works (keep) + what is unsolved (fix) + an edit proposal backed by evidence
  STEP 2: EDITOR applies the edit to the whole package (instructions + scripts + resources) → new child version
  STEP 3: FILE CHECK: file references intact, scripts in place, contents valid (otherwise → back to the editor)
  STEP 4: RUNS: 6 children → each runs once → the top 3 run twice more
  STEP 5: TWO SEPARATE DECISIONS:
         • production: replace the active version only if the child beats it on the mean of 3 runs
         • refinement: the current generation’s children, even if weaker than their parents
  STOP: two generations in a row without replacing the active version (HOLD) or 5 generations
  REVISIT: after HOLD you can go back to an older version and refine it using the new logs

This is a loop of separate runs driven by orchestrator code. You can’t reproduce all of it in a regular chat. But the principles of analysis (step 1) and editing (step 2) carry over into prompts.

03

Example

Where the method shines: you have an agent skill, a recurring routine task and a checkable result (the file reconciles or it doesn’t). Where it struggles: subjective quality like “looks good” or “sounds convincing.”

Task: an Amazon seller set up a Claude Code skill that reconciles the Amazon sales report against stock levels exported from QuickBooks. Version v1 reconciled in 1 run out of 3. In v2 a script for parsing the xlsx was added, and the result dropped to 0 out of 3. But the logs show the file is now read correctly; what fails is assembling the final table. You can’t throw v2 away, it’s half the fix. You feed the logs of both versions to the analyst.

Prompt:

<Role>Skill edit analyst. You don’t edit the skill; you find the causes of failures and propose one targeted edit.</Role>

<Input>
Parent skill v1: [paste SKILL.md and the v1 file list]
Child skill v2: [paste SKILL.md v2 and the parse_amazon.py script]
Logs of 3 v1 runs: [paste]
Logs of 3 v2 runs: [paste]
Success criterion: the final reconciliation table matches the Amazon report for every SKU, discrepancies exported to discrepancies.xlsx
Directions that already made things worse: [none]
</Input>

<Analysis>
1. Compare runs of the same version against each other: what is stable, what is random.
2. Compare v1 and v2: which change in the agent’s behavior is tied to which edit.
3. For each failed run, determine whether the agent never opened the skill, or opened it and made a mistake. In the first case, propose an edit to the skill description (when to use it). In the second, an edit to the procedure or the files.
4. List the suspected causes. Rank them by the number of failed runs each one explains. Check every cause against the successful runs.
5. Errors the agent recovered from on its own are not grounds for an edit.
</Analysis>

<Output>
- WORKS (keep): steps that are executed correctly, with evidence from the logs
- UNSOLVED: remaining failure causes, by rank
- EDIT: which parent version, what exactly to change, which runs show it
</Output>

<Constraints>
Do not propose directions from the “already made things worse” list.
One edit at a time. If it needs a new file, also specify the line in SKILL.md that calls it.
</Constraints>

Result: the analyst returns three blocks. The first lists what already works in v2 (most likely the xlsx parsing) and should be kept. The second gives the ranked causes of the remaining failures, with references to specific runs. The third is one targeted edit with the parent named. In your next message you hand the edit to the editor (template below), then run the agent 3 more times and compare the averages.

04

Why It Works

The weakness: the final score is a blunt metric. It doesn’t show which steps in the procedure are already right, and it cuts off versions where only part of the problem is fixed. If you demand improvement immediately, a chain of several linked edits snaps at the first one.

The LLM’s strength: a model is good at reading and cross-referencing long texts. Give it two logs of the same task and it will spot the step where they diverged. That tells you far more than the number “0.33.”

How the method exploits this: it stores versions together with their logs. That way every version, even a weak one, has both a starting point for an edit and evidence of what to fix. Two tricks from the paper are useful on their own: - The agent didn’t open the skill vs. opened it and messed up. These are different diseases. In the first case you fix the description so the agent knows when the skill is needed. In the second, you fix the procedure itself. - Ranking causes by the number of failures they explain, then checking them against successful runs. That way you don’t “fix” something that looks exactly the same in the successful runs.

Control knobs: - Runs per version (3 in the paper) → fewer for cheap tasks, more for “noisy” ones. - Children per generation (6) and top candidates for re-checking (3) → wider search or lower cost. - Stopping rule (2 in a row with no improvement, max 5 generations) → tune to your budget. - The “already made it worse” list in the analyst → keeps it from going in circles. - The criterion for replacing the production version → a strict one (only if the mean score is higher) protects against lucky flukes.

05

Prompt Template

The paper puts the full prompt text in Appendix B, which isn’t in the part we reviewed. Below is a template assembled from the Analyst (Proposer) and Editor (Skill Editor) instructions described in Section 3.3. The analyst in the template is the same as in the example above, just with placeholders.

<Role>Skill edit analyst. You don’t edit the skill; you find the causes of failures and propose one targeted edit.</Role>

<Input>
Parent skill: {parent_skill}
Child skill (if any): {child_skill}
Parent run logs: {parent_logs}
Child run logs: {child_logs}
Success criterion: {success_criterion}
Directions that already made results worse: {failed_directions}
</Input>

<Analysis>
1. Compare runs of the same version against each other: what is stable, what is random.
2. Compare parent and child: which change in behavior is tied to which edit.
3. For each failure: did the agent not open the skill, or open it and make a mistake? The first → edit the skill description. The second → edit the procedure and files.
4. Rank causes by the number of failed runs they explain. Check each one against the successful runs.
5. Errors the agent recovered from on its own are not grounds for an edit.
</Analysis>

<Output>
WORKS (keep): ...
UNSOLVED (by rank): ...
EDIT: parent, what to change, evidence from the logs
</Output>

<Constraints>
Do not repeat directions from {failed_directions}.
One edit at a time.
</Constraints>

Second step, in a separate message or a different session:

<Role>Skill editor. You turn a proposed edit into a complete new version of the skill.</Role>

<Input>
Parent skill (in full): {parent_skill}
Proposed edit: {analyst_edit}
Another version you can borrow a procedure from (optional): {donor}
</Input>

<Rules>
1. The parent stays untouched. Output the new version in full.
2. Keep everything unrelated to the edit exactly as it is.
3. If the edit requires linked changes (a script + the line in SKILL.md that calls it), make them together.
4. You may rewrite, add, delete or reorganize files. You may carry over a procedure from the donor.
5. Before output, check: every referenced file exists, scripts are in place, the SKILL.md structure is intact.
</Rules>

🚀 Quick start — paste this into the chat:

Here is the SkillNEO template (edit analyst + skill editor). Adapt it to my task: [describe the task and the skill]. 
Ask me questions to fill in the fields.

[paste the template above]

The LLM will ask what your success criterion looks like and how you check the result, which skill versions and logs you have, and which edits you’ve already tried. These fields matter because the method is built on comparing logs and on a list of failed directions. The model will take the structure from the template and fit it to your skill.

06

Limitations

⚠️ You need an automatic checker: in the paper, every task has a verifier that outputs a score. Without a clear “reconciles / doesn’t reconcile” criterion, there’s nothing to compare versions by. The method doesn’t fit subjective results.

⚠️ You need code: the full loop is an orchestrator with a version tree, dozens of agent runs and automated file checks. In a regular chat you can only reproduce the log analysis and the editing, not the version selection itself.

⚠️ Development and final evaluation on the same tasks: the skills are optimized for specific tasks and inputs. The authors didn’t test transfer to new data. Part of the gain may be overfitting to the test.

⚠️ Only some skills improved: out of 86 tasks, modified skills came out for 41; the other 45 stayed as they were. For strong models the overall gain is noticeably more modest than for the weak one, and on some tasks results got worse.

⚠️ A skill doesn’t guarantee requirements are met: the paper has examples where, even after refinement, the agent never checked a critical condition. For instance, it didn’t verify that the emergency mode was ever triggered at all.

⚠️ One model ran the entire evolution: all roles (executor, analyst, editor) were played by GPT-5.4 Mini. What happens if those roles go to other models wasn’t tested. The appendix isn’t in the available text, so the full prompts and exact stopping rules aren’t visible.

07

Resources

SkillNEO: Non-Elitist Evolutionary Optimization of Agent Skills (preprint). Authors: Enze Ma, Chunyu Miao, Yankai Chen, Jie Yang, Liancheng Fang, Kening Zheng, Hanrong Zhang, Muyao Xu, Xinle Yu, Chengze Li, Wei-Chieh Huang, Ziwei Ren, Yunhao Du, Zhixiang Shen, Xue Liu, Philip S. Yu, Zhen Wang. Affiliations: University of Illinois at Chicago, Mohamed bin Zayed University of Artificial Intelligence, UC San Diego, UCLA, University of Texas at Arlington.

Benchmark: SkillsBench 1.1 (Li et al., 2026), 86 professional tasks across eight domains. Published trajectories: github.com/benchflow-ai/skillsbench-trajectories. Related methods: EvoSkill, MetaSkill-Evolve, BONSAI, DIVE, GEPA, Trace2Skill, SkillAudit.

Research digest

Key result

The paradox: you shouldn’t throw away a lower-scoring skill version, because the best one often grows out of it. A skill is a folder with instructions and scripts that an agent reads before a task (Claude Code, Codex). The SkillNEO method lets you refine a skill automatically based on run logs, not a single final score. The trick: the production version and the version to keep refining are picked by two separate decisions. A weak model raised its own average score from 49% to 66%. The finished skills also helped stronger models with no extra refinement.

Principle

Usually, if an edit didn’t raise the score, it goes in the trash. But a hard fix is made of several linked edits. The first edit fixes file reading, while table assembly is still broken. Score: 0 out of 3. “Keep only the best” selection kills that version before it ever works. It’s like a draft where one chapter out of five came out great. You don’t throw out the whole book. How the loop works: 1. The analyst compares saved logs: runs of one version, parent and child, “siblings.” It writes down what works and what’s unsolved, and proposes one edit. 2. The editor applies the edit to the whole package (instructions, scripts, resources) and produces a new version. 3. File check: references intact, scripts in place. 4. Runs: 6 children once each, the top 3 twice more each. 5. Two decisions: the best by mean of 3 runs stays in production, while all children of the generation go into refinement, even those weaker than their parents. Stop: two generations in a row without replacing the production version, or 5 generations. After stopping, you can go back to an older version and refine it using the new logs.

Why it works

The final score is a blunt metric. “0.33” doesn’t say which steps are already right. But a model is good at reading and cross-referencing two logs of the same task. It sees the step where they diverged. The score says “bad,” the log comparison says “right here”. Two tricks from the paper are useful even on their own: - The agent didn’t open the skill, or opened it and messed up. These are different diseases. In the first case you fix the skill description (when to use it). In the second you fix the procedure itself. - Causes are ranked by the number of failures they explain. Then they’re checked against successful runs. That way you don’t “fix” something that looks the same in the good runs. Errors the agent recovered from on its own don’t count. Now the fly in the ointment. Out of 86 tasks, modified skills came out for only 41. For strong models the gain is more modest, and on some tasks results got worse. The skills were developed and evaluated on the same tasks, so part of the gain may be overfitting.

When to apply

Agents with skills (Claude Code, Codex, instruction files) → a recurring task where the result is checked automatically: the file reconciles or it doesn’t. Especially when a new skill version scored 0 out of 3, but the logs show part of the problem is fixed. NOT a fit for subjective quality like “looks good” or “sounds convincing”: there’s nothing to compare versions by. The full loop with a version tree and dozens of runs requires code. In a regular chat you can only reproduce the log analysis and the editing.

Mini recipe

1. Set up a version tree: store every skill version alongside the logs of its 3 runs. Without logs the method doesn’t work. 2. Define the checker: you need a clear “reconciles / doesn’t reconcile” criterion, ideally a script. 3. Call the analyst: give it the parent and child logs. Let it find what works and what’s still broken. 4. Tell the diseases apart: for each failure, ask whether the agent opened the skill. Didn’t open it — fix the `description`. Opened it and messed up — fix the procedure. 5. Rank the causes: the one that explains more failures goes higher. Check it against the successful runs. 6. One edit at a time: the editor makes linked changes together, the script and the line in SKILL.md that calls it. 7. Keep an “already made it worse” list: so the analyst doesn’t go in circles. 8. Be strict about swapping the production version: only if the mean score over 3 runs is higher. Don’t throw away the weaker child, though — keep it for refinement.

Examples

[BAD]: `v2 scored 0 out of 3, worse than v1. Roll the skill back to v1 and try something else.` [GOOD]: `Here are SKILL.md and the logs of 3 v1 runs, then SKILL.md, the parse_amazon.py script and the logs of 3 v2 runs. Success criterion: the reconciliation table matches the Amazon report for every SKU. Find what already works in v2 and should be kept. For each failure, tell me: did the agent not open the skill, or open it and make a mistake. Propose one edit and point to the runs where it shows.` What you get: the analyst will say the xlsx parsing in v2 is already correct and should be kept. The final table assembly is what fails, and it will give you a targeted edit. Half the fix isn’t lost. [BAD]: `The skill isn’t helping, rewrite it from scratch.` [GOOD]: `In 2 of 3 failed runs the agent never opened the skill at all. Rewrite only the description so it’s clear when to use the skill. Don’t touch the procedure in the body.`

In plain words

Most people try to tune AI agents by brute-forcing prompts and binning anything that doesn’t deliver an instant bump. SkillNEO breaks that habit: it optimizes not a single line but an entire agent skill — a working folder with a SKILL.md file, scripts and knowledge bases. The real breakthrough is ditching the cult of metrics: the final score often lies and buries great ideas halfway, when the agent has fixed a hard chunk of logic but temporarily fumbled some basic detail.

It’s like doing a full engine rebuild: while you’re swapping the pistons, the car won’t even start. By the logic of classic tests, that car should go straight to the scrapyard, because the result is now worse than before. Standard methods demand wins right here, right now, while SkillNEO simply keeps a stable version in production and calmly finishes the risky draft back in the garage.

Instead of blind selection, the method brings in a division of labor: a dedicated analyst picks the run logs apart line by line to pin down the specific failure, and an editor rewrites the instructions surgically. Meanwhile the system makes two separate decisions: what to ship to the user right now, and which rough but promising branch to keep working on in the lab. That way a long chain of tricky edits doesn’t snap at the very first failed test.

The authors tested the approach on scripts and code, but the principle is universal. It’s a perfect fit for any routine with a pass/fail check: data parsing, spreadsheet conversion, report validation — anywhere the result either matches the reference or doesn’t. Just don’t throw it at grading “beautiful, heartfelt writing”: subjective vibes-based judging will kill the analyst on the first lap.

Bottom line: stop judging agents by the crude final score and rolling back changes over small dips. SkillNEO shows that non-elitist evolution cracks tasks where standard prompt engineering just spins its wheels. Separate production from your test range, point the agent at its own logs, and give the model permission to flop for a while on the way to a breakthrough.

AI lab assistant

Apply this study to your task

Describe what you're working on. AI takes the method and the measured results from this paper and adapts them to your case, or writes a ready prompt built on them.

Based on SkillNEO: Evolving Agent Skills, Where a Lower-Scoring Version Can Become the Base of a Better One arXiv:2610.20926

Sign in to apply this study New accounts get 50 free credits.