How to use
- Copy the installation command and review the source package before installing it in your own agent environment.
- Check the source document for required tools, credentials and supported hosts.
- Describe your input and desired deliverable; review the output against the source material.
npx skills add https://github.com/kitlangton/scrawl --skill scrawlBefore you start
- Installation does not include a model subscription, API allowance or permission to access your files.
- Repository stars and installation counts describe activity, not an independent quality or security test.
Rendered from the source repository. Headings, examples, code, tables, links, and referenced images are preserved.
Scrawl captures
Scrawl records someone's screen, voice, clicks and red ink, then packs the result into a .scrawl folder (a bundle). They send it to show you a problem instead of describing it, so the capture is the bug report. Read it closely before you answer, and don't ask them to explain again what the capture already shows. If something is unclear, look closer with scrawl zoom first.
What a paste looks like
[scrawl 0:33 · OpenCode “Settings” · /Users/me/Library/Application Support/scrawl/captures/scrawl-1792432139176.scrawl]
Cropped to: the activity in OpenCode (full frames in frames-full/)
- #1 (0:04) [clicked “New tab”] “Command T makes a new session, but here it should make a tab.”
- #2 (0:07) “No, it doesn't.”
- #3 (0:10) ⚑ “It says command shift B makes a new tab.”
- #4 (0:18) clicked (x 0.51, y 0.93)- The first line has the length, the app and window recorded, and the bundle path.
- Each
#N (M:SS)line is a keyframe: what they did at that moment in brackets, then what they said while it was on screen. A line with no quote has the action alone. ⚑means they flagged the moment on purpose.⟨Name⟩means the app reported a new screen. Lines starting·are events or values the app logged.- Optional lines near the top:
For session:(where Scrawl sent it),Screen:with app context,Note:, andCropped to:. - Coordinates are fractions of the captured area, from the top left (x 0.51 is just right of centre).
When you answer, refer to moments the same way, as in "#3 (0:10)", so the person can find them on the contact sheet.
Reading a bundle
- Look at
contact-sheet.pngin the bundle first (it's often attached already). It shows every keyframe in time order, left to right and top to bottom, each with a#N M:SSbadge. - Read the transcript lines next to it. Speech recognition mishears names and code terms, so trust the screen when the two disagree.
- Open
frames/frame-NN.pngfor any keyframe you need at full size (frame-03.pngis #3). When the summary saysCropped to:, the uncropped screens are inframes-full/.
What the drawings mean:
- Red strokes, circles, underlines and arrows are the person's marks, and they point at the problem. Marks drawn on the same screen all show on one keyframe.
- A ripple around the cursor shows a click or tap, and a finger trail shows a swipe.
- A glowing red trail that tapers off is the laser pointer, used to point without leaving a mark.
Other files: scrawl.json is the full manifest (keyframes, marks with shape and box, events, transcript.words with times, app context, and autocrop). recording.mp4 or recording.mov and audio.wav are the source media. A .media-pending file means the video is still being copied from another Mac.
The scrawl CLI
scrawl is the Scrawl app's own binary. If command -v scrawl finds nothing, use /Applications/Scrawl.app/Contents/MacOS/scrawl (or the same path under ~/Applications), and tell the person they can put it on PATH with Install in Scrawl's Settings › Agents. It runs only on the Mac with Scrawl installed. Anywhere else, read contact-sheet.png, frames/ and scrawl.json directly. Every command takes a bundle path, and most default to latest, the newest capture. Quote the path, because it usually contains Application Support.
Look closer at a moment
Use zoom when the problem is motion (an animation, a jump, a flicker) or happens between keyframes, or when you can't tell what a mark points at:
scrawl zoom <bundle> --at 0:21 # a time, M:SS or seconds
scrawl zoom <bundle> --at "the width changes" # or a phrase they said
scrawl zoom <bundle> --at 0:21 --span 1 --frames 16 --fullIt prints the path of a PNG sheet of frames around that moment, the time of each cell, and what was said. Open the PNG and look at it before you act on the feedback. --span is the seconds covered (default 2, a quarter of it before the moment), --frames the number of cells (default 12), and --full shows the whole screen instead of the crop. The cells are numbered from #1 within the sheet, so those numbers aren't keyframe numbers.
Other commands
scrawl inspect <bundle> # summary.md, the text above
scrawl inspect <bundle> --json # scrawl.json
scrawl frames <bundle> --from 0:04 --to 0:06 [--fps 4] # plain PNGs of a range; prints their paths
scrawl send <bundle> --session ses_… # queue the capture into an OpenCode session
scrawl send <bundle> --clipboard # copy the summary text to the clipboard
scrawl export <bundle> [--out demo.mp4] [--zoom] [--crop auto|full|x,y,w,h] [--size 1920]zoomandframeswrite into<bundle>/zoom/. Leave the rest of the bundle as it is, because Scrawl manages those files and cleans them up.sendwithout--sessiongoes to the session the capture was addressed to (theFor session:line), and otherwise to the most recently active session. With a recorded destination it refuses a different--sessionunless you pass--reroute, so check with the person before rerouting.exportwrites one.mp4with the ink and clicks burned in and the audio in sync (default~/Movies/Scrawl/<bundle>.mp4).--zoomeases in toward the activity.--no-ink,--no-clicks,--hevcand--fpsare also available.- Video and audio go to the Trash 7 days after a capture unless the person changed that in Settings. After that
zoom,framesandexportcan't read the video, butframes/, the contact sheet andscrawl.jsonremain. scrawl <command> --helplists every flag, andscrawl skillprints this guide as the installed version knows it.


