You can ask OpenCode to debug itself. Describe the problem and ask it to use this troubleshooting page; it can read the
steps below, inspect its service and logs, and help identify the issue.
OpenCode runs as two processes: the TUI is a client, while a background server owns sessions, plugins, permissions, and
other application state. Start by determining whether an issue is in the client, the shared server, or a specific project.
Check the background service
Show the current server status:
Verify that its API is healthy:
opencode2 api get /api/health
If the service is stuck or unhealthy, restart it:
opencode2 service restart
From inside the TUI, run /reload to restart the managed service and reconnect:
You can also stop and start it explicitly:
opencode2 service stop
opencode2 service start
OpenCode normally discovers or starts the shared background service automatically. The service commands are only needed
when diagnosing its lifecycle.
Run an isolated session
Use standalone mode to run the TUI with a private server that exits with it:
If an issue disappears in standalone mode, it is likely related to the shared background service rather than the TUI or
project itself.
Inspect the API
The api command uses the same discovery and authentication flow as the TUI. It accepts either an HTTP method and path or
an OpenAPI operation ID.
See the API reference for all endpoints and operation IDs.
Pass a JSON request body with --data or -d, and add headers with --header or -H.
Running opencode2 api may start the background service when no compatible healthy service is available.
Read logs
Installed builds write logs to:
~/.local/share/opencode/log/opencode.log
Follow the log while reproducing the problem:
tail -f ~/.local/share/opencode/log/opencode.log
Each line includes a process run ID and a role field. Use role=cli for TUI and command startup, and role=server for
session, provider, plugin, permission, and tool activity.
grep 'role=cli' ~/.local/share/opencode/log/opencode.log
grep 'role=server' ~/.local/share/opencode/log/opencode.log
grep 'run=8fc3b1d5' ~/.local/share/opencode/log/opencode.log
Increase verbosity for one reproduction:
OPENCODE_LOG_LEVEL=DEBUG opencode2
Service files
The shared server registers itself at:
~/.local/state/opencode/service.json
Its private service configuration is stored separately at:
~/.config/opencode/service.json
The database normally lives at:
~/.local/share/opencode/opencode-next.db
OPENCODE_DB can override the database location.
Do not delete or edit service files or the database while troubleshooting. Use the service commands to manage the daemon,
and make a backup before inspecting persistent data with external tools.
Explicit servers
When connecting with --server, set OPENCODE_PASSWORD if the server requires authentication:
OPENCODE_PASSWORD=secret opencode2 --server http://127.0.0.1:4096
The CLI checks the server before opening the TUI and reports whether it is unreachable, requires a password, or rejected
the supplied password.
Report an issue
Include the following when reporting a reproducible problem:
- Output from
opencode2 --version
- Output from
opencode2 service status
- The smallest sequence of steps that reproduces the issue
- Whether the issue also occurs with
opencode2 --standalone
- Relevant log lines, including their
run and role fields
Remove API keys, authorization headers, prompts, file contents, and other sensitive data before sharing logs.
Local development
When working from the OpenCode repository, run V2 commands from the repository root:
The local development channel keeps its logs, SQLite database, and service registration separate from installed builds:
~/.local/share/opencode/log/opencode-local.log
~/.local/share/opencode/opencode-local.db
~/.local/state/opencode/service-local.json
Use the same diagnostics through the package development command:
bun dev service status
bun dev service restart
bun dev api get /api/health