Skip to main content

How an agent asks you

When an agent needs a decision, it asks through one door. It must do its homework first and say what it recommends. The owner gets a link on WhatsApp and answers with one tap.

Where you see it​

A short message lands in the Approvals group on WhatsApp with a link. WhatsApp has no buttons, so the link opens a small page shaped to the question. The same question shows on the Office in three places: the desk card, a pop-up, and the Today card. All three are built from the same sentence by the box, so they always match.

What happens, step by step​

The four kinds of question:

KindWhat the owner sees
yes-noYes and No buttons
choiceOne button per option
openA text box
invite"Open its room" or "Not now"

Every kind also has a comment box.

Say Ada wants to hold the next workshop on the second Tuesday.

  1. Research first. Ada checks the room calendar and past turnout. A yes-no or choice question is refused at the door unless it names a recommended answer and gives reasons.
  2. The door checks the wording (see the rules below). If the question comes with a send, the door also tests that the send can work, in the same setup a yes will use, and refuses it if not. If it fails, the question is sent back.
  3. agent_ask.py (the ask door) saves the question as a row in the logbook and posts the link to WhatsApp.
  4. The owner taps Yes, and maybe types "but start at 6."
  5. The answer is written onto the row. One note drops into Ada's inbox.md. If the yes runs a send, it runs the send.
  6. If Ada asked to be woken by the answer, her next wake time is cleared. The 15-minute alarm clock starts her soon. If not, she reads it at her next planned wake.
  7. If nobody answers in 4 hours, the same link is emailed once. Never twice.
  8. No expiry. The question waits until it is answered or dismissed. Each link works only once.

A later send closes the old yes. If a send fails after a yes and goes out later, the question and the "yes" note in the agent's inbox are closed when it does. The agent does not send it a second time. Details are on Tap to approve.

Withdrawing a question. Sometimes the world answers first. The room gets booked by someone else, say. The agent can withdraw its own question and give the reason. If a question is tied to a plan step, and that step is marked done or dead, a sweep retires the question within 15 minutes.

The wording rules. These are checked by code at the door, not left to good manners:

  • Plain words only. No insider terms, no file names, no bare ID numbers.
  • Say what will actually happen in the world.
  • Include one line with the fact that led to the question.
  • Make sense on its own, for someone who forgot the project.
  • One decision per card. A yes-no question with "or," "versus," or "vs" in it is refused.
  • A head count like "14 people" is refused unless the list comes with it.
  • Every yes-no and choice question names which of the seven actions a yes allows. That is how the card can say "If you say yes, I do it myself" or "I draft it for you to send."

What powers it​

PartWhat it does
agent_ask.pyThe ask door. Checks the question, saves it, sends the WhatsApp link, and runs the 4-hour email nudge.
The asks tableOne row per question, in the logbook.
logbook.py ask newAgent-only. Creates a question.
logbook.py ask answerOwner-only. Refused inside an agent session.
inbox.mdWhere the answer reaches the agent.

Why it works this way​

Research first is a guard, not a hope

An agent that asks "What should I do?" hands its work back to the owner. Making a recommendation and reasons required at the door means every question arrives half-answered.

The wording rules came from real questions that were hard to answer. A question full of file names means nothing to a tired owner on a phone. "A or B?" dressed up as a yes-no question has no right answer to tap. A head count with no names cannot be checked.

Questions used to expire after about three days. That meant a question the owner meant to get to could vanish. Now they wait.

An agent can never answer its own question. The answer command refuses inside an agent session.

Connected to​