An argument is rejected as an unknown field
Check the name against the tools reference; the error lists every accepted field. For connection-level recording, use saveVideo: saveVideo: {} for a plain recording, saveVideo: {"condense": {}} for a condensed one. It has no boolean form.
The connection is refused or times out
Refused means nothing listens on the host and port, 5900 by default, or a firewall drops it: check with nc -zv <host> <port> from the same host and correct VNC_HOST and VNC_PORT. A timeout usually means the port is not VNC, or a proxy does not pass raw TCP.
Authentication fails
For a VNC password server, check VNC_PASSWORD. Setting VNC_USERNAME selects macOS account sign-in, which needs an account allowed to use Screen Sharing. For authentication unavailable, unset the username for a password-only server, or enable account-based Screen Sharing.
Connection IDs, limits and rate limits
With VNC_REQUIRE_EXPLICIT_CONNECTION on, create a connection and pass its connectionId everywhere. An unknown ID belongs to another session: check vnc_connection_list. A session holds up to 16 connections. All tools share 30 calls per minute: wait the retry after interval and use the screenshot delay instead of polling.
Screenshots look blank, banded or stale
The default colorDepth is 8 to keep images small; request 24 or 32 for precise reading, and note 0 is grayscale. The libvirt template can return the last known frame; recheck after a short delay. Keep delay well under the 60-second tool limit.
A screenshot or video is not reachable afterwards
Resources belong to the session that captured them and stop resolving when it ends. Read or export them while the same session is active.
Typing is refused, dropped or doubled
One typing call may schedule up to 45 seconds of paced keys, about 166 ordinary characters on the default and mac templates, so split text or paste it with vnc_clipboard_send. Dropped keys on a Mac need template: "mac" or "default"; use libvirt for Windows and Linux guests on a hypervisor console. After a reconnect, text can arrive twice: inspect before retrying. On a macOS guest VM, VNC keys are ignored; send keys through the hypervisor.
Recording will not start or stop
One plain and one condensed recording can run per connection: call vnc_stop_video before starting another. recording: false after create means the connection works but recording did not start, often because the display was not active yet. condense.analysisFps must not exceed fps. VNC recordings carry no sound.
Keep-awake or settle notifications do nothing
Make a pointer action before starting vnc_keep_awake, and start it again after a reconnect. It moves the pointer; it does not change the desktop's sleep policy. Settle notifications need condense.notifyOnSettle: true and a stdio or Unix transport; otherwise read analysis.index after vnc_stop_video.
What you getA desktop you can see and drive reliably, with recordings exported in time.