Skip to content

opencode web: child session created with ?directory= returns empty body on POST /session/{id}/message #12271

@maou-shonen

Description

@maou-shonen

Bug Description

In opencode web mode, child sessions created via POST /session?directory=/path return HTTP 200 with Content-Length: 0 (empty body) on subsequent POST /session/{id}/message calls. Child sessions created without the directory query parameter work correctly.

Environment

  • OpenCode: 1.1.51
  • Mode: opencode web
  • Platform: Linux x86_64

Steps to Reproduce

AUTH="Basic $(echo -n 'opencode:<password>' | base64)"
PARENT="<any_existing_session_id>"

# 1. Create child session WITH directory
CHILD=$(curl -s -H "Authorization: $AUTH" -H "Content-Type: application/json" \
  -X POST "http://localhost:4096/session?directory=/home/user/project" \
  -d "{\"parentID\": \"$PARENT\"}")
CHILD_ID=$(echo $CHILD | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")

# 2. Send prompt — returns empty body
curl -v -H "Authorization: $AUTH" -H "Content-Type: application/json" \
  -X POST "http://localhost:4096/session/$CHILD_ID/message" \
  -d '{"agent":"sisyphus-junior","parts":[{"type":"text","text":"hello"}]}'
# → HTTP 200, Content-Length: 0, empty body

Comparison: Without directory

# Create child session WITHOUT directory
CHILD2=$(curl -s -H "Authorization: $AUTH" -H "Content-Type: application/json" \
  -X POST "http://localhost:4096/session" \
  -d "{\"parentID\": \"$PARENT\"}")
CHILD2_ID=$(echo $CHILD2 | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")

# Send prompt — returns full response
curl -s -H "Authorization: $AUTH" -H "Content-Type: application/json" \
  -X POST "http://localhost:4096/session/$CHILD2_ID/message" \
  -d '{"agent":"sisyphus-junior","parts":[{"type":"text","text":"hello"}]}'
# → HTTP 200, body = 1261 bytes (valid JSON)

Controlled Experiment Results

Only variable changed is the directory parameter. Everything else (parent session, prompt body, auth) is identical:

POST /session                              → prompt ✅ body=1261 bytes
POST /session?directory=/home/user/project → prompt ❌ body=0 bytes
POST /session?directory=/home/user         → prompt ❌ body=0 bytes

Impact

The oh-my-opencode plugin passes directory when creating subagent sessions to ensure subagents operate in the correct project directory. This bug causes delegate_task (and call_omo_agent, look_at) to fail 100% of the time in opencode web mode. TUI mode is unaffected (presumably uses in-process transport rather than HTTP).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions