When an agent reaches a decision it should not make alone (a force-push,
a spawn, provisioning infrastructure), it calls the sidecar's ask_human
tool, and that call blocks until someone answers. Minutes or hours. There
is no timeout after which it guesses.
The blocked call is a Question CR — visible to anyone with kubectl:
$ kubectl get questions
NAME SESSION QUESTION ANSWER
q-pr5qp s-x7k2f May I force-push the rebased branch? yes
q-8w6lw root …start a session in golang:1.26 (cpu 1) — allow? allow
Press a on the fleet screen (or tiny answer q-pr5qp yes) and two
things happen as one:
There is no privileged manager acting on approvals. The sidecar that raises questions can create Questions and update its own session's status, and that is all it can do. The approved action runs with the answering human's credentials or it does not run.
session_create from a session parks until you allow it;
approval materialises the child workload (spawning).enable_store; your answer provisions it and returns the wiring
command to the agent.ask_human first. That part is a convention the model follows; the
hard backstop is that the agent holds no credentials to go around you
with.Questions whose session is gone still show on the fleet screen as
(unattributed), so no decision waits invisibly.