espanso/SKILL.md
Espanso text expander configuration, match authoring, and workflow automation on macOS. Use when the user asks to: create or edit espanso matches/triggers, set up text snippets, configure dynamic expansions (date, shell, clipboard, forms), manage app-specific config, organize matches into packages, debug why a trigger isn't firing, or add new shortcuts to their espanso setup. Trigger phrases include "add an espanso snippet", "create a trigger for", "configure espanso", "text expander", "espanso match", or any request to expand or automate typed text on macOS.
npx skillsauth add grailautomation/claude-plugins espansoInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Espanso is a cross-platform text expander written in Rust. It intercepts keystrokes and replaces trigger strings with defined expansions. Config is YAML-based.
| File | Purpose |
|------|----------|
| $CONFIG/config/default.yml | Global settings |
| $CONFIG/match/base.yml | Default matches (always active) |
| $CONFIG/match/packages/ | Third-party packages |
$CONFIG = ~/Library/Application Support/espanso
:){{varname}}date, shell, clipboard, form, random, script)matches:
- trigger: ":sig"
replace: "Best Regards,\nDave"
# word: true — only fires when surrounded by word separators
- trigger: "teh"
replace: "the"
word: true
# propagate_case — alh→although, Alh→Although, ALH→ALTHOUGH
- trigger: "alh"
replace: "although"
propagate_case: true
word: true
# $|$ — cursor lands here after expansion
- trigger: ":div"
replace: "<div>$|$</div>"
# Multiple triggers for one replacement
- triggers: [":hello", ":hi"]
replace: "Hello, World!"
See references/extensions.md for full extension reference.
matches:
# Date
- trigger: ":today"
replace: "{{date}}"
vars:
- name: date
type: date
params:
format: "%Y-%m-%d"
# Shell command
- trigger: ":user"
replace: "{{output}}"
vars:
- name: output
type: shell
params:
cmd: "whoami"
# Clipboard + form combined
- trigger: ":mdlink"
replace: "[{{form1.title}}]({{clipboard}})"
vars:
- name: clipboard
type: clipboard
- name: form1
type: form
params:
layout: "Link title: [[title]]"
Forms prompt the user with a popup before expanding.
- trigger: ":email"
replace: "Hi {{form1.name}},\n\n{{form1.body}}\n\nBest,\nDave"
vars:
- name: form1
type: form
params:
layout: |
Name: [[name]]
Body:
[[body]]
fields:
body:
multiline: true
Create $CONFIG/config/<appname>.yml to override settings per app.
# $CONFIG/config/vscode.yml
filter_title: "Visual Studio Code"
backend: clipboard # clipboard backend recommended for Electron apps
Available filters: filter_title, filter_class, filter_exec (all support regex).
espanso status # check if espanso is running
espanso restart # restart after config changes
espanso edit # open base.yml in default editor
espanso match list # list all active matches
espanso log # tail logs (debug trigger issues)
espanso package install <name> # install from the Hub
espanso package list # list installed packages
All .yml files under $CONFIG/match/ are loaded automatically — split by topic:
match/
base.yml # general snippets
dev.yml # code/dev snippets
email.yml # email templates
dates.yml # date/time expansions
$CONFIG/match/ — espanso auto-reloads on save$CONFIG/config/) require espanso restartespanso match list to verify a trigger is registeredespanso log to debug unexpected behaviordocumentation
Write a feature spec or PRD from a problem statement or feature idea
development
Synthesize qualitative and quantitative user research into structured insights and opportunity areas. Use when analyzing interview notes, survey responses, support tickets, or behavioral data to identify themes, build personas, or prioritize opportunities.
research
Synthesize user research from interviews, surveys, and feedback into structured insights
data-ai
Generate a stakeholder update tailored to audience and cadence