Skip to content

companion to devagentic#315: hermes-side tool_use_enforcement=required setting for client-tier sessions #115

@PowerCreek

Description

@PowerCreek

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:

  • 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions