Feedback That Backfires: Why Small Language Model Agents Repeat the Call They Just Watched Fail
Organizations: Faculty of Computer Science and Mathematics University of Passau, Germany
Abstract
Agent harnesses record a failed tool call and its error message in the transcript and ask the model to continue, on the assumption that the error is corrective information. We measure whether it is. Defining the corrective gain of a failure record as the change in log-probability of re-emitting the action that just failed, we find the gain is negative for every instruction-tuned model we tested (6 checkpoints, 135M-1.7B, 4 families) in two environments: simulated tool calling and MBPP program repair. Normalised by action length the effect is about -1.03 nats per action token, a factor of 2.8 in the odds of each token, and holds on 90%-100% of individual items, not only on average. Over a fixed candidate set the probability of repeating the failed call rises from 0.06 to 0.54, and greedy decoding reproduces it token for token on 19% of items after the failure versus 0% before. Counterfactuals pairing the same call with a failure message, a success message, or a neutral acknowledgement separate two effects: the failed call's surface form accounts for 83% of the damage, while the semantic contribution of marking it failed is small and inconsistent in sign across environments. The problem is in the harness, not the model's grasp of error messages, and that predicts which remedies work. Replacing the verbatim call with a runtime-generated description of the failure removes 76% of the inversion at no token cost, and making previously-failed strings unreachable at the decoder acts on the same term. Two plausible remedies do not: an explicit "do not repeat" instruction leaves the measured quantity where it was, and deleting the failed attempt to retry from a clean context, the standard prescription for context contamination, is the worst harness we measured for repetition, because it restores the context that produced the failure. The study runs end to end on a CPU; all artefacts are released.
Figures & tables
| explicit failure signal | separates form from meaning | harness intervention | |
| Repetition / degeneration | no | no | decoding |
| ( 36 ; 9 ) | |||
| Negative instructions | n/a | no | prompt |
| ( 5 ) | |||
| Self-correction critiques | yes | no | prompt |
| ( 11 ; 25 ) |
| Environment | items | tasks | ops. | err. | action (chars) | obs. (chars) |
| ToolShed | 275 | 58 | 8 | 12 | 57 | 75 |
| CodeRepair | 266 | 132 | 10 | 4 | 198 | 150 |
| Model | Params | /token | copy | sem | ||
| SmolLM2-135M | 0.14B | −23.92 [−25.86, −22.09] | −1.21 [−1.36, −1.06] | 21.69 [19.54, 23.94] | 2.23 [1.59, 2.90] | −2.24 [−3.41, −1.05] |
| SmolLM2-360M | 0.36B | −18.62 [−21.00, −16.38] | −0.93 [−1.06, −0.79] | 16.08 [13.89, 18.43] | 2.54 [1.98, 3.16] | −3.23 [−4.24, −2.24] |
| Qwen2.5-0.5B | 0.49B | −13.91 [−16.12, −11.82] | −0.94 [−1.14, −0.75] | 9.91 [7.59, 12.25] | 4.00 [2.82, 5.28] | −2.86 [−3.71, −1.99] |
| Qwen3-0.6B | 0.60B | −21.50 [−25.07, −18.18] | −1.47 [−1.74, −1.21] | 18.25 [14.75, 21.95] | 2.78 [1.56, 3.96] | −6.60 [−8.07, −5.25] |
| Llama-3.2-1B | 1.24B | −12.41 [−15.71, −9.62] | −0.92 [−1.21, −0.66] | 9.42 [7.23, 11.91] | 3.26 [2.06, 4.62] | −5.46 [−7.49, −3.65] |
| SmolLM2-1.7B | 1.71B | −13.91 [−15.53, −12.35] | −0.71 [−0.81, −0.61] | 11.67 [10.37, 12.97] | 2.24 [1.44, 3.12] | −4.36 [−5.08, −3.57] |
| Model | Params | before | after | greedy before | greedy after | greedy abs. | |
| SmolLM2-135M | 0.14B | 0.142 [0.086, 0.201] | 0.875 [0.840, 0.910] | 0.733 [0.677, 0.789] | 0.000 [0.000, 0.000] | 0.430 [0.340, 0.519] | 0.000 [0.000, 0.000] |
| SmolLM2-360M | 0.36B | 0.117 [0.067, 0.170] | 0.753 [0.684, 0.820] | 0.637 [0.568, 0.708] | 0.000 [0.000, 0.000] | 0.410 [0.306, 0.521] | 0.020 [0.000, 0.050] |
| Qwen2.5-0.5B | 0.49B | 0.013 [0.004, 0.028] | 0.602 [0.528, 0.681] | 0.589 [0.516, 0.666] | 0.000 [0.000, 0.000] | 0.030 [0.000, 0.067] | 0.000 [0.000, 0.000] |
| Qwen3-0.6B | 0.60B | 0.006 [0.000, 0.014] | 0.296 [0.196, 0.399] | 0.290 [0.193, 0.393] | 0.000 [0.000, 0.000] | 0.000 [0.000, 0.000] | 0.000 [0.000, 0.000] |
| Llama-3.2-1B | 1.24B | 0.009 [0.000, 0.025] | 0.246 [0.136, 0.363] | 0.237 [0.131, 0.348] | 0.000 [0.000, 0.000] | 0.000 [0.000, 0.000] | 0.000 [0.000, 0.000] |
| SmolLM2-1.7B | 1.71B | 0.050 [0.021, 0.085] | 0.476 [0.393, 0.570] | 0.426 [0.353, 0.506] | 0.000 [0.000, 0.000] | 0.270 [0.174, 0.381] | 0.000 [0.000, 0.000] |
| Model | Params | frac. | margin | repair | copy ✓ | polarity |
| SmolLM2-135M | 0.14B | 1.00 [1.00, 1.00] | −12.58 [−14.34, −10.90] | 11.34 [10.21, 12.40] | 24.46 [22.57, 26.51] | −0.54 [−0.93, −0.15] |
| SmolLM2-360M | 0.36B | 1.00 [1.00, 1.00] | −12.23 [−14.11, −10.51] | 6.39 [4.86, 8.02] | 17.80 [15.59, 20.22] | 0.82 [0.20, 1.49] |
| Qwen2.5-0.5B | 0.49B | 0.90 [0.84, 0.95] | −15.16 [−17.71, −12.79] | −1.25 [−2.46, 0.03] | 11.01 [8.77, 13.37] | 2.90 [1.73, 4.08] |
| Qwen3-0.6B | 0.60B | 0.94 [0.88, 0.99] | −17.54 [−20.69, −14.61] | 3.96 [2.25, 5.75] | 21.03 [17.85, 24.38] | 0.47 [−0.41, 1.28] |
| Llama-3.2-1B | 1.24B | 1.00 [1.00, 1.00] | −9.60 [−12.31, −7.36] | 3.08 [1.20, 4.96] | 12.51 [9.39, 15.93] | 0.17 [−1.07, 1.30] |
| SmolLM2-1.7B | 1.71B | 1.00 [1.00, 1.00] | −11.61 [−13.39, −9.97] | 2.30 [1.09, 3.59] | 12.92 [11.48, 14.48] | 0.99 [0.59, 1.41] |
| Model | Params | /token | copy | sem | ||
| SmolLM2-135M | 0.14B | −82.61 [−93.89, −71.79] | −1.23 [−1.32, −1.14] | 84.00 [73.16, 95.33] | −1.39 [−1.88, −0.91] | 1.56 [0.93, 2.23] |
| SmolLM2-360M | 0.36B | −70.35 [−79.40, −61.71] | −1.09 [−1.19, −1.00] | 71.02 [62.08, 80.28] | −0.67 [−1.16, −0.19] | −0.80 [−1.23, −0.40] |
| Qwen2.5-0.5B | 0.49B | −67.68 [−76.71, −59.15] | −1.21 [−1.36, −1.08] | 69.50 [61.01, 78.50] | −1.82 [−2.48, −1.19] | −0.51 [−0.95, −0.08] |
| Harness variant | SmolLM2-135M | Qwen2.5-0.5B |
| terse error text | −0.32 [−0.72, 0.02] | −0.23 [−0.64, 0.20] |
| verbose error text | −0.09 [−0.32, 0.14] | −0.31 [−0.65, 0.02] |
| error quotes the failed call | 1.31 [1.12, 1.51] | 0.10 [−0.22, 0.44] |
| failure placed before the successful steps | −0.94 [−1.45, −0.48] | −0.82 [−1.36, −0.26] |
| + “do not repeat” instruction | 0.16 [0.06, 0.27] | −0.02 [−0.20, 0.15] |
| the same call failed twice | 3.06 [2.78, 3.36] | 3.61 [3.12, 4.08] |
| Qwen2.5-0.5B | |||
| Harness | success | exact rep. | canon. rep. |
| verbatim (standard) | 0.42 [0.21, 0.62] | 0.31 [0.15, 0.47] | 0.31 [0.15, 0.47] |
| + “do not repeat” | 0.58 [0.38, 0.79] | 0.24 [0.08, 0.42] | 0.24 [0.08, 0.42] |
| abstract | 0.33 [0.17, 0.54] | 0.16 [0.04, 0.31] | 0.16 [0.04, 0.31] |
| drop | 0.33 [0.17, 0.54] | 0.80 [0.79, 0.81] | 0.80 [0.79, 0.81] |
| verbatim + ban | 0.42 [0.21, 0.62] | 0.08 [0.00, 0.15] | 0.08 [0.00, 0.15] |
| Qwen2.5-0.5B | ||||
| Harness | gen | prompt | ctx/step | steps |
| verbatim (standard) | 67 | 2764 | 633 | 4 |
| + “do not repeat” | 47 | 2210 | 646 | 3 |
| abstract | 64 | 2602 | 616 | 4 |
| drop | 69 | 2587 | 586 | 4 |
| verbatim + ban | 69 | 2764 | 633 | 4 |
Appendix figures & tables4 assets
Supplementary material from the paper’s appendix.
Appendix
| Condition | What the transcript contains |
| pre | context before the attempt (baseline) |
| fail | attempt + error observation (standard ReAct harness) |
| succ | attempt + counterfactual success observation |
| neut | attempt + valence-free observation |
| neut_pad | attempt + valence-free observation, length-matched to ‘fail‘ |
| abstract | harness-generated failure description, no verbatim call |
| Operator | Reference call | Perturbed call | Error family |
| arg_typo | find_contact(name=’Dana Bergmann’) | find_contact(contact_name=’Dana Bergmann’) | unexpected_argument |
| date_format | list_events(date=’2026-09-19’) | list_events(date=’September 19, 2026’) | format_error |
| drop_arg | send_message(to=’[email protected]’, subject=’agenda’, body=’roadmap, hiring, i … | send_message(to=’[email protected]’, subject=’agenda’) | missing_argument |
| hallucinated_entity | find_contact(name=’Dana Bergmann’) | find_contact(name=’Alex Ramirez’) | contact_not_found |
| name_for_email | send_message(to=’[email protected]’, subject=’agenda’, body=’roadmap, hiring, i … | send_message(to=’Dana Bergmann’, subject=’agenda’, body=’roadmap, hiring, incident revie … | format_error |
| readonly_target | write_file(path=’reports/roster.md’, content=’Elena Okafor, Karim Okafor’) | write_file(path=’system/config.ini’, content=’Elena Okafor, Karim Okafor’) | permission_error |
| Error family | SmolLM2-135M | SmolLM2-360M | Qwen2.5-0.5B | Qwen3-0.6B | Llama-3.2-1B | SmolLM2-1.7B |
| permission_error | −44.4 [−47.0, −42.2] | −43.0 [−44.9, −41.3] | −37.9 [−42.4, −33.9] | −51.9 [−52.9, −51.1] | – | −30.1 [−33.1, −27.4] |
| contact_not_found | −34.4 [−36.4, −31.3] | −21.9 [−23.0, −20.5] | −27.8 [−30.9, −26.1] | – | – | −19.0 [−21.3, −17.5] |
| format_error | −22.9 [−24.5, −21.1] | −18.4 [−20.1, −16.9] | −15.1 [−17.8, −12.4] | −23.9 [−27.5, −19.9] | −14.7 [−18.2, −11.6] | −13.2 [−14.5, −12.1] |
| file_not_found | – | – | – | – | – | −16.9 [−18.7, −14.1] |
| event_not_found | −18.7 [−19.2, −18.4] | −13.0 [−13.7, −12.3] | −11.7 [−12.4, −11.2] | – | – | – |
| missing_argument | −17.3 [−20.2, −13.6] | −15.4 [−18.6, −11.5] | −10.4 [−12.0, −8.3] | −22.7 [−24.7, −19.3] | −9.0 [−15.0, −1.1] | −9.8 [−12.1, −7.2] |
| Model | Params | before | after | greedy before | greedy after | greedy abs. | |
| SmolLM2-135M | 0.14B | 0.111 [0.053, 0.180] | 0.951 [0.917, 0.978] | 0.840 [0.770, 0.901] | 0.000 [0.000, 0.000] | 0.000 [0.000, 0.000] | 0.000 [0.000, 0.000] |
| SmolLM2-360M | 0.36B | 0.089 [0.032, 0.156] | 0.856 [0.795, 0.910] | 0.767 [0.689, 0.840] | 0.000 [0.000, 0.000] | 0.100 [0.033, 0.183] | 0.000 [0.000, 0.000] |
| Qwen2.5-0.5B | 0.49B | 0.075 [0.023, 0.138] | 0.833 [0.766, 0.893] | 0.758 [0.680, 0.831] | 0.000 [0.000, 0.000] | 0.017 [0.000, 0.050] | 0.000 [0.000, 0.000] |
LLM Agents
Large language model agents use language models to plan, use tools, and act across multi-step tasks and environments.
See all 711 papers