Interrupted create_session still creates the session ~1.6 hours later, silently duplicating agent work
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Shell
- Star
- 11.2k
- Fork
- 1.9k
- Merge trung bình
- 14 giờ 16 phút
- Pull request đã merge (30 ngày)
- 6
Mô tả
Summary
A create_session tool call was reported to the agent as interrupted (never completed), but the session was actually created and auto-started its kickoff prompt 1 hour 38 minutes later. The agent had correctly treated the call as failed and done the work itself in the meantime, so the late-arriving session became a duplicate worker on the same task, in its own worktree, editing the same files.
The damaging part is not the latency - it is that a side-effecting, non-idempotent tool reported failure and then succeeded anyway, long after the agent had reasonably compensated for the failure.
Evidence from the session event log
Every external_tool.requested in the session has a matching external_tool.completed - except the second create_session, which has no completion event at all:
18:01:18 external_tool.requested create_session
18:01:44 external_tool.completed <- 26s, normal
18:02:44 external_tool.requested get_session
18:02:44 external_tool.completed
...
19:14:44 external_tool.requested create_session
<- no completion event, ever
21:04:41 external_tool.requested send_session_message
21:04:41 external_tool.completed
The agent-side tool call surfaced as:
The execution of this tool, or a previous tool was interrupted.
Meanwhile, in the created session's own event log:
20:53:18 session.start <- 1h38m after the 19:14:44 request
20:53:31 user.message <- kickoff prompt delivered and executed
So the request at 19:14:44 did eventually take effect at 20:53:18, with no completion ever reported back to the caller.
Impact
- Duplicated work. The agent, having been told the call was interrupted, performed the task itself. When the session finally materialised it began the identical task from the identical spec, producing two divergent branches for one issue. Cleaning that up required manually stopping the late session.
- Wasted model spend. The duplicate ran autonomously in autopilot until it was noticed and stopped.
- No way to detect it. There is no completion, no error, and no handle returned, so the caller has no id to poll and no signal that the request is still pending rather than dead. The only robust workaround an agent has is to poll an out-of-band source (worktree list / session list) after every interrupted side-effecting call - which is not discoverable.
Expected behaviour
Any of the following would resolve it, roughly in order of preference:
- Cancel the side effect when the tool call is interrupted. If the result cannot be delivered, the session should not be created.
- Return the handle even on interruption, so the caller can poll and either adopt or archive the session.
- Make the request idempotent via a caller-supplied key, so a retry cannot create a second session and a late delivery can be reconciled.
- At minimum, surface "still pending" distinctly from "failed", so an agent knows not to compensate.
Notes
- The first
create_sessionin the same session completed normally in 26s, so this is intermittent rather than systemic. - Both calls used
mode: autopilotwith a kickoff prompt,workspace_type: worktree. - Client reported itself as
github/autopilot. - Timestamps above are UTC, from a single continuous session on 2026-08-30.
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu bằng cách theo dõi vòng đời của create_session external_tool.requested và external_tool.completed xung quanh các lệnh gọi bị gián đoạn, sử dụng nhật ký sự kiện làm bằng chứng tái hiện. So sánh với create_session thành công đầu tiên và lệnh gọi send_session_message. Được coi là hoàn tất khi một request bị gián đoạn có tác động phụ được hủy, trả về một handle có thể sử dụng, được đối soát theo cách idempotent hoặc được báo cáo rõ ràng là đang chờ xử lý, thay vì âm thầm tạo một session.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- shell
- Lĩnh vực
- cli
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Sôi nổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 45/100