Единый стандарт чат-экспортов — для Claude Code и Codex.
Переписка с заказчиком, ТЗ в .docx, скрины, транскрипты созвонов складываются в
архив, у которого известно происхождение каждого куска и который проверяется
линтером, а не глазами.
/mnemo:init создать экспорт или принять существующий
/mnemo:import выгрузка, буфер захвата или копипаста → разложить целиком
/mnemo:add-text сообщение или транскрипт → RAW
/mnemo:add-files документы → RAW, текст и вшитые картинки извлекаются
/mnemo:add-screens скриншоты → RAW, байт-в-байт
/mnemo:verify проверить, что архив цел и соответствует стандарту
Это названия операций. В Claude Code они же — команды сессии; в Codex ту же
работу делает навык mnemo:chat-export, вызывая скрипты напрямую. Архив
получается один и тот же, читается без инструмента и проверяется одним линтером.
Вторая половина — про состояние работы, а не про материал:
/mnemo:req требование заказчика: дословно, с доказательством
/mnemo:ask открытый вопрос: что блокирует, кому задан
/mnemo:audit всё ли сделано, как хотел заказчик
/mnemo:gaps чего не хватает и что утрачено
За неё отвечает навык mnemo:work-state. Он поднимается от фраз человека — «всё
ли мы сделали по ТЗ», «я упёрся», «надо спросить», — в обоих хостах и одинаково.
Рабочий контекст разбирается руками и каждый раз чуть по-своему. Через месяц непонятно, что в архиве дословная цитата заказчика, а что чей-то конспект — а решения принимаются по обоим одинаково.
mnemo фиксирует это как формат:
- RAW дословен и неизменен. Каждый файл учтён с
sha256— подмена видна. - Кто есть кто. Реестр людей связывает имя в мессенджере, логин в git и имя
в разговоре; роль
selfотмечает того, кто ведёт архив. - Авторство отделено от текста. Telegram в копипасте подписывает пересланное
сообщение тем, кто переслал. На живом чате это затронуло 16 сообщений из 21 —
требования заказчика достались бы его руководителю. Поле
attributionделает такую подмену видимой и запрещает цитировать по ложному автору. - Повторный импорт безопасен. Выгрузил чат заново — примется только новое, ничего не задвоится.
- У каждого материала есть достоверность.
verbatim,reconstructed,digest,placeholder. Конспект нельзя процитировать как чьи-то слова — это запрещено стандартом, а не оставлено на внимательность. - Пропуски видны. Не удалось достать оригинал — заводится запись, а не тишина. «Не добыт» и «утрачен» — разные вещи: первое задача, второе факт.
INDEX.mdгенерируется. Рукописный индекс молча расходится с содержимым; здесь он производный от манифеста, и разойтись не может.- Изъятия — часть формата. Что удалено, почему, обратимо ли, где лежит оригинал. Без этого архив нельзя показать.
- Данные не уезжают в git. Каталог экспорта исключается из репозитория хост-проекта до того, как в нём появится первый файл.
claude plugin marketplace add ZenonEl/mnemo
claude plugin install mnemo@mnemoТо же из сессии: /plugin marketplace add ZenonEl/mnemo, затем
/plugin install mnemo@mnemo. Обновление — claude plugin update mnemo@mnemo
и рестарт.
codex plugin marketplace add ZenonEl/mnemo
codex plugin add mnemo@mnemoОбновление — codex plugin marketplace upgrade, затем codex plugin add заново.
Копировать репозиторий в ~/.codex/skills/ не надо: копия — второй экземпляр
стандарта, расходящийся с оригиналом молча.
В обоих хостах скил зовётся mnemo:chat-export и читается из одного и того
же файла.
Зависимостей нет — скрипты работают на голой стандартной библиотеке Python 3.
<export>/
├── INDEX.md производный: хронология, участники, хвосты
├── MANIFEST.json источник истины о содержимом
├── summaries/
│ ├── <дата>_chat-summary.md о чём договорились
│ ├── attachments-summary.md что решено в документах, на что сверяться
│ ├── conventions.md правила работы + кто и когда их установил
│ ├── findings-log.md проверенные факты и куда они донесены
│ └── redactions.md производный: что изъято и почему
└── raw/
├── messages/ YYYY-MM-DD_<author>[_<label>].md
├── attachments/ оригиналы + _extracted-text/
├── screenshots/ оригиналы + from-docx/<doc>/
└── voice/
| Команда | Что делает |
|---|---|
/mnemo:init |
создать экспорт или принять существующий без потери содержимого |
/mnemo:import |
выгрузка Telegram, буфер захвата herald или копипаста: авторство, вложения, дедупликация |
/mnemo:add-text |
сообщение, заметка, транскрипт |
/mnemo:add-files |
документы; из .docx/.xlsx достаётся текст и вшитые изображения |
/mnemo:add-screens |
скриншоты без пересжатия |
/mnemo:note |
проверенный факт в findings-log |
/mnemo:rule |
рабочее правило в conventions |
/mnemo:redact |
зарегистрировать изъятие |
/mnemo:remove |
снять запись с учёта, не правя манифест руками |
/mnemo:sync |
пересобрать производные из манифеста |
/mnemo:req |
требование заказчика: дословно, с доказательством |
/mnemo:ask |
открытый вопрос: что блокирует, кому задан |
/mnemo:audit |
всё ли сделано, как хотел заказчик — с доказательствами |
/mnemo:verify |
линтер: 20 правил стандарта |
/mnemo:gaps |
чего не хватает и что утрачено |
/mnemo:people |
реестр людей: связать имена одного человека из разных источников |
/mnemo:publish |
публичный срез без рабочих данных |
Под Codex команд с таким именем нет — навык выполняет ту же операцию скриптом из
scripts/. Список выше читается как перечень возможностей, а не как синтаксис
одного хоста.
Команды набирает человек. Навык модель поднимает сама — по тому, о чём идёт разговор. Их два, и делят они работу по намерению:
| Навык | Когда поднимается |
|---|---|
mnemo:chat-export |
приём материала: сохранить переписку, разобрать вложения, принять существующий экспорт |
mnemo:work-state |
состояние работы: что от нас хотят, всё ли сделано, что блокирует, что спросить |
Разделены они не для красоты. Пока описание было одно, все его триггеры были про приём материала — проверяющая половина не поднималась вовсе, а под Codex, где слэш-команд нет, её и вызвать было нечем.
SPEC/STANDARD.md— раскладка, контрактitem, правила; версия объявлена тамSPEC/PROVENANCE.md— модель достоверности и правила цитированияSPEC/CITATION.md— формат ссылокctx:<slug>#<id>SPEC/QUERY.md— контракт чтения: как берут данные сторонние инструментыSPEC/CHANGELOG.md— версии
Стандарт — источник истины. Навыки, команды и скрипты — его потребители; расхождение между ними и текстом стандарта считается дефектом инструмента.
Три реальных экспорта, сделанных руками до появления стандарта, — приняты без потери содержимого, линтер проходит на всех: рабочая переписка с приёмкой проекта (документы с вшитыми скринами), доска задач из группового чата, и реконструкция удалённой переписки из логов сессий с четырьмя уровнями достоверности в одном файле.
Приёмка нашла в стандарте два пробела, которых проектирование не заметило, — оба
закрыты и описаны в SPEC/CHANGELOG.md.
mnemo — один из трёх инструментов вокруг рабочего контекста. Разделяются
три опубликованных формата: ссылка ctx:<slug>#<id>, сам манифест и
контракт чтения — все описаны в SPEC/ и
версионированы. Ничего исполняемого не разделяется: ни библиотеки, ни процесса,
ни базы. Потребитель вызывает команду и получает JSON — так же, как вызвал бы
gh; зависимость идёт на опубликованный формат вывода, и mnemo о потребителе
не знает.
| Проект | Роль |
|---|---|
| mnemo | архив материала с провенансом; факты, решения, вопросы |
ephemeris |
дейлики: состояние дня и синк в GitHub issues |
herald |
канал наружу и захват рабочих чатов в буфер, откуда их берёт импорт |
BACKLOG.md — векторный поиск, MCP-сервер, расшифровка голосовых,
парсер Telegram Desktop, автоматическая деперсонализация. Всё это ложится поверх
стандарта и не требует его переписывания.
Общая картина, частью которой это является, — docs/VISION.md.
CONTRIBUTING.md — в том числе главное: примеры только
обезличенные. Настоящие имена проектов, людей и организаций в репозиторий не
попадают ни в каком виде.
Репозиторий лицензирован по частям:
| Путь | Лицензия |
|---|---|
SPEC/ — текст стандарта |
CC BY-SA 4.0 |
| всё остальное — навыки, команды, скрипты | AGPL-3.0-or-later |
Стандарт — текст, и вирусность нужна на его производные редакции. Код — под AGPL, потому что осмысленный сценарий развития (MCP-сервер поверх архива) иначе позволял бы поднять его как закрытый сервис.