[Bug]: Cursor shell commands never stream live output
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 84/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- typescript
- Domain
- backend
Research direction
Start in packages/provider-cursor/src/server/adapter.ts: shellOutputText (~L1975) misses Cursor's protobuf oneof shape ({ case: 'stdout', value: { data } }), so shell-output-delta (~L2048) returns early and no command_output.delta is emitted. Reproduce with the five-line shell loop from the report and watch for deltas before completion. Done means stdout/stderr stream incrementally like Codex/Claude, checked with a provider streaming test.
Written by the indexing model from the issue text.
Description
Before submitting
- I searched existing issues and did not find a duplicate.
- I included enough detail to reproduce or investigate the problem.
Area
apps/server
Steps to reproduce
- Use the Cursor provider (
@cursor/sdk1.2.0) and start a turn. - Ask the agent to run a command that prints over several seconds, e.g.
for i in 1 2 3 4 5; do echo "tick $i"; sleep 2; done. - Expand the command row while the command is still running.
Expected behavior
Output appears incrementally while the command runs, the same way it does for Codex and Claude Agent. The expanded row should show tick 1, tick 2, … as they are printed.
Actual behavior
The expanded command row stays empty for the whole run. The complete output appears at once when the tool call finishes, so a long command looks hung.
This affects every Cursor shell command, including a real ~3 minute remote deploy where the whole log landed only at completion.
Impact
Major degradation or frequent failure
Version or commit
main @ cefb544af3 (also reproduced on 0.1.7-nightly.20261103.4119)
Environment
Linux, web client, Cursor provider via @cursor/sdk 1.2.0, default Cursor model, local mode.
Logs or stack traces
Redacted reproduction log. The command emits 5 lines over ~10s; T3 shows nothing until the end.
[12:00:00] INFO running command
[12:00:10] INFO command finished (5 lines of stdout)
# T3 UI while running: command row expanded, no output
# T3 UI after completion: all 5 lines appear at once
Root cause is in the adapter, not the transport. Cursor sends the delta as a protobuf oneof:
{ "case": "stdout", "value": { "data": "tick 1\n" } }
{ "case": "stderr", "value": { "data": "" } }
{ "case": "exit", "value": { "code": 0, "aborted": false } }
packages/provider-cursor/src/server/adapter.ts (shellOutputText, ~L1975) only looks at
event.text, event.output, event.data, event.stdout, event.stderr, event.chunk, so it
returns "". shell-output-delta (~L2048) then returns early at:
const chunk = shellOutputText(update.event);
if (chunk.length === 0) return;
So command_output.delta is never emitted for Cursor, while the final output still arrives through
the completion fallback in emitToolArtifacts (cursorToolOutputText(toolCall) || streamedOutput).
The SDK does stream live: @cursor/sdk dist/esm/336.js runs handleShellStream concurrently with
the tool call and sends one shellOutputDelta update per stdout/stderr chunk.
Workaround
Run the command outside T3 (terminal/ssh) and paste the result, or keep the row collapsed and wait
for the completion output.
- Dominant language
- TypeScript
- Stars
- 24.8k
- Forks
- 6.4k
- Avg merge
- 7h 39m
- Merged PRs (30d)
- 123
Getting set up
Starts the project's dev container in your browser, under your own GitHub account.
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from pingdotgg/t3code
-
[Bug]: ACP sign-in replaces the agent's error message with a generic onePossibly taken A pull request linked to this issue is open or already merged. Openbug needs-triage
Difficulty 1/5 Under an hour Newbie friendliness 85/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 1 day
-
[Bug]: iOS: typing a custom answer on a question card doesn't autocorrectPossibly taken A pull request linked to this issue is open or already merged. Open
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
Maintainers usually reply within 1 day
All issues in pingdotgg/t3code
Similar issues
-
Add: Yichang TVOpencheck:passed streams:add
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
Maintainers usually reply within 1 day
-
vtselect: data race in Tempo search tags APIs for invalid TraceQL queriesPossibly taken @Shubham19032004 claimed this today. Openbug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
VictoriaMetrics/VictoriaTraces#304 ·
Maintainers usually reply within 1 day
-
test: claim-conflict drop leaves both facts active and is never re-proposed (untested review cell)Open
Difficulty 2/5 1-3 hours Newbie friendliness 83/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
microsoft/vscode-pull-request-github#9159 ·
Maintainers usually reply within 1 day
-
[Feature]: Usage page should show API-equivalent cost and say when a connected plan shows info onlyOpenenhancement from-x
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
nightly-labs/openbot#4867 ·
Maintainers usually reply within 1 day