Add a non-blocking, async `ask_user` tool in addition to the blocking `ask_user`
- Lenguaje dominante
- Shell
- Estrellas
- 11.2k
- Forks
- 1.9k
- Merge medio
- 14 h 16 min
- PR fusionados (30 d)
- 6
Descripción
### Describe the feature or problem you'd like to solve
Instead of making every ask_user blocking, give instructions to the agent to do all it can without input and ask questions as they come up using a non-blocking request and have a tab (like Current/*Requests*/Sessions etc.) or queue (liked /queue where I can go into it and select a question to answer and when it is collapsed I see there is a queue near the text input) where I can take my time to do input and agent is not blocked while it waits for me.
### Proposed solution
Sometimes I want the AI to solve all the problems it can without waiting on input. Sometimes I give it a big green pasture and ask it to solve it and then leave for a few minutes come back and see its asking some clarifying question about a tiny edge case, but it's blocking progress. It can't build the basic service skeleton because it needs to know how to handle one specific edge case. I would rather it by default builds what it can without my input and can ask questions as it goes and they get queued up and I can answer them at my leisure. When it is done doing all it can, it should convert the async questions into blocking questions if it needs to, but as I get to them, I can answer them and it can keep working on any that have been answered. That said, sometimes it does need to present a blocking question if the answer will fundamentally change all subsequent parts.
I like this over Autopilot which just tells the Agent to pick whatever the crap it wants which somehow often includes doing something really stupid. But if I don't use Autopilot it feels like it needs me to hand hold it through every decision and it can't do anything on it's own until I give it a big pep talk and approve it's every concern.
### Example prompts or workflows
### Example: Building a new service
- Agent: does some work and realizes that there is a major ambiguity in one of the http methods
- Agent: [ask_user_async] "How do you want to resolve this issue? A or B or C?"
- Agent: keeps working on the other 95% of the service that is straightforward
- User: [sometime later] "Do option B"
- Agent: finishes whatever task it was on and sees the user has responded. Picks up option B work
### Example: When to use blocking/sync ask_user
- Agent: [ask_user (not async)] "Do you want to use framework A or framework B". This is a major architectural decision that blocks other decisions so it should not be done async
### Example: Building a game
- Agent: builds a few subsystems, has questions about how the next one interfaces with existing ones. Still has three other subsystems to implement
- Agent: [ask_user_async] "How do you want to handle inventory..."
- Agent: starts working on other subsystems and in one notices another issue about inventory
- Agent: [ask_user_async]: "And what about this case with the inventory"
- Agent: does all the work it can do without user input. Takes the queued messages and either rewrites as one ask_user or just converts most pressing one to be blocking ask_user. Latter is easier so let's assume that.
- User: responds to new blocking question
- Agent: starts working
- User: responds to second "queued" request
- Agent: finishes first and auto picks up second and eventually finishes everything.
### Additional context
I think its important that we help make it as easy as possible for AI to do what it safely can without needing to go full-blown autopilot or needing to always be present to nudge the agent along. I think some people want to use either of those options but most are probably in the middle. Giving more tools to the middle group will improve their experience. I can add custom instructions to tell the agent what it should consider blocking vs not and your instructions should just indicate that blockers get ask_user and non-blocking get ask_user_async.
Guía de contribución
Línea de trabajo
No files or tests are named. Start by locating the existing blocking `ask_user` tool and its request-handling entry point, then review how the proposed `ask_user_async` requests could appear in the queue or Requests/Sessions view. Done means async questions can be queued while work continues, answered later, and converted to blocking input when necessary.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- shell
- Área
- cli
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Activo
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100