Skip to main content

Connection error

The CLI couldn’t reach the backend. The message names the URL it tried, which is usually the fastest clue. Check which URL it’s using:
If that’s empty, the CLI falls back to config.toml [backend].port, then to http://localhost:8000. Point it at the right place:
See Configuration for the full precedence.

Session expired

Your token was rejected or has expired. The CLI refreshes proactively when a token is within 60 seconds of expiring; this appears when the refresh didn’t happen or the server rejected the token.
If it recurs immediately after logging in, you may be logging into one instance and running against another. Check that JOYSTREAM_API_URL and JOYSTREAM_CONFIG_DIR point at the same instance.

Permission errors

A 403 shows the status and detail rather than a login message. That is intentional — you are signed in, but not permitted. Common causes: Signing in again won’t help. Check your role:

Could not determine active workspace

Commands that operate on a workspace need one, either from --workspace or from your context.
Some commands require --workspace explicitly rather than defaulting — the connection group is the main one, because credential resolution depends on which workspace is asking.

Requires an interactive terminal

The planning chat won’t run in a pipe, in CI, or with captured output. There is no line-mode fallback. Run it in a normal terminal, or create the draft non-interactively:

Specify a form: —new or an id

You ran a bare jstm agent plan. Creating an agent is always explicit.
This exits 2, not 1 — it’s a usage error.

Ambiguous workspace handle

Team handles are unique within an organization, not across all of them.
Use the fully qualified form, acme-corp/platform, to be unambiguous.

Multiple credentials for a provider

If several credentials exist, the command asks you to name one rather than guessing. List them and pass --id:

Seeing the full error

This logs the full traceback to stderr. Because diagnostics go to stderr and results to stdout, you can debug and pipe at the same time:

See also