Моя CRM в Obsidian на плагине Operon
Если вам интересна тема персональных систем управления знаниями и задачами — переходите в мой тг-канал. Там я разбираю инструменты, публикую кейсы и делюсь тем, что работает на практике, а не только выглядит красиво на скриншотах.
В начале сентября я провёл в канале интерактив: предложил подписчикам написать в комментариях свою профессию и пообещал каждому прислать эскиз системы в Obsidian под его работу. Эскиз — это буклет на 3 страницы: какие разделы нужны хранилищу юриста, психолога или инженера, как между ними ходит информация и какими плагинами это собирается. Профессию назвали 20 человек. Каждому ушёл буклет в личку, дальше пошли переписки и записи на консультации. Через неделю я уже не помнил, кому что отправил и кому обещал ответить. До этого лидов я не вёл никак, их было мало и все помещались в голове. Отдельный сервис заводить не хотелось: задачи, клиентские проекты и заметки по встречам у меня и так в Obsidian. В этой статье расскажу, как я собрал CRM на плагине Operon и что в нём допилил. Следующие раунды интерактива буду объявлять в канале.

Почему Operon
Operon — плагин для задач и проектов. Задача в нём бывает строкой с чекбоксом или отдельной заметкой, и одной командой одна форма превращается в другую. Над всеми задачами хранилища плагин строит сводные виды: таблицу, канбан, календарь, диаграмму Ганта.
Главное, за что я его выбрал, — он настраивается под свою работу. Воронки и их стадии задаются в настройках, и у каждой воронки свой канбан. Свои поля заводятся там же, с русскими именами и иконками, и показываются в редакторе задачи, на карточках канбана и в колонках таблиц. Фильтры и таблицы сохраняются пресетами и встраиваются в любую заметку.
В Bases с версии 1.14 тоже есть канбан, и воронку со стадиями там можно собрать самому. В Operon она есть сразу.
Карточка человека
На каждого, кто мне написал, заводится заметка в папке Люди/. Для Operon это задача-файл: во фронтматтере у неё operonId и status, а значит, она появляется на канбане и в таблицах.
---
operonId: z6s17jf
status: Консультация.Проведена
профессия:
демо-кейс:
links:
- https://t.me/username
источник: Рекомендация
---
Под фронтматтером идут разделы.
-
«Что известно» — ссылки на заметки по человеку: исходные данные, план консультации, конспект, маршрут сборки системы;
-
«Задачи» — задачи по этому лиду или клиенту;
-
«Переписка» — выдержки из диалога, если к ним придётся вернуться.
CRM в Operon — карточка человека.png
Стадия подсказывает следующий шаг
Статус в Operon состоит из двух частей: имя воронки (в плагине она называется пайплайном) и стадия. У меня 3 воронки:
|
Воронка |
Стадии |
|---|---|
|
Лид |
Новый, Буклет отправлен, Диалог, Отпал |
|
Консультация |
Запрос, Назначена, Проведена, Думает, Отвалилась |
|
Проект |
Диагностика, Проектирование, Смета, Сборка, Передача, Сопровождение, Закрыт, Завершён, Отвалился |
Под каждую воронку свой канбан, колонки на нём совпадают со стадиями.
Лид становится клиентом, когда я меняю ему статус с Лид.Диалог на Консультация.Запрос. Карточка пропадает с канбана «Лиды» и появляется на канбане «Консультации». Отдельной операции переноса нет, файл остаётся на месте.
Типовые задачи вида «отправить буклет», «ответить», «напомнить о себе» я на людей не завожу: канбан их уже показывает. Карточка в колонке «Новый» значит, что буклет не отправлен. Карточка в колонке «Диалог» — ход за мной или пора написать. Поэтому в разделе «Задачи» живёт только то, что из стадии не следует. Например, собрать схему под профессию, которой нет в наборе буклетов.
Канбаны и таблицы
Канбаны: «Лиды», «Консультации», «Проекты». Открываю «Лиды», вижу, у кого какая стадия, и перетаскиваю карточку, когда что-то сдвинулось.
Для общего обзора есть заметка CRM.md с тремя таблицами Operon: клиенты в работе, лиды, архив. Таблица вставляется в заметку блоком кода со ссылкой на сохранённый пресет:
# 🤝 Клиенты
```operon-table
presetId: "tp_clients"
```
# 🎯 Лиды
```operon-table
presetId: "tp_leads"
```
# 📦 Архив
```operon-table
presetId: "tp_archive"
```
У каждого пресета свой фильтр по статусу. В «Лидах» статус содержит Лид. и не содержит Отпал. В «Клиентах» собраны статусы Проект. и Консультация. без финальных стадий. Финальные и отпавшие собраны в «Архиве». Архив вынесен в отдельную таблицу, потому что в одной таблице группы сортируются по порядку воронок, и закрытые проекты оказываются выше активных. CRM.md встроена в главную заметку бизнес-раздела, так что все люди видны с первого экрана.

Ещё одна таблица живёт в заметке раунда интерактива. Её фильтр — поле «Источник» со значением Интерактив 2026-09-04. Она показывает всех, кто пришёл из раунда, с их стадиями, и заодно служит счётчиком: сколько получили буклет, сколько дошли до консультации.
Что я допиливал в Operon
Из коробки Operon закрыл канбаны, таблицы и воронки. Остальное пришлось настраивать и дописывать.
Свои поля
Для лида мне нужны профессия, буклет, который я ему отправил, и откуда он пришёл. Я завёл 3 поля: «Профессия», «Демо-кейс» и «Источник», и для каждого включил показ в редакторе задачи, в окне создания и на чипах. Ещё нужна ссылка на телеграм, но под неё своё поле не понадобилось. Кликабельной внешняя ссылка бывает только в системном поле Operon links, поэтому телеграм лежит там.
Ключ у поля «Источник» — leadSource. Слово source занято системной колонкой Operon, и под этим ключом своё поле не заводится. Во фронтматтере поле всё равно называется «источник»: видимое имя задаётся отдельно от ключа.
Чипы
Чип — это плашка с иконкой и значением поля. Панель свойств Obsidian я скрываю, внешне она мне не нравится, поэтому данные о человеке видны только чипами. С ними пришлось разбираться дольше всего.
Набор чипов в Operon настраивается отдельно для каждого места, где показывается задача: для карточки канбана, для строки задачи в заметке, для списков фильтров. Наверху заметки-задачи плагин выводит блок со списком её подзадач, и чипы там берутся из настроек списков фильтров.
Сначала на странице человека чипов было много. Читать их там незачем, всё то же самое есть в шапке ниже. Я оставил на странице один чип links со ссылкой на телеграм: по нему удобно кликнуть и сразу открыть переписку. На карточке канбана, наоборот, профессия видна текстом, а ссылка, демо-кейс и источник — иконками. Чип статуса там выключен: статус и так понятен по колонке.


Шапка карточки на Meta Bind
Менять данные через чипы неудобно в двух местах. Клик по чипу стадии листает стадии только внутри текущей воронки, и перевести лида в консультацию так нельзя, только через полный редактор задачи. А ссылку в чипе links нельзя поправить, только удалить и добавить заново.
Поэтому для правки у карточки есть шапка: строки с полями ввода плагина Meta Bind, которые пишут прямо во фронтматтер:
🎯 Стадия: `INPUT[inlineSelect(option(Лид.Новый), option(Лид.Буклет отправлен), option(Лид.Диалог), option(Лид.Отпал), option(Консультация.Запрос), option(Консультация.Назначена), option(Консультация.Проведена), option(Консультация.Думает), option(Консультация.Отвалилась), option(Проект.Диагностика), option(Проект.Проектирование), option(Проект.Смета), option(Проект.Сборка), option(Проект.Передача), option(Проект.Сопровождение), option(Проект.Закрыт), option(Проект.Завершён), option(Проект.Отвалился)):status]`
💼 Профессия: `INPUT[text:профессия]`
🗂 Демо-кейс: `INPUT[inlineListSuggester(option([[Юрист]]), option([[Психолог]]), option([[Инженер]])):демо-кейс]`
🌱 Источник: `INPUT[inlineSelect(option(Интерактив 2026-09-04), option(Входящий), option(Хабр), option(Telegram), option(Рекомендация)):источник]`
✈️ Телеграм: `INPUT[text:links[0]]`
В выпадающем списке «Стадия» лежат стадии всех трёх воронок, им я и перевожу человека из одной в другую. «Демо-кейс» — ссылка на буклет, который я ему отправил (в примере список сокращён, у меня там 24 профессии). «Телеграм» правит ссылку в links как обычный текст.
Шаблон новой карточки
Новую заметку в Люди/ создаёт Templater по шаблону папки:
<%*
const name = await tp.system.prompt("Имя человека");
if (name) await tp.file.rename(name);
-%>
---
operonId: <% Math.random().toString(36).slice(2,9) %>
status: Лид.Новый
профессия:
демо-кейс:
links:
- https://t.me/
источник:
---
Ниже в шаблоне та же шапка на Meta Bind и пустые разделы.
В шаблоне 2 решения, до которых я дошёл не сразу.
-
Имя спрашивается до отрисовки заметки. Если создать файл «Без названия» и переименовать его потом, виджеты Meta Bind перестают работать до переоткрытия вкладки. Поэтому шаблон сначала спрашивает имя и переименовывает файл, а потом выводит содержимое.
-
operonIdгенерируется самим шаблоном. В документации Operon есть заглушка{{operonId}}, но плагин подставляет её только в своих командах. В шаблоне Templater она остаётся текстом, и заметка для Operon задачей не становится. СтрокаMath.random().toString(36).slice(2,9)выдаёт 7 случайных символов из цифр и латиницы, того же вида, что у плагина.
Редактор задачи в узком окне
Карточку человека удобно править в редакторе задачи Operon: слева поля, справа текст заметки. Когда окно Obsidian уже 980 пикселей, текст заметки ложится поверх панели полей и закрывает её шапку вместе с кнопкой, которая переключает поля и текст. Вернуться к полям становится нечем. Это чинит CSS-сниппет: он закрепляет шапку панели полей и опускает текст заметки ниже неё.
@media (max-width: 979px) {
.operon-task-editor-shell.has-file-body .operon-task-editor-title-row {
position: sticky;
top: 0;
z-index: 6;
background: var(--background-primary);
}
.operon-task-editor-shell.has-file-body.is-file-body-visible .operon-task-editor-file-panel,
.operon-task-editor-shell.has-file-body .operon-task-editor-file-panel-backdrop.is-visible {
top: 46px;
}
}
Для желающих: напоминания Operon в iPhone
Схема работает только в связке Mac и iPhone. Если у вас другие устройства, блок можно пропустить.
У Operon есть напоминания: к задаче можно привязать время или правило вроде «за день до срока». Так я ставлю себе пинг лиду, которому пора написать. Чтобы напоминание пришло на iPhone, когда Obsidian закрыт, Operon записывает список ближайших напоминаний в файл, а быстрая команда iOS переносит их в стандартные Напоминания. Но этот файл плагин обновляет только на самом телефоне и только пока там открыт Obsidian. Поэтому файл вместо плагина пишет скрипт на Mac. Ограничение у схемы одно: пока Mac выключен или спит, файл не обновляется, и новые напоминания на iPhone не появляются.
Как это устроено.
-
На Mac каждые 5 минут через launchd запускается скрипт на Python. Он обходит заметки хранилища и собирает открытые задачи с полями
reminderDatetimesиreminderRules— и строки с чекбоксом, и задачи-файлы. -
Правила вида
dateDue.1dскрипт пересчитывает в конкретное время: дата срока минус 1 день. В выдачу попадает окно от 3 дней назад до 7 дней вперёд. -
Результат пишется в файл
.operon-mirror.jsonв корне хранилища в формате, который повторяет собственный файл Operon. Хранилище лежит в iCloud, и файл синхронизируется на iPhone. -
Утром автоматизация iOS запускает быструю команду. Она читает файл и добавляет задачи в список «Obsidian» в Напоминаниях.
Грабли плагина
-
Статус всегда выводится целиком:
Лид.Диалог. Все воронки пишут стадию в одно полеstatus, и чтобы стадии разных воронок не путались, Operon добавляет к ним имя воронки. Так статус выглядит везде: на чипе карточки, в колонке таблицы, в выпадающем списке. В таблице колонка статуса из-за этого получается широкой, аКонсультация.Отвалиласьчитается хуже, чем просто «Отвалилась». Настройки, которая прятала бы имя воронки, нет: я искал и в настройках, и в коде плагина. Оставил как есть. Одно поле на все воронки и даёт перевод лида в клиенты одной сменой статуса, и за это я готов терпеть длинные подписи. -
Meta Bind не узнаёт значения с точками. Источник
Интерактив 04.09.2026виджет не сопоставлял с вариантом из списка: показывал пустое поле, а по клику подставлял первый вариант. С датой через дефисы,2026-09-04, работает.
Что получилось
До сентября лиды у меня не велись никак. Теперь у каждого человека есть карточка, все они видны на одном канбане, и ни один не потерялся. По колонке «Диалог» видно, кому я должен ответ.
Если узнали себя — напишите в комментариях, как вы сейчас ведёте клиентов и в каком месте теряете. Расскажу, что можно докрутить под ваш контекст.
Больше разборов и кейсов — в моём тг-канале.
Автор: psheno322

