Press a key. It types the line.
A macOS menu bar app that types your script into any app - one block per hotkey press,
as real keystrokes, at a human pace.
typecue.app · Download · For AI agents
Typing on screen while people watch - demo videos, tutorials, webinars, live presentations - goes wrong in exactly one way: the typing. TypeCue plays a prepared script instead. Write your demo as ordered blocks; during the take, each press of a global hotkey (default Ctrl+Option+X) types the next block into whatever field has focus. Real system-level keystrokes, human pacing, no typos, identical on every take.
TypeCue.mp4
Download: grab the latest release, drag TypeCue to Applications, and grant the one permission it asks for (Accessibility - the macOS API for sending keystrokes; there is a Test Pad in onboarding to verify it).
Homebrew:
brew install --cask alexpolonsky/tap/typecueBuild from source:
git clone https://github.com/alexpolonsky/TypeCue && cd TypeCue
xcodegen generate # brew install xcodegen if needed
xcodebuild build -project TypeCue.xcodeproj -scheme TypeCue -destination 'platform=macOS' -derivedDataPath DerivedDataRequires macOS 14+ to run, Xcode 16.4+ to build.
- Open Edit Scripts from the menu bar icon and write a script - an ordered list of text blocks, one per beat of your demo.
- Pick it as the active script (menu bar, floating panel, or
typecue://command). - Focus the target field and press the hotkey. Each press types the next block; press mid-type to stop; the menu bar caret shows when a script is armed.
- Optional: Show Panel opens a floating teleprompter with every block and its state (typed / typing / next / upcoming) that never steals focus.
Direct the typing inline, inside a block's text:
| Marker | Effect |
|---|---|
[0.5], [2] |
pause that many seconds |
[speed:40] |
40 ms/character from here on; [speed:default] restores your set speed |
[enter] |
press Return (submits in chat apps) |
Line breaks inside a block are typed as Shift+Return by default so multi-line blocks
never submit early in chat apps. Unrecognized brackets (array[0]) are typed literally.
Typing works in any language and keyboard layout, RTL included: characters on the active layout go out as real keystrokes, everything else arrives by direct Unicode entry, and switching input sources mid-session is handled automatically.
Everything TypeCue knows lives in plain files, so AI agents (Claude Code, Cursor, or any tool with access to your machine) can author and drive your scripts:
- Scripts:
~/Library/Application Support/TypeCue/scripts.json- a plain JSON array ([{id, name, blocks: [{id, text}]}]). Edit it directly, then runopen "typecue://reload"so the app picks the changes up live. - Commands:
typecue://activate-script?name=…(or?id=…),typecue://reset-session,typecue://reload. - State: the app mirrors its session to
state.jsonnext to the scripts file (active script, next block, typing status) so tools can observe what's happening.
The repo ships a ready-made agent skill at
.agents/skills/typecue (served raw at
typecue.app/skill.md) - the schema, guardrails, and
screencast-direction rules for pacing a script. Give your agent one line:
Read https://typecue.app/skill.md and set up my TypeCue scripts.
Any agent that can fetch a URL, edit files, and run shell commands qualifies: Claude Code and Cursor are tested; Claude with computer access and Codex work the same way. Chat-only assistants can still author the JSON for you to paste - they just can't drive the app.
Accessibility is the only permission - no account, no network calls, no analytics. Password and secure fields block synthetic typing system-wide (a macOS rule for every app); TypeCue detects this and flashes a warning on the menu bar icon and floating panel instead of silently consuming your block.
# Unit tests (engine, session, store) - headless
xcodebuild test -project TypeCue.xcodeproj -scheme TypeCue -destination 'platform=macOS' \
-derivedDataPath DerivedData -only-testing:TypeCueTests
# UI tests - need an interactive GUI session
xcodebuild test -project TypeCue.xcodeproj -scheme TypeCue -destination 'platform=macOS' \
-derivedDataPath DerivedData -only-testing:TypeCueUITestsThe unit suite covers tokenization and pacing, layout-aware keystroke resolution, the typing sequence (including the anti-interleaving regression), the session state machine, and persistence. Tests that type Latin text through the real resolver skip under a non-Latin active keyboard layout. See docs/MANUAL_REGRESSION.md for the pre-release human pass against real target apps.
Sources/TypeCue/
App/ App entry, delegate, coordinator, windows, floating panel, hotkey
Engine/ TypingEngine, BlockTokenizer, Pacer, KeystrokeResolver, CGEventPoster
Model/ Script, TextBlock
Store/ ScriptStore (plain JSON in Application Support)
Session/ SessionController (cursor state machine), state.json mirror
Permissions/ PermissionManager
UI/ Menu, main window (Scripts / Settings / About), editor, onboarding, panel
See AGENTS.md for locked technical decisions and the working agreement.
KeyboardShortcuts and Sauce, both MIT licensed - full texts in THIRD-PARTY-LICENSES.md.
MIT - see LICENSE.