wavetermdev/waveterm · error

job manager only supported on unix systems, not %s

Error message

job manager only supported on unix systems, not %s

What it means

SetupJobManager only supports linux and darwin; on any other GOOS it refuses to initialize the job manager daemon. The error reports the unsupported GOOS value so the caller knows why job management is unavailable.

Source

Thrown at pkg/jobmanager/jobmanager.go:50

var WshCmdJobManager JobManager

type JobManager struct {
	ClientId              string
	JobId                 string
	Cmd                   *JobCmd
	JwtPublicKey          []byte
	JobAuthToken          string
	StreamManager         *StreamManager
	InputQueue            *utilds.QuickReorderQueue[wshrpc.CommandJobInputData]
	lock                  sync.Mutex
	attachedClient        *MainServerConn
	connectedStreamClient *MainServerConn
	pendingStreamMeta     *wshrpc.StreamMeta
}

func SetupJobManager(clientId string, jobId string, publicKeyBytes []byte, jobAuthToken string, readyFile *os.File) error {
	if runtime.GOOS != "linux" && runtime.GOOS != "darwin" {
		return fmt.Errorf("job manager only supported on unix systems, not %s", runtime.GOOS)
	}
	WshCmdJobManager.ClientId = clientId
	WshCmdJobManager.JobId = jobId
	WshCmdJobManager.JwtPublicKey = publicKeyBytes
	WshCmdJobManager.JobAuthToken = jobAuthToken
	WshCmdJobManager.StreamManager = MakeStreamManager()
	WshCmdJobManager.InputQueue = utilds.MakeQuickReorderQueue[wshrpc.CommandJobInputData](JobInputQueueSize, JobInputQueueTimeout)
	err := wavejwt.SetPublicKey(publicKeyBytes)
	if err != nil {
		return fmt.Errorf("failed to set public key: %w", err)
	}
	err = MakeJobDomainSocket(clientId, jobId)
	if err != nil {
		return err
	}

	go func() {
		defer func() {

View on GitHub (pinned to a4447c1563)

Solutions

  1. Run the job manager on linux or darwin only
  2. On Windows, use an alternative such as WSL2 where GOOS is linux inside the subsystem
  3. Add an early GOOS guard in your own tooling so unsupported platforms never invoke the job command
  4. If you need windows support, file/track an upstream feature request; PTY/job-manager plumbing is unix-specific

Example fix

// before
SetupJobManager(clientId, jobId, pubKey, token, readyFile)
// after
if runtime.GOOS != "linux" && runtime.GOOS != "darwin" {
    return fmt.Errorf("job manager unsupported on %s; use linux/darwin or WSL", runtime.GOOS)
}
SetupJobManager(clientId, jobId, pubKey, token, readyFile)
Defensive patterns

Strategy: validation

Validate before calling

if runtime.GOOS != "linux" && runtime.GOOS != "darwin" {
    return fmt.Errorf("job manager requires linux or darwin (got %s); use WSL on Windows", runtime.GOOS)
}

Try / catch

if err := jobmanager.SetupJobManager(cid, jid, pub, tok, rf); err != nil {
    if strings.Contains(err.Error(), "only supported on unix") {
        // disable job features in UI, do not retry
        return
    }
    return err
}

Prevention

When it happens

Trigger: Calling SetupJobManager (via the wsh jobManagerRun path, e.g. `wsh job` start) on windows or another non-unix GOOS like plan9, wasip1, or js.

Common situations: Running Wave Terminal's job manager features on Windows; CI matrix job accidentally testing the wsh job command on an unsupported OS; cross-compiling and running the binary on an unexpected platform.

Understand the failure class

Background: "unsupported platform" / "not supported on this platform" errors: what they mean and how to fix them — this error's family across 47 libraries.

Related errors


AI-assisted analysis of wavetermdev/waveterm@a4447c1563 (2026-09-01). Data as JSON: /api/errors/7e47e324404de031. Report an issue: GitHub.