Talon Voice Command Development
Reference Documentation
For detailed syntax documentation, see bundled references:
references/talon-files.md — .talon file syntax, context headers, commands, actions, captures, settings, tags
references/talon-lists.md — .talon-list file format, overrides, named vs simple lists
references/misc-tips.md — REPL and logging usage, introspection functions (sim, mimic, actions.find/list, events.tail, registry inspection), and the Talon Python API (ui, clip, cron, screen, imgui, canvas, noise, fs modules)
Testing
Host REPL (read-only queries)
Use the host REPL only by piping one-shot commands into it for read-only queries — introspecting registries, testing command parsing with sim(), listing actions, etc. Do not open or rely on an interactive REPL session. Do NOT use the host REPL for testing behavioral changes that depend on specific application context.
- Mac:
~/.talon/bin/repl
- WSL:
talon-repl
- Pattern:
printf 'actions.list(\"user\")\n' | ~/.talon/bin/repl
talonbox (sandbox testing)
Use talonbox for tests that interact with the OS or with the user's Talon scripts — running mimic(), verifying side effects, capturing screenshots, or deploying scripts to a clean environment. It drives a macOS VM with a full Talon installation.
Run talonbox --help and talonbox <command> --help for usage details.
Local Development
Mac
- Repo locations: Talon repos live in
~/projects/ and are symlinked into ~/.talon/user/
- Auto-reload: Changes to
.talon and .py files are automatically reloaded within a few seconds
- Logs:
~/.talon/talon.log (very long — don't read the whole thing). Changed files appear as DEBUG [~] /path/to/file, with possible WARNING or ERROR lines afterwards
Deploying Changes with talon-install
After making changes to a Talon repo, run talon-install to update the symlink in ~/.talon/user/ so Talon picks up the changes. Must be run from within the git repo.
Usage: talon-install [--main] (--live | --snapshot)
Defaults:
- Main worktree (running from it, or using
--main): use --live
- Alternate worktree: use
--snapshot
Workflows:
Editing the main branch directly:
Run talon-install --live from the main worktree. The symlink points directly to the repo, so subsequent edits are picked up automatically.
Testing a feature branch in a worktree:
Run talon-install --snapshot from the alternate worktree. A snapshot copy is made so further edits don't cause partial-state loading in Talon. Run it again after each batch of changes.
Reverting to known-working state:
Run talon-install --main --live from any worktree of the repo. This points the symlink back at the main worktree, restoring stable behavior. Use this when a worktree's changes have broken something, then fix the issue and re-run talon-install --snapshot to test again.
Notes:
- The
cursorless-talon and cursorless-talon-dev symlinks are managed separately and are not affected by talon-install
- Snapshots exclude
.git/ and .venv/ to stay fast and small
- Only one snapshot per project is kept; old ones are cleaned up automatically
WSL
- Deploying changes: Run
sync-talon-repo to push the current repository to the Talon user directory in Windows
- Auto-reload: Talon takes a few seconds to load changed files after sync
- Logs:
/mnt/c/Users/james/AppData/Roaming/talon/talon.log (very long — don't read the whole thing). Changed files appear as DEBUG [~] c:\path\to\file, with possible WARNING or ERROR lines afterwards
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: talon3description: Use when working on Talon voice command projects — writing .talon files, .talon-list files, or Talon Python modules, AND when installing or deploying Talon scripts to the user's Talon directory. Provides file syntax, voice command rules, context matching, list definitions, Python API tips, local testing, and sandbox testing via talonbox.4---56# Talon Voice Command Development78## Reference Documentation910For detailed syntax documentation, see bundled references:11- `references/talon-files.md` — .talon file syntax, context headers, commands, actions, captures, settings, tags12- `references/talon-lists.md` — .talon-list file format, overrides, named vs simple lists13- `references/misc-tips.md` — REPL and logging usage, introspection functions (sim, mimic, actions.find/list, events.tail, registry inspection), and the Talon Python API (ui, clip, cron, screen, imgui, canvas, noise, fs modules)1415## Testing1617### Host REPL (read-only queries)1819Use the host REPL only by piping one-shot commands into it for read-only queries — introspecting registries, testing command parsing with `sim()`, listing actions, etc. Do not open or rely on an interactive REPL session. Do NOT use the host REPL for testing behavioral changes that depend on specific application context.2021- **Mac:** `~/.talon/bin/repl`22- **WSL:** `talon-repl`23- **Pattern:** `printf 'actions.list(\"user\")\n' | ~/.talon/bin/repl`2425### talonbox (sandbox testing)2627Use `talonbox` for tests that interact with the OS or with the user's Talon scripts — running `mimic()`, verifying side effects, capturing screenshots, or deploying scripts to a clean environment. It drives a macOS VM with a full Talon installation.2829Run `talonbox --help` and `talonbox <command> --help` for usage details.3031## Local Development3233### Mac3435- **Repo locations:** Talon repos live in `~/projects/` and are symlinked into `~/.talon/user/`36- **Auto-reload:** Changes to `.talon` and `.py` files are automatically reloaded within a few seconds37- **Logs:** `~/.talon/talon.log` (very long — don't read the whole thing). Changed files appear as `DEBUG [~] /path/to/file`, with possible `WARNING` or `ERROR` lines afterwards3839#### Deploying Changes with `talon-install`4041After making changes to a Talon repo, run `talon-install` to update the symlink in `~/.talon/user/` so Talon picks up the changes. Must be run from within the git repo.4243**Usage:** `talon-install [--main] (--live | --snapshot)`4445**Defaults:**46- **Main worktree** (running from it, or using `--main`): use `--live`47- **Alternate worktree**: use `--snapshot`4849**Workflows:**50511. **Editing the main branch directly:**52 Run `talon-install --live` from the main worktree. The symlink points directly to the repo, so subsequent edits are picked up automatically.53542. **Testing a feature branch in a worktree:**55 Run `talon-install --snapshot` from the alternate worktree. A snapshot copy is made so further edits don't cause partial-state loading in Talon. Run it again after each batch of changes.56573. **Reverting to known-working state:**58 Run `talon-install --main --live` from any worktree of the repo. This points the symlink back at the main worktree, restoring stable behavior. Use this when a worktree's changes have broken something, then fix the issue and re-run `talon-install --snapshot` to test again.5960**Notes:**61- The `cursorless-talon` and `cursorless-talon-dev` symlinks are managed separately and are not affected by `talon-install`62- Snapshots exclude `.git/` and `.venv/` to stay fast and small63- Only one snapshot per project is kept; old ones are cleaned up automatically6465### WSL6667- **Deploying changes:** Run `sync-talon-repo` to push the current repository to the Talon user directory in Windows68- **Auto-reload:** Talon takes a few seconds to load changed files after sync69- **Logs:** `/mnt/c/Users/james/AppData/Roaming/talon/talon.log` (very long — don't read the whole thing). Changed files appear as `DEBUG [~] c:\path\to\file`, with possible `WARNING` or `ERROR` lines afterwards7071---72> Converted and distributed by [TomeVault](https://tomevault.io/claim/wolfmanstout) — claim your Tome and manage your conversions.73<!-- tomevault:4.0:skill_md:2026-04-16 -->