Skip to content
Masko logomasko
Docs
Documentation

Desktop commands

Install Masko first. The runtime currently supports macOS 14+. Control commands use the local host; they do not generate new media or spend generation credits.

Everyday controls

CommandResult
masko show acme/bob --name bobPrepare and show the current complete canvas, without release.
masko show acme/bob --canvas gaming --name bobSelect an existing canvas by name or ID.
masko show ko --name koShow the current Ko version.
masko state working --name koHold an ongoing activity until replaced.
masko state clear --name koRelease the held state and return to the character’s default.
masko play celebrate --name ko --waitPlay a reaction and wait for its complete return.
masko play celebrate --instant --name koJump directly into the performance, skipping its entry transition.
masko cancel --name koRequest the authored return path from the current performance.
masko hide --name koHide and pause.
masko show --name koResume the existing instance.
masko stop --name koClose and dispose this instance.

show, state, play and prepare return as soon as the host accepts them. Media loading and animation continue after the terminal prompt returns. They can be issued sequentially without waiting for show to finish loading.

Add --wait to wait explicitly: show waits for its first frame, state for preparation/application, prepare for all media, and play for the full performance and return. State application does not wait for visual transitions to finish. --timeout SECS limits these waits (default: 300). Control+C stops waiting while accepted work continues.

state clear replaces pending state requests. An active play finishes normally, then returns to the default pose. state rest remains supported. Use state behavior::clear if the character has an authored behavior named clear.

A second simultaneous play returns busy, including while the first is preparing. Changing state during a performance updates where the mascot returns afterwards. cancel follows the character’s animation path; it is not an immediate frame cut.

--instant still plays the authored performance and its return path. It does not bypass media loading or make the command wait. Combine it with --wait when you need completion.

Names and supported inputs

masko inspect --name ko --json
masko status --name ko --json
masko instances --json

Character references and instance names serve different purposes. ko selects the current hosted character; ko@11 requires version 11. --name ko identifies a running copy on your machine.

Bare state and play names resolve to behavior::NAME. Use the full name for an action:

masko play action::papercraftGift --name ko --wait

Inspect the character’s capabilities before inventing new names. An animation must exist in its authored graph before a command can play it.

Two independent mascots

masko show ko --name left --x 300 --y 100
masko show ko --name right --x 650 --y 100
masko state working --name left
masko play celebrate --name right --wait

The shared host supports up to 16 instances. Coordinates are macOS screen points, measured from the bottom-left; positions are clamped to a visible display. masko size 180 --name left sets the size in points, from 64 to 720.

Preparation and diagnostics

CommandResult
masko prepare --name koDownload the graph’s media ahead of playback.
masko host statusInspect the shared renderer.
masko host startStart it explicitly; showing a mascot also starts it.
masko host stopClose all hosted mascots and stop the renderer.

masko status --json includes request IDs, progress and background errors. Pending requests can be queued or running; finished requests are completed, failed or cancelled. Play preparation completes before the animation does; completed_plays records its full return. The last 128 requests are kept until the instance is stopped. A newer pending state supersedes the previous one, hide prevents pending show from displaying, and stop prevents an in-flight load from reopening the mascot.

Host logs are at ~/Library/Application Support/MaskoDeveloper/host.log. Instances are not restored after a host restart. If you lose a command response, inspect status before submitting another performance.

An acceptance receipt is not a guarantee that loading succeeded. Use masko show acme/bob --name bob --wait to surface a loading failure directly, or check masko status --name bob --json after an ordinary show. If the canvas is incomplete, version_not_ready is a failure, not a subscription to future generation. Finish generating its media, then issue show again.

A loaded mascot keeps its snapshot while you edit or regenerate its canvas. To load the finished edits, stop that instance and show the character again. media_ready describes the renderer's current media; it is separate from a cloud run's readiness. Repeating the same loop preserves the loaded media rather than preparing it again at each boundary.

Use --json for machine-readable output. Diagnostics go to stderr. Cloud job watchers emit newline-delimited JSON; see generation and recovery.