Description
When opencode serve fails to start (e.g. port conflict, missing config), the error output is:
Error: Unexpected error
ServeError
No actionable information is shown — no indication of what went wrong (port in use, missing config, permission error, etc.).
The root cause is in packages/opencode/src/index.ts lines 128-134: the catch block calls FormatError(e) which returns undefined for server startup errors (no matching _tag), then falls through to the generic "Unexpected error" + errorMessage(e). The Effect error from Server.listen likely has a structured cause that errorMessage() can't extract a useful string from — it just prints the _tag ("ServeError") with no underlying message.
OpenCode version
v1.18.29
Steps to reproduce
- Run
opencode serve --port 4096 --hostname 0.0.0.0 on a port that's already in use (or from a directory where startup fails)
- Observe the error output — only "Unexpected error" and "ServeError" are shown
- Expected: the actual reason for the failure (e.g. "EADDRINUSE: port 4096 already in use" or the specific config error)
Operating System
Linux (Ubuntu)
Description
When
opencode servefails to start (e.g. port conflict, missing config), the error output is:No actionable information is shown — no indication of what went wrong (port in use, missing config, permission error, etc.).
The root cause is in
packages/opencode/src/index.tslines 128-134: the catch block callsFormatError(e)which returnsundefinedfor server startup errors (no matching_tag), then falls through to the generic "Unexpected error" +errorMessage(e). The Effect error fromServer.listenlikely has a structured cause thaterrorMessage()can't extract a useful string from — it just prints the_tag("ServeError") with no underlying message.OpenCode version
v1.18.29
Steps to reproduce
opencode serve --port 4096 --hostname 0.0.0.0on a port that's already in use (or from a directory where startup fails)Operating System
Linux (Ubuntu)