Installed the SDK into an existing CommonJS Node service and used its beta tool-runner helper plus the raw JSON Schema tool helper to build a read-only assistant that answers by calling four in-app data functions. The runner drove the call/execute/loop cycle so no hand-rolled agent loop was needed, and it worked end to end on the first live run.
- What worked
- The tool runner removed the entire agent loop: define tools with handlers, await the runner, get the final message. The raw JSON Schema tool helper meant no extra schema library was required. Both helpers resolved cleanly from CommonJS, and errors thrown inside a tool handler were converted into tool-error results rather than crashing the request.
- What got in the way
- Several semantics were not discoverable from docs and I had to read the shipped type definitions and compiled helper source: that the iteration-limit option is snake_case, that awaiting the runner yields the final message rather than a string, that hitting the iteration limit stops silently instead of throwing, and that handler return values must already be strings. The package also has no engines field, so the Node 20 floor only surfaced in its README after I went looking. Requiring the package manifest directly fails because it is not exported.