Skip to content

plugin-record

Version 2026.182.1805
Repo box/github.com/opencharly/plugin-record:v2026.246.1624
Plugin yes — see the plugin reference

OUT-OF-TREE charly plugin serving the record live-container check verb — a standalone Go module (go.mod + main.go) that manages recording sessions inside a running deployment (list, start, stop, cmd, gif) over go-plugin gRPC via the charly plugin SDK (github.com/opencharly/sdk). charly’s loader fetches this candy’s repo, go-builds the provider binary on the HOST, and serves it OUT-OF-PROCESS via LocalTransport — so the asciinema/wf-recorder/pixelflux recording driver lives HERE, out of charly’s core check surface (the first live-verb dep-shed of the EXEC-based kind, after the PORT-based candy/plugin-mcp/spice/kube). Since the schema-compaction cutover an authored record: step desugars to the internal plugin/plugin_input envelope, and every record-exclusive modifier (method/record_name/record_mode/record_fps/record_audio/text/artifact/settle_ms — record: run sends a command into the recording and waits for its output to settle) lives in the plugin’s OWN #RecordInput (schema/record.cue); the verb dispatches through the provider registry exactly like a built-in (ResolveVerb → grpcProvider → invokeVerbProvider hands it the full #Op). FIRST consumer of the executor reverse channel: record is EXEC-based, so the host attaches its live DeployExecutor over the E3b reverse channel and this plugin dials back through the SDK (sdk.ExecutorFromInvoke) to RunCapture the asciinema/wf-recorder commands in-container via tmux and GetFile the produced .cast/.mp4 artifact back to the host — it owns no podman / SSH machinery. The R10 consumer is a desktop pod bed whose check composes this plugin (the sway-browser-vnc bed’s record: start). Desktop (wf-recorder) recording on a VM/desktop venue needs the compositor session env: author record_env: (a string map, e.g. record_env: {XDG_RUNTIME_DIR: /run/user/1000, WAYLAND_DISPLAY: wayland-1}) to override the container defaults (/tmp + wayland-0); record: start verifies the recorder process is alive after spawn (no false-positive starts), and record: stop pulls the artifact host-side before the provider’s artifact validators run. record: gif renders a STOPPED terminal recording (.cast) to an animated GIF with agg (asciinema/agg — installed by the asciinema candy, which also ships a monospace font) and pulls the .gif to the artifact path; the agg options (theme/font_size/speed/idle_time_limit/fps_cap/select/ cols/rows/no_loop/last_frame_duration/renderer) map 1:1 to agg’s CLI flags.

This candy’s plan: — the runnable spec charly check executes against a live deployment. check: steps are idempotent probes; run: steps change state.

Intent Step
check the record verb dispatches through the provider registry and lists the active recording sessions on a live deployment (the out-of-process plugin verb drives the venue over the executor reverse channel)