Skip to content

feat(v1): bump rlm pin to nano-rlm main, expose guardrail and role-append knobs - #2492

Merged
hallerite merged 1 commit into
mainfrom
feat/rlm-bump-main-and-guardrail-knobs
Sep 1, 2026
Merged

feat(v1): bump rlm pin to nano-rlm main, expose guardrail and role-append knobs#2492
hallerite merged 1 commit into
mainfrom
feat/rlm-bump-main-and-guardrail-knobs

Conversation

@hallerite

@hallerite hallerite commented Sep 1, 2026

Copy link
Copy Markdown
Member

Companion to the recently merged nano-rlm work. Two parts:

Pin bump: 4ef3438240090d

The new default picks up everything merged to nano-rlm main since the compaction pin:

New harness config knobs

knob maps to default
max_total_turns policy.max_total_turns None (uncapped)
max_total_tokens policy.max_total_tokens None (unbounded)
max_tool_output_bytes policy.max_tool_output_bytes None (rlm's 20KB)
max_concurrent_subagents policy.max_concurrent_subagents None → max(4, max_depth)
append_to_system_prompt contract root append (joined after the taskset system prompt) None
subagent_append_to_system_prompt contract node append None
leaf_append_to_system_prompt contract leaf append None
builtin_skills now also accepts "bash", "fetch" unchanged

Compatibility: the payload always carries the full field set of the runtime-v1 contract at the default pin (unset knobs go as explicit None), validated against nano-rlm's contract models. The harness was already unconditionally sending post-compaction fields, so the effective rule stays what it was: version must be at least the default ref — pinning older refs than the harness's contract era is unsupported.

Related: #2487 (builtin tools passthrough, RLM_BUILTIN_TOOLS) stays separate — this PR only widens the skills literal.

Note

Bump RLMHarnessConfig rlm pin to 240090d and add guardrail and prompt-append knobs

  • Bumps the default version from 4ef3438 to 240090d and expands BuiltinSkill to include "bash" and "fetch".
  • Adds optional config fields max_concurrent_subagents, max_total_turns, max_total_tokens, max_tool_output_bytes, and three append_to_system_prompt variants (global, subagent, leaf) with precedence/fallback semantics.
  • max_depth type changes from int (default 0) to Optional[NonNegativeInt] (default None): None defers to nano-rlm's default of 1, 0 disables recursion.
  • _runtime_metadata now conditionally includes policy keys only when configured and no longer forces max_concurrent_subagents to max(4, max_depth).
  • Risk: a new cross-field validator rejects configs where max_concurrent_subagents is set lower than max_depth; previous consumers relying on the hardcoded concurrent-subagent floor will now get nano-rlm defaults or None instead.

Macroscope summarized a201007.


Note

Medium Risk
Changes default recursion/concurrency behavior when configs omit fields, and wires new execution budgets into the nano-rlm runtime contract.

Overview
Bumps the default nano-rlm install ref from 4ef3438 to 240090d and widens builtin_skills to allow bash and fetch in addition to edit and search.

RLMHarnessConfig gains optional knobs that map into the runtime policy and prompt contract: tree-wide max_total_turns / max_total_tokens, per-tool max_tool_output_bytes, max_concurrent_subagents, plus root/sub-agent/leaf append_to_system_prompt fields. max_depth is now NonNegativeInt | None (unset defers to nano-rlm’s default instead of hard-coding 0), with validation that max_concurrent_subagentsmax_depth when both are set.

_runtime_metadata merges the taskset system prompt with append_to_system_prompt, forwards the new sub-agent/leaf append fields, and omits policy keys whose values are None so nano-rlm defaults apply—replacing the prior always-sent max_depth and computed max(4, max_depth) for concurrency.

Reviewed by Cursor Bugbot for commit a201007. Bugbot is set up for automated code reviews on this repo. Configure here.

@hallerite
hallerite marked this pull request as ready for review September 1, 2026 23:12
@hallerite
hallerite force-pushed the feat/rlm-bump-main-and-guardrail-knobs branch from 7fba627 to 8df93ad Compare September 1, 2026 23:14
Comment thread verifiers/v1/harnesses/rlm/harness.py
@macroscopeapp

macroscopeapp Bot commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This change alters the default RLM execution model by enabling nano-rlm’s recursive default and adds tree-wide budgets, tool limits, role-specific prompts, and new skills through an updated runtime dependency. An unresolved review finding also identifies configurations that can pass local validation but fail when the RLM session starts.

You can add or adjust custom eligibility rules. Learn more.

@hallerite
hallerite force-pushed the feat/rlm-bump-main-and-guardrail-knobs branch from 8df93ad to 973270c Compare September 1, 2026 23:24
Comment thread verifiers/v1/harnesses/rlm/harness.py
…pend knobs

Bumps the default nano-rlm ref from 4ef3438 to 240090d, picking up the
merged execution guardrails (#158) and role-aware sub-agent prompting
(#151 + #166), and exposes the matching harness config:

- max_total_turns / max_total_tokens: tree-total budgets (tokens counted
  as NEW work: completion + uncached prompt)
- max_tool_output_bytes: per-tool-result truncation override
- max_concurrent_subagents: overrides the max(4, max_depth) default
- append_to_system_prompt (joined after the taskset system prompt),
  subagent_append_to_system_prompt, leaf_append_to_system_prompt
- builtin_skills now accepts bash and fetch

Optional knobs go on the wire only when set, so older pins that predate
a field keep validating. Payload shapes (new-full and legacy-minimal)
validated against nano-rlm's runtime-v1 contract at the new pin.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@hallerite
hallerite force-pushed the feat/rlm-bump-main-and-guardrail-knobs branch from 973270c to a201007 Compare September 1, 2026 23:26
"""Git ref (branch, tag, or commit) of nano-rlm to install. Must know every
field this harness puts on the wire, i.e. be at least the default ref."""
max_depth: NonNegativeInt | None = None
"""Recursion depth RLM may spawn sub-agents to; `None` = nano-rlm's default (1).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we myb not spell out the actual default value so that this cannot diverge?

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit a201007. Configure here.

raise ValueError(
"`max_concurrent_subagents` must be at least `max_depth` "
"(nano-rlm rejects the policy otherwise)."
)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Concurrent default undershoots max depth

Medium Severity

When max_concurrent_subagents is left unset, the policy omits it and nano-rlm applies a fixed default of 4. That can be below max_depth, which nano-rlm rejects. The new validator only compares the two knobs when both are set, so this config is accepted and then fails at session start.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit a201007. Configure here.

@hallerite
hallerite merged commit 16deb7b into main Sep 1, 2026
13 checks passed
@hallerite
hallerite deleted the feat/rlm-bump-main-and-guardrail-knobs branch September 1, 2026 23:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants