App tool schemas omit list_threads/read_thread maxima, causing deterministic retries

Open 💬 0 comments Opened Aug 23, 2026 by KoljaB

Version

Codex Desktop 26.818.41509, bundled command runner 0.149.0-alpha.4.1, Windows.

Problem

The app-hosted tool schemas expose numeric pagination parameters without machine-readable maxima:

  • list_threads.limit?: number
  • read_thread.turnLimit?: number

The descriptions say only "Maximum number..." but do not state the actual limits. The server then rejects:

  • list_threads({limit: 100}): maximum is 50
  • read_thread({turnLimit: 20, ...}): maximum is 10

An agent auditing task history has no schema signal that these otherwise reasonable values are invalid, so it spends a failed tool call and another model turn discovering each hidden contract.

Expected behavior

Publish the server constraints in the generated JSON Schema and prose:

  • list_threads.limit.maximum = 50
  • read_thread.turnLimit.maximum = 10

Include defaults/minima where applicable, and keep host validation and callable schema generated from the same source so they cannot drift.

Why this matters

These are deterministic, preventable failures. Complete schemas let the client/model choose a valid request on the first attempt and avoid retry-token amplification. No private task data or local paths are needed to reproduce.

View original on GitHub ↗