Welcome to TypeShift
TypeShift is a macOS text expander — type a short abbreviation anywhere on your Mac and it instantly expands into whatever text you want. This guide covers everything from your first snippet to advanced AI-powered macros.
Installation
TypeShift is distributed as a signed and notarized disk image — no App Store required.
-
1Download TypeShift.dmg from typeshift.monogramcreative.co.
-
2Open the DMG and drag TypeShift into your Applications folder.
-
3Launch TypeShift from Applications or Spotlight. macOS may ask you to confirm opening an app downloaded from the internet — click Open.
-
4Grant Accessibility access when prompted. This is required for system-wide expansion — see the next section for details.
TypeShift will add itself to Login Items automatically so it's always running when you log in.
Accessibility Permission
TypeShift monitors keyboard input system-wide so it can detect when you type an abbreviation and replace it with your snippet. macOS requires you to explicitly grant Accessibility access for this to work — it does not happen silently.
TypeShift listed and toggled on in System Settings → Privacy & Security → Accessibility.
Granting access
-
1Open System Settings → Privacy & Security → Accessibility.
-
2Click the + button and add TypeShift, or find it in the list and toggle it on.
-
3Return to TypeShift — expansion will start working immediately. No restart required.
Your First Snippet
Creating a snippet takes about 30 seconds. Here's the quick version:
-
1Click the TypeShift icon in your menu bar, then click Open TypeShift (or press the keyboard shortcut shown there).
-
2Click the + button in the snippet list to create a new snippet.
-
3Give it a Title (e.g. "My Email"), an Abbreviation (e.g.
!em), and type your expanded content in the text area. -
4Click Save.
-
5Open any app — Mail, Notes, a browser — and type your abbreviation. The moment you finish typing it, TypeShift replaces it with your snippet.
The TypeShift main window: categories on the left, snippet list in the middle, editor on the right.
Managing Snippets
Snippets are the core of TypeShift — each one pairs an abbreviation with a block of text that gets typed for you. They can be plain text, formatted rich text, or anything in between.
Creating & Editing
To create a snippet, click the + button at the bottom of the snippet list. To edit an existing one, select it from the list.
Each snippet has three required fields:
| Field | Purpose |
|---|---|
| Title | A human-readable name shown in the snippet list. Not used for expansion. |
| Abbreviation | The short text you type to trigger expansion. Case-sensitive. |
| Content | What gets typed when the abbreviation fires. Plain or rich text. |
Click Save (or press ⌘S) to save changes. TypeShift will warn you if you try to navigate away with unsaved edits.
Plain Text vs Rich Text
TypeShift supports two content modes per snippet:
Plain text
The default. TypeShift types the characters directly as if you pressed the keys yourself. Works reliably in every app — Terminal, code editors, web forms, anything.
Rich text
Lets you apply bold, italic, underline, font size, text color, and hyperlinks. TypeShift pastes the formatted content via the clipboard, so it appears with formatting in apps that support it (Mail, Pages, Word, Slack, most text editors).
To switch a snippet between modes, use the Plain / Rich toggle at the top of the editor. Switching from rich to plain will strip formatting but preserve the text content.
The rich text editor with formatting toolbar. Use ⌘B, ⌘I, ⌘U for bold, italic, and underline.
Abbreviation Tips
A good abbreviation fires reliably and never triggers by accident. A few conventions that work well:
Use a prefix character
Starting every abbreviation with a character that doesn't appear at the start of real words prevents accidental expansions. Common choices:
!—!em,!sig,!addr;—;em,;sig//—//date,//reply
Keep them short but distinct
Two or three characters after the prefix is usually enough. !em for email, !ph for phone, !addr for address. Avoid prefixes of each other — if you have !s and !sig, !s will always fire before you can finish typing !sig.
Categories
Categories let you group snippets and filter the list. Each category gets a name and a color — the color dot shows in the sidebar and in the snippet list.
To create a category, click the + button next to "Categories" in the sidebar. To assign a snippet, open it in the editor and choose a category from the dropdown.
Snippets not assigned to a category appear under All Snippets. You can also view all snippets regardless of category by selecting All Snippets at the top of the sidebar.
Recently Deleted
When you delete a snippet or category, it isn't removed immediately — it moves to Recently Deleted, where it stays for 30 days before being permanently erased. This gives you a safety net to recover anything deleted by mistake.
Accessing Recently Deleted
Click Recently Deleted at the bottom of the sidebar. You'll see two sections — Categories and Snippets — each with a countdown badge showing how many days remain before permanent deletion.
- Gray badge — more than 7 days remaining
- Orange badge — 7 days or fewer remaining
- Red badge / "Today" — deletes today
Restoring items
Click any item to preview it, then click Restore. The snippet or category returns to its original location. If a snippet's category was also deleted, restoring the snippet automatically restores the category too.
Bulk restore or delete
Select multiple items using ⌘-click or Shift-click (or ⌘A to select all), then use the Restore All or Delete All Permanently buttons that appear in the detail panel. You can also press the Delete key to permanently erase all selected items.
Permanent deletion
To immediately and permanently erase an item, click it and choose Delete Permanently. This cannot be undone. Items are also automatically purged after their 30-day window expires — TypeShift cleans these up each time it launches.
Snippets in Recently Deleted are inactive — their abbreviations won't trigger expansion. They're fully restored the moment you click Restore.
Backups include Recently Deleted
When you export a backup (Settings → Backup & Sync → Export Now), deleted items are included with their original deletion timestamp. Importing the backup on another Mac restores them to Recently Deleted with the same countdown, so nothing is lost.
Macros
Macros are special tokens you embed in snippet content. When the snippet expands, each token is replaced with a dynamic value — today's date, clipboard contents, a prompt for user input, and more.
Overview
All macro tokens use curly-brace syntax: {token} or {token:parameter}. They work in both plain and rich text snippets.
| Token | What it inserts |
|---|---|
{date} | Today's date — April 17, 2026 |
{date:MM/dd/yyyy} | Today's date in a custom format |
{time} | Current time — 10:30 AM |
{time:HH:mm} | Current time in a custom format |
{clipboard} | Contents of the clipboard at expansion time |
{cursor} | Where the cursor lands after expansion — works in most standard macOS apps |
{fill:Label} | Pauses expansion and asks for typed input |
{snippet:abbrev} | Inline-expands another snippet by abbreviation |
To insert a macro token into a snippet, position your cursor in the content area and click the Insert Macro button in the toolbar (the {…} icon). This opens a picker with all available tokens.
Date & Time
{date} inserts the current date in Month D, YYYY format. {time} inserts the current time in h:mm AM/PM format.
Custom formats
Add a colon followed by a Unicode date format string to control the output:
| Token | Example output |
|---|---|
{date} | April 17, 2026 |
{date:MM/dd/yyyy} | 04/17/2026 |
{date:yyyy-MM-dd} | 2026-04-17 |
{date:EEEE, MMMM d} | Friday, April 17 |
{date:d MMM yyyy} | 17 Apr 2026 |
{time} | 10:30 AM |
{time:HH:mm} | 10:30 |
{time:h:mm:ss a} | 10:30:45 AM |
The macro picker's date and time presets show a live preview of each format before you insert it.
Clipboard
{clipboard} is replaced with whatever text is on your clipboard at the moment the snippet fires.
A common use: copy something to the clipboard, then fire a snippet that wraps it in a template.
-- Snippet: "Reply with quote" abbreviation: !rq --
Thanks for your message. You wrote:
"{clipboard}"
Here's my response...TypeShift captures the clipboard value at the moment the abbreviation is typed, before any expansion happens, so the value is always what you copied — not something TypeShift itself put there.
Cursor Position
{cursor} marks where the text cursor should land after expansion. Place it anywhere in the snippet content.
Hi {fill:Name},
{cursor}
Best,
JamesIn this example, after expansion the cursor lands between the greeting and the sign-off so you can type the body of your message immediately without clicking.
If a snippet has no {cursor} token, the cursor lands at the end of the expanded text.
{cursor} works in most standard macOS apps. In apps that use a custom text engine, the cursor may land at the end of the expanded text instead of the {cursor} position. The in-app macro picker notes this when you insert the token.
Fill-in Fields
{fill:Label} pauses the expansion and shows a small floating panel asking you to type a value. Once you type the value and press Return, expansion resumes with your input substituted in.
Hi {fill:First name},
Thanks for reaching out about {fill:Topic}.
I'll get back to you by {date}.
The fill-in panel appears near your cursor. Type the value and press Return to continue.
Multiple fill-in fields
You can have as many {fill:…} tokens as you like in one snippet. TypeShift collects all the values first — showing each field's label as a prompt — and only then performs the final expansion with all values substituted simultaneously.
Reusing the same field
If two tokens share the same label — {fill:Name} appearing twice — TypeShift asks for the value once and uses it in both places. The label is the identity, not just a hint.
Nested Snippets
{snippet:abbrev} expands another snippet inline. The referenced snippet's content is inserted at that position, with its own macros resolved.
-- Snippet: "Support reply" abbreviation: !support --
Hi {fill:Name},
{cursor}
{snippet:!sig}Here {snippet:!sig} embeds your email signature snippet, so you never have to maintain it in multiple places.
{snippet:…} will not further expand its own {snippet:…} tokens.Combining Macros
All macro types can be mixed freely in one snippet. Here's a more complex real-world example:
-- Snippet: "Meeting follow-up" abbreviation: !mtgfu --
Hi {fill:Name},
Great meeting with you on {date:EEEE, MMMM d}.
As discussed: {cursor}
Next steps:
- {fill:Action item} by {fill:Due date}
{snippet:!sig}When this fires, TypeShift collects Name, Action item, and Due date in sequence, then expands everything at once — with today's date formatted as "Friday, April 17" and the cursor landing at the "As discussed:" line ready for you to type.
AI Macros
AI Macros let you embed an AI prompt directly inside a snippet. When the snippet fires, TypeShift sends your prompt to an AI provider and types the response in place — no copy-pasting, no switching apps.
Overview
The AI macro token is {ai: your prompt here}. Write whatever prompt you'd give the AI, and the result is what gets expanded. Combine it with other macros to make prompts dynamic — pass in clipboard text, fill-in values, or today's date.
-- Type "!fix" anywhere to fix grammar in your clipboard --
{ai: Fix any grammar and spelling errors in the following text, return only the corrected text: {clipboard}}Supported Providers
TypeShift supports four AI providers. All require an account with the provider; most charge per use (fractions of a cent per expansion).
OpenAI
GPT-4o, GPT-4o mini, and all current OpenAI models.
Anthropic
Claude 3.5 Sonnet, Claude 3 Haiku, Opus, and newer Claude models. Enterprise/gateway support included.
xAI (Grok)
Grok 3 and Grok 3 mini from xAI.
Ollama
Run any open-source model locally. No API key, no internet, no cost per use.
API Key Setup
Open Settings → AI Macros to configure your provider and API key.
Settings → AI Macros. Select a provider, paste your API key, then click Test Connection.
OpenAI
- 1Go to platform.openai.com/api-keys and create a new secret key.
- 2Select OpenAI in the Provider picker and paste the key into the API Key field.
- 3TypeShift fetches the available model list automatically. Choose a model from the picker, then click Test Connection.
Anthropic
- 1Go to console.anthropic.com/settings/keys and create an API key.
- 2Select Anthropic and paste the key. TypeShift will list available Claude models.
- 3Click Test Connection to verify.
xAI (Grok)
- 1Go to console.x.ai and generate an API key.
- 2Select xAI (Grok), paste the key, choose your model, and test.
Ollama (local)
- 1Download and install Ollama, then pull a model:
ollama pull llama3 - 2Make sure the Ollama app is running (it shows a status icon in your menu bar).
- 3Select Ollama in TypeShift. No API key needed — TypeShift auto-detects running models.
Writing AI Prompts
The {ai: …} token accepts any text as the prompt. Write it exactly as you would write a prompt in ChatGPT or Claude — the clearer and more specific you are, the better the output.
Practical examples
| Snippet content | What it does |
|---|---|
{ai: Write a polite out-of-office reply. Keep it under 3 sentences.} |
Generates a fresh out-of-office message each time |
{ai: Rewrite the following in a professional tone: {clipboard}} |
Rewrites whatever you've copied into a more formal register |
{ai: Translate this to Spanish: {clipboard}} |
Translates clipboard text to Spanish on demand |
{ai: Summarize the following in one sentence: {clipboard}} |
One-sentence summary of copied text |
{ai: Write a LinkedIn connection request to {fill:Name} who works at {fill:Company}.} |
Generates a personalized connection note after asking for name and company |
Getting consistent output
A few techniques that help:
- Be explicit about format: "Return only the corrected text, no explanation." prevents the AI from adding commentary.
- Specify length: "Keep it under 2 sentences" or "Write exactly 3 bullet points."
- Specify tone: "Professional", "casual", "concise", "friendly but brief."
- Use a System Prompt for constraints that apply to all your AI macros — see below.
Embedding Macros in AI Prompts
Any macro token can be placed inside an {ai: …} prompt — TypeShift resolves all inner tokens before sending the prompt to the AI.
-- Rewrite clipboard text --
{ai: Rewrite the following in a professional tone: {clipboard}}
-- Use a fill-in to target the audience --
{ai: Rewrite this for a {fill:Audience} audience: {clipboard}}
-- Include today's date in the context --
{ai: Write a status update for {date:EEEE MMMM d}. Key update: {fill:Update}}The order of resolution is: fill-in fields first (TypeShift collects all values from the user), then {clipboard}, {date}, and other tokens — then the fully-resolved prompt is sent to the AI.
{ai: … {clipboard}}. Copy any text — an email, a document excerpt, a URL — then fire a snippet that processes it with AI. Grammar fixing, translation, summarization, tone adjustment, and reformatting all work this way.System Prompt
The system prompt is a set of standing instructions prepended to every AI request you make. Use it to give the AI consistent context about who you are and how you want it to behave across all your AI macros.
Find it in Settings → AI Macros → System Prompt. Some useful starting points:
-- Example system prompt --
You are a writing assistant for a software engineer at a B2B SaaS company.
Keep responses concise and professional. Return only the requested output
— no explanations, caveats, or preamble unless explicitly asked.The system prompt applies to all providers and all AI macro snippets. Leave it blank if you don't need global context — individual snippet prompts can be self-contained.
Advanced Settings
Expand the Advanced section in Settings → AI Macros to access:
| Setting | What it does | Default |
|---|---|---|
| Temperature | Controls randomness. Lower values (0.0–0.5) give more predictable, consistent output. Higher values (0.8–2.0) give more varied, creative output. | 0.7 |
| Max Tokens | Maximum length of the AI's response. Increase for longer outputs like full emails or summaries of long documents. Decrease to force brevity. | 1024 |
| Custom Model ID (Anthropic) | Override the model picker with any model ID — useful for newly released models not yet in the standard list. | — |
Enterprise & Gateway
If your organization routes AI requests through a corporate gateway — such as an AWS Bedrock deployment, an Azure OpenAI endpoint, or a custom proxy — you can configure TypeShift to send requests there instead of directly to the provider's public API.
Enterprise settings appear in Advanced once you enter a Base URL.
Base URL
Enter your gateway's base URL — everything up to but not including the path. For example:
https://your-gateway.corp.example.com/bedrockLeave this blank to use the standard Anthropic API (https://api.anthropic.com).
Authentication
Choose how TypeShift sends the API key to your gateway:
| Option | Header sent | When to use |
|---|---|---|
| x-api-key | x-api-key: <key> | Standard Anthropic API and most gateways. The default. |
| Bearer token | Authorization: Bearer <key> | OAuth-style gateways and many Azure deployments. |
| Custom header | <your header>: <key> | Gateways that require a specific non-standard header name. Enter the header name in the field that appears. |
Endpoint Style
Controls what URL path TypeShift constructs for the request. Choose based on what your gateway expects:
| Style | URL constructed | Body format |
|---|---|---|
| Standard | {base}/v1/messages |
Standard Anthropic Messages API. Model name in the body. |
| Bedrock path | {base}/model/{model}/messages |
Model name in the URL path, not the body. anthropic_version: bedrock-2023-05-31 in the body. |
| Bedrock invoke | {base}/model/{model}/invoke |
Native AWS Bedrock invoke format. Model in URL, anthropic_version in body. |
| Custom path | {base}{your path} |
Enter any path. Use {model} as a placeholder where the model ID should be inserted. |
AWS Bedrock example
A typical configuration for a Salesforce or similar AWS Bedrock gateway:
Base URL: https://your-gateway.corp.example.com/bedrock
Auth: x-api-key (or Bearer, depending on your setup)
Endpoint: Bedrock invoke
Model ID: us.anthropic.claude-opus-4-6-v1Custom path example
For gateways with a non-standard path structure, use Custom path with the {model} placeholder:
Base URL: https://your-gateway.corp.example.com
Auth: Bearer token
Endpoint: Custom path
Path: /api/v2/models/{model}/chatTypeShift will construct the final URL as https://your-gateway.corp.example.com/api/v2/models/us.anthropic.claude-opus-4-6-v1/chat.
Sync & Backup
Keep your snippets safe and in sync across all your Macs with iCloud, or export regular backups to any folder.
iCloud Sync
iCloud sync keeps your entire snippet library — snippets, categories, and settings — automatically in sync across all your Macs using your iCloud account. It's opt-in and off by default.
Settings → Backup & Sync. The green checkmark and "Last synced" line confirm sync is active.
Enabling sync
- 1Open Settings → Backup & Sync.
- 2Toggle on Sync with iCloud. TypeShift will relaunch automatically to initialize the CloudKit store.
- 3Repeat on each Mac you want to sync. Make sure all Macs are signed into the same Apple ID.
How long does sync take?
After enabling, existing snippets typically appear on other devices within a few seconds to a couple of minutes. If a Mac has been offline, it will catch up the next time it connects.
Refresh button
If changes from another Mac aren't appearing, hit the Refresh button in Backup & Sync. This reloads the local store and picks up any records CloudKit has already delivered in the background.
Troubleshooting
- "Not yet synced this session" — sync hasn't completed a full cycle yet. Wait a minute, then hit Refresh.
- Sync error appears — check that iCloud is signed in and working in System Settings → Apple ID, and that you have sufficient iCloud storage.
- Snippets missing on one Mac — confirm that both Macs have the iCloud Sync toggle on (not just the backup folder set), and that both are signed in to the same Apple ID.
Backup & Restore
TypeShift can automatically export a JSON backup of all your snippets, categories, and settings to any folder you choose — including iCloud Drive, Dropbox, or a local folder.
Setting up a backup folder
- 1Open Settings → Backup & Sync → Backup Folder and click Choose…
- 2Select a folder. TypeShift saves a timestamped JSON file there each time it backs up.
- 3Click Back Up Now to run an immediate backup.
Restoring from a backup
- 1In Settings → Backup & Sync, click Restore from Backup…
- 2Select a
.jsonbackup file. TypeShift will import the snippets and settings it contains.
Licensing
TypeShift is a one-time purchase of $3.99. There's no subscription, no annual renewal, and all future updates are included.
Free Trial
TypeShift includes a full-featured 30-day free trial — no credit card required. The trial starts the first time you launch the app and counts down calendar days regardless of whether the app is running.
When 5 days remain, a banner appears at the top of the window as a reminder. When the trial expires, snippet expansion is paused until a valid license is activated.
Purchasing
Buy TypeShift at typeshift.monogramcreative.co or directly from the in-app paywall. Payment is handled by Lemon Squeezy — your license key is emailed immediately after purchase.
The $3.99 license covers up to 3 Macs.
Activating a License
- 1Open Settings → General and find the License section, or click Activate License from the trial banner or paywall.
- 2Paste your license key into the field and click Activate.
- 3TypeShift validates the key with the Lemon Squeezy server. Once confirmed, the trial countdown disappears and expansion is fully unlocked.
Validation requires an internet connection on first activation. After that, TypeShift works fully offline — it only checks in once per launch when online.
Multiple Macs
One license key activates up to 3 Macs. Simply enter the same key on each Mac.
Deactivating a Mac
If you've reached the 3-Mac limit and need to activate on a new machine, you can free up a slot by deactivating an old one: open Settings → General → License and click Deactivate this Mac. That slot is immediately available for another machine.
License not validating?
- Check that your Mac has an active internet connection.
- Make sure you're pasting the full key with no extra spaces.
- If you've already used all 3 activations, deactivate one of the other Macs first.
- Still stuck? Email hi@monogramcreative.co with your order number.