Replies: 1 comment
-
|
I'm not sure this is the right approach, we already have a story for leveraging the CLI in server mode as part of the SDK, but currently it's a XOR: you can't both run the TUI and the SDK server. A lot of what you're describing would be possible by enabling both at the same time: run the CLI, it spins up an SDK server in the background in parallel with running the TUI. Inputs can either come in manually through the TUI or programmatically through the SDK. All the examples you're listing are things that could be accomplished with this, for example in the first scenario: The user could have a small app built around the SDK that runs in the background, it subscribes to the event stream. when it gets a All of this fits well within the event model we already have, no need to build a different protocol, just need to expose the existing one on top of the CLI. The main change from a CLI perspective is that there are a bunch of places where we manage the UI state locally/independently from the event stream (eg. there is no event to say to close an "ask" that we can emit) |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Enable Copilot CLI users to receive and respond to agent questions through channels beyond the terminal—Slack, SMS, email, mobile apps, or custom integrations. This unlocks unattended/background agent workflows where users aren't watching the terminal.
Problem Statement
Today, when Copilot CLI needs user input (clarifying questions, design decisions, approvals), it blocks and waits for terminal input. This works well for interactive sessions but breaks down in key scenarios:
User pain point: "I started a big refactoring task, went to lunch, came back and Copilot had been waiting 45 minutes for me to pick a database."
Target Users
User Scenarios
Scenario 1: The Coffee Break
Scenario 2: The Sandbox Agent
Scenario 3: The Approval Gate
Scenario 4: The Hybrid Response
User Experience
Configuration (One-time setup)
User adds a config file to their repo:
Minimal example:
{ "version": 1, "inputChannels": [ { "name": "my-slack-bot", "endpoint": "https://my-app.example.com/copilot/ask", "timeoutSec": 300 } ] }That's it. No code changes to Copilot, no feature flags, no special setup.
Runtime Behavior
When Copilot calls
ask_user:User-Visible Changes
Key Capabilities
Must Have (P0)
${VAR_NAME}in configShould Have (P1)
Nice to Have (P2)
Success Metrics
Non-Goals (Out of Scope)
Technical Constraints
.github/)Open Questions for Engineering
Appendix: Protocol Overview
External services implement a simple HTTP contract:
Request (CLI → Service):
{ "requestId": "uuid", "question": "Which database?", "choices": ["PostgreSQL", "MySQL"], "allowFreeform": true }Response (Service → CLI):
{ "status": "completed", "answer": "PostgreSQL", "wasFreeform": false }Or for async:
{ "status": "pending", "pollUrl": "/status/uuid" }Full protocol spec available in technical design doc.
Related Documents
Beta Was this translation helpful? Give feedback.
All reactions