Read in:
Русский

memcli — одна команда для локальной памяти агента

Одна команда запускает локальный сервер trip2g, выпускает административный API-ключ через HAT и стартует двусторонний sidecar trip2g-sync --watch. Агент читает и пишет обычные Markdown-файлы, сервер индексирует их в реальном времени. S3, почта и dev-режим не нужны.

Запуск

Собранный бандл поставляется в репозитории. Шаг сборки не требуется:

node cli/memcli/dist/memcli.js up --folder ./memory-vault

Что делает up:

  1. Создаёт ./memory-vault/.trip2g-memory/ (режим 700, директория состояния) и генерирует случайный JWT_SECRET — при повторном запуске значение переиспользуется, поэтому up идемпотентен.
  2. Запускает Docker-контейнер trip2g-memory с STORAGE_BACKEND=local — ассеты хранятся на диске, S3 и MinIO не нужны.
  3. Выпускает административный API-ключ через HAT (Hot Auth Token) — без адреса электронной почты и без флага DEV=true.
  4. Записывает ключ в .obsidian/plugins/trip2g/data.json внутри хранилища.
  5. Запускает trip2g-sync --watch как фоновый процесс, синхронизирующий хранилище и сервер в обоих направлениях.
  6. Печатает: memory live — web: http://localhost:24081 read/write .md in ./memory-vault

После запуска агент работает с папкой хранилища через обычные инструменты Write/Read/Grep. Специальный API памяти не нужен.

Предварительный просмотр без побочных эффектов:

node cli/memcli/dist/memcli.js up --folder ./memory-vault --dry-run

Сборка из исходников (только при изменении кода CLI):

cd cli/memcli && npm install && npm run codegen && npm run build

codegen читает GraphQL-схему из репозитория — запущенный сервер не нужен. Результат: обновлённый dist/memcli.js.

Субкоманды

Команда Действие
up Запустить сервер + sync-наблюдатель, выпустить API-ключ (по умолчанию)
down Остановить контейнер и наблюдатель
status Показать статус контейнера и наблюдателя
logs Снимок логов контейнера (для диагностики)
key Ротация API-ключа — выпускает новый, отключает предыдущий
daily "<текст>" Добавить мысль в дневную заметку
log <файл> "<текст>" Добавить мысль в раздел сегодняшнего дня именованной заметки
hub <url> Подключить дополнительный удалённый hub федерации к хранилищу
mcp Запустить как MCP stdio-сервер (также определяется автоматически при пайпе stdin)

Флаги для up:

Флаг По умолчанию Описание
--folder <путь> ./memory-vault Директория хранилища
--port <n> 24081 Публичный порт
--email <адрес> memory@local Email владельца, встраивается в HAT JWT
--image <ref> ghcr.io/trip2g/trip2g:latest Docker-образ
--public-url <url> http://localhost:<port> Переопределить PUBLIC_URL
--no-hub Не записывать hub-заметку для федерации
--hub-url <url> https://trip2g.com/_system/mcp Указать другой MCP-эндпоинт для хаба
--name <id> Запустить изолированный экземпляр trip2g-memory-<id>; передайте тот же --name в down/status/logs, а также отдельный --port
--dry-run Вывести команды без выполнения

Для запуска двух экземпляров одновременно дайте второму --name и отдельный --port. Состояние хранится per---folder, поэтому у каждого экземпляра свой хранилище:

node cli/memcli/dist/memcli.js up --folder ./vault-blog --name blog --port 24181
node cli/memcli/dist/memcli.js up --folder ./vault-work --name work --port 24281
# остановить по имени:
node cli/memcli/dist/memcli.js down --name blog

Флаги для daily / log:

Флаг По умолчанию Описание
--folder <путь> ./memory-vault Директория хранилища
--context <n> 15 Строк заметки, которые выводятся после записи

Фиксация мыслей: daily vs log

Эти две команды — основной интерфейс для записи мыслей и наблюдений агента в ходе сессии.

memcli daily "<текст>"

Добавляет текст в дневную заметку дня: daily/<ГГГГ-ММ-ДД>.md — общее рабочее пространство для мыслей текущего дня.

  • Первая запись дня добавляется без временной метки.
  • Последующие записи того же дня получают префикс ЧЧ:ММ к первой строке.

Используйте daily для всего, что нужно зафиксировать прямо сейчас без привязки к конкретной теме: случайное наблюдение, решение, напоминание.

node cli/memcli/dist/memcli.js daily "деплой только в нерабочие часы — прод на одной маленькой VM"

memcli log <файл> "<текст>"

Добавляет текст под заголовком секции ### [[<ГГГГ-ММ-ДД>]] в файл <хранилище>/<файл>.mdappend-only журнал эволюции одной идеи или темы со временем.

  • Первая запись под новым заголовком дня добавляется без временной метки.
  • Последующие записи того же дня получают префикс ЧЧ:ММ.
  • Перезапись запрещена — только добавление. История того, когда появилась каждая мысль, сохраняется.
node cli/memcli/dist/memcli.js log work/deploy-rules "подтверждено: деплой в пиковые часы не допускается"

На следующий день новая запись появится под заголовком ### [[2026-06-23]] в том же файле, сохраняя хронологическую последовательность.

Антипаттерн: использовать log для перезаписи или обобщения заметки — это уничтожает информацию о том, когда изменилась каждая мысль. Записи должны быть атомарными. Для изменения структурированного содержимого редактируйте заметку напрямую через Write/Edit.

Обе команды пишут непосредственно в папку хранилища — запущенный trip2g-sync --watch подхватывает изменение примерно за 500 мс и отправляет его на сервер.

Хаб trip2g.com

При первом запуске up записывает в хранилище файл hub.md со следующим frontmatter:

mcp_federation_kb_url: https://trip2g.com/_system/mcp

Это подключает локальный MCP-эндпоинт к опубликованной базе знаний trip2g.com через федерацию MCP. Любой агент (или MCP-клиент), подключившийся к http://localhost:24081/_system/mcp, может обращаться к документации trip2g.com — включая документацию самой системы памяти — не выходя за пределы локальной памяти. Это федерация, а не копия.

hub.md — обычная Markdown-заметка. Удаление файла убирает федеративную связь при следующем цикле синхронизации.

  • --no-hub — не создавать хаб вообще.
  • --hub-url <url> — федерировать к другой базе знаний.
node cli/memcli/dist/memcli.js up --folder ./memory-vault --hub-url https://example.com/_system/mcp

Подключить собственный удалённый хаб

Вы можете добавить федерацию с вашим собственным экземпляром trip2g (или любым другим) — наряду с хабом trip2g.com по умолчанию. Несколько хабов сосуществуют: каждый получает собственный файл заметки.

node cli/memcli/dist/memcli.js hub https://demo.lahab.cc/_system/mcp

Команда записывает hub-demo.lahab.cc.md в хранилище с полями free: true (обязательно для обнаружения заметки при сканировании федерации) и mcp_federation_kb_url: https://demo.lahab.cc/_system/mcp. После того как запущенный демон --watch отправит заметку на сервер, инструмент federated_search будет также обращаться к вашему хабу.

Для краткого идентификатора используйте --id:

node cli/memcli/dist/memcli.js hub https://demo.lahab.cc/_system/mcp --id my-team

Для предпросмотра без записи — --dry-run:

node cli/memcli/dist/memcli.js hub https://demo.lahab.cc/_system/mcp --folder ./memory-vault --dry-run

MCP-инструмент memory_bind_hub делает то же самое в рамках MCP-сессии.

Замечания:

  • Поле free: true добавляется автоматически — не удаляйте его, иначе сканер федерации проигнорирует заметку.
  • Повторный запуск hub с тем же URL перезаписывает заметку (обновляя id или содержимое).
  • Файл по умолчанию hub.md (trip2g.com) и дополнительные hub-<host>.md сосуществуют независимо.

Режим MCP

Запустите memcli с пайпом stdin или передайте субкоманду mcp — и memcli становится MCP stdio-сервером: JSON-RPC 2.0, реализован вручную, без внешних зависимостей.

# Явный запуск
node cli/memcli/dist/memcli.js mcp

# Автоопределение при пайпе stdin (например, от MCP-клиента)
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | node cli/memcli/dist/memcli.js

MCP-сервер предоставляет все команды как инструменты:

Инструмент Действие
memory_up Запустить сервер (идемпотентно)
memory_down Остановить сервер и наблюдатель
memory_status Проверить статус
memory_logs Снимок логов контейнера
memory_key Ротация API-ключа
memory_daily Добавить запись в дневную заметку
memory_log Добавить запись в журнал именованной заметки

Это позволяет агенту управлять собственной инфраструктурой памяти через вызовы MCP-инструментов — удобно, когда агент подключён к MCP-эндпоинту локального сервера и хочет управлять им без отдельной CLI-сессии.

Просмотр в браузере

URL, выведенный командой up (например, http://localhost:24081), открывает хранилище памяти как навигируемый сайт. Удобно для просмотра написанного агентом.

Добавьте ?#!live_follow=1 к URL любой страницы — браузер перейдёт в cinema-режим и будет автоматически переходить к той заметке, которую агент редактирует в данный момент:

http://localhost:24081/?#!live_follow=1

Связанные страницы

  • ru/user/agent-memory — полная настройка памяти для агента: подключение MCP, процесс поиска → expand → note_html, экономия токенов
  • en/user/local-quickstart — справочник по sync CLI, флаг --watch, фильтры include/exclude