A text in the topic of a question answers it, and an agent may take its question back¶
- Status: accepted
- Date: 2026-11-08
Context¶
A question of an agent comes with two to four options as buttons (decision 0008). Three gaps showed in its first nights:
- When none of the options fits, such as neither: wait for the release of Paperless, the maintainer has no way to say so. A text in the topic of the question went to the control repository as any text in a topic, and Claude answered it, but the agent that waits never heard of it.
- An agent that no longer needs an answer, such as one whose
waitgave up after an hour and went on with a safe default, couldn't take its question back. Its buttons stayed, and the maintainer answered in the morning a question that nobody read any more. waitprinted any fileanswers/<id>.jsonthat it found, also one that answers an earlier question with the same id, when an agent asked again past the refusal ofask, such as withgh apialone.
Options¶
- A button Other that asks for a text in reply to a prompt, as ✏️ Edit does for a draft. It costs a press and a prompt before every own answer, and a fifth button beside four options.
- A text in the topic of an open question is its answer. The topic of a question holds nothing else, so a text there means the question; once it is answered or taken back, a text there is a text about a thing again, which goes to the control repository.
- Leave both to the report of the run, as before the pager asked. The agent would still wait for a question that it no longer needs.
Decision¶
Option 2, together with a body to take a question back and a time for wait:
- A text in the topic of an open question is saved in the same file as a press, with
choicenulland the text asanswer, so that the agent reads both alike, and its message shows Your answer, in your own words. It takes 1000 characters at most, as many as a question. The text gets 👍 once saved; a longer one, and one that GitHub refuses, get an answer in the topic, and the question stays open. A chat without topics has no topic of the question, so a text there stays a text for the control repository. - The control repository forwards the event
pager-withdrawof the maintainer as{"type": "withdraw", "id", "reason"}. An open question loses its buttons, its message says that the agent took it back, with the reason as its note, and its topic gets ✅. Nothing is saved onpager-answers: no one waits any more. An answered question keeps its answer (409), which the agent reads, and an id that the pager doesn't know is 404, both of which the workflow of the control repository logs without failing. A question taken back keeps its id used, as an answered one does. askofscripts/ask.mjsprints the time of its question, andwaitandanswertake it with--since, to ignore an answer that is older than the question, with a minute of leeway for the clock of the PC against that of the Worker.withdrawchecks for an answer first, so that an agent hears that its question was answered after all.
Consequences¶
The maintainer answers a question either way, without a button that says Other, and an agent reads one shape of answer: a choice that is null means his own words, which it reads as data, never as a command, as every answer. A question that he wants to ask about the question itself, such as what does option 2 mean?, is now its answer: he asks it in General instead, or answers in his own words what he would choose. An agent that gives up takes its question back, so the topics that wait for him are those that still matter. This replaces the last sentence of the consequences of decision 0008, which left an answer beside the options to a follow-up.