Skip to content

[Bug]: Session hung forever after spawning subagents #2778

Description

@gustavodaltoe

Before submitting

  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.

Area

apps/desktop

Steps to reproduce

  1. Open a new T3Code session with Opencode provider and "Full access" mode
  2. Trigger a prompt like "Spawn a subagent to read the file ~/some-other-location-outside-your-project/some-file.md and create a summary". Note that the file must be outside of the current opened project on T3Code

Expected behavior

The sub agent should report back to the parent session without asking for any additional permissions during "Full access" mode

Actual behavior

Wait a few minutes and note that it will never complete the job or timeout after 300000ms

The parent thread gets hung after spawning an OpenCode subagent, but the real problem is that the child session is waiting on an external_directory permission prompt that never surfaces in the T3 Code UI.
In my case:

  • parent session: ses_1b3d21dc0ffeG71m1u2qNoSXlZ
  • child session: ses_1b3d19f6fffeIxa5icm1pIrpgt
    The parent looked idle, but OpenCode logs showed the child explorer session emitted multiple permission.asked events and never received a reply

Impact

Major degradation or frequent failure

Version or commit

0.0.25-nightly.20260515.295

Environment

macOS 26.5 + Opencode 1.15.7

Logs or stack traces

OpenCode log evidence:
File:
~/.local/share/opencode/log/2026-05-21T214152.log

Relevant lines:

539: permission=external_directory ... action={"permission":"external_directory","pattern":"*","action":"ask"} evaluated
540: id=per_e4c7d26b30014G4qEQzoAFEVfa ... asking
541: bus type=permission.asked publishing


and later again:

853: permission=external_directory ... action={"permission":"external_directory","pattern":"*","action":"ask"} evaluated
854: id=per_e4c81d383001nBa06Q0YSUvuij ... asking
855: bus type=permission.asked publishing


No corresponding permission.replied event was surfaced in the UI.
Eventually the session was canceled:

860-861: session.prompt ... cancel
862: error=Aborted process

Screenshots, recordings, or supporting files

No response

Workaround

Add the files that the agent has to access inside the same project so it can see them

Activity

  1. added
    bugSomething is broken or behaving incorrectly.
    needs-triageIssue needs maintainer review and initial categorization.
    on May 21, 2026
  2. added a commit that references this issue on Jun 1, 2026
  3. imadtg commented on Aug 26, 2026

    @imadtg

    Fresh reproduction of this failure on a current build, without a pending permission prompt.

    Environment:

    • T3 Code 0.0.34-nightly.20260826.1188
    • Linux x64
    • Background systemd web service
    • app.t3.codes paired to localhost on the same machine
    • OpenCode 1.18.21
    • OpenCode model opencode/x-preview-f-free

    Observed timeline (UTC):

    • 03:11:56 — parent turn started
    • 03:15:25 — one child/subagent session was created
    • 03:19:32 — child session received its final update
    • Parent and child then remained busy indefinitely
    • A follow-up message submitted at 04:23:17 remained pending behind the active turn

    Evidence:

    • OpenCode /session/status reported exactly two busy sessions: the affected parent and its child.
    • OpenCode /permission and /question both returned empty lists.
    • T3 Code had no pending approval records.
    • The native provider stream contained busy statuses and one retry, but no idle or session.error.
    • The T3 server, OpenCode process, SSE connection, and local web endpoint remained alive.
    • The user reported transient internet connectivity problems shortly before noticing the hang.

    The current OpenCode adapter ignores events whose session ID differs from the parent session before processing them. It also completes the parent turn only after receiving session.status = idle. There appears to be no timeout or reconciliation path when a child remains busy but stops producing events.

    This looks like the same overall failure as #2778, but it demonstrates that the child can wedge without an outstanding permission or question request.

    Recovery was possible without database writes: terminating only the dedicated opencode serve process caused T3 Code to mark the turn as error, transition the session to stopped, clear the queued pending turn, and preserve the thread history.

    Triage performed by Codex (GPT-5.6-SOL).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething is broken or behaving incorrectly.needs-triageIssue needs maintainer review and initial categorization.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions