Documentation

Default Skills

CopyCopy's default skills are the built-in actions shown in the floating panel. They are intentionally small, focused, and local-first: deterministic tools handle exact transforms, while the local Gemma model handles language tasks.

How a skill appears

Copied content
  ↓
Top-level kind      URL · files · image · text · rich text
  ↓
Detected entities   json · base64 · html · codeSnippet · logOutput · sql · emailDraft · …
  ↓
Source context      browser · email · chat · notes · IDE · terminal · other
  ↓
Skill filters       content-types + entity-types + source-contexts
  ↓
Ranking             source boost + entity boost + length boost + usage history
  ↓
Floating panel      best next actions first

Two things are important:

  1. Filters decide eligibility. A skill with entity-types: json only appears when JSON is detected.
  2. Boosts decide order. A browser-specific boost can move Smart Markdown above generic text actions.

Content types

content-types are broad clipboard buckets. They answer: "what kind of thing was copied?"

Content typeWhat it meansExample skills
urlA copied http or https URLOpen URL, Read Article
filesOne or more file URLs from FinderOpen File, Reveal in Finder
imageClipboard image dataCustom image skills
textPlain or rich text contentMost text, AI, and local transform skills
URL      → Open URL · Read Article · Decode URL
Files    → Open File · Reveal in Finder
Text     → Clean Text · Format JSON · Summarize · Explain Code · …
Image    → custom image actions

Entity types

entity-types are narrower signals inside text. They answer: "what does this text look like?"

EntityTypical inputBest default actions
json{ "ok": true }Format JSON
base64TW9kZWwgbG9hZGVk...Decode Base64
urlEncodedlocal%20llm%20clipboardDecode URL
html<article><h1>…Smart Markdown
markdown# Title — - ItemSummarize, Action Items
codeSnippetFunctions, classes, importsExplain Code
shellCommandswift build, curl ...Explain Error, Explain Code
logOutputStack traces, terminal errorsExplain Error, Strip ANSI
sqlSELECT ... FROM ...Explain Code
foreignLanguageNon-English textTranslate
emailDraftEmail-like draft textRewrite Email
filePath/Users/marc/file.txtReveal Path, Open in Terminal

Detection is local and deterministic first. If the local model is already loaded, CopyCopy may add semantic labels like emailDraft, shellCommand, logOutput, or sql for plain text.

Source contexts

source-contexts and source-boosts use the app where you copied from. They answer: "where did this come from?"

SourceTypical appsStrong default actions
browserSafari, Chrome, ArcRead Article, Smart Markdown, Format JSON
emailMail, OutlookRewrite Email, Fix Grammar, Action Items
chatSlack, Messages, DiscordDraft Reply, Action Items, Summarize
notesNotes, Obsidian, NotionFix Grammar, Action Items, Smart Markdown
ideXcode, VS Code, JetBrainsExplain Code, Format JSON
terminalTerminal, iTerm, WarpExplain Error, Strip ANSI, Decode Base64
otherAnything elseGeneric local/text actions

How source boosts work

Each skill can add a source-boosts map. Higher numbers move the skill up for that source app.

yaml
source-boosts:
  terminal: 150

A terminal error copied from Terminal gets roughly this kind of ordering:

Explain Error       +150 source · +40 entity · history → top
Strip ANSI          +120 source · +40 entity           → high
Explain Code         +70 source · +40 entity           → useful fallback
Clean Text           no entity boost                   → generic fallback
Translate            no matching entity                → hidden or low

A chat copied from Slack gets a different order:

Draft Reply         +150 source · length boost          → top for short chat
Action Items        +110 source · length boost          → top for longer chat/notes
Summarize           +110 source · length boost          → strong for long chat
Clean Text           +45 source                         → generic fallback

Default skill matrix

SkillKindMain filtersStrongest sourcesExecution
Open URLURL utilitycontent-types: urlchat, email, notes, otherLocal tool
Read ArticleURL/articlecontent-types: urlbrowserNetwork fetch + extraction
Clean TextText cleanupcontent-types: textbrowser, email, chat, notesLocal tool
Smart MarkdownHTML/article cleanupcontent-types: text, entity-types: html, markdownbrowser, notesHTML converter + local model
Format JSONStructured dataentity-types: jsonbrowser, IDE, terminalLocal tool
Decode Base64Encodingentity-types: base64terminal, browser, IDELocal tool
Decode URLURL escapingcontent-types: text, urlbrowser, terminal, IDELocal tool
Strip ANSITerminal cleanupentity-types: logOutput, shellCommand, source-contexts: terminalterminalLocal tool
Fix GrammarWritingcontent-types: textemail, notesLocal model
SummarizeSummarycontent-types: text, minimum-chars: 200chat, email, notes, browserLocal model
TranslateTranslationentity-types: foreignLanguagebrowser, chat, email, notesLocal model
Draft ReplyChat replysource-contexts: chatchatLocal model
Rewrite EmailEmail polishentity-types: emailDraftemailLocal model
Action ItemsExtractionminimum-chars: 100chat, email, notesLocal model
Explain ErrorTerminal helpentity-types: logOutput, shellCommand, source-contexts: terminalterminalLocal model
Explain CodeDeveloper helpentity-types: codeSnippet, shellCommand, sqlIDE, terminalLocal model
Open FileFile utilitycontent-types: filesanyLocal tool
Reveal in FinderFile utilitycontent-types: filesanyLocal tool
Reveal PathPath utilityentity-types: filePathanyLocal tool
Open in TerminalPath utilityentity-types: filePathanyLocal tool

Reading a skill definition

A default skill is just a SKILL.md file with frontmatter and a body.

SKILL.md
---
name: Explain Error
description: Explain terminal error
icon: exclamationmark.triangle
content-types: text
entity-types: logOutput, shellCommand
source-contexts: terminal
text-source: clipboardLLM
temperature: 0
source-boosts:
  terminal: 150
---

Explain the terminal error.
Rules:
- Identify the likely cause first
- Give the smallest practical fix next
- Use 2-4 concise bullets

What each part does:

content-types      broad clipboard kind required to show the skill
entity-types       specific detected labels required to show the skill
source-contexts    app category required to show the skill
source-boosts      ranking boost when copied from that source
text-source        how input is prepared before calling the local model
temperature        creativity; 0 is deterministic, higher is more varied
body               tool call or local-model system prompt

Pipeline follow-ups

After an action runs, CopyCopy builds a new context from the result and suggests follow-ups.

HTML article
  → Smart Markdown
  → result is Markdown
  → follow-ups: Summarize · Action Items · Clean Text

CopyCopy avoids repeating redundant actions, logs the action chain, and uses memory/history to improve future follow-up ordering.

Tips for custom skills

  • Start with a narrow filter. Prefer entity-types and source-contexts over showing a skill for all text.
  • Use local tools for exact transforms: JSON, Base64, URL decoding, ANSI stripping, paths.
  • Use local model prompts for language tasks: summarize, rewrite, translate, explain.
  • Keep prompts short and rule-based.
  • Set temperature: 0 for extraction, classification, explanations, and format-sensitive output.
  • Add source-boosts only where the action is genuinely more useful.