Description
I'm using OpenCode Desktop (i.e. the GUI version), and the plugin shows up in the plugin list after configuring it in the configuration file. However, when asking the agent to use PTY background sessions, it tells me that there are no pty_* tools available, and looking at the raw request, there are really no PTY tools contained in the API request.
Reproduction Steps
Steps to reproduce the behavior:
- Configure plugin in opencode.json
- Run OpenCode Desktop
- Ask an agent to use PTY background sessions
- Agent responds that there are no PTY tools, but they could use
bash
Expected Behavior
Agent sees and uses PTY background sessions in OpenCode Desktop just as it does in OpenCode's TUI
Actual Behavior
Agent doesn't see any PTY plugin tools at all
Environment
- OS: Fedora 44
- OpenCode Version: OpenCode Desktop v1.18.32
- Plugin Version: 0.4.0
- Bun Version:
bash: bun: Command not found...
OpenCode Configuration
opencode.json (sanitized)
{
"$schema": "https://opencode.ai/config.json",
"logLevel": "DEBUG",
"disabled_providers": [
"opencode"
],
"plugin": [
"opencode-acp@stable",
"oh-my-opencode-slim@latest",
"opencode-handoff@latest",
"opencode-pty@0.4.0",
"opencode-update-notifier@latest"
],
"share": "disabled",
"small_model": "deepseek-v4-flash",
"subagent_depth": 2,
"provider": {
// ...
},
"mcp": {
"semble": {
"type": "local",
"command": [
"uvx",
"--from",
"semble[mcp]",
"semble",
"--content",
"all"
]
},
// ...
},
"compaction": {
"auto": false
},
"experimental": {
"disable_paste_summary": true
}
}
Debug Logs
Click to expand debug logs
To get debug logs, run OpenCode with debug logging enabled:
opencode --log-level DEBUG --print-logs
Or check log files in ~/.local/share/opencode/logs/.
timestamp=2026-09-22T14:03:55.728Z level=INFO run=1f7fd832 message=loading path=/home/user/.config/opencode/config.json
timestamp=2026-09-22T14:03:55.730Z level=INFO run=1f7fd832 message="creating instance" directory=/home/user
timestamp=2026-09-22T14:03:55.730Z level=INFO run=1f7fd832 message=fromDirectory directory=/home/user
timestamp=2026-09-22T14:03:55.731Z level=INFO run=1f7fd832 message=loading path=/home/user/.config/opencode/opencode.json
timestamp=2026-09-22T14:03:55.731Z level=INFO run=1f7fd832 message=loading path=/home/user/.config/opencode/opencode.jsonc
timestamp=2026-09-22T14:03:55.733Z level=INFO run=1f7fd832 message="global event connected"
timestamp=2026-09-22T14:03:55.741Z level=INFO run=1f7fd832 message=bootstrapping directory=/home/user
timestamp=2026-09-22T14:03:55.823Z level=INFO run=1f7fd832 message="creating instance" directory=/mnt/files/projects/project1
timestamp=2026-09-22T14:03:55.823Z level=INFO run=1f7fd832 message=fromDirectory directory=/mnt/files/projects/project1
timestamp=2026-09-22T14:03:56.348Z level=INFO run=1f7fd832 message="all LSPs are disabled"
timestamp=2026-09-22T14:03:56.349Z level=INFO run=1f7fd832 message="all formatters are disabled"
timestamp=2026-09-22T14:03:56.349Z level=INFO run=1f7fd832 message=init
timestamp=2026-09-22T14:03:56.647Z level=INFO run=1f7fd832 message=bootstrapping directory=/mnt/files/projects/project1
timestamp=2026-09-22T14:03:56.653Z level=INFO run=1f7fd832 message=loading path=/mnt/files/projects/project1/.opencode/opencode.json
timestamp=2026-09-22T14:03:56.653Z level=INFO run=1f7fd832 message=loading path=/mnt/files/projects/project1/.opencode/opencode.jsonc
timestamp=2026-09-22T14:03:57.096Z level=INFO run=1f7fd832 message="all LSPs are disabled"
timestamp=2026-09-22T14:03:57.096Z level=INFO run=1f7fd832 message="all formatters are disabled"
timestamp=2026-09-22T14:03:57.096Z level=INFO run=1f7fd832 message=init
timestamp=2026-09-22T14:03:57.332Z level=INFO run=1f7fd832 message="creating instance" directory=/mnt/files/projects/project2
timestamp=2026-09-22T14:03:57.332Z level=INFO run=1f7fd832 message=fromDirectory directory=/mnt/files/projects/project2
timestamp=2026-09-22T14:03:57.334Z level=INFO run=1f7fd832 message=bootstrapping directory=/mnt/files/projects/project2
timestamp=2026-09-22T14:03:57.339Z level=INFO run=1f7fd832 message="creating instance" directory=/mnt/files/projects/project3
timestamp=2026-09-22T14:03:57.339Z level=INFO run=1f7fd832 message=fromDirectory directory=/mnt/files/projects/project3
timestamp=2026-09-22T14:03:57.391Z level=INFO run=1f7fd832 message=loading path=/mnt/files/projects/project2/.opencode/opencode.json
timestamp=2026-09-22T14:03:57.392Z level=INFO run=1f7fd832 message=loading path=/mnt/files/projects/project2/.opencode/opencode.jsonc
timestamp=2026-09-22T14:03:57.896Z level=INFO run=1f7fd832 message="all LSPs are disabled"
timestamp=2026-09-22T14:03:57.896Z level=INFO run=1f7fd832 message="all formatters are disabled"
timestamp=2026-09-22T14:03:57.896Z level=INFO run=1f7fd832 message=init
timestamp=2026-09-22T14:03:57.898Z level=INFO run=1f7fd832 message=bootstrapping directory=/mnt/files/projects/project3
timestamp=2026-09-22T14:03:58.210Z level=INFO run=1f7fd832 message="all LSPs are disabled"
timestamp=2026-09-22T14:03:58.210Z level=INFO run=1f7fd832 message="all formatters are disabled"
timestamp=2026-09-22T14:03:58.210Z level=INFO run=1f7fd832 message=init
timestamp=2026-09-22T14:03:58.422Z level=INFO run=1f7fd832 message="watcher backend" directory=/mnt/files/projects/project1 platform=linux backend=inotify
timestamp=2026-09-22T14:03:58.432Z level=INFO run=1f7fd832 message="project copy refresh started" projectID=97e6f58f7fc157da212e7aedf5e0c1c6b234e210
timestamp=2026-09-22T14:03:59.129Z level=INFO run=1f7fd832 message="project copy refresh done" projectID=97e6f58f7fc157da212e7aedf5e0c1c6b234e210 updated=[] removed=[]
timestamp=2026-09-22T14:03:59.704Z level=INFO run=1f7fd832 message="booting location services" directory=/mnt/files/projects/project1 workspaceID=undefined
timestamp=2026-09-22T14:04:00.040Z level=INFO run=1f7fd832 message=init count=14
timestamp=2026-09-22T14:04:08.434Z level=ERROR run=1f7fd832 message="failed to subscribe" directory=/mnt/files/projects/project1 cause="TimeoutError: TimeoutError\n at orElse (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:8227:25)\n at Server.listen (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:695196:52)\n at Server.listen (definition) (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:695322:33)"
timestamp=2026-09-22T14:04:09.122Z level=ERROR run=1f7fd832 message="failed to subscribe" directory=/mnt/files/projects/project1/.git cause="TimeoutError: TimeoutError\n at orElse (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:8227:25)\n at Server.listen (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:695196:52)\n at Server.listen (definition) (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:695322:33)"
timestamp=2026-09-22T14:04:36.217Z level=INFO run=1f7fd832 message=tracking hash=f2eafbeb41eb38d368b56351401b489037cf2178 cwd=/mnt/files/projects/project1 git=/home/user/.local/share/opencode/snapshot/97e6f58f7fc157da212e7aedf5e0c1c6b234e210/139bd86c7bfb832d5de315c70936f3446984bfa1
timestamp=2026-09-22T14:04:37.618Z level=INFO run=1f7fd832 message=loop session.id=ses_f37a59f69ffe14MiJAOlqMG3Jh step=0
timestamp=2026-09-22T14:04:37.682Z level=INFO run=1f7fd832 message=tracking hash=f2eafbeb41eb38d368b56351401b489037cf2178 cwd=/mnt/files/projects/project1 git=/home/user/.local/share/opencode/snapshot/97e6f58f7fc157da212e7aedf5e0c1c6b234e210/139bd86c7bfb832d5de315c70936f3446984bfa1
timestamp=2026-09-22T14:04:37.690Z level=INFO run=1f7fd832 message="shell tool using shell" shell=/bin/bash
timestamp=2026-09-22T14:04:38.019Z level=INFO run=1f7fd832 message="watcher backend" directory=/mnt/files/projects/project1 platform=linux backend=inotify
timestamp=2026-09-22T14:04:38.022Z level=INFO run=1f7fd832 message="project copy refresh started" projectID=97e6f58f7fc157da212e7aedf5e0c1c6b234e210
timestamp=2026-09-22T14:04:38.218Z level=INFO run=1f7fd832 message="project copy refresh done" projectID=97e6f58f7fc157da212e7aedf5e0c1c6b234e210 updated=[] removed=[]
timestamp=2026-09-22T14:04:38.367Z level=INFO run=1f7fd832 message="booting location services" directory=/mnt/files/projects/project1 workspaceID=undefined
timestamp=2026-09-22T14:04:38.369Z level=INFO run=1f7fd832 message=process session.id=ses_f37a59f69ffe14MiJAOlqMG3Jh messageID=msg_0c96ecf73001R9OalhwRkZb7PX
timestamp=2026-09-22T14:04:38.370Z level=INFO run=1f7fd832 message=stream providerID=omniroute modelID=glm-5.3 session.id=ses_f37a59f69ffe14MiJAOlqMG3Jh small=false agent=orchestrator mode=primary
timestamp=2026-09-22T14:04:38.377Z level=INFO run=1f7fd832 message="llm runtime selected" llm.runtime=ai-sdk llm.provider=omniroute llm.model=glm-5.3
timestamp=2026-09-22T14:04:38.549Z level=ERROR run=1f7fd832 message="stream error" providerID=omniroute modelID=glm-5.3 session.id=ses_f37a59f69ffe14MiJAOlqMG3Jh small=false agent=orchestrator mode=primary error.error="AI_APICallError: Not Found"
timestamp=2026-09-22T14:04:38.553Z level=ERROR run=1f7fd832 message=process session.id=ses_f37a59f69ffe14MiJAOlqMG3Jh messageID=msg_0c96ecf73001R9OalhwRkZb7PX error="Not Found" stack="AI_APICallError: Not Found\n at file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:216021:14\n at process.processTicksAndRejections (node:internal/process/task_queues:104:5)\n at async postToApi (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:215935:28)\n at async OpenAICompatibleChatLanguageModel2.doStream (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:278273:52)\n at async fn (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:409020:25)\n at async file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:404731:23\n at async _retryWithExponentialBackoff (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:404958:12)\n at async streamStep (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:408983:17)\n at async fn (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:409354:9)\n at async file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:404731:23"
timestamp=2026-09-22T14:04:43.673Z level=INFO run=1f7fd832 message=tracking hash=f2eafbeb41eb38d368b56351401b489037cf2178 cwd=/mnt/files/projects/project1 git=/home/user/.local/share/opencode/snapshot/97e6f58f7fc157da212e7aedf5e0c1c6b234e210/139bd86c7bfb832d5de315c70936f3446984bfa1
timestamp=2026-09-22T14:04:48.024Z level=ERROR run=1f7fd832 message="failed to subscribe" directory=/mnt/files/projects/project1 cause="TimeoutError: TimeoutError\n at orElse (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:8227:25)\n at SystemPrompt.environment (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:670029:17)\n at SystemPrompt.environment (definition) (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:471183:35)\n at SessionPrompt.run (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:670104:92)\n at SessionPrompt.run (definition) (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:669904:36)\n at SessionRunState.ensureRunning (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:670104:29)\n at SessionRunState.ensureRunning (definition) (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:455276:43)\n at SessionPrompt.loop (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:669893:21)\n at SessionPrompt.loop (definition) (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:670103:33)\n at SessionPrompt.prompt (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:693723:24)\n at SessionPrompt.prompt (definition) (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:669878:35)"
timestamp=2026-09-22T14:04:48.209Z level=ERROR run=1f7fd832 message="failed to subscribe" directory=/mnt/files/projects/project1/.git cause="TimeoutError: TimeoutError\n at orElse (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:8227:25)\n at SystemPrompt.environment (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:670029:17)\n at SystemPrompt.environment (definition) (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:471183:35)\n at SessionPrompt.run (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:670104:92)\n at SessionPrompt.run (definition) (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:669904:36)\n at SessionRunState.ensureRunning (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:670104:29)\n at SessionRunState.ensureRunning (definition) (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:455276:43)\n at SessionPrompt.loop (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:669893:21)\n at SessionPrompt.loop (definition) (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:670103:33)\n at SessionPrompt.prompt (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:693723:24)\n at SessionPrompt.prompt (definition) (file:///opt/OpenCode/resources/app.asar/out/main/chunks/node-RLI4wwtd.js:669878:35)"
timestamp=2026-09-22T14:04:57.393Z level=INFO run=1f7fd832 message=cleanup prune=7.days
timestamp=2026-09-22T14:04:58.271Z level=INFO run=1f7fd832 message=cleanup prune=7.days
timestamp=2026-09-22T14:05:16.318Z level=INFO run=1f7fd832 message=loop session.id=ses_f37a59f69ffe14MiJAOlqMG3Jh step=0
timestamp=2026-09-22T14:05:16.384Z level=INFO run=1f7fd832 message=tracking hash=f2eafbeb41eb38d368b56351401b489037cf2178 cwd=/mnt/files/projects/project1 git=/home/user/.local/share/opencode/snapshot/97e6f58f7fc157da212e7aedf5e0c1c6b234e210/139bd86c7bfb832d5de315c70936f3446984bfa1
timestamp=2026-09-22T14:05:16.612Z level=INFO run=1f7fd832 message=process session.id=ses_f37a59f69ffe14MiJAOlqMG3Jh messageID=msg_0c96f669f0016w7eFkWvPbnvGG
timestamp=2026-09-22T14:05:16.612Z level=INFO run=1f7fd832 message=stream providerID=omniroute modelID=glm-5.3 session.id=ses_f37a59f69ffe14MiJAOlqMG3Jh small=false agent=orchestrator mode=primary
timestamp=2026-09-22T14:05:16.614Z level=INFO run=1f7fd832 message="llm runtime selected" llm.runtime=ai-sdk llm.provider=omniroute llm.model=glm-5.3
timestamp=2026-09-22T14:05:21.575Z level=INFO run=1f7fd832 message=tracking hash=f2eafbeb41eb38d368b56351401b489037cf2178 cwd=/mnt/files/projects/project1 git=/home/user/.local/share/opencode/snapshot/97e6f58f7fc157da212e7aedf5e0c1c6b234e210/139bd86c7bfb832d5de315c70936f3446984bfa1
timestamp=2026-09-22T14:05:21.643Z level=INFO run=1f7fd832 message=loop session.id=ses_f37a59f69ffe14MiJAOlqMG3Jh step=1
timestamp=2026-09-22T14:05:21.644Z level=INFO run=1f7fd832 message="exiting loop" session.id=ses_f37a59f69ffe14MiJAOlqMG3Jh
Additional Context
Raw client request
Description
I'm using OpenCode Desktop (i.e. the GUI version), and the plugin shows up in the plugin list after configuring it in the configuration file. However, when asking the agent to use PTY background sessions, it tells me that there are no
pty_*tools available, and looking at the raw request, there are really no PTY tools contained in the API request.Reproduction Steps
Steps to reproduce the behavior:
bashExpected Behavior
Agent sees and uses PTY background sessions in OpenCode Desktop just as it does in OpenCode's TUI
Actual Behavior
Agent doesn't see any PTY plugin tools at all
Environment
bash: bun: Command not found...OpenCode Configuration
opencode.json (sanitized)
{ "$schema": "https://opencode.ai/config.json", "logLevel": "DEBUG", "disabled_providers": [ "opencode" ], "plugin": [ "opencode-acp@stable", "oh-my-opencode-slim@latest", "opencode-handoff@latest", "opencode-pty@0.4.0", "opencode-update-notifier@latest" ], "share": "disabled", "small_model": "deepseek-v4-flash", "subagent_depth": 2, "provider": { // ... }, "mcp": { "semble": { "type": "local", "command": [ "uvx", "--from", "semble[mcp]", "semble", "--content", "all" ] }, // ... }, "compaction": { "auto": false }, "experimental": { "disable_paste_summary": true } }Debug Logs
Click to expand debug logs
To get debug logs, run OpenCode with debug logging enabled:
Or check log files in
~/.local/share/opencode/logs/.Additional Context
Raw client request