github / github/copilot-cli

Add a non-blocking, async `ask_user` tool in addition to the blocking `ask_user`

Aberta
#4,879 0 comentários 0 reações 0 responsáveis Ver no GitHub
triage
Linguagem predominante
Shell
Estrelas
11.2k
Forks
1.9k
Merge médio
14h 16min
PRs com merge (30d)
6

Descrição

### 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.

Guia de contribuição

Abrir o guia de contribuição

Direção de pesquisa

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.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
shell
Domínio
cli
Tipo de issue
Funcionalidade
Dificuldade
5/5
Tempo estimado
Mais de uma semana
Status de atividade
Ativa
Clareza
Razoavelmente clara
Facilidade para iniciantes
35/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.