← Back to Blog

A programmable clipboard for Mac: smart actions at your cursor

November 9, 2026 · 6 min read

A lot of developer work is reshaping text you just copied. Minified JSON that needs formatting, a JWT you want to read, a SQL query you need as an UPDATE, a hex colour you need as a Tailwind class, a URL full of tracking parameters. Usually that means opening a browser tab, finding a tool, pasting, copying the result and pasting again.

L2Cache does it where you already are. Copy something, and a small smart bubble appears next to your cursor with the actions that make sense for what you copied. Pick one, then paste as usual.

How it works: copy, pick, paste

  1. Copy as you normally would, with ⌘C or the Copy menu, in any app.
  2. The bubble appears next to your cursor. L2Cache has already worked out what kind of content it is, so the bubble's title says so (Code Actions, Table Actions, Docker Actions…) and the best action is first.
  3. Pick an action. L2Cache transforms the text and puts the result back on your clipboard.
  4. Paste with ⌘V. You get the transformed version.

If you don't need it, ignore it. The bubble fades after about four seconds (it waits while your pointer is over it), and a click elsewhere or Esc closes it straight away. It never takes keyboard focus from the app you're typing in.

Why it doesn't paste for you

Tools that read your selection and paste on your behalf need macOS Accessibility access and simulated keystrokes. The Mac App Store doesn't allow that for an app like L2Cache, and it's a lot of trust to hand over. L2Cache only reads and writes the clipboard, which it already does as a clipboard manager. You do the copying and pasting. That's the whole trick, and it means no extra permissions.

It learns your favourite

The bubble remembers the last action you used for each kind of content and puts it first next time. If you always minify JSON rather than format it, minify moves to the front.

What it recognises, and what it can do

Here are some of the content types the bubble knows and a few of the actions for each. The labels are the ones you'll see in the app.

You copySome of the actions
JSONFormat JSON · Minify JSON · Repair JSON · Sort JSON keys · Convert to TypeScript interface · Convert to Swift Codable · Convert JSON to Zod Schema · Mask Secret Values
JWTDecode JWT
SQLFormat SQL · Extract table names · Parameterize · Convert to SELECT (Preview) · Add WHERE safeguard · Convert to Mermaid ER Diagram
CSV and tablesConvert to Markdown table · Convert to JSON array · Convert to SQL Inserts · Transpose Table · Extract headers
cURL and HTTP requestsSanitize Headers & Auth · Extract URL · Extract body · → Fetch (JS) · → Python requests · → URLSession
YAML and XML→ JSON · → TOML · Format XML · XML → JSON · XML → Swift Codable
LogsRedact PII & Secrets · Noise Filter · Search Stack Overflow · Search GitHub Issues
AWS ARNsExtract ARN components · Open in AWS Console
Docker imagesExtract image details · Docker pull command · Docker run command
Kubernetes and TerraformExtract resource identity · Extract container images · Extract resource addresses
ColoursCopy as RGB · Copy as HSL · Copy as Tailwind class · Copy as Swift Color · Copy as CSS variable
TimestampsThe local and UTC time shown right in the bubble · Convert to ISO 8601 · Convert to Epoch (seconds) · Copy Swift Date() snippet
Base64Decode Base64 · Inspect Base64
Git URLsGit clone command · Git add remote origin · Git add submodule
Regular expressionsTest Regex, a live tester that opens in the bubble
LinksRemove UTM params · Decode URL · Encode URL · Convert to cURL

Connection strings, MongoDB queries, GraphQL, Markdown and AI prompts have their own actions too. Most actions run locally and instantly. A few, such as Explain error or Explain request, use AI, and anything that makes a network call says so in its label, such as Execute cURL — sends request.

When a copied error has a history

Copy a failing test or an error message, and the bubble can also show Related History: commands you ran for the same error before, and, if a coding agent fixed it earlier, a Previously fixed card with the cause and the fix. See how L2Cache remembers fixes.

Make it yours: custom actions

The built-in list covers the common cases. For everything else, add your own in Settings › Custom Actions. Each one has a name, the content types it applies to, and one of two kinds of body:

Choose which content types an action applies to, such as JSON, SQL, logs, Docker images, Git URLs and so on, so it only appears when it's relevant. Choosing Text makes it available for any text clip. A built-in playground lets you try an action on sample input before you save it.

# Shell Command · applies to JSON
# Keep only the "data" field of an API response
jq '.data'

Custom actions appear in the bubble under their own Custom Actions heading, and in the clipboard panel. For a set of ready-made recipes, see custom clipboard actions.

Choosing when it appears

By default the bubble appears for code and developer items: code, JSON, SQL, YAML, XML, cURL and HTTP requests, JWTs, Base64, colours, CSV, system logs, ARNs, Docker images, Kubernetes manifests, Terraform, connection strings, Git URLs and regular expressions. In Settings › Clipboard you can switch it to All content types, which adds links and plain text, pick Selected types only, or turn the bubble off. Every action stays available from the clipboard panel either way.

Privacy and limits

Free and Pro

On the free plan, the first built-in action and the first custom action in each bubble work. The rest need L2Cache Pro, and so does creating and editing custom actions. The free trial includes everything.

The short version

Make your clipboard do the work

L2Cache recognises what you copy and offers the right action at your cursor, on your Mac.

Download L2Cache for Mac