[{"data":1,"prerenderedAt":4},["ShallowReactive",2],{"readme:rrsi":3},"\u003Ch1>RRSI: Regularized Recursive Self-Improvement of Agent Harnesses\u003C\u002Fh1>\n\u003Cp>Check out our \u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2609.24972\" rel=\"nofollow ugc noopener\">paper\u003C\u002Fa> and \u003Ca href=\"https:\u002F\u002Fregularized-rsi.com\u002F\" rel=\"nofollow ugc noopener\">project page\u003C\u002Fa> for more details.\u003C\u002Fp>\n\u003Ch2>🔥 Updates\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>[09\u002F21\u002F2026] Our \u003Ca href=\"https:\u002F\u002Farxiv.org\u002Fabs\u002F2609.24972\" rel=\"nofollow ugc noopener\">paper\u003C\u002Fa> is out! Check it out! \u003Ca href=\"https:\u002F\u002Fregularized-rsi.com\u002F\" rel=\"nofollow ugc noopener\">[project page]\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>🧬 Overview\u003C\u002Fh2>\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fgoogle-research\u002Frrsi\u002FHEAD\u002Fassets\u002Frrsi_overview.png\" width=\"92%\" alt=\"RRSI overview: proposal-side and selection-side regularization of the harness search\" \u002F>\n\u003C\u002Fp>\u003Cp>An LLM agent's capability is largely set by its harness: the prompts, control\nflow, tools, memory and context management around a frozen model. Evolving the\nharness against a fixed evolve set is effective but overfits: the harness\nmemorizes the training tasks, and large in-distribution gains shrink or vanish\nout of distribution. RRSI keeps the harness edit space open and regularizes the\nsearch trajectory through it instead.\u003C\u002Fp>\n\u003Cp>On the proposal side, an annealed budget caps how many independent edits one\ncandidate may bundle, the proposer is conditioned on the full edit history so a\nfalsified hypothesis is not redrawn, and a stalled run is redirected toward\ncomponents it has never exercised. On the selection side, a critic screens\nevery candidate for suite-specific logic before it is evaluated, a\nnoise-adjusted floor blocks gains within evaluation variance, a cost rule\nrequires added inference tokens to be paid for by measured gain, and\ncomponents that stop helping are pruned.\u003C\u002Fp>\n\u003Ch3>✨ Key features\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>Open edit space, regularized search.\u003C\u002Fstrong> Prompts, control flow, configuration, context management, tools, skills, memory and sub-agents may all be modified; the constraints act on how the search moves, not on what the harness may contain.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>One method, three instances.\u003C\u002Fstrong> The same loop drives a terminal agent (Terminal-Bench 2.1), a document-work agent (Harvey LAB) and an engineering-design agent (EngDesign); each instance is a \u003Ccode>Domain\u003C\u002Fcode> adapter plus its starting harness.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Candidates in git worktrees.\u003C\u002Fstrong> Every candidate harness is drafted, screened and evaluated in its own worktree on a branch off \u003Ccode>evolve\u002F&lt;domain&gt;\u003C\u002Fcode>; accepting one fast-forwards the branch, so the incumbent is always a commit.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Evidence you can audit.\u003C\u002Fstrong> The edit history records, per edit, the component, the hypothesis, the measured score and cost change and the verdict; the prompts the proposer, analyst and critic receive are plain files in \u003Ccode>domains\u002F&lt;name&gt;\u002F\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>🧩 Method to code\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Paper\u003C\u002Fth>\n\u003Cth>Code\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\u003Ctr>\n\u003Ctd>Empirical score and cost estimate\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>rrsi\u002Fevaluate.py: aggregate\u003C\u002Fcode> (weighted per-trial rewards; a missing trial counts 0 with the full denominator)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Annealed edit budget b_t\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>rrsi\u002Fschedule.py: edit_budget\u003C\u002Fcode>, enforced in the proposer's done()\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Edit history L_t, tried set T_t, recent yield g_t\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>rrsi\u002Fhistory.py: History\u003C\u002Fcode> (one JSONL record per edit; a = 1 only for the edits of the candidate that became H_{t+1})\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Stall flag, untried components, exploration directives\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>rrsi\u002Fhistory.py: stall_flag, exploration\u003C\u002Fcode>; reserved slots enforced in \u003Ccode>rrsi\u002Fpropose.py\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Analyze(H_t, D)\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>rrsi\u002Fanalyst.py\u003C\u002Fcode> dispatching \u003Ccode>rrsi\u002Fdigester.py\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Proposer with (component, hypothesis, diff) tags\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>rrsi\u002Fpropose.py\u003C\u002Fcode>; tags validated against the diff by \u003Ccode>rrsi\u002Fcomponents.py\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Critic (leakage screen before evaluation)\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>rrsi\u002Fcritic.py\u003C\u002Fcode> (domain regex denylist plus LLM review, bounded repair)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Evaluate in parallel\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>rrsi\u002Fevaluate.py\u003C\u002Fcode>, \u003Ccode>Run.round\u003C\u002Fcode> thread pool\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Noise-adjusted floor, cost rule, within-band rule, argmax\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>rrsi\u002Fselection.py\u003C\u002Fcode>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Novelty nu_t (structural component types never in a winning edit)\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>rrsi\u002Fcomponents.py: novelty\u003C\u002Fcode> over K_str = client_tool, skill, memory, subagent\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Prune set B_t\u003C\u002Ftd>\n\u003Ctd>\u003Ccode>History.prune_set\u003C\u002Fcode>, handed to the proposer with the accepted machinery to remove\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>Noise band delta\u003C\u002Ftd>\n\u003Ctd>fixed per instance in \u003Ccode>rrsi.json\u003C\u002Fcode> (0.017 \u002F 0.004 \u002F 0.020); \u003Ccode>rrsi\u002Fcalibrate.py\u003C\u002Fcode> re-estimates it when \u003Ccode>delta\u003C\u002Fcode> is \u003Ccode>null\u003C\u002Fcode> (bootstrap over trials of the b\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n",1791762985312]