Recording

Recording is not macro capture. It samples where your focus and clicks go, then turns that into a readable, editable skill draft.

Record

node apps/recorder/main.ts --seconds 15 --out .demo/recordings/rec.jsonl

Operate the computer normally while it runs. It captures three kinds of events:

Modes

| Mode | How | Cost | | --- | --- | --- | | events (default) | UIA focus + structure callbacks, drained through Application.DoEvents() | 8 events in a 15 s session where polling would emit ~50 identical focus rows | | poll (-Poll) | 300 ms sampling of focus + top-level windows | fallback when event registration fails; also handy on locked-down machines |

If registering the UIA handlers throws, the recorder prints the reason to stderr and falls back to polling by itself — a recording session never dies because of an event API problem.

Only three event kinds are written, and they are the ones that carry meaning: focus changes, top-level windows appearing, and left clicks (with the element under the cursor).

Draft a skill

node scripts/draft-skill.ts --recording .demo/recordings/rec.jsonl --name my-skill --only "Notepad"

Rules:

Preview it:

node bin/deskshell.ts run my-skill --mode preview

A draft is not a skill

Assertions cover typing automatically. Click assertions are still empty (post: []), because only a human knows what "it worked" means:

Fill those in and the draft becomes a skill.

Known limits

Next