Настройка
ZenCopy работает сразу, без какой-либо настройки. Эта страница — на случай, если вы хотите подогнать его под себя. Первая половина, про окно настроек, — для всех; вторая, про файлы конфигурации, — для опытных пользователей.
Окно настроек
Заголовок раздела «Окно настроек»Откройте его из меню значка в трее или по значку шестерёнки во всплывающем окне. В нём три вкладки: Общие, ИИ и Действия.
- Положение всплывающего окна — в каком углу экрана появляются результаты.
- Тема — светлая / тёмная / как в системе.
- Язык — язык интерфейса (по умолчанию следует за ОС).
- Запускать при входе — чтобы ZenCopy был наготове всякий раз, когда компьютер включён.
- Подтверждение перед отправкой — спрашивать ли один раз, прежде чем изображения или файлы уйдут к ИИ.
Здесь меняется сервис ИИ (провайдер, модель, ключ API). Кнопка Проверить сразу сообщает, работает ли подключение.
На этой вкладке есть и поле О вас. Это место, где можно в нескольких простых фразах, на любом языке, описать свою роль и предпочтения.
Пример: «Продажи. В основном пишу письма клиентам — вежливо, но не сухо, вывод в начале.»
Когда это поле заполнено, каждое действие подстраивает результат под вас. Объяснения приходят на вашем уровне знаний, а черновики возвращаются в предпочитаемом вами тоне. На посторонние задачи это никогда не влияет, и сам текст никогда не появляется в результатах.
Действия
Заголовок раздела «Действия»Список того, «что происходит после двойного копирования».
- Предустановленные действия можно открыть и прочитать — они заодно служат наглядными примерами.
- Для нового действия нужны только название и описание того, что сделать. Например: название «Резюме в 3 строки», инструкция «Суммируй это в 3 строках».
- Не уверены, что хорошо сформулируете инструкцию? Набросайте примерно, чего хотите, и нажмите Черновик с ИИ — настроенный вами ИИ превратит это в аккуратную инструкцию.
- Маршрутизация позволяет выбирать разное действие для каждого вида содержимого (текст / изображение / файлы).
Созданными действиями можно делиться: Экспорт (.md) записывает действие в файл, а получатель просто вставляет его в Импорт или выбирает файл.
Предпочитаете поручить всю работу ИИ? Любой чат с ИИ может написать для вас готовое к импорту действие — вставьте это и заполните пропуск:
Прочитайте https://zencopy.app/llms-full.txt — полную документацию ZenCopy, включая формат файла действия, переменные шаблона и принцип работы маршрутизации. Затем напишите действие ZenCopy, которое делает следующее: [что вы хотите сделать]. Выведите один готовый файл действия (Markdown с frontmatter) в одном блоке кода, готовый для вставки в Настройки → Действия → Импорт в ZenCopy. Если действие имеет смысл только в конкретном приложении или на определенном сайте, добавьте одно предложение с указанием того, какое правило маршрутизации нужно настроить.Блок кода из ответа можно сразу вставлять в Настройки → Действия → Импорт. Если у вас возникли вопросы, на которые нет ответов в документации («может ли ZenCopy вообще делать…?»), один клик упакует соответствующий исходный код — передайте результат тому же ИИ.
Файлы конфигурации (для опытных пользователей)
Заголовок раздела «Файлы конфигурации (для опытных пользователей)»Дальше речь идёт о прямом редактировании текстовых файлов. Всё основное доступно из окна настроек, так что здесь можно спокойно перестать читать.
Файлы читаются из пользовательского каталога конфигурации приложения. Точный путь также выводится в журнал при запуске:
%APPDATA%\app.zencopy~/Library/Application Support/app.zencopy~/.config/app.zencopyЗначения маршрутизации по умолчанию встроены в приложение; routing.json лишь переопределяет их.
Файлы действий работают добавлением:
они определяют новые действия, а встроенные неприкосновенны (локальный файл, претендующий на id встроенного действия, игнорируется).
Правки применяются при следующем срабатывании — перезапуск не нужен.
ai-sdk-catalog.json
Заголовок раздела «ai-sdk-catalog.json»Провайдеры плюс сопоставление role → model.
Домашняя страница формата — ai-sdk-catalog — там документировано каждое поле (включая $schema для проверки и автодополнения в редакторе), а в examples/ есть конфигурации трёх размеров.
Отправные точки в духе ZenCopy (то, что записывает интерфейс настроек, локальная Ollama, роли для действий) — в Рецептах.
Одно требование исходит от самого ZenCopy, а не от формата: roles всегда должен содержать default.
С ним выполняется каждое действие, если во frontmatter не указана другая role, и проверка соединения в настройках пингует именно его.
Ключи API записываются прямо в этот локальный файл (интерфейс настроек пишет тот же формат); они никогда не покидают ваш компьютер.
Переменные окружения не читаются — GUI-приложения запускает ОС, а не ваша оболочка, поэтому переменные, экспортированные в .zshrc и подобных файлах, до них не доходят.
Файл проверяется по схеме при каждом чтении.
Ошибочная правка проявляется понятным сообщением во всплывающем окне и в редакторе настроек — ничего не ломается молча.
routing.json
Заголовок раздела «routing.json»Какое действие обрабатывает какой вид захвата:
плоское сопоставление kind → action плюс необязательный список overrides с более высоким приоритетом (побеждает первое совпадение).
Четыре вида — text, rich_text, image и files; из коробки текст направляется в Zen, а изображения и файлы — в Объяснение.
Плоское сопоставление редактируется в самом приложении (Настройки → Действия → Маршрутизация), так что этот файл нужен только ради overrides.
{ "text": "zencopy-zen", "rich_text": "zencopy-zen", "image": "zencopy-explain", "files": "zencopy-explain", "overrides": [{ "when": { "app_name": "Slack", "min_chars": 200 }, "action": "summarize" }]}Условия when: kind, app_name, exec_name, window_title, url (все с подстановкой *), file_name (шаблон, которому должно соответствовать имя каждого скопированного файла, без учета регистра — например, *.pdf), плюс min_chars / max_chars.
Для захватов image и files модели отправляется само содержимое (в сумме до 10 МБ на захват).
Тип файла определяется по содержимому, а не по имени:
изображения, PDF и аудио прикладываются как есть, а текстовые файлы (Markdown, исходный код, CSV, …) становятся текстом захвата ({{ text }}) и ведут себя ровно так, как если бы вы скопировали их содержимое.
Документы Office (Word, Excel, PowerPoint) также становятся текстом: их содержимое извлекается и отправляется, а макет и изображения — нет.
Кодировки распознаются автоматически, с преобразованием устаревших форматов вроде Shift_JIS и UTF-16.
Всё остальное отклоняется с понятным сообщением.
Полные пути передаются вместе с содержимым, чтобы модель различала файлы и знала, где они находятся.
Поскольку двоичные вложения могут стоить дороже текста, всплывающее окно спрашивает перед их отправкой (текстовые файлы выполняются без вопроса) — подтверждение можно отключить прямо там или в настройках.
actions/*.md
Заголовок раздела «actions/*.md»Один файл = одно действие: YAML-frontmatter + тело промпта на Liquid. Этот же единственный файл служит и форматом обмена — Настройки → Действия → Импорт принимает его как вставленный текст или выбранный файл.
---id: summarizelabel: Резюмеrole: defaultinstructions: Ты — лаконичный помощник.---
Суммируй в 3 строках на языке {{ locale }}:
{{ text }}| Frontmatter | Значение |
|---|---|
id | Имя, на которое ссылается routing.json (по умолчанию — имя файла) — префикс zencopy- зарезервирован за предустановленными действиями |
label | Показывается во всплывающем окне |
role | Роль каталога для запуска (по умолчанию default) |
instructions | Системный промпт (шаблон Liquid) |
Переменные шаблона с примерами значений для абзаца, скопированного в браузере:
| Переменная | Пример |
|---|---|
{{ text }} | Скопированный текст (форматированные HTML-копии становятся Markdown) |
{{ markup }} | HTML/RTF-источник форматированной копии |
{{ format }} | html (или rtf; пусто для обычных копий) |
{{ file_name }} | report.pdf (имя первого скопированного файла) |
{{ file_names }} | Имя каждого скопированного файла, по одному в строке |
{{ file_paths }} | Полный путь к каждому скопированному файлу, по одному в строке |
{{ app_name }} | Safari |
{{ exec_name }} | Safari / chrome.exe |
{{ exec_path }} | /Applications/Safari.app/Contents/MacOS/Safari |
{{ window_title }} | Тарифы – Example |
{{ url }} | https://example.com/pricing (только в браузерах) |
{{ process_id }} | 8123 |
{{ now }} | 2026-07-08 20:15:00 |
{{ locale }} | ru |
Есть и собственный фильтр ZenCopy language_name: {{ locale | language_name }} раскрывается как «Russian», а не «ru», что читается в промпте естественно.
Чтобы увидеть реальные значения, включите в настройках Режим разработчика — переменные шаблона каждого захвата появятся во всплывающем окне в виде JSON.
Простые действия (название и инструкция) можно создавать и из окна настроек; оно записывает ровно этот формат файла.
Продвинутые шаблоны
Заголовок раздела «Продвинутые шаблоны»И frontmatter instructions, и тело — полноценные шаблоны LiquidJS: работают условия, циклы и фильтры.
Одно действие может подстраиваться под то, откуда пришла копия:
---id: context-awarelabel: С учётом контекста---
{% if url contains "github.com" %}Сделай ревью этого кода и укажи один самый серьёзный риск:{% elsif app_name == "Slack" %}Суммируй эту переписку в 2 строках:{% else %}Объясни это на языке {{ locale }}:{% endif %}
{{ text | truncate: 8000 }}Журналы
Заголовок раздела «Журналы»Структурированные журналы (секреты и скопированное содержимое скрываются) идут в терминал при разработке и в ротируемый файл в выпускной версии:
%LOCALAPPDATA%\app.zencopy\logs~/Library/Logs/app.zencopy/~/.local/share/app.zencopy/logs