devagentic shipped a client-tier initiative preamble (NousResearch#315) as the preamble-layer response to the "model emits prose without invoking tool" reliability gap (NousResearch#314). That priming nudges the model toward tool-use, but it's still a soft signal — the model can ignore the preamble and emit prose anyway.
A complementary model-layer enforcement knob in hermes-agent would close the loop more strictly: when a session is in client-tier and tools are attached, set tool_choice: "required" on every dispatch by default.
Scope
Per-session env var or config flag (proposed: HERMES_TOOL_USE_ENFORCEMENT=required) that, when set:
- Forces
tool_choice: "required" on every llm call where the assembled prompt declares tools
- Composable with
default_tool_choice from devagentic's models.json (this would be a session-level override; devagentic's per-role default is the dispatcher-level)
- Operator-controlled — set in client-tier container env on boot, NOT in default hermes sessions where the operator may legitimately want free-form responses
Why hermes-side (not devagentic-side)
Per devagentic#203 §1.3, hermes owns the user-facing tool surface + per-model operational guidance. The model-call-shape decisions belong here, not at devagentic's dispatch boundary (which is concerned with role allocation + preamble injection, not per-call enforcement).
devagentic's models.json already declares default_tool_choice per role — but that's a dispatcher-tier default, not a session-tier override. The session-tier knob is missing and lives naturally in hermes.
Composition
- devagentic#315 (initiative preamble): tells the model what to do (invoke tools)
- This issue (tool_use_enforcement): tells the API how to constrain the model (force tool_calls when tools attached)
- Together: belt + suspenders for client-tier reliability
Sequencing
Land after devagentic#315 Phase 1 has deployed + been observed. If the preamble alone closes the reliability gap to operator satisfaction, this issue may not need to ship. If prose-without-tool-call incidents persist, ship this as the harder enforcement layer.
Owner
hermes-maintainer (per devagentic#203 §1.3 — hermes-side tool / completion semantics).
Cross-reference
- devagentic#315 (umbrella — preamble-layer response)
- devagentic#314 (parent reliability tracker)
🤖 Generated with Claude Code
Companion to devagentic#315 / NousResearch#314
devagentic shipped a client-tier initiative preamble (NousResearch#315) as the preamble-layer response to the "model emits prose without invoking tool" reliability gap (NousResearch#314). That priming nudges the model toward tool-use, but it's still a soft signal — the model can ignore the preamble and emit prose anyway.
A complementary model-layer enforcement knob in hermes-agent would close the loop more strictly: when a session is in client-tier and tools are attached, set
tool_choice: "required"on every dispatch by default.Scope
Per-session env var or config flag (proposed:
HERMES_TOOL_USE_ENFORCEMENT=required) that, when set:tool_choice: "required"on every llm call where the assembled prompt declares toolsdefault_tool_choicefrom devagentic's models.json (this would be a session-level override; devagentic's per-role default is the dispatcher-level)Why hermes-side (not devagentic-side)
Per devagentic#203 §1.3, hermes owns the user-facing tool surface + per-model operational guidance. The model-call-shape decisions belong here, not at devagentic's dispatch boundary (which is concerned with role allocation + preamble injection, not per-call enforcement).
devagentic's models.json already declares
default_tool_choiceper role — but that's a dispatcher-tier default, not a session-tier override. The session-tier knob is missing and lives naturally in hermes.Composition
Sequencing
Land after devagentic#315 Phase 1 has deployed + been observed. If the preamble alone closes the reliability gap to operator satisfaction, this issue may not need to ship. If prose-without-tool-call incidents persist, ship this as the harder enforcement layer.
Owner
hermes-maintainer (per devagentic#203 §1.3 — hermes-side tool / completion semantics).
Cross-reference
🤖 Generated with Claude Code