Skip to main content
When a command fails, the CLI prints a typed error. In JSON mode the same information is a JSON body with error_code, class, exit_code, title, error, detail and hint, so scripts and agents can branch on it. See Use the CLI from AI agents.
Codes follow SH-<DOMAIN>-<NUMBER>. They are stable: search for them in your shell history, put them in support tickets, and branch on them in scripts. A code is never reassigned to a different meaning.

Error codes

Command line

synheart ui with --json, --format json or --quiet fails with a plain error instead of a code: TUI is not available with --format json (or --quiet).

Sign-in

Install, sync and runtime

Network and registry

The synheart org, project and api-key commands return SH-AUTH-001 for an HTTP 401.

Config, update, usage and Syni

Environment variables

The CLI reads these variables. Each is checked against the CLI source. Two further variables, SYNHEART_INSECURE_SKIP_MANIFEST_VERIFY and SYNHEART_REGISTRY_PINNED_KEYS_FILE, exist only for CLI developers testing against an unsigned or local registry. Never set them in a real environment.

Troubleshooting

Run synheart login. Artifact commands need a valid session. If you keep getting sent back to login, run synheart auth status to see where the CLI loads credentials from and when they expire. Then synheart logout and synheart login again.
The browser flow needs a person. Create a CI token in the dashboard, set SYNHEART_CI_TOKEN, and run synheart login.
Pass --port to synheart mock start, or check a port with synheart doctor --port 8787. The defaults are 8787 (WebSocket), 8788 (SSE) and 8789 (UDP). --port N moves all three together: WebSocket on N, SSE on N+1, UDP on N+2.
Commit synheart.lock, and run synheart sync in CI. If the lockfile no longer matches the registry, sync fails with SH-INST-004 or SH-INST-005 instead of installing something different. synheart doctor also reports modified runtime files (SH-RT-FILES).
The HTTPS mode adds an /etc/hosts entry and trusts a local certificate, which can need administrator rights. Run it with the permissions the error asks for, or use plain HTTP (synheart local). Undo the changes with synheart local cleanup --remove-certs.
Check that your phone and computer are on the same network, and that your firewall allows the receiver’s port (default 8787). The receiver listens on every interface unless you pass --host. synheart doctor --port 8787 checks that the port is free.
The CLI reads environment variables on every run. Check that the variable is exported in the shell that runs the CLI, and run synheart env to confirm.
Set SYNHEART_THEME_MODE=light or dark if the CLI guessed your background wrongly. Pick another theme with --theme, or turn colour off with NO_COLOR=1.
For anything else, run synheart doctor, and include the output of synheart version --build when you ask for help.