Перейти к содержимому

Настройка

ZenCopy работает сразу, без какой-либо настройки. Эта страница — на случай, если вы хотите подогнать его под себя. Первая половина, про окно настроек, — для всех; вторая, про файлы конфигурации, — для опытных пользователей.

Откройте его из меню значка в трее или по значку шестерёнки во всплывающем окне. В нём три вкладки: Общие, ИИ и Действия.

  • Положение всплывающего окна — в каком углу экрана появляются результаты.
  • Тема — светлая / тёмная / как в системе.
  • Язык — язык интерфейса (по умолчанию следует за ОС).
  • Запускать при входе — чтобы ZenCopy был наготове всякий раз, когда компьютер включён.
  • Подтверждение перед отправкой — спрашивать ли один раз, прежде чем изображения или файлы уйдут к ИИ.

Здесь меняется сервис ИИ (провайдер, модель, ключ API). Кнопка Проверить сразу сообщает, работает ли подключение.

На этой вкладке есть и поле О вас. Это место, где можно в нескольких простых фразах, на любом языке, описать свою роль и предпочтения.

Пример: «Продажи. В основном пишу письма клиентам — вежливо, но не сухо, вывод в начале.»

Когда это поле заполнено, каждое действие подстраивает результат под вас. Объяснения приходят на вашем уровне знаний, а черновики возвращаются в предпочитаемом вами тоне. На посторонние задачи это никогда не влияет, и сам текст никогда не появляется в результатах.

Список того, «что происходит после двойного копирования».

  • Предустановленные действия можно открыть и прочитать — они заодно служат наглядными примерами.
  • Для нового действия нужны только название и описание того, что сделать. Например: название «Резюме в 3 строки», инструкция «Суммируй это в 3 строках».
  • Не уверены, что хорошо сформулируете инструкцию? Набросайте примерно, чего хотите, и нажмите Черновик с ИИ — настроенный вами ИИ превратит это в аккуратную инструкцию.
  • Маршрутизация позволяет выбирать разное действие для каждого вида содержимого (текст / изображение / файлы).

Созданными действиями можно делиться: Экспорт (.md) записывает действие в файл, а получатель просто вставляет его в Импорт или выбирает файл.

Предпочитаете поручить всю работу ИИ? Любой чат с ИИ может написать для вас готовое к импорту действие — вставьте это и заполните пропуск:

Прочитайте https://zencopy.app/llms-full.txt — полную документацию ZenCopy, включая формат файла действия, переменные шаблона и принцип работы маршрутизации. Затем напишите действие ZenCopy, которое делает следующее: [что вы хотите сделать]. Выведите один готовый файл действия (Markdown с frontmatter) в одном блоке кода, готовый для вставки в Настройки → Действия → Импорт в ZenCopy. Если действие имеет смысл только в конкретном приложении или на определенном сайте, добавьте одно предложение с указанием того, какое правило маршрутизации нужно настроить.

Блок кода из ответа можно сразу вставлять в Настройки → Действия → Импорт. Если у вас возникли вопросы, на которые нет ответов в документации («может ли ZenCopy вообще делать…?»), один клик упакует соответствующий исходный код — передайте результат тому же ИИ.

Файлы конфигурации (для опытных пользователей)

Заголовок раздела «Файлы конфигурации (для опытных пользователей)»

Дальше речь идёт о прямом редактировании текстовых файлов. Всё основное доступно из окна настроек, так что здесь можно спокойно перестать читать.

Файлы читаются из пользовательского каталога конфигурации приложения. Точный путь также выводится в журнал при запуске:

%APPDATA%\app.zencopy

Значения маршрутизации по умолчанию встроены в приложение; routing.json лишь переопределяет их. Файлы действий работают добавлением: они определяют новые действия, а встроенные неприкосновенны (локальный файл, претендующий на id встроенного действия, игнорируется). Правки применяются при следующем срабатывании — перезапуск не нужен.

Провайдеры плюс сопоставление role → model. Домашняя страница формата — ai-sdk-catalog — там документировано каждое поле (включая $schema для проверки и автодополнения в редакторе), а в examples/ есть конфигурации трёх размеров. Отправные точки в духе ZenCopy (то, что записывает интерфейс настроек, локальная Ollama, роли для действий) — в Рецептах.

Одно требование исходит от самого ZenCopy, а не от формата: roles всегда должен содержать default. С ним выполняется каждое действие, если во frontmatter не указана другая role, и проверка соединения в настройках пингует именно его.

Ключи API записываются прямо в этот локальный файл (интерфейс настроек пишет тот же формат); они никогда не покидают ваш компьютер. Переменные окружения не читаются — GUI-приложения запускает ОС, а не ваша оболочка, поэтому переменные, экспортированные в .zshrc и подобных файлах, до них не доходят. Файл проверяется по схеме при каждом чтении. Ошибочная правка проявляется понятным сообщением во всплывающем окне и в редакторе настроек — ничего не ломается молча.

Какое действие обрабатывает какой вид захвата: плоское сопоставление 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. Всё остальное отклоняется с понятным сообщением. Полные пути передаются вместе с содержимым, чтобы модель различала файлы и знала, где они находятся. Поскольку двоичные вложения могут стоить дороже текста, всплывающее окно спрашивает перед их отправкой (текстовые файлы выполняются без вопроса) — подтверждение можно отключить прямо там или в настройках.

Один файл = одно действие: YAML-frontmatter + тело промпта на Liquid. Этот же единственный файл служит и форматом обмена — Настройки → Действия → Импорт принимает его как вставленный текст или выбранный файл.

---
id: summarize
label: Резюме
role: default
instructions: Ты — лаконичный помощник.
---
Суммируй в 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-aware
label: С учётом контекста
---
{% if url contains "github.com" %}
Сделай ревью этого кода и укажи один самый серьёзный риск:
{% elsif app_name == "Slack" %}
Суммируй эту переписку в 2 строках:
{% else %}
Объясни это на языке {{ locale }}:
{% endif %}
{{ text | truncate: 8000 }}

Структурированные журналы (секреты и скопированное содержимое скрываются) идут в терминал при разработке и в ротируемый файл в выпускной версии:

%LOCALAPPDATA%\app.zencopy\logs