# NousResearch/hermes-agent · Tool result content coerced to string for API compliance

## Open now

- 1 issue, 0 PRs open on GitHub.
- #48244: Dict tool results sent as raw JSON object → OpenAI-compatible providers reject (HTTP 400 / GLM 1210), exhausting fallback

Multiple fixes addressing a bug where tool/plugin results returned as dicts or non-string types were sent raw to OpenAI-compatible providers, causing HTTP 400 errors. Changes enforce that role=tool message content is serialized to a string before transmission.

## TL;DR

- 7 member(s): 1 open issue(s), 1 closed issue(s), 0 open PR(s), 1 merged PR(s), 4 PR(s) closed without merging.
- A fix was merged to main in PR #61787. Verify it addresses your case.
- **Recommended:** read PR #61787 (and any competing PRs below) before filing. Confirm the merged change covers your symptom.

## Maintainer resolution verdict

- Internal-tracker verdict over this cluster's issue members: `unresolved`. This is distinct from the fix status above. Weigh it yourself.

## How this cluster was grouped

- Link evidence (`STRUCTURAL_SPANNING`): every member is connected by structural evidence: shared changed files, or a closing/superseded reference.
- Pairwise link density `0.30`: the share of member pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36. `1.00` means every pair is linked.

## Open related issues

- #48244: Dict tool results sent as raw JSON object → OpenAI-compatible providers reject (HTTP 400 / GLM 1210), exhausting fallback

## Closed / duplicate issues

- #31435: tool message content must be string: plugin tools returning dict cause upstream 400 (Z.ai error 1210, OpenAI/Manifest fallback_exhausted)

## Prior & competing PRs

- **#31459: fix: coerce role=tool message content to string (workflow-engine + defensive sanitizer)**. closed without merge · fix tier `suggested`
  - maintainer direction: category `uncategorized`; implication `needs_llm`
- **#61787: fix(tools): enforce registry result contract**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`
  - files: `tests/tools/test_registry.py`, `tools/registry.py`
- **#31770: fix(agent): coerce tool-result content to string for OpenAI wire format**. closed without merge
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `f8361d29c8e2a2be6ba9ada32f1d694bf47a4b6a`, `#61787`
- **#48354: fix(agent): coerce non-string tool result content to JSON (#48244)**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `#31770`, `#48244`, `#31435`
- **#51671: fix(agent,cli): tool message spec compliance and callable entry point handling**. closed without merge
  - maintainer direction: category `volume_quota`; implication `active`; refs `#48244`

## Fix status

- Merged to main in PR #61787 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-07-10`.
- Subsystem: `agent`
