Take over the composer area: draw your own lines there and receive every
key, until you call close().
This is the whole of glrs's input primitive, and it is deliberately the
only one. There was an ask, a select, a confirm and an input here,
which meant the core had an opinion about what a question looks like — a
234-line widget lived in the renderer for the sake of one tool, and the
"generic" helpers around it were parsing the JSON that tool returned to the
model. A coding agent's core does not need to know what asking is.
The bundled ask-user extension is a question widget written against
nothing but this. A picker, a form, a diff viewer are the same amount of
work, and none of them is privileged over yours.
Take over the composer area: draw your own lines there and receive every key, until you call close().
This is the whole of glrs's input primitive, and it is deliberately the only one. There was an
ask, aselect, aconfirmand aninputhere, which meant the core had an opinion about what a question looks like — a 234-line widget lived in the renderer for the sake of one tool, and the "generic" helpers around it were parsing the JSON that tool returned to the model. A coding agent's core does not need to know what asking is.The bundled
ask-userextension is a question widget written against nothing but this. A picker, a form, a diff viewer are the same amount of work, and none of them is privileged over yours.