Skip to content

feat(v1): rlm harness builtin_tools passthrough - #2487

Draft
hallerite wants to merge 1 commit into
mainfrom
feat/rlm-builtin-tools
Draft

feat(v1): rlm harness builtin_tools passthrough#2487
hallerite wants to merge 1 commit into
mainfrom
feat/rlm-builtin-tools

Conversation

@hallerite

@hallerite hallerite commented Sep 1, 2026

Copy link
Copy Markdown
Member

Companion to nano-rlm's contract-tooling change (PrimeIntellect-ai/nano-rlm#164), which moves builtin tool selection out of RLM_TOOLING/RLM_BUILTIN_TOOLS env vars and into the ai.prime.rlm/runtime-v1 contract.

  • RLMHarnessConfig.builtin_tools: list[BuiltinTool] | None — the contract's builtin_tools. None (default) keeps rlm's ipython-only tool set and stays off the wire, so nano-rlm pins that predate the field keep validating; setting it requires a pin that understands it (nano-rlm#164 or later).
  • BuiltinSkill synced with nano-rlm main's builtins (bash, fetch added — the fetch skill+tool merged in nano-rlm#132).
  • disabled_tools rejection message updated (the tool set is no longer described as fixed).

Motivation: the fetch builtin tool is otherwise only reachable by smuggling env through harness.env, exactly the pattern nano-rlm#160 removes everywhere else. This also makes a clean fetch-as-skill vs fetch-as-tool A/B expressible purely in config.

Note

Add builtin_tools passthrough field to RLMHarnessConfig and expand BuiltinSkill set

  • Adds a new optional builtin_tools: list[BuiltinTool] | None field to RLMHarnessConfig; when set, it is included in the RLM runtime metadata payload, and when None the key is omitted for backward compatibility with older pins.
  • Introduces the BuiltinTool Literal type (bash, edit, fetch, ipython) and expands BuiltinSkill from edit/search to also include bash and fetch.
  • Updates the reject_disabled_tools validator error message to point users at builtin_tools and builtin_skills instead of claiming a fixed tool set.
  • Risk: configs that previously relied on the old fixed-tool-set error message wording will see a changed message; existing payloads are unaffected unless builtin_tools is explicitly set.

Macroscope summarized f6a75fb.

Companion to nano-rlm's contract-tooling change: the runtime contract gains
an optional builtin_tools list, so the harness exposes it as a typed field.
Sent on the wire only when set - pins that predate the field keep validating.
Also syncs the BuiltinSkill names with nano-rlm main (bash, fetch).
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.

1 participant